[Midnightbsd-cvs] src [6434] vendor/perl/dist: finish merge of 5.18.1.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Dec 1 23:27:55 EST 2013
Revision: 6434
http://svnweb.midnightbsd.org/src/?rev=6434
Author: laffer1
Date: 2013-12-01 23:27:49 -0500 (Sun, 01 Dec 2013)
Log Message:
-----------
finish merge of 5.18.1. add missing files
Added Paths:
-----------
vendor/perl/dist/Porting/README.pod
vendor/perl/dist/Porting/acknowledgements.pl
vendor/perl/dist/Porting/bisect-example.sh
vendor/perl/dist/Porting/bisect-runner.pl
vendor/perl/dist/Porting/bisect.pl
vendor/perl/dist/Porting/exercise_makedef.pl
vendor/perl/dist/Porting/leakfinder.pl
vendor/perl/dist/Porting/make-rmg-checklist
vendor/perl/dist/Porting/make_modlib_cpan.pl
vendor/perl/dist/Porting/new-perldelta.pl
vendor/perl/dist/Porting/pod_lib.pl
vendor/perl/dist/Porting/pod_rules.pl
vendor/perl/dist/Porting/release_announcement_template.txt
vendor/perl/dist/Porting/sync-with-cpan
vendor/perl/dist/Porting/todo.pod
vendor/perl/dist/cpan/Archive-Extract/t/src/x.Z
vendor/perl/dist/cpan/Archive-Extract/t/src/x.ear
vendor/perl/dist/cpan/Archive-Extract/t/src/x.war
vendor/perl/dist/cpan/Archive-Extract/t/src/y.ear
vendor/perl/dist/cpan/Archive-Extract/t/src/y.war
vendor/perl/dist/cpan/B-Lint/
vendor/perl/dist/cpan/B-Lint/lib/
vendor/perl/dist/cpan/B-Lint/lib/B/
vendor/perl/dist/cpan/B-Lint/lib/B/Lint/
vendor/perl/dist/cpan/B-Lint/lib/B/Lint/Debug.pm
vendor/perl/dist/cpan/B-Lint/lib/B/Lint.pm
vendor/perl/dist/cpan/B-Lint/t/
vendor/perl/dist/cpan/B-Lint/t/lint.t
vendor/perl/dist/cpan/B-Lint/t/pluglib/
vendor/perl/dist/cpan/B-Lint/t/pluglib/B/
vendor/perl/dist/cpan/B-Lint/t/pluglib/B/Lint/
vendor/perl/dist/cpan/B-Lint/t/pluglib/B/Lint/Plugin/
vendor/perl/dist/cpan/B-Lint/t/pluglib/B/Lint/Plugin/Test.pm
vendor/perl/dist/cpan/CGI/t/delete.t
vendor/perl/dist/cpan/CGI/t/multipart_init.t
vendor/perl/dist/cpan/CGI/t/rt-52469.t
vendor/perl/dist/cpan/CGI/t/tmpdir.t
vendor/perl/dist/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm
vendor/perl/dist/cpan/CPAN-Meta/t/data/gpl-1_4.yml
vendor/perl/dist/cpan/CPAN-Meta/t/data/unicode.yml
vendor/perl/dist/cpan/CPAN-Meta/t/data/version-not-normal.json
vendor/perl/dist/cpan/CPAN-Meta/t/data/version-ranges-1_4.yml
vendor/perl/dist/cpan/CPAN-Meta/t/data/version-ranges-2.json
vendor/perl/dist/cpan/CPAN-Meta/t/data-bad/version-ranges-2.json
vendor/perl/dist/cpan/CPAN-Meta/t/strings.t
vendor/perl/dist/cpan/CPAN-Meta-Requirements/
vendor/perl/dist/cpan/CPAN-Meta-Requirements/Changes
vendor/perl/dist/cpan/CPAN-Meta-Requirements/lib/
vendor/perl/dist/cpan/CPAN-Meta-Requirements/lib/CPAN/
vendor/perl/dist/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/
vendor/perl/dist/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm
vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/
vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/accepts.t
vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/bad_version_hook.t
vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/basic.t
vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/finalize.t
vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/from-hash.t
vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/merge.t
vendor/perl/dist/cpan/CPANPLUS/lib/CPANPLUS/Config/
vendor/perl/dist/cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm
vendor/perl/dist/cpan/Config-Perl-V/
vendor/perl/dist/cpan/Config-Perl-V/V.pm
vendor/perl/dist/cpan/Config-Perl-V/t/
vendor/perl/dist/cpan/Config-Perl-V/t/00_pod.t
vendor/perl/dist/cpan/Config-Perl-V/t/01_pod.t
vendor/perl/dist/cpan/Config-Perl-V/t/10_base.t
vendor/perl/dist/cpan/Config-Perl-V/t/20_plv.t
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5008009
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5010001
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011001
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011002
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011003
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011004
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011005
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012000
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012001
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012002
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012003
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013000
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013001
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013002
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013003
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013004
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013005
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013006
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013007
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013008
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013009
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013010
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013011
vendor/perl/dist/cpan/Devel-PPPort/parts/base/5014000
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5008009
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5010001
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011001
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011002
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011003
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011004
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011005
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012000
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012001
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012002
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012003
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013000
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013001
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013002
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013003
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013004
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013005
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013006
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013007
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013008
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013009
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013010
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013011
vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5014000
vendor/perl/dist/cpan/Digest/t/lib/
vendor/perl/dist/cpan/Digest/t/lib/Digest/
vendor/perl/dist/cpan/Digest/t/lib/Digest/Dummy.pm
vendor/perl/dist/cpan/Digest/t/security.t
vendor/perl/dist/cpan/Digest-SHA/t/unicode.t
vendor/perl/dist/cpan/Encode/META.json
vendor/perl/dist/cpan/ExtUtils-MakeMaker/README.packaging
vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/01perl_bugs.t
vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing.json
vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing.yml
vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing_tricky_version.yml
vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/echo.t
vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/meta_convert.t
vendor/perl/dist/cpan/File-CheckTree/
vendor/perl/dist/cpan/File-CheckTree/lib/
vendor/perl/dist/cpan/File-CheckTree/lib/File/
vendor/perl/dist/cpan/File-CheckTree/lib/File/CheckTree.pm
vendor/perl/dist/cpan/File-CheckTree/t/
vendor/perl/dist/cpan/File-CheckTree/t/CheckTree.t
vendor/perl/dist/cpan/File-Temp/lib/
vendor/perl/dist/cpan/File-Temp/lib/File/
vendor/perl/dist/cpan/File-Temp/lib/File/Temp.pm
vendor/perl/dist/cpan/File-Temp/t/rmtree.t
vendor/perl/dist/cpan/HTTP-Tiny/t/003_agent.t
vendor/perl/dist/cpan/HTTP-Tiny/t/101_head.t
vendor/perl/dist/cpan/HTTP-Tiny/t/102_put.t
vendor/perl/dist/cpan/HTTP-Tiny/t/103_delete.t
vendor/perl/dist/cpan/HTTP-Tiny/t/104_post.t
vendor/perl/dist/cpan/HTTP-Tiny/t/140_proxy.t
vendor/perl/dist/cpan/HTTP-Tiny/t/150_post_form.t
vendor/perl/dist/cpan/HTTP-Tiny/t/cases/delete-01.txt
vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-01.txt
vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-02.txt
vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-03.txt
vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-04.txt
vendor/perl/dist/cpan/HTTP-Tiny/t/cases/head-01.txt
vendor/perl/dist/cpan/HTTP-Tiny/t/cases/post-01.txt
vendor/perl/dist/cpan/IO-Compress/bin/
vendor/perl/dist/cpan/IO-Compress/bin/zipdetails
vendor/perl/dist/cpan/IO-Compress/lib/IO/Compress/FAQ.pod
vendor/perl/dist/cpan/IO-Compress/t/105oneshot-zip-store-only.t
vendor/perl/dist/cpan/IO-Compress/t/111const-deflate.t
vendor/perl/dist/cpan/JSON-PP/t/116_incr_parse_fixed.t
vendor/perl/dist/cpan/List-Util/t/getmagic-once.t
vendor/perl/dist/cpan/List-Util/t/multicall-refcount.t
vendor/perl/dist/cpan/List-Util/t/sum0.t
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/API.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Constants.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Constants.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country_Codes.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country_Retired.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency_Codes.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency_Retired.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt_Codes.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt_Retired.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam_Codes.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam_Retired.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar_Codes.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar_Retired.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language_Retired.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script.pod
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script_Codes.pm
vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script_Retired.pm
vendor/perl/dist/cpan/Locale-Codes/t/alias_code_old.t
vendor/perl/dist/cpan/Locale-Codes/t/code2country_old.t
vendor/perl/dist/cpan/Locale-Codes/t/code2langext.t
vendor/perl/dist/cpan/Locale-Codes/t/code2langfam.t
vendor/perl/dist/cpan/Locale-Codes/t/code2langvar.t
vendor/perl/dist/cpan/Locale-Codes/t/country2code_old.t
vendor/perl/dist/cpan/Locale-Codes/t/country_code2code_old.t
vendor/perl/dist/cpan/Locale-Codes/t/country_old.t
vendor/perl/dist/cpan/Locale-Codes/t/currency2code_old.t
vendor/perl/dist/cpan/Locale-Codes/t/langext2code.t
vendor/perl/dist/cpan/Locale-Codes/t/langfam2code.t
vendor/perl/dist/cpan/Locale-Codes/t/language_old.t
vendor/perl/dist/cpan/Locale-Codes/t/langvar2code.t
vendor/perl/dist/cpan/Locale-Codes/t/script2code_old.t
vendor/perl/dist/cpan/Math-Complex/ChangeLog
vendor/perl/dist/cpan/Math-Complex/Makefile.PL
vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/
vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/a/
vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/a/X.pm
vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/b/
vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/b/X.pm
vendor/perl/dist/cpan/Module-Load-Conditional/t/to_load/NotMain.pm
vendor/perl/dist/cpan/Module-Load-Conditional/t/to_load/NotX.pm
vendor/perl/dist/cpan/Module-Metadata/t/encoding.t
vendor/perl/dist/cpan/Module-Metadata/t/lib/0_1/
vendor/perl/dist/cpan/Module-Metadata/t/lib/0_1/Foo.pm
vendor/perl/dist/cpan/Module-Metadata/t/lib/0_2/
vendor/perl/dist/cpan/Module-Metadata/t/lib/0_2/Foo.pm
vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/
vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16BE.pm
vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16LE.pm
vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF8.pm
vendor/perl/dist/cpan/Module-Metadata/t/version.t
vendor/perl/dist/cpan/Module-Pluggable/t/22trigger.t
vendor/perl/dist/cpan/Module-Pluggable/t/23depth.t
vendor/perl/dist/cpan/Module-Pluggable/t/24local_inc_object.t
vendor/perl/dist/cpan/Module-Pluggable/t/24local_inc_package.t
vendor/perl/dist/cpan/Module-Pluggable/t/lib/Text/
vendor/perl/dist/cpan/Module-Pluggable/t/lib/Text/Abbrev.pm
vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/
vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/
vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/After.pm
vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackAllow.pm
vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackDeny.pm
vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Deny.pm
vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Error.pm
vendor/perl/dist/cpan/Pod-Checker/
vendor/perl/dist/cpan/Pod-Checker/lib/
vendor/perl/dist/cpan/Pod-Checker/lib/Pod/
vendor/perl/dist/cpan/Pod-Checker/lib/Pod/Checker.pm
vendor/perl/dist/cpan/Pod-Checker/scripts/
vendor/perl/dist/cpan/Pod-Checker/scripts/podchecker.PL
vendor/perl/dist/cpan/Pod-Checker/t/
vendor/perl/dist/cpan/Pod-Checker/t/pod/
vendor/perl/dist/cpan/Pod-Checker/t/pod/contains_bad_pod.xr
vendor/perl/dist/cpan/Pod-Checker/t/pod/empty.xr
vendor/perl/dist/cpan/Pod-Checker/t/pod/podchkenc.t
vendor/perl/dist/cpan/Pod-Checker/t/pod/podchkenc.xr
vendor/perl/dist/cpan/Pod-Checker/t/pod/poderrs.t
vendor/perl/dist/cpan/Pod-Checker/t/pod/poderrs.xr
vendor/perl/dist/cpan/Pod-Checker/t/pod/selfcheck.t
vendor/perl/dist/cpan/Pod-Checker/t/pod/testcmp.pl
vendor/perl/dist/cpan/Pod-Checker/t/pod/testpchk.pl
vendor/perl/dist/cpan/Pod-Parser/t/pod/empty.xr
vendor/perl/dist/cpan/Pod-Parser/t/pod/selfcheck.t
vendor/perl/dist/cpan/Pod-Perldoc/
vendor/perl/dist/cpan/Pod-Perldoc/corpus/
vendor/perl/dist/cpan/Pod-Perldoc/corpus/no-head.pod
vendor/perl/dist/cpan/Pod-Perldoc/corpus/perlfunc.pod
vendor/perl/dist/cpan/Pod-Perldoc/corpus/utf8.pod
vendor/perl/dist/cpan/Pod-Perldoc/lib/
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/BaseTo.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/GetOptsOO.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToANSI.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToChecker.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToNroff.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToPod.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToRtf.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToTerm.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToText.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToTk.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToXml.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm
vendor/perl/dist/cpan/Pod-Perldoc/lib/perldoc.pod
vendor/perl/dist/cpan/Pod-Perldoc/t/
vendor/perl/dist/cpan/Pod-Perldoc/t/load.t
vendor/perl/dist/cpan/Pod-Perldoc/t/man/
vendor/perl/dist/cpan/Pod-Perldoc/t/man/_get_columns.t
vendor/perl/dist/cpan/Pod-Perldoc/t/pod.t
vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn01.txt
vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn01.xml
vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn02.txt
vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn02.xml
vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn03.txt
vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn03.xml
vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn04.txt
vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn04.xml
vendor/perl/dist/cpan/Pod-Simple/t/emptylists.t
vendor/perl/dist/cpan/Pod-Simple/t/enc-chars.t
vendor/perl/dist/cpan/Pod-Simple/t/encod04.t
vendor/perl/dist/cpan/Pod-Simple/t/eol.t
vendor/perl/dist/cpan/Pod-Simple/t/eol2.t
vendor/perl/dist/cpan/Pod-Simple/t/fake-closers.t
vendor/perl/dist/cpan/Pod-Simple/t/whine.t
vendor/perl/dist/cpan/Pod-Simple/t/xhtml-bkb.t
vendor/perl/dist/cpan/Pod-Simple/t/xhtml15.t
vendor/perl/dist/cpan/Pod-Simple/t/xhtml20.t
vendor/perl/dist/cpan/Pod-Usage/
vendor/perl/dist/cpan/Pod-Usage/lib/
vendor/perl/dist/cpan/Pod-Usage/lib/Pod/
vendor/perl/dist/cpan/Pod-Usage/lib/Pod/Usage.pm
vendor/perl/dist/cpan/Pod-Usage/scripts/
vendor/perl/dist/cpan/Pod-Usage/scripts/pod2usage.PL
vendor/perl/dist/cpan/Pod-Usage/t/
vendor/perl/dist/cpan/Pod-Usage/t/pod/
vendor/perl/dist/cpan/Pod-Usage/t/pod/p2u_data.pl
vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage.t
vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage.xr
vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage2.t
vendor/perl/dist/cpan/Pod-Usage/t/pod/testcmp.pl
vendor/perl/dist/cpan/Pod-Usage/t/pod/testp2pt.pl
vendor/perl/dist/cpan/Pod-Usage/t/pod/usage.pod
vendor/perl/dist/cpan/Pod-Usage/t/pod/usage2.pod
vendor/perl/dist/cpan/Socket/
vendor/perl/dist/cpan/Socket/Makefile.PL
vendor/perl/dist/cpan/Socket/Socket.pm
vendor/perl/dist/cpan/Socket/Socket.xs
vendor/perl/dist/cpan/Socket/t/
vendor/perl/dist/cpan/Socket/t/Socket.t
vendor/perl/dist/cpan/Socket/t/getaddrinfo.t
vendor/perl/dist/cpan/Socket/t/getnameinfo.t
vendor/perl/dist/cpan/Socket/t/ip_mreq.t
vendor/perl/dist/cpan/Socket/t/ipv6_mreq.t
vendor/perl/dist/cpan/Socket/t/sockaddr.t
vendor/perl/dist/cpan/Socket/t/socketpair.t
vendor/perl/dist/cpan/Socket/typemap
vendor/perl/dist/cpan/Sys-Syslog/t/facilities-routing.t
vendor/perl/dist/cpan/Term-ANSIColor/t/aliases-func.t
vendor/perl/dist/cpan/Term-ANSIColor/t/basic256.t
vendor/perl/dist/cpan/Term-ANSIColor/t/eval.t
vendor/perl/dist/cpan/Term-ANSIColor/t/stringify.t
vendor/perl/dist/cpan/Term-ANSIColor/t/taint.t
vendor/perl/dist/cpan/Test-Harness/t/compat/env_opts.t
vendor/perl/dist/cpan/Test-Harness/t/nowarn.t
vendor/perl/dist/cpan/Text-Tabs/t/Tabs-ElCid.t
vendor/perl/dist/cpan/Text-Tabs/t/Wrap-JLB.t
vendor/perl/dist/cpan/Time-HiRes/t/Watchdog.pm
vendor/perl/dist/cpan/Time-HiRes/t/alarm.t
vendor/perl/dist/cpan/Time-HiRes/t/clock.t
vendor/perl/dist/cpan/Time-HiRes/t/gettimeofday.t
vendor/perl/dist/cpan/Time-HiRes/t/itimer.t
vendor/perl/dist/cpan/Time-HiRes/t/nanosleep.t
vendor/perl/dist/cpan/Time-HiRes/t/sleep.t
vendor/perl/dist/cpan/Time-HiRes/t/stat.t
vendor/perl/dist/cpan/Time-HiRes/t/time.t
vendor/perl/dist/cpan/Time-HiRes/t/tv_interval.t
vendor/perl/dist/cpan/Time-HiRes/t/ualarm.t
vendor/perl/dist/cpan/Time-HiRes/t/usleep.t
vendor/perl/dist/cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/as.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/be.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/bg.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/bn.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ee.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/fa.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/fi_phone.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/gu.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/hi.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/kn.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/kok.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ln.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/mk.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ml.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/mr.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/or.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/pa.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sa.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/si.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/si_dict.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sr.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sv_refo.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ta.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/te.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/th.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ur.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/wae.pl
vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl
vendor/perl/dist/cpan/Unicode-Collate/t/cjk_zy.t
vendor/perl/dist/cpan/Unicode-Collate/t/ident.t
vendor/perl/dist/cpan/Unicode-Collate/t/iglevel2.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_as.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_bn.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_bs.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_bscy.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_cjk.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_cjkc.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_ee.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_fa.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_fiph.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_gu.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_hi.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_kn.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_kok.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_ln.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_ml.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_mr.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_or.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_pa.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_sa.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_si.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_sidt.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_srla.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_svrf.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_ta.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_te.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_th.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_ur.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_wae.t
vendor/perl/dist/cpan/Unicode-Collate/t/loc_zhzy.t
vendor/perl/dist/cpan/Unicode-Collate/t/notable.t
vendor/perl/dist/cpan/Unicode-Collate/t/rewrite.t
vendor/perl/dist/cpan/Win32/t/CodePage.t
vendor/perl/dist/cpan/perlfaq/
vendor/perl/dist/cpan/perlfaq/lib/
vendor/perl/dist/cpan/perlfaq/lib/perlfaq.pm
vendor/perl/dist/cpan/perlfaq/lib/perlfaq.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq1.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq2.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq3.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq4.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq5.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq6.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq7.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq8.pod
vendor/perl/dist/cpan/perlfaq/lib/perlfaq9.pod
vendor/perl/dist/cpan/perlfaq/lib/perlglossary.pod
vendor/perl/dist/dist/B-Deparse/t/core.t
vendor/perl/dist/dist/Carp/
vendor/perl/dist/dist/Carp/Makefile.PL
vendor/perl/dist/dist/Carp/lib/
vendor/perl/dist/dist/Carp/lib/Carp/
vendor/perl/dist/dist/Carp/lib/Carp/Heavy.pm
vendor/perl/dist/dist/Carp/lib/Carp.pm
vendor/perl/dist/dist/Carp/t/
vendor/perl/dist/dist/Carp/t/Carp.t
vendor/perl/dist/dist/Carp/t/heavy.t
vendor/perl/dist/dist/Carp/t/stash_deletion.t
vendor/perl/dist/dist/Carp/t/swash.t
vendor/perl/dist/dist/Carp/t/vivify_gv.t
vendor/perl/dist/dist/Carp/t/vivify_stash.t
vendor/perl/dist/dist/Carp/t/with_warnings.t
vendor/perl/dist/dist/Cwd/t/Spec-taint.t
vendor/perl/dist/dist/Data-Dumper/t/bless_var_method.t
vendor/perl/dist/dist/Data-Dumper/t/deparse.t
vendor/perl/dist/dist/Data-Dumper/t/dumpperl.t
vendor/perl/dist/dist/Data-Dumper/t/freezer_useperl.t
vendor/perl/dist/dist/Data-Dumper/t/indent.t
vendor/perl/dist/dist/Data-Dumper/t/lib/
vendor/perl/dist/dist/Data-Dumper/t/lib/Testing.pm
vendor/perl/dist/dist/Data-Dumper/t/misc.t
vendor/perl/dist/dist/Data-Dumper/t/names.t
vendor/perl/dist/dist/Data-Dumper/t/purity_deepcopy_maxdepth.t
vendor/perl/dist/dist/Data-Dumper/t/qr.t
vendor/perl/dist/dist/Data-Dumper/t/quotekeys.t
vendor/perl/dist/dist/Data-Dumper/t/seen.t
vendor/perl/dist/dist/Data-Dumper/t/sortkeys.t
vendor/perl/dist/dist/Data-Dumper/t/sparseseen.t
vendor/perl/dist/dist/Data-Dumper/t/toaster.t
vendor/perl/dist/dist/Data-Dumper/t/values.t
vendor/perl/dist/dist/ExtUtils-CBuilder/Changes
vendor/perl/dist/dist/ExtUtils-CBuilder/LICENSE
vendor/perl/dist/dist/ExtUtils-CBuilder/Makefile.PL
vendor/perl/dist/dist/ExtUtils-CBuilder/README.patching
vendor/perl/dist/dist/ExtUtils-CBuilder/README.release
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Constants.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/CountLines.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pod
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Cmd.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/InputMap.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Type.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxs.pod
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxstut.pod
vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxstypemap.pod
vendor/perl/dist/dist/ExtUtils-ParseXS/t/001-basic.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/002-more.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/003-usage.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/004-nolinenumbers.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/102-trim_whitespace.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/103-tidy_type.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/104-map_type.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/105-valid_proto_string.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/106-process_typemaps.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/107-make_targetable.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/108-map_type.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/109-standard_XS_defs.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/110-assign_func_args.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/111-analyze_preprocessor_statements.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/112-set_cond.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/113-check_cond_preproc_statements.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/114-blurt_death_Warn.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/115-avoid-noise.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/501-t-compile.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/510-t-bare.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/511-t-whitespace.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/512-t-file.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/513-t-merge.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/514-t-embed.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/515-t-cmd.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/600-t-compat.t
vendor/perl/dist/dist/ExtUtils-ParseXS/t/XSWarn.xs
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/b.typemap
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/combined.typemap
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/confl_repl.typemap
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/confl_skip.typemap
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/conflicting.typemap
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/other.typemap
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/perl.typemap
vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/simple.typemap
vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/ExtUtils/
vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/ExtUtils/Typemaps/
vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/ExtUtils/Typemaps/Test.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/PrimitiveCapture.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/TypemapTest/
vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/TypemapTest/Foo.pm
vendor/perl/dist/dist/ExtUtils-ParseXS/t/pseudotypemap1
vendor/perl/dist/dist/Filter-Simple/t/code_no_comments.t
vendor/perl/dist/dist/Filter-Simple/t/lib/Filter/Simple/CodeNoComments.pm
vendor/perl/dist/dist/IO/t/cachepropagate-tcp.t
vendor/perl/dist/dist/IO/t/cachepropagate-udp.t
vendor/perl/dist/dist/IO/t/cachepropagate-unix.t
vendor/perl/dist/dist/IO/t/io_utf8argv.t
vendor/perl/dist/dist/Math-BigInt/t/rt-16221.t
vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/
vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/TieHashDelta.pm
vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/Utils.pm
vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList.pod
vendor/perl/dist/dist/Module-CoreList/t/utils.t
vendor/perl/dist/dist/Net-Ping/t/520_icmp_ttl.t
vendor/perl/dist/dist/Safe/t/safenamedcap.t
vendor/perl/dist/dist/Safe/t/saferegexp.t
vendor/perl/dist/dist/Search-Dict/
vendor/perl/dist/dist/Search-Dict/Changes
vendor/perl/dist/dist/Search-Dict/Makefile.PL
vendor/perl/dist/dist/Search-Dict/README.patching
vendor/perl/dist/dist/Search-Dict/README.release
vendor/perl/dist/dist/Search-Dict/lib/
vendor/perl/dist/dist/Search-Dict/lib/Search/
vendor/perl/dist/dist/Search-Dict/lib/Search/Dict.pm
vendor/perl/dist/dist/Search-Dict/t/
vendor/perl/dist/dist/Search-Dict/t/Dict.t
vendor/perl/dist/dist/Storable/t/robust.t
vendor/perl/dist/dist/Term-Complete/
vendor/perl/dist/dist/Term-Complete/lib/
vendor/perl/dist/dist/Term-Complete/lib/Term/
vendor/perl/dist/dist/Term-Complete/lib/Term/Complete.pm
vendor/perl/dist/dist/Term-Complete/t/
vendor/perl/dist/dist/Term-Complete/t/Complete.t
vendor/perl/dist/dist/Term-ReadLine/
vendor/perl/dist/dist/Term-ReadLine/lib/
vendor/perl/dist/dist/Term-ReadLine/lib/Term/
vendor/perl/dist/dist/Term-ReadLine/lib/Term/ReadLine.pm
vendor/perl/dist/dist/Term-ReadLine/t/
vendor/perl/dist/dist/Term-ReadLine/t/AE.t
vendor/perl/dist/dist/Term-ReadLine/t/AETk.t
vendor/perl/dist/dist/Term-ReadLine/t/ReadLine.t
vendor/perl/dist/dist/Term-ReadLine/t/Tk.t
vendor/perl/dist/dist/Text-Abbrev/
vendor/perl/dist/dist/Text-Abbrev/lib/
vendor/perl/dist/dist/Text-Abbrev/lib/Text/
vendor/perl/dist/dist/Text-Abbrev/lib/Text/Abbrev.pm
vendor/perl/dist/dist/Text-Abbrev/t/
vendor/perl/dist/dist/Text-Abbrev/t/Abbrev.t
vendor/perl/dist/dist/Thread-Queue/t/09_ended.t
vendor/perl/dist/dist/Thread-Queue/t/10_timed.t
vendor/perl/dist/dist/Tie-File/
vendor/perl/dist/dist/Tie-File/lib/
vendor/perl/dist/dist/Tie-File/lib/Tie/
vendor/perl/dist/dist/Tie-File/lib/Tie/File.pm
vendor/perl/dist/dist/Tie-File/t/
vendor/perl/dist/dist/Tie-File/t/00_version.t
vendor/perl/dist/dist/Tie-File/t/01_gen.t
vendor/perl/dist/dist/Tie-File/t/02_fetchsize.t
vendor/perl/dist/dist/Tie-File/t/03_longfetch.t
vendor/perl/dist/dist/Tie-File/t/04_splice.t
vendor/perl/dist/dist/Tie-File/t/05_size.t
vendor/perl/dist/dist/Tie-File/t/06_fixrec.t
vendor/perl/dist/dist/Tie-File/t/07_rv_splice.t
vendor/perl/dist/dist/Tie-File/t/08_ro.t
vendor/perl/dist/dist/Tie-File/t/09_gen_rs.t
vendor/perl/dist/dist/Tie-File/t/10_splice_rs.t
vendor/perl/dist/dist/Tie-File/t/11_rv_splice_rs.t
vendor/perl/dist/dist/Tie-File/t/12_longfetch_rs.t
vendor/perl/dist/dist/Tie-File/t/13_size_rs.t
vendor/perl/dist/dist/Tie-File/t/14_lock.t
vendor/perl/dist/dist/Tie-File/t/15_pushpop.t
vendor/perl/dist/dist/Tie-File/t/16_handle.t
vendor/perl/dist/dist/Tie-File/t/17_misc_meth.t
vendor/perl/dist/dist/Tie-File/t/18_rs_fixrec.t
vendor/perl/dist/dist/Tie-File/t/19_cache.t
vendor/perl/dist/dist/Tie-File/t/20_cache_full.t
vendor/perl/dist/dist/Tie-File/t/21_win32.t
vendor/perl/dist/dist/Tie-File/t/22_autochomp.t
vendor/perl/dist/dist/Tie-File/t/23_rv_ac_splice.t
vendor/perl/dist/dist/Tie-File/t/24_cache_loop.t
vendor/perl/dist/dist/Tie-File/t/25_gen_nocache.t
vendor/perl/dist/dist/Tie-File/t/26_twrite.t
vendor/perl/dist/dist/Tie-File/t/27_iwrite.t
vendor/perl/dist/dist/Tie-File/t/28_mtwrite.t
vendor/perl/dist/dist/Tie-File/t/29_downcopy.t
vendor/perl/dist/dist/Tie-File/t/29a_upcopy.t
vendor/perl/dist/dist/Tie-File/t/30_defer.t
vendor/perl/dist/dist/Tie-File/t/31_autodefer.t
vendor/perl/dist/dist/Tie-File/t/32_defer_misc.t
vendor/perl/dist/dist/Tie-File/t/33_defer_vs.t
vendor/perl/dist/dist/Tie-File/t/40_abs_cache.t
vendor/perl/dist/dist/Tie-File/t/41_heap.t
vendor/perl/dist/dist/Tie-File/t/42_offset.t
vendor/perl/dist/dist/autouse/t/lib/MyTestModule2.pm
vendor/perl/dist/dist/bignum/t/overrides.t
vendor/perl/dist/dist/threads-shared/t/dualvar.t
vendor/perl/dist/dist/threads-shared/t/object2.t
vendor/perl/dist/ext/File-DosGlob/
vendor/perl/dist/ext/File-DosGlob/DosGlob.xs
vendor/perl/dist/ext/File-DosGlob/lib/
vendor/perl/dist/ext/File-DosGlob/lib/File/
vendor/perl/dist/ext/File-DosGlob/lib/File/DosGlob.pm
vendor/perl/dist/ext/File-DosGlob/t/
vendor/perl/dist/ext/File-DosGlob/t/DosGlob.t
vendor/perl/dist/ext/File-Glob/t/rt114984.t
vendor/perl/dist/ext/GDBM_File/t/fatal.t
vendor/perl/dist/ext/IPC-Open3/lib/IPC/Open2.pm
vendor/perl/dist/ext/IPC-Open3/t/IPC-Open2.t
vendor/perl/dist/ext/NDBM_File/hints/gnu.pl
vendor/perl/dist/ext/ODBM_File/hints/gnu.pl
vendor/perl/dist/ext/POSIX/t/export.t
vendor/perl/dist/ext/POSIX/t/sigset.t
vendor/perl/dist/ext/POSIX/t/unimplemented.t
vendor/perl/dist/ext/POSIX/t/usage.t
vendor/perl/dist/ext/POSIX/t/wrappers.t
vendor/perl/dist/ext/PerlIO-mmap/
vendor/perl/dist/ext/PerlIO-mmap/mmap.pm
vendor/perl/dist/ext/PerlIO-mmap/mmap.xs
vendor/perl/dist/ext/Pod-Functions/
vendor/perl/dist/ext/Pod-Functions/Functions_pm.PL
vendor/perl/dist/ext/Pod-Functions/Makefile.PL
vendor/perl/dist/ext/Pod-Functions/t/
vendor/perl/dist/ext/Pod-Functions/t/Functions.t
vendor/perl/dist/ext/Pod-Html/bin/
vendor/perl/dist/ext/Pod-Html/bin/pod2html
vendor/perl/dist/ext/Pod-Html/lib/
vendor/perl/dist/ext/Pod-Html/lib/Pod/
vendor/perl/dist/ext/Pod-Html/lib/Pod/Html.pm
vendor/perl/dist/ext/Pod-Html/t/cache.pod
vendor/perl/dist/ext/Pod-Html/t/cache.t
vendor/perl/dist/ext/Pod-Html/t/crossref.pod
vendor/perl/dist/ext/Pod-Html/t/crossref.t
vendor/perl/dist/ext/Pod-Html/t/crossref2.t
vendor/perl/dist/ext/Pod-Html/t/crossref3.t
vendor/perl/dist/ext/Pod-Html/t/eol.t
vendor/perl/dist/ext/Pod-Html/t/feature.pod
vendor/perl/dist/ext/Pod-Html/t/feature.t
vendor/perl/dist/ext/Pod-Html/t/feature2.pod
vendor/perl/dist/ext/Pod-Html/t/feature2.t
vendor/perl/dist/ext/Pod-Html/t/htmldir1.pod
vendor/perl/dist/ext/Pod-Html/t/htmldir1.t
vendor/perl/dist/ext/Pod-Html/t/htmldir2.pod
vendor/perl/dist/ext/Pod-Html/t/htmldir2.t
vendor/perl/dist/ext/Pod-Html/t/htmldir3.pod
vendor/perl/dist/ext/Pod-Html/t/htmldir3.t
vendor/perl/dist/ext/Pod-Html/t/htmldir4.pod
vendor/perl/dist/ext/Pod-Html/t/htmldir4.t
vendor/perl/dist/ext/Pod-Html/t/htmldir5.pod
vendor/perl/dist/ext/Pod-Html/t/htmldir5.t
vendor/perl/dist/ext/Pod-Html/t/poderr.pod
vendor/perl/dist/ext/Pod-Html/t/poderr.t
vendor/perl/dist/ext/Pod-Html/t/podnoerr.pod
vendor/perl/dist/ext/Pod-Html/t/podnoerr.t
vendor/perl/dist/ext/Pod-Html/testdir/
vendor/perl/dist/ext/Pod-Html/testdir/perlpodspec-copy.pod
vendor/perl/dist/ext/Pod-Html/testdir/perlvar-copy.pod
vendor/perl/dist/ext/XS-APItest/t/addissub.t
vendor/perl/dist/ext/XS-APItest/t/autoload.t
vendor/perl/dist/ext/XS-APItest/t/callregexec.t
vendor/perl/dist/ext/XS-APItest/t/check_warnings.t
vendor/perl/dist/ext/XS-APItest/t/clone-with-stack.t
vendor/perl/dist/ext/XS-APItest/t/coplabel.t
vendor/perl/dist/ext/XS-APItest/t/copstash.t
vendor/perl/dist/ext/XS-APItest/t/fetch_pad_names.t
vendor/perl/dist/ext/XS-APItest/t/gotosub.t
vendor/perl/dist/ext/XS-APItest/t/gv_autoload4.t
vendor/perl/dist/ext/XS-APItest/t/gv_fetchmeth.t
vendor/perl/dist/ext/XS-APItest/t/gv_fetchmeth_autoload.t
vendor/perl/dist/ext/XS-APItest/t/gv_fetchmethod_flags.t
vendor/perl/dist/ext/XS-APItest/t/gv_init.t
vendor/perl/dist/ext/XS-APItest/t/handy.t
vendor/perl/dist/ext/XS-APItest/t/labelconst_utf8.aux
vendor/perl/dist/ext/XS-APItest/t/lexsub.t
vendor/perl/dist/ext/XS-APItest/t/lvalue.t
vendor/perl/dist/ext/XS-APItest/t/mro.t
vendor/perl/dist/ext/XS-APItest/t/newCONSTSUB.t
vendor/perl/dist/ext/XS-APItest/t/pad_scalar.t
vendor/perl/dist/ext/XS-APItest/t/sort.t
vendor/perl/dist/ext/XS-APItest/t/sviscow.t
vendor/perl/dist/ext/XS-APItest/t/svpv.t
vendor/perl/dist/ext/XS-APItest/t/sym-hook.t
vendor/perl/dist/ext/XS-APItest/t/underscore_length.t
vendor/perl/dist/ext/XS-APItest/t/whichsig.t
vendor/perl/dist/ext/arybase/
vendor/perl/dist/ext/arybase/arybase.pm
vendor/perl/dist/ext/arybase/arybase.xs
vendor/perl/dist/ext/arybase/ptable.h
vendor/perl/dist/ext/arybase/t/
vendor/perl/dist/ext/arybase/t/aeach.t
vendor/perl/dist/ext/arybase/t/aelem.t
vendor/perl/dist/ext/arybase/t/akeys.t
vendor/perl/dist/ext/arybase/t/arybase.t
vendor/perl/dist/ext/arybase/t/aslice.t
vendor/perl/dist/ext/arybase/t/av2arylen.t
vendor/perl/dist/ext/arybase/t/index.t
vendor/perl/dist/ext/arybase/t/lslice.t
vendor/perl/dist/ext/arybase/t/pos.t
vendor/perl/dist/ext/arybase/t/scope.t
vendor/perl/dist/ext/arybase/t/scope_0.pm
vendor/perl/dist/ext/arybase/t/splice.t
vendor/perl/dist/ext/arybase/t/substr.t
vendor/perl/dist/lib/File/stat-7896.t
vendor/perl/dist/lib/_charnames.pm
vendor/perl/dist/lib/perl5db/t/EnableModule.pm
vendor/perl/dist/lib/perl5db/t/MyModule.pm
vendor/perl/dist/lib/perl5db/t/break-on-dot
vendor/perl/dist/lib/perl5db/t/breakpoint-bug
vendor/perl/dist/lib/perl5db/t/disable-breakpoints-1
vendor/perl/dist/lib/perl5db/t/disable-breakpoints-2
vendor/perl/dist/lib/perl5db/t/disable-breakpoints-3
vendor/perl/dist/lib/perl5db/t/fact
vendor/perl/dist/lib/perl5db/t/filename-line-breakpoint
vendor/perl/dist/lib/perl5db/t/load-modules
vendor/perl/dist/lib/perl5db/t/rt-104168
vendor/perl/dist/lib/perl5db/t/source-cmd-test-no-q.perldb
vendor/perl/dist/lib/perl5db/t/source-cmd-test.perldb
vendor/perl/dist/lib/perl5db/t/test-PrintRet-option-1
vendor/perl/dist/lib/perl5db/t/test-a-statement-1
vendor/perl/dist/lib/perl5db/t/test-dieLevel-option-1
vendor/perl/dist/lib/perl5db/t/test-frame-option-1
vendor/perl/dist/lib/perl5db/t/test-l-statement-1
vendor/perl/dist/lib/perl5db/t/test-l-statement-2
vendor/perl/dist/lib/perl5db/t/test-m-statement-1
vendor/perl/dist/lib/perl5db/t/test-passing-at-underscore-to-x-etc
vendor/perl/dist/lib/perl5db/t/test-r-statement
vendor/perl/dist/lib/perl5db/t/test-w-statement-1
vendor/perl/dist/lib/perl5db/t/test-warnLevel-option-1
vendor/perl/dist/lib/perl5db/t/uncalled-subroutine
vendor/perl/dist/lib/perl5db/t/with-subroutine
vendor/perl/dist/lib/version/t/
vendor/perl/dist/lib/version/t/01base.t
vendor/perl/dist/lib/version/t/02derived.t
vendor/perl/dist/lib/version/t/03require.t
vendor/perl/dist/lib/version/t/04strict_lax.t
vendor/perl/dist/lib/version/t/05sigdie.t
vendor/perl/dist/lib/version/t/06noop.t
vendor/perl/dist/lib/version/t/07locale.t
vendor/perl/dist/lib/version/t/coretests.pm
vendor/perl/dist/pod/perl5124delta.pod
vendor/perl/dist/pod/perl5125delta.pod
vendor/perl/dist/pod/perl5142delta.pod
vendor/perl/dist/pod/perl5143delta.pod
vendor/perl/dist/pod/perl5144delta.pod
vendor/perl/dist/pod/perl5160delta.pod
vendor/perl/dist/pod/perl5161delta.pod
vendor/perl/dist/pod/perl5162delta.pod
vendor/perl/dist/pod/perl5163delta.pod
vendor/perl/dist/pod/perl5180delta.pod
vendor/perl/dist/pod/perldtrace.pod
vendor/perl/dist/pod/perlexperiment.pod
vendor/perl/dist/pod/perlootut.pod
vendor/perl/dist/regen/embed_lib.pl
vendor/perl/dist/regen/feature.pl
vendor/perl/dist/regen/mg_vtable.pl
vendor/perl/dist/regen/mk_invlists.pl
vendor/perl/dist/regen/regcharclass_multi_char_folds.pl
vendor/perl/dist/regen/unicode_constants.pl
vendor/perl/dist/t/bigmem/
vendor/perl/dist/t/bigmem/read.t
vendor/perl/dist/t/bigmem/vec.t
vendor/perl/dist/t/io/shm.t
vendor/perl/dist/t/lib/Count.pm
vendor/perl/dist/t/lib/Devel/nodb.pm
vendor/perl/dist/t/lib/croak/
vendor/perl/dist/t/lib/croak/mg
vendor/perl/dist/t/lib/croak/op
vendor/perl/dist/t/lib/croak/pp_ctl
vendor/perl/dist/t/lib/croak/pp_hot
vendor/perl/dist/t/lib/croak/toke
vendor/perl/dist/t/lib/overload_nomethod.t
vendor/perl/dist/t/lib/test_require.pm
vendor/perl/dist/t/mro/basic_01_c3_utf8.t
vendor/perl/dist/t/mro/basic_01_dfs_utf8.t
vendor/perl/dist/t/mro/basic_02_c3_utf8.t
vendor/perl/dist/t/mro/basic_02_dfs_utf8.t
vendor/perl/dist/t/mro/basic_03_c3_utf8.t
vendor/perl/dist/t/mro/basic_03_dfs_utf8.t
vendor/perl/dist/t/mro/basic_04_c3_utf8.t
vendor/perl/dist/t/mro/basic_04_dfs_utf8.t
vendor/perl/dist/t/mro/basic_05_c3_utf8.t
vendor/perl/dist/t/mro/basic_05_dfs_utf8.t
vendor/perl/dist/t/mro/basic_utf8.t
vendor/perl/dist/t/mro/c3_with_overload_utf8.t
vendor/perl/dist/t/mro/complex_c3_utf8.t
vendor/perl/dist/t/mro/complex_dfs_utf8.t
vendor/perl/dist/t/mro/dbic_c3_utf8.t
vendor/perl/dist/t/mro/dbic_dfs_utf8.t
vendor/perl/dist/t/mro/inconsistent_c3_utf8.t
vendor/perl/dist/t/mro/isa_aliases_utf8.t
vendor/perl/dist/t/mro/isa_c3_utf8.t
vendor/perl/dist/t/mro/isa_dfs_utf8.t
vendor/perl/dist/t/mro/isarev_utf8.t
vendor/perl/dist/t/mro/method_caching_utf8.t
vendor/perl/dist/t/mro/next_NEXT_utf8.t
vendor/perl/dist/t/mro/next_edgecases_utf8.t
vendor/perl/dist/t/mro/next_goto_utf8.t
vendor/perl/dist/t/mro/next_inanon_utf8.t
vendor/perl/dist/t/mro/next_ineval_utf8.t
vendor/perl/dist/t/mro/next_method_utf8.t
vendor/perl/dist/t/mro/next_skip_utf8.t
vendor/perl/dist/t/mro/overload_c3_utf8.t
vendor/perl/dist/t/mro/package_aliases_utf8.t
vendor/perl/dist/t/mro/pkg_gen_utf8.t
vendor/perl/dist/t/mro/recursion_c3_utf8.t
vendor/perl/dist/t/mro/recursion_dfs_utf8.t
vendor/perl/dist/t/mro/vulcan_c3_utf8.t
vendor/perl/dist/t/mro/vulcan_dfs_utf8.t
vendor/perl/dist/t/op/closure_test.pl
vendor/perl/dist/t/op/coreamp.t
vendor/perl/dist/t/op/coresubs.t
vendor/perl/dist/t/op/current_sub.t
vendor/perl/dist/t/op/defined.t
vendor/perl/dist/t/op/evalbytes.t
vendor/perl/dist/t/op/for.t
vendor/perl/dist/t/op/fresh_perl_utf8.t
vendor/perl/dist/t/op/hash-rt85026.t
vendor/perl/dist/t/op/heredoc.t
vendor/perl/dist/t/op/lexsub.t
vendor/perl/dist/t/op/lock.t
vendor/perl/dist/t/op/require_37033.t
vendor/perl/dist/t/op/select.t
vendor/perl/dist/t/op/sigsystem.t
vendor/perl/dist/t/op/svleak.pl
vendor/perl/dist/t/op/unlink.t
vendor/perl/dist/t/op/while.t
vendor/perl/dist/t/opbasic/
vendor/perl/dist/t/opbasic/arith.t
vendor/perl/dist/t/opbasic/cmp.t
vendor/perl/dist/t/opbasic/concat.t
vendor/perl/dist/t/opbasic/magic_phase.t
vendor/perl/dist/t/opbasic/qq.t
vendor/perl/dist/t/porting/checkcfgvar.t
vendor/perl/dist/t/porting/customized.dat
vendor/perl/dist/t/porting/customized.t
vendor/perl/dist/t/porting/extrefs.t
vendor/perl/dist/t/porting/globvar.t
vendor/perl/dist/t/porting/known_pod_issues.dat
vendor/perl/dist/t/porting/pending-author.t
vendor/perl/dist/t/porting/perlfunc.t
vendor/perl/dist/t/porting/pod_rules.t
vendor/perl/dist/t/porting/utils.t
vendor/perl/dist/t/re/pos.t
vendor/perl/dist/t/re/recompile.t
vendor/perl/dist/t/re/regex_sets.t
vendor/perl/dist/t/re/regex_sets_compat.t
vendor/perl/dist/t/run/dtrace.pl
vendor/perl/dist/t/run/dtrace.t
vendor/perl/dist/t/run/flib/
vendor/perl/dist/t/run/flib/broken.pm
vendor/perl/dist/t/run/mad.t
vendor/perl/dist/t/run/switchM.t
vendor/perl/dist/t/run/switchx3.aux
vendor/perl/dist/t/test_pl/
vendor/perl/dist/t/test_pl/_num_to_alpha.t
vendor/perl/dist/t/test_pl/can_isa_ok.t
vendor/perl/dist/t/test_pl/tempfile.t
vendor/perl/dist/t/uni/attrs.t
vendor/perl/dist/t/uni/bless.t
vendor/perl/dist/t/uni/caller.t
vendor/perl/dist/t/uni/eval.t
vendor/perl/dist/t/uni/goto.t
vendor/perl/dist/t/uni/gv.t
vendor/perl/dist/t/uni/labels.t
vendor/perl/dist/t/uni/method.t
vendor/perl/dist/t/uni/opcroak.t
vendor/perl/dist/t/uni/package.t
vendor/perl/dist/t/uni/parser.t
vendor/perl/dist/t/uni/readline.t
vendor/perl/dist/t/uni/select.t
vendor/perl/dist/t/uni/stash.t
vendor/perl/dist/t/uni/universal.t
vendor/perl/dist/t/uni/variables.t
vendor/perl/dist/t/win32/fs.t
vendor/perl/dist/t/win32/runenv.t
vendor/perl/dist/utils/pod2html.PL
vendor/perl/dist/utils/zipdetails.PL
Added: vendor/perl/dist/Porting/README.pod
===================================================================
--- vendor/perl/dist/Porting/README.pod (rev 0)
+++ vendor/perl/dist/Porting/README.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,355 @@
+=head1 NAME
+
+README.pod - README for the F<Porting/> directory in the Perl 5 core distribution.
+
+=head1 FILES
+
+=head2 F<acknowledgements.pl>
+
+Generates the text which goes in the Acknowledgements section in
+a perldelta. You pass in the previous version and it guesses the next
+version, fetches information from the repository and outputs the
+text.
+
+=head2 F<add-package.pl>
+
+Program to prepare dual-life distributions for insertion into the Perl 5
+F<lib/> and F<t/> directories. Now thought to be largely superseded.
+
+=head2 F<bisect-example.sh>, F<bisect-runner.pl> and F<bisect.pl>
+
+Use C<git bisect> to pinpoint changes.
+
+=head2 F<bump-perl-version>
+
+A utility to find, and optionally bump, references to the perl version
+number in various files within the perl source.
+
+=head2 F<check83.pl>
+
+Performs pathname portability checks, including whether there are naming
+conflicts when names are truncated to the DOSish, case-ignoring 8.3 format.
+
+=head2 F<checkAUTHORS.pl>
+
+Used by F<t/porting/authors.t> to ensure the F<AUTHORS> list is up to date.
+
+=head2 F<checkURL.pl>
+
+Checks that all the URLs in the Perl source are valid.
+
+=head2 F<checkVERSION.pl>
+
+Used by F<t/porting/cmp_version.t> to ensure changed modules have had their
+versions updated.
+
+=head2 F<checkansi.pl>
+
+Check source code for ANSI-C violations.
+
+=head2 F<checkcfgvar.pl>
+
+Check that the various F<config.sh>-clones have (at least) all the same
+symbols as the top-level F<config_h.SH> so that the (potentially) needed
+symbols are not lagging after how F<Configure> thinks the world is laid out.
+VMS is probably not handled properly here, due to their own rather elaborate
+DCL scripting.
+
+=head2 F<check-cpan-pollution>
+
+Scans the commit logs for commits that are potentially, illegitimately
+touching modules that are primarily maintained outside of the perl core. Also
+checks for commits that span multiple distributions in F<cpan/> or F<dist/>.
+Makes sure that updated CPAN distributions also update
+F<Porting/Maintainers.pl>, but otherwise ignores changes to that file (and
+F<MANIFEST>).
+
+=head2 F<checkpodencoding.pl>
+
+Check if POD files contain non-ASCII without specifying
+encoding. Run it as: C<perl Porting/checkpodencoding.pl>.
+
+=head2 F<cherrymaint>
+
+Command line tool to update cherrymaint; a tool for selecting commits from
+blead to cherry-pick into stable perl versions.
+
+=head2 F<cmpVERSION.pl>
+
+Compare the current Perl source tree and a given tag for modules that have
+identical version numbers but different contents.
+
+=head2 F<config_H>
+
+This file is a sample F<config.h> file. If you are unable to successfully run
+F<Configure>, copy this file to F<config.h> and edit it to suit your system.
+
+=head2 F<config_h.pl>
+
+Used when importing changes from F<metaconfig>. This script reorders
+F<config_h.SH> after metaconfig.
+
+=head2 F<config.sh>
+
+This file is a sample F<config.sh> file. F<config.sh> is normally
+produced by running the F<Configure> script. It holds all the definitions
+figured out by F<Configure>. If you are unable to successfully run
+F<Configure> on your system, copy this sample file to F<config.sh>
+at the top of the perl source tree and edit it to suit your system.
+Then propagate those values by running C<Configure -S>. This sample
+file is normally updated each time F<Configure> is updated.
+
+=head2 F<core-cpan-diff>
+
+Compare CPAN modules with their equivalent in core.
+Originally based on App::DualLivedDiff by Steffen Mueller.
+
+=head2 F<corecpan.pl>
+
+Reports, in a perl source tree, which dual-lived core modules have not the
+same version than the corresponding module on CPAN.
+
+=head2 F<corelist-diff>
+
+Prints a table of differences between two Perl versions with respect to
+modules included in the distribution.
+
+=head2 F<corelist.pl>
+
+Generates info for Module::CoreList from this perl tree.
+
+=head2 F<corelist-perldelta.pl>
+
+Generates a list of the module changes for the Perl you are currently
+building. Also generates a diff between the corelist sections of two
+F<perldelta*> files.
+
+=head2 F<epigraphs.pod>
+
+List of Perl release epigraphs.
+
+=head2 F<exec-bit.txt>
+
+This file contains a list of files that F<makerel> will ensure get an
+executable bit.
+
+=head2 F<exercise_makedef.pl>
+
+Brute force testing for F<makedef.pl>.
+
+=head2 F<expand-macro.pl>
+
+Expand C macros using the C preprocessor.
+
+=head2 F<findrfuncs>
+
+This script finds reentrant variants of functions used in an executable and
+shared objects.
+
+=head2 F<GitUtils.pm>
+
+This script contains the subroutine to generate a F<.patch file> for a
+committish (the SHA1 checksum of a commit, a number made of 40 hexadecimal
+digits which acts the internal unique identifier for this commit
+(lilypond.org). Related file: F<make_dot_patch.pl>
+
+=head2 F<git-deltatool>
+
+This script, a rough draft, aids in generating a perldelta file
+from a series of git commits.
+
+=head2 F<git-find-p4-change>
+
+This script, given a Perforce change number, outputs the equivalent git commit
+id.
+
+=head2 F<git-make-p4-refs>
+
+This script creates a tag for every p4raw-id.
+
+=head2 F<Glossary>
+
+This file is built by F<metaconfig>. This file contains a description of all
+the shell variables whose value is determined by the Configure script.
+It later gets incorporated into the pod for F<Config.pm>.
+
+=head2 F<how_to_write_a_perldelta.pod>
+
+This file contains a specification as to how to write a perldelta pod.
+Related file: F<perldelta_template.pod>
+
+=head2 F<leakfinder.pl>
+
+This script executes every line in every file in the build directory and its
+subdirectories to determine if the number of SVs goes up and reports it as a
+leak to STDOUT. WARNING! some harm could be done if a line contains something
+similar to C<`rm *`>.
+
+=head2 F<Maintainers>
+
+This script shows information about the maintainers of core files/modules.
+
+Related files: F<Maintainers.pl>, F<Maintainers.pm>
+
+=head2 F<Maintainers.pl>
+
+A package associating core files/modules with maintainers. Related files:
+F<Maintainers>, F<Maintainers.pm>
+
+=head2 F<Maintainers.pm>
+
+A package to search and show information about which core files/modules are
+associated with maintainers. Related files: F<Maintainers>, F<Maintainers.pl>
+
+=head2 F<make-rmg-checklist>
+
+This script creates a release checklist as a simple HTML document.
+
+=head2 F<make_dot_patch.pl>
+
+Generate a F<.patch> file to STDOUT for a commit ID specified on the
+command-line.
+
+=head2 F<make_modlib_cpan.pl>
+
+This script generates the list of registered CPAN sites in F<perlmodlib.PL>.
+
+=head2 F<make_snapshot.pl>
+
+This script is a quick and dirty snapshot generator for the perl5.git.perl.org
+web page to use to generate the snapshot files.
+
+=head2 F<makemeta>
+
+This script creates F<META.yml> and F<META.json> files.
+
+=head2 F<makerel>
+
+This script builds a Perl release tarball.
+
+=head2 F<manicheck>
+
+This script outputs a list of files in F<MANIFEST> which don't exist and a
+list of files that exist and aren't in F<MANIFEST>.
+
+=head2 F<manisort>
+
+This script sorts the files in F<MANIFEST>.
+
+=head2 F<new-perldelta.pl>
+
+This script automates the process for creating perldelta.pl.
+
+=head2 F<newtests-perldelta.pl>
+
+This script outputs the added tests between the two versions of Perl.
+
+=head2 F<perldelta_template.pod>
+
+Template for F<perldelta>.
+
+=head2 F<perlhist_calculate.pl>
+
+Generates info for F<perlhist> from this perl tree.
+
+=head2 F<pod_lib.pl>
+
+When C<require>d into other programs in the Perl 5 core
+distribution, provides functions useful during testing.
+
+=head2 F<pod_rules.pl>
+
+Generate the sections of files listed in C<%Targets> from F<pod/perl.pod>.
+Mostly these are rules in Makefiles.
+
+ --verbose gives slightly more output
+ --build-all tries to build everything
+ --build-foo updates foo as follows
+ --showfiles shows the files to be changed
+ --test exit if perl.pod, MANIFEST are consistent, and regenerated
+ files are up to date, die otherwise.
+
+=head2 F<podtidy>
+
+Applies F<podtidy> to a file.
+
+=head2 F<pumpkin.pod>
+
+Pumpkin - Notes on handling the Perl Patch Pumpkin And Porting Perl.
+Many of these are out of date or superseded by other documents in
+this directory.
+
+=head2 F<README.y2038>
+
+The y2038 implementation for perl. This is an implementation of POSIX time.h
+which solves the year 2038 bug on systems where time_t is only 32 bits. It is
+implemented in bog-standard ANSI C. The latest version can be found at
+L<http://y2038.googlecode.com/>.
+
+=head2 F<release_announcement_template.txt>
+
+Release announcment for minor releasements of the 5.17 development series.
+
+=head2 F<release_managers_guide.pod>
+
+Releasing a new version of perl 5.x. Note that things change at each release,
+so there may be new things not covered here, or tools may need updating.
+
+=head2 F<release_schedule.pod>
+
+This schedule lists the projected or historical development and release
+schedules for the next, current and previous stable versions of Perl. Dates
+with all question marks will only be releases if deemed necessary by the
+Pumpking.
+
+=head2 F<rt_list_patches>
+
+Shell script to list patches in RT.
+
+=head2 F<sort_perldiag.pl>
+
+This is a script for sorting the warning and error messages in
+F<perldiag.pod>. POD formatting, printf-style escapes, non-letter characters,
+and case are ignored, as explained in L<perldiag>.
+
+=head2 F<testall.atom>
+
+Test suite profiling on Tru 64.
+
+=head2 F<thirdclean>
+
+Script for cleaning out the "known noise" from Third Degree reports: either
+noise caused by F<libc> itself, or F<Perl_yyparse> leaks.
+
+=head2 F<time>
+
+A helper tool for perl's 2038 support. See F<Porting/README.y2038> for details.
+
+=head2 F<timecheck2.c>
+
+A little program to test the limits of your system's time functions. See
+F<Porting/README.y2038> for details.
+
+=head2 F<timecheck.c>
+
+A helper tool for perl's 2038 support See F<Porting/README.y2038> for details.
+
+=head2 F<todo.pod>
+
+This is a list of wishes for Perl. The most up-to-date version of this file is
+at L<http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/Porting/todo.pod>.
+The tasks we think are smaller or easier are listed first. Anyone is welcome
+to work on any of these, but it's a good idea to first contact
+F<perl5-porters at perl.org> to avoid duplication of effort, and to learn from
+any previous attempts.
+
+=head2 F<valgrindpp.pl>
+
+A post-processor for C<make test.valgrind>. F<valgrindpp.pl> is a
+post-processor for F<.valgrind> files created during C<make test.valgrind>. It
+collects all these files, extracts most of the information and produces a
+significantly shorter summary of all detected memory access errors and memory
+leaks.
+
+=cut
+
Added: vendor/perl/dist/Porting/acknowledgements.pl
===================================================================
--- vendor/perl/dist/Porting/acknowledgements.pl (rev 0)
+++ vendor/perl/dist/Porting/acknowledgements.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,150 @@
+#!perl
+
+=head1 NAME
+
+Porting/acknowledgements.pl - Generate perldelta acknowledgements text
+
+=head1 SYNOPSIS
+
+ perl Porting/acknowledgements.pl v5.15.0..HEAD
+
+=head1 DESCRIPTION
+
+This generates the text which goes in the Acknowledgements section in
+a perldelta. You pass in the previous version and it guesses the next
+version, fetches information from the repository and outputs the
+text.
+
+=cut
+
+use strict;
+use warnings;
+use autodie;
+use POSIX qw(ceil);
+use Text::Wrap;
+use Time::Piece;
+use Time::Seconds;
+use version;
+$Text::Wrap::columns = 80;
+
+my $since_until = shift;
+
+my ( $since, $until ) = split '\.\.', $since_until;
+
+die "Usage: perl Porting/acknowledgements.pl v5.15.0..HEAD"
+ unless $since_until && $since && $until;
+
+my $previous_version = previous_version();
+my $next_version = next_version();
+my $development_time = development_time();
+
+my ( $changes, $files ) = changes_files();
+my $formatted_changes = commify( round($changes) );
+my $formatted_files = commify( round($files) );
+
+my $authors = authors();
+my $nauthors = $authors =~ tr/,/,/;
+$nauthors++;
+
+my $text
+ = "Perl $next_version represents approximately $development_time of development
+since Perl $previous_version and contains approximately $formatted_changes
+lines of changes across $formatted_files files from $nauthors authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl $next_version:
+
+$authors
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
+
+Many of the changes included in this version originated in the CPAN
+modules included in Perl's core. We're grateful to the entire CPAN
+community for helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors,
+please see the F<AUTHORS> file in the Perl source distribution.";
+
+my $wrapped = fill( '', '', $text );
+print "$wrapped\n";
+
+# return the previous Perl version, eg 5.15.0
+sub previous_version {
+ my $version = version->new($since);
+ $version =~ s/^v//;
+ return $version;
+}
+
+# returns the upcoming release Perl version, eg 5.15.1
+sub next_version {
+ my $version = version->new($since);
+ ( $version->{version}->[-1] )++;
+ return version->new( join( '.', @{ $version->{version} } ) );
+}
+
+# returns the development time since the previous version in weeks
+# or months
+sub development_time {
+ my $first_timestamp = qx(git log -1 --pretty=format:%ct --summary $since);
+ my $last_timestamp = qx(git log -1 --pretty=format:%ct --summary $until);
+
+ die "Missing first timestamp" unless $first_timestamp;
+ die "Missing last timestamp" unless $last_timestamp;
+
+ my $seconds = localtime($last_timestamp) - localtime($first_timestamp);
+ my $weeks = _round( $seconds / ONE_WEEK );
+ my $months = _round( $seconds / ONE_MONTH );
+
+ my $development_time;
+ if ( $months < 2 ) {
+ return "$weeks @{[$weeks == 1 ? q(week) : q(weeks)]}";
+ } else {
+ return "$months months";
+ }
+}
+
+sub _round {
+ my $val = shift;
+
+ my $int = int $val;
+ my $remainder = $val - $int;
+
+ return $remainder >= 0.5 ? $int + 1 : $int;
+}
+
+# returns the number of changed lines and files since the previous
+# version
+sub changes_files {
+ my $output = qx(git diff --shortstat $since_until);
+
+ # 585 files changed, 156329 insertions(+), 53586 deletions(-)
+ my ( $files, $insertions, $deletions )
+ = $output
+ =~ /(\d+) files changed, (\d+) insertions\(\+\), (\d+) deletions\(-\)/;
+ my $changes = $insertions + $deletions;
+ return ( $changes, $files );
+}
+
+# rounds an integer to two significant figures
+sub round {
+ my $int = shift;
+ my $length = length($int);
+ my $divisor = 10**( $length - 2 );
+ return ceil( $int / $divisor ) * $divisor;
+}
+
+# adds commas to a number at thousands, millions
+sub commify {
+ local $_ = shift;
+ 1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
+ return $_;
+}
+
+# returns a list of the authors
+sub authors {
+ return
+ qx(git log --pretty=fuller $since_until | $^X Porting/checkAUTHORS.pl --who -);
+}
Added: vendor/perl/dist/Porting/bisect-example.sh
===================================================================
--- vendor/perl/dist/Porting/bisect-example.sh (rev 0)
+++ vendor/perl/dist/Porting/bisect-example.sh 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
+#!/bin/sh
+echo >&2 You need to edit this to run your test case
+exit 1
+
+git clean -dxf
+
+# If you get './makedepend: 1: Syntax error: Unterminated quoted
+# string' when bisecting versions of perl older than 5.9.5 this hack
+# will work around the bug in makedepend.SH which was fixed in
+# version 96a8704c. Make sure to uncomment 'git checkout makedepend.SH'
+# below too.
+#git show blead:makedepend.SH > makedepend.SH
+
+# If you can use ccache, add -Dcc=ccache\ gcc -Dld=gcc to the Configure line
+# if Encode is not needed for the test, you can speed up the bisect by
+# excluding it from the runs with -Dnoextensions=Encode
+# ie
+#./Configure -Dusedevel -Doptimize=-g -Dcc=ccache\ gcc -Dld=gcc -Dnoextensions=Encode -des
+./Configure -Dusedevel -Doptimize=-g -des
+test -f config.sh || exit 125
+# Correct makefile for newer GNU gcc
+perl -ni -we 'print unless /<(?:built-in|command)/' makefile x2p/makefile
+# if you just need miniperl, replace test_prep with miniperl
+make test_prep
+[ -x ./perl ] || exit 125
+# This runs the actual testcase. You could use -e instead:
+./perl -Ilib ~/testcase.pl
+ret=$?
+[ $ret -gt 127 ] && ret=127
+git checkout makedepend.SH
+git clean -dxf
+exit $ret
+
+#if you need to invert the exit code, replace the above exit with this:
+#[ $ret -eq 0 ] && exit 1
+#exit 0
Added: vendor/perl/dist/Porting/bisect-runner.pl
===================================================================
--- vendor/perl/dist/Porting/bisect-runner.pl (rev 0)
+++ vendor/perl/dist/Porting/bisect-runner.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3010 @@
+#!/usr/bin/perl -w
+use strict;
+
+use Getopt::Long qw(:config bundling no_auto_abbrev);
+use Pod::Usage;
+use Config;
+use Carp;
+
+my @targets
+ = qw(config.sh config.h miniperl lib/Config.pm Fcntl perl test_prep);
+
+my $cpus;
+if (open my $fh, '<', '/proc/cpuinfo') {
+ while (<$fh>) {
+ ++$cpus if /^processor\s+:\s+\d+$/;
+ }
+} elsif (-x '/sbin/sysctl') {
+ $cpus = 1 + $1 if `/sbin/sysctl hw.ncpu` =~ /^hw\.ncpu: (\d+)$/;
+} elsif (-x '/usr/bin/getconf') {
+ $cpus = 1 + $1 if `/usr/bin/getconf _NPROCESSORS_ONLN` =~ /^(\d+)$/;
+}
+
+my %options =
+ (
+ jobs => defined $cpus ? $cpus + 1 : 2,
+ 'expect-pass' => 1,
+ clean => 1, # mostly for debugging this
+ );
+
+my $linux64 = `uname -sm` eq "Linux x86_64\n" ? '64' : '';
+
+my @paths;
+
+if ($^O eq 'linux') {
+ # This is the search logic for a multi-arch library layout
+ # added to linux.sh in commits 40f026236b9959b7 and dcffd848632af2c7.
+ my $gcc = -x '/usr/bin/gcc' ? '/usr/bin/gcc' : 'gcc';
+
+ foreach (`$gcc -print-search-dirs`) {
+ next unless /^libraries: =(.*)/;
+ foreach (split ':', $1) {
+ next if m/gcc/;
+ next unless -d $_;
+ s!/$!!;
+ push @paths, $_;
+ }
+ }
+}
+
+push @paths, map {$_ . $linux64} qw(/usr/local/lib /lib /usr/lib);
+
+my %defines =
+ (
+ usedevel => '',
+ optimize => '-g',
+ ld => 'cc',
+ ($linux64 ? (libpth => \@paths) : ()),
+ );
+
+unless(GetOptions(\%options,
+ 'target=s', 'make=s', 'jobs|j=i', 'expect-pass=i',
+ 'expect-fail' => sub { $options{'expect-pass'} = 0; },
+ 'clean!', 'one-liner|e=s', 'c', 'l', 'w', 'match=s',
+ 'no-match=s' => sub {
+ $options{match} = $_[1];
+ $options{'expect-pass'} = 0;
+ },
+ 'force-manifest', 'force-regen', 'test-build', 'validate',
+ 'check-args', 'check-shebang!', 'usage|help|?', 'A=s@',
+ 'D=s@' => sub {
+ my (undef, $val) = @_;
+ if ($val =~ /\A([^=]+)=(.*)/s) {
+ $defines{$1} = length $2 ? $2 : "\0";
+ } else {
+ $defines{$val} = '';
+ }
+ },
+ 'U=s@' => sub {
+ $defines{$_[1]} = undef;
+ },
+ )) {
+ pod2usage(exitval => 255, verbose => 1);
+}
+
+my ($target, $j, $match) = @options{qw(target jobs match)};
+
+ at ARGV = ('sh', '-c', 'cd t && ./perl TEST base/*.t')
+ if $options{validate} && !@ARGV;
+
+pod2usage(exitval => 0, verbose => 2) if $options{usage};
+pod2usage(exitval => 255, verbose => 1)
+ unless @ARGV || $match || $options{'test-build'} || defined $options{'one-liner'};
+pod2usage(exitval => 255, verbose => 1)
+ if !$options{'one-liner'} && ($options{l} || $options{w});
+
+check_shebang($ARGV[0])
+ if $options{'check-shebang'} && @ARGV && !$options{match};
+
+exit 0 if $options{'check-args'};
+
+=head1 NAME
+
+bisect.pl - use git bisect to pinpoint changes
+
+=head1 SYNOPSIS
+
+ # When did this become an error?
+ .../Porting/bisect.pl -e 'my $a := 2;'
+ # When did this stop being an error?
+ .../Porting/bisect.pl --expect-fail -e '1 // 2'
+ # When were all lines matching this pattern removed from all files?
+ .../Porting/bisect.pl --match '\b(?:PL_)hash_seed_set\b'
+ # When was some line matching this pattern added to some file?
+ .../Porting/bisect.pl --expect-fail --match '\buseithreads\b'
+ # When did this test program stop exiting 0?
+ .../Porting/bisect.pl -- ./perl -Ilib ../test_prog.pl
+ # When did this test start failing?
+ .../Porting/bisect.pl -- ./perl -Ilib t/TEST op/sort.t
+ # When did this first become valid syntax?
+ .../Porting/bisect.pl --target=miniperl --end=v5.10.0 \
+ --expect-fail -e 'my $a := 2;'
+ # What was the last revision to build with these options?
+ .../Porting/bisect.pl --test-build -Dd_dosuid
+
+=head1 DESCRIPTION
+
+Together F<bisect.pl> and F<bisect-runner.pl> attempt to automate the use
+of C<git bisect> as much as possible. With one command (and no other files)
+it's easy to find out
+
+=over 4
+
+=item *
+
+Which commit caused this example code to break?
+
+=item *
+
+Which commit caused this example code to start working?
+
+=item *
+
+Which commit added the first file to match this regex?
+
+=item *
+
+Which commit removed the last file to match this regex?
+
+=back
+
+usually without needing to know which versions of perl to use as start and
+end revisions.
+
+By default F<bisect.pl> will process all options, then use the rest of the
+command line as arguments to list C<system> to run a test case. By default,
+the test case should pass (exit with 0) on earlier perls, and fail (exit
+non-zero) on I<blead> (note that running most of perl's test files directly
+won't do this, you'll need to run them through a harness to get the proper
+error code). F<bisect.pl> will use F<bisect-runner.pl> to find the earliest
+stable perl version on which the test case passes, check that it fails on
+blead, and then use F<bisect-runner.pl> with C<git bisect run> to find the
+commit which caused the failure.
+
+Because the test case is the complete argument to C<system>, it is easy to
+run something other than the F<perl> built, if necessary. If you need to run
+the perl built, you'll probably need to invoke it as C<./perl -Ilib ...>
+
+You need a clean checkout to run a bisect, and you can't use the checkout
+which contains F<Porting/bisect.pl> (because C<git bisect>) will check out
+a revision before F<Porting/bisect-runner.pl> was added, which
+C<git bisect run> needs). If your working checkout is called F<perl>, the
+simplest solution is to make a local clone, and run from that. I<i.e.>:
+
+ cd ..
+ git clone perl perl2
+ cd perl2
+ ../perl/Porting/bisect.pl ...
+
+By default, F<bisect-runner.pl> will automatically disable the build of
+L<DB_File> for commits earlier than ccb44e3bf3be2c30, as it's not practical
+to patch DB_File 1.70 and earlier to build with current Berkeley DB headers.
+(ccb44e3bf3be2c30 was in September 1999, between 5.005_62 and 5.005_63.)
+If your F<db.h> is old enough you can override this with C<-Unoextensions>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item *
+
+--start I<commit-ish>
+
+Earliest revision to test, as a I<commit-ish> (a tag, commit or anything
+else C<git> understands as a revision). If not specified, F<bisect.pl> will
+search stable perl releases until it finds one where the test case passes.
+The default is to search from 5.002 to 5.14.0. If F<bisect.pl> detects that
+the checkout is on a case insensitive file system, it will search from
+5.005 to 5.14.0
+
+=item *
+
+--end I<commit-ish>
+
+Most recent revision to test, as a I<commit-ish>. If not specified, defaults
+to I<blead>.
+
+=item *
+
+--target I<target>
+
+F<Makefile> target (or equivalent) needed, to run the test case. If specified,
+this should be one of
+
+=over 4
+
+=item *
+
+I<config.sh>
+
+Just run F<./Configure>
+
+=item *
+
+I<config.h>
+
+Run the various F<*.SH> files to generate F<Makefile>, F<config.h>, I<etc>.
+
+=item *
+
+I<miniperl>
+
+Build F<miniperl>.
+
+=item *
+
+I<lib/Config.pm>
+
+Use F<miniperl> to build F<lib/Config.pm>
+
+=item *
+
+I<Fcntl>
+
+Build F<lib/auto/Fcntl/Fnctl.so> (strictly, C<.$Config{so}>). As L<Fcntl>
+is simple XS module present since 5.000, this provides a fast test of
+whether XS modules can be built. Note, XS modules are built by F<miniperl>,
+hence this target will not build F<perl>.
+
+=item *
+
+I<perl>
+
+Build F<perl>. This also builds pure-Perl modules in F<cpan>, F<dist> and
+F<ext>. XS modules (such as L<Fcntl>) are not built.
+
+=item *
+
+I<test_prep>
+
+Build everything needed to run the tests. This is the default if we're
+running test code, but is time consuming, as it means building all
+XS modules. For older F<Makefile>s, the previous name of C<test-prep>
+is automatically substituted. For very old F<Makefile>s, C<make test> is
+run, as there is no target provided to just get things ready, and for 5.004
+and earlier the tests run very quickly.
+
+=back
+
+=item *
+
+--one-liner 'code to run'
+
+=item *
+
+-e 'code to run'
+
+Example code to run, just like you'd use with C<perl -e>.
+
+This prepends C<./perl -Ilib -e 'code to run'> to the test case given,
+or F<./miniperl> if I<target> is C<miniperl>.
+
+(Usually you'll use C<-e> instead of providing a test case in the
+non-option arguments to F<bisect.pl>)
+
+C<-E> intentionally isn't supported, as it's an error in 5.8.0 and earlier,
+which interferes with detecting errors in the example code itself.
+
+=item *
+
+-c
+
+Add C<-c> to the command line, to cause perl to exit after syntax checking.
+
+=item *
+
+-l
+
+Add C<-l> to the command line with C<-e>
+
+This will automatically append a newline to every output line of your testcase.
+Note that you can't specify an argument to F<perl>'s C<-l> with this, as it's
+not feasible to emulate F<perl>'s somewhat quirky switch parsing with
+L<Getopt::Long>. If you need the full flexibility of C<-l>, you need to write
+a full test case, instead of using C<bisect.pl>'s C<-e> shortcut.
+
+=item *
+
+-w
+
+Add C<-w> to the command line with C<-e>
+
+It's not valid to pass C<-c>, C<-l> or C<-w> to C<bisect.pl> unless you are
+also using C<-e>
+
+=item *
+
+--expect-fail
+
+The test case should fail for the I<start> revision, and pass for the I<end>
+revision. The bisect run will find the first commit where it passes.
+
+=item *
+
+-D I<config_arg=value>
+
+=item *
+
+-U I<config_arg>
+
+=item *
+
+-A I<config_arg=value>
+
+Arguments (C<-A>, C<-D>, C<-U>) to pass to F<Configure>. For example,
+
+ -Dnoextensions=Encode
+ -Uusedevel
+ -Accflags=-DNO_MATHOMS
+
+Repeated C<-A> arguments are passed
+through as is. C<-D> and C<-U> are processed in order, and override
+previous settings for the same parameter. F<bisect-runner.pl> emulates
+C<-Dnoextensions> when F<Configure> itself does not provide it, as it's
+often very useful to be able to disable some XS extensions.
+
+=item *
+
+--make I<make-prog>
+
+The C<make> command to use. If this not set, F<make> is used. If this is
+set, it also adds a C<-Dmake=...> else some recursive make invocations
+in extensions may fail. Typically one would use this as C<--make gmake>
+to use F<gmake> in place of the system F<make>.
+
+=item *
+
+--jobs I<jobs>
+
+=item *
+
+-j I<jobs>
+
+Number of C<make> jobs to run in parallel. If F</proc/cpuinfo> exists and
+can be parsed, or F</sbin/sysctl> exists and reports C<hw.ncpu>, or
+F</usr/bin/getconf> exists and reports C<_NPROCESSORS_ONLN> defaults to 1 +
+I<number of CPUs>. Otherwise defaults to 2.
+
+=item *
+
+--match pattern
+
+=item *
+
+--no-match pattern
+
+Instead of running a test program to determine I<pass> or I<fail>,
+C<--match> will pass if the given regex matches, and hence search for the
+commit that removes the last matching file. C<--no-match> inverts the test,
+to search for the first commit that adds files that match.
+
+The remaining command line arguments are treated as glob patterns for files
+to match against. If none are specified, then they default as follows:
+
+=over 4
+
+=item *
+
+If no I<target> is specified, the match is against all files in the
+repository (which is fast).
+
+=item *
+
+If a I<target> is specified, that target is built, and the match is against
+only the built files.
+
+=back
+
+Treating the command line arguments as glob patterns should not cause
+problems, as the perl distribution has never shipped or built files with
+names that contain characters which are globbing metacharacters.
+
+Anything which is not a readable file is ignored, instead of generating an
+error. (If you want an error, run C<grep> or C<ack> as a test case). This
+permits one to easily search in a file that changed its name. For example:
+
+ .../Porting/bisect.pl --match 'Pod.*Functions' 'pod/buildtoc*'
+
+C<--no-match ...> is implemented as C<--expect-fail --match ...>
+
+=item *
+
+--test-build
+
+Test that the build completes, without running any test case.
+
+By default, if the build for the desired I<target> fails to complete,
+F<bisect-runner.pl> reports a I<skip> back to C<git bisect>, the assumption
+being that one wants to find a commit which changed state "builds && passes"
+to "builds && fails". If instead one is interested in which commit broke the
+build (possibly for particular F<Configure> options), use I<--test-build>
+to treat a build failure as a failure, not a "skip".
+
+Often this option isn't as useful as it first seems, because I<any> build
+failure will be reported to C<git bisect> as a failure, not just the failure
+that you're interested in. Generally, to debug a particular problem, it's
+more useful to use a I<target> that builds properly at the point of interest,
+and then a test case that runs C<make>. For example:
+
+ .../Porting/bisect.pl --start=perl-5.000 --end=perl-5.002 \
+ --expect-fail --force-manifest --target=miniperl make perl
+
+will find the first revision capable of building L<DynaLoader> and then
+F<perl>, without becoming confused by revisions where F<miniperl> won't
+even link.
+
+=item *
+
+--force-manifest
+
+By default, a build will "skip" if any files listed in F<MANIFEST> are not
+present. Usually this is useful, as it avoids false-failures. However, there
+are some long ranges of commits where listed files are missing, which can
+cause a bisect to abort because all that remain are skipped revisions.
+
+In these cases, particularly if the test case uses F<miniperl> and no modules,
+it may be more useful to force the build to continue, even if files
+F<MANIFEST> are missing.
+
+=item *
+
+--force-regen
+
+Run C<make regen_headers> before building F<miniperl>. This may fix a build
+that otherwise would skip because the generated headers at that revision
+are stale. It's not the default because it conceals this error in the true
+state of such revisions.
+
+=item *
+
+--expect-pass [0|1]
+
+C<--expect-pass=0> is equivalent to C<--expect-fail>. I<1> is the default.
+
+=item *
+
+--no-clean
+
+Tell F<bisect-runner.pl> not to clean up after the build. This allows one
+to use F<bisect-runner.pl> to build the current particular perl revision for
+interactive testing, or for debugging F<bisect-runner.pl>.
+
+Passing this to F<bisect.pl> will likely cause the bisect to fail badly.
+
+=item *
+
+--validate
+
+Test that all stable revisions can be built. By default, attempts to build
+I<blead>, I<v5.14.0> .. I<perl-5.002> (or I<perl5.005> on a case insensitive
+file system). Stops at the first failure, without
+cleaning the checkout. Use I<--start> to specify the earliest revision to
+test, I<--end> to specify the most recent. Useful for validating a new
+OS/CPU/compiler combination. For example
+
+ ../perl/Porting/bisect.pl --validate -le 'print "Hello from $]"'
+
+If no testcase is specified, the default is to use F<t/TEST> to run
+F<t/base/*.t>
+
+=item *
+
+--check-args
+
+Validate the options and arguments, and exit silently if they are valid.
+
+=item *
+
+--check-shebang
+
+Validate that the test case isn't an executable file with a
+C<#!/usr/bin/perl> line (or similar). As F<bisect-runner.pl> does B<not>
+prepend C<./perl> to the test case, a I<#!> line specifying an external
+F<perl> binary will cause the test case to always run with I<that> F<perl>,
+not the F<perl> built by the bisect runner. Likely this is not what you
+wanted. If your test case is actually a wrapper script to run other
+commands, you should run it with an explicit interpreter, to be clear. For
+example, instead of C<../perl/Porting/bisect.pl ~/test/testcase.pl> you'd
+run C<../perl/Porting/bisect.pl /usr/bin/perl ~/test/testcase.pl>
+
+=item *
+
+--usage
+
+=item *
+
+--help
+
+=item *
+
+-?
+
+Display the usage information and exit.
+
+=back
+
+=cut
+
+die "$0: Can't build $target" if defined $target && !grep {@targets} $target;
+
+unless (exists $defines{cc}) {
+ # If it fails, the heuristic of 63f9ec3008baf7d6 is noisy, and hence
+ # confusing.
+ # FIXME - really it should be replaced with a proper test of
+ # "can we build something?" and a helpful diagnostic if we can't.
+ # For now, simply move it here.
+ $defines{cc} = (`ccache -V`, $?) ? 'cc' : 'ccache cc';
+}
+
+$j = "-j$j" if $j =~ /\A\d+\z/;
+
+if (exists $options{make}) {
+ if (!exists $defines{make}) {
+ $defines{make} = $options{make};
+ }
+} else {
+ $options{make} = 'make';
+}
+
+# Sadly, however hard we try, I don't think that it will be possible to build
+# modules in ext/ on x86_64 Linux before commit e1666bf5602ae794 on 1999/12/29,
+# which updated to MakeMaker 3.7, which changed from using a hard coded ld
+# in the Makefile to $(LD). On x86_64 Linux the "linker" is gcc.
+
+sub open_or_die {
+ my $file = shift;
+ my $mode = @_ ? shift : '<';
+ open my $fh, $mode, $file or croak("Can't open $file: $!");
+ ${*$fh{SCALAR}} = $file;
+ return $fh;
+}
+
+sub close_or_die {
+ my $fh = shift;
+ return if close $fh;
+ croak("Can't close: $!") unless ref $fh eq 'GLOB';
+ croak("Can't close ${*$fh{SCALAR}}: $!");
+}
+
+sub extract_from_file {
+ my ($file, $rx, $default) = @_;
+ my $fh = open_or_die($file);
+ while (<$fh>) {
+ my @got = $_ =~ $rx;
+ return wantarray ? @got : $got[0]
+ if @got;
+ }
+ return $default if defined $default;
+ return;
+}
+
+sub edit_file {
+ my ($file, $munger) = @_;
+ local $/;
+ my $fh = open_or_die($file);
+ my $orig = <$fh>;
+ die "Can't read $file: $!" unless defined $orig && close $fh;
+ my $new = $munger->($orig);
+ return if $new eq $orig;
+ $fh = open_or_die($file, '>');
+ print $fh $new or die "Can't print to $file: $!";
+ close_or_die($fh);
+}
+
+# AIX supplies a pre-historic patch program, which certainly predates Linux
+# and is probably older than NT. It can't cope with unified diffs. Meanwhile,
+# it's hard enough to get git diff to output context diffs, let alone git show,
+# and nearly all the patches embedded here are unified. So it seems that the
+# path of least resistance is to convert unified diffs to context diffs:
+
+sub process_hunk {
+ my ($from_out, $to_out, $has_from, $has_to, $delete, $add) = @_;
+ ++$$has_from if $delete;
+ ++$$has_to if $add;
+
+ if ($delete && $add) {
+ $$from_out .= "! $_\n" foreach @$delete;
+ $$to_out .= "! $_\n" foreach @$add;
+ } elsif ($delete) {
+ $$from_out .= "- $_\n" foreach @$delete;
+ } elsif ($add) {
+ $$to_out .= "+ $_\n" foreach @$add;
+ }
+}
+
+# This isn't quite general purpose, as it can't cope with
+# '\ No newline at end of file'
+sub ud2cd {
+ my $diff_in = shift;
+ my $diff_out = '';
+
+ # Stuff before the diff
+ while ($diff_in =~ s/\A(?!\*\*\* )(?!--- )([^\n]*\n?)//ms && length $1) {
+ $diff_out .= $1;
+ }
+
+ if (!length $diff_in) {
+ die "That didn't seem to be a diff";
+ }
+
+ if ($diff_in =~ /\A\*\*\* /ms) {
+ warn "Seems to be a context diff already\n";
+ return $diff_out . $diff_in;
+ }
+
+ # Loop for files
+ FILE: while (1) {
+ if ($diff_in =~ s/\A((?:diff |index )[^\n]+\n)//ms) {
+ $diff_out .= $1;
+ next;
+ }
+ if ($diff_in !~ /\A--- /ms) {
+ # Stuff after the diff;
+ return $diff_out . $diff_in;
+ }
+ $diff_in =~ s/\A([^\n]+\n?)//ms;
+ my $line = $1;
+ die "Can't parse '$line'" unless $line =~ s/\A--- /*** /ms;
+ $diff_out .= $line;
+ $diff_in =~ s/\A([^\n]+\n?)//ms;
+ $line = $1;
+ die "Can't parse '$line'" unless $line =~ s/\A\+\+\+ /--- /ms;
+ $diff_out .= $line;
+
+ # Loop for hunks
+ while (1) {
+ next FILE
+ unless $diff_in =~ s/\A\@\@ (-([0-9]+),([0-9]+) \+([0-9]+),([0-9]+)) \@\@[^\n]*\n?//;
+ my ($hunk, $from_start, $from_count, $to_start, $to_count)
+ = ($1, $2, $3, $4, $5);
+ my $from_end = $from_start + $from_count - 1;
+ my $to_end = $to_start + $to_count - 1;
+ my ($from_out, $to_out, $has_from, $has_to, $add, $delete);
+ while (length $diff_in && ($from_count || $to_count)) {
+ die "Confused in $hunk" unless $diff_in =~ s/\A([^\n]*)\n//ms;
+ my $line = $1;
+ $line = ' ' unless length $line;
+ if ($line =~ /^ .*/) {
+ process_hunk(\$from_out, \$to_out, \$has_from, \$has_to,
+ $delete, $add);
+ undef $delete;
+ undef $add;
+ $from_out .= " $line\n";
+ $to_out .= " $line\n";
+ --$from_count;
+ --$to_count;
+ } elsif ($line =~ /^-(.*)/) {
+ push @$delete, $1;
+ --$from_count;
+ } elsif ($line =~ /^\+(.*)/) {
+ push @$add, $1;
+ --$to_count;
+ } else {
+ die "Can't parse '$line' as part of hunk $hunk";
+ }
+ }
+ process_hunk(\$from_out, \$to_out, \$has_from, \$has_to,
+ $delete, $add);
+ die "No lines in hunk $hunk"
+ unless length $from_out || length $to_out;
+ die "No changes in hunk $hunk"
+ unless $has_from || $has_to;
+ $diff_out .= "***************\n";
+ $diff_out .= "*** $from_start,$from_end ****\n";
+ $diff_out .= $from_out if $has_from;
+ $diff_out .= "--- $to_start,$to_end ----\n";
+ $diff_out .= $to_out if $has_to;
+ }
+ }
+}
+
+{
+ my $use_context;
+
+ sub placate_patch_prog {
+ my $patch = shift;
+
+ if (!defined $use_context) {
+ my $version = `patch -v 2>&1`;
+ die "Can't run `patch -v`, \$?=$?, bailing out"
+ unless defined $version;
+ if ($version =~ /Free Software Foundation/) {
+ $use_context = 0;
+ } elsif ($version =~ /Header: patch\.c,v.*\blwall\b/) {
+ # The system patch is older than Linux, and probably older than
+ # Windows NT.
+ $use_context = 1;
+ } else {
+ # Don't know.
+ $use_context = 0;
+ }
+ }
+
+ return $use_context ? ud2cd($patch) : $patch;
+ }
+}
+
+sub apply_patch {
+ my ($patch, $what, $files) = @_;
+ $what = 'patch' unless defined $what;
+ unless (defined $files) {
+ $patch =~ m!^--- a/(\S+)\n\+\+\+ b/\1!sm;
+ $files = " $1";
+ }
+ my $patch_to_use = placate_patch_prog($patch);
+ open my $fh, '|-', 'patch', '-p1' or die "Can't run patch: $!";
+ print $fh $patch_to_use;
+ return if close $fh;
+ print STDERR "Patch is <<'EOPATCH'\n${patch}EOPATCH\n";
+ print STDERR "\nConverted to a context diff <<'EOCONTEXT'\n${patch_to_use}EOCONTEXT\n"
+ if $patch_to_use ne $patch;
+ die "Can't $what$files: $?, $!";
+}
+
+sub apply_commit {
+ my ($commit, @files) = @_;
+ my $patch = `git show $commit @files`;
+ if (!defined $patch) {
+ die "Can't get commit $commit for @files: $?" if @files;
+ die "Can't get commit $commit: $?";
+ }
+ apply_patch($patch, "patch $commit", @files ? " for @files" : '');
+}
+
+sub revert_commit {
+ my ($commit, @files) = @_;
+ my $patch = `git show -R $commit @files`;
+ if (!defined $patch) {
+ die "Can't get revert commit $commit for @files: $?" if @files;
+ die "Can't get revert commit $commit: $?";
+ }
+ apply_patch($patch, "revert $commit", @files ? " for @files" : '');
+}
+
+sub checkout_file {
+ my ($file, $commit) = @_;
+ $commit ||= 'blead';
+ system "git show $commit:$file > $file </dev/null"
+ and die "Could not extract $file at revision $commit";
+}
+
+sub check_shebang {
+ my $file = shift;
+ return unless -e $file;
+ if (!-x $file) {
+ die "$file is not executable.
+system($file, ...) is always going to fail.
+
+Bailing out";
+ }
+ my $fh = open_or_die($file);
+ my $line = <$fh>;
+ return unless $line =~ m{\A#!(/\S+/perl\S*)\s};
+ die "$file will always be run by $1
+It won't be tested by the ./perl we build.
+If you intended to run it with that perl binary, please change your
+test case to
+
+ $1 @ARGV
+
+If you intended to test it with the ./perl we build, please change your
+test case to
+
+ ./perl -Ilib @ARGV
+
+[You may also need to add -- before ./perl to prevent that -Ilib as being
+parsed as an argument to bisect.pl]
+
+Bailing out";
+}
+
+sub clean {
+ if ($options{clean}) {
+ # Needed, because files that are build products in this checked out
+ # version might be in git in the next desired version.
+ system 'git clean -dxf </dev/null';
+ # Needed, because at some revisions the build alters checked out files.
+ # (eg pod/perlapi.pod). Also undoes any changes to makedepend.SH
+ system 'git reset --hard HEAD </dev/null';
+ }
+}
+
+sub skip {
+ my $reason = shift;
+ clean();
+ warn "skipping - $reason";
+ exit 125;
+}
+
+sub report_and_exit {
+ my ($ret, $pass, $fail, $desc) = @_;
+
+ clean();
+
+ my $got = ($options{'expect-pass'} ? !$ret : $ret) ? 'good' : 'bad';
+ if ($ret) {
+ print "$got - $fail $desc\n";
+ } else {
+ print "$got - $pass $desc\n";
+ }
+
+ exit($got eq 'bad');
+}
+
+sub match_and_exit {
+ my ($target, @globs) = @_;
+ my $matches = 0;
+ my $re = qr/$match/;
+ my @files;
+
+ if (@globs) {
+ require File::Glob;
+ foreach (sort map { File::Glob::bsd_glob($_)} @globs) {
+ if (!-f $_ || !-r _) {
+ warn "Skipping matching '$_' as it is not a readable file\n";
+ } else {
+ push @files, $_;
+ }
+ }
+ } else {
+ local $/ = "\0";
+ @files = defined $target ? `git ls-files -o -z`: `git ls-files -z`;
+ chomp @files;
+ }
+
+ foreach my $file (@files) {
+ my $fh = open_or_die($file);
+ while (<$fh>) {
+ if ($_ =~ $re) {
+ ++$matches;
+ if (tr/\t\r\n -~\200-\377//c) {
+ print "Binary file $file matches\n";
+ } else {
+ $_ .= "\n" unless /\n\z/;
+ print "$file: $_";
+ }
+ }
+ }
+ close_or_die($fh);
+ }
+ report_and_exit(!$matches,
+ $matches == 1 ? '1 match for' : "$matches matches for",
+ 'no matches for', $match);
+}
+
+# Not going to assume that system perl is yet new enough to have autodie
+system 'git clean -dxf </dev/null' and die;
+
+if (!defined $target) {
+ match_and_exit(undef, @ARGV) if $match;
+ $target = 'test_prep';
+}
+
+skip('no Configure - is this the //depot/perlext/Compiler branch?')
+ unless -f 'Configure';
+
+my $case_insensitive;
+{
+ my ($dev_C, $ino_C) = stat 'Configure';
+ die "Could not stat Configure: $!" unless defined $dev_C;
+ my ($dev_c, $ino_c) = stat 'configure';
+ ++$case_insensitive
+ if defined $dev_c && $dev_C == $dev_c && $ino_C == $ino_c;
+}
+
+# This changes to PERL_VERSION in 4d8076ea25903dcb in 1999
+my $major
+ = extract_from_file('patchlevel.h',
+ qr/^#define\s+(?:PERL_VERSION|PATCHLEVEL)\s+(\d+)\s/,
+ 0);
+
+patch_Configure();
+patch_hints();
+
+# if Encode is not needed for the test, you can speed up the bisect by
+# excluding it from the runs with -Dnoextensions=Encode
+# ccache is an easy win. Remove it if it causes problems.
+# Commit 1cfa4ec74d4933da adds ignore_versioned_solibs to Configure, and sets it
+# to true in hints/linux.sh
+# On dromedary, from that point on, Configure (by default) fails to find any
+# libraries, because it scans /usr/local/lib /lib /usr/lib, which only contain
+# versioned libraries. Without -lm, the build fails.
+# Telling /usr/local/lib64 /lib64 /usr/lib64 works from that commit onwards,
+# until commit faae14e6e968e1c0 adds it to the hints.
+# However, prior to 1cfa4ec74d4933da telling Configure the truth doesn't work,
+# because it will spot versioned libraries, pass them to the compiler, and then
+# bail out pretty early on. Configure won't let us override libswanted, but it
+# will let us override the entire libs list.
+
+unless (extract_from_file('Configure', 'ignore_versioned_solibs')) {
+ # Before 1cfa4ec74d4933da, so force the libs list.
+
+ my @libs;
+ # This is the current libswanted list from Configure, less the libs removed
+ # by current hints/linux.sh
+ foreach my $lib (qw(sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld
+ ld sun m crypt sec util c cposix posix ucb BSD)) {
+ foreach my $dir (@paths) {
+ next unless -f "$dir/lib$lib.so";
+ push @libs, "-l$lib";
+ last;
+ }
+ }
+ $defines{libs} = \@libs unless exists $defines{libs};
+}
+
+$defines{usenm} = undef
+ if $major < 2 && !exists $defines{usenm};
+
+my ($missing, $created_dirs);
+($missing, $created_dirs) = force_manifest()
+ if $options{'force-manifest'};
+
+my @ARGS = '-dEs';
+foreach my $key (sort keys %defines) {
+ my $val = $defines{$key};
+ if (ref $val) {
+ push @ARGS, "-D$key=@$val";
+ } elsif (!defined $val) {
+ push @ARGS, "-U$key";
+ } elsif (!length $val) {
+ push @ARGS, "-D$key";
+ } else {
+ $val = "" if $val eq "\0";
+ push @ARGS, "-D$key=$val";
+ }
+}
+push @ARGS, map {"-A$_"} @{$options{A}};
+
+# </dev/null because it seems that some earlier versions of Configure can
+# call commands in a way that now has them reading from stdin (and hanging)
+my $pid = fork;
+die "Can't fork: $!" unless defined $pid;
+if (!$pid) {
+ open STDIN, '<', '/dev/null';
+ # If a file in MANIFEST is missing, Configure asks if you want to
+ # continue (the default being 'n'). With stdin closed or /dev/null,
+ # it exits immediately and the check for config.sh below will skip.
+ exec './Configure', @ARGS;
+ die "Failed to start Configure: $!";
+}
+waitpid $pid, 0
+ or die "wait for Configure, pid $pid failed: $!";
+
+patch_SH();
+
+if (-f 'config.sh') {
+ # Emulate noextensions if Configure doesn't support it.
+ fake_noextensions()
+ if $major < 10 && $defines{noextensions};
+ system './Configure -S </dev/null' and die;
+}
+
+if ($target =~ /config\.s?h/) {
+ match_and_exit($target, @ARGV) if $match && -f $target;
+ report_and_exit(!-f $target, 'could build', 'could not build', $target)
+ if $options{'test-build'};
+
+ skip("could not build $target") unless -f $target;
+
+ my $ret = system @ARGV;
+ report_and_exit($ret, 'zero exit from', 'non-zero exit from', "@ARGV");
+} elsif (!-f 'config.sh') {
+ # Skip if something went wrong with Configure
+
+ skip('could not build config.sh');
+}
+
+force_manifest_cleanup($missing, $created_dirs)
+ if $missing;
+
+if($options{'force-regen'}
+ && extract_from_file('Makefile', qr/\bregen_headers\b/)) {
+ # regen_headers was added in e50aee73b3d4c555, patch.1m for perl5.001
+ # It's not worth faking it for earlier revisions.
+ system "make regen_headers </dev/null"
+ and die;
+}
+
+patch_C();
+patch_ext();
+
+# Parallel build for miniperl is safe
+system "$options{make} $j miniperl </dev/null";
+
+# This is the file we expect make to create
+my $expected_file = $target =~ /^test/ ? 't/perl'
+ : $target eq 'Fcntl' ? "lib/auto/Fcntl/Fcntl.$Config{so}"
+ : $target;
+# This is the target we tell make to build in order to get $expected_file
+my $real_target = $target eq 'Fcntl' ? $expected_file : $target;
+
+if ($target ne 'miniperl') {
+ # Nearly all parallel build issues fixed by 5.10.0. Untrustworthy before that.
+ $j = '' if $major < 10;
+
+ if ($real_target eq 'test_prep') {
+ if ($major < 8) {
+ # test-prep was added in 5.004_01, 3e3baf6d63945cb6.
+ # renamed to test_prep in 2001 in 5fe84fd29acaf55c.
+ # earlier than that, just make test. It will be fast enough.
+ $real_target = extract_from_file('Makefile.SH',
+ qr/^(test[-_]prep):/,
+ 'test');
+ }
+ }
+
+ system "$options{make} $j $real_target </dev/null";
+}
+
+my $expected_file_found = $expected_file =~ /perl$/
+ ? -x $expected_file : -r $expected_file;
+
+if ($expected_file_found && $expected_file eq 't/perl') {
+ # Check that it isn't actually pointing to ../miniperl, which will happen
+ # if the sanity check ./miniperl -Ilib -MExporter -e '<?>' fails, and
+ # Makefile tries to run minitest.
+
+ # Of course, helpfully sometimes it's called ../perl, other times .././perl
+ # and who knows if that list is exhaustive...
+ my ($dev0, $ino0) = stat 't/perl';
+ my ($dev1, $ino1) = stat 'perl';
+ unless (defined $dev0 && defined $dev1 && $dev0 == $dev1 && $ino0 == $ino1) {
+ undef $expected_file_found;
+ my $link = readlink $expected_file;
+ warn "'t/perl' => '$link', not 'perl'";
+ die "Could not realink t/perl: $!" unless defined $link;
+ }
+}
+
+if ($options{'test-build'}) {
+ report_and_exit(!$expected_file_found, 'could build', 'could not build',
+ $real_target);
+} elsif (!$expected_file_found) {
+ skip("could not build $real_target");
+}
+
+match_and_exit($real_target, @ARGV) if $match;
+
+if (defined $options{'one-liner'}) {
+ my $exe = $target =~ /^(?:perl$|test)/ ? 'perl' : 'miniperl';
+ unshift @ARGV, '-e', $options{'one-liner'};
+ foreach (qw(c l w)) {
+ unshift @ARGV, "-$_" if $options{$_};
+ }
+ unshift @ARGV, "./$exe", '-Ilib';
+}
+
+# This is what we came here to run:
+
+if (exists $Config{ldlibpthname}) {
+ require Cwd;
+ my $varname = $Config{ldlibpthname};
+ my $cwd = Cwd::getcwd();
+ if (defined $ENV{$varname}) {
+ $ENV{$varname} = $cwd . $Config{path_sep} . $ENV{$varname};
+ } else {
+ $ENV{$varname} = $cwd;
+ }
+}
+
+my $ret = system @ARGV;
+
+report_and_exit($ret, 'zero exit from', 'non-zero exit from', "@ARGV");
+
+############################################################################
+#
+# Patching, editing and faking routines only below here.
+#
+############################################################################
+
+sub fake_noextensions {
+ edit_file('config.sh', sub {
+ my @lines = split /\n/, shift;
+ my @ext = split /\s+/, $defines{noextensions};
+ foreach (@lines) {
+ next unless /^extensions=/ || /^dynamic_ext/;
+ foreach my $ext (@ext) {
+ s/\b$ext( )?\b/$1/;
+ }
+ }
+ return join "\n", @lines;
+ });
+}
+
+sub force_manifest {
+ my (@missing, @created_dirs);
+ my $fh = open_or_die('MANIFEST');
+ while (<$fh>) {
+ next unless /^(\S+)/;
+ # -d is special case needed (at least) between 27332437a2ed1941 and
+ # bf3d9ec563d25054^ inclusive, as manifest contains ext/Thread/Thread
+ push @missing, $1
+ unless -f $1 || -d $1;
+ }
+ close_or_die($fh);
+
+ foreach my $pathname (@missing) {
+ my @parts = split '/', $pathname;
+ my $leaf = pop @parts;
+ my $path = '.';
+ while (@parts) {
+ $path .= '/' . shift @parts;
+ next if -d $path;
+ mkdir $path, 0700 or die "Can't create $path: $!";
+ unshift @created_dirs, $path;
+ }
+ $fh = open_or_die($pathname, '>');
+ close_or_die($fh);
+ chmod 0, $pathname or die "Can't chmod 0 $pathname: $!";
+ }
+ return \@missing, \@created_dirs;
+}
+
+sub force_manifest_cleanup {
+ my ($missing, $created_dirs) = @_;
+ # This is probably way too paranoid:
+ my @errors;
+ require Fcntl;
+ foreach my $file (@$missing) {
+ my (undef, undef, $mode, undef, undef, undef, undef, $size)
+ = stat $file;
+ if (!defined $mode) {
+ push @errors, "Added file $file has been deleted by Configure";
+ next;
+ }
+ if (Fcntl::S_IMODE($mode) != 0) {
+ push @errors,
+ sprintf 'Added file %s had mode changed by Configure to %03o',
+ $file, $mode;
+ }
+ if ($size != 0) {
+ push @errors,
+ "Added file $file had sized changed by Configure to $size";
+ }
+ unlink $file or die "Can't unlink $file: $!";
+ }
+ foreach my $dir (@$created_dirs) {
+ rmdir $dir or die "Can't rmdir $dir: $!";
+ }
+ skip("@errors")
+ if @errors;
+}
+
+sub patch_Configure {
+ if ($major < 1) {
+ if (extract_from_file('Configure',
+ qr/^\t\t\*=\*\) echo "\$1" >> \$optdef;;$/)) {
+ # This is " Spaces now allowed in -D command line options.",
+ # part of commit ecfc54246c2a6f42
+ apply_patch(<<'EOPATCH');
+diff --git a/Configure b/Configure
+index 3d3b38d..78ffe16 100755
+--- a/Configure
++++ b/Configure
+@@ -652,7 +777,8 @@ while test $# -gt 0; do
+ echo "$me: use '-U symbol=', not '-D symbol='." >&2
+ echo "$me: ignoring -D $1" >&2
+ ;;
+- *=*) echo "$1" >> $optdef;;
++ *=*) echo "$1" | \
++ sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> $optdef;;
+ *) echo "$1='define'" >> $optdef;;
+ esac
+ shift
+EOPATCH
+ }
+
+ if (extract_from_file('Configure', qr/^if \$contains 'd_namlen' \$xinc\b/)) {
+ # Configure's original simple "grep" for d_namlen falls foul of the
+ # approach taken by the glibc headers:
+ # #ifdef _DIRENT_HAVE_D_NAMLEN
+ # # define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
+ #
+ # where _DIRENT_HAVE_D_NAMLEN is not defined on Linux.
+ # This is also part of commit ecfc54246c2a6f42
+ apply_patch(<<'EOPATCH');
+diff --git a/Configure b/Configure
+index 3d3b38d..78ffe16 100755
+--- a/Configure
++++ b/Configure
+@@ -3935,7 +4045,8 @@ $rm -f try.c
+
+ : see if the directory entry stores field length
+ echo " "
+-if $contains 'd_namlen' $xinc >/dev/null 2>&1; then
++$cppstdin $cppflags $cppminus < "$xinc" > try.c
++if $contains 'd_namlen' try.c >/dev/null 2>&1; then
+ echo "Good, your directory entry keeps length information in d_namlen." >&4
+ val="$define"
+ else
+EOPATCH
+ }
+ }
+
+ if ($major < 2
+ && !extract_from_file('Configure',
+ qr/Try to guess additional flags to pick up local libraries/)) {
+ my $mips = extract_from_file('Configure',
+ qr!(''\) if (?:\./)?mips; then)!);
+ # This is part of perl-5.001n. It's needed, to add -L/usr/local/lib to
+ # theld flags if libraries are found there. It shifts the code to set up
+ # libpth earlier, and then adds the code to add libpth entries to
+ # ldflags
+ # mips was changed to ./mips in ecfc54246c2a6f42, perl5.000 patch.0g
+ apply_patch(sprintf <<'EOPATCH', $mips);
+diff --git a/Configure b/Configure
+index 53649d5..0635a6e 100755
+--- a/Configure
++++ b/Configure
+@@ -2749,6 +2749,52 @@ EOM
+ ;;
+ esac
+
++: Set private lib path
++case "$plibpth" in
++'') if ./mips; then
++ plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
++ fi;;
++esac
++case "$libpth" in
++' ') dlist='';;
++'') dlist="$plibpth $glibpth";;
++*) dlist="$libpth";;
++esac
++
++: Now check and see which directories actually exist, avoiding duplicates
++libpth=''
++for xxx in $dlist
++do
++ if $test -d $xxx; then
++ case " $libpth " in
++ *" $xxx "*) ;;
++ *) libpth="$libpth $xxx";;
++ esac
++ fi
++done
++$cat <<'EOM'
++
++Some systems have incompatible or broken versions of libraries. Among
++the directories listed in the question below, please remove any you
++know not to be holding relevant libraries, and add any that are needed.
++Say "none" for none.
++
++EOM
++case "$libpth" in
++'') dflt='none';;
++*)
++ set X $libpth
++ shift
++ dflt=${1+"$@"}
++ ;;
++esac
++rp="Directories to use for library searches?"
++. ./myread
++case "$ans" in
++none) libpth=' ';;
++*) libpth="$ans";;
++esac
++
+ : flags used in final linking phase
+ case "$ldflags" in
+ '') if ./venix; then
+@@ -2765,6 +2811,23 @@ case "$ldflags" in
+ ;;
+ *) dflt="$ldflags";;
+ esac
++
++: Possible local library directories to search.
++loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
++loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
++
++: Try to guess additional flags to pick up local libraries.
++for thislibdir in $libpth; do
++ case " $loclibpth " in
++ *" $thislibdir "*)
++ case "$dflt " in
++ "-L$thislibdir ") ;;
++ *) dflt="$dflt -L$thislibdir" ;;
++ esac
++ ;;
++ esac
++done
++
+ echo " "
+ rp="Any additional ld flags (NOT including libraries)?"
+ . ./myread
+@@ -2828,52 +2891,6 @@ n) echo "OK, that should do.";;
+ esac
+ $rm -f try try.* core
+
+-: Set private lib path
+-case "$plibpth" in
+-%s
+- plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
+- fi;;
+-esac
+-case "$libpth" in
+-' ') dlist='';;
+-'') dlist="$plibpth $glibpth";;
+-*) dlist="$libpth";;
+-esac
+-
+-: Now check and see which directories actually exist, avoiding duplicates
+-libpth=''
+-for xxx in $dlist
+-do
+- if $test -d $xxx; then
+- case " $libpth " in
+- *" $xxx "*) ;;
+- *) libpth="$libpth $xxx";;
+- esac
+- fi
+-done
+-$cat <<'EOM'
+-
+-Some systems have incompatible or broken versions of libraries. Among
+-the directories listed in the question below, please remove any you
+-know not to be holding relevant libraries, and add any that are needed.
+-Say "none" for none.
+-
+-EOM
+-case "$libpth" in
+-'') dflt='none';;
+-*)
+- set X $libpth
+- shift
+- dflt=${1+"$@"}
+- ;;
+-esac
+-rp="Directories to use for library searches?"
+-. ./myread
+-case "$ans" in
+-none) libpth=' ';;
+-*) libpth="$ans";;
+-esac
+-
+ : compute shared library extension
+ case "$so" in
+ '')
+EOPATCH
+ }
+
+ if ($major < 5 && extract_from_file('Configure',
+ qr!if \$cc \$ccflags try\.c -o try >/dev/null 2>&1; then!)) {
+ # Analogous to the more general fix of dfe9444ca7881e71
+ # Without this flags such as -m64 may not be passed to this compile,
+ # which results in a byteorder of '1234' instead of '12345678', which
+ # can then cause crashes.
+
+ if (extract_from_file('Configure', qr/xxx_prompt=y/)) {
+ # 8e07c86ebc651fe9 or later
+ # ("This is my patch patch.1n for perl5.001.")
+ apply_patch(<<'EOPATCH');
+diff --git a/Configure b/Configure
+index 62249dd..c5c384e 100755
+--- a/Configure
++++ b/Configure
+@@ -8247,7 +8247,7 @@ main()
+ }
+ EOCP
+ xxx_prompt=y
+- if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
++ if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
+ dflt=`./try`
+ case "$dflt" in
+ [1-4][1-4][1-4][1-4]|12345678|87654321)
+EOPATCH
+ } else {
+ apply_patch(<<'EOPATCH');
+diff --git a/Configure b/Configure
+index 53649d5..f1cd64a 100755
+--- a/Configure
++++ b/Configure
+@@ -6362,7 +6362,7 @@ main()
+ printf("\n");
+ }
+ EOCP
+- if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
++ if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1 ; then
+ dflt=`./try`
+ case "$dflt" in
+ ????|????????) echo "(The test program ran ok.)";;
+EOPATCH
+ }
+ }
+
+ if ($major < 6 && !extract_from_file('Configure',
+ qr!^\t-A\)$!)) {
+ # This adds the -A option to Configure, which is incredibly useful
+ # Effectively this is commits 02e93a22d20fc9a5, 5f83a3e9d818c3ad,
+ # bde6b06b2c493fef, f7c3111703e46e0c and 2 lines of trailing whitespace
+ # removed by 613d6c3e99b9decc, but applied at slightly different
+ # locations to ensure a clean patch back to 5.000
+ # Note, if considering patching to the intermediate revisions to fix
+ # bugs in -A handling, f7c3111703e46e0c is from 2002, and hence
+ # $major == 8
+
+ # To add to the fun, early patches add -K and -O options, and it's not
+ # trivial to get patch to put the C<. ./posthint.sh> in the right place
+ edit_file('Configure', sub {
+ my $code = shift;
+ $code =~ s/(optstr = ")([^"]+";\s*# getopt-style specification)/$1A:$2/
+ or die "Substitution failed";
+ $code =~ s!^(: who configured the system)!
+touch posthint.sh
+. ./posthint.sh
+
+$1!ms
+ or die "Substitution failed";
+ return $code;
+ });
+ apply_patch(<<'EOPATCH');
+diff --git a/Configure b/Configure
+index 4b55fa6..60c3c64 100755
+--- a/Configure
++++ b/Configure
+@@ -1150,6 +1150,7 @@ set X `for arg in "$@"; do echo "X$arg"; done |
+ eval "set $*"
+ shift
+ rm -f options.awk
++rm -f posthint.sh
+
+ : set up default values
+ fastread=''
+@@ -1172,6 +1173,56 @@ while test $# -gt 0; do
+ case "$1" in
+ -d) shift; fastread=yes;;
+ -e) shift; alldone=cont;;
++ -A)
++ shift
++ xxx=''
++ yyy="$1"
++ zzz=''
++ uuu=undef
++ case "$yyy" in
++ *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
++ case "$zzz" in
++ *:*) zzz='' ;;
++ *) xxx=append
++ zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
++ yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
++ esac
++ ;;
++ esac
++ case "$xxx" in
++ '') case "$yyy" in
++ *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
++ yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
++ zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
++ yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
++ *) xxx=`echo "$yyy"|sed 's!:.*!!'`
++ yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
++ esac
++ ;;
++ esac
++ case "$xxx" in
++ append)
++ echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
++ clear)
++ echo "$yyy=''" >> posthint.sh ;;
++ define)
++ case "$zzz" in
++ '') zzz=define ;;
++ esac
++ echo "$yyy='$zzz'" >> posthint.sh ;;
++ eval)
++ echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
++ prepend)
++ echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
++ undef)
++ case "$zzz" in
++ '') zzz="$uuu" ;;
++ esac
++ echo "$yyy=$zzz" >> posthint.sh ;;
++ *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
++ esac
++ shift
++ ;;
+ -f)
+ shift
+ cd ..
+EOPATCH
+ }
+
+ if ($major < 8 && $^O eq 'aix') {
+ edit_file('Configure', sub {
+ my $code = shift;
+ # Replicate commit a8c676c69574838b
+ # Whitespace allowed at the ends of /lib/syscalls.exp lines
+ # and half of commit c6912327ae30e6de
+ # AIX syscalls.exp scan: the syscall might be marked 32, 3264, or 64
+ $code =~ s{(\bsed\b.*\bsyscall)(?:\[0-9\]\*)?(\$.*/lib/syscalls\.exp)}
+ {$1 . "[0-9]*[ \t]*" . $2}e;
+ return $code;
+ });
+ }
+
+ if ($major < 8 && !extract_from_file('Configure',
+ qr/^\t\tif test ! -t 0; then$/)) {
+ # Before dfe9444ca7881e71, Configure would refuse to run if stdin was
+ # not a tty. With that commit, the tty requirement was dropped for -de
+ # and -dE
+ # Commit aaeb8e512e8e9e14 dropped the tty requirement for -S
+ # For those older versions, it's probably easiest if we simply remove
+ # the sanity test.
+ edit_file('Configure', sub {
+ my $code = shift;
+ $code =~ s/test ! -t 0/test Perl = rules/;
+ return $code;
+ });
+ }
+
+ if ($major == 8 || $major == 9) {
+ # Fix symbol detection to that of commit 373dfab3839ca168 if it's any
+ # intermediate version 5129fff43c4fe08c or later, as the intermediate
+ # versions don't work correctly on (at least) Sparc Linux.
+ # 5129fff43c4fe08c adds the first mention of mistrustnm.
+ # 373dfab3839ca168 removes the last mention of lc=""
+ edit_file('Configure', sub {
+ my $code = shift;
+ return $code
+ if $code !~ /\btc="";/; # 373dfab3839ca168 or later
+ return $code
+ if $code !~ /\bmistrustnm\b/; # before 5129fff43c4fe08c
+ my $fixed = <<'EOC';
+
+: is a C symbol defined?
+csym='tlook=$1;
+case "$3" in
+-v) tf=libc.tmp; tdc="";;
+-a) tf=libc.tmp; tdc="[]";;
+*) tlook="^$1\$"; tf=libc.list; tdc="()";;
+esac;
+tx=yes;
+case "$reuseval-$4" in
+true-) ;;
+true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
+esac;
+case "$tx" in
+yes)
+ tval=false;
+ if $test "$runnm" = true; then
+ if $contains $tlook $tf >/dev/null 2>&1; then
+ tval=true;
+ elif $test "$mistrustnm" = compile -o "$mistrustnm" = run; then
+ echo "void *(*(p()))$tdc { extern void *$1$tdc; return &$1; } int main() { if(p()) return(0); else return(1); }"> try.c;
+ $cc -o try $optimize $ccflags $ldflags try.c >/dev/null 2>&1 $libs && tval=true;
+ $test "$mistrustnm" = run -a -x try && { $run ./try$_exe >/dev/null 2>&1 || tval=false; };
+ $rm -f try$_exe try.c core core.* try.core;
+ fi;
+ else
+ echo "void *(*(p()))$tdc { extern void *$1$tdc; return &$1; } int main() { if(p()) return(0); else return(1); }"> try.c;
+ $cc -o try $optimize $ccflags $ldflags try.c $libs >/dev/null 2>&1 && tval=true;
+ $rm -f try$_exe try.c;
+ fi;
+ ;;
+*)
+ case "$tval" in
+ $define) tval=true;;
+ *) tval=false;;
+ esac;
+ ;;
+esac;
+eval "$2=$tval"'
+
+EOC
+ $code =~ s/\n: is a C symbol defined\?\n.*?\neval "\$2=\$tval"'\n\n/$fixed/sm
+ or die "substitution failed";
+ return $code;
+ });
+ }
+
+ if ($major < 10
+ && extract_from_file('Configure', qr/^set malloc\.h i_malloc$/)) {
+ # This is commit 01d07975f7ef0e7d, trimmed, with $compile inlined as
+ # prior to bd9b35c97ad661cc Configure had the malloc.h test before the
+ # definition of $compile.
+ apply_patch(<<'EOPATCH');
+diff --git a/Configure b/Configure
+index 3d2e8b9..6ce7766 100755
+--- a/Configure
++++ b/Configure
+@@ -6743,5 +6743,22 @@ set d_dosuid
+
+ : see if this is a malloc.h system
+-set malloc.h i_malloc
+-eval $inhdr
++: we want a real compile instead of Inhdr because some systems have a
++: malloc.h that just gives a compile error saying to use stdlib.h instead
++echo " "
++$cat >try.c <<EOCP
++#include <stdlib.h>
++#include <malloc.h>
++int main () { return 0; }
++EOCP
++set try
++if $cc $optimize $ccflags $ldflags -o try $* try.c $libs > /dev/null 2>&1; then
++ echo "<malloc.h> found." >&4
++ val="$define"
++else
++ echo "<malloc.h> NOT found." >&4
++ val="$undef"
++fi
++$rm -f try.c try
++set i_malloc
++eval $setvar
+
+EOPATCH
+ }
+}
+
+sub patch_hints {
+ if ($^O eq 'freebsd') {
+ # There are rather too many version-specific FreeBSD hints fixes to
+ # patch individually. Also, more than once the FreeBSD hints file has
+ # been written in what turned out to be a rather non-future-proof style,
+ # with case statements treating the most recent version as the
+ # exception, instead of treating previous versions' behaviour explicitly
+ # and changing the default to cater for the current behaviour. (As
+ # strangely, future versions inherit the current behaviour.)
+ checkout_file('hints/freebsd.sh');
+ } elsif ($^O eq 'darwin') {
+ if ($major < 8) {
+ # We can't build on darwin without some of the data in the hints
+ # file. Probably less surprising to use the earliest version of
+ # hints/darwin.sh and then edit in place just below, than use
+ # blead's version, as that would create a discontinuity at
+ # f556e5b971932902 - before it, hints bugs would be "fixed", after
+ # it they'd resurface. This way, we should give the illusion of
+ # monotonic bug fixing.
+ my $faking_it;
+ if (!-f 'hints/darwin.sh') {
+ checkout_file('hints/darwin.sh', 'f556e5b971932902');
+ ++$faking_it;
+ }
+
+ edit_file('hints/darwin.sh', sub {
+ my $code = shift;
+ # Part of commit 8f4f83badb7d1ba9, which mostly undoes
+ # commit 0511a818910f476c.
+ $code =~ s/^cppflags='-traditional-cpp';$/cppflags="\${cppflags} -no-cpp-precomp"/m;
+ # commit 14c11978e9b52e08/803bb6cc74d36a3f
+ # Without this, code in libperl.bundle links against op.o
+ # in preference to opmini.o on the linker command line,
+ # and hence miniperl tries to use File::Glob instead of
+ # csh
+ $code =~ s/^(lddlflags=)/ldflags="\${ldflags} -flat_namespace"\n$1/m;
+ # f556e5b971932902 also patches Makefile.SH with some
+ # special case code to deal with useshrplib for darwin.
+ # Given that post 5.8.0 the darwin hints default was
+ # changed to false, and it would be very complex to splice
+ # in that code in various versions of Makefile.SH back
+ # to 5.002, lets just turn it off.
+ $code =~ s/^useshrplib='true'/useshrplib='false'/m
+ if $faking_it;
+
+ # Part of commit d235852b65d51c44
+ # Don't do this on a case sensitive HFS+ partition, as it
+ # breaks the build for 5.003 and earlier.
+ if ($case_insensitive
+ && $code !~ /^firstmakefile=GNUmakefile/) {
+ $code .= "\nfirstmakefile=GNUmakefile;\n";
+ }
+
+ return $code;
+ });
+ }
+ } elsif ($^O eq 'netbsd') {
+ if ($major < 6) {
+ # These are part of commit 099685bc64c7dbce
+ edit_file('hints/netbsd.sh', sub {
+ my $code = shift;
+ my $fixed = <<'EOC';
+case "$osvers" in
+0.9|0.8*)
+ usedl="$undef"
+ ;;
+*)
+ if [ -f /usr/libexec/ld.elf_so ]; then
+ d_dlopen=$define
+ d_dlerror=$define
+ ccdlflags="-Wl,-E -Wl,-R${PREFIX}/lib $ccdlflags"
+ cccdlflags="-DPIC -fPIC $cccdlflags"
+ lddlflags="--whole-archive -shared $lddlflags"
+ elif [ "`uname -m`" = "pmax" ]; then
+# NetBSD 1.3 and 1.3.1 on pmax shipped an 'old' ld.so, which will not work.
+ d_dlopen=$undef
+ elif [ -f /usr/libexec/ld.so ]; then
+ d_dlopen=$define
+ d_dlerror=$define
+ ccdlflags="-Wl,-R${PREFIX}/lib $ccdlflags"
+# we use -fPIC here because -fpic is *NOT* enough for some of the
+# extensions like Tk on some netbsd platforms (the sparc is one)
+ cccdlflags="-DPIC -fPIC $cccdlflags"
+ lddlflags="-Bforcearchive -Bshareable $lddlflags"
+ else
+ d_dlopen=$undef
+ fi
+ ;;
+esac
+EOC
+ $code =~ s/^case "\$osvers" in\n0\.9\|0\.8.*?^esac\n/$fixed/ms;
+ return $code;
+ });
+ }
+ } elsif ($^O eq 'openbsd') {
+ if ($major < 8) {
+ checkout_file('hints/openbsd.sh', '43051805d53a3e4c')
+ unless -f 'hints/openbsd.sh';
+ my $which = extract_from_file('hints/openbsd.sh',
+ qr/# from (2\.8|3\.1) onwards/,
+ '');
+ if ($which eq '') {
+ my $was = extract_from_file('hints/openbsd.sh',
+ qr/(lddlflags="(?:-Bforcearchive )?-Bshareable)/);
+ # This is commit 154d43cbcf57271c and parts of 5c75dbfa77b0949c
+ # and 29b5585702e5e025
+ apply_patch(sprintf <<'EOPATCH', $was);
+diff --git a/hints/openbsd.sh b/hints/openbsd.sh
+index a7d8bf2..5b79709 100644
+--- a/hints/openbsd.sh
++++ b/hints/openbsd.sh
+@@ -37,7 +37,25 @@ OpenBSD.alpha|OpenBSD.mips|OpenBSD.powerpc|OpenBSD.vax)
+ # we use -fPIC here because -fpic is *NOT* enough for some of the
+ # extensions like Tk on some OpenBSD platforms (ie: sparc)
+ cccdlflags="-DPIC -fPIC $cccdlflags"
+- %s $lddlflags"
++ case "$osvers" in
++ [01].*|2.[0-7]|2.[0-7].*)
++ lddlflags="-Bshareable $lddlflags"
++ ;;
++ 2.[8-9]|3.0)
++ ld=${cc:-cc}
++ lddlflags="-shared -fPIC $lddlflags"
++ ;;
++ *) # from 3.1 onwards
++ ld=${cc:-cc}
++ lddlflags="-shared -fPIC $lddlflags"
++ libswanted=`echo $libswanted | sed 's/ dl / /'`
++ ;;
++ esac
++
++ # We need to force ld to export symbols on ELF platforms.
++ # Without this, dlopen() is crippled.
++ ELF=`${cc:-cc} -dM -E - </dev/null | grep __ELF__`
++ test -n "$ELF" && ldflags="-Wl,-E $ldflags"
+ ;;
+ esac
+
+EOPATCH
+ } elsif ($which eq '2.8') {
+ # This is parts of 5c75dbfa77b0949c and 29b5585702e5e025, and
+ # possibly eb9cd59d45ad2908
+ my $was = extract_from_file('hints/openbsd.sh',
+ qr/lddlflags="(-shared(?: -fPIC)?) \$lddlflags"/);
+
+ apply_patch(sprintf <<'EOPATCH', $was);
+--- a/hints/openbsd.sh 2011-10-21 17:25:20.000000000 +0200
++++ b/hints/openbsd.sh 2011-10-21 16:58:43.000000000 +0200
+@@ -44,11 +44,21 @@
+ [01].*|2.[0-7]|2.[0-7].*)
+ lddlflags="-Bshareable $lddlflags"
+ ;;
+- *) # from 2.8 onwards
++ 2.[8-9]|3.0)
+ ld=${cc:-cc}
+- lddlflags="%s $lddlflags"
++ lddlflags="-shared -fPIC $lddlflags"
++ ;;
++ *) # from 3.1 onwards
++ ld=${cc:-cc}
++ lddlflags="-shared -fPIC $lddlflags"
++ libswanted=`echo $libswanted | sed 's/ dl / /'`
+ ;;
+ esac
++
++ # We need to force ld to export symbols on ELF platforms.
++ # Without this, dlopen() is crippled.
++ ELF=`${cc:-cc} -dM -E - </dev/null | grep __ELF__`
++ test -n "$ELF" && ldflags="-Wl,-E $ldflags"
+ ;;
+ esac
+
+EOPATCH
+ } elsif ($which eq '3.1'
+ && !extract_from_file('hints/openbsd.sh',
+ qr/We need to force ld to export symbols on ELF platforms/)) {
+ # This is part of 29b5585702e5e025
+ apply_patch(<<'EOPATCH');
+diff --git a/hints/openbsd.sh b/hints/openbsd.sh
+index c6b6bc9..4839d04 100644
+--- a/hints/openbsd.sh
++++ b/hints/openbsd.sh
+@@ -54,6 +54,11 @@ alpha-2.[0-8]|mips-*|vax-*|powerpc-2.[0-7]|m88k-*)
+ libswanted=`echo $libswanted | sed 's/ dl / /'`
+ ;;
+ esac
++
++ # We need to force ld to export symbols on ELF platforms.
++ # Without this, dlopen() is crippled.
++ ELF=`${cc:-cc} -dM -E - </dev/null | grep __ELF__`
++ test -n "$ELF" && ldflags="-Wl,-E $ldflags"
+ ;;
+ esac
+
+EOPATCH
+ }
+ }
+ } elsif ($^O eq 'linux') {
+ if ($major < 1) {
+ # sparc linux seems to need the -Dbool=char -DHAS_BOOL part of
+ # perl5.000 patch.0n: [address Configure and build issues]
+ edit_file('hints/linux.sh', sub {
+ my $code = shift;
+ $code =~ s!-I/usr/include/bsd!-Dbool=char -DHAS_BOOL!g;
+ return $code;
+ });
+ }
+
+ if ($major <= 9) {
+ if (`uname -sm` =~ qr/^Linux sparc/) {
+ if (extract_from_file('hints/linux.sh', qr/sparc-linux/)) {
+ # Be sure to use -fPIC not -fpic on Linux/SPARC
+ apply_commit('f6527d0ef0c13ad4');
+ } elsif(!extract_from_file('hints/linux.sh',
+ qr/^sparc-linux\)$/)) {
+ my $fh = open_or_die('hints/linux.sh', '>>');
+ print $fh <<'EOT' or die $!;
+
+case "`uname -m`" in
+sparc*)
+ case "$cccdlflags" in
+ *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;;
+ *) cccdlflags="$cccdlflags -fPIC" ;;
+ esac
+ ;;
+esac
+EOT
+ close_or_die($fh);
+ }
+ }
+ }
+ }
+}
+
+sub patch_SH {
+ # Cwd.xs added in commit 0d2079faa739aaa9. Cwd.pm moved to ext/ 8 years
+ # later in commit 403f501d5b37ebf0
+ if ($major > 0 && <*/Cwd/Cwd.xs>) {
+ if ($major < 10
+ && !extract_from_file('Makefile.SH', qr/^extra_dep=''$/)) {
+ # The Makefile.PL for Unicode::Normalize needs
+ # lib/unicore/CombiningClass.pl. Even without a parallel build, we
+ # need a dependency to ensure that it builds. This is a variant of
+ # commit 9f3ef600c170f61e. Putting this for earlier versions gives
+ # us a spot on which to hang the edits below
+ apply_patch(<<'EOPATCH');
+diff --git a/Makefile.SH b/Makefile.SH
+index f61d0db..6097954 100644
+--- a/Makefile.SH
++++ b/Makefile.SH
+@@ -155,10 +155,20 @@ esac
+
+ : Prepare dependency lists for Makefile.
+ dynamic_list=' '
++extra_dep=''
+ for f in $dynamic_ext; do
+ : the dependency named here will never exist
+ base=`echo "$f" | sed 's/.*\///'`
+- dynamic_list="$dynamic_list lib/auto/$f/$base.$dlext"
++ this_target="lib/auto/$f/$base.$dlext"
++ dynamic_list="$dynamic_list $this_target"
++
++ : Parallel makes reveal that we have some interdependencies
++ case $f in
++ Math/BigInt/FastCalc) extra_dep="$extra_dep
++$this_target: lib/auto/List/Util/Util.$dlext" ;;
++ Unicode/Normalize) extra_dep="$extra_dep
++$this_target: lib/unicore/CombiningClass.pl" ;;
++ esac
+ done
+
+ static_list=' '
+@@ -987,2 +997,9 @@ n_dummy $(nonxs_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
+ @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
++!NO!SUBS!
++
++$spitshell >>Makefile <<EOF
++$extra_dep
++EOF
++
++$spitshell >>Makefile <<'!NO!SUBS!'
+
+EOPATCH
+ }
+
+ if ($major == 11) {
+ if (extract_from_file('patchlevel.h',
+ qr/^#include "unpushed\.h"/)) {
+ # I had thought it easier to detect when building one of the 52
+ # commits with the original method of incorporating the git
+ # revision and drop parallel make flags. Commits shown by
+ # git log 46807d8e809cc127^..dcff826f70bf3f64^ ^d4fb0a1f15d1a1c4
+ # However, it's not actually possible to make miniperl for that
+ # configuration as-is, because the file .patchnum is only made
+ # as a side effect of target 'all'
+ # I also don't think that it's "safe" to simply run
+ # make_patchnum.sh before the build. We need the proper
+ # dependency rules in the Makefile to *stop* it being run again
+ # at the wrong time.
+ # This range is important because contains the commit that
+ # merges Schwern's y2038 work.
+ apply_patch(<<'EOPATCH');
+diff --git a/Makefile.SH b/Makefile.SH
+index 9ad8b6f..106e721 100644
+--- a/Makefile.SH
++++ b/Makefile.SH
+@@ -540,9 +544,14 @@ sperl.i: perl.c $(h)
+
+ .PHONY: all translators utilities make_patchnum
+
+-make_patchnum:
++make_patchnum: lib/Config_git.pl
++
++lib/Config_git.pl: make_patchnum.sh
+ sh $(shellflags) make_patchnum.sh
+
++# .patchnum, unpushed.h and lib/Config_git.pl are built by make_patchnum.sh
++unpushed.h .patchnum: lib/Config_git.pl
++
+ # make sure that we recompile perl.c if .patchnum changes
+ perl$(OBJ_EXT): .patchnum unpushed.h
+
+EOPATCH
+ } elsif (-f '.gitignore'
+ && extract_from_file('.gitignore', qr/^\.patchnum$/)) {
+ # 8565263ab8a47cda to 46807d8e809cc127^ inclusive.
+ edit_file('Makefile.SH', sub {
+ my $code = shift;
+ $code =~ s/^make_patchnum:\n/make_patchnum: .patchnum
+
+.sha1: .patchnum
+
+.patchnum: make_patchnum.sh
+/m;
+ return $code;
+ });
+ } elsif (-f 'lib/.gitignore'
+ && extract_from_file('lib/.gitignore',
+ qr!^/Config_git.pl!)
+ && !extract_from_file('Makefile.SH',
+ qr/^uudmap\.h.*:bitcount.h$/)) {
+ # Between commits and dcff826f70bf3f64 and 0f13ebd5d71f8177^
+ edit_file('Makefile.SH', sub {
+ my $code = shift;
+ # Bug introduced by 344af494c35a9f0f
+ # fixed in 0f13ebd5d71f8177
+ $code =~ s{^(pod/perlapi\.pod) (pod/perlintern\.pod): }
+ {$1: $2\n\n$2: }m;
+ # Bug introduced by efa50c51e3301a2c
+ # fixed in 0f13ebd5d71f8177
+ $code =~ s{^(uudmap\.h) (bitcount\.h): }
+ {$1: $2\n\n$2: }m;
+
+ # The rats nest of getting git_version.h correct
+
+ if ($code =~ s{git_version\.h: stock_git_version\.h
+\tcp stock_git_version\.h git_version\.h}
+ {}m) {
+ # before 486cd780047ff224
+
+ # We probably can't build between
+ # 953f6acfa20ec275^ and 8565263ab8a47cda
+ # inclusive, but all commits in that range
+ # relate to getting make_patchnum.sh working,
+ # so it is extremely unlikely to be an
+ # interesting bisect target. They will skip.
+
+ # No, don't spawn a submake if
+ # make_patchnum.sh or make_patchnum.pl fails
+ $code =~ s{\|\| \$\(MAKE\) miniperl.*}
+ {}m;
+ $code =~ s{^\t(sh.*make_patchnum\.sh.*)}
+ {\t-$1}m;
+
+ # Use an external perl to run make_patchnum.pl
+ # because miniperl still depends on
+ # git_version.h
+ $code =~ s{^\t.*make_patchnum\.pl}
+ {\t-$^X make_patchnum.pl}m;
+
+
+ # "Truth in advertising" - running
+ # make_patchnum generates 2 files.
+ $code =~ s{^make_patchnum:.*}{
+make_patchnum: lib/Config_git.pl
+
+git_version.h: lib/Config_git.pl
+
+perlmini\$(OBJ_EXT): git_version.h
+
+lib/Config_git.pl:}m;
+ }
+ # Right, now we've corrected Makefile.SH to
+ # correctly describe how lib/Config_git.pl and
+ # git_version.h are made, we need to fix the rest
+
+ # This emulates commit 2b63e250843b907e
+ # This might duplicate the rule stating that
+ # git_version.h depends on lib/Config_git.pl
+ # This is harmless.
+ $code =~ s{^(?:lib/Config_git\.pl )?git_version\.h: (.* make_patchnum\.pl.*)}
+ {git_version.h: lib/Config_git.pl
+
+lib/Config_git.pl: $1}m;
+
+ # This emulates commits 0f13ebd5d71f8177 and
+ # and a04d4598adc57886. It ensures that
+ # lib/Config_git.pl is built before configpm,
+ # and that configpm is run exactly once.
+ $code =~ s{^(\$\(.*?\) )?(\$\(CONFIGPOD\))(: .*? configpm Porting/Glossary)( lib/Config_git\.pl)?}{
+ # If present, other files depend on $(CONFIGPOD)
+ ($1 ? "$1: $2\n\n" : '')
+ # Then the rule we found
+ . $2 . $3
+ # Add dependency if not there
+ . ($4 ? $4 : ' lib/Config_git.pl')
+ }me;
+
+ return $code;
+ });
+ }
+ }
+
+ if ($major < 14) {
+ # Commits dc0655f797469c47 and d11a62fe01f2ecb2
+ edit_file('Makefile.SH', sub {
+ my $code = shift;
+ foreach my $ext (qw(Encode SDBM_File)) {
+ next if $code =~ /\b$ext\) extra_dep=/s;
+ $code =~ s!(\) extra_dep="\$extra_dep
+\$this_target: .*?" ;;)
+( esac
+)!$1
+ $ext) extra_dep="\$extra_dep
+\$this_target: lib/auto/Cwd/Cwd.\$dlext" ;;
+$2!;
+ }
+ return $code;
+ });
+ }
+ }
+
+ if ($major == 7) {
+ # Remove commits 9fec149bb652b6e9 and 5bab1179608f81d8, which add/amend
+ # rules to automatically run regen scripts that rebuild C headers. These
+ # cause problems because a git checkout doesn't preserve relative file
+ # modification times, hence the regen scripts may fire. This will
+ # obscure whether the repository had the correct generated headers
+ # checked in.
+ # Also, the dependency rules for running the scripts were not correct,
+ # which could cause spurious re-builds on re-running make, and can cause
+ # complete build failures for a parallel make.
+ if (extract_from_file('Makefile.SH',
+ qr/Writing it this way gives make a big hint to always run opcode\.pl before/)) {
+ apply_commit('70c6e6715e8fec53');
+ } elsif (extract_from_file('Makefile.SH',
+ qr/^opcode\.h opnames\.h pp_proto\.h pp\.sym: opcode\.pl$/)) {
+ revert_commit('9fec149bb652b6e9');
+ }
+ }
+
+ if ($^O eq 'aix' && $major >= 11 && $major <= 15
+ && extract_from_file('makedef.pl', qr/^use Config/)) {
+ edit_file('Makefile.SH', sub {
+ # The AIX part of commit e6807d8ab22b761c
+ # It's safe to substitute lib/Config.pm for config.sh
+ # as lib/Config.pm depends on config.sh
+ # If the tree is post e6807d8ab22b761c, the substitution
+ # won't match, which is harmless.
+ my $code = shift;
+ $code =~ s{^(perl\.exp:.* )config\.sh(\b.*)}
+ {$1 . '$(CONFIGPM)' . $2}me;
+ return $code;
+ });
+ }
+
+ # There was a bug in makedepend.SH which was fixed in version 96a8704c.
+ # Symptom was './makedepend: 1: Syntax error: Unterminated quoted string'
+ # Remove this if you're actually bisecting a problem related to
+ # makedepend.SH
+ # If you do this, you may need to add in code to correct the output of older
+ # makedepends, which don't correctly filter newer gcc output such as
+ # <built-in>
+ checkout_file('makedepend.SH');
+
+ if ($major < 4 && -f 'config.sh'
+ && !extract_from_file('config.sh', qr/^trnl=/)) {
+ # This seems to be necessary to avoid makedepend becoming confused,
+ # and hanging on stdin. Seems that the code after
+ # make shlist || ...here... is never run.
+ edit_file('makedepend.SH', sub {
+ my $code = shift;
+ $code =~ s/^trnl='\$trnl'$/trnl='\\n'/m;
+ return $code;
+ });
+ }
+}
+
+sub patch_C {
+ # This is ordered by $major, as it's likely that different platforms may
+ # well want to share code.
+
+ if ($major == 2 && extract_from_file('perl.c', qr/^\tfclose\(e_fp\);$/)) {
+ # need to patch perl.c to avoid calling fclose() twice on e_fp when
+ # using -e
+ # This diff is part of commit ab821d7fdc14a438. The second close was
+ # introduced with perl-5.002, commit a5f75d667838e8e7
+ # Might want a6c477ed8d4864e6 too, for the corresponding change to
+ # pp_ctl.c (likely without this, eval will have "fun")
+ apply_patch(<<'EOPATCH');
+diff --git a/perl.c b/perl.c
+index 03c4d48..3c814a2 100644
+--- a/perl.c
++++ b/perl.c
+@@ -252,6 +252,7 @@ setuid perl scripts securely.\n");
+ #ifndef VMS /* VMS doesn't have environ array */
+ origenviron = environ;
+ #endif
++ e_tmpname = Nullch;
+
+ if (do_undump) {
+
+@@ -405,6 +406,7 @@ setuid perl scripts securely.\n");
+ if (e_fp) {
+ if (Fflush(e_fp) || ferror(e_fp) || fclose(e_fp))
+ croak("Can't write to temp file for -e: %s", Strerror(errno));
++ e_fp = Nullfp;
+ argc++,argv--;
+ scriptname = e_tmpname;
+ }
+@@ -470,10 +472,10 @@ setuid perl scripts securely.\n");
+ curcop->cop_line = 0;
+ curstash = defstash;
+ preprocess = FALSE;
+- if (e_fp) {
+- fclose(e_fp);
+- e_fp = Nullfp;
++ if (e_tmpname) {
+ (void)UNLINK(e_tmpname);
++ Safefree(e_tmpname);
++ e_tmpname = Nullch;
+ }
+
+ /* now that script is parsed, we can modify record separator */
+@@ -1369,7 +1371,7 @@ SV *sv;
+ scriptname = xfound;
+ }
+
+- origfilename = savepv(e_fp ? "-e" : scriptname);
++ origfilename = savepv(e_tmpname ? "-e" : scriptname);
+ curcop->cop_filegv = gv_fetchfile(origfilename);
+ if (strEQ(origfilename,"-"))
+ scriptname = "";
+
+EOPATCH
+ }
+
+ if ($major < 3 && $^O eq 'openbsd'
+ && !extract_from_file('pp_sys.c', qr/BSD_GETPGRP/)) {
+ # Part of commit c3293030fd1b7489
+ apply_patch(<<'EOPATCH');
+diff --git a/pp_sys.c b/pp_sys.c
+index 4608a2a..f0c9d1d 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -2903,8 +2903,8 @@ PP(pp_getpgrp)
+ pid = 0;
+ else
+ pid = SvIVx(POPs);
+-#ifdef USE_BSDPGRP
+- value = (I32)getpgrp(pid);
++#ifdef BSD_GETPGRP
++ value = (I32)BSD_GETPGRP(pid);
+ #else
+ if (pid != 0)
+ DIE("POSIX getpgrp can't take an argument");
+@@ -2933,8 +2933,8 @@ PP(pp_setpgrp)
+ }
+
+ TAINT_PROPER("setpgrp");
+-#ifdef USE_BSDPGRP
+- SETi( setpgrp(pid, pgrp) >= 0 );
++#ifdef BSD_SETPGRP
++ SETi( BSD_SETPGRP(pid, pgrp) >= 0 );
+ #else
+ if ((pgrp != 0) || (pid != 0)) {
+ DIE("POSIX setpgrp can't take an argument");
+EOPATCH
+ }
+
+ if ($major < 4 && $^O eq 'openbsd') {
+ my $bad;
+ # Need changes from commit a6e633defa583ad5.
+ # Commits c07a80fdfe3926b5 and f82b3d4130164d5f changed the same part
+ # of perl.h
+
+ if (extract_from_file('perl.h',
+ qr/^#ifdef HAS_GETPGRP2$/)) {
+ $bad = <<'EOBAD';
+***************
+*** 57,71 ****
+ #define TAINT_PROPER(s) if (tainting) taint_proper(no_security, s)
+ #define TAINT_ENV() if (tainting) taint_env()
+
+! #ifdef HAS_GETPGRP2
+! # ifndef HAS_GETPGRP
+! # define HAS_GETPGRP
+! # endif
+! #endif
+!
+! #ifdef HAS_SETPGRP2
+! # ifndef HAS_SETPGRP
+! # define HAS_SETPGRP
+! # endif
+ #endif
+
+EOBAD
+ } elsif (extract_from_file('perl.h',
+ qr/Gack, you have one but not both of getpgrp2/)) {
+ $bad = <<'EOBAD';
+***************
+*** 56,76 ****
+ #define TAINT_PROPER(s) if (tainting) taint_proper(no_security, s)
+ #define TAINT_ENV() if (tainting) taint_env()
+
+! #if defined(HAS_GETPGRP2) && defined(HAS_SETPGRP2)
+! # define getpgrp getpgrp2
+! # define setpgrp setpgrp2
+! # ifndef HAS_GETPGRP
+! # define HAS_GETPGRP
+! # endif
+! # ifndef HAS_SETPGRP
+! # define HAS_SETPGRP
+! # endif
+! # ifndef USE_BSDPGRP
+! # define USE_BSDPGRP
+! # endif
+! #else
+! # if defined(HAS_GETPGRP2) || defined(HAS_SETPGRP2)
+! #include "Gack, you have one but not both of getpgrp2() and setpgrp2()."
+! # endif
+ #endif
+
+EOBAD
+ } elsif (extract_from_file('perl.h',
+ qr/^#ifdef USE_BSDPGRP$/)) {
+ $bad = <<'EOBAD'
+***************
+*** 91,116 ****
+ #define TAINT_PROPER(s) if (tainting) taint_proper(no_security, s)
+ #define TAINT_ENV() if (tainting) taint_env()
+
+! #ifdef USE_BSDPGRP
+! # ifdef HAS_GETPGRP
+! # define BSD_GETPGRP(pid) getpgrp((pid))
+! # endif
+! # ifdef HAS_SETPGRP
+! # define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp))
+! # endif
+! #else
+! # ifdef HAS_GETPGRP2
+! # define BSD_GETPGRP(pid) getpgrp2((pid))
+! # ifndef HAS_GETPGRP
+! # define HAS_GETPGRP
+! # endif
+! # endif
+! # ifdef HAS_SETPGRP2
+! # define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp))
+! # ifndef HAS_SETPGRP
+! # define HAS_SETPGRP
+! # endif
+! # endif
+ #endif
+
+ #ifndef _TYPES_ /* If types.h defines this it's easy. */
+EOBAD
+ }
+ if ($bad) {
+ apply_patch(<<"EOPATCH");
+*** a/perl.h 2011-10-21 09:46:12.000000000 +0200
+--- b/perl.h 2011-10-21 09:46:12.000000000 +0200
+$bad--- 91,144 ----
+ #define TAINT_PROPER(s) if (tainting) taint_proper(no_security, s)
+ #define TAINT_ENV() if (tainting) taint_env()
+
+! /* XXX All process group stuff is handled in pp_sys.c. Should these
+! defines move there? If so, I could simplify this a lot. --AD 9/96.
+! */
+! /* Process group stuff changed from traditional BSD to POSIX.
+! perlfunc.pod documents the traditional BSD-style syntax, so we'll
+! try to preserve that, if possible.
+! */
+! #ifdef HAS_SETPGID
+! # define BSD_SETPGRP(pid, pgrp) setpgid((pid), (pgrp))
+! #else
+! # if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
+! # define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp))
+! # else
+! # ifdef HAS_SETPGRP2 /* DG/UX */
+! # define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp))
+! # endif
+! # endif
+! #endif
+! #if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
+! # define HAS_SETPGRP /* Well, effectively it does . . . */
+! #endif
+!
+! /* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
+! our life easier :-) so we'll try it.
+! */
+! #ifdef HAS_GETPGID
+! # define BSD_GETPGRP(pid) getpgid((pid))
+! #else
+! # if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
+! # define BSD_GETPGRP(pid) getpgrp((pid))
+! # else
+! # ifdef HAS_GETPGRP2 /* DG/UX */
+! # define BSD_GETPGRP(pid) getpgrp2((pid))
+! # endif
+! # endif
+! #endif
+! #if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
+! # define HAS_GETPGRP /* Well, effectively it does . . . */
+! #endif
+!
+! /* These are not exact synonyms, since setpgrp() and getpgrp() may
+! have different behaviors, but perl.h used to define USE_BSDPGRP
+! (prior to 5.003_05) so some extension might depend on it.
+! */
+! #if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
+! # ifndef USE_BSDPGRP
+! # define USE_BSDPGRP
+! # endif
+ #endif
+
+ #ifndef _TYPES_ /* If types.h defines this it's easy. */
+EOPATCH
+ }
+ }
+
+ if ($major == 4 && extract_from_file('scope.c', qr/\(SV\*\)SSPOPINT/)) {
+ # [PATCH] 5.004_04 +MAINT_TRIAL_1 broken when sizeof(int) != sizeof(void)
+ # Fixes a bug introduced in 161b7d1635bc830b
+ apply_commit('9002cb76ec83ef7f');
+ }
+
+ if ($major == 4 && extract_from_file('av.c', qr/AvARRAY\(av\) = 0;/)) {
+ # Fixes a bug introduced in 1393e20655efb4bc
+ apply_commit('e1c148c28bf3335b', 'av.c');
+ }
+
+ if ($major == 4) {
+ my $rest = extract_from_file('perl.c', qr/delimcpy(.*)/);
+ if (defined $rest and $rest !~ /,$/) {
+ # delimcpy added in fc36a67e8855d031, perl.c refactored to use it.
+ # bug introduced in 2a92aaa05aa1acbf, fixed in 8490252049bf42d3
+ # code then moved to util.c in commit 491527d0220de34e
+ apply_patch(<<'EOPATCH');
+diff --git a/perl.c b/perl.c
+index 4eb69e3..54bbb00 100644
+--- a/perl.c
++++ b/perl.c
+@@ -1735,7 +1735,7 @@ SV *sv;
+ if (len < sizeof tokenbuf)
+ tokenbuf[len] = '\0';
+ #else /* ! (atarist || DOSISH) */
+- s = delimcpy(tokenbuf, tokenbuf + sizeof tokenbuf, s, bufend
++ s = delimcpy(tokenbuf, tokenbuf + sizeof tokenbuf, s, bufend,
+ ':',
+ &len);
+ #endif /* ! (atarist || DOSISH) */
+EOPATCH
+ }
+ }
+
+ if ($major == 4 && $^O eq 'linux') {
+ # Whilst this is fixed properly in f0784f6a4c3e45e1 which provides the
+ # Configure probe, it's easier to back out the problematic changes made
+ # in these previous commits:
+ if (extract_from_file('doio.c',
+ qr!^/\* XXX REALLY need metaconfig test \*/$!)) {
+ revert_commit('4682965a1447ea44', 'doio.c');
+ }
+ if (my $token = extract_from_file('doio.c',
+ qr!^#if (defined\(__sun(?:__)?\)) && defined\(__svr4__\) /\* XXX Need metaconfig test \*/$!)) {
+ my $patch = `git show -R 9b599b2a63d2324d doio.c`;
+ $patch =~ s/defined\(__sun__\)/$token/g;
+ apply_patch($patch);
+ }
+ if (extract_from_file('doio.c',
+ qr!^/\* linux \(and Solaris2\?\) uses :$!)) {
+ revert_commit('8490252049bf42d3', 'doio.c');
+ }
+ if (extract_from_file('doio.c',
+ qr/^ unsemds.buf = &semds;$/)) {
+ revert_commit('8e591e46b4c6543e');
+ }
+ if (extract_from_file('doio.c',
+ qr!^#ifdef __linux__ /\* XXX Need metaconfig test \*/$!)) {
+ # Reverts part of commit 3e3baf6d63945cb6
+ apply_patch(<<'EOPATCH');
+diff --git b/doio.c a/doio.c
+index 62b7de9..0d57425 100644
+--- b/doio.c
++++ a/doio.c
+@@ -1333,9 +1331,6 @@ SV **sp;
+ char *a;
+ I32 id, n, cmd, infosize, getinfo;
+ I32 ret = -1;
+-#ifdef __linux__ /* XXX Need metaconfig test */
+- union semun unsemds;
+-#endif
+
+ id = SvIVx(*++mark);
+ n = (optype == OP_SEMCTL) ? SvIVx(*++mark) : 0;
+@@ -1364,29 +1359,11 @@ SV **sp;
+ infosize = sizeof(struct semid_ds);
+ else if (cmd == GETALL || cmd == SETALL)
+ {
+-#ifdef __linux__ /* XXX Need metaconfig test */
+-/* linux uses :
+- int semctl (int semid, int semnun, int cmd, union semun arg)
+-
+- union semun {
+- int val;
+- struct semid_ds *buf;
+- ushort *array;
+- };
+-*/
+- union semun semds;
+- if (semctl(id, 0, IPC_STAT, semds) == -1)
+-#else
+ struct semid_ds semds;
+ if (semctl(id, 0, IPC_STAT, &semds) == -1)
+-#endif
+ return -1;
+ getinfo = (cmd == GETALL);
+-#ifdef __linux__ /* XXX Need metaconfig test */
+- infosize = semds.buf->sem_nsems * sizeof(short);
+-#else
+ infosize = semds.sem_nsems * sizeof(short);
+-#endif
+ /* "short" is technically wrong but much more portable
+ than guessing about u_?short(_t)? */
+ }
+@@ -1429,12 +1406,7 @@ SV **sp;
+ #endif
+ #ifdef HAS_SEM
+ case OP_SEMCTL:
+-#ifdef __linux__ /* XXX Need metaconfig test */
+- unsemds.buf = (struct semid_ds *)a;
+- ret = semctl(id, n, cmd, unsemds);
+-#else
+ ret = semctl(id, n, cmd, (struct semid_ds *)a);
+-#endif
+ break;
+ #endif
+ #ifdef HAS_SHM
+EOPATCH
+ }
+ # Incorrect prototype added as part of 8ac853655d9b7447, fixed as part
+ # of commit dc45a647708b6c54, with at least one intermediate
+ # modification. Correct prototype for gethostbyaddr has socklen_t
+ # second. Linux has uint32_t first for getnetbyaddr.
+ # Easiest just to remove, instead of attempting more complex patching.
+ # Something similar may be needed on other platforms.
+ edit_file('pp_sys.c', sub {
+ my $code = shift;
+ $code =~ s/^ struct hostent \*(?:PerlSock_)?gethostbyaddr\([^)]+\);$//m;
+ $code =~ s/^ struct netent \*getnetbyaddr\([^)]+\);$//m;
+ return $code;
+ });
+ }
+
+ if ($major < 5 && $^O eq 'aix'
+ && !extract_from_file('pp_sys.c',
+ qr/defined\(HOST_NOT_FOUND\) && !defined\(h_errno\)/)) {
+ # part of commit dc45a647708b6c54
+ # Andy Dougherty's configuration patches (Config_63-01 up to 04).
+ apply_patch(<<'EOPATCH')
+diff --git a/pp_sys.c b/pp_sys.c
+index c2fcb6f..efa39fb 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -54,7 +54,7 @@ extern "C" int syscall(unsigned long,...);
+ #endif
+ #endif
+
+-#ifdef HOST_NOT_FOUND
++#if defined(HOST_NOT_FOUND) && !defined(h_errno)
+ extern int h_errno;
+ #endif
+
+EOPATCH
+ }
+
+ if ($major == 5
+ && `git rev-parse HEAD` eq "22c35a8c2392967a5ba6b5370695be464bd7012c\n") {
+ # Commit 22c35a8c2392967a is significant,
+ # "phase 1 of somewhat major rearrangement of PERL_OBJECT stuff"
+ # but doesn't build due to 2 simple errors. blead in this broken state
+ # was merged to the cfgperl branch, and then these were immediately
+ # corrected there. cfgperl (with the fixes) was merged back to blead.
+ # The resultant rather twisty maze of commits looks like this:
+
+=begin comment
+
+* | | commit 137225782c183172f360c827424b9b9f8adbef0e
+|\ \ \ Merge: 22c35a8 2a8ee23
+| |/ / Author: Gurusamy Sarathy <gsar at cpan.org>
+| | | Date: Fri Oct 30 17:38:36 1998 +0000
+| | |
+| | | integrate cfgperl tweaks into mainline
+| | |
+| | | p4raw-id: //depot/perl at 2144
+| | |
+| * | commit 2a8ee23279873759693fa83eca279355db2b665c
+| | | Author: Jarkko Hietaniemi <jhi at iki.fi>
+| | | Date: Fri Oct 30 13:27:39 1998 +0000
+| | |
+| | | There can be multiple yacc/bison errors.
+| | |
+| | | p4raw-id: //depot/cfgperl at 2143
+| | |
+| * | commit 93fb2ac393172fc3e2c14edb20b718309198abbc
+| | | Author: Jarkko Hietaniemi <jhi at iki.fi>
+| | | Date: Fri Oct 30 13:18:43 1998 +0000
+| | |
+| | | README.posix-bc update.
+| | |
+| | | p4raw-id: //depot/cfgperl at 2142
+| | |
+| * | commit 4ec43091e8e6657cb260b5e563df30aaa154effe
+| | | Author: Jarkko Hietaniemi <jhi at iki.fi>
+| | | Date: Fri Oct 30 09:12:59 1998 +0000
+| | |
+| | | #2133 fallout.
+| | |
+| | | p4raw-id: //depot/cfgperl at 2141
+| | |
+| * | commit 134ca994cfefe0f613d43505a885e4fc2100b05c
+| |\ \ Merge: 7093112 22c35a8
+| |/ / Author: Jarkko Hietaniemi <jhi at iki.fi>
+|/| | Date: Fri Oct 30 08:43:18 1998 +0000
+| | |
+| | | Integrate from mainperl.
+| | |
+| | | p4raw-id: //depot/cfgperl at 2140
+| | |
+* | | commit 22c35a8c2392967a5ba6b5370695be464bd7012c
+| | | Author: Gurusamy Sarathy <gsar at cpan.org>
+| | | Date: Fri Oct 30 02:51:39 1998 +0000
+| | |
+| | | phase 1 of somewhat major rearrangement of PERL_OBJECT stuff
+| | | (objpp.h is gone, embed.pl now does some of that); objXSUB.h
+| | | should soon be automated also; the global variables that
+| | | escaped the PL_foo conversion are now reined in; renamed
+| | | MAGIC in regcomp.h to REG_MAGIC to avoid collision with the
+| | | type of same name; duplicated lists of pp_things in various
+| | | places is now gone; result has only been tested on win32
+| | |
+| | | p4raw-id: //depot/perl at 2133
+
+=end comment
+
+=cut
+
+ # and completely confuses git bisect (and at least me), causing it to
+ # the bisect run to confidently return the wrong answer, an unrelated
+ # commit on the cfgperl branch.
+
+ apply_commit('4ec43091e8e6657c');
+ }
+
+ if ($major == 5
+ && extract_from_file('pp_sys.c', qr/PERL_EFF_ACCESS_R_OK/)
+ && !extract_from_file('pp_sys.c', qr/XXX Configure test needed for eaccess/)) {
+ # Between 5ff3f7a4e03a6b10 and c955f1177b2e311d^
+ # This is the meat of commit c955f1177b2e311d (without the other
+ # indenting changes that would cause a conflict).
+ # Without this 538 revisions won't build on (at least) Linux
+ apply_patch(<<'EOPATCH');
+diff --git a/pp_sys.c b/pp_sys.c
+index d60c8dc..867dee4 100644
+--- a/pp_sys.c
++++ b/pp_sys.c
+@@ -198,9 +198,18 @@ static char zero_but_true[ZBTLEN + 1] = "0 but true";
+ # if defined(I_SYS_SECURITY)
+ # include <sys/security.h>
+ # endif
+-# define PERL_EFF_ACCESS_R_OK(p) (eaccess((p), R_OK, ACC_SELF))
+-# define PERL_EFF_ACCESS_W_OK(p) (eaccess((p), W_OK, ACC_SELF))
+-# define PERL_EFF_ACCESS_X_OK(p) (eaccess((p), X_OK, ACC_SELF))
++ /* XXX Configure test needed for eaccess */
++# ifdef ACC_SELF
++ /* HP SecureWare */
++# define PERL_EFF_ACCESS_R_OK(p) (eaccess((p), R_OK, ACC_SELF))
++# define PERL_EFF_ACCESS_W_OK(p) (eaccess((p), W_OK, ACC_SELF))
++# define PERL_EFF_ACCESS_X_OK(p) (eaccess((p), X_OK, ACC_SELF))
++# else
++ /* SCO */
++# define PERL_EFF_ACCESS_R_OK(p) (eaccess((p), R_OK))
++# define PERL_EFF_ACCESS_W_OK(p) (eaccess((p), W_OK))
++# define PERL_EFF_ACCESS_X_OK(p) (eaccess((p), X_OK))
++# endif
+ #endif
+
+ #if !defined(PERL_EFF_ACCESS_R_OK) && defined(HAS_ACCESSX) && defined(ACC_SELF)
+EOPATCH
+ }
+
+ if ($major == 5
+ && extract_from_file('mg.c', qr/If we're still on top of the stack, pop us off/)
+ && !extract_from_file('mg.c', qr/PL_savestack_ix -= popval/)) {
+ # Fix up commit 455ece5e082708b1:
+ # SSNEW() API for allocating memory on the savestack
+ # Message-Id: <tqemtae338.fsf at puma.genscan.com>
+ # Subject: [PATCH 5.005_51] (was: why SAVEDESTRUCTOR()...)
+ apply_commit('3c8a44569607336e', 'mg.c');
+ }
+
+ if ($major == 5) {
+ if (extract_from_file('doop.c', qr/croak\(no_modify\);/)
+ && extract_from_file('doop.c', qr/croak\(PL_no_modify\);/)) {
+ # Whilst the log suggests that this would only fix 5 commits, in
+ # practice this area of history is a complete tarpit, and git bisect
+ # gets very confused by the skips in the middle of the back and
+ # forth merging between //depot/perl and //depot/cfgperl
+ apply_commit('6393042b638dafd3');
+ }
+
+ # One error "fixed" with another:
+ if (extract_from_file('pp_ctl.c',
+ qr/\Qstatic void *docatch_body _((void *o));\E/)) {
+ apply_commit('5b51e982882955fe');
+ }
+ # Which is then fixed by this:
+ if (extract_from_file('pp_ctl.c',
+ qr/\Qstatic void *docatch_body _((valist\E/)) {
+ apply_commit('47aa779ee4c1a50e');
+ }
+
+ if (extract_from_file('thrdvar.h', qr/PERLVARI\(Tprotect/)
+ && !extract_from_file('embedvar.h', qr/PL_protect/)) {
+ # Commit 312caa8e97f1c7ee didn't update embedvar.h
+ apply_commit('e0284a306d2de082', 'embedvar.h');
+ }
+ }
+
+ if ($major == 5
+ && extract_from_file('sv.c',
+ qr/PerlDir_close\(IoDIRP\((?:\(IO\*\))?sv\)\);/)
+ && !(extract_from_file('toke.c',
+ qr/\QIoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) = NULL\E/)
+ || extract_from_file('toke.c',
+ qr/\QIoDIRP(datasv) = (DIR*)NULL;\E/))) {
+ # Commit 93578b34124e8a3b, //depot/perl at 3298
+ # close directory handles properly when localized,
+ # tweaked slightly by commit 1236053a2c722e2b,
+ # add test case for change#3298
+ #
+ # The fix is the last part of:
+ #
+ # various fixes for clean build and test on win32; configpm broken,
+ # needed to open myconfig.SH rather than myconfig; sundry adjustments
+ # to bytecode stuff; tweaks to DYNAMIC_ENV_FETCH code to make it
+ # work under win32; getenv_sv() changed to getenv_len() since SVs
+ # aren't visible in the lower echelons; remove bogus exports from
+ # config.sym; PERL_OBJECT-ness for C++ exception support; null out
+ # IoDIRP in filter_del() or sv_free() will attempt to close it
+ #
+ # The changed code is modified subsequently by commit e0c198038146b7a4
+ apply_commit('a6c403648ecd5cc7', 'toke.c');
+ }
+
+ if ($major < 6 && $^O eq 'netbsd'
+ && !extract_from_file('unixish.h',
+ qr/defined\(NSIG\).*defined\(__NetBSD__\)/)) {
+ apply_patch(<<'EOPATCH')
+diff --git a/unixish.h b/unixish.h
+index 2a6cbcd..eab2de1 100644
+--- a/unixish.h
++++ b/unixish.h
+@@ -89,7 +89,7 @@
+ */
+ /* #define ALTERNATE_SHEBANG "#!" / **/
+
+-#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
++#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX) || defined(__NetBSD__)
+ # include <signal.h>
+ #endif
+
+EOPATCH
+ }
+
+ if (($major >= 7 || $major <= 9) && $^O eq 'openbsd'
+ && `uname -m` eq "sparc64\n"
+ # added in 2000 by commit cb434fcc98ac25f5:
+ && extract_from_file('regexec.c',
+ qr!/\* No need to save/restore up to this paren \*/!)
+ # re-indented in 2006 by commit 95b2444054382532:
+ && extract_from_file('regexec.c', qr/^\t\tCURCUR cc;$/)) {
+ # Need to work around a bug in (at least) OpenBSD's 4.6's sparc64 #
+ # compiler ["gcc (GCC) 3.3.5 (propolice)"]. Between commits
+ # 3ec562b0bffb8b8b (2002) and 1a4fad37125bac3e^ (2005) the darling thing
+ # fails to compile any code for the statement cc.oldcc = PL_regcc;
+ #
+ # If you refactor the code to "fix" that, or force the issue using set
+ # in the debugger, the stack smashing detection code fires on return
+ # from S_regmatch(). Turns out that the compiler doesn't allocate any
+ # (or at least enough) space for cc.
+ #
+ # Restore the "uninitialised" value for cc before function exit, and the
+ # stack smashing code is placated. "Fix" 3ec562b0bffb8b8b (which
+ # changes the size of auto variables used elsewhere in S_regmatch), and
+ # the crash is visible back to bc517b45fdfb539b (which also changes
+ # buffer sizes). "Unfix" 1a4fad37125bac3e and the crash is visible until
+ # 5b47454deb66294b. Problem goes away if you compile with -O, or hack
+ # the code as below.
+ #
+ # Hence this turns out to be a bug in (old) gcc. Not a security bug we
+ # still need to fix.
+ apply_patch(<<'EOPATCH');
+diff --git a/regexec.c b/regexec.c
+index 900b491..6251a0b 100644
+--- a/regexec.c
++++ b/regexec.c
+@@ -2958,7 +2958,11 @@ S_regmatch(pTHX_ regnode *prog)
+ I,I
+ *******************************************************************/
+ case CURLYX: {
+- CURCUR cc;
++ union {
++ CURCUR hack_cc;
++ char hack_buff[sizeof(CURCUR) + 1];
++ } hack;
++#define cc hack.hack_cc
+ CHECKPOINT cp = PL_savestack_ix;
+ /* No need to save/restore up to this paren */
+ I32 parenfloor = scan->flags;
+@@ -2983,6 +2987,7 @@ S_regmatch(pTHX_ regnode *prog)
+ n = regmatch(PREVOPER(next)); /* start on the WHILEM */
+ regcpblow(cp);
+ PL_regcc = cc.oldcc;
++#undef cc
+ saySAME(n);
+ }
+ /* NOT REACHED */
+EOPATCH
+}
+
+ if ($major < 8 && $^O eq 'openbsd'
+ && !extract_from_file('perl.h', qr/include <unistd\.h>/)) {
+ # This is part of commit 3f270f98f9305540, applied at a slightly
+ # different location in perl.h, where the context is stable back to
+ # 5.000
+ apply_patch(<<'EOPATCH');
+diff --git a/perl.h b/perl.h
+index 9418b52..b8b1a7c 100644
+--- a/perl.h
++++ b/perl.h
+@@ -496,6 +496,10 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
+ # include <sys/param.h>
+ #endif
+
++/* If this causes problems, set i_unistd=undef in the hint file. */
++#ifdef I_UNISTD
++# include <unistd.h>
++#endif
+
+ /* Use all the "standard" definitions? */
+ #if defined(STANDARD_C) && defined(I_STDLIB)
+EOPATCH
+ }
+}
+
+sub patch_ext {
+ if (-f 'ext/POSIX/Makefile.PL'
+ && extract_from_file('ext/POSIX/Makefile.PL',
+ qr/Explicitly avoid including/)) {
+ # commit 6695a346c41138df, which effectively reverts 170888cff5e2ffb7
+
+ # PERL5LIB is populated by make_ext.pl with paths to the modules we need
+ # to run, don't override this with "../../lib" since that may not have
+ # been populated yet in a parallel build.
+ apply_commit('6695a346c41138df');
+ }
+
+ if (-f 'ext/Hash/Util/Makefile.PL'
+ && extract_from_file('ext/Hash/Util/Makefile.PL',
+ qr/\bDIR\b.*'FieldHash'/)) {
+ # ext/Hash/Util/Makefile.PL should not recurse to FieldHash's Makefile.PL
+ # *nix, VMS and Win32 all know how to (and have to) call the latter directly.
+ # As is, targets in ext/Hash/Util/FieldHash get called twice, which may result
+ # in race conditions, and certainly messes up make clean; make distclean;
+ apply_commit('550428fe486b1888');
+ }
+
+ if ($major < 8 && $^O eq 'darwin' && !-f 'ext/DynaLoader/dl_dyld.xs') {
+ checkout_file('ext/DynaLoader/dl_dyld.xs', 'f556e5b971932902');
+ apply_patch(<<'EOPATCH');
+diff -u a/ext/DynaLoader/dl_dyld.xs~ a/ext/DynaLoader/dl_dyld.xs
+--- a/ext/DynaLoader/dl_dyld.xs~ 2011-10-11 21:41:27.000000000 +0100
++++ b/ext/DynaLoader/dl_dyld.xs 2011-10-11 21:42:20.000000000 +0100
+@@ -41,6 +41,35 @@
+ #include "perl.h"
+ #include "XSUB.h"
+
++#ifndef pTHX
++# define pTHX void
++# define pTHX_
++#endif
++#ifndef aTHX
++# define aTHX
++# define aTHX_
++#endif
++#ifndef dTHX
++# define dTHXa(a) extern int Perl___notused(void)
++# define dTHX extern int Perl___notused(void)
++#endif
++
++#ifndef Perl_form_nocontext
++# define Perl_form_nocontext form
++#endif
++
++#ifndef Perl_warn_nocontext
++# define Perl_warn_nocontext warn
++#endif
++
++#ifndef PTR2IV
++# define PTR2IV(p) (IV)(p)
++#endif
++
++#ifndef get_av
++# define get_av perl_get_av
++#endif
++
+ #define DL_LOADONCEONLY
+
+ #include "dlutils.c" /* SaveError() etc */
+@@ -185,7 +191,7 @@
+ CODE:
+ DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
+ if (flags & 0x01)
+- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename);
++ Perl_warn_nocontext("Can't make loaded symbols global on this platform while loading %s",filename);
+ RETVAL = dlopen(filename, mode) ;
+ DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL));
+ ST(0) = sv_newmortal() ;
+EOPATCH
+ if ($major < 4 && !extract_from_file('util.c', qr/^form/m)) {
+ apply_patch(<<'EOPATCH');
+diff -u a/ext/DynaLoader/dl_dyld.xs~ a/ext/DynaLoader/dl_dyld.xs
+--- a/ext/DynaLoader/dl_dyld.xs~ 2011-10-11 21:56:25.000000000 +0100
++++ b/ext/DynaLoader/dl_dyld.xs 2011-10-11 22:00:00.000000000 +0100
+@@ -60,6 +60,18 @@
+ # define get_av perl_get_av
+ #endif
+
++static char *
++form(char *pat, ...)
++{
++ char *retval;
++ va_list args;
++ va_start(args, pat);
++ vasprintf(&retval, pat, &args);
++ va_end(args);
++ SAVEFREEPV(retval);
++ return retval;
++}
++
+ #define DL_LOADONCEONLY
+
+ #include "dlutils.c" /* SaveError() etc */
+EOPATCH
+ }
+ }
+
+ if ($major < 10) {
+ if (!extract_from_file('ext/DB_File/DB_File.xs',
+ qr!^#else /\* Berkeley DB Version > 2 \*/$!)) {
+ # This DB_File.xs is really too old to patch up.
+ # Skip DB_File, unless we're invoked with an explicit -Unoextensions
+ if (!exists $defines{noextensions}) {
+ $defines{noextensions} = 'DB_File';
+ } elsif (defined $defines{noextensions}) {
+ $defines{noextensions} .= ' DB_File';
+ }
+ } elsif (!extract_from_file('ext/DB_File/DB_File.xs',
+ qr/^#ifdef AT_LEAST_DB_4_1$/)) {
+ # This line is changed by commit 3245f0580c13b3ab
+ my $line = extract_from_file('ext/DB_File/DB_File.xs',
+ qr/^( status = \(?RETVAL->dbp->open\)?\(RETVAL->dbp, name, NULL, RETVAL->type, $)/);
+ apply_patch(<<"EOPATCH");
+diff --git a/ext/DB_File/DB_File.xs b/ext/DB_File/DB_File.xs
+index 489ba96..fba8ded 100644
+--- a/ext/DB_File/DB_File.xs
++++ b/ext/DB_File/DB_File.xs
+\@\@ -183,4 +187,8 \@\@
+ #endif
+
++#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1)
++# define AT_LEAST_DB_4_1
++#endif
++
+ /* map version 2 features & constants onto their version 1 equivalent */
+
+\@\@ -1334,7 +1419,12 \@\@ SV * sv ;
+ #endif
+
++#ifdef AT_LEAST_DB_4_1
++ status = (RETVAL->dbp->open)(RETVAL->dbp, NULL, name, NULL, RETVAL->type,
++ Flags, mode) ;
++#else
+ $line
+ Flags, mode) ;
++#endif
+ /* printf("open returned %d %s\\n", status, db_strerror(status)) ; */
+
+EOPATCH
+ }
+ }
+
+ if ($major < 10 and -f 'ext/IPC/SysV/SysV.xs') {
+ edit_file('ext/IPC/SysV/SysV.xs', sub {
+ my $xs = shift;
+ my $fixed = <<'EOFIX';
+
+#include <sys/types.h>
+#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
+#ifndef HAS_SEM
+# include <sys/ipc.h>
+#endif
+# ifdef HAS_MSG
+# include <sys/msg.h>
+# endif
+# ifdef HAS_SHM
+# if defined(PERL_SCO) || defined(PERL_ISC)
+# include <sys/sysmacros.h> /* SHMLBA */
+# endif
+# include <sys/shm.h>
+# ifndef HAS_SHMAT_PROTOTYPE
+ extern Shmat_t shmat (int, char *, int);
+# endif
+# if defined(HAS_SYSCONF) && defined(_SC_PAGESIZE)
+# undef SHMLBA /* not static: determined at boot time */
+# define SHMLBA sysconf(_SC_PAGESIZE)
+# elif defined(HAS_GETPAGESIZE)
+# undef SHMLBA /* not static: determined at boot time */
+# define SHMLBA getpagesize()
+# endif
+# endif
+#endif
+EOFIX
+ $xs =~ s!
+#include <sys/types\.h>
+.*
+(#ifdef newCONSTSUB|/\* Required)!$fixed$1!ms;
+ return $xs;
+ });
+ }
+}
+
+# Local variables:
+# cperl-indent-level: 4
+# indent-tabs-mode: nil
+# End:
+#
+# ex: set ts=8 sts=4 sw=4 et:
Added: vendor/perl/dist/Porting/bisect.pl
===================================================================
--- vendor/perl/dist/Porting/bisect.pl (rev 0)
+++ vendor/perl/dist/Porting/bisect.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,170 @@
+#!/usr/bin/perl -w
+use strict;
+
+=for comment
+
+Documentation for this is in bisect-runner.pl
+
+=cut
+
+# The default, auto_abbrev will treat -e as an abbreviation of --end
+# Which isn't what we want.
+use Getopt::Long qw(:config pass_through no_auto_abbrev);
+
+my ($start, $end, $validate, $usage, $bad);
+$bad = !GetOptions('start=s' => \$start, 'end=s' => \$end,
+ validate => \$validate, 'usage|help|?' => \$usage);
+unshift @ARGV, '--help' if $bad || $usage;
+unshift @ARGV, '--validate' if $validate;
+
+my $runner = $0;
+$runner =~ s/bisect\.pl/bisect-runner.pl/;
+
+die "Can't find bisect runner $runner" unless -f $runner;
+
+system $^X, $runner, '--check-args', '--check-shebang', @ARGV and exit 255;
+exit 255 if $bad;
+exit 0 if $usage;
+
+{
+ my ($dev0, $ino0) = stat $0;
+ die "Can't stat $0: $!" unless defined $ino0;
+ my ($dev1, $ino1) = stat 'Porting/bisect.pl';
+ die "Can't run a bisect using the directory containing $runner"
+ if defined $dev1 && $dev0 == $dev1 && $ino0 == $ino1;
+}
+
+my $start_time = time;
+
+# We try these in this order for the start revision if none is specified.
+my @stable = qw(perl-5.005 perl-5.6.0 perl-5.8.0 v5.10.0 v5.12.0 v5.14.0);
+
+{
+ my ($dev_C, $ino_C) = stat 'Configure';
+ my ($dev_c, $ino_c) = stat 'configure';
+ if (defined $dev_C && defined $dev_c
+ && $dev_C == $dev_c && $ino_C == $ino_c) {
+ print "You seem to be on a case-insensitive file system.\n\n";
+ } else {
+ unshift @stable, qw(perl-5.002 perl-5.003 perl-5.004)
+ }
+}
+
+$end = 'blead' unless defined $end;
+
+# Canonicalising branches to revisions before moving the checkout permits one
+# to use revisions such as 'HEAD' for --start or --end
+foreach ($start, $end) {
+ next unless $_;
+ $_ = `git rev-parse $_`;
+ die unless defined $_;
+ chomp;
+}
+
+my $modified = () = `git ls-files --modified --deleted --others`;
+
+die "This checkout is not clean - $modified modified or untracked file(s)"
+ if $modified;
+
+sub validate {
+ my $commit = shift;
+ if (defined $start && `git rev-list -n1 $commit ^$start^` eq "") {
+ print "Skipping $commit, as it is earlier than $start\n";
+ return;
+ }
+ if (defined $end && `git rev-list -n1 $end ^$commit^` eq "") {
+ print "Skipping $commit, as it is more recent than $end\n";
+ return;
+ }
+ print "Testing $commit...\n";
+ system "git checkout $commit </dev/null" and die;
+ my $ret = system $^X, $runner, '--no-clean', @ARGV;
+ die "Runner returned $ret, not 0 for revision $commit" if $ret;
+ system 'git clean -dxf </dev/null' and die;
+ system 'git reset --hard HEAD </dev/null' and die;
+ return $commit;
+}
+
+if ($validate) {
+ require Text::Wrap;
+ my @built = map {validate $_} 'blead', reverse @stable;
+ if (@built) {
+ print Text::Wrap::wrap("", "", "Successfully validated @built\n");
+ exit 0;
+ }
+ print "Did not validate anything\n";
+ exit 1;
+}
+
+my $git_version = `git --version`;
+if (defined $git_version
+ && $git_version =~ /\Agit version (\d+\.\d+\.\d+)(.*)/) {
+ $git_version = eval "v$1";
+} else {
+ $git_version = v0.0.0;
+}
+
+if ($git_version ge v1.6.6) {
+ system "git bisect reset HEAD" and die;
+} else {
+ system "git bisect reset" and die;
+}
+
+# Sanity check the first and last revisions:
+system "git checkout $end" and die;
+my $ret = system $^X, $runner, @ARGV;
+die "Runner returned $ret for end revision" unless $ret;
+
+if (defined $start) {
+ system "git checkout $start" and die;
+ my $ret = system $^X, $runner, @ARGV;
+ die "Runner returned $ret, not 0 for start revision" if $ret;
+} else {
+ # Try to find the earliest version for which the test works
+ my @tried;
+ foreach my $try (@stable) {
+ if (`git rev-list -n1 $end ^$try^` eq "") {
+ print "Skipping $try, as it is more recent than end commit "
+ . (substr $end, 0, 16) . "\n";
+ # As @stable is supposed to be in age order, arguably we should
+ # last; here.
+ next;
+ }
+ system "git checkout $try" and die;
+ my $ret = system $^X, $runner, @ARGV;
+ if (!$ret) {
+ $start = $try;
+ last;
+ }
+ push @tried, $try;
+ }
+ die "Can't find a suitable start revision to default to.\nTried @tried"
+ unless defined $start;
+}
+
+system "git bisect start" and die;
+system "git bisect good $start" and die;
+system "git bisect bad $end" and die;
+
+# And now get git bisect to do the hard work:
+system 'git', 'bisect', 'run', $^X, $runner, @ARGV and die;
+
+END {
+ my $end_time = time;
+
+ printf "That took %d seconds\n", $end_time - $start_time
+ if defined $start_time;
+}
+
+=for comment
+
+Documentation for this is in bisect-runner.pl
+
+=cut
+
+# Local variables:
+# cperl-indent-level: 4
+# indent-tabs-mode: nil
+# End:
+#
+# ex: set ts=8 sts=4 sw=4 et:
Added: vendor/perl/dist/Porting/exercise_makedef.pl
===================================================================
--- vendor/perl/dist/Porting/exercise_makedef.pl (rev 0)
+++ vendor/perl/dist/Porting/exercise_makedef.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,93 @@
+#!./miniperl -w
+use strict;
+use Config;
+use 5.012;
+die "Can't fork" unless $Config{d_fork};
+
+# Brute force testing for makedef.pl
+#
+# To use this...
+#
+# Before modifying makedef.pl, create your golden results:
+#
+# $ mkdir Gold
+# $ ./perl -Ilib Porting/exercise_makedef.pl Gold/
+# $ chmod -R -w Gold/
+# $ mkdr Test
+#
+# then modify makedef.pl
+#
+# then test
+#
+# $ ./perl -Ilib Porting/exercise_makedef.pl Test
+# $ diff -rpu Gold Test
+
+my $prefix = shift;
+die "$0 prefix" unless $prefix;
+die "No such directory $prefix" unless -d $prefix;
+
+my @unlink;
+sub END {
+ unlink @unlink;
+}
+
+$SIG{INT} = sub { die }; # Trigger END processing
+
+{
+ # needed for OS/2, so fake one up
+ my $mpm = 'miniperl.map';
+
+ die "$mpm exists" if -e $mpm;
+
+ open my $in, '<', 'av.c' or die "Can't open av.c: $!";
+ push @unlink, $mpm;
+ open my $out, '>', $mpm or die "Can't open $mpm: $!";
+ while (<$in>) {
+ print $out "f $1\n" if /^(Perl_[A-Za-z_0-9]+)\(pTHX/;
+ }
+ close $out or die "Can't close $mpm: $!";
+}
+
+my @args = (platform => [map {"PLATFORM=$_"} qw(aix win32 wince os2 netware vms test)],
+ cflags => ['', 'CCFLAGS=-Dperl=rules -Dzzz'],
+ Deq => ['', '-Dbeer=foamy'],
+ D => ['', '-DPERL_IMPLICIT_SYS'],
+ cctype => ['', map {"CCTYPE=$_"} qw (MSVC60 GCC)],
+ filetype => ['', 'FILETYPE=def', 'FILETYPE=imp'],
+ targ_dir => ['', 'TARG_DIR=t/../'],
+ );
+
+sub expand {
+ my ($names, $args, $key, $vals, @rest) = @_;
+ if (defined $key) {
+ my $bad;
+ while (my ($i, $v) = each @$vals) {
+ $bad += expand([@$names, "$key=$i"], [@$args, $v], @rest);
+ }
+ return $bad;
+ }
+ # time to process something:
+ my $name = join ',', @$names;
+ my @args = grep {length} @$args;
+
+ $ENV{PERL5LIB} = join $Config{path_sep}, @INC;
+ my $pid = fork;
+ unless ($pid) {
+ open STDOUT, '>', "$prefix/$name.out"
+ or die "Can't open $prefix/$name.out: $!";
+ open STDERR, '>', "$prefix/$name.err"
+ or die "Can't open $prefix/$name.err: $!";
+ exec $^X, 'makedef.pl', @args;
+ die "Something went horribly wrong: $!";
+ }
+ die "Bad waitpid: $!" unless waitpid $pid, 0 == $pid;
+ if ($?) {
+ print STDERR "`$^X makedef.pl @args` failed with $?\n";
+ print STDERR "See output in $prefix/$name.err\n";
+ return 1;
+ }
+ return 0;
+}
+
+my $bad = expand([], [], @args);
+exit($bad > 255 ? 255 : $bad);
Added: vendor/perl/dist/Porting/leakfinder.pl
===================================================================
--- vendor/perl/dist/Porting/leakfinder.pl (rev 0)
+++ vendor/perl/dist/Porting/leakfinder.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,166 @@
+
+# WARNING! This script can be dangerous. It executes every line in every
+# file in the build directory and its subdirectories, so it could do some
+# harm if the line contains `rm *` or something similar.
+#
+# Run this as ./perl -Ilib Porting/leakfinder.pl after building perl.
+#
+# This is a quick non-portable hack that evaluates pieces of code in an
+# eval twice and sees whether the number of SVs goes up. Any lines that
+# leak are printed to STDOUT.
+#
+# push and unshift will give false positives. Some lines (listed at the
+# bottom) are explicitly skipped. Some patterns (at the beginning of the
+# inner for loop) are also skipped.
+
+use XS::APItest "sv_count";
+use Data::Dumper;
+$Data::Dumper::Useqq++;
+for(`find .`) {
+ warn $_;
+ chomp;
+ for(`cat \Q$_\E 2>/dev/null`) {
+ next if exists $exceptions{s/^\s+//r};
+ next if /rm -rf/; # Could be an example from perlsec, e.g.
+ # Creating one of these special blocks creates SVs, obviously
+ next if /(?:END|CHECK|INIT)\s*\{/;
+ next if /^[{(]?\s*(?:push|unshift|(?:\@r = )?splice|binmode|sleep)/;
+ next if /\bselect(?:\s*|\()[^()]+,/; # 4-arg select hangs
+ next if /use parent/;
+ my $q = s/[\\']/sprintf "\\%02x", ord $&/gore
+ =~ s/\0/'."\\0".'/grid;
+ $prog = <<end;
+ open oUt, ">&", STDOUT;
+ open STDOUT, ">/dev/null";
+ open STDIN, "</dev/null";
+ open STDERR, ">/dev/null";
+ \$unused_variable = '$q';
+ eval \$unused_variable while \$also_unused++ < 4;
+ print oUt sv_count, "\n";
+ eval \$unused_variable;
+ print oUt sv_count, "\n";
+end
+ open my $fh, "-|", $^X, "-Ilib", "-MXS::APItest=sv_count",
+ '-e', $prog or warn($!), next;
+ local $/;
+ $out = <$fh>;
+ close $fh;
+ @_ = split ' ', $out;
+ if (@_ == 2 && $_[1] > $_[0]) { print Dumper $_ }
+ }
+}
+
+BEGIN {
+ @exceptions = split /^/, <<'end';
+1 while 1;
+1 while some_condition_with_side_effects; */
+$a{buttons}[2*$a{default_button}] = [$a{buttons}[2*$a{default_button}]];
+$aliases{$code_point} = [ $aliases{$code_point} ];
+$aliases_maps->[$i] = [ $aliases_maps->[$i] ]
+$allow ? $hash{$acc} = $allow : push @list, $acc;
+/(a*(*MARK:a)b?)(*MARK:x)(*SKIP:a)(?{$count++; push @res,$1})(*FAIL)/g;
+$^A .= new version ~$_ for "\xce", v205, "\xcc";
+A rare race condition that would lead to L<sleep|perlfunc/sleep> taking more
+$args{include_dirs} = [ $args{include_dirs} ]
+$ARRAY[++$#ARRAY] = $value;
+ at a = sort ($b, @a)
+$a = {x => $a};
+$base =~ /^[cwnv]/i or push @tmpl, "$base>", "$base<";
+$base =~ /^[nv]/i or push @formats, "$base>", "$base<";
+BEGIN { unshift(@INC, "./blib") }
+BEGIN { unshift @INC, "lib" }
+BEGIN { unshift(@INC, LIST) }
+binmode *STDERR, ":encoding(utf8)";
+binmode *STDOUT, ":encoding(utf8)";
+char const *file = __FILE__;
+$char++ while substr( $got, $char, 1 ) eq substr( $wanted, $char, 1 );
+CHECK { $main::phase++ }
+$config{$k} = [ $config{$k} ]
+const char *file = __FILE__;
+const char* file = __FILE__;
+$count4 = unshift (@array, 0);
+$count7 = unshift (@array, 3, 2, 1);
+$data = [ $data ];
+do { $tainted_value = shift @ENV_values } while(!$tainted_value || ref $tainted_value);
+do {$x[$x] = $x;} while ($x++) < 10;
+eval {CHECK {print ":c3"}};
+eval {INIT {print ":i2"}};
+eval { $proto->can($method) } || push @nok, $method;
+eval { push \@ISA, __FILE__ };
+eval 'v23: $counter++; goto v23 unless $counter == 2';
+eval 'v23 : $counter++; goto v23 unless $counter == 2';
+$formdata->{$key} = [ $formdata->{$key}, $value ];
+$func = $next{$func} until $pod{$func};
+$got_arrayref ? unshift(@{$args[0]}, $cmd) : unshift(@args, $cmd);
+$h{ []} = 123;
+{ $h[++$i] = $_ }
+High resolution alarm, sleep, gettimeofday, interval timers
+if (-d "$directory/$_") { push @ARGV, "$directory/$_" }
+$i = int($i/2) until defined $self->[$i/2];
+$invmap_ref->[$i] = [ $invmap_ref->[$i] ];
+is(push(@ary,4), 3);
+is(push(@ary,56), 4);
+is(unshift(@ary,12), 5);
+$i++ while $self->{ids}{"$t$i"}++;
+{ --$level; push @out, (" " x $level) . "</ul>"; }
+$mod_hash->{$k} = [ $mod_hash->{$k} ];
+$modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename
+my $deep1 = []; push @$deep1, $deep1;
+my $deep2 = []; push @$deep2, $deep2;
+my $nfound = select($_[0], $_[1], $_[2], $_[3]);
+my $nfound = select($_[0], $_[1], $_[2], $gran);
+my $n = unshift(@ary,5,6);
+my @result = splice @temp, $self, $offset, $length, @_;
+my @r = splice @a, 0, 1, "x", "y";
+$_ = {name=>$_};
+$n = push @a, "rec0", "rec1", "rec2";
+$n = push @a, "rec3", "rec4$:";
+$n = unshift @a, "rec0", "rec1", "rec2";
+$n = unshift @a, "rec3", "rec4$:";
+@$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference
+ at old = splice(@h, 1, 2, qw(bananas just before));
+unlink <"$filename*">;
+package XS::APItest; require XSLoader; XSLoader::load()
+$pa = { -exitval => $pa };
+$pa = { -message => $pa };
+pop @lines while $lines[-1] eq "";
+pop @to while $#to and $to[$#to] == $to[$#to -1];
+pop(@$x); unshift(@q, $q);
+ at prgs = (@prgs, $file, split "\n########\n", <$fh>) ;
+print "LA LA LA\n" while 1; # loops forever
+prog => 'use Config; CHECK { $Config{awk} }',
+$p->{share_dir} = { dist => [ $p->{share_dir} ] };
+$p->{share_dir} = { dist => $p->{share_dir} };
+-sleep
+$resp = [$resp]
+$r = eval q[ qr/$r(??{$x})/; ];
+$r = qr/$r(??{$x})/;
+s/a|/push @bar, 1/e;
+$self->{DIR} = [grep $_, split ":", $self->{DIR}];
+$share_dir->{dist} = [ $share_dir->{dist} ];
+s![^/+]*$!man!&&-d&&!$s{$_}++&&push at m,#_;END{print"@m"}'
+$spec = [$spec, $_[0]];
+*s = ~(*s);
+$stack[$i++] &= ~1;
+$step = [$step];
+sub CHECK {print ":check"}
+sub INIT {print ":init"}
+system("find . -type f -print | xargs chmod 0444");
+the while clause. */
+Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers
+*tmpl = ~*tmpl;
+*tmps = ~*tmps;
+until ($i) { }
+weaken($objs[@objs] = $h{$_} = []);
+weaken($objs[@objs] = $$h{$_} = []);
+while (1) { my $k; }
+while(1) { sleep(1); }
+while($foo--) { print("In thread $thread\n"); }
+"words" =~ /(word|word|word)(?{push @got, $1})s$/;
+"words" =~ /(word|word|word)(?{push @got,$1})s$/i;
+$x->[$j] -= $BASE if $car = (($x->[$j] += $car) >= $BASE) ? 1 : 0; $j++;
+$x->[scalar @$x] = 0; # avoid || 0 test inside loop
+$z = splice @a, 3, 1, "recordZ";
+end
+ @exceptions{@exceptions} = ();
+}
Added: vendor/perl/dist/Porting/make-rmg-checklist
===================================================================
--- vendor/perl/dist/Porting/make-rmg-checklist (rev 0)
+++ vendor/perl/dist/Porting/make-rmg-checklist 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,145 @@
+#!perl
+use strict;
+use warnings;
+use autodie;
+
+use Getopt::Long;
+use Pod::Simple::HTML;
+
+sub main {
+ my ( $help, $type, $html );
+ GetOptions(
+ 'type:s' => \$type,
+ 'html' => \$html,
+ 'help' => \$help,
+ );
+
+ if ($help) {
+ print <<'EOF';
+make-rmg-checklist [--type TYPE]
+
+This script creates a release checklist as a simple HTML document. It accepts
+the following arguments:
+
+ --type The release type for the checklist. This can be BLEAD-FINAL,
+ BLEAD-POINT, MAINT, or RC. This defaults to BLEAD-POINT.
+
+ --html Output HTML instead of POD
+
+EOF
+
+ exit;
+ }
+
+ $type = _validate_type($type);
+
+ open my $fh, '<', 'Porting/release_managers_guide.pod';
+ my $pod = do { local $/; <$fh> };
+ close $fh;
+
+ my $heads = _parse_rmg( $pod, $type );
+ my $new_pod = _munge_pod( $pod, $heads );
+
+ if ($html) {
+ my $simple = Pod::Simple::HTML->new();
+ $simple->output_fh(*STDOUT);
+ $simple->parse_string_document($new_pod);
+ }
+ else {
+ print $new_pod;
+ }
+}
+
+sub _validate_type {
+ my $type = shift || 'BLEAD-POINT';
+
+ my @valid = qw( BLEAD-FINAL BLEAD-POINT MAINT RC );
+ my %valid = map { $_ => 1 } @valid;
+
+ unless ( $valid{ uc $type } ) {
+ my $err
+ = "The type you provided ($type) is not a valid release type. It must be one of ";
+ $err .= join ', ', @valid;
+ $err .= "\n";
+
+ die $err;
+ }
+
+ return $type;
+}
+
+sub _parse_rmg {
+ my $pod = shift;
+ my $type = shift;
+
+ my @heads;
+ my $include = 0;
+ my %skip;
+
+ for ( split /\n/, $pod ) {
+ if (/^=for checklist begin/) {
+ $include = 1;
+ next;
+ }
+
+ next unless $include;
+
+ last if /^=for checklist end/;
+
+ if (/^=for checklist skip (.+)/) {
+ %skip = map { $_ => 1 } split / /, $1;
+ next;
+ }
+
+ if (/^=head(\d) (.+)/) {
+ unless ( keys %skip && $skip{$type} ) {
+ push @heads, [ $1, $2 ];
+ }
+
+ %skip = ();
+ }
+ }
+
+ return \@heads;
+}
+
+sub _munge_pod {
+ my $pod = shift;
+ my $heads = shift;
+
+ $pod =~ s/=head1 NAME.+?(=head1 SYNOPSIS)/$1/s;
+
+ my $new_pod = <<'EOF';
+=head1 NAME
+
+Release Manager's Guide with Checklist
+
+=head2 Checklist
+
+EOF
+
+ my $last_level = 0;
+ for my $head ( @{$heads} ) {
+ my $level = $head->[0] - 1;
+
+ if ( $level > $last_level ) {
+ $new_pod .= '=over ' . $level * 4;
+ $new_pod .= "\n\n";
+ }
+ elsif ( $level < $last_level ) {
+ $new_pod .= "=back\n\n" for 1 .. ( $last_level - $level );
+ }
+
+ $new_pod .= '=item * ' . 'L<< /' . $head->[1] . " >>\n\n";
+
+ $last_level = $level;
+ }
+
+ $new_pod .= "=back\n\n" while $last_level--;
+
+ $new_pod .= $pod;
+
+ return $new_pod;
+}
+
+main();
Added: vendor/perl/dist/Porting/make_modlib_cpan.pl
===================================================================
--- vendor/perl/dist/Porting/make_modlib_cpan.pl (rev 0)
+++ vendor/perl/dist/Porting/make_modlib_cpan.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,91 @@
+#!perl
+#
+# This program generates the list of registered CPAN sites in perlmodlib.PL
+#
+use strict;
+use warnings;
+use 5.14.0;
+use autodie;
+use HTTP::Tiny;
+
+my $http = HTTP::Tiny->new;
+
+my $url = 'http://www.cpan.org/SITES';
+my $filename = 'SITES';
+my $response = $http->mirror( $url, $filename );
+unless ( $response->{success} ) {
+ die "Error downloading $url";
+}
+
+my $fh = IO::File->new($filename);
+
+while ( my $line = <$fh> ) {
+ chomp $line;
+ last
+ if $line eq
+ '[Africa] [Asia] [Australasia] [Central America] [Europe] [North America] [South America]';
+}
+
+my $line = <$fh>;
+
+say 'Registered CPAN sites';
+say '';
+say '=for maintainers';
+say 'Generated by Porting/make_modlib_cpan.pl';
+say '';
+
+my $continent;
+my $country;
+my $state;
+
+while ( my $line = <$fh> ) {
+ chomp $line;
+ next if $line =~ /^\s+$/;
+ last if $line eq 'Feedback';
+
+ if ( $line =~ /^(?<continent>\w.+)$/ ) {
+ if ($continent) {
+ say '';
+ if ($continent) {
+ say "=back";
+ say '';
+ }
+ if ( $continent eq 'North America' ) {
+ say "=back";
+ say '';
+ }
+ }
+ $continent = $+{continent};
+ undef $country;
+ say "=head2 $continent";
+ say '';
+ say '=over 4';
+ say '';
+ } elsif ( $line =~ /^\s{3}(?<country>\w.+)$/ ) {
+ if ($country) {
+ say '';
+ }
+ $country = $+{country};
+ undef $state;
+ say "=item $country";
+ say '';
+ if ( $country eq 'United States' ) {
+ say '=over 8';
+ say '';
+ }
+ } elsif ( $line =~ /^\s{5}(?<state>\w.+)$/ ) {
+ if ($state) {
+ say '';
+ }
+ $state = $+{state};
+ say "=item $state";
+ say '';
+ } elsif ( $line =~ /^\s{22}(?<site>\w.+$)/ ) {
+ say " $+{site}";
+ } else {
+ die "Unknown line: $line";
+ }
+}
+
+say '';
+say '=back';
Added: vendor/perl/dist/Porting/new-perldelta.pl
===================================================================
--- vendor/perl/dist/Porting/new-perldelta.pl (rev 0)
+++ vendor/perl/dist/Porting/new-perldelta.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,108 @@
+#!/usr/bin/perl -w
+use strict;
+
+# This needs to be able to run from a clean checkout, hence assume only system
+# perl, which may be too old to have autodie
+
+require 'Porting/pod_lib.pl';
+
+my $state = get_pod_metadata(1);
+my (undef, $old_major, $old_minor) = @{$state->{delta_version}};
+# For now, hard code it for the simple ones...
+my $new_major = $old_major;
+my $new_minor = $old_minor + 1;
+# These two are just for "If you are upgrading from earlier releases..." in
+# the perldelta template.
+my $was_major = $old_major;
+my $was_minor = $old_minor - 1;
+# I may have missed some corner cases here:
+if ($was_minor < 0) {
+ $was_minor = 0;
+ --$was_major;
+}
+my $newdelta_filename = "perl5$new_major${new_minor}delta.pod";
+
+{
+ # For now, just tell the user what to add, as it's safer.
+ my %add;
+
+ sub git_add_new {
+ push @{$add{new}}, shift;
+ }
+
+ sub git_add_modified {
+ push @{$add{modified}}, shift;
+ }
+
+ sub notify_success {
+ return unless %add;
+ print "Please run:\n";
+ foreach (qw(new modified)) {
+ print " git add @{$add{$_}}\n" if $add{$_};
+ }
+ print "\nBefore committing please check that the build works and make test_porting passes\n";
+ }
+}
+
+my $filename = 'pod/.gitignore';
+my $gitignore = slurp_or_die($filename);
+
+$gitignore =~ s{^/$state->{delta_target}$}
+ {/$newdelta_filename}m
+ or die "Can't find /$state->{delta_target} in $filename";
+
+write_or_die($filename, $gitignore);
+git_add_modified($filename);
+
+my $olddelta = slurp_or_die('pod/perldelta.pod');
+
+$olddelta =~ s{^(perl)(delta - what is new for perl v5.$old_major.$old_minor)$}
+ {$1 . "5$old_major$old_minor" . $2}me
+ or die "Can't find expected NAME contents in $olddelta";
+
+my $olddeltaname = "pod/perl5$old_major${old_minor}delta.pod";
+write_or_die($olddeltaname, $olddelta);
+git_add_new($olddeltaname);
+
+$filename = 'Porting/perldelta_template.pod';
+my $newdelta = slurp_or_die($filename);
+
+foreach([rXXX => $was_major],
+ [sXXX => $old_major],
+ [tXXX => $new_major],
+ [aXXX => $was_minor],
+ [bXXX => $old_minor],
+ [cXXX => $new_minor],
+ ['5XXX' => 5 . $old_major . $old_minor]) {
+ my ($token, $value) = @$_;
+ $newdelta =~ s/$token/$value/g
+ or die "Can't find '$token' in $filename";
+}
+
+write_or_die('pod/perldelta.pod', $newdelta);
+git_add_modified('pod/perldelta.pod');
+
+$filename = 'pod/perl.pod';
+my $pod_master = slurp_or_die($filename);
+
+$pod_master =~ s{^(\s*perl5)($was_major$was_minor)(delta\s+Perl changes in version )(5\.\d+\.\d+)(.*)}
+ {$1 . $old_major . $old_minor .$3 . "5.$old_major.$old_minor" . $5 . "\n" .
+ "$1$2$3$4$5"}me
+ or warn "Couldn't find perldelta line (for perl5$was_major${was_minor}delta) in $filename";
+
+write_or_die($filename, $pod_master);
+git_add_modified($filename);
+
+my $command = "$^X Porting/pod_rules.pl";
+system $command
+ and die "Could not run '$command', \$? = $?";
+git_add_modified(map {chomp $_; $_} `$^X Porting/pod_rules.pl --showfiles`);
+
+notify_success();
+
+# Local variables:
+# cperl-indent-level: 4
+# indent-tabs-mode: nil
+# End:
+#
+# ex: set ts=8 sts=4 sw=4 et:
Added: vendor/perl/dist/Porting/pod_lib.pl
===================================================================
--- vendor/perl/dist/Porting/pod_lib.pl (rev 0)
+++ vendor/perl/dist/Porting/pod_lib.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,549 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Digest::MD5 'md5';
+use File::Find;
+
+=head1 NAME
+
+Porting/pod_lib.pl - functions for building and installing POD
+
+=head1 SYNOPSIS
+
+ require './Porting/pod_lib.pl';
+
+=cut
+
+=head1 DESCRIPTION
+
+This program, when C<require>d into other programs in the Perl 5 core
+distribution, provides functions useful during building and, secondarily,
+testing.
+
+As of this writing, the functions in this program are used in these other
+programs:
+
+ installman
+ installperl
+ pod/buildtoc
+ pod/perl.pod
+ Porting/new-perldelta.pl
+ Porting/pod_rules.pl
+
+Note: Since these functions are used during the Perl build process, they must
+work with F<miniperl>. That necessarily implies that these functions must not
+rely on XS modules, either directly or indirectly (e.g., C<autodie>).
+
+=head1 SUBROUTINES
+
+=head2 C<my_die()>
+
+=over 4
+
+=item * Purpose
+
+Exit from a process with an error code and a message.
+
+=item * Arguments
+
+List of arguments to be passed with the error message. Example:
+
+ close $fh or my_die("close 'utils.lst': $!");
+
+=item * Return Value
+
+Exit code C<255>.
+
+=item * Comment
+
+Prints C<ABORTED> to STDERR.
+
+=back
+
+=cut
+
+sub my_die {
+ print STDERR "$0: ", @_;
+ print STDERR "\n" unless $_[-1] =~ /\n\z/;
+ print STDERR "ABORTED\n";
+ exit 255;
+}
+
+=head2 C<open_or_die()>
+
+=over 4
+
+=item * Purpose
+
+Opens a file or fails if it cannot.
+
+=item * Arguments
+
+String holding filename to be opened. Example:
+
+ $fh = open_or_die('utils.lst');
+
+=item * Return Value
+
+Handle to opened file.
+
+=back
+
+=cut
+
+sub open_or_die {
+ my $filename = shift;
+ open my $fh, '<', $filename or my_die "Can't open $filename: $!";
+ return $fh;
+}
+
+=head2 C<slurp_or_die()>
+
+=over 4
+
+=item * Purpose
+
+Read the contents of a file into memory as a single string.
+
+=item * Arguments
+
+String holding name of file to be read into memory.
+
+ $olddelta = slurp_or_die('pod/perldelta.pod');
+
+=item * Return Value
+
+String holding contents of file.
+
+=back
+
+=cut
+
+sub slurp_or_die {
+ my $filename = shift;
+ my $fh = open_or_die($filename);
+ binmode $fh;
+ local $/;
+ my $contents = <$fh>;
+ die "Can't read $filename: $!" unless defined $contents and close $fh;
+ return $contents;
+}
+
+=head2 C<write_or_die()>
+
+=over 4
+
+=item * Purpose
+
+Write out a string to a file.
+
+=item * Arguments
+
+List of two arguments: (i) String holding name of file to be written to; (ii)
+String holding contents to be written.
+
+ write_or_die($olddeltaname, $olddelta);
+
+=item * Return Value
+
+Implicitly returns true value upon success.
+
+=back
+
+=cut
+
+sub write_or_die {
+ my ($filename, $contents) = @_;
+ open my $fh, '>', $filename or die "Can't open $filename for writing: $!";
+ binmode $fh;
+ print $fh $contents or die "Can't write to $filename: $!";
+ close $fh or die "Can't close $filename: $!";
+}
+
+=head2 C<pods_to_install()>
+
+=over 4
+
+=item * Purpose
+
+Create a lookup table holding information about PODs to be installed.
+
+=item * Arguments
+
+None.
+
+=item * Return Value
+
+Reference to a hash with a structure like this:
+
+ $found = {
+ 'MODULE' => {
+ 'CPAN::Bundle' => 'lib/CPAN/Bundle.pm',
+ 'Locale::Codes::Script_Retired' =>
+ 'lib/Locale/Codes/Script_Retired.pm',
+ 'Pod::Simple::DumpAsText' =>
+ 'lib/Pod/Simple/DumpAsText.pm',
+ # ...
+ 'Locale::Codes::LangVar' =>
+ 'lib/Locale/Codes/LangVar.pod'
+ },
+ 'PRAGMA' => {
+ 'fields' => 'lib/fields.pm',
+ 'subs' => 'lib/subs.pm',
+ # ...
+ },
+
+=item * Comment
+
+Broadly speaking, the function assembles a list of all F<.pm> and F<.pod>
+files in the distribution and then excludes certain files from installation.
+
+=back
+
+=cut
+
+sub pods_to_install {
+ # manpages not to be installed
+ my %do_not_install = map { ($_ => 1) }
+ qw(Pod::Functions XS::APItest XS::Typemap);
+
+ my (%done, %found);
+
+ File::Find::find({no_chdir=>1,
+ wanted => sub {
+ if (m!/t\z!) {
+ ++$File::Find::prune;
+ return;
+ }
+
+ # $_ is $File::Find::name when using no_chdir
+ return unless m!\.p(?:m|od)\z! && -f $_;
+ return if m!lib/Net/FTP/.+\.pm\z!; # Hi, Graham! :-)
+ # Skip .pm files that have corresponding .pod files
+ return if s!\.pm\z!.pod! && -e $_;
+ s!\.pod\z!!;
+ s!\Alib/!!;
+ s!/!::!g;
+
+ my_die("Duplicate files for $_, '$done{$_}' and '$File::Find::name'")
+ if exists $done{$_};
+ $done{$_} = $File::Find::name;
+
+ return if $do_not_install{$_};
+ return if is_duplicate_pod($File::Find::name);
+ $found{/\A[a-z]/ ? 'PRAGMA' : 'MODULE'}{$_}
+ = $File::Find::name;
+ }}, 'lib');
+ return \%found;
+}
+
+my %state = (
+ # Don't copy these top level READMEs
+ ignore => {
+ micro => 1,
+ # vms => 1,
+ },
+ );
+
+{
+ my (%Lengths, %MD5s);
+
+ sub is_duplicate_pod {
+ my $file = shift;
+ local $_;
+
+ # Initialise the list of possible source files on the first call.
+ unless (%Lengths) {
+ __prime_state() unless $state{master};
+ foreach (@{$state{master}}) {
+ next unless $_->[2]{dual};
+ # This is a dual-life perl*.pod file, which will have be copied
+ # to lib/ by the build process, and hence also found there.
+ # These are the only pod files that might become duplicated.
+ ++$Lengths{-s $_->[1]};
+ ++$MD5s{md5(slurp_or_die($_->[1]))};
+ }
+ }
+
+ # We are a file in lib. Are we a duplicate?
+ # Don't bother calculating the MD5 if there's no interesting file of
+ # this length.
+ return $Lengths{-s $file} && $MD5s{md5(slurp_or_die($file))};
+ }
+}
+
+sub __prime_state {
+ my $source = 'perldelta.pod';
+ my $filename = "pod/$source";
+ my $contents = slurp_or_die($filename);
+ my @want =
+ $contents =~ /perldelta - what is new for perl v(5)\.(\d+)\.(\d+)\n/;
+ die "Can't extract version from $filename" unless @want;
+ my $delta_leaf = join '', 'perl', @want, 'delta';
+ $state{delta_target} = "$delta_leaf.pod";
+ $state{delta_version} = \@want;
+
+ # This way round so that keys can act as a MANIFEST skip list
+ # Targets will always be in the pod directory. Currently we can only cope
+ # with sources being in the same directory.
+ $state{copies}{$state{delta_target}} = $source;
+
+ # The default flags if none explicitly set for the current file.
+ my $current_flags = '';
+ my (%flag_set, @paths);
+
+ my $master = open_or_die('pod/perl.pod');
+
+ while (<$master>) {
+ last if /^=begin buildtoc$/;
+ }
+ die "Can't find '=begin buildtoc':" if eof $master;
+
+ while (<$master>) {
+ next if /^$/ or /^#/;
+ last if /^=end buildtoc/;
+ my ($command, @args) = split ' ';
+ if ($command eq 'flag') {
+ # For the named pods, use these flags, instead of $current_flags
+ my $flags = shift @args;
+ my_die("Malformed flag $flags")
+ unless $flags =~ /\A=([a-z]*)\z/;
+ $flag_set{$_} = $1 foreach @args;
+ } elsif ($command eq 'path') {
+ # If the pod's name matches the regex, prepend the given path.
+ my_die("Malformed path for /$args[0]/")
+ unless @args == 2;
+ push @paths, [qr/\A$args[0]\z/, $args[1]];
+ } elsif ($command eq 'aux') {
+ # The contents of perltoc.pod's "AUXILIARY DOCUMENTATION" section
+ $state{aux} = [sort @args];
+ } else {
+ my_die("Unknown buildtoc command '$command'");
+ }
+ }
+
+ foreach (<$master>) {
+ next if /^$/ or /^#/;
+ next if /^=head2/;
+ last if /^=for buildtoc __END__$/;
+
+ if (my ($action, $flags) = /^=for buildtoc flag ([-+])([a-z]+)/) {
+ if ($action eq '+') {
+ $current_flags .= $flags;
+ } else {
+ my_die("Attempt to unset [$flags] failed - flags are '$current_flags")
+ unless $current_flags =~ s/[\Q$flags\E]//g;
+ }
+ } elsif (my ($leafname, $desc) = /^\s+(\S+)\s+(.*)/) {
+ my $podname = $leafname;
+ my $filename = "pod/$podname.pod";
+ foreach (@paths) {
+ my ($re, $path) = @$_;
+ if ($leafname =~ $re) {
+ $podname = $path . $leafname;
+ $filename = "$podname.pod";
+ last;
+ }
+ }
+
+ # Keep this compatible with pre-5.10
+ my $flags = delete $flag_set{$leafname};
+ $flags = $current_flags unless defined $flags;
+
+ my %flags;
+ $flags{toc_omit} = 1 if $flags =~ tr/o//d;
+ $flags{dual} = $podname ne $leafname;
+
+ $state{generated}{"$podname.pod"}++ if $flags =~ tr/g//d;
+
+ if ($flags =~ tr/r//d) {
+ my $readme = $podname;
+ $readme =~ s/^perl//;
+ $state{readmes}{$readme} = $desc;
+ $flags{readme} = 1;
+ } else {
+ $state{pods}{$podname} = $desc;
+ }
+ my_die "Unknown flag found in section line: $_" if length $flags;
+
+ push @{$state{master}},
+ [$leafname, $filename, \%flags];
+
+ if ($podname eq 'perldelta') {
+ local $" = '.';
+ push @{$state{master}},
+ [$delta_leaf, "pod/$state{delta_target}"];
+ $state{pods}{$delta_leaf} = "Perl changes in version @want";
+ }
+
+ } else {
+ my_die("Malformed line: $_");
+ }
+ }
+ close $master or my_die("close pod/perl.pod: $!");
+ # This has to be special-cased somewhere. Turns out this is cleanest:
+ push @{$state{master}}, ['a2p', 'x2p/a2p.pod', {toc_omit => 1}];
+
+ my_die("perl.pod sets flags for unknown pods: "
+ . join ' ', sort keys %flag_set)
+ if keys %flag_set;
+}
+
+=head2 C<get_pod_metadata()>
+
+=over 4
+
+=item * Purpose
+
+=item * Arguments
+
+List of one or more arguments.
+
+=over 4
+
+=item * Boolean true or false
+
+=item * Reference to a suboutine.
+
+=item * Various other arguments.
+
+=back
+
+Example:
+
+ $state = get_pod_metadata(
+ 0, sub { warn @_ if @_ }, 'pod/perltoc.pod');
+
+ get_pod_metadata(
+ 1, sub { warn @_ if @_ }, values %Build);
+
+=item * Return Value
+
+Hash reference; each element provides either a list or a lookup table for
+information about various types of POD files.
+
+ 'aux' => [ # utility programs like
+ 'h2xs' and 'perlbug' ]
+ 'generated' => { # lookup table for generated POD files
+ like 'perlapi.pod' }
+ 'ignore' => { # lookup table for files to be ignored }
+ 'pods' => { # lookup table in "name" =>
+ "short description" format }
+ 'readmes' => { # lookup table for OS-specific
+ and other READMEs }
+ 'delta_version' => [ # major version number, minor no.,
+ patch no. ]
+ 'delta_target' => 'perl<Mmmpp>delta.pod',
+ 'master' => [ # list holding entries for files callable
+ by 'perldoc' ]
+ 'copies' => { # patch version perldelta =>
+ minor version perldelta }
+
+=back
+
+=cut
+
+sub get_pod_metadata {
+ # Do we expect to find generated pods on disk?
+ my $permit_missing_generated = shift;
+ # Do they want a consistency report?
+ my $callback = shift;
+ local $_;
+
+ __prime_state() unless $state{master};
+ return \%state unless $callback;
+
+ my %BuildFiles;
+
+ foreach my $path (@_) {
+ $path =~ m!([^/]+)$!;
+ ++$BuildFiles{$1};
+ }
+
+ # Sanity cross check
+
+ my (%disk_pods, %manipods, %manireadmes);
+ my (%cpanpods, %cpanpods_leaf);
+ my (%our_pods);
+
+ # There are files that we don't want to list in perl.pod.
+ # Maybe the various stub manpages should be listed there.
+ my %ignoredpods = map { ( "$_.pod" => 1 ) } qw( );
+
+ # Convert these to a list of filenames.
+ ++$our_pods{"$_.pod"} foreach keys %{$state{pods}};
+ foreach (@{$state{master}}) {
+ ++$our_pods{"$_->[0].pod"}
+ if $_->[2]{readme};
+ }
+
+ opendir my $dh, 'pod';
+ while (defined ($_ = readdir $dh)) {
+ next unless /\.pod\z/;
+ ++$disk_pods{$_};
+ }
+
+ # Things we copy from won't be in perl.pod
+ # Things we copy to won't be in MANIFEST
+
+ my $mani = open_or_die('MANIFEST');
+ while (<$mani>) {
+ chomp;
+ s/\s+.*$//;
+ if (m!^pod/([^.]+\.pod)!i) {
+ ++$manipods{$1};
+ } elsif (m!^README\.(\S+)!i) {
+ next if $state{ignore}{$1};
+ ++$manireadmes{"perl$1.pod"};
+ } elsif (exists $our_pods{$_}) {
+ ++$cpanpods{$_};
+ m!([^/]+)$!;
+ ++$cpanpods_leaf{$1};
+ $disk_pods{$_}++
+ if -e $_;
+ }
+ }
+ close $mani or my_die "close MANIFEST: $!\n";
+
+ # Are we running before known generated files have been generated?
+ # (eg in a clean checkout)
+ my %not_yet_there;
+ if ($permit_missing_generated) {
+ # If so, don't complain if these files aren't yet in place
+ %not_yet_there = (%manireadmes, %{$state{generated}}, %{$state{copies}})
+ }
+
+ my @inconsistent;
+ foreach my $i (sort keys %disk_pods) {
+ push @inconsistent, "$0: $i exists but is unknown by buildtoc\n"
+ unless $our_pods{$i} || $ignoredpods{$i};
+ push @inconsistent, "$0: $i exists but is unknown by MANIFEST\n"
+ if !$BuildFiles{'MANIFEST'} # Ignore if we're rebuilding MANIFEST
+ && !$manipods{$i} && !$manireadmes{$i} && !$state{copies}{$i}
+ && !$state{generated}{$i} && !$cpanpods{$i};
+ }
+ foreach my $i (sort keys %our_pods) {
+ push @inconsistent, "$0: $i is known by buildtoc but does not exist\n"
+ unless $disk_pods{$i} or $BuildFiles{$i} or $not_yet_there{$i};
+ }
+ unless ($BuildFiles{'MANIFEST'}) {
+ # Again, ignore these if we're about to rebuild MANIFEST
+ foreach my $i (sort keys %manipods) {
+ push @inconsistent, "$0: $i is known by MANIFEST but does not exist\n"
+ unless $disk_pods{$i};
+ push @inconsistent, "$0: $i is known by MANIFEST but is marked as generated\n"
+ if $state{generated}{$i};
+ }
+ }
+ &$callback(@inconsistent);
+ return \%state;
+}
+
+1;
+
+# Local variables:
+# cperl-indent-level: 4
+# indent-tabs-mode: nil
+# End:
+#
+# ex: set ts=8 sts=4 sw=4 et:
Added: vendor/perl/dist/Porting/pod_rules.pl
===================================================================
--- vendor/perl/dist/Porting/pod_rules.pl (rev 0)
+++ vendor/perl/dist/Porting/pod_rules.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,263 @@
+#!/usr/bin/perl -w
+
+use strict;
+use vars qw(%Build %Targets $Verbose $Test);
+use Text::Tabs;
+use Text::Wrap;
+use Getopt::Long;
+use Carp;
+
+# Generate the sections of files listed in %Targets from pod/perl.pod
+# Mostly these are rules in Makefiles
+#
+# --verbose gives slightly more output
+# --build-all tries to build everything
+# --build-foo updates foo as follows
+# --showfiles shows the files to be changed
+# --test exit if perl.pod, MANIFEST are consistent, and regenerated
+# files are up to date, die otherwise.
+
+%Targets = (
+ manifest => 'MANIFEST',
+ vms => 'vms/descrip_mms.template',
+ nmake => 'win32/Makefile',
+ dmake => 'win32/makefile.mk',
+ podmak => 'win32/pod.mak',
+ unix => 'Makefile.SH',
+ # plan9 => 'plan9/mkfile',
+ );
+
+require 'Porting/pod_lib.pl';
+sub my_die;
+
+# process command-line switches
+{
+ my @files = keys %Targets;
+ my $filesopts = join(" | ", map { "--build-$_" } "all", sort @files);
+ my $showfiles;
+ my %build_these;
+ die "$0: Usage: $0 [--verbose] [--showfiles] [$filesopts]\n"
+ unless GetOptions (verbose => \$Verbose,
+ showfiles => \$showfiles,
+ tap => \$Test,
+ map {+"build-$_", \$build_these{$_}} @files, 'all')
+ && !@ARGV;
+ if ($build_these{all}) {
+ %Build = %Targets;
+ } else {
+ while (my ($file, $want) = each %build_these) {
+ $Build{$file} = $Targets{$file} if $want;
+ }
+ # Default to --build-all if no targets given.
+ %Build = %Targets if !%Build;
+ }
+ if ($showfiles) {
+ print join(" ", sort { lc $a cmp lc $b } values %Build), "\n";
+ exit(0);
+ }
+}
+
+if ($Verbose) {
+ print "I will be building $_\n" foreach keys %Build;
+}
+
+my $test = 1;
+# For testing, generated files must be present and we're rebuilding nothing.
+# For normal rebuilding, generated files may not be present, and we mute
+# warnings about inconsistencies in any file we're about to rebuild.
+my $state = $Test
+ ? get_pod_metadata(0, sub {
+ printf "1..%d\n", 1 + scalar keys %Build;
+ if (@_) {
+ print "not ok $test\n";
+ die @_;
+ }
+ print "ok $test\n";
+ })
+ : get_pod_metadata(1, sub { warn @_ if @_ }, values %Build);
+
+sub generate_manifest {
+ # Annoyingly, unexpand doesn't consider it good form to replace a single
+ # space before a tab with a tab
+ # Annoyingly (2) it returns read only values.
+ my @temp = unexpand (map {sprintf "%-32s%s", @$_} @_);
+ map {s/ \t/\t\t/g; $_} @temp;
+}
+
+sub generate_manifest_pod {
+ generate_manifest map {["pod/$_.pod", $state->{pods}{$_}]}
+ sort grep {
+ !$state->{copies}{"$_.pod"}
+ && !$state->{generated}{"$_.pod"}
+ && !-e "$_.pod"
+ } keys %{$state->{pods}};
+}
+
+sub generate_manifest_readme {
+ generate_manifest sort {$a->[0] cmp $b->[0]}
+ ["README.vms", "Notes about installing the VMS port"],
+ map {["README.$_", $state->{readmes}{$_}]} keys %{$state->{readmes}};
+}
+
+sub generate_nmake_1 {
+ # XXX Fix this with File::Spec
+ (map {sprintf "\tcopy ..\\README.%-8s ..\\pod\\perl$_.pod\n", $_}
+ sort keys %{$state->{readmes}}),
+ (map {"\tcopy ..\\pod\\$state->{copies}{$_} ..\\pod\\$_\n"}
+ sort keys %{$state->{copies}});
+}
+
+# This doesn't have a trailing newline
+sub generate_nmake_2 {
+ # Spot the special case
+ local $Text::Wrap::columns = 76;
+ my $line = wrap ("\t ", "\t ",
+ join " ", sort(keys %{$state->{copies}},
+ keys %{$state->{generated}},
+ map {"perl$_.pod"} keys %{$state->{readmes}}));
+ $line =~ s/$/ \\/mg;
+ $line =~ s/ \\$//;
+ $line;
+}
+
+sub generate_pod_mak {
+ my $variable = shift;
+ my @lines;
+ my $line = "\U$variable = " . join "\t\\\n\t",
+ map {"$_.$variable"} sort grep { $_ !~ m{/} } keys %{$state->{pods}};
+ # Special case
+ $line =~ s/.*perltoc.html.*\n//m;
+ $line;
+}
+
+sub verify_contiguous {
+ my ($name, $content, $what) = @_;
+ my $sections = () = $content =~ m/\0+/g;
+ croak("$0: $name contains no $what") if $sections < 1;
+ croak("$0: $name contains discontiguous $what") if $sections > 1;
+}
+
+sub do_manifest {
+ my ($name, $prev) = @_;
+ my @manifest =
+ grep {! m!^pod/[^. \t]+\.pod.*!}
+ grep {! m!^README\.(\S+)! || $state->{ignore}{$1}} split "\n", $prev;
+ join "\n", (
+ # Dictionary order - fold and handle non-word chars as nothing
+ map { $_->[0] }
+ sort { $a->[1] cmp $b->[1] || $a->[0] cmp $b->[0] }
+ map { my $f = lc $_; $f =~ s/[^a-z0-9\s]//g; [ $_, $f ] }
+ @manifest,
+ &generate_manifest_pod(),
+ &generate_manifest_readme()), '';
+}
+
+sub do_nmake {
+ my ($name, $makefile) = @_;
+ $makefile =~ s/^\tcopy \.\.\\README.*\n/\0/gm;
+ verify_contiguous($name, $makefile, 'README copies');
+ # Now remove the other copies that follow
+ 1 while $makefile =~ s/\0\tcopy .*\n/\0/gm;
+ $makefile =~ s/\0+/join ("", &generate_nmake_1)/se;
+
+ $makefile =~ s{(-cd \$\(PODDIR\) && del /f[^\n]+).*?(-cd \.\.\\utils && del /f)}
+ {"$1\n" . &generate_nmake_2."\n\t$2"}se;
+ $makefile;
+}
+
+# shut up used only once warning
+*do_dmake = *do_dmake = \&do_nmake;
+
+sub do_podmak {
+ my ($name, $body) = @_;
+ foreach my $variable (qw(pod man html tex)) {
+ my_die "could not find $variable in $name"
+ unless $body =~ s{\n\U$variable\E = (?:[^\n]*\\\n)*[^\n]*}
+ {"\n" . generate_pod_mak ($variable)}se;
+ }
+ $body;
+}
+
+sub do_vms {
+ my ($name, $makefile) = @_;
+
+ # Looking for the macro defining the current perldelta:
+ #PERLDELTA_CURRENT = [.pod]perl5139delta.pod
+
+ $makefile =~ s{\nPERLDELTA_CURRENT\s+=\s+\Q[.pod]perl\E\d+delta\.pod\n}
+ {\0}sx;
+ verify_contiguous($name, $makefile, 'current perldelta macro');
+ $makefile =~ s/\0+/join "\n", '', "PERLDELTA_CURRENT = [.pod]$state->{delta_target}", ''/se;
+
+ $makefile;
+}
+
+sub do_unix {
+ my ($name, $makefile_SH) = @_;
+
+ $makefile_SH =~ s{^(perltoc_pod_prereqs = extra.pods).*}
+ {join ' ', $1, map "pod/$_",
+ sort(keys %{$state->{copies}},
+ grep {!/perltoc/} keys %{$state->{generated}})
+ }mge;
+
+ # pod/perl511delta.pod: pod/perldelta.pod
+ # cd pod && $(LNS) perldelta.pod perl511delta.pod
+
+ # although it seems that HP-UX make gets confused, always tried to
+ # regenerate the symlink, and then the ln -s fails, as the target exists.
+
+ $makefile_SH =~ s!(
+pod/perl[a-z0-9_]+\.pod: pod/perl[a-z0-9_]+\.pod
+ \$\(RMS\) pod/perl[a-z0-9_]+\.pod
+ \$\(LNS\) perl[a-z0-9_]+\.pod pod/perl[a-z0-9_]+\.pod
+)+!\0!gm;
+
+ verify_contiguous($name, $makefile_SH, 'copy rules');
+
+ my @copy_rules = map "
+pod/$_: pod/$state->{copies}{$_}
+ \$(RMS) pod/$_
+ \$(LNS) $state->{copies}{$_} pod/$_
+", keys %{$state->{copies}};
+
+ $makefile_SH =~ s/\0+/join '', @copy_rules/se;
+ $makefile_SH;
+}
+
+# Do stuff
+while (my ($target, $name) = each %Build) {
+ print "Now processing $name\n" if $Verbose;
+
+ my $orig = slurp_or_die($name);
+ my_die "$name contains NUL bytes" if $orig =~ /\0/;
+
+ my $new = do {
+ no strict 'refs';
+ &{"do_$target"}($target, $orig);
+ };
+
+ if ($Test) {
+ printf "%s %d # $name is up to date\n",
+ $new eq $orig ? 'ok' : 'not ok',
+ ++$test;
+ next;
+ } elsif ($new eq $orig) {
+ print "Was not modified\n"
+ if $Verbose;
+ next;
+ }
+
+ my $mode = (stat $name)[2] // my_die "Can't stat $name: $!";
+ rename $name, "$name.old" or my_die "Can't rename $name to $name.old: $!";
+
+ write_or_die($name, $new);
+ chmod $mode & 0777, $name or my_die "can't chmod $mode $name: $!";
+}
+
+# Local variables:
+# cperl-indent-level: 4
+# indent-tabs-mode: nil
+# End:
+#
+# ex: set ts=8 sts=4 sw=4 et:
Added: vendor/perl/dist/Porting/release_announcement_template.txt
===================================================================
--- vendor/perl/dist/Porting/release_announcement_template.txt (rev 0)
+++ vendor/perl/dist/Porting/release_announcement_template.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,27 @@
+ [EPIGRAPH]
+
+ -- [ATTRIBUTION]
+
+We are [SYNONYM FOR 'pleased'] to announce version [VERSION.SUBVERSION],
+the [N-TH] development release of version 17 of Perl 5.
+
+You will soon be able to download Perl 5.[VERSION.SUBVERSION] from your
+favorite CPAN mirror or find it at:
+
+https://metacpan.org/release/[AUTHOR]/perl-5.[VERSION.SUBVERSION]/
+
+SHA1 digests for this release are:
+
+ [TAR.GZ SHA1] perl-5.[VERSION.SUBVERSION].tar.gz
+ [TAR.BZ2 SHA1] perl-5.[VERSION.SUBVERSION].tar.bz2
+
+You can find a full list of changes in the file "perldelta.pod" located in
+the "pod" directory inside the release and on the web.
+
+[ACKNOWLEDGEMENTS SECTION FROM PERLDELTA]
+
+We expect to release version [NEXT BLEAD VERSION.SUBVERSION] on [FUTURE
+DATE]. The next major stable release of Perl 5, version 18.0, should
+appear in May 2013.
+
+[YOUR SALUATION HERE]
Added: vendor/perl/dist/Porting/sync-with-cpan
===================================================================
--- vendor/perl/dist/Porting/sync-with-cpan (rev 0)
+++ vendor/perl/dist/Porting/sync-with-cpan 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,484 @@
+#!/usr/bin/env perl
+
+=head1 NAME
+
+Porting/sync-with-cpan - Synchronize with CPAN distributions
+
+=head1 SYNOPSIS
+
+ perl Porting/sync-with-cpan <module>
+
+where <module> is the name it appears in the C<%Modules> hash
+of F<Porting/Maintainers.pl>
+
+=head1 DESCRIPTION
+
+Script to help out with syncing cpan distros.
+
+Does the following:
+
+=over 4
+
+=item *
+
+Fetches the package list from CPAN. Finds the current version of the given
+package. [1]
+
+=item *
+
+Downloads the relevant tarball; unpacks the tarball. [1]
+
+=item *
+
+Clean out the old directory (C<git clean -dfx>)
+
+=item *
+
+Moves the old directory out of the way, moves the new directory in place.
+
+=item *
+
+Restores any F<.gitignore> file.
+
+=item *
+
+Removes files from C<@IGNORE> and C<EXCLUDED>
+
+=item *
+
+C<git add> any new files.
+
+=item *
+
+C<git rm> any files that are gone.
+
+=item *
+
+Remove the +x bit on files in F<t/>
+
+=item *
+
+Remove the +x bit on files that don't have it enabled in the current dir
+
+=item *
+
+Restore files mentioned in C<CUSTOMIZED>
+
+=item *
+
+Adds new files to F<MANIFEST>
+
+=item *
+
+Runs a C<make> (assumes a configure has been run)
+
+=item *
+
+Cleans up
+
+=item *
+
+Runs tests for the package
+
+=item *
+
+Runs the porting tests
+
+=back
+
+[1] If the C<--tarball> option is given, then CPAN is not consulted.
+C<--tarball> should be the path to the tarball; the version is extracted
+from the filename -- but can be overwritten by the C<--version> option.
+
+=head1 TODO
+
+=over 4
+
+=item *
+
+Delete files from F<MANIFEST>
+
+=item *
+
+Update F<Porting/Maintainers.pl>
+
+=item *
+
+Optional, run a full test suite
+
+=item *
+
+Handle complicated C<FILES>
+
+=back
+
+This is an initial version; no attempt has been made yet to make this
+portable. It shells out instead of trying to find a Perl solution.
+In particular, it assumes wget, git, tar, chmod, perl, make, and rm
+to be available.
+
+=cut
+
+
+package Maintainers;
+
+use 5.010;
+
+use strict;
+use warnings;
+use Getopt::Long;
+
+$| = 1;
+
+die "This does not look like a top level directory"
+ unless -d "cpan" && -d "Porting";
+
+our @IGNORABLE;
+our %Modules;
+
+use autodie;
+
+require "Porting/Maintainers.pl";
+
+my %IGNORABLE = map {$_ => 1} @IGNORABLE;
+
+my $package = "02packages.details.txt";
+my $package_url = "http://www.cpan.org/modules/$package";
+my $package_file = "/tmp/$package";
+
+my @problematic = (
+ 'podlators', # weird CUSTOMIZED section due to .PL files
+);
+
+
+GetOptions ('tarball=s' => \my $tarball,
+ 'version=s' => \my $version,
+ force => \my $force,)
+ or die "Failed to parse arguments";
+
+die "Usage: $0 module [args] [cpan package]" unless @ARGV == 1 || @ARGV == 2;
+
+my ($module) = shift;
+my $cpan_mod = @ARGV ? shift : $module;
+
+
+my $info = $Modules {$module} or die "Cannot find module $module";
+my $distribution = $$info {DISTRIBUTION};
+
+my @files = glob $$info {FILES};
+if (!-d $files [0] || grep { $_ eq $module } @problematic) {
+ say "This looks like a setup $0 cannot handle (yet)";
+ unless ($force) {
+ say "Will not continue without a --force option";
+ exit 1;
+ }
+ say "--force is in effect, so we'll soldier on. Wish me luck!";
+}
+
+
+chdir "cpan";
+
+my $pkg_dir = $files[0];
+ $pkg_dir =~ s!.*/!!;
+
+my ($old_version) = $distribution =~ /-([0-9.]+)\.tar\.gz/;
+
+my $o_module = $module;
+if ($cpan_mod =~ /-/ && $cpan_mod !~ /::/) {
+ $cpan_mod =~ s/-/::/g;
+}
+
+#
+# Find the information from CPAN.
+#
+my $new_file;
+my $new_version;
+unless ($tarball) {
+ #
+ # Poor man's cache
+ #
+ unless (-f $package_file && -M $package_file < 1) {
+ system wget => $package_url, '-qO', $package_file;
+ }
+
+ my $new_line = `grep '^$cpan_mod ' $package_file`
+ or die "Cannot find $cpan_mod on CPAN\n";
+ chomp $new_line;
+ (undef, $new_version, my $new_path) = split ' ', $new_line;
+ if (defined $version) {
+ $new_path =~ s/-$new_version\./-$version\./;
+ $new_version = $version;
+ }
+ $new_file = (split '/', $new_path) [-1];
+
+ my $url = "http://search.cpan.org/CPAN/authors/id/$new_path";
+ say "Fetching $url";
+ #
+ # Fetch the new distro
+ #
+ system wget => $url, '-qO', $new_file;
+}
+else {
+ $new_file = $tarball;
+ $new_version = $version // ($new_file =~ /-([0-9._]+)\.tar\.gz/) [0];
+}
+
+my $old_dir = "$pkg_dir-$old_version";
+
+say "Cleaning out old directory";
+system git => 'clean', '-dfxq', $pkg_dir;
+
+say "Unpacking $new_file";
+
+system tar => 'xfz', $new_file;
+(my $new_dir = $new_file) =~ s/\.tar\.gz//;
+# ensure 'make' will update all files
+system('find', $new_dir, '-exec', 'touch', '{}', ';');
+
+say "Renaming directories";
+rename $pkg_dir => $old_dir;
+
+say "Creating new package directory";
+mkdir $pkg_dir;
+
+say "Populating new package directory";
+my $map = $$info {MAP};
+my @EXCLUDED_QR;
+my %EXCLUDED_QQ;
+if ($$info {EXCLUDED}) {
+ foreach my $entry (@{$$info {EXCLUDED}}) {
+ if (ref $entry) {push @EXCLUDED_QR => $entry}
+ else {$EXCLUDED_QQ {$entry} = 1}
+ }
+}
+
+FILE: for my $file ( `find $new_dir -type f` ) {
+ chomp $file;
+ my $old_file = $file;
+ $file =~ s{^$new_dir/}{};
+
+ next if $EXCLUDED_QQ{$file};
+ for my $qr (@EXCLUDED_QR) {
+ next FILE if $file =~ $qr;
+ }
+
+ if ( $map ) {
+ for my $key ( sort { length $b <=> length $a } keys %$map ) {
+ my $val = $map->{$key};
+ last if $file =~ s/^$key/$val/;
+ }
+ }
+ else {
+ $file = $files[0] . '/' . $file;
+ }
+
+ if ( $file =~ m{^cpan/} ) {
+ $file =~ s{^cpan/}{};
+ }
+ else {
+ $file = '../' . $file;
+ }
+
+ my $prefix = '';
+ my @parts = split '/', $file;
+ pop @parts;
+ for my $part (@parts) {
+ $prefix .= '/' if $prefix;
+ $prefix .= $part;
+ mkdir $prefix unless -d $prefix;
+ }
+
+ rename $old_file => $file;
+}
+system 'rm', '-rf', $new_dir;
+
+if (-f "$old_dir/.gitignore") {
+ say "Restoring .gitignore";
+ system git => 'checkout', "$pkg_dir/.gitignore";
+}
+
+my @new_files = `find $pkg_dir -type f`;
+chomp @new_files;
+ at new_files = grep {$_ ne $pkg_dir} @new_files;
+s!^[^/]+/!! for @new_files;
+my %new_files = map {$_ => 1} @new_files;
+
+my @old_files = `find $old_dir -type f`;
+chomp @old_files;
+ at old_files = grep {$_ ne $old_dir} @old_files;
+s!^[^/]+/!! for @old_files;
+my %old_files = map {$_ => 1} @old_files;
+
+my @delete;
+my @commit;
+my @gone;
+FILE:
+foreach my $file (@new_files) {
+ next if -d "$pkg_dir/$file"; # Ignore directories.
+ next if $old_files {$file}; # It's already there.
+ if ($IGNORABLE {$file}) {
+ push @delete => $file;
+ next;
+ }
+ push @commit => $file;
+}
+foreach my $file (@old_files) {
+ next if -d "$old_dir/$file";
+ next if $new_files {$file};
+ push @gone => $file;
+}
+
+#
+# Find all files with an exec bit
+#
+my @exec = `find $pkg_dir -type f -perm +111`;
+chomp @exec;
+my @de_exec;
+foreach my $file (@exec) {
+ # Remove leading dir
+ $file =~ s!^[^/]+/!!;
+ if ($file =~ m!^t/!) {
+ push @de_exec => $file;
+ next;
+ }
+ # Check to see if the file exists; if it doesn't and doesn't have
+ # the exec bit, remove it.
+ if ($old_files {$file}) {
+ unless (-x "$old_dir/$file") {
+ push @de_exec => $file;
+ }
+ }
+}
+
+#
+# No need to change the +x bit on files that will be deleted.
+#
+if (@de_exec && @delete) {
+ my %delete = map {+"$pkg_dir/$_" => 1} @delete;
+ @de_exec = grep {!$delete {$_}} @de_exec;
+}
+
+say "unlink $pkg_dir/$_" for @delete;
+say "git add $pkg_dir/$_" for @commit;
+say "git rm -f $pkg_dir/$_" for @gone;
+say "chmod a-x $pkg_dir/$_" for @de_exec;
+
+print "Hit return to continue; ^C to abort "; <STDIN>;
+
+unlink "$pkg_dir/$_" for @delete;
+system git => 'add', "$pkg_dir/$_" for @commit;
+system git => 'rm', '-f', "$pkg_dir/$_" for @gone;
+system chmod => 'a-x', "$pkg_dir/$_" for @de_exec;
+
+#
+# Restore anything that is customized.
+# We don't really care whether we've deleted the file - since we
+# do a git restore, it's going to be resurrected if necessary.
+#
+if ($$info {CUSTOMIZED}) {
+ say "Restoring customized files";
+ foreach my $file (@{$$info {CUSTOMIZED}}) {
+ system git => "checkout", "$pkg_dir/$file";
+ }
+}
+
+chdir "..";
+if (@commit) {
+ say "Fixing MANIFEST";
+ my $MANIFEST = "MANIFEST";
+ my $MANIFEST_SORT = "$MANIFEST.sorted";
+ open my $fh, ">>", $MANIFEST;
+ say $fh "cpan/$pkg_dir/$_" for @commit;
+ close $fh;
+ system perl => "Porting/manisort", '--output', $MANIFEST_SORT;
+ rename $MANIFEST_SORT => $MANIFEST;
+}
+
+
+print "Running a make ... ";
+system "make > make.log 2>&1" and die "Running make failed, see make.log";
+print "done\n";
+
+#
+# Must clean up, or else t/porting/FindExt.t will fail.
+# Note that we can always retrieve the orginal directory with a git checkout.
+#
+print "About to clean up; hit return or abort (^C) "; <STDIN>;
+
+chdir "cpan";
+system rm => '-r', $old_dir;
+unlink $new_file unless $tarball;
+
+
+#
+# Run the tests. First the test belonging to the module, followed by the
+# the tests in t/porting
+#
+chdir "../t";
+say "Running module tests";
+my @test_files = `find ../cpan/$pkg_dir -name '*.t' -type f`;
+chomp @test_files;
+my $output = `./perl TEST @test_files`;
+unless ($output =~ /All tests successful/) {
+ say $output;
+ exit 1;
+}
+
+print "Running tests in t/porting ";
+my @tests = `ls porting/*.t`;
+chomp @tests;
+my @failed;
+foreach my $t (@tests) {
+ my @not = `./perl -I../lib -I.. $t | grep ^not | grep -v "# TODO"`;
+ print @not ? '!' : '.';
+ push @failed => $t if @not;
+}
+print "\n";
+say "Failed tests: @failed" if @failed;
+
+
+say "Attempting to update Maintainers.pl";
+chdir '..';
+
+open my $Maintainers_pl, '<', 'Porting/Maintainers.pl';
+open my $new_Maintainers_pl, '>', 'Maintainers.pl';
+
+my $found;
+my $in_mod_section;
+while (<$Maintainers_pl>) {
+ if (!$found) {
+ if ($in_mod_section) {
+ if (/DISTRIBUTION/) {
+ if (s/\Q$old_version/$new_version/) {
+ $found = 1;
+ }
+ }
+
+ if (/^ }/) {
+ $in_mod_section = 0;
+ }
+ }
+
+ if (/\Q$cpan_mod/) {
+ $in_mod_section = 1;
+ }
+ }
+
+ print $new_Maintainers_pl $_;
+}
+
+if ($found) {
+ unlink 'Porting/Maintainers.pl';
+ rename 'Maintainers.pl' => 'Porting/Maintainers.pl';
+ system chmod => 'a+x', 'Porting/Maintainers.pl';
+}
+else {
+ say "Could not update Porting/Maintainers.pl.";
+ say "Make sure you update this by hand before committing.";
+}
+
+say "$o_module is now version $new_version";
+say "Now you ought to run a make; make test ...";
+
+
+__END__
Added: vendor/perl/dist/Porting/todo.pod
===================================================================
--- vendor/perl/dist/Porting/todo.pod (rev 0)
+++ vendor/perl/dist/Porting/todo.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1210 @@
+=head1 NAME
+
+todo - Perl TO-DO list
+
+=head1 DESCRIPTION
+
+This is a list of wishes for Perl. The most up to date version of this file
+is at L<http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/Porting/todo.pod>
+
+The tasks we think are smaller or easier are listed first. Anyone is welcome
+to work on any of these, but it's a good idea to first contact
+I<perl5-porters at perl.org> to avoid duplication of effort, and to learn from
+any previous attempts. By all means contact a pumpking privately first if you
+prefer.
+
+Whilst patches to make the list shorter are most welcome, ideas to add to
+the list are also encouraged. Check the perl5-porters archives for past
+ideas, and any discussion about them. One set of archives may be found at
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/>
+
+What can we offer you in return? Fame, fortune, and everlasting glory? Maybe
+not, but if your patch is incorporated, then we'll add your name to the
+F<AUTHORS> file, which ships in the official distribution. How many other
+programming languages offer you 1 line of immortality?
+
+=head1 Tasks that need only a little Perl knowledge
+
+=head2 Fix POD errors in Perl documentation
+
+Perl documentation is furnished in POD (Plain Old Documentation); see
+L<perlpod>. We also have a utility that checks for various errors in
+this documentation: F<t/porting/podcheck.t>. Unfortunately many files
+have errors in them, and there is a database of known problems, kept in
+F<t/porting/known_pod_issues.dat>. The most prevalent errors are lines
+too wide to fit in a standard terminal window, but there are more
+serious problems as well; and there are items listed there that are not
+in fact errors. The task would be to go through and clean up the
+documentation. This would be a good way to learn more about Perl.
+
+=head1 Tasks that only need Perl knowledge
+
+=head2 Classify bug tickets by type
+
+Known bugs in Perl are tracked by L<https://rt.perl.org/rt3> (which also
+includes Perl 6). A summary can be found at
+L<https://rt.perl.org/rt3/NoAuth/perl5/Overview.html>.
+It shows bugs classified by "type". However, the type of many of the
+bugs is "unknown". This greatly lowers the chances of them getting
+fixed, as the number of open bugs is overwhelming -- too many to wade
+through for someone to try to find the bugs in the parts of
+Perl that s/he knows well enough to try to fix. This task involves
+going through these bugs and classifying them into one or more types.
+
+=head2 Ongoing: investigate new bug reports
+
+When a bug report is filed, it would be very helpful to have someone do
+a quick investigation to see if it is a real problem, and to reply to
+the poster about it, asking for example code that reproduces the
+problem. Such code should be added to the test suite as TODO tests, and
+the ticket should be classified by type. To get started on this task,
+look at the tickets that are marked as "New Issues" in
+L<https://rt.perl.org/rt3/NoAuth/perl5/Overview.html>.
+
+=head2 Migrate t/ from custom TAP generation
+
+Many tests below F<t/> still generate TAP by "hand", rather than using library
+functions. As explained in L<perlhack/TESTING>, tests in F<t/> are
+written in a particular way to test that more complex constructions actually
+work before using them routinely. Hence they don't use C<Test::More>, but
+instead there is an intentionally simpler library, F<t/test.pl>. However,
+quite a few tests in F<t/> have not been refactored to use it. Refactoring
+any of these tests, one at a time, is a useful thing TODO.
+
+The subdirectories F<base>, F<cmd> and F<comp>, that contain the most
+basic tests, should be excluded from this task.
+
+=head2 Automate perldelta generation
+
+The perldelta file accompanying each release summaries the major changes.
+It's mostly manually generated currently, but some of that could be
+automated with a bit of perl, specifically the generation of
+
+=over
+
+=item Modules and Pragmata
+
+=item New Documentation
+
+=item New Tests
+
+=back
+
+See F<Porting/how_to_write_a_perldelta.pod> for details.
+
+=head2 Make Schwern poorer
+
+We should have tests for everything. When all the core's modules are tested,
+Schwern has promised to donate to $500 to TPF. We may need volunteers to
+hold him upside down and shake vigorously in order to actually extract the
+cash.
+
+=head2 Write descriptions for all tests
+
+Many individual tests in the test suite lack descriptions (or names, or labels
+-- call them what you will). Many files completely lack descriptions, meaning
+that the only output you get is the test numbers. If all tests had
+descriptions, understanding what the tests are testing and why they sometimes
+fail would both get a whole lot easier.
+
+=head2 Improve the coverage of the core tests
+
+Use Devel::Cover to ascertain the core modules' test coverage, then add
+tests that are currently missing.
+
+=head2 test B
+
+A full test suite for the B module would be nice.
+
+=head2 A decent benchmark
+
+C<perlbench> seems impervious to any recent changes made to the perl core. It
+would be useful to have a reasonable general benchmarking suite that roughly
+represented what current perl programs do, and measurably reported whether
+tweaks to the core improve, degrade or don't really affect performance, to
+guide people attempting to optimise the guts of perl. Gisle would welcome
+new tests for perlbench. Steffen Schwingon would welcome help with
+L<Benchmark::Perl::Formance>
+
+=head2 fix tainting bugs
+
+Fix the bugs revealed by running the test suite with the C<-t> switch (via
+C<make test.taintwarn>).
+
+=head2 Dual life everything
+
+As part of the "dists" plan, anything that doesn't belong in the smallest perl
+distribution needs to be dual lifed. Anything else can be too. Figure out what
+changes would be needed to package that module and its tests up for CPAN, and
+do so. Test it with older perl releases, and fix the problems you find.
+
+To make a minimal perl distribution, it's useful to look at
+F<t/lib/commonsense.t>.
+
+=head2 POSIX memory footprint
+
+Ilya observed that use POSIX; eats memory like there's no tomorrow, and at
+various times worked to cut it down. There is probably still fat to cut out -
+for example POSIX passes Exporter some very memory hungry data structures.
+
+=head2 makedef.pl and conditional compilation
+
+The script F<makedef.pl> that generates the list of exported symbols on
+platforms which need this. Functions are declared in F<embed.fnc>, variables
+in F<intrpvar.h>. Quite a few of the functions and variables are conditionally
+declared there, using C<#ifdef>. However, F<makedef.pl> doesn't understand the
+C macros, so the rules about which symbols are present when is duplicated in
+the Perl code. Writing things twice is bad, m'kay. It would be good to teach
+F<.pl> to understand the conditional compilation, and hence remove the
+duplication, and the mistakes it has caused.
+
+=head2 use strict; and AutoLoad
+
+Currently if you write
+
+ package Whack;
+ use AutoLoader 'AUTOLOAD';
+ use strict;
+ 1;
+ __END__
+ sub bloop {
+ print join (' ', No, strict, here), "!\n";
+ }
+
+then C<use strict;> isn't in force within the autoloaded subroutines. It would
+be more consistent (and less surprising) to arrange for all lexical pragmas
+in force at the __END__ block to be in force within each autoloaded subroutine.
+
+There's a similar problem with SelfLoader.
+
+=head2 profile installman
+
+The F<installman> script is slow. All it is doing text processing, which we're
+told is something Perl is good at. So it would be nice to know what it is doing
+that is taking so much CPU, and where possible address it.
+
+=head2 enable lexical enabling/disabling of individual warnings
+
+Currently, warnings can only be enabled or disabled by category. There
+are times when it would be useful to quash a single warning, not a
+whole category.
+
+=head2 document diagnostics
+
+Many diagnostic messages are not currently documented. The list is at the end
+of t/porting/diag.t.
+
+=head2 Write TODO tests for open bugs
+
+Sometimes bugs get fixed as a side effect of something else, and
+the bug remains open because no one realizes that it has been fixed.
+Ideally, every open bug should have a TODO test in the core test suite.
+
+=head1 Tasks that need a little sysadmin-type knowledge
+
+Or if you prefer, tasks that you would learn from, and broaden your skills
+base...
+
+=head2 make HTML install work
+
+There is an C<install.html> target in the Makefile. It's marked as
+"experimental". It would be good to get this tested, make it work reliably, and
+remove the "experimental" tag. This would include
+
+=over 4
+
+=item 1
+
+Checking that cross linking between various parts of the documentation works.
+In particular that links work between the modules (files with POD in F<lib/>)
+and the core documentation (files in F<pod/>)
+
+=item 2
+
+Improving the code that split C<perlfunc> into chunks, preferably with
+general case code added to L<Pod::Functions> that could be used elsewhere.
+
+Challenges here are correctly identifying the groups of functions that go
+together, and making the right named external cross-links point to the right
+page. Currently this works reasonably well in the general case, and correctly
+parses two or more C<=items> giving the different parameter lists for the
+same function, such used by C<substr>. However it fails completely where
+I<different> functions are listed as a sequence of C<=items> but share the
+same description. All the functions from C<getpwnam> to C<endprotoent> have
+individual stub pages, with only the page for C<endservent> holding the
+description common to all. Likewise C<q>, C<qq> and C<qw> have stub pages,
+instead of sharing the body of C<qx>.
+
+Note also the current code isn't ideal with the two forms of C<select>, mushing
+them both into one F<select.html> with the two descriptions run together.
+Fixing this may well be a special case.
+
+=back
+
+=head2 compressed man pages
+
+Be able to install them. This would probably need a configure test to see how
+the system does compressed man pages (same directory/different directory?
+same filename/different filename), as well as tweaking the F<installman> script
+to compress as necessary.
+
+=head2 Add a code coverage target to the Makefile
+
+Make it easy for anyone to run Devel::Cover on the core's tests. The steps
+to do this manually are roughly
+
+=over 4
+
+=item *
+
+do a normal C<Configure>, but include Devel::Cover as a module to install
+(see L<INSTALL> for how to do this)
+
+=item *
+
+ make perl
+
+=item *
+
+ cd t; HARNESS_PERL_SWITCHES=-MDevel::Cover ./perl -I../lib harness
+
+=item *
+
+Process the resulting Devel::Cover database
+
+=back
+
+This just give you the coverage of the F<.pm>s. To also get the C level
+coverage you need to
+
+=over 4
+
+=item *
+
+Additionally tell C<Configure> to use the appropriate C compiler flags for
+C<gcov>
+
+=item *
+
+ make perl.gcov
+
+(instead of C<make perl>)
+
+=item *
+
+After running the tests run C<gcov> to generate all the F<.gcov> files.
+(Including down in the subdirectories of F<ext/>
+
+=item *
+
+(From the top level perl directory) run C<gcov2perl> on all the C<.gcov> files
+to get their stats into the cover_db directory.
+
+=item *
+
+Then process the Devel::Cover database
+
+=back
+
+It would be good to add a single switch to C<Configure> to specify that you
+wanted to perform perl level coverage, and another to specify C level
+coverage, and have C<Configure> and the F<Makefile> do all the right things
+automatically.
+
+=head2 Make Config.pm cope with differences between built and installed perl
+
+Quite often vendors ship a perl binary compiled with their (pay-for)
+compilers. People install a free compiler, such as gcc. To work out how to
+build extensions, Perl interrogates C<%Config>, so in this situation
+C<%Config> describes compilers that aren't there, and extension building
+fails. This forces people into choosing between re-compiling perl themselves
+using the compiler they have, or only using modules that the vendor ships.
+
+It would be good to find a way teach C<Config.pm> about the installation setup,
+possibly involving probing at install time or later, so that the C<%Config> in
+a binary distribution better describes the installed machine, when the
+installed machine differs from the build machine in some significant way.
+
+=head2 linker specification files
+
+Some platforms mandate that you provide a list of a shared library's external
+symbols to the linker, so the core already has the infrastructure in place to
+do this for generating shared perl libraries. Florian Ragwitz has been working
+to offer this for the GNU toolchain, to allow Unix users to test that the
+export list is correct, and to build a perl that does not pollute the global
+namespace with private symbols, and will fail in the same way as msvc or mingw
+builds or when using PERL_DL_NONLAZY=1. See the branch smoke-me/rafl/ld_export
+
+=head2 Cross-compile support
+
+We get requests for "how to cross compile Perl". The vast majority of these
+seem to be for a couple of scenarios:
+
+=over 4
+
+=item *
+
+Platforms that could build natively using F<./Configure> (I<e.g.> Linux or
+NetBSD on MIPS or ARM) but people want to use a beefier machine (and on the
+same OS) to build more easily.
+
+=item *
+
+Platforms that can't build natively, but no (significant) porting changes
+are needed to our current source code. Prime example of this is Android.
+
+=back
+
+There are several scripts and tools for cross-compiling perl for other
+platforms. However, these are somewhat inconsistent and scattered across the
+codebase, none are documented well, none are clearly flexible enough to
+be confident that they can support any TARGET/HOST plaform pair other than
+that which they were developed on, and it's not clear how bitrotted they are.
+
+For example, C<Configure> understands C<-Dusecrosscompile> option. This option
+arranges for building C<miniperl> for TARGET machine, so this C<miniperl> is
+assumed then to be copied to TARGET machine and used as a replacement of
+full C<perl> executable. This code is almost 10 years old. Meanwhile, the
+F<Cross/> directory contains two different approaches for cross compiling to
+ARM Linux targets, relying on hand curated F<config.sh> files, but that code
+is getting on for 5 years old, and requires insider knowledge of perl's
+build system to draft a F<config.sh> for a new platform.
+
+Jess Robinson has sumbitted a grant to TPF to work on cleaning this up.
+
+=head2 Split "linker" from "compiler"
+
+Right now, Configure probes for two commands, and sets two variables:
+
+=over 4
+
+=item * C<cc> (in F<cc.U>)
+
+This variable holds the name of a command to execute a C compiler which
+can resolve multiple global references that happen to have the same
+name. Usual values are F<cc> and F<gcc>.
+Fervent ANSI compilers may be called F<c89>. AIX has F<xlc>.
+
+=item * C<ld> (in F<dlsrc.U>)
+
+This variable indicates the program to be used to link
+libraries for dynamic loading. On some systems, it is F<ld>.
+On ELF systems, it should be C<$cc>. Mostly, we'll try to respect
+the hint file setting.
+
+=back
+
+There is an implicit historical assumption from around Perl5.000alpha
+something, that C<$cc> is also the correct command for linking object files
+together to make an executable. This may be true on Unix, but it's not true
+on other platforms, and there are a maze of work arounds in other places (such
+as F<Makefile.SH>) to cope with this.
+
+Ideally, we should create a new variable to hold the name of the executable
+linker program, probe for it in F<Configure>, and centralise all the special
+case logic there or in hints files.
+
+A small bikeshed issue remains - what to call it, given that C<$ld> is already
+taken (arguably for the wrong thing now, but on SunOS 4.1 it is the command
+for creating dynamically-loadable modules) and C<$link> could be confused with
+the Unix command line executable of the same name, which does something
+completely different. Andy Dougherty makes the counter argument "In parrot, I
+tried to call the command used to link object files and libraries into an
+executable F<link>, since that's what my vaguely-remembered DOS and VMS
+experience suggested. I don't think any real confusion has ensued, so it's
+probably a reasonable name for perl5 to use."
+
+"Alas, I've always worried that introducing it would make things worse,
+since now the module building utilities would have to look for
+C<$Config{link}> and institute a fall-back plan if it weren't found."
+Although I can see that as confusing, given that C<$Config{d_link}> is true
+when (hard) links are available.
+
+=head2 Configure Windows using PowerShell
+
+Currently, Windows uses hard-coded config files based to build the
+config.h for compiling Perl. Makefiles are also hard-coded and need to be
+hand edited prior to building Perl. While this makes it easy to create a perl.exe
+that works across multiple Windows versions, being able to accurately
+configure a perl.exe for a specific Windows versions and VS C++ would be
+a nice enhancement. With PowerShell available on Windows XP and up, this
+may now be possible. Step 1 might be to investigate whether this is possible
+and use this to clean up our current makefile situation. Step 2 would be to
+see if there would be a way to use our existing metaconfig units to configure a
+Windows Perl or whether we go in a separate direction and make it so. Of
+course, we all know what step 3 is.
+
+=head1 Tasks that need a little C knowledge
+
+These tasks would need a little C knowledge, but don't need any specific
+background or experience with XS, or how the Perl interpreter works
+
+=head2 Weed out needless PERL_UNUSED_ARG
+
+The C code uses the macro C<PERL_UNUSED_ARG> to stop compilers warning about
+unused arguments. Often the arguments can't be removed, as there is an
+external constraint that determines the prototype of the function, so this
+approach is valid. However, there are some cases where C<PERL_UNUSED_ARG>
+could be removed. Specifically
+
+=over 4
+
+=item *
+
+The prototypes of (nearly all) static functions can be changed
+
+=item *
+
+Unused arguments generated by short cut macros are wasteful - the short cut
+macro used can be changed.
+
+=back
+
+=head2 -Duse32bit*
+
+Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
+On these systems, it might be the default compilation mode, and there
+is currently no guarantee that passing no use64bitall option to the
+Configure process will build a 32bit perl. Implementing -Duse32bit*
+options would be nice for perl 5.18.1.
+
+=head2 Profile Perl - am I hot or not?
+
+The Perl source code is stable enough that it makes sense to profile it,
+identify and optimise the hotspots. It would be good to measure the
+performance of the Perl interpreter using free tools such as cachegrind,
+gprof, and dtrace, and work to reduce the bottlenecks they reveal.
+
+As part of this, the idea of F<pp_hot.c> is that it contains the I<hot> ops,
+the ops that are most commonly used. The idea is that by grouping them, their
+object code will be adjacent in the executable, so they have a greater chance
+of already being in the CPU cache (or swapped in) due to being near another op
+already in use.
+
+Except that it's not clear if these really are the most commonly used ops. So
+as part of exercising your skills with coverage and profiling tools you might
+want to determine what ops I<really> are the most commonly used. And in turn
+suggest evictions and promotions to achieve a better F<pp_hot.c>.
+
+One piece of Perl code that might make a good testbed is F<installman>.
+
+=head2 Improve win32/wince.c
+
+Currently, numerous functions look virtually, if not completely,
+identical in both F<win32/wince.c> and F<win32/win32.c> files, which can't
+be good.
+
+=head2 Use secure CRT functions when building with VC8 on Win32
+
+Visual C++ 2005 (VC++ 8.x) deprecated a number of CRT functions on the basis
+that they were "unsafe" and introduced differently named secure versions of
+them as replacements, e.g. instead of writing
+
+ FILE* f = fopen(__FILE__, "r");
+
+one should now write
+
+ FILE* f;
+ errno_t err = fopen_s(&f, __FILE__, "r");
+
+Currently, the warnings about these deprecations have been disabled by adding
+-D_CRT_SECURE_NO_DEPRECATE to the CFLAGS. It would be nice to remove that
+warning suppressant and actually make use of the new secure CRT functions.
+
+There is also a similar issue with POSIX CRT function names like fileno having
+been deprecated in favour of ISO C++ conformant names like _fileno. These
+warnings are also currently suppressed by adding -D_CRT_NONSTDC_NO_DEPRECATE. It
+might be nice to do as Microsoft suggest here too, although, unlike the secure
+functions issue, there is presumably little or no benefit in this case.
+
+=head2 Fix POSIX::access() and chdir() on Win32
+
+These functions currently take no account of DACLs and therefore do not behave
+correctly in situations where access is restricted by DACLs (as opposed to the
+read-only attribute).
+
+Furthermore, POSIX::access() behaves differently for directories having the
+read-only attribute set depending on what CRT library is being used. For
+example, the _access() function in the VC6 and VC7 CRTs (wrongly) claim that
+such directories are not writable, whereas in fact all directories are writable
+unless access is denied by DACLs. (In the case of directories, the read-only
+attribute actually only means that the directory cannot be deleted.) This CRT
+bug is fixed in the VC8 and VC9 CRTs (but, of course, the directory may still
+not actually be writable if access is indeed denied by DACLs).
+
+For the chdir() issue, see ActiveState bug #74552:
+L<http://bugs.activestate.com/show_bug.cgi?id=74552>
+
+Therefore, DACLs should be checked both for consistency across CRTs and for
+the correct answer.
+
+(Note that perl's -w operator should not be modified to check DACLs. It has
+been written so that it reflects the state of the read-only attribute, even
+for directories (whatever CRT is being used), for symmetry with chmod().)
+
+=head2 strcat(), strcpy(), strncat(), strncpy(), sprintf(), vsprintf()
+
+Maybe create a utility that checks after each libperl.a creation that
+none of the above (nor sprintf(), vsprintf(), or *SHUDDER* gets())
+ever creep back to libperl.a.
+
+ nm libperl.a | ./miniperl -alne '$o = $F[0] if /:$/; print "$o $F[1]" if $F[0] eq "U" && $F[1] =~ /^(?:strn?c(?:at|py)|v?sprintf|gets)$/'
+
+Note, of course, that this will only tell whether B<your> platform
+is using those naughty interfaces.
+
+=head2 -D_FORTIFY_SOURCE=2
+
+Recent glibcs support C<-D_FORTIFY_SOURCE=2> which gives
+protection against various kinds of buffer overflow problems.
+It should probably be used for compiling Perl whenever available,
+Configure and/or hints files should be adjusted to probe for the
+availability of these feature and enable it as appropriate.
+
+=head2 Arenas for GPs? For MAGIC?
+
+C<struct gp> and C<struct magic> are both currently allocated by C<malloc>.
+It might be a speed or memory saving to change to using arenas. Or it might
+not. It would need some suitable benchmarking first. In particular, C<GP>s
+can probably be changed with minimal compatibility impact (probably nothing
+outside of the core, or even outside of F<gv.c> allocates them), but they
+probably aren't allocated/deallocated often enough for a speed saving. Whereas
+C<MAGIC> is allocated/deallocated more often, but in turn, is also something
+more externally visible, so changing the rules here may bite external code.
+
+=head2 Shared arenas
+
+Several SV body structs are now the same size, notably PVMG and PVGV, PVAV and
+PVHV, and PVCV and PVFM. It should be possible to allocate and return same
+sized bodies from the same actual arena, rather than maintaining one arena for
+each. This could save 4-6K per thread, of memory no longer tied up in the
+not-yet-allocated part of an arena.
+
+
+=head1 Tasks that need a knowledge of XS
+
+These tasks would need C knowledge, and roughly the level of knowledge of
+the perl API that comes from writing modules that use XS to interface to
+C.
+
+=head2 Write an XS cookbook
+
+Create pod/perlxscookbook.pod with short, task-focused 'recipes' in XS that
+demonstrate common tasks and good practices. (Some of these might be
+extracted from perlguts.) The target audience should be XS novices, who need
+more examples than perlguts but something less overwhelming than perlapi.
+Recipes should provide "one pretty good way to do it" instead of TIMTOWTDI.
+
+Rather than focusing on interfacing Perl to C libraries, such a cookbook
+should probably focus on how to optimize Perl routines by re-writing them
+in XS. This will likely be more motivating to those who mostly work in
+Perl but are looking to take the next step into XS.
+
+Deconstructing and explaining some simpler XS modules could be one way to
+bootstrap a cookbook. (List::Util? Class::XSAccessor? Tree::Ternary_XS?)
+Another option could be deconstructing the implementation of some simpler
+functions in op.c.
+
+=head2 Document how XSUBs can use C<cv_set_call_checker> to inline themselves as OPs
+
+For a simple XSUB, often the subroutine dispatch takes more time than the
+XSUB itself. v5.14.0 now allows XSUBs to register a function which will be
+called when the parser is finished building an C<entersub> op which calls
+them.
+
+Registration is done with C<Perl_cv_set_call_checker>, is documented at the
+API level in L<perlapi>, and L<perl5140delta/Custom per-subroutine check hooks>
+notes that it can be used to inline a subroutine, by replacing it with a
+custom op. However there is no further detail of the code needed to do this.
+It would be useful to add one or more annotated examples of how to create
+XSUBs that inline.
+
+This should provide a measurable speed up to simple XSUBs inside
+tight loops. Initially one would have to write the OP alternative
+implementation by hand, but it's likely that this should be reasonably
+straightforward for the type of XSUB that would benefit the most. Longer
+term, once the run-time implementation is proven, it should be possible to
+progressively update ExtUtils::ParseXS to generate OP implementations for
+some XSUBs.
+
+=head2 Remove the use of SVs as temporaries in dump.c
+
+F<dump.c> contains debugging routines to dump out the contains of perl data
+structures, such as C<SV>s, C<AV>s and C<HV>s. Currently, the dumping code
+B<uses> C<SV>s for its temporary buffers, which was a logical initial
+implementation choice, as they provide ready made memory handling.
+
+However, they also lead to a lot of confusion when it happens that what you're
+trying to debug is seen by the code in F<dump.c>, correctly or incorrectly, as
+a temporary scalar it can use for a temporary buffer. It's also not possible
+to dump scalars before the interpreter is properly set up, such as during
+ithreads cloning. It would be good to progressively replace the use of scalars
+as string accumulation buffers with something much simpler, directly allocated
+by C<malloc>. The F<dump.c> code is (or should be) only producing 7 bit
+US-ASCII, so output character sets are not an issue.
+
+Producing and proving an internal simple buffer allocation would make it easier
+to re-write the internals of the PerlIO subsystem to avoid using C<SV>s for
+B<its> buffers, use of which can cause problems similar to those of F<dump.c>,
+at similar times.
+
+=head2 safely supporting POSIX SA_SIGINFO
+
+Some years ago Jarkko supplied patches to provide support for the POSIX
+SA_SIGINFO feature in Perl, passing the extra data to the Perl signal handler.
+
+Unfortunately, it only works with "unsafe" signals, because under safe
+signals, by the time Perl gets to run the signal handler, the extra
+information has been lost. Moreover, it's not easy to store it somewhere,
+as you can't call mutexs, or do anything else fancy, from inside a signal
+handler.
+
+So it strikes me that we could provide safe SA_SIGINFO support
+
+=over 4
+
+=item 1
+
+Provide global variables for two file descriptors
+
+=item 2
+
+When the first request is made via C<sigaction> for C<SA_SIGINFO>, create a
+pipe, store the reader in one, the writer in the other
+
+=item 3
+
+In the "safe" signal handler (C<Perl_csighandler()>/C<S_raise_signal()>), if
+the C<siginfo_t> pointer non-C<NULL>, and the writer file handle is open,
+
+=over 8
+
+=item 1
+
+serialise signal number, C<struct siginfo_t> (or at least the parts we care
+about) into a small auto char buff
+
+=item 2
+
+C<write()> that (non-blocking) to the writer fd
+
+=over 12
+
+=item 1
+
+if it writes 100%, flag the signal in a counter of "signals on the pipe" akin
+to the current per-signal-number counts
+
+=item 2
+
+if it writes 0%, assume the pipe is full. Flag the data as lost?
+
+=item 3
+
+if it writes partially, croak a panic, as your OS is broken.
+
+=back
+
+=back
+
+=item 4
+
+in the regular C<PERL_ASYNC_CHECK()> processing, if there are "signals on
+the pipe", read the data out, deserialise, build the Perl structures on
+the stack (code in C<Perl_sighandler()>, the "unsafe" handler), and call as
+usual.
+
+=back
+
+I think that this gets us decent C<SA_SIGINFO> support, without the current risk
+of running Perl code inside the signal handler context. (With all the dangers
+of things like C<malloc> corruption that that currently offers us)
+
+For more information see the thread starting with this message:
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-03/msg00305.html>
+
+=head2 autovivification
+
+Make all autovivification consistent w.r.t LVALUE/RVALUE and strict/no strict;
+
+This task is incremental - even a little bit of work on it will help.
+
+=head2 Unicode in Filenames
+
+chdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open,
+opendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen,
+system, truncate, unlink, utime, -X. All these could potentially accept
+Unicode filenames either as input or output (and in the case of system
+and qx Unicode in general, as input or output to/from the shell).
+Whether a filesystem - an operating system pair understands Unicode in
+filenames varies.
+
+Known combinations that have some level of understanding include
+Microsoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac
+OS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to
+create Unicode filenames, what forms of Unicode are accepted and used
+(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used,
+and so on, varies. Finding the right level of interfacing to Perl
+requires some thought. Remember that an OS does not implicate a
+filesystem.
+
+(The Windows -C command flag "wide API support" has been at least
+temporarily retired in 5.8.1, and the -C has been repurposed, see
+L<perlrun>.)
+
+Most probably the right way to do this would be this:
+L</"Virtualize operating system access">.
+
+=head2 Unicode in %ENV
+
+Currently the %ENV entries are always byte strings.
+See L</"Virtualize operating system access">.
+
+(See RT ticket #113536 for information on Win32's handling of %ENV,
+which was fixed to work with native ANSI codepage characters in the
+environment, but still doesn't work with other characters outside of
+that codepage present in the environment.)
+
+=head2 Unicode and glob()
+
+Currently glob patterns and filenames returned from File::Glob::glob()
+are always byte strings. See L</"Virtualize operating system access">.
+
+=head2 use less 'memory'
+
+Investigate trade offs to switch out perl's choices on memory usage.
+Particularly perl should be able to give memory back.
+
+This task is incremental - even a little bit of work on it will help.
+
+=head2 Re-implement C<:unique> in a way that is actually thread-safe
+
+The old implementation made bad assumptions on several levels. A good 90%
+solution might be just to make C<:unique> work to share the string buffer
+of SvPVs. That way large constant strings can be shared between ithreads,
+such as the configuration information in F<Config>.
+
+=head2 Make tainting consistent
+
+Tainting would be easier to use if it didn't take documented shortcuts and
+allow taint to "leak" everywhere within an expression.
+
+=head2 readpipe(LIST)
+
+system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
+running a shell. readpipe() (the function behind qx//) could be similarly
+extended.
+
+=head2 Audit the code for destruction ordering assumptions
+
+Change 25773 notes
+
+ /* Need to check SvMAGICAL, as during global destruction it may be that
+ AvARYLEN(av) has been freed before av, and hence the SvANY() pointer
+ is now part of the linked list of SV heads, rather than pointing to
+ the original body. */
+ /* FIXME - audit the code for other bugs like this one. */
+
+adding the C<SvMAGICAL> check to
+
+ if (AvARYLEN(av) && SvMAGICAL(AvARYLEN(av))) {
+ MAGIC *mg = mg_find (AvARYLEN(av), PERL_MAGIC_arylen);
+
+Go through the core and look for similar assumptions that SVs have particular
+types, as all bets are off during global destruction.
+
+=head2 Extend PerlIO and PerlIO::Scalar
+
+PerlIO::Scalar doesn't know how to truncate(). Implementing this
+would require extending the PerlIO vtable.
+
+Similarly the PerlIO vtable doesn't know about formats (write()), or
+about stat(), or chmod()/chown(), utime(), or flock().
+
+(For PerlIO::Scalar it's hard to see what e.g. mode bits or ownership
+would mean.)
+
+PerlIO doesn't do directories or symlinks, either: mkdir(), rmdir(),
+opendir(), closedir(), seekdir(), rewinddir(), glob(); symlink(),
+readlink().
+
+See also L</"Virtualize operating system access">.
+
+=head2 Organize error messages
+
+Perl's diagnostics (error messages, see L<perldiag>) could use
+reorganizing and formalizing so that each error message has its
+stable-for-all-eternity unique id, categorized by severity, type, and
+subsystem. (The error messages would be listed in a datafile outside
+of the Perl source code, and the source code would only refer to the
+messages by the id.) This clean-up and regularizing should apply
+for all croak() messages.
+
+This would enable all sorts of things: easier translation/localization
+of the messages (though please do keep in mind the caveats of
+L<Locale::Maketext> about too straightforward approaches to
+translation), filtering by severity, and instead of grepping for a
+particular error message one could look for a stable error id. (Of
+course, changing the error messages by default would break all the
+existing software depending on some particular error message...)
+
+This kind of functionality is known as I<message catalogs>. Look for
+inspiration for example in the catgets() system, possibly even use it
+if available-- but B<only> if available, all platforms will B<not>
+have catgets().
+
+For the really pure at heart, consider extending this item to cover
+also the warning messages (see L<perllexwarn>, C<warnings.pl>).
+
+=head1 Tasks that need a knowledge of the interpreter
+
+These tasks would need C knowledge, and knowledge of how the interpreter works,
+or a willingness to learn.
+
+=head2 forbid labels with keyword names
+
+Currently C<goto keyword> "computes" the label value:
+
+ $ perl -e 'goto print'
+ Can't find label 1 at -e line 1.
+
+It is controversial if the right way to avoid the confusion is to forbid
+labels with keyword names, or if it would be better to always treat
+bareword expressions after a "goto" as a label and never as a keyword.
+
+=head2 truncate() prototype
+
+The prototype of truncate() is currently C<$$>. It should probably
+be C<*$> instead. (This is changed in F<opcode.pl>)
+
+=head2 error reporting of [$a ; $b]
+
+Using C<;> inside brackets is a syntax error, and we don't propose to change
+that by giving it any meaning. However, it's not reported very helpfully:
+
+ $ perl -e '$a = [$b; $c];'
+ syntax error at -e line 1, near "$b;"
+ syntax error at -e line 1, near "$c]"
+ Execution of -e aborted due to compilation errors.
+
+It should be possible to hook into the tokeniser or the lexer, so that when a
+C<;> is parsed where it is not legal as a statement terminator (ie inside
+C<{}> used as a hashref, C<[]> or C<()>) it issues an error something like
+I<';' isn't legal inside an expression - if you need multiple statements use a
+do {...} block>. See the thread starting at
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-09/msg00573.html>
+
+=head2 strict as warnings
+
+See L<http://markmail.org/message/vbrupaslr3bybmvk>, where Josua ben Jore
+writes: I've been of the opinion that everything strict.pm does ought to be
+able to considered just warnings that have been promoted to 'FATAL'.
+
+=head2 lexicals used only once
+
+This warns:
+
+ $ perl -we '$pie = 42'
+ Name "main::pie" used only once: possible typo at -e line 1.
+
+This does not:
+
+ $ perl -we 'my $pie = 42'
+
+Logically all lexicals used only once should warn, if the user asks for
+warnings. An unworked RT ticket (#5087) has been open for almost seven
+years for this discrepancy.
+
+=head2 UTF-8 revamp
+
+The handling of Unicode is unclean in many places. In the regex engine
+there are especially many problems. The swash data structure could be
+replaced my something better. Inversion lists and maps are likely
+candidates. The whole Unicode database could be placed in-core for a
+huge speed-up. Only minimal work was done on the optimizer when utf8
+was added, with the result that the synthetic start class often will
+fail to narrow down the possible choices when given non-Latin1 input.
+Karl Williamson has been working on this - talk to him.
+
+=head2 state variable initialization in list context
+
+Currently this is illegal:
+
+ state ($a, $b) = foo();
+
+In Perl 6, C<state ($a) = foo();> and C<(state $a) = foo();> have different
+semantics, which is tricky to implement in Perl 5 as currently they produce
+the same opcode trees. The Perl 6 design is firm, so it would be good to
+implement the necessary code in Perl 5. There are comments in
+C<Perl_newASSIGNOP()> that show the code paths taken by various assignment
+constructions involving state variables.
+
+=head2 A does() built-in
+
+Like ref(), only useful. It would call the C<DOES> method on objects; it
+would also tell whether something can be dereferenced as an
+array/hash/etc., or used as a regexp, etc.
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-03/msg00481.html>
+
+=head2 Tied filehandles and write() don't mix
+
+There is no method on tied filehandles to allow them to be called back by
+formats.
+
+=head2 Propagate compilation hints to the debugger
+
+Currently a debugger started with -dE on the command-line doesn't see the
+features enabled by -E. More generally hints (C<$^H> and C<%^H>) aren't
+propagated to the debugger. Probably it would be a good thing to propagate
+hints from the innermost non-C<DB::> scope: this would make code eval'ed
+in the debugger see the features (and strictures, etc.) currently in
+scope.
+
+=head2 Attach/detach debugger from running program
+
+The old perltodo notes "With C<gdb>, you can attach the debugger to a running
+program if you pass the process ID. It would be good to do this with the Perl
+debugger on a running Perl program, although I'm not sure how it would be
+done." ssh and screen do this with named pipes in /tmp. Maybe we can too.
+
+=head2 LVALUE functions for lists
+
+The old perltodo notes that lvalue functions don't work for list or hash
+slices. This would be good to fix.
+
+=head2 regexp optimiser optional
+
+The regexp optimiser is not optional. It should configurable to be, to allow
+its performance to be measured, and its bugs to be easily demonstrated.
+
+=head2 C</w> regex modifier
+
+That flag would enable to match whole words, and also to interpolate
+arrays as alternations. With it, C</P/w> would be roughly equivalent to:
+
+ do { local $"='|'; /\b(?:P)\b/ }
+
+See
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00400.html>
+for the discussion.
+
+=head2 optional optimizer
+
+Make the peephole optimizer optional. Currently it performs two tasks as
+it walks the optree - genuine peephole optimisations, and necessary fixups of
+ops. It would be good to find an efficient way to switch out the
+optimisations whilst keeping the fixups.
+
+=head2 You WANT *how* many
+
+Currently contexts are void, scalar and list. split has a special mechanism in
+place to pass in the number of return values wanted. It would be useful to
+have a general mechanism for this, backwards compatible and little speed hit.
+This would allow proposals such as short circuiting sort to be implemented
+as a module on CPAN.
+
+=head2 lexical aliases
+
+Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>).
+
+=head2 Self-ties
+
+Self-ties are currently illegal because they caused too many segfaults. Maybe
+the causes of these could be tracked down and self-ties on all types
+reinstated.
+
+=head2 Optimize away @_
+
+The old perltodo notes "Look at the "reification" code in C<av.c>".
+
+=head2 Virtualize operating system access
+
+Implement a set of "vtables" that virtualizes operating system access
+(open(), mkdir(), unlink(), readdir(), getenv(), etc.) At the very
+least these interfaces should take SVs as "name" arguments instead of
+bare char pointers; probably the most flexible and extensible way
+would be for the Perl-facing interfaces to accept HVs. The system
+needs to be per-operating-system and per-file-system
+hookable/filterable, preferably both from XS and Perl level
+(L<perlport/"Files and Filesystems"> is good reading at this point,
+in fact, all of L<perlport> is.)
+
+This has actually already been implemented (but only for Win32),
+take a look at F<iperlsys.h> and F<win32/perlhost.h>. While all Win32
+variants go through a set of "vtables" for operating system access,
+non-Win32 systems currently go straight for the POSIX/Unix-style
+system/library call. Similar system as for Win32 should be
+implemented for all platforms. The existing Win32 implementation
+probably does not need to survive alongside this proposed new
+implementation, the approaches could be merged.
+
+What would this give us? One often-asked-for feature this would
+enable is using Unicode for filenames, and other "names" like %ENV,
+usernames, hostnames, and so forth.
+(See L<perlunicode/"When Unicode Does Not Happen">.)
+
+But this kind of virtualization would also allow for things like
+virtual filesystems, virtual networks, and "sandboxes" (though as long
+as dynamic loading of random object code is allowed, not very safe
+sandboxes since external code of course know not of Perl's vtables).
+An example of a smaller "sandbox" is that this feature can be used to
+implement per-thread working directories: Win32 already does this.
+
+See also L</"Extend PerlIO and PerlIO::Scalar">.
+
+=head2 repack the optree
+
+Repacking the optree after execution order is determined could allow
+removal of NULL ops, and optimal ordering of OPs with respect to cache-line
+filling. I think that
+the best way to do this is to make it an optional step just before the
+completed optree is attached to anything else, and to use the slab allocator
+unchanged--but allocate a single slab the right size, avoiding partial
+slabs--, so that freeing ops is identical whether or not this step runs.
+Note that the slab allocator allocates ops downwards in memory, so one would
+have to actually "allocate" the ops in reverse-execution order to get them
+contiguous in memory in execution order.
+
+See
+L<http://www.nntp.perl.org/group/perl.perl5.porters/2007/12/msg131975.html>
+
+Note that running this copy, and then freeing all the old location ops would
+cause their slabs to be freed, which would eliminate possible memory wastage if
+the previous suggestion is implemented, and we swap slabs more frequently.
+
+=head2 eliminate incorrect line numbers in warnings
+
+This code
+
+ use warnings;
+ my $undef;
+
+ if ($undef == 3) {
+ } elsif ($undef == 0) {
+ }
+
+used to produce this output:
+
+ Use of uninitialized value in numeric eq (==) at wrong.pl line 4.
+ Use of uninitialized value in numeric eq (==) at wrong.pl line 4.
+
+where the line of the second warning was misreported - it should be line 5.
+Rafael fixed this - the problem arose because there was no nextstate OP
+between the execution of the C<if> and the C<elsif>, hence C<PL_curcop> still
+reports that the currently executing line is line 4. The solution was to inject
+a nextstate OPs for each C<elsif>, although it turned out that the nextstate
+OP needed to be a nulled OP, rather than a live nextstate OP, else other line
+numbers became misreported. (Jenga!)
+
+The problem is more general than C<elsif> (although the C<elsif> case is the
+most common and the most confusing). Ideally this code
+
+ use warnings;
+ my $undef;
+
+ my $a = $undef + 1;
+ my $b
+ = $undef
+ + 1;
+
+would produce this output
+
+ Use of uninitialized value $undef in addition (+) at wrong.pl line 4.
+ Use of uninitialized value $undef in addition (+) at wrong.pl line 7.
+
+(rather than lines 4 and 5), but this would seem to require every OP to carry
+(at least) line number information.
+
+What might work is to have an optional line number in memory just before the
+BASEOP structure, with a flag bit in the op to say whether it's present.
+Initially during compile every OP would carry its line number. Then add a late
+pass to the optimiser (potentially combined with L</repack the optree>) which
+looks at the two ops on every edge of the graph of the execution path. If
+the line number changes, flags the destination OP with this information.
+Once all paths are traced, replace every op with the flag with a
+nextstate-light op (that just updates C<PL_curcop>), which in turn then passes
+control on to the true op. All ops would then be replaced by variants that
+do not store the line number. (Which, logically, why it would work best in
+conjunction with L</repack the optree>, as that is already copying/reallocating
+all the OPs)
+
+(Although I should note that we're not certain that doing this for the general
+case is worth it)
+
+=head2 optimize tail-calls
+
+Tail-calls present an opportunity for broadly applicable optimization;
+anywhere that C<< return foo(...) >> is called, the outer return can
+be replaced by a goto, and foo will return directly to the outer
+caller, saving (conservatively) 25% of perl's call&return cost, which
+is relatively higher than in C. The scheme language is known to do
+this heavily. B::Concise provides good insight into where this
+optimization is possible, ie anywhere entersub,leavesub op-sequence
+occurs.
+
+ perl -MO=Concise,-exec,a,b,-main -e 'sub a{ 1 }; sub b {a()}; b(2)'
+
+Bottom line on this is probably a new pp_tailcall function which
+combines the code in pp_entersub, pp_leavesub. This should probably
+be done 1st in XS, and using B::Generate to patch the new OP into the
+optrees.
+
+=head2 Add C<0odddd>
+
+It has been proposed that octal constants be specifiable through the syntax
+C<0oddddd>, parallel to the existing construct to specify hex constants
+C<0xddddd>
+
+=head2 Revisit the regex super-linear cache code
+
+Perl executes regexes using the traditional backtracking algorithm, which
+makes it possible to implement a variety of powerful pattern-matching
+features (like embedded code blocks), at the cost of taking exponential time
+to run on some pathological patterns. The exponential-time problem is
+mitigated by the I<super-linear cache>, which detects when we're processing
+such a pathological pattern, and does some additional bookkeeping to avoid
+much of the work. However, that code has bit-rotted a little; some patterns
+don't make as much use of it as they should. The proposal is to analyse
+where the current cache code has problems, and extend it to cover those cases.
+
+See also
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-01/msg00339.html>
+
+=head1 Big projects
+
+Tasks that will get your name mentioned in the description of the "Highlights
+of 5.18.1"
+
+=head2 make ithreads more robust
+
+Generally make ithreads more robust.
+
+This task is incremental - even a little bit of work on it will help, and
+will be greatly appreciated.
+
+One bit would be to determine how to clone directory handles on systems
+without a C<fchdir> function (in sv.c:Perl_dirp_dup).
+
+Fix Perl_sv_dup, et al so that threads can return objects.
+
+=head2 Add class set operations to regexp engine
+
+Apparently these are quite useful. Anyway, Jeffery Friedl wants them.
+
+demerphq has this on his todo list, but right at the bottom.
+
+
+=head1 Tasks for microperl
+
+
+[ Each and every one of these may be obsolete, but they were listed
+ in the old Todo.micro file]
+
+=head2 do away with fork/exec/wait?
+
+(system, popen should be enough?)
+
+=head2 some of the uconfig.sh really needs to be probed (using cc) in buildtime:
+
+(uConfigure? :-) native datatype widths and endianness come to mind
+
Added: vendor/perl/dist/cpan/Archive-Extract/t/src/x.Z
===================================================================
(Binary files differ)
Index: vendor/perl/dist/cpan/Archive-Extract/t/src/x.Z
===================================================================
--- vendor/perl/dist/cpan/Archive-Extract/t/src/x.Z 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/cpan/Archive-Extract/t/src/x.Z 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/cpan/Archive-Extract/t/src/x.Z
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-compress
\ No newline at end of property
Added: vendor/perl/dist/cpan/Archive-Extract/t/src/x.ear
===================================================================
(Binary files differ)
Index: vendor/perl/dist/cpan/Archive-Extract/t/src/x.ear
===================================================================
--- vendor/perl/dist/cpan/Archive-Extract/t/src/x.ear 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/cpan/Archive-Extract/t/src/x.ear 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/cpan/Archive-Extract/t/src/x.ear
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/zip
\ No newline at end of property
Added: vendor/perl/dist/cpan/Archive-Extract/t/src/x.war
===================================================================
(Binary files differ)
Index: vendor/perl/dist/cpan/Archive-Extract/t/src/x.war
===================================================================
--- vendor/perl/dist/cpan/Archive-Extract/t/src/x.war 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/cpan/Archive-Extract/t/src/x.war 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/cpan/Archive-Extract/t/src/x.war
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/zip
\ No newline at end of property
Added: vendor/perl/dist/cpan/Archive-Extract/t/src/y.ear
===================================================================
(Binary files differ)
Index: vendor/perl/dist/cpan/Archive-Extract/t/src/y.ear
===================================================================
--- vendor/perl/dist/cpan/Archive-Extract/t/src/y.ear 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/cpan/Archive-Extract/t/src/y.ear 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/cpan/Archive-Extract/t/src/y.ear
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/zip
\ No newline at end of property
Added: vendor/perl/dist/cpan/Archive-Extract/t/src/y.war
===================================================================
(Binary files differ)
Index: vendor/perl/dist/cpan/Archive-Extract/t/src/y.war
===================================================================
--- vendor/perl/dist/cpan/Archive-Extract/t/src/y.war 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/cpan/Archive-Extract/t/src/y.war 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/cpan/Archive-Extract/t/src/y.war
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/zip
\ No newline at end of property
Added: vendor/perl/dist/cpan/B-Lint/lib/B/Lint/Debug.pm
===================================================================
--- vendor/perl/dist/cpan/B-Lint/lib/B/Lint/Debug.pm (rev 0)
+++ vendor/perl/dist/cpan/B-Lint/lib/B/Lint/Debug.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,73 @@
+package B::Lint::Debug;
+use if $] > 5.017, 'deprecate';
+
+our $VERSION = '1.17';
+
+=head1 NAME
+
+B::Lint::Debug - Adds debugging stringification to B::
+
+=head1 DESCRIPTION
+
+This module injects stringification to a B::OP*/B::SPECIAL. This
+should not be loaded unless you're debugging.
+
+=cut
+
+package # hide from PAUSE
+ B::SPECIAL;
+use overload '""' => sub {
+ my $self = shift @_;
+ "SPECIAL($$self)";
+};
+
+package # hide from PAUSE
+ B::OP;
+use overload '""' => sub {
+ my $self = shift @_;
+ my $class = ref $self;
+ $class =~ s/\AB:://xms;
+ my $name = $self->name;
+ "$class($name)";
+};
+
+package # hide from PAUSE
+ B::SVOP;
+use overload '""' => sub {
+ my $self = shift @_;
+ my $class = ref $self;
+ $class =~ s/\AB:://xms;
+ my $name = $self->name;
+ "$class($name," . $self->sv . "," . $self->gv . ")";
+};
+
+package # hide from PAUSE
+ B::SPECIAL;
+sub DESTROY { }
+our $AUTOLOAD;
+
+sub AUTOLOAD {
+ my $cx = 0;
+ print "AUTOLOAD $AUTOLOAD\n";
+
+ package # hide from PAUSE
+ DB;
+ while ( my @stuff = caller $cx ) {
+
+ print "$cx: [@DB::args] [@stuff]\n";
+ if ( ref $DB::args[0] ) {
+ if ( $DB::args[0]->can('padix') ) {
+ print " PADIX: " . $DB::args[0]->padix . "\n";
+ }
+ if ( $DB::args[0]->can('targ') ) {
+ print " TARG: " . $DB::args[0]->targ . "\n";
+ for ( B::Lint::cv()->PADLIST->ARRAY ) {
+ print +( $_->ARRAY )[ $DB::args[0]->targ ] . "\n";
+ }
+ }
+ }
+ ++$cx;
+ }
+}
+
+1;
Added: vendor/perl/dist/cpan/B-Lint/lib/B/Lint.pm
===================================================================
--- vendor/perl/dist/cpan/B-Lint/lib/B/Lint.pm (rev 0)
+++ vendor/perl/dist/cpan/B-Lint/lib/B/Lint.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,793 @@
+package B::Lint;
+use if $] > 5.017, 'deprecate';
+
+our $VERSION = '1.17'; ## no critic
+
+=head1 NAME
+
+B::Lint - Perl lint
+
+=head1 SYNOPSIS
+
+perl -MO=Lint[,OPTIONS] foo.pl
+
+=head1 DESCRIPTION
+
+The B::Lint module is equivalent to an extended version of the B<-w>
+option of B<perl>. It is named after the program F<lint> which carries
+out a similar process for C programs.
+
+=head1 OPTIONS AND LINT CHECKS
+
+Option words are separated by commas (not whitespace) and follow the
+usual conventions of compiler backend options. Following any options
+(indicated by a leading B<->) come lint check arguments. Each such
+argument (apart from the special B<all> and B<none> options) is a
+word representing one possible lint check (turning on that check) or
+is B<no-foo> (turning off that check). Before processing the check
+arguments, a standard list of checks is turned on. Later options
+override earlier ones. Available options are:
+
+=over 8
+
+=item B<magic-diamond>
+
+Produces a warning whenever the magic C<E<lt>E<gt>> readline is
+used. Internally it uses perl's two-argument open which itself treats
+filenames with special characters specially. This could allow
+interestingly named files to have unexpected effects when reading.
+
+ % touch 'rm *|'
+ % perl -pe 1
+
+The above creates a file named C<rm *|>. When perl opens it with
+C<E<lt>E<gt>> it actually executes the shell program C<rm *>. This
+makes C<E<lt>E<gt>> dangerous to use carelessly.
+
+=item B<context>
+
+Produces a warning whenever an array is used in an implicit scalar
+context. For example, both of the lines
+
+ $foo = length(@bar);
+ $foo = @bar;
+
+will elicit a warning. Using an explicit B<scalar()> silences the
+warning. For example,
+
+ $foo = scalar(@bar);
+
+=item B<implicit-read> and B<implicit-write>
+
+These options produce a warning whenever an operation implicitly
+reads or (respectively) writes to one of Perl's special variables.
+For example, B<implicit-read> will warn about these:
+
+ /foo/;
+
+and B<implicit-write> will warn about these:
+
+ s/foo/bar/;
+
+Both B<implicit-read> and B<implicit-write> warn about this:
+
+ for (@a) { ... }
+
+=item B<bare-subs>
+
+This option warns whenever a bareword is implicitly quoted, but is also
+the name of a subroutine in the current package. Typical mistakes that it will
+trap are:
+
+ use constant foo => 'bar';
+ @a = ( foo => 1 );
+ $b{foo} = 2;
+
+Neither of these will do what a naive user would expect.
+
+=item B<dollar-underscore>
+
+This option warns whenever C<$_> is used either explicitly anywhere or
+as the implicit argument of a B<print> statement.
+
+=item B<private-names>
+
+This option warns on each use of any variable, subroutine or
+method name that lives in a non-current package but begins with
+an underscore ("_"). Warnings aren't issued for the special case
+of the single character name "_" by itself (e.g. C<$_> and C<@_>).
+
+=item B<undefined-subs>
+
+This option warns whenever an undefined subroutine is invoked.
+This option will only catch explicitly invoked subroutines such
+as C<foo()> and not indirect invocations such as C<&$subref()>
+or C<$obj-E<gt>meth()>. Note that some programs or modules delay
+definition of subs until runtime by means of the AUTOLOAD
+mechanism.
+
+=item B<regexp-variables>
+
+This option warns whenever one of the regexp variables C<$`>, C<$&> or C<$'>
+is used. Any occurrence of any of these variables in your
+program can slow your whole program down. See L<perlre> for
+details.
+
+=item B<all>
+
+Turn all warnings on.
+
+=item B<none>
+
+Turn all warnings off.
+
+=back
+
+=head1 NON LINT-CHECK OPTIONS
+
+=over 8
+
+=item B<-u Package>
+
+Normally, Lint only checks the main code of the program together
+with all subs defined in package main. The B<-u> option lets you
+include other package names whose subs are then checked by Lint.
+
+=back
+
+=head1 EXTENDING LINT
+
+Lint can be extended by with plugins. Lint uses L<Module::Pluggable>
+to find available plugins. Plugins are expected but not required to
+inform Lint of which checks they are adding.
+
+The C<< B::Lint->register_plugin( MyPlugin => \@new_checks ) >> method
+adds the list of C<@new_checks> to the list of valid checks. If your
+module wasn't loaded by L<Module::Pluggable> then your class name is
+added to the list of plugins.
+
+You must create a C<match( \%checks )> method in your plugin class or one
+of its parents. It will be called on every op as a regular method call
+with a hash ref of checks as its parameter.
+
+The class methods C<< B::Lint->file >> and C<< B::Lint->line >> contain
+the current filename and line number.
+
+ package Sample;
+ use B::Lint;
+ B::Lint->register_plugin( Sample => [ 'good_taste' ] );
+
+ sub match {
+ my ( $op, $checks_href ) = shift @_;
+ if ( $checks_href->{good_taste} ) {
+ ...
+ }
+ }
+
+=head1 TODO
+
+=over
+
+=item while(<FH>) stomps $_
+
+=item strict oo
+
+=item unchecked system calls
+
+=item more tests, validate against older perls
+
+=back
+
+=head1 BUGS
+
+This is only a very preliminary version.
+
+=head1 AUTHOR
+
+Malcolm Beattie, mbeattie at sable.ox.ac.uk.
+
+=head1 ACKNOWLEDGEMENTS
+
+Sebastien Aperghis-Tramoni - bug fixes
+
+=cut
+
+use strict;
+use B qw( walkoptree_slow
+ main_root main_cv walksymtable parents
+ OPpOUR_INTRO
+ OPf_WANT_VOID OPf_WANT_LIST OPf_WANT OPf_STACKED SVf_POK );
+use Carp 'carp';
+
+# The current M::P doesn't know about .pmc files.
+use Module::Pluggable ( require => 1 );
+
+use List::Util 'first';
+## no critic Prototypes
+sub any (&@) { my $test = shift @_; $test->() and return 1 for @_; return 0 }
+
+BEGIN {
+
+ # Import or create some constants from B. B doesn't provide
+ # everything I need so some things like OPpCONST_BARE are defined
+ # here.
+ for my $sym ( qw( begin_av check_av init_av end_av ),
+ [ 'OPpCONST_BARE' => 64 ] )
+ {
+ my $val;
+ ( $sym, $val ) = @$sym if ref $sym;
+
+ if ( any { $sym eq $_ } @B::EXPORT_OK, @B::EXPORT ) {
+ B->import($sym);
+ }
+ else {
+ require constant;
+ constant->import( $sym => $val );
+ }
+ }
+}
+
+my $file = "unknown"; # shadows current filename
+my $line = 0; # shadows current line number
+my $curstash = "main"; # shadows current stash
+my $curcv; # shadows current B::CV for pad lookups
+
+sub file {$file}
+sub line {$line}
+sub curstash {$curstash}
+sub curcv {$curcv}
+
+# Lint checks
+my %check;
+my %implies_ok_context;
+
+map( $implies_ok_context{$_}++,
+ qw(scalar av2arylen aelem aslice helem hslice
+ keys values hslice defined undef delete) );
+
+# Lint checks turned on by default
+my @default_checks
+ = qw(context magic_diamond undefined_subs regexp_variables);
+
+my %valid_check;
+
+# All valid checks
+for my $check (
+ qw(context implicit_read implicit_write dollar_underscore
+ private_names bare_subs undefined_subs regexp_variables
+ magic_diamond )
+ )
+{
+ $valid_check{$check} = __PACKAGE__;
+}
+
+# Debugging options
+my ($debug_op);
+
+my %done_cv; # used to mark which subs have already been linted
+my @extra_packages; # Lint checks mainline code and all subs which are
+ # in main:: or in one of these packages.
+
+sub warning {
+ my $format = ( @_ < 2 ) ? "%s" : shift @_;
+ warn sprintf( "$format at %s line %d\n", @_, $file, $line );
+ return undef; ## no critic undef
+}
+
+# This gimme can't cope with context that's only determined
+# at runtime via dowantarray().
+sub gimme {
+ my $op = shift @_;
+ my $flags = $op->flags;
+ if ( $flags & OPf_WANT ) {
+ return ( ( $flags & OPf_WANT ) == OPf_WANT_LIST ? 1 : 0 );
+ }
+ return undef; ## no critic undef
+}
+
+my @plugins = __PACKAGE__->plugins;
+
+sub inside_grepmap {
+
+ # A boolean function to be used while inside a B::walkoptree_slow
+ # call. If we are in the EXPR part of C<grep EXPR, ...> or C<grep
+ # { EXPR } ...>, this returns true.
+ return any { $_->name =~ m/\A(?:grep|map)/xms } @{ parents() };
+}
+
+sub inside_foreach_modifier {
+
+ # TODO: use any()
+
+ # A boolean function to be used while inside a B::walkoptree_slow
+ # call. If we are in the EXPR part of C<EXPR foreach ...> this
+ # returns true.
+ for my $ancestor ( @{ parents() } ) {
+ next unless $ancestor->name eq 'leaveloop';
+
+ my $first = $ancestor->first;
+ next unless $first->name eq 'enteriter';
+
+ next if $first->redoop->name =~ m/\A(?:next|db|set)state\z/xms;
+
+ return 1;
+ }
+ return 0;
+}
+
+for (
+ [qw[ B::PADOP::gv_harder gv padix]],
+ [qw[ B::SVOP::sv_harder sv targ]],
+ [qw[ B::SVOP::gv_harder gv padix]]
+ )
+{
+
+ # I'm generating some functions here because they're mostly
+ # similar. It's all for compatibility with threaded
+ # perl. Perhaps... this code should inspect $Config{usethreads}
+ # and generate a *specific* function. I'm leaving it generic for
+ # the moment.
+ #
+ # In threaded perl SVs and GVs aren't used directly in the optrees
+ # like they are in non-threaded perls. The ops that would use a SV
+ # or GV keep an index into the subroutine's scratchpad. I'm
+ # currently ignoring $cv->DEPTH and that might be at my peril.
+
+ my ( $subname, $attr, $pad_attr ) = @$_;
+ my $target = do { ## no critic strict
+ no strict 'refs';
+ \*$subname;
+ };
+ *$target = sub {
+ my ($op) = @_;
+
+ my $elt;
+ if ( not $op->isa('B::PADOP') ) {
+ $elt = $op->$attr;
+ }
+ return $elt if eval { $elt->isa('B::SV') };
+
+ my $ix = $op->$pad_attr;
+ my @entire_pad = $curcv->PADLIST->ARRAY;
+ my @elts = map +( $_->ARRAY )[$ix], @entire_pad;
+ ($elt) = first {
+ eval { $_->isa('B::SV') } ? $_ : ();
+ }
+ @elts[ 0, reverse 1 .. $#elts ];
+ return $elt;
+ };
+}
+
+sub B::OP::lint {
+ my ($op) = @_;
+
+ # This is a fallback ->lint for all the ops where I haven't
+ # defined something more specific. Nothing happens here.
+
+ # Call all registered plugins
+ my $m;
+ $m = $_->can('match'), $op->$m( \%check ) for @plugins;
+ return;
+}
+
+sub B::COP::lint {
+ my ($op) = @_;
+
+ # nextstate ops sit between statements. Whenever I see one I
+ # update the current info on file, line, and stash. This code also
+ # updates it when it sees a dbstate or setstate op. I have no idea
+ # what those are but having seen them mentioned together in other
+ # parts of the perl I think they're kind of equivalent.
+ if ( $op->name =~ m/\A(?:next|db|set)state\z/ ) {
+ $file = $op->file;
+ $line = $op->line;
+ $curstash = $op->stash->NAME;
+ }
+
+ # Call all registered plugins
+ my $m;
+ $m = $_->can('match'), $op->$m( \%check ) for @plugins;
+ return;
+}
+
+sub B::UNOP::lint {
+ my ($op) = @_;
+
+ my $opname = $op->name;
+
+CONTEXT: {
+
+ # Check arrays and hashes in scalar or void context where
+ # scalar() hasn't been used.
+
+ next
+ unless $check{context}
+ and $opname =~ m/\Arv2[ah]v\z/xms
+ and not gimme($op);
+
+ my ( $parent, $gparent ) = @{ parents() }[ 0, 1 ];
+ my $pname = $parent->name;
+
+ next if $implies_ok_context{$pname};
+
+ # Three special cases to deal with: "foreach (@foo)", "delete
+ # $a{$b}", and "exists $a{$b}" null out the parent so we have to
+ # check for a parent of pp_null and a grandparent of
+ # pp_enteriter, pp_delete, pp_exists
+
+ next
+ if $pname eq "null"
+ and $gparent->name =~ m/\A(?:delete|enteriter|exists)\z/xms;
+
+ # our( @bar ); would also trigger this error so I exclude
+ # that.
+ next
+ if $op->private & OPpOUR_INTRO
+ and ( $op->flags & OPf_WANT ) == OPf_WANT_VOID;
+
+ warning 'Implicit scalar context for %s in %s',
+ $opname eq "rv2av" ? "array" : "hash", $parent->desc;
+ }
+
+PRIVATE_NAMES: {
+
+ # Looks for calls to methods with names that begin with _ and
+ # that aren't visible within the current package. Maybe this
+ # should look at @ISA.
+ next
+ unless $check{private_names}
+ and $opname =~ m/\Amethod/xms;
+
+ my $methop = $op->first;
+ next unless $methop->name eq "const";
+
+ my $method = $methop->sv_harder->PV;
+ next
+ unless $method =~ m/\A_/xms
+ and not defined &{"$curstash\::$method"};
+
+ warning q[Illegal reference to private method name '%s'], $method;
+ }
+
+ # Call all registered plugins
+ my $m;
+ $m = $_->can('match'), $op->$m( \%check ) for @plugins;
+ return;
+}
+
+sub B::PMOP::lint {
+ my ($op) = @_;
+
+IMPLICIT_READ: {
+
+ # Look for /.../ that doesn't use =~ to bind to something.
+ next
+ unless $check{implicit_read}
+ and $op->name eq "match"
+ and not( $op->flags & OPf_STACKED
+ or inside_grepmap() );
+ warning 'Implicit match on $_';
+ }
+
+IMPLICIT_WRITE: {
+
+ # Look for s/.../.../ that doesn't use =~ to bind to
+ # something.
+ next
+ unless $check{implicit_write}
+ and $op->name eq "subst"
+ and not $op->flags & OPf_STACKED;
+ warning 'Implicit substitution on $_';
+ }
+
+ # Call all registered plugins
+ my $m;
+ $m = $_->can('match'), $op->$m( \%check ) for @plugins;
+ return;
+}
+
+sub B::LOOP::lint {
+ my ($op) = @_;
+
+IMPLICIT_FOO: {
+
+ # Look for C<for ( ... )>.
+ next
+ unless ( $check{implicit_read} or $check{implicit_write} )
+ and $op->name eq "enteriter";
+
+ my $last = $op->last;
+ next
+ unless $last->name eq "gv"
+ and $last->gv_harder->NAME eq "_"
+ and $op->redoop->name =~ m/\A(?:next|db|set)state\z/xms;
+
+ warning 'Implicit use of $_ in foreach';
+ }
+
+ # Call all registered plugins
+ my $m;
+ $m = $_->can('match'), $op->$m( \%check ) for @plugins;
+ return;
+}
+
+# In threaded vs non-threaded perls you'll find that threaded perls
+# use PADOP in place of SVOPs so they can do lookups into the
+# scratchpad to find things. I suppose this is so a optree can be
+# shared between threads and all symbol table muckery will just get
+# written to a scratchpad.
+*B::PADOP::lint = *B::PADOP::lint = \&B::SVOP::lint;
+
+sub B::SVOP::lint {
+ my ($op) = @_;
+
+MAGIC_DIAMOND: {
+ next
+ unless $check{magic_diamond}
+ and parents()->[0]->name eq 'readline'
+ and $op->gv_harder->NAME eq 'ARGV';
+
+ warning 'Use of <>';
+ }
+
+BARE_SUBS: {
+ next
+ unless $check{bare_subs}
+ and $op->name eq 'const'
+ and $op->private & OPpCONST_BARE;
+
+ my $sv = $op->sv_harder;
+ next unless $sv->FLAGS & SVf_POK;
+
+ my $sub = $sv->PV;
+ my $subname = "$curstash\::$sub";
+
+ # I want to skip over things that were declared with the
+ # constant pragma. Well... sometimes. Hmm. I want to ignore
+ # C<<use constant FOO => ...>> but warn on C<<FOO => ...>>
+ # later. The former is typical declaration syntax and the
+ # latter would be an error.
+ #
+ # Skipping over both could be handled by looking if
+ # $constant::declared{$subname} is true.
+
+ # Check that it's a function.
+ next
+ unless exists &{"$curstash\::$sub"};
+
+ warning q[Bare sub name '%s' interpreted as string], $sub;
+ }
+
+PRIVATE_NAMES: {
+ next unless $check{private_names};
+
+ my $opname = $op->name;
+ if ( $opname =~ m/\Agv(?:sv)?\z/xms ) {
+
+ # Looks for uses of variables and stuff that are named
+ # private and we're not in the same package.
+ my $gv = $op->gv_harder;
+ my $name = $gv->NAME;
+ next
+ unless $name =~ m/\A_./xms
+ and $gv->STASH->NAME ne $curstash;
+
+ warning q[Illegal reference to private name '%s'], $name;
+ }
+ elsif ( $opname eq "method_named" ) {
+ my $method = $op->sv_harder->PV;
+ next unless $method =~ m/\A_./xms;
+
+ warning q[Illegal reference to private method name '%s'], $method;
+ }
+ }
+
+DOLLAR_UNDERSCORE: {
+
+ # Warn on uses of $_ with a few exceptions. I'm not warning on
+ # $_ inside grep, map, or statement modifier foreach because
+ # they localize $_ and it'd be impossible to use these
+ # features without getting warnings.
+
+ next
+ unless $check{dollar_underscore}
+ and $op->name eq "gvsv"
+ and $op->gv_harder->NAME eq "_"
+ and not( inside_grepmap
+ or inside_foreach_modifier );
+
+ warning 'Use of $_';
+ }
+
+REGEXP_VARIABLES: {
+
+ # Look for any uses of $`, $&, or $'.
+ next
+ unless $check{regexp_variables}
+ and $op->name eq "gvsv";
+
+ my $name = $op->gv_harder->NAME;
+ next unless $name =~ m/\A[\&\'\`]\z/xms;
+
+ warning 'Use of regexp variable $%s', $name;
+ }
+
+UNDEFINED_SUBS: {
+
+ # Look for calls to functions that either don't exist or don't
+ # have a definition.
+ next
+ unless $check{undefined_subs}
+ and $op->name eq "gv"
+ and $op->next->name eq "entersub";
+
+ my $gv = $op->gv_harder;
+ my $subname = $gv->STASH->NAME . "::" . $gv->NAME;
+
+ no strict 'refs'; ## no critic strict
+ if ( not exists &$subname ) {
+ $subname =~ s/\Amain:://;
+ warning q[Nonexistent subroutine '%s' called], $subname;
+ }
+ elsif ( not defined &$subname ) {
+ $subname =~ s/\A\&?main:://;
+ warning q[Undefined subroutine '%s' called], $subname;
+ }
+ }
+
+ # Call all registered plugins
+ my $m;
+ $m = $_->can('match'), $op->$m( \%check ) for @plugins;
+ return;
+}
+
+sub B::GV::lintcv {
+
+ # Example: B::svref_2object( \ *A::Glob )->lintcv
+
+ my $gv = shift @_;
+ my $cv = $gv->CV;
+ return unless $cv->can('lintcv');
+ $cv->lintcv;
+ return;
+}
+
+sub B::CV::lintcv {
+
+ # Example: B::svref_2object( \ &foo )->lintcv
+
+ # Write to the *global* $
+ $curcv = shift @_;
+
+ #warn sprintf("lintcv: %s::%s (done=%d)\n",
+ # $gv->STASH->NAME, $gv->NAME, $done_cv{$$curcv});#debug
+ return unless ref($curcv) and $$curcv and not $done_cv{$$curcv}++;
+ my $root = $curcv->ROOT;
+
+ #warn " root = $root (0x$$root)\n";#debug
+ walkoptree_slow( $root, "lint" ) if $$root;
+ return;
+}
+
+sub do_lint {
+ my %search_pack;
+
+ # Copy to the global $curcv for use in pad lookups.
+ $curcv = main_cv;
+ walkoptree_slow( main_root, "lint" ) if ${ main_root() };
+
+ # Do all the miscellaneous non-sub blocks.
+ for my $av ( begin_av, init_av, check_av, end_av ) {
+ next unless eval { $av->isa('B::AV') };
+ for my $cv ( $av->ARRAY ) {
+ next unless ref($cv) and $cv->FILE eq $0;
+ $cv->lintcv;
+ }
+ }
+
+ walksymtable(
+ \%main::,
+ sub {
+ if ( $_[0]->FILE eq $0 ) { $_[0]->lintcv }
+ },
+ sub {1}
+ );
+ return;
+}
+
+sub compile {
+ my @options = @_;
+
+ # Turn on default lint checks
+ for my $opt (@default_checks) {
+ $check{$opt} = 1;
+ }
+
+OPTION:
+ while ( my $option = shift @options ) {
+ my ( $opt, $arg );
+ unless ( ( $opt, $arg ) = $option =~ m/\A-(.)(.*)/xms ) {
+ unshift @options, $option;
+ last OPTION;
+ }
+
+ if ( $opt eq "-" && $arg eq "-" ) {
+ shift @options;
+ last OPTION;
+ }
+ elsif ( $opt eq "D" ) {
+ $arg ||= shift @options;
+ foreach my $arg ( split //, $arg ) {
+ if ( $arg eq "o" ) {
+ B->debug(1);
+ }
+ elsif ( $arg eq "O" ) {
+ $debug_op = 1;
+ }
+ }
+ }
+ elsif ( $opt eq "u" ) {
+ $arg ||= shift @options;
+ push @extra_packages, $arg;
+ }
+ }
+
+ foreach my $opt ( @default_checks, @options ) {
+ $opt =~ tr/-/_/;
+ if ( $opt eq "all" ) {
+ %check = %valid_check;
+ }
+ elsif ( $opt eq "none" ) {
+ %check = ();
+ }
+ else {
+ if ( $opt =~ s/\Ano_//xms ) {
+ $check{$opt} = 0;
+ }
+ else {
+ $check{$opt} = 1;
+ }
+ carp "No such check: $opt"
+ unless defined $valid_check{$opt};
+ }
+ }
+
+ # Remaining arguments are things to check. So why aren't I
+ # capturing them or something? I don't know.
+
+ return \&do_lint;
+}
+
+sub register_plugin {
+ my ( undef, $plugin, $new_checks ) = @_;
+
+ # Allow the user to be lazy and not give us a name.
+ $plugin = caller unless defined $plugin;
+
+ # Register the plugin's named checks, if any.
+ for my $check ( eval {@$new_checks} ) {
+ if ( not defined $check ) {
+ carp 'Undefined value in checks.';
+ next;
+ }
+ if ( exists $valid_check{$check} ) {
+ carp
+ "$check is already registered as a $valid_check{$check} feature.";
+ next;
+ }
+
+ $valid_check{$check} = $plugin;
+ }
+
+ # Register a non-Module::Pluggable loaded module. @plugins already
+ # contains whatever M::P found on disk. The user might load a
+ # plugin manually from some arbitrary namespace and ask for it to
+ # be registered.
+ if ( not any { $_ eq $plugin } @plugins ) {
+ push @plugins, $plugin;
+ }
+
+ return;
+}
+
+1;
Added: vendor/perl/dist/cpan/B-Lint/t/lint.t
===================================================================
--- vendor/perl/dist/cpan/B-Lint/t/lint.t (rev 0)
+++ vendor/perl/dist/cpan/B-Lint/t/lint.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,146 @@
+#!./perl -w
+
+BEGIN {
+ unshift @INC, 't';
+ push @INC, "../../t";
+ require Config;
+ if ( ( $Config::Config{'extensions'} !~ /\bB\b/ ) ) {
+ print "1..0 # Skip -- Perl configured without B module\n";
+ exit 0;
+ }
+ require 'test.pl';
+}
+
+use strict;
+use warnings;
+
+plan tests => 29;
+
+# Runs a separate perl interpreter with the appropriate lint options
+# turned on
+sub runlint ($$$;$) {
+ my ( $opts, $prog, $result, $testname ) = @_;
+ my $res = runperl(
+ switches => ["-MO=Lint,$opts"],
+ prog => $prog,
+ stderr => 1,
+ );
+ $res =~ s/-e syntax OK\n$//;
+ local $::Level = $::Level + 1;
+ is( $res, $result, $testname || $opts );
+}
+
+runlint 'magic-diamond', 'while(<>){}', <<'RESULT';
+Use of <> at -e line 1
+RESULT
+
+runlint 'magic-diamond', 'while(<ARGV>){}', <<'RESULT';
+Use of <> at -e line 1
+RESULT
+
+runlint 'magic-diamond', 'while(<FOO>){}', <<'RESULT';
+RESULT
+
+runlint 'context', '$foo = @bar', <<'RESULT';
+Implicit scalar context for array in scalar assignment at -e line 1
+RESULT
+
+runlint 'context', '$foo = length @bar', <<'RESULT';
+Implicit scalar context for array in length at -e line 1
+RESULT
+
+runlint 'context', 'our @bar', '';
+
+runlint 'context', 'exists $BAR{BAZ}', '';
+
+runlint 'implicit-read', '/foo/', <<'RESULT';
+Implicit match on $_ at -e line 1
+RESULT
+
+runlint 'implicit-read', 'grep /foo/, ()', '';
+
+runlint 'implicit-read', 'grep { /foo/ } ()', '';
+
+runlint 'implicit-write', 's/foo/bar/', <<'RESULT';
+Implicit substitution on $_ at -e line 1
+RESULT
+
+runlint 'implicit-read', 'for ( @ARGV ) { 1 }',
+ <<'RESULT', 'implicit-read in foreach';
+Implicit use of $_ in foreach at -e line 1
+RESULT
+
+runlint 'implicit-read', '1 for @ARGV', '', 'implicit-read in foreach';
+
+runlint 'dollar-underscore', '$_ = 1', <<'RESULT';
+Use of $_ at -e line 1
+RESULT
+
+runlint 'dollar-underscore', 'sub foo {}; foo( $_ ) for @A', '';
+runlint 'dollar-underscore', 'sub foo {}; map { foo( $_ ) } @A', '';
+runlint 'dollar-underscore', 'sub foo {}; grep { foo( $_ ) } @A', '';
+
+runlint 'dollar-underscore', 'print',
+ <<'RESULT', 'dollar-underscore in print';
+Use of $_ at -e line 1
+RESULT
+
+runlint 'private-names', 'sub A::_f{};A::_f()', <<'RESULT';
+Illegal reference to private name '_f' at -e line 1
+RESULT
+
+runlint 'private-names', '$A::_x', <<'RESULT';
+Illegal reference to private name '_x' at -e line 1
+RESULT
+
+runlint 'private-names', 'sub A::_f{};A->_f()', <<'RESULT',
+Illegal reference to private method name '_f' at -e line 1
+RESULT
+ 'private-names (method)';
+
+runlint 'undefined-subs', 'foo()', <<'RESULT';
+Nonexistent subroutine 'foo' called at -e line 1
+RESULT
+
+runlint 'undefined-subs', 'foo();sub foo;', <<'RESULT';
+Undefined subroutine 'foo' called at -e line 1
+RESULT
+
+runlint 'regexp-variables', 'print $&', <<'RESULT';
+Use of regexp variable $& at -e line 1
+RESULT
+
+runlint 'regexp-variables', 's/./$&/', <<'RESULT';
+Use of regexp variable $& at -e line 1
+RESULT
+
+runlint 'bare-subs', 'sub bare(){1};$x=bare', '';
+
+runlint 'bare-subs', 'sub bare(){1}; $x=[bare=>0]; $x=$y{bare}', <<'RESULT';
+Bare sub name 'bare' interpreted as string at -e line 1
+Bare sub name 'bare' interpreted as string at -e line 1
+RESULT
+
+{
+
+ # Check for backwards-compatible plugin support. This was where
+ # preloaded mdoules would register themselves with B::Lint.
+ my $res = runperl(
+ switches => ["-MB::Lint"],
+ prog =>
+ 'BEGIN{B::Lint->register_plugin(X=>[q[x]])};use O(qw[Lint x]);sub X::match{warn qq[X ok.\n]};dummy()',
+ stderr => 1,
+ );
+ like( $res, qr/X ok\./, 'Lint legacy plugin' );
+}
+
+{
+
+ # Check for Module::Plugin support
+ my $res = runperl(
+ switches => [ '-It/pluglib', '-MO=Lint,none' ],
+ prog => 1,
+ stderr => 1,
+ );
+ like( $res, qr/Module::Pluggable ok\./, 'Lint uses Module::Pluggable' );
+}
Added: vendor/perl/dist/cpan/B-Lint/t/pluglib/B/Lint/Plugin/Test.pm
===================================================================
--- vendor/perl/dist/cpan/B-Lint/t/pluglib/B/Lint/Plugin/Test.pm (rev 0)
+++ vendor/perl/dist/cpan/B-Lint/t/pluglib/B/Lint/Plugin/Test.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+package B::Lint::Plugin::Test;
+use strict;
+use warnings;
+
+# This package will be loaded automatically by Module::Plugin when
+# B::Lint loads.
+warn 'got here!';
+
+sub match {
+ my $op = shift @_;
+
+ # Prints to STDERR which will be picked up by the test running in
+ # lint.t
+ warn "Module::Pluggable ok.\n";
+
+ # Ignore this method once it happens once.
+ *match = sub { };
+}
+
+1;
Added: vendor/perl/dist/cpan/CGI/t/delete.t
===================================================================
--- vendor/perl/dist/cpan/CGI/t/delete.t (rev 0)
+++ vendor/perl/dist/cpan/CGI/t/delete.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,57 @@
+#!/usr/local/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use CGI ();
+use Config;
+
+my $loaded = 1;
+
+$| = 1;
+
+######################### End of black magic.
+
+# Set up a CGI environment
+$ENV{REQUEST_METHOD} = 'DELETE';
+$ENV{QUERY_STRING} = 'game=chess&game=checkers&weather=dull';
+$ENV{PATH_INFO} = '/somewhere/else';
+$ENV{PATH_TRANSLATED} = '/usr/local/somewhere/else';
+$ENV{SCRIPT_NAME} = '/cgi-bin/foo.cgi';
+$ENV{SERVER_PROTOCOL} = 'HTTP/1.0';
+$ENV{SERVER_PORT} = 8080;
+$ENV{SERVER_NAME} = 'the.good.ship.lollypop.com';
+$ENV{REQUEST_URI} = "$ENV{SCRIPT_NAME}$ENV{PATH_INFO}?$ENV{QUERY_STRING}";
+$ENV{HTTP_LOVE} = 'true';
+
+my $q = new CGI;
+ok $q,"CGI::new()";
+is $q->request_method => 'DELETE',"CGI::request_method()";
+is $q->query_string => 'game=chess;game=checkers;weather=dull',"CGI::query_string()";
+is $q->param(), 2,"CGI::param()";
+is join(' ',sort $q->param()), 'game weather',"CGI::param()";
+is $q->param('game'), 'chess',"CGI::param()";
+is $q->param('weather'), 'dull',"CGI::param()";
+is join(' ',$q->param('game')), 'chess checkers',"CGI::param()";
+ok $q->param(-name=>'foo',-value=>'bar'),'CGI::param() put';
+is $q->param(-name=>'foo'), 'bar','CGI::param() get';
+is $q->query_string, 'game=chess;game=checkers;weather=dull;foo=bar',"CGI::query_string() redux";
+is $q->http('love'), 'true',"CGI::http()";
+is $q->script_name, '/cgi-bin/foo.cgi',"CGI::script_name()";
+is $q->url, 'http://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgi',"CGI::url()";
+is $q->self_url,
+ 'http://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgi/somewhere/else?game=chess;game=checkers;weather=dull;foo=bar',
+ "CGI::url()";
+is $q->url(-absolute=>1), '/cgi-bin/foo.cgi','CGI::url(-absolute=>1)';
+is $q->url(-relative=>1), 'foo.cgi','CGI::url(-relative=>1)';
+is $q->url(-relative=>1,-path=>1), 'foo.cgi/somewhere/else','CGI::url(-relative=>1,-path=>1)';
+is $q->url(-relative=>1,-path=>1,-query=>1),
+ 'foo.cgi/somewhere/else?game=chess;game=checkers;weather=dull;foo=bar',
+ 'CGI::url(-relative=>1,-path=>1,-query=>1)';
+$q->delete('foo');
+ok !$q->param('foo'),'CGI::delete()';
+
+
+done_testing();
Added: vendor/perl/dist/cpan/CGI/t/multipart_init.t
===================================================================
--- vendor/perl/dist/cpan/CGI/t/multipart_init.t (rev 0)
+++ vendor/perl/dist/cpan/CGI/t/multipart_init.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+use Test::More 'no_plan';
+
+use CGI;
+
+my $q = CGI->new;
+
+my $sv = $q->multipart_init;
+like( $sv, qr|Content-Type: multipart/x-mixed-replace;boundary="------- =|, 'multipart_init(), basic');
+
+like( $sv, qr/$CGI::CRLF$/, 'multipart_init(), ends in CRLF' );
+
+$sv = $q->multipart_init( 'this_is_the_boundary' );
+like( $sv, qr/boundary="this_is_the_boundary"/, 'multipart_init("simple_boundary")' );
+$sv = $q->multipart_init( -boundary => 'this_is_another_boundary' );
+like($sv,
+ qr/boundary="this_is_another_boundary"/, "multipart_init( -boundary => 'this_is_another_boundary')");
+
+{
+ my $sv = $q->multipart_init;
+ my $sv2 = $q->multipart_init;
+ isnt($sv,$sv2,"due to random boundaries, multiple calls produce different results");
+}
Added: vendor/perl/dist/cpan/CGI/t/rt-52469.t
===================================================================
--- vendor/perl/dist/cpan/CGI/t/rt-52469.t (rev 0)
+++ vendor/perl/dist/cpan/CGI/t/rt-52469.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+use strict;
+use warnings;
+
+use Test::More tests => 1; # last test to print
+
+use CGI;
+
+$ENV{REQUEST_METHOD} = 'PUT';
+
+my $cgi = CGI->new;
+
+pass 'new() returned';
+
+
Added: vendor/perl/dist/cpan/CGI/t/tmpdir.t
===================================================================
--- vendor/perl/dist/cpan/CGI/t/tmpdir.t (rev 0)
+++ vendor/perl/dist/cpan/CGI/t/tmpdir.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,43 @@
+#!perl
+use Test::More;
+use strict;
+
+if( $> == 0 ) {
+ plan skip_all => "Root can write to 'unwritable files', so many of these tests don't make sense for root.";
+}
+
+my ($testdir, $testdir2);
+
+BEGIN {
+ $testdir = "CGItest";
+ $testdir2 = "CGItest2";
+ for ($testdir, $testdir2) {
+ ( -d ) || mkdir $_;
+ ( ! -w ) || chmod 0700, $_;
+ }
+ $CGITempFile::TMPDIRECTORY = $testdir;
+ $ENV{TMPDIR} = $testdir2;
+}
+
+use CGI;
+is($CGITempFile::TMPDIRECTORY, $testdir, "can pre-set \$CGITempFile::TMPDIRECTORY");
+CGITempFile->new;
+is($CGITempFile::TMPDIRECTORY, $testdir, "\$CGITempFile::TMPDIRECTORY unchanged");
+
+ok(chmod 0500, $testdir, "revoking write access to $testdir");
+ok(! -w $testdir, "write access to $testdir revoked");
+CGITempFile->new;
+is($CGITempFile::TMPDIRECTORY, $testdir2,
+ "unwritable \$CGITempFile::TMPDIRECTORY overridden");
+
+ok(chmod 0500, $testdir2, "revoking write access to $testdir2");
+ok(! -w $testdir, "write access to $testdir revoked");
+CGITempFile->new;
+isnt($CGITempFile::TMPDIRECTORY, $testdir2,
+ "unwritable \$ENV{TMPDIR} overridden");
+isnt($CGITempFile::TMPDIRECTORY, $testdir,
+ "unwritable \$ENV{TMPDIR} not overridden with an unwritable \$CGITempFile::TMPDIRECTORY");
+
+done_testing();
+
+END { for ($testdir, $testdir2) { chmod 0700, $_; rmdir; } }
Added: vendor/perl/dist/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm
===================================================================
--- vendor/perl/dist/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm (rev 0)
+++ vendor/perl/dist/cpan/CPAN/lib/CPAN/Exception/yaml_process_error.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*-
+# vim: ts=4 sts=4 sw=4:
+package CPAN::Exception::yaml_process_error;
+use strict;
+use overload '""' => "as_string";
+
+use vars qw(
+ $VERSION
+);
+$VERSION = "5.5";
+
+
+sub new {
+ my($class,$module,$file,$during,$error) = @_;
+ # my $at = Carp::longmess(""); # XXX find something more beautiful
+ bless { module => $module,
+ file => $file,
+ during => $during,
+ error => $error,
+ # at => $at,
+ }, $class;
+}
+
+sub as_string {
+ my($self) = shift;
+ if ($self->{during}) {
+ if ($self->{file}) {
+ if ($self->{module}) {
+ if ($self->{error}) {
+ return "Alert: While trying to '$self->{during}' YAML file\n".
+ " '$self->{file}'\n".
+ "with '$self->{module}' the following error was encountered:\n".
+ " $self->{error}\n";
+ } else {
+ return "Alert: While trying to '$self->{during}' YAML file\n".
+ " '$self->{file}'\n".
+ "with '$self->{module}' some unknown error was encountered\n";
+ }
+ } else {
+ return "Alert: While trying to '$self->{during}' YAML file\n".
+ " '$self->{file}'\n".
+ "some unknown error was encountered\n";
+ }
+ } else {
+ return "Alert: While trying to '$self->{during}' some YAML file\n".
+ "some unknown error was encountered\n";
+ }
+ } else {
+ return "Alert: unknown error encountered\n";
+ }
+}
+
+1;
Added: vendor/perl/dist/cpan/CPAN-Meta/t/data/gpl-1_4.yml
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta/t/data/gpl-1_4.yml (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta/t/data/gpl-1_4.yml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+---
+abstract: 'Build and install Perl modules'
+author:
+ - 'Ken Williams <kwilliams at cpan.org>'
+ - "Development questions, bug reports, and patches should be sent to the\nModule-Build mailing list at <module-build at perl.org>."
+build_requires:
+ File::Temp: 0.15
+ Test::Harness: 3.16
+ Test::More: 0.49
+generated_by: 'Module::Build version 0.3608'
+license: gpl
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
+name: Module-Build
+resources:
+ MailingList: mailto:module-build at perl.org
+ license: http://dev.perl.org/licenses/
+ repository: http://github.com/dagolden/module-build/
+version: 3
Added: vendor/perl/dist/cpan/CPAN-Meta/t/data/unicode.yml
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta/t/data/unicode.yml (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta/t/data/unicode.yml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,132 @@
+---
+abstract: 'Build and install Perl modules'
+author:
+ - 'Ken Williåms <kwilliams at cpan.org>'
+ - "Development questions, bug reports, and patches should be sent to the\nModule-Build mailing list at <module-build at perl.org>."
+build_requires:
+ File::Temp: 0.15
+ Test::Harness: 3.16
+ Test::More: 0.49
+generated_by: 'Module::Build version 0.3608'
+license: perl
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
+name: Module-Build
+provides:
+ Module::Build:
+ file: lib/Module/Build.pm
+ version: 0.36_08
+ Module::Build::Base:
+ file: lib/Module/Build/Base.pm
+ version: 0.36_08
+ Module::Build::Compat:
+ file: lib/Module/Build/Compat.pm
+ version: 0.36_08
+ Module::Build::Config:
+ file: lib/Module/Build/Config.pm
+ version: 0.36_08
+ Module::Build::Cookbook:
+ file: lib/Module/Build/Cookbook.pm
+ version: 0.36_08
+ Module::Build::Dumper:
+ file: lib/Module/Build/Dumper.pm
+ version: 0.36_08
+ Module::Build::ModuleInfo:
+ file: lib/Module/Build/ModuleInfo.pm
+ version: 0.36_08
+ Module::Build::Notes:
+ file: lib/Module/Build/Notes.pm
+ version: 0.36_08
+ Module::Build::PPMMaker:
+ file: lib/Module/Build/PPMMaker.pm
+ version: 0.36_08
+ Module::Build::Platform::Amiga:
+ file: lib/Module/Build/Platform/Amiga.pm
+ version: 0.36_08
+ Module::Build::Platform::Default:
+ file: lib/Module/Build/Platform/Default.pm
+ version: 0.36_08
+ Module::Build::Platform::EBCDIC:
+ file: lib/Module/Build/Platform/EBCDIC.pm
+ version: 0.36_08
+ Module::Build::Platform::MPEiX:
+ file: lib/Module/Build/Platform/MPEiX.pm
+ version: 0.36_08
+ Module::Build::Platform::MacOS:
+ file: lib/Module/Build/Platform/MacOS.pm
+ version: 0.36_08
+ Module::Build::Platform::RiscOS:
+ file: lib/Module/Build/Platform/RiscOS.pm
+ version: 0.36_08
+ Module::Build::Platform::Unix:
+ file: lib/Module/Build/Platform/Unix.pm
+ version: 0.36_08
+ Module::Build::Platform::VMS:
+ file: lib/Module/Build/Platform/VMS.pm
+ version: 0.36_08
+ Module::Build::Platform::VOS:
+ file: lib/Module/Build/Platform/VOS.pm
+ version: 0.36_08
+ Module::Build::Platform::Windows:
+ file: lib/Module/Build/Platform/Windows.pm
+ version: 0.36_08
+ Module::Build::Platform::aix:
+ file: lib/Module/Build/Platform/aix.pm
+ version: 0.36_08
+ Module::Build::Platform::cygwin:
+ file: lib/Module/Build/Platform/cygwin.pm
+ version: 0.36_08
+ Module::Build::Platform::darwin:
+ file: lib/Module/Build/Platform/darwin.pm
+ version: 0.36_08
+ Module::Build::Platform::os2:
+ file: lib/Module/Build/Platform/os2.pm
+ version: 0.36_08
+ Module::Build::PodParser:
+ file: lib/Module/Build/PodParser.pm
+ version: 0.36_08
+ Module::Build::Version:
+ file: lib/Module/Build/Version.pm
+ version: 0.77
+ Module::Build::YAML:
+ file: lib/Module/Build/YAML.pm
+ version: 1.40
+ inc::latest:
+ file: lib/inc/latest.pm
+ version: 0.36_08
+ inc::latest::private:
+ file: lib/inc/latest/private.pm
+ version: 0.36_08
+recommends:
+ ExtUtils::Install: 0.3
+ ExtUtils::Manifest: 1.54
+ version: 0.74
+requires:
+ Cwd: 0
+ Data::Dumper: 0
+ ExtUtils::CBuilder: 0.27
+ ExtUtils::Install: 0
+ ExtUtils::Manifest: 0
+ ExtUtils::Mkbootstrap: 0
+ ExtUtils::ParseXS: 2.21
+ File::Basename: 0
+ File::Compare: 0
+ File::Copy: 0
+ File::Find: 0
+ File::Path: 0
+ File::Spec: 0.82
+ Getopt::Long: 0
+ IO::File: 0
+ Test::Harness: 0
+ Text::Abbrev: 0
+ Text::ParseWords: 0
+ perl: 5.006001
+resources:
+ MailingList: mailto:module-build at perl.org
+ license: http://dev.perl.org/licenses/
+ repository: http://github.com/dagolden/module-build/
+version: 0.36_08
+x-whatever: this is a custom field
+x_whatelse: so is this
+XWhatNow: and this
Added: vendor/perl/dist/cpan/CPAN-Meta/t/data/version-not-normal.json
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta/t/data/version-not-normal.json (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta/t/data/version-not-normal.json 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
+{
+ "generated_by" : "Module::Build version 0.36",
+ "meta-spec" : {
+ "version" : "2",
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec"
+ },
+ "abstract" : "stuff",
+ "version" : "0.36",
+ "name" : "Module-Build",
+ "dynamic_config" : 1,
+ "author" : [
+ "Ken Williams <kwilliams at cpan.org>",
+ "Module-Build List <module-build at perl.org>"
+ ],
+ "release_status" : "stable",
+ "license" : [
+ "perl_5"
+ ],
+ "description" : "Module::Build is a system for building, testing, and installing Perl modules. It is meant to be an alternative to ExtUtils::MakeMaker... blah blah blah",
+ "prereqs" : {
+ "runtime" : {
+ "requires" : {
+ "File::Copy" : "== 2.21",
+ "IO::File" : "> 1.12",
+ "Data::Dumper" : ">= 1",
+ "File::Spec" : "< 5",
+ "File::Find" : "v0.1",
+ "File::Path" : "1.0.0",
+ "Module::Metadata" : ">= v1.0.2, <= v1.0.10"
+ }
+ },
+ "build" : {
+ "requires" : {
+ "Build::Requires": "1.1",
+ "Test::More" : "0"
+ }
+ },
+ "test" : {
+ "requires" : {
+ "Test::More" : "0.88",
+ "Test::Requires" : "1.2"
+ }
+ }
+ }
+}
Added: vendor/perl/dist/cpan/CPAN-Meta/t/data/version-ranges-1_4.yml
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta/t/data/version-ranges-1_4.yml (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta/t/data/version-ranges-1_4.yml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,25 @@
+---
+abstract: stuff
+author:
+ - 'Ken Williams <kwilliams at cpan.org>'
+ - 'Module-Build List <module-build at perl.org>'
+description: 'Module::Build is a system for building, testing, and installing Perl modules. It is meant to be an alternative to ExtUtils::MakeMaker... blah blah blah'
+dynamic_config: 1
+generated_by: 'Module::Build version 0.36'
+license: perl
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
+name: Module-Build
+build_requires:
+ Build::Requires: 1.1
+ Test::More: 0
+requires:
+ Data::Dumper: '>= 1'
+ File::Copy: '== 2.21'
+ File::Find: '>1, != 1.19'
+ File::Path: 0
+ File::Spec: '< 5'
+ IO::File: '> 1.12'
+ Module::Metadata: '>= v1.0.2, <= v1.0.10'
+version: 0.36
Added: vendor/perl/dist/cpan/CPAN-Meta/t/data/version-ranges-2.json
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta/t/data/version-ranges-2.json (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta/t/data/version-ranges-2.json 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
+{
+ "generated_by" : "Module::Build version 0.36",
+ "meta-spec" : {
+ "version" : "2",
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec"
+ },
+ "abstract" : "stuff",
+ "version" : "0.36",
+ "name" : "Module-Build",
+ "dynamic_config" : 1,
+ "author" : [
+ "Ken Williams <kwilliams at cpan.org>",
+ "Module-Build List <module-build at perl.org>"
+ ],
+ "release_status" : "stable",
+ "license" : [
+ "perl_5"
+ ],
+ "description" : "Module::Build is a system for building, testing, and installing Perl modules. It is meant to be an alternative to ExtUtils::MakeMaker... blah blah blah",
+ "prereqs" : {
+ "runtime" : {
+ "requires" : {
+ "File::Copy" : "== 2.21",
+ "IO::File" : "> 1.12",
+ "Data::Dumper" : ">= 1",
+ "File::Spec" : "< 5",
+ "File::Find" : ">1, != 1.19",
+ "File::Path" : "0",
+ "Module::Metadata" : ">= v1.0.2, <= v1.0.10"
+ }
+ },
+ "build" : {
+ "requires" : {
+ "Build::Requires": "1.1",
+ "Test::More" : "0"
+ }
+ },
+ "test" : {
+ "requires" : {
+ "Test::More" : "0.88",
+ "Test::Requires" : "1.2"
+ }
+ }
+ }
+}
Added: vendor/perl/dist/cpan/CPAN-Meta/t/data-bad/version-ranges-2.json
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta/t/data-bad/version-ranges-2.json (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta/t/data-bad/version-ranges-2.json 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,29 @@
+{
+ "generated_by" : "Module::Build version 0.36",
+ "meta-spec" : {
+ "version" : "2",
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec"
+ },
+ "abstract" : "stuff",
+ "version" : "0.36",
+ "name" : "Module-Build",
+ "dynamic_config" : 1,
+ "author" : [
+ "Ken Williams <kwilliams at cpan.org>",
+ "Module-Build List <module-build at perl.org>"
+ ],
+ "release_status" : "stable",
+ "license" : [
+ "perl_5"
+ ],
+ "description" : "Module::Build is a system for building, testing, and installing Perl modules. It is meant to be an alternative to ExtUtils::MakeMaker... blah blah blah",
+ "prereqs" : {
+ "runtime" : {
+ "requires" : {
+ "IO::File" : "1.23beta",
+ "Data::Dumper" : "<= v1.2.a.3",
+ "File::Spec" : "== mu"
+ }
+ }
+ }
+}
Added: vendor/perl/dist/cpan/CPAN-Meta/t/strings.t
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta/t/strings.t (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta/t/strings.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,63 @@
+use strict;
+use warnings;
+use Test::More 0.88;
+
+sub dies_ok (&@) {
+ my ($code, $qr, $comment) = @_;
+
+ my $lived = eval { $code->(); 1 };
+
+ if ($lived) {
+ fail("$comment: did not die");
+ } else {
+ like($@, $qr, $comment);
+ }
+}
+
+use CPAN::Meta::Requirements;
+
+my $req = CPAN::Meta::Requirements->new;
+
+# Test ==
+$req->add_string_requirement('Foo::Bar', '== 1.3');
+ok($req->accepts_module('Foo::Bar' => '1.3'), 'exact version (==)');
+ok(!$req->accepts_module('Foo::Bar' => '1.2'), 'lower version (==)');
+ok(!$req->accepts_module('Foo::Bar' => '1.4'), 'higher version (==)');
+
+# Test !=
+$req->add_string_requirement('Foo::Baz', '!= 1.3');
+ok(!$req->accepts_module('Foo::Baz' => '1.3'), 'exact version (!=)');
+ok($req->accepts_module('Foo::Baz' => '1.2'), 'lower version (!=)');
+ok($req->accepts_module('Foo::Baz' => '1.4'), 'higher version (!=)');
+
+# Test >=
+$req->add_string_requirement('Foo::Gorch', '>= 1.3');
+ok($req->accepts_module('Foo::Gorch' => '1.3'), 'exact version (>=)');
+ok(!$req->accepts_module('Foo::Gorch' => '1.2'), 'lower version (>=)');
+ok($req->accepts_module('Foo::Gorch' => '1.4'), 'higher version (>=)');
+
+# Test <=
+$req->add_string_requirement('Foo::Graz', '<= 1.3');
+ok($req->accepts_module('Foo::Graz' => '1.3'), 'exact version (<=)');
+ok($req->accepts_module('Foo::Graz' => '1.2'), 'lower version (<=)');
+ok(!$req->accepts_module('Foo::Graz' => '1.4'), 'higher version (<=)');
+
+# Test ""
+$req->add_string_requirement('Foo::Blurb', '>= 1.3');
+ok($req->accepts_module('Foo::Blurb' => '1.3'), 'exact version (>=)');
+ok(!$req->accepts_module('Foo::Blurb' => '1.2'), 'lower version (>=)');
+ok($req->accepts_module('Foo::Blurb' => '1.4'), 'higher version (>=)');
+
+# Test multiple requirements
+$req->add_string_requirement('A::Tribe::Called', '>= 1.3, <= 2.0, != 1.6');
+ok($req->accepts_module('A::Tribe::Called' => '1.5'), 'middle version (>=, <=, !)');
+ok(!$req->accepts_module('A::Tribe::Called' => '1.2'), 'lower version (>=, <=, !)');
+ok(!$req->accepts_module('A::Tribe::Called' => '2.1'), 'higher version (>=, <=, !)');
+ok(!$req->accepts_module('A::Tribe::Called' => '1.6'), 'excluded version (>=, <=, !)');
+
+# Test fatal errors
+dies_ok { $req->add_string_requirement('Foo::Bar', undef) }
+ qr/No requirement string provided/,
+ "die without a requirement string";
+
+done_testing;
Added: vendor/perl/dist/cpan/CPAN-Meta-Requirements/Changes
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta-Requirements/Changes (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta-Requirements/Changes 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+Revision history for CPAN-Meta-Requirements
+
+2.122 2012-05-02 17:29:17 America/New_York
+
+ [Fixed]
+
+ - Fix typo in documentation: the exclusion symbol is "!=" rather than
+ just "!". The implemenation was correct, just the docs were wrong.
+ [rt.cpan.org #76948; ticket and patch from hasch-cpan at cozap.com]
+
+2.121 2012-04-01 15:05:15 Europe/Paris
+
+ - Split out from CPAN::Meta into own distribution
+
Added: vendor/perl/dist/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,728 @@
+use strict;
+use warnings;
+package CPAN::Meta::Requirements;
+our $VERSION = '2.122'; # VERSION
+# ABSTRACT: a set of version requirements for a CPAN dist
+
+
+use Carp ();
+use Scalar::Util ();
+use version 0.77 (); # the ->parse method
+
+
+my @valid_options = qw( bad_version_hook );
+
+sub new {
+ my ($class, $options) = @_;
+ $options ||= {};
+ Carp::croak "Argument to $class\->new() must be a hash reference"
+ unless ref $options eq 'HASH';
+ my %self = map {; $_ => $options->{$_}} @valid_options;
+
+ return bless \%self => $class;
+}
+
+sub _version_object {
+ my ($self, $version) = @_;
+
+ my $vobj;
+
+ eval {
+ $vobj = (! defined $version) ? version->parse(0)
+ : (! Scalar::Util::blessed($version)) ? version->parse($version)
+ : $version;
+ };
+
+ if ( my $err = $@ ) {
+ my $hook = $self->{bad_version_hook};
+ $vobj = eval { $hook->($version) }
+ if ref $hook eq 'CODE';
+ unless (Scalar::Util::blessed($vobj) && $vobj->isa("version")) {
+ $err =~ s{ at .* line \d+.*$}{};
+ die "Can't convert '$version': $err";
+ }
+ }
+
+ # ensure no leading '.'
+ if ( $vobj =~ m{\A\.} ) {
+ $vobj = version->parse("0$vobj");
+ }
+
+ # ensure normal v-string form
+ if ( $vobj->is_qv ) {
+ $vobj = version->parse($vobj->normal);
+ }
+
+ return $vobj;
+}
+
+
+BEGIN {
+ for my $type (qw(minimum maximum exclusion exact_version)) {
+ my $method = "with_$type";
+ my $to_add = $type eq 'exact_version' ? $type : "add_$type";
+
+ my $code = sub {
+ my ($self, $name, $version) = @_;
+
+ $version = $self->_version_object( $version );
+
+ $self->__modify_entry_for($name, $method, $version);
+
+ return $self;
+ };
+
+ no strict 'refs';
+ *$to_add = $code;
+ }
+}
+
+
+sub add_requirements {
+ my ($self, $req) = @_;
+
+ for my $module ($req->required_modules) {
+ my $modifiers = $req->__entry_for($module)->as_modifiers;
+ for my $modifier (@$modifiers) {
+ my ($method, @args) = @$modifier;
+ $self->$method($module => @args);
+ };
+ }
+
+ return $self;
+}
+
+
+sub accepts_module {
+ my ($self, $module, $version) = @_;
+
+ $version = $self->_version_object( $version );
+
+ return 1 unless my $range = $self->__entry_for($module);
+ return $range->_accepts($version);
+}
+
+
+sub clear_requirement {
+ my ($self, $module) = @_;
+
+ return $self unless $self->__entry_for($module);
+
+ Carp::confess("can't clear requirements on finalized requirements")
+ if $self->is_finalized;
+
+ delete $self->{requirements}{ $module };
+
+ return $self;
+}
+
+
+sub requirements_for_module {
+ my ($self, $module) = @_;
+ my $entry = $self->__entry_for($module);
+ return unless $entry;
+ return $entry->as_string;
+}
+
+
+sub required_modules { keys %{ $_[0]{requirements} } }
+
+
+sub clone {
+ my ($self) = @_;
+ my $new = (ref $self)->new;
+
+ return $new->add_requirements($self);
+}
+
+sub __entry_for { $_[0]{requirements}{ $_[1] } }
+
+sub __modify_entry_for {
+ my ($self, $name, $method, $version) = @_;
+
+ my $fin = $self->is_finalized;
+ my $old = $self->__entry_for($name);
+
+ Carp::confess("can't add new requirements to finalized requirements")
+ if $fin and not $old;
+
+ my $new = ($old || 'CPAN::Meta::Requirements::_Range::Range')
+ ->$method($version);
+
+ Carp::confess("can't modify finalized requirements")
+ if $fin and $old->as_string ne $new->as_string;
+
+ $self->{requirements}{ $name } = $new;
+}
+
+
+sub is_simple {
+ my ($self) = @_;
+ for my $module ($self->required_modules) {
+ # XXX: This is a complete hack, but also entirely correct.
+ return if $self->__entry_for($module)->as_string =~ /\s/;
+ }
+
+ return 1;
+}
+
+
+sub is_finalized { $_[0]{finalized} }
+
+
+sub finalize { $_[0]{finalized} = 1 }
+
+
+sub as_string_hash {
+ my ($self) = @_;
+
+ my %hash = map {; $_ => $self->{requirements}{$_}->as_string }
+ $self->required_modules;
+
+ return \%hash;
+}
+
+
+my %methods_for_op = (
+ '==' => [ qw(exact_version) ],
+ '!=' => [ qw(add_exclusion) ],
+ '>=' => [ qw(add_minimum) ],
+ '<=' => [ qw(add_maximum) ],
+ '>' => [ qw(add_minimum add_exclusion) ],
+ '<' => [ qw(add_maximum add_exclusion) ],
+);
+
+sub add_string_requirement {
+ my ($self, $module, $req) = @_;
+
+ Carp::confess("No requirement string provided for $module")
+ unless defined $req && length $req;
+
+ my @parts = split qr{\s*,\s*}, $req;
+
+
+ for my $part (@parts) {
+ my ($op, $ver) = $part =~ m{\A\s*(==|>=|>|<=|<|!=)\s*(.*)\z};
+
+ if (! defined $op) {
+ $self->add_minimum($module => $part);
+ } else {
+ Carp::confess("illegal requirement string: $req")
+ unless my $methods = $methods_for_op{ $op };
+
+ $self->$_($module => $ver) for @$methods;
+ }
+ }
+}
+
+
+sub from_string_hash {
+ my ($class, $hash) = @_;
+
+ my $self = $class->new;
+
+ for my $module (keys %$hash) {
+ my $req = $hash->{$module};
+ unless ( defined $req && length $req ) {
+ $req = 0;
+ Carp::carp("Undefined requirement for $module treated as '0'");
+ }
+ $self->add_string_requirement($module, $req);
+ }
+
+ return $self;
+}
+
+##############################################################
+
+{
+ package
+ CPAN::Meta::Requirements::_Range::Exact;
+ sub _new { bless { version => $_[1] } => $_[0] }
+
+ sub _accepts { return $_[0]{version} == $_[1] }
+
+ sub as_string { return "== $_[0]{version}" }
+
+ sub as_modifiers { return [ [ exact_version => $_[0]{version} ] ] }
+
+ sub _clone {
+ (ref $_[0])->_new( version->new( $_[0]{version} ) )
+ }
+
+ sub with_exact_version {
+ my ($self, $version) = @_;
+
+ return $self->_clone if $self->_accepts($version);
+
+ Carp::confess("illegal requirements: unequal exact version specified");
+ }
+
+ sub with_minimum {
+ my ($self, $minimum) = @_;
+ return $self->_clone if $self->{version} >= $minimum;
+ Carp::confess("illegal requirements: minimum above exact specification");
+ }
+
+ sub with_maximum {
+ my ($self, $maximum) = @_;
+ return $self->_clone if $self->{version} <= $maximum;
+ Carp::confess("illegal requirements: maximum below exact specification");
+ }
+
+ sub with_exclusion {
+ my ($self, $exclusion) = @_;
+ return $self->_clone unless $exclusion == $self->{version};
+ Carp::confess("illegal requirements: excluded exact specification");
+ }
+}
+
+##############################################################
+
+{
+ package
+ CPAN::Meta::Requirements::_Range::Range;
+
+ sub _self { ref($_[0]) ? $_[0] : (bless { } => $_[0]) }
+
+ sub _clone {
+ return (bless { } => $_[0]) unless ref $_[0];
+
+ my ($s) = @_;
+ my %guts = (
+ (exists $s->{minimum} ? (minimum => version->new($s->{minimum})) : ()),
+ (exists $s->{maximum} ? (maximum => version->new($s->{maximum})) : ()),
+
+ (exists $s->{exclusions}
+ ? (exclusions => [ map { version->new($_) } @{ $s->{exclusions} } ])
+ : ()),
+ );
+
+ bless \%guts => ref($s);
+ }
+
+ sub as_modifiers {
+ my ($self) = @_;
+ my @mods;
+ push @mods, [ add_minimum => $self->{minimum} ] if exists $self->{minimum};
+ push @mods, [ add_maximum => $self->{maximum} ] if exists $self->{maximum};
+ push @mods, map {; [ add_exclusion => $_ ] } @{$self->{exclusions} || []};
+ return \@mods;
+ }
+
+ sub as_string {
+ my ($self) = @_;
+
+ return 0 if ! keys %$self;
+
+ return "$self->{minimum}" if (keys %$self) == 1 and exists $self->{minimum};
+
+ my @exclusions = @{ $self->{exclusions} || [] };
+
+ my @parts;
+
+ for my $pair (
+ [ qw( >= > minimum ) ],
+ [ qw( <= < maximum ) ],
+ ) {
+ my ($op, $e_op, $k) = @$pair;
+ if (exists $self->{$k}) {
+ my @new_exclusions = grep { $_ != $self->{ $k } } @exclusions;
+ if (@new_exclusions == @exclusions) {
+ push @parts, "$op $self->{ $k }";
+ } else {
+ push @parts, "$e_op $self->{ $k }";
+ @exclusions = @new_exclusions;
+ }
+ }
+ }
+
+ push @parts, map {; "!= $_" } @exclusions;
+
+ return join q{, }, @parts;
+ }
+
+ sub with_exact_version {
+ my ($self, $version) = @_;
+ $self = $self->_clone;
+
+ Carp::confess("illegal requirements: exact specification outside of range")
+ unless $self->_accepts($version);
+
+ return CPAN::Meta::Requirements::_Range::Exact->_new($version);
+ }
+
+ sub _simplify {
+ my ($self) = @_;
+
+ if (defined $self->{minimum} and defined $self->{maximum}) {
+ if ($self->{minimum} == $self->{maximum}) {
+ Carp::confess("illegal requirements: excluded all values")
+ if grep { $_ == $self->{minimum} } @{ $self->{exclusions} || [] };
+
+ return CPAN::Meta::Requirements::_Range::Exact->_new($self->{minimum})
+ }
+
+ Carp::confess("illegal requirements: minimum exceeds maximum")
+ if $self->{minimum} > $self->{maximum};
+ }
+
+ # eliminate irrelevant exclusions
+ if ($self->{exclusions}) {
+ my %seen;
+ @{ $self->{exclusions} } = grep {
+ (! defined $self->{minimum} or $_ >= $self->{minimum})
+ and
+ (! defined $self->{maximum} or $_ <= $self->{maximum})
+ and
+ ! $seen{$_}++
+ } @{ $self->{exclusions} };
+ }
+
+ return $self;
+ }
+
+ sub with_minimum {
+ my ($self, $minimum) = @_;
+ $self = $self->_clone;
+
+ if (defined (my $old_min = $self->{minimum})) {
+ $self->{minimum} = (sort { $b cmp $a } ($minimum, $old_min))[0];
+ } else {
+ $self->{minimum} = $minimum;
+ }
+
+ return $self->_simplify;
+ }
+
+ sub with_maximum {
+ my ($self, $maximum) = @_;
+ $self = $self->_clone;
+
+ if (defined (my $old_max = $self->{maximum})) {
+ $self->{maximum} = (sort { $a cmp $b } ($maximum, $old_max))[0];
+ } else {
+ $self->{maximum} = $maximum;
+ }
+
+ return $self->_simplify;
+ }
+
+ sub with_exclusion {
+ my ($self, $exclusion) = @_;
+ $self = $self->_clone;
+
+ push @{ $self->{exclusions} ||= [] }, $exclusion;
+
+ return $self->_simplify;
+ }
+
+ sub _accepts {
+ my ($self, $version) = @_;
+
+ return if defined $self->{minimum} and $version < $self->{minimum};
+ return if defined $self->{maximum} and $version > $self->{maximum};
+ return if defined $self->{exclusions}
+ and grep { $version == $_ } @{ $self->{exclusions} };
+
+ return 1;
+ }
+}
+
+1;
+# vim: ts=2 sts=2 sw=2 et:
+
+__END__
+=pod
+
+=head1 NAME
+
+CPAN::Meta::Requirements - a set of version requirements for a CPAN dist
+
+=head1 VERSION
+
+version 2.122
+
+=head1 SYNOPSIS
+
+ use CPAN::Meta::Requirements;
+
+ my $build_requires = CPAN::Meta::Requirements->new;
+
+ $build_requires->add_minimum('Library::Foo' => 1.208);
+
+ $build_requires->add_minimum('Library::Foo' => 2.602);
+
+ $build_requires->add_minimum('Module::Bar' => 'v1.2.3');
+
+ $METAyml->{build_requires} = $build_requires->as_string_hash;
+
+=head1 DESCRIPTION
+
+A CPAN::Meta::Requirements object models a set of version constraints like
+those specified in the F<META.yml> or F<META.json> files in CPAN distributions.
+It can be built up by adding more and more constraints, and it will reduce them
+to the simplest representation.
+
+Logically impossible constraints will be identified immediately by thrown
+exceptions.
+
+=head1 METHODS
+
+=head2 new
+
+ my $req = CPAN::Meta::Requirements->new;
+
+This returns a new CPAN::Meta::Requirements object. It takes an optional
+hash reference argument. The following keys are supported:
+
+=over 4
+
+=item *
+
+<bad_version_hook> -- if provided, when a version cannot be parsed into
+
+a version object, this code reference will be called with the invalid version
+string as an argument. It must return a valid version object.
+
+=back
+
+All other keys are ignored.
+
+=head2 add_minimum
+
+ $req->add_minimum( $module => $version );
+
+This adds a new minimum version requirement. If the new requirement is
+redundant to the existing specification, this has no effect.
+
+Minimum requirements are inclusive. C<$version> is required, along with any
+greater version number.
+
+This method returns the requirements object.
+
+=head2 add_maximum
+
+ $req->add_maximum( $module => $version );
+
+This adds a new maximum version requirement. If the new requirement is
+redundant to the existing specification, this has no effect.
+
+Maximum requirements are inclusive. No version strictly greater than the given
+version is allowed.
+
+This method returns the requirements object.
+
+=head2 add_exclusion
+
+ $req->add_exclusion( $module => $version );
+
+This adds a new excluded version. For example, you might use these three
+method calls:
+
+ $req->add_minimum( $module => '1.00' );
+ $req->add_maximum( $module => '1.82' );
+
+ $req->add_exclusion( $module => '1.75' );
+
+Any version between 1.00 and 1.82 inclusive would be acceptable, except for
+1.75.
+
+This method returns the requirements object.
+
+=head2 exact_version
+
+ $req->exact_version( $module => $version );
+
+This sets the version required for the given module to I<exactly> the given
+version. No other version would be considered acceptable.
+
+This method returns the requirements object.
+
+=head2 add_requirements
+
+ $req->add_requirements( $another_req_object );
+
+This method adds all the requirements in the given CPAN::Meta::Requirements object
+to the requirements object on which it was called. If there are any conflicts,
+an exception is thrown.
+
+This method returns the requirements object.
+
+=head2 accepts_module
+
+ my $bool = $req->accepts_modules($module => $version);
+
+Given an module and version, this method returns true if the version
+specification for the module accepts the provided version. In other words,
+given:
+
+ Module => '>= 1.00, < 2.00'
+
+We will accept 1.00 and 1.75 but not 0.50 or 2.00.
+
+For modules that do not appear in the requirements, this method will return
+true.
+
+=head2 clear_requirement
+
+ $req->clear_requirement( $module );
+
+This removes the requirement for a given module from the object.
+
+This method returns the requirements object.
+
+=head2 requirements_for_module
+
+ $req->requirements_for_module( $module );
+
+This returns a string containing the version requirements for a given module in
+the format described in L<CPAN::Meta::Spec> or undef if the given module has no
+requirements. This should only be used for informational purposes such as error
+messages and should not be interpreted or used for comparison (see
+L</accepts_module> instead.)
+
+=head2 required_modules
+
+This method returns a list of all the modules for which requirements have been
+specified.
+
+=head2 clone
+
+ $req->clone;
+
+This method returns a clone of the invocant. The clone and the original object
+can then be changed independent of one another.
+
+=head2 is_simple
+
+This method returns true if and only if all requirements are inclusive minimums
+-- that is, if their string expression is just the version number.
+
+=head2 is_finalized
+
+This method returns true if the requirements have been finalized by having the
+C<finalize> method called on them.
+
+=head2 finalize
+
+This method marks the requirements finalized. Subsequent attempts to change
+the requirements will be fatal, I<if> they would result in a change. If they
+would not alter the requirements, they have no effect.
+
+If a finalized set of requirements is cloned, the cloned requirements are not
+also finalized.
+
+=head2 as_string_hash
+
+This returns a reference to a hash describing the requirements using the
+strings in the F<META.yml> specification.
+
+For example after the following program:
+
+ my $req = CPAN::Meta::Requirements->new;
+
+ $req->add_minimum('CPAN::Meta::Requirements' => 0.102);
+
+ $req->add_minimum('Library::Foo' => 1.208);
+
+ $req->add_maximum('Library::Foo' => 2.602);
+
+ $req->add_minimum('Module::Bar' => 'v1.2.3');
+
+ $req->add_exclusion('Module::Bar' => 'v1.2.8');
+
+ $req->exact_version('Xyzzy' => '6.01');
+
+ my $hashref = $req->as_string_hash;
+
+C<$hashref> would contain:
+
+ {
+ 'CPAN::Meta::Requirements' => '0.102',
+ 'Library::Foo' => '>= 1.208, <= 2.206',
+ 'Module::Bar' => '>= v1.2.3, != v1.2.8',
+ 'Xyzzy' => '== 6.01',
+ }
+
+=head2 add_string_requirement
+
+ $req->add_string_requirement('Library::Foo' => '>= 1.208, <= 2.206');
+
+This method parses the passed in string and adds the appropriate requirement
+for the given module. It understands version ranges as described in the
+L<CPAN::Meta::Spec/Version Ranges>. For example:
+
+=over 4
+
+=item 1.3
+
+=item >= 1.3
+
+=item <= 1.3
+
+=item == 1.3
+
+=item != 1.3
+
+=item > 1.3
+
+=item < 1.3
+
+=item >= 1.3, != 1.5, <= 2.0
+
+A version number without an operator is equivalent to specifying a minimum
+(C<E<gt>=>). Extra whitespace is allowed.
+
+=back
+
+=head2 from_string_hash
+
+ my $req = CPAN::Meta::Requirements->from_string_hash( \%hash );
+
+This is an alternate constructor for a CPAN::Meta::Requirements object. It takes
+a hash of module names and version requirement strings and returns a new
+CPAN::Meta::Requirements object.
+
+=for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
+
+=head1 SUPPORT
+
+=head2 Bugs / Feature Requests
+
+Please report any bugs or feature requests through the issue tracker
+at L<http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta-Requirements>.
+You will be notified automatically of any progress on your issue.
+
+=head2 Source Code
+
+This is open source software. The code repository is available for
+public review and contribution under the terms of the license.
+
+L<https://github.com/dagolden/cpan-meta-requirements>
+
+ git clone https://github.com/dagolden/cpan-meta-requirements.git
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+David Golden <dagolden at cpan.org>
+
+=item *
+
+Ricardo Signes <rjbs at cpan.org>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by David Golden and Ricardo Signes.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
Added: vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/accepts.t
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/accepts.t (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/accepts.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,29 @@
+use strict;
+use warnings;
+
+use CPAN::Meta::Requirements;
+
+use Test::More 0.88;
+
+{
+ my $req = CPAN::Meta::Requirements->new->add_minimum(Foo => 1);
+
+ ok( $req->accepts_module(Foo => 1));
+ ok(! $req->accepts_module(Foo => 0));
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new->add_maximum(Foo => 1);
+
+ ok( $req->accepts_module(Foo => 1));
+ ok(! $req->accepts_module(Foo => 2));
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new->add_exclusion(Foo => 1);
+
+ ok( $req->accepts_module(Foo => 0));
+ ok(! $req->accepts_module(Foo => 1));
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/bad_version_hook.t
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/bad_version_hook.t (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/bad_version_hook.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
+use strict;
+use warnings;
+
+use CPAN::Meta::Requirements;
+use version;
+
+use Test::More 0.88;
+
+sub dies_ok (&@) {
+ my ($code, $qr, $comment) = @_;
+
+ my $lived = eval { $code->(); 1 };
+
+ if ($lived) {
+ fail("$comment: did not die");
+ } else {
+ like($@, $qr, $comment);
+ }
+}
+
+sub _fixit { return version->new(42) }
+
+{
+ my $req = CPAN::Meta::Requirements->new( {bad_version_hook => \&_fixit} );
+
+ $req->add_minimum('Foo::Bar' => 10);
+ $req->add_minimum('Foo::Baz' => 'invalid_version');
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ 'Foo::Bar' => 10,
+ 'Foo::Baz' => 42,
+ },
+ "hook fixes invalid version",
+ );
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new( {bad_version_hook => sub { 0 }} );
+
+ dies_ok { $req->add_minimum('Foo::Baz' => 'invalid_version') }
+ qr/Invalid version/,
+ "dies if hook doesn't return version object";
+
+}
+
+
+done_testing;
Added: vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/basic.t
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/basic.t (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/basic.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,236 @@
+use strict;
+use warnings;
+
+use CPAN::Meta::Requirements;
+
+use Test::More 0.88;
+
+sub dies_ok (&@) {
+ my ($code, $qr, $comment) = @_;
+
+ my $lived = eval { $code->(); 1 };
+
+ if ($lived) {
+ fail("$comment: did not die");
+ } else {
+ like($@, $qr, $comment);
+ }
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+
+ $req->add_minimum('Foo::Bar' => 10);
+ $req->add_minimum('Foo::Bar' => 0);
+ $req->add_minimum('Foo::Bar' => 2);
+
+ $req->add_minimum('Foo::Baz' => version->declare('v1.2.3'));
+
+ $req->add_minimum('Foo::Undef' => undef);
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ 'Foo::Bar' => 10,
+ 'Foo::Baz' => 'v1.2.3',
+ 'Foo::Undef' => 0,
+ },
+ "some basic minimums",
+ );
+
+ ok($req->is_simple, "just minimums? simple");
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+ $req->add_maximum(Foo => 1);
+ is_deeply($req->as_string_hash, { Foo => '<= 1' }, "max only");
+
+ ok(! $req->is_simple, "maximums? not simple");
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+ $req->add_exclusion(Foo => 1);
+ $req->add_exclusion(Foo => 2);
+
+ # Why would you ever do this?? -- rjbs, 2010-02-20
+ is_deeply($req->as_string_hash, { Foo => '!= 1, != 2' }, "excl only");
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+
+ $req->add_minimum(Foo => 1);
+ $req->add_maximum(Foo => 2);
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ Foo => '>= 1, <= 2',
+ },
+ "min and max",
+ );
+
+ $req->add_maximum(Foo => 3);
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ Foo => '>= 1, <= 2',
+ },
+ "exclusions already outside range do not matter",
+ );
+
+ $req->add_exclusion(Foo => 1.5);
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ Foo => '>= 1, <= 2, != 1.5',
+ },
+ "exclusions",
+ );
+
+ $req->add_minimum(Foo => 1.6);
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ Foo => '>= 1.6, <= 2',
+ },
+ "exclusions go away when made irrelevant",
+ );
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+
+ $req->add_minimum(Foo => 1);
+ $req->add_exclusion(Foo => 1);
+ $req->add_maximum(Foo => 2);
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ Foo => '> 1, <= 2',
+ },
+ "we can exclude an endpoint",
+ );
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+ $req->add_minimum(Foo => 1);
+
+ $req->add_exclusion(Foo => 1);
+
+ dies_ok { $req->add_maximum(Foo => 1); }
+ qr/excluded all/,
+ "can't exclude all values" ;
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+ $req->add_minimum(Foo => 1);
+ dies_ok {$req->exact_version(Foo => 0.5); }
+ qr/outside of range/,
+ "can't add outside-range exact spec to range";
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+ $req->add_minimum(Foo => 1);
+ dies_ok { $req->add_maximum(Foo => 0.5); }
+ qr/minimum exceeds maximum/,
+ "maximum must exceed (or equal) minimum";
+
+ $req = CPAN::Meta::Requirements->new;
+ $req->add_maximum(Foo => 0.5);
+ dies_ok { $req->add_minimum(Foo => 1); }
+ qr/minimum exceeds maximum/,
+ "maximum must exceed (or equal) minimum";
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+
+ $req->add_minimum(Foo => 1);
+ $req->add_maximum(Foo => 1);
+
+ $req->add_maximum(Foo => 2); # ignored
+ $req->add_minimum(Foo => 0); # ignored
+ $req->add_exclusion(Foo => .5); # ignored
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ 'Foo' => '== 1',
+ },
+ "if min==max, becomes exact requirement",
+ );
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+ $req->add_minimum(Foo => 1);
+ $req->add_exclusion(Foo => 0);
+ $req->add_maximum(Foo => 3);
+ $req->add_exclusion(Foo => 4);
+
+ $req->add_exclusion(Foo => 2);
+ $req->add_exclusion(Foo => 2);
+
+ is_deeply(
+ $req->as_string_hash,
+ {
+ Foo => '>= 1, <= 3, != 2',
+ },
+ 'test exclusion-skipping',
+ );
+}
+
+sub foo_1 {
+ my $req = CPAN::Meta::Requirements->new;
+ $req->exact_version(Foo => 1);
+ return $req;
+}
+
+{
+ my $req = foo_1;
+
+ $req->exact_version(Foo => 1); # ignored
+
+ is_deeply($req->as_string_hash, { Foo => '== 1' }, "exact requirement");
+
+ dies_ok { $req->exact_version(Foo => 2); }
+ qr/unequal/,
+ "can't exactly specify differing versions" ;
+
+ $req = foo_1;
+ $req->add_minimum(Foo => 0); # ignored
+ $req->add_maximum(Foo => 2); # ignored
+
+ dies_ok { $req->add_maximum(Foo => 0); } qr/maximum below/, "max < fixed";
+
+ $req = foo_1;
+ dies_ok { $req->add_minimum(Foo => 2); } qr/minimum above/, "min > fixed";
+
+ $req = foo_1;
+ $req->add_exclusion(Foo => 8); # ignored
+ dies_ok { $req->add_exclusion(Foo => 1); } qr/excluded exact/, "!= && ==";
+}
+
+{
+ my $req = foo_1;
+
+ is($req->requirements_for_module('Foo'), '== 1', 'requirements_for_module');
+
+ # test empty/undef returns
+ my @list = $req->requirements_for_module('FooBarBamBaz');
+ my $scalar = $req->requirements_for_module('FooBarBamBaz');
+ is ( scalar @list, 0, "requirements_for_module() returns empty for not found (list)" );
+ is ( $scalar, undef, "requirements_for_module() returns undef for not found (scalar)" );
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/finalize.t
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/finalize.t (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/finalize.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,91 @@
+use strict;
+use warnings;
+
+use CPAN::Meta::Requirements;
+
+use Test::More 0.88;
+
+sub dies_ok (&@) {
+ my ($code, $qr, $comment) = @_;
+
+ my $lived = eval { $code->(); 1 };
+
+ if ($lived) {
+ fail("$comment: did not die");
+ } else {
+ like($@, $qr, $comment);
+ }
+}
+
+{
+ my $req = CPAN::Meta::Requirements->new;
+
+ $req->add_minimum('Foo::Bar' => 10);
+ $req->add_minimum('Foo::Bar' => 0);
+ $req->add_minimum('Foo::Bar' => 2);
+
+ $req->add_minimum('Foo::Baz' => version->declare('v1.2.3'));
+
+ $req->add_minimum('Foo::Undef' => undef);
+
+ my $want = {
+ 'Foo::Bar' => 10,
+ 'Foo::Baz' => 'v1.2.3',
+ 'Foo::Undef' => 0,
+ };
+
+ is_deeply(
+ $req->as_string_hash,
+ $want,
+ "some basic minimums",
+ );
+
+ $req->finalize;
+
+ $req->add_minimum('Foo::Bar', 2);
+
+ pass('we can add a Foo::Bar requirement with no effect post finalization');
+
+ dies_ok { $req->add_minimum('Foo::Bar', 12) }
+ qr{finalized req},
+ "can't add a higher Foo::Bar after finalization";
+
+ dies_ok { $req->add_minimum('Foo::New', 0) }
+ qr{finalized req},
+ "can't add a new module prereq after finalization";
+
+ dies_ok { $req->clear_requirement('Foo::Bar') }
+ qr{finalized req},
+ "can't clear an existing prereq after finalization";
+
+ $req->clear_requirement('Bogus::Req');
+
+ pass('we can clear a prereq that was not set to begin with');
+
+ is_deeply(
+ $req->as_string_hash,
+ $want,
+ "none of our attempts to alter the object post-finalization worked",
+ );
+
+ my $cloned = $req->clone;
+
+ $cloned->add_minimum('Foo::Bar', 12);
+
+ is_deeply(
+ $cloned->as_string_hash,
+ {
+ %$want,
+ 'Foo::Bar' => 12,
+ },
+ "we can alter a cloned V:R (finalization does not survive cloning)",
+ );
+
+ is_deeply(
+ $req->as_string_hash,
+ $want,
+ "...and original requirements are untouched",
+ );
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/from-hash.t
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/from-hash.t (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/from-hash.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,69 @@
+use strict;
+use warnings;
+
+use CPAN::Meta::Requirements;
+
+use Test::More 0.88;
+
+sub dies_ok (&@) {
+ my ($code, $qr, $comment) = @_;
+
+ my $lived = eval { $code->(); 1 };
+
+ if ($lived) {
+ fail("$comment: did not die");
+ } else {
+ like($@, $qr, $comment);
+ }
+}
+
+{
+ my $string_hash = {
+ Left => 10,
+ Shared => '>= 2, <= 9, != 7',
+ Right => 18,
+ };
+
+ my $req = CPAN::Meta::Requirements->from_string_hash($string_hash);
+
+ is_deeply(
+ $req->as_string_hash,
+ $string_hash,
+ "we can load from a string hash",
+ );
+}
+
+{
+ my $string_hash = {
+ Left => 10,
+ Shared => '= 2',
+ Right => 18,
+ };
+
+ dies_ok { CPAN::Meta::Requirements->from_string_hash($string_hash) }
+ qr/Can't convert/,
+ "we die when we can't understand a version spec";
+}
+
+{
+ my $string_hash = {
+ Left => 10,
+ Shared => undef,
+ Right => 18,
+ };
+
+ my $warning;
+ local $SIG{__WARN__} = sub { $warning = join("\n", at _) };
+
+ my $req = CPAN::Meta::Requirements->from_string_hash($string_hash);
+
+ is(
+ $req->as_string_hash->{Shared}, 0,
+ "undef requirement treated as '0'",
+ );
+
+ like ($warning, qr/Undefined requirement.*treated as '0'/, "undef requirement warns");
+
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/merge.t
===================================================================
--- vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/merge.t (rev 0)
+++ vendor/perl/dist/cpan/CPAN-Meta-Requirements/t/merge.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,136 @@
+use strict;
+use warnings;
+
+use CPAN::Meta::Requirements;
+
+use Test::More 0.88;
+
+sub dies_ok (&@) {
+ my ($code, $qr, $comment) = @_;
+
+ my $lived = eval { $code->(); 1 };
+
+ if ($lived) {
+ fail("$comment: did not die");
+ } else {
+ like($@, $qr, $comment);
+ }
+}
+
+{
+ my $req_1 = CPAN::Meta::Requirements->new;
+ $req_1->add_minimum(Left => 10);
+ $req_1->add_minimum(Shared => 2);
+ $req_1->add_exclusion(Shared => 7);
+
+ my $req_2 = CPAN::Meta::Requirements->new;
+ $req_2->add_minimum(Shared => 1);
+ $req_2->add_maximum(Shared => 9);
+ $req_2->add_minimum(Right => 18);
+
+ $req_1->add_requirements($req_2);
+
+ is_deeply(
+ $req_1->as_string_hash,
+ {
+ Left => 10,
+ Shared => '>= 2, <= 9, != 7',
+ Right => 18,
+ },
+ "add requirements to an existing set of requirements",
+ );
+}
+
+{
+ my $req_1 = CPAN::Meta::Requirements->new;
+ $req_1->add_minimum(Left => 10);
+ $req_1->add_minimum(Shared => 2);
+ $req_1->add_exclusion(Shared => 7);
+ $req_1->exact_version(Exact => 8);
+
+ my $req_2 = CPAN::Meta::Requirements->new;
+ $req_2->add_minimum(Shared => 1);
+ $req_2->add_maximum(Shared => 9);
+ $req_2->add_minimum(Right => 18);
+ $req_2->exact_version(Exact => 8);
+
+ my $clone = $req_1->clone->add_requirements($req_2);
+
+ is_deeply(
+ $req_1->as_string_hash,
+ {
+ Left => 10,
+ Shared => '>= 2, != 7',
+ Exact => '== 8',
+ },
+ "clone/add_requirements does not affect lhs",
+ );
+
+ is_deeply(
+ $req_2->as_string_hash,
+ {
+ Shared => '>= 1, <= 9',
+ Right => 18,
+ Exact => '== 8',
+ },
+ "clone/add_requirements does not affect rhs",
+ );
+
+ is_deeply(
+ $clone->as_string_hash,
+ {
+ Left => 10,
+ Shared => '>= 2, <= 9, != 7',
+ Right => 18,
+ Exact => '== 8',
+ },
+ "clone and add_requirements",
+ );
+
+ $clone->clear_requirement('Shared');
+
+ is_deeply(
+ $clone->as_string_hash,
+ {
+ Left => 10,
+ Right => 18,
+ Exact => '== 8',
+ },
+ "cleared the shared requirement",
+ );
+}
+
+{
+ my $req_1 = CPAN::Meta::Requirements->new;
+ $req_1->add_maximum(Foo => 1);
+
+ my $req_2 = $req_1->clone;
+
+ is_deeply(
+ $req_2->as_string_hash,
+ {
+ 'Foo' => '<= 1',
+ },
+ 'clone with only max',
+ );
+}
+
+{
+ my $left = CPAN::Meta::Requirements->new;
+ $left->add_minimum(Foo => 0);
+ $left->add_minimum(Bar => 1);
+
+ my $right = CPAN::Meta::Requirements->new;
+ $right->add_requirements($left);
+
+ is_deeply(
+ $right->as_string_hash,
+ {
+ Foo => 0,
+ Bar => 1,
+ },
+ "we do not lose 0-min reqs on merge",
+ );
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm
===================================================================
--- vendor/perl/dist/cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm (rev 0)
+++ vendor/perl/dist/cpan/CPANPLUS/lib/CPANPLUS/Config/HomeEnv.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,63 @@
+package CPANPLUS::Config::HomeEnv;
+use deprecate;
+
+use strict;
+use File::Spec;
+use vars qw($VERSION);
+
+$VERSION = "0.9135";
+
+sub setup {
+ my $conf = shift;
+ $conf->set_conf( base => File::Spec->catdir( $ENV{PERL5_CPANPLUS_HOME}, '.cpanplus' ) )
+ if $ENV{PERL5_CPANPLUS_HOME};
+ return 1;
+}
+
+qq'Wherever I hang my hat is home';
+
+__END__
+
+=head1 NAME
+
+CPANPLUS::Config::HomeEnv - Set the environment for the CPANPLUS base dir
+
+=head1 SYNOPSIS
+
+ export PERL5_CPANPLUS_HOME=/home/moo/perls/conf/perl-5.8.9/
+
+=head1 DESCRIPTION
+
+CPANPLUS::Config::HomeEnv is a L<CPANPLUS::Config> file that allows the CPANPLUS user to
+specify where L<CPANPLUS> gets its configuration from.
+
+Setting the environment variable C<PERL5_CPANPLUS_HOME> to a path location, determines
+where the C<.cpanplus> directory will be located.
+
+=head1 METHODS
+
+=over
+
+=item C<setup>
+
+Called by L<CPANPLUS::Configure>.
+
+=back
+
+=head1 AUTHOR
+
+Chris C<BinGOs> Williams <chris at bingosnet.co.uk>
+
+Contributions and patience from Jos Boumans the L<CPANPLUS> guy!
+
+=head1 LICENSE
+
+Copyright E<copy> Chris Williams and Jos Boumans.
+
+This module may be used, modified, and distributed under the same terms as Perl itself. Please see the license that came with your Perl distribution for details.
+
+=head1 SEE ALSO
+
+L<CPANPLUS>
+
+=cut
Added: vendor/perl/dist/cpan/Config-Perl-V/V.pm
===================================================================
--- vendor/perl/dist/cpan/Config-Perl-V/V.pm (rev 0)
+++ vendor/perl/dist/cpan/Config-Perl-V/V.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,509 @@
+#!/pro/bin/perl
+
+package Config::Perl::V;
+
+use strict;
+use warnings;
+
+use Config;
+use Exporter;
+use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS);
+$VERSION = "0.17";
+ at ISA = ("Exporter");
+ at EXPORT_OK = qw( plv2hash summary myconfig signature );
+%EXPORT_TAGS = (
+ all => [ @EXPORT_OK ],
+ sig => [ "signature" ],
+ );
+
+# Characteristics of this binary (from libperl):
+# Compile-time options: DEBUGGING PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP
+# USE_64_BIT_INT USE_LARGE_FILES USE_PERLIO
+
+# The list are as the perl binary has stored it in PL_bincompat_options
+# search for it in
+# perl.c line 1661 S_Internals_V ()
+# perl.h line 4664 (second block),
+my %BTD = map { $_ => 0 } qw(
+
+ DEBUGGING
+ NO_MATHOMS
+ PERL_DISABLE_PMC
+ PERL_DONT_CREATE_GVSV
+ PERL_IS_MINIPERL
+ PERL_MALLOC_WRAP
+ PERL_MEM_LOG
+ PERL_MEM_LOG_ENV
+ PERL_MEM_LOG_ENV_FD
+ PERL_MEM_LOG_NOIMPL
+ PERL_MEM_LOG_STDERR
+ PERL_MEM_LOG_TIMESTAMP
+ PERL_PRESERVE_IVUV
+ PERL_RELOCATABLE_INCPUSH
+ PERL_USE_DEVEL
+ PERL_USE_SAFE_PUTENV
+ UNLINK_ALL_VERSIONS
+ USE_ATTRIBUTES_FOR_PERLIO
+ USE_FAST_STDIO
+ USE_LOCALE
+ USE_PERL_ATOF
+ USE_SITECUSTOMIZE
+
+ DEBUG_LEAKING_SCALARS
+ DEBUG_LEAKING_SCALARS_FORK_DUMP
+ DECCRTL_SOCKETS
+ FAKE_THREADS
+ FCRYPT
+ HAS_TIMES
+ MULTIPLICITY
+ MYMALLOC
+ PERLIO_LAYERS
+ PERL_DEBUG_READONLY_OPS
+ PERL_GLOBAL_STRUCT
+ PERL_IMPLICIT_CONTEXT
+ PERL_IMPLICIT_SYS
+ PERL_MAD
+ PERL_MICRO
+ PERL_NEED_APPCTX
+ PERL_NEED_TIMESBASE
+ PERL_OLD_COPY_ON_WRITE
+ PERL_NEW_COPY_ON_WRITE
+ PERL_POISON
+ PERL_SAWAMPERSAND
+ PERL_TRACK_MEMPOOL
+ PERL_USES_PL_PIDSTATUS
+ PL_OP_SLAB_ALLOC
+ THREADS_HAVE_PIDS
+ USE_64_BIT_ALL
+ USE_64_BIT_INT
+ USE_IEEE
+ USE_ITHREADS
+ USE_LARGE_FILES
+ USE_LOCALE_COLLATE
+ USE_LOCALE_NUMERIC
+ USE_LONG_DOUBLE
+ USE_PERLIO
+ USE_REENTRANT_API
+ USE_SFIO
+ USE_SOCKS
+ VMS_DO_SOCKETS
+ VMS_SHORTEN_LONG_SYMBOLS
+ VMS_SYMBOL_CASE_AS_IS
+ );
+
+# These are all the keys that are
+# 1. Always present in %Config (first block)
+# 2. Reported by 'perl -V' (the rest)
+my @config_vars = qw(
+
+ api_subversion
+ api_version
+ api_versionstring
+ archlibexp
+ dont_use_nlink
+ d_readlink
+ d_symlink
+ exe_ext
+ inc_version_list
+ ldlibpthname
+ patchlevel
+ path_sep
+ perl_patchlevel
+ privlibexp
+ scriptdir
+ sitearchexp
+ sitelibexp
+ subversion
+ usevendorprefix
+ version
+
+ git_commit_id
+ git_describe
+ git_branch
+ git_uncommitted_changes
+ git_commit_id_title
+ git_snapshot_date
+
+ package revision version_patchlevel_string
+
+ osname osvers archname
+ myuname
+ config_args
+ hint useposix d_sigaction
+ useithreads usemultiplicity
+ useperlio d_sfio uselargefiles usesocks
+ use64bitint use64bitall uselongdouble
+ usemymalloc bincompat5005
+
+ cc ccflags
+ optimize
+ cppflags
+ ccversion gccversion gccosandvers
+ intsize longsize ptrsize doublesize byteorder
+ d_longlong longlongsize d_longdbl longdblsize
+ ivtype ivsize nvtype nvsize lseektype lseeksize
+ alignbytes prototype
+
+ ld ldflags
+ libpth
+ libs
+ perllibs
+ libc so useshrplib libperl
+ gnulibc_version
+
+ dlsrc dlext d_dlsymun ccdlflags
+ cccdlflags lddlflags
+ );
+
+my %empty_build = (
+ osname => "",
+ stamp => 0,
+ options => { %BTD },
+ patches => [],
+ );
+
+sub _make_derived
+{
+ my $conf = shift;
+
+ for ( [ lseektype => "Off_t" ],
+ [ myuname => "uname" ],
+ [ perl_patchlevel => "patch" ],
+ ) {
+ my ($official, $derived) = @$_;
+ $conf->{config}{$derived} ||= $conf->{config}{$official};
+ $conf->{config}{$official} ||= $conf->{config}{$derived};
+ $conf->{derived}{$derived} = delete $conf->{config}{$derived};
+ }
+
+ if (exists $conf->{config}{version_patchlevel_string} &&
+ !exists $conf->{config}{api_version}) {
+ my $vps = $conf->{config}{version_patchlevel_string};
+ $vps =~ s{\b revision \s+ (\S+) }{}x and
+ $conf->{config}{revision} ||= $1;
+
+ $vps =~ s{\b version \s+ (\S+) }{}x and
+ $conf->{config}{api_version} ||= $1;
+ $vps =~ s{\b subversion \s+ (\S+) }{}x and
+ $conf->{config}{subversion} ||= $1;
+ $vps =~ s{\b patch \s+ (\S+) }{}x and
+ $conf->{config}{perl_patchlevel} ||= $1;
+ }
+
+ ($conf->{config}{version_patchlevel_string} ||= join " ",
+ map { ($_, $conf->{config}{$_} ) }
+ grep { $conf->{config}{$_} }
+ qw( api_version subversion perl_patchlevel )) =~ s/\bperl_//;
+
+ $conf->{config}{perl_patchlevel} ||= ""; # 0 is not a valid patchlevel
+
+ if ($conf->{config}{perl_patchlevel} =~ m{^git\w*-([^-]+)}i) {
+ $conf->{config}{git_branch} ||= $1;
+ $conf->{config}{git_describe} ||= $conf->{config}{perl_patchlevel};
+ }
+
+ $conf;
+ } # _make_derived
+
+sub plv2hash
+{
+ my %config;
+ for (split m/\n+/ => join "\n", @_) {
+
+ if (s/^Summary of my\s+(\S+)\s+\(\s*(.*?)\s*\)//) {
+ $config{"package"} = $1;
+ my $rev = $2;
+ $rev =~ s/^ revision \s+ (\S+) \s*//x and $config{revision} = $1;
+ $rev and $config{version_patchlevel_string} = $rev;
+ my ($rel) = $config{package} =~ m{perl(\d)};
+ my ($vers, $subvers) = $rev =~ m{version\s+(\d+)\s+subversion\s+(\d+)};
+ defined $vers && defined $subvers && defined $rel and
+ $config{version} = "$rel.$vers.$subvers";
+ next;
+ }
+
+ if (s/^\s+(Snapshot of:)\s+(\S+)//) {
+ $config{git_commit_id_title} = $1;
+ $config{git_commit_id} = $2;
+ next;
+ }
+
+ my %kv = m/\G,?\s*([^=]+)=('[^']+?'|\S+)/gc;
+
+ while (my ($k, $v) = each %kv) {
+ $k =~ s/\s+$//;
+ $v =~ s/,$//;
+ $v =~ m/^'(.*)'$/ and $v = $1;
+ $v =~ s/^\s+//;
+ $v =~ s/\s+$//;
+ $config{$k} = $v;
+ }
+ }
+ my $build = { %empty_build };
+ $build->{osname} = $config{osname};
+ return _make_derived ({
+ build => $build,
+ environment => {},
+ config => \%config,
+ derived => {},
+ inc => [],
+ });
+ } # plv2hash
+
+sub summary
+{
+ my $conf = shift || myconfig ();
+ ref $conf eq "HASH" &&
+ exists $conf->{config} && exists $conf->{build} or return;
+
+ my %info = map {
+ exists $conf->{config}{$_} ? ( $_ => $conf->{config}{$_} ) : () }
+ qw( archname osname osvers revision patchlevel subversion version
+ cc ccversion gccversion config_args inc_version_list
+ d_longdbl d_longlong use64bitall use64bitint useithreads
+ uselongdouble usemultiplicity usemymalloc useperlio useshrplib
+ doublesize intsize ivsize nvsize longdblsize longlongsize lseeksize
+ );
+ $info{$_}++ for grep { $conf->{build}{options}{$_} } keys %{$conf->{build}{options}};
+
+ return \%info;
+ } # summary
+
+sub signature
+{
+ eval { require Digest::MD5 };
+ $@ and return "00000000000000000000000000000000";
+
+ my $conf = shift || summary ();
+ delete $conf->{config_args};
+ return Digest::MD5::md5_hex (join "\xFF" => map {
+ "$_=".(defined $conf->{$_} ? $conf->{$_} : "\xFE");
+ } sort keys %$conf);
+ } # signature
+
+sub myconfig
+{
+ my $args = shift;
+ my %args = ref $args eq "HASH" ? %$args :
+ ref $args eq "ARRAY" ? @$args : ();
+
+ my $build = { %empty_build };
+
+ # 5.14.0 and later provide all the information without shelling out
+ my $stamp = eval { Config::compile_date () };
+ if (defined $stamp) {
+ $stamp =~ s/^Compiled at //;
+ $build->{osname} = $^O;
+ $build->{stamp} = $stamp;
+ $build->{patches} = [ Config::local_patches () ];
+ $build->{options}{$_} = 1 for Config::bincompat_options (),
+ Config::non_bincompat_options ();
+ }
+ else {
+ #y $pv = qx[$^X -e"sub Config::myconfig{};" -V];
+ my $pv = qx[$^X -V];
+ $pv =~ s{.*?\n\n}{}s;
+ $pv =~ s{\n(?: \s+|\t\s*)}{\0}g;
+
+ # print STDERR $pv;
+
+ $pv =~ m{^\s+Built under\s+(.*)}m
+ and $build->{osname} = $1;
+ $pv =~ m{^\s+Compiled at\s+(.*)}m
+ and $build->{stamp} = $1;
+ $pv =~ m{^\s+Locally applied patches:(?:\s+|\0)(.*)}m
+ and $build->{patches} = [ split m/\0+/, $1 ];
+ $pv =~ m{^\s+Compile-time options:(?:\s+|\0)(.*)}m
+ and map { $build->{options}{$_} = 1 } split m/\s+|\0/ => $1;
+ }
+
+ my @KEYS = keys %ENV;
+ my %env =
+ map { $_ => $ENV{$_} } grep m/^PERL/ => @KEYS;
+ $args{env} and
+ map { $env{$_} = $ENV{$_} } grep m{$args{env}} => @KEYS;
+
+ my %config = map { $_ => $Config{$_} } @config_vars;
+
+ return _make_derived ({
+ build => $build,
+ environment => \%env,
+ config => \%config,
+ derived => {},
+ inc => \@INC,
+ });
+ } # myconfig
+
+1;
+
+__END__
+
+=head1 NAME
+
+Config::Perl::V - Structured data retrieval of perl -V output
+
+=head1 SYNOPSIS
+
+ use Config::Perl::V;
+
+ my $local_config = Config::Perl::V::myconfig ();
+ print $local_config->{config}{osname};
+
+=head1 DESCRIPTION
+
+=head2 $conf = myconfig ()
+
+This function will collect the data described in L<the hash structure> below,
+and return that as a hash reference. It optionally accepts an option to
+include more entries from %ENV. See L<environment> below.
+
+Note that this will not work on uninstalled perls when called with
+C<-I/path/to/uninstalled/perl/lib>, but it works when that path is in
+C<$PERL5LIB> or in C<$PERL5OPT>, as paths passed using C<-I> are not
+known when the C<-V> information is collected.
+
+=head2 $conf = plv2hash ($text [, ...])
+
+Convert a sole 'perl -V' text block, or list of lines, to a complete
+myconfig hash. All unknown entries are defaulted.
+
+=head2 $info = summary ([$conf])
+
+Return an arbitrary selection of the information. If no C<$conf> is
+given, C<myconfig ()> is used instead.
+
+=head2 $md5 = signature ([$conf])
+
+Return the MD5 of the info returned by C<summary ()> without the
+C<config_args> entry.
+
+If C<Digest::MD5> is not available, it return a string with only C<0>'s.
+
+=head2 The hash structure
+
+The returned hash consists of 4 parts:
+
+=over 4
+
+=item build
+
+This information is extracted from the second block that is emitted by
+C<perl -V>, and usually looks something like
+
+ Characteristics of this binary (from libperl):
+ Compile-time options: DEBUGGING USE_64_BIT_INT USE_LARGE_FILES
+ Locally applied patches:
+ defined-or
+ MAINT24637
+ Built under linux
+ Compiled at Jun 13 2005 10:44:20
+ @INC:
+ /usr/lib/perl5/5.8.7/i686-linux-64int
+ /usr/lib/perl5/5.8.7
+ /usr/lib/perl5/site_perl/5.8.7/i686-linux-64int
+ /usr/lib/perl5/site_perl/5.8.7
+ /usr/lib/perl5/site_perl
+ .
+
+or
+
+ Characteristics of this binary (from libperl):
+ Compile-time options: DEBUGGING MULTIPLICITY
+ PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT
+ PERL_MALLOC_WRAP PERL_TRACK_MEMPOOL
+ PERL_USE_SAFE_PUTENV USE_ITHREADS
+ USE_LARGE_FILES USE_PERLIO
+ USE_REENTRANT_API
+ Built under linux
+ Compiled at Jan 28 2009 15:26:59
+
+This information is not available anywhere else, including C<%Config>,
+but it is the information that is only known to the perl binary.
+
+The extracted information is stored in 5 entries in the C<build> hash:
+
+=over 4
+
+=item osname
+
+This is most likely the same as C<$Config{osname}>, and was the name
+known when perl was built. It might be different if perl was cross-compiled.
+
+The default for this field, if it cannot be extracted, is to copy
+C<$Config{osname}>. The two may be differing in casing (OpenBSD vs openbsd).
+
+=item stamp
+
+This is the time string for which the perl binary was compiled. The default
+value is 0.
+
+=item options
+
+This is a hash with all the known defines as keys. The value is either 0,
+which means unknown or unset, or 1, which means defined.
+
+=item derived
+
+As some variables are reported by a different name in the output of C<perl -V>
+than their actual name in C<%Config>, I decided to leave the C<config> entry
+as close to reality as possible, and put in the entries that might have been
+guessed by the printed output in a separate block.
+
+=item patches
+
+This is a list of optionally locally applied patches. Default is an empty list.
+
+=back
+
+=item environment
+
+By default this hash is only filled with the environment variables
+out of %ENV that start with C<PERL>, but you can pass the C<env> option
+to myconfig to get more
+
+ my $conf = Config::Perl::V::myconfig ({ env => qr/^ORACLE/ });
+ my $conf = Config::Perl::V::myconfig ([ env => qr/^ORACLE/ ]);
+
+=item config
+
+This hash is filled with the variables that C<perl -V> fills its report
+with, and it has the same variables that C<Config::myconfig> returns
+from C<%Config>.
+
+=item inc
+
+This is the list of default @INC.
+
+=back
+
+=head1 REASONING
+
+This module was written to be able to return the configuration for the
+currently used perl as deeply as needed for the CPANTESTERS framework.
+Up until now they used the output of myconfig as a single text blob,
+and so it was missing the vital binary characteristics of the running
+perl and the optional applied patches.
+
+=head1 BUGS
+
+Please feedback what is wrong
+
+=head1 TODO
+
+ * Implement retrieval functions/methods
+ * Documentation
+ * Error checking
+ * Tests
+
+=head1 AUTHOR
+
+H.Merijn Brand <h.m.brand at xs4all.nl>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2009-2013 H.Merijn Brand
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Config-Perl-V/t/00_pod.t
===================================================================
--- vendor/perl/dist/cpan/Config-Perl-V/t/00_pod.t (rev 0)
+++ vendor/perl/dist/cpan/Config-Perl-V/t/00_pod.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+
+use Test::More;
+
+eval "use Test::Pod 1.00";
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
+all_pod_files_ok ();
Added: vendor/perl/dist/cpan/Config-Perl-V/t/01_pod.t
===================================================================
--- vendor/perl/dist/cpan/Config-Perl-V/t/01_pod.t (rev 0)
+++ vendor/perl/dist/cpan/Config-Perl-V/t/01_pod.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+
+use Test::More;
+
+eval "use Test::Pod::Coverage tests => 1";
+plan skip_all => "Test::Pod::Covarage required for testing POD Coverage" if $@;
+pod_coverage_ok ("Config::Perl::V", "Config::Perl::V is covered");
Added: vendor/perl/dist/cpan/Config-Perl-V/t/10_base.t
===================================================================
--- vendor/perl/dist/cpan/Config-Perl-V/t/10_base.t (rev 0)
+++ vendor/perl/dist/cpan/Config-Perl-V/t/10_base.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,35 @@
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 9;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+
+ use_ok ("Config::Perl::V");
+ }
+
+ok (my $conf = Config::Perl::V::myconfig, "Read config");
+for (qw( build environment config inc )) {
+ ok (exists $conf->{build}, "Has build entry");
+ }
+is (lc $conf->{build}{osname}, lc $conf->{config}{osname}, "osname");
+
+SKIP: {
+ # Test that the code that shells out to perl -V and parses the output
+ # gives the same results as the code that calls Config::* routines directly.
+ defined &Config::compile_date or
+ skip "This perl doesn't provide perl -V in the Config module", 2;
+ eval q{no warnings "redefine"; sub Config::compile_date { return undef }};
+ is (Config::compile_date (), undef, "Successfully overriden compile_date");
+ is_deeply (Config::Perl::V::myconfig, $conf,
+ "perl -V parsing code produces same result as the Config module");
+ }
Added: vendor/perl/dist/cpan/Config-Perl-V/t/20_plv.t
===================================================================
--- vendor/perl/dist/cpan/Config-Perl-V/t/20_plv.t (rev 0)
+++ vendor/perl/dist/cpan/Config-Perl-V/t/20_plv.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,57 @@
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 8;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+for (qw( build environment config inc )) {
+ ok (exists $conf->{build}, "Has build entry");
+ }
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, 0, "No build time known");
+is ($conf->{config}{version}, "5.10.0", "reconstructed \%Config{version}");
+
+__END__
+Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
+ Platform:
+ osname=linux, osvers=2.6.22.13-0.3-default, archname=i686-linux-64int
+ uname='linux nb09 2.6.22.13-0.3-default #1 smp 20071119 15:02:58 utc i686 i686 i386 gnulinux '
+ config_args='-Duse64bitint -des'
+ hint=recommended, useposix=true, d_sigaction=define
+ useithreads=undef, usemultiplicity=undef
+ useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
+ use64bitint=define, use64bitall=undef, uselongdouble=undef
+ usemymalloc=n, bincompat5005=undef
+ Compiler:
+ cc='cc', ccflags ='-fno-strict-aliasing -pipe -I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
+ optimize='-O2 -g',
+ cppflags='-fno-strict-aliasing -pipe -I/pro/local/include'
+ ccversion='', gccversion='4.2.1 (SUSE Linux)', gccosandvers=''
+ intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
+ ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
+ alignbytes=4, prototype=define
+ Linker and Libraries:
+ ld='cc', ldflags ='-L/pro/local/lib'
+ libpth=/pro/local/lib /lib /usr/lib /usr/local/lib
+ libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc
+ perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
+ libc=/lib/libc-2.6.1.so, so=so, useshrplib=false, libperl=libperl.a
+ gnulibc_version='2.6.1'
+ Dynamic Linking:
+ dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
+ cccdlflags='-fPIC', lddlflags='-shared -O2 -L/pro/local/lib'
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5008009
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5008009 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5008009 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.008009
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5010001
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5010001 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5010001 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+5.010001
+HeUTF8 # U
+croak_xs_usage # U
+mPUSHs # U
+mXPUSHs # U
+mro_get_from_name # U
+mro_get_private_data # U
+mro_register # U
+mro_set_mro # U
+mro_set_private_data # U
+newSVpvn_flags # U
+newSVpvn_utf8 # U
+newSVpvs_flags # U
+save_hints # U
+save_padsv_and_mortalize # U
+save_pushi32ptr # U
+save_pushptr # U
+save_pushptrptr # U
+sv_insert_flags # U
+DEFSV_set # added by devel/scanprov
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011001
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011001 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011001 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+5.011001
+ck_warner # U
+ck_warner_d # U
+is_utf8_perl_space # U
+is_utf8_perl_word # U
+is_utf8_posix_digit # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011002
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011002 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011002 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+5.011002
+PL_keyword_plugin # E
+lex_bufutf8 # U
+lex_discard_to # U
+lex_grow_linestr # U
+lex_next_chunk # U
+lex_peek_unichar # U
+lex_read_space # U
+lex_read_to # U
+lex_read_unichar # U
+lex_stuff_pvn # U
+lex_stuff_sv # U
+lex_unstuff # U
+pad_findmy # E (Perl_pad_findmy)
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011003
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011003 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011003 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.011003
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011004
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011004 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011004 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+5.011004
+prescan_version # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011005
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011005 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5011005 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+5.011005
+sv_pos_u2b_flags # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012000
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012000 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012000 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.012000
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012001
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012001 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012001 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.012001
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012002
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012002 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012002 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.012002
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012003
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012003 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5012003 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.012003
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013000
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013000 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013000 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.013000
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013001
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013001 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013001 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+5.013001
+croak_sv # U
+die_sv # U
+mess_sv # U
+sv_2nv_flags # U
+warn_sv # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013002
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013002 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013002 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
+5.013002
+SvNV_nomg # U
+find_rundefsv # U
+foldEQ # U
+foldEQ_locale # U
+foldEQ_utf8 # U
+hv_fill # U
+sv_dec_nomg # U
+sv_inc_nomg # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013003
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013003 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013003 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+5.013003
+blockhook_register # E
+croak_no_modify # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013004
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013004 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013004 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+5.013004
+XS_APIVERSION_BOOTCHECK # E
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013005
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013005 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013005 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+5.013005
+PL_rpeepp # E
+caller_cx # U
+isOCTAL # U
+lex_stuff_pvs # U
+parse_fullstmt # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013006
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013006 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013006 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,33 @@
+5.013006
+LINKLIST # U
+SvTRUE_nomg # U
+ck_entersub_args_list # U
+ck_entersub_args_proto # U
+ck_entersub_args_proto_or_list # U
+cv_get_call_checker # E
+cv_set_call_checker # E
+isWORDCHAR # U
+lex_stuff_pv # U
+mg_free_type # U
+newSVpv_share # U
+op_append_elem # U
+op_append_list # U
+op_contextualize # U
+op_linklist # U
+op_prepend_elem # U
+parse_stmtseq # U
+rv2cv_op_cv # U
+savesharedpvs # U
+savesharedsvpv # U
+sv_2bool_flags # U
+sv_catpv_flags # U
+sv_catpv_nomg # U
+sv_catpvs_flags # U
+sv_catpvs_mg # U
+sv_catpvs_nomg # U
+sv_cmp_flags # U
+sv_cmp_locale_flags # U
+sv_collxfrm_flags # U
+sv_eq_flags # U
+sv_setpvs_mg # U
+sv_setref_pvs # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013007
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013007 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013007 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
+5.013007
+HvENAME # U
+OP_CLASS # U
+SvPV_nomg_nolen # U
+XopFLAGS # E
+amagic_deref_call # U
+bytes_cmp_utf8 # U
+cop_hints_2hv # A
+cop_hints_fetch_pv # U
+cop_hints_fetch_pvn # U
+cop_hints_fetch_pvs # U
+cop_hints_fetch_sv # U
+cophh_2hv # E
+cophh_copy # E
+cophh_delete_pv # E
+cophh_delete_pvn # E
+cophh_delete_pvs # E
+cophh_delete_sv # E
+cophh_fetch_pv # E
+cophh_fetch_pvn # E
+cophh_fetch_pvs # E
+cophh_fetch_sv # E
+cophh_free # E
+cophh_store_pv # E
+cophh_store_pvn # E
+cophh_store_pvs # E
+cophh_store_sv # E
+custom_op_register # E
+custom_op_xop # E
+newFOROP # A
+newWHILEOP # A
+op_lvalue # U
+op_scope # U
+parse_barestmt # U
+parse_block # U
+parse_label # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013008
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013008 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013008 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,8 @@
+5.013008
+foldEQ_latin1 # U
+mg_findext # U
+parse_arithexpr # U
+parse_fullexpr # U
+parse_listexpr # U
+parse_termexpr # U
+sv_unmagicext # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013009
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013009 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013009 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.013009
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013010
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013010 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013010 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,4 @@
+5.013010
+foldEQ_utf8_flags # U
+is_utf8_xidcont # U
+is_utf8_xidfirst # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013011
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013011 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5013011 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.013011
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/base/5014000
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/base/5014000 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/base/5014000 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,38 @@
+5.014000
+BhkDISABLE # E
+BhkENABLE # E
+BhkENTRY_set # E
+MULTICALL # E
+PERL_SYS_TERM # E
+POP_MULTICALL # E
+PUSH_MULTICALL # E
+XopDISABLE # E
+XopENABLE # E
+XopENTRY # E
+XopENTRY_set # E
+cophh_new_empty # E
+my_lstat # U (Perl_my_lstat)
+my_stat # U (Perl_my_stat)
+ref # U (Perl_ref)
+stashpv_hvname_match # U
+sv_magic_portable # U
+PERL_BCDVERSION # added by devel/scanprov
+PERL_MAGIC_glob # added by devel/scanprov
+PERL_MAGIC_mutex # added by devel/scanprov
+PL_bufend # added by devel/scanprov
+PL_bufptr # added by devel/scanprov
+PL_copline # added by devel/scanprov
+PL_error_count # added by devel/scanprov
+PL_expect # added by devel/scanprov
+PL_in_my # added by devel/scanprov
+PL_in_my_stash # added by devel/scanprov
+PL_lex_state # added by devel/scanprov
+PL_lex_stuff # added by devel/scanprov
+PL_linestr # added by devel/scanprov
+PL_rsfp # added by devel/scanprov
+PL_rsfp_filters # added by devel/scanprov
+PL_tokenbuf # added by devel/scanprov
+WARN_ASSERTIONS # added by devel/scanprov
+aTHXR # added by devel/scanprov
+aTHXR_ # added by devel/scanprov
+dTHXR # added by devel/scanprov
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5008009
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5008009 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5008009 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.008009
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5010001
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5010001 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5010001 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+5.010001
+HeUTF8 # U
+croak_xs_usage # U
+mro_get_from_name # U
+mro_get_private_data # U
+mro_register # U
+mro_set_mro # U
+mro_set_private_data # U
+save_hints # U
+save_padsv_and_mortalize # U
+save_pushi32ptr # U
+save_pushptr # U
+save_pushptrptr # U
+sv_insert_flags # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011001
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011001 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011001 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+5.011001
+ck_warner # U
+ck_warner_d # U
+is_utf8_perl_space # U
+is_utf8_perl_word # U
+is_utf8_posix_digit # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011002
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011002 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011002 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+5.011002
+PL_keyword_plugin # E
+lex_bufutf8 # U
+lex_discard_to # U
+lex_grow_linestr # U
+lex_next_chunk # U
+lex_peek_unichar # U
+lex_read_space # U
+lex_read_to # U
+lex_read_unichar # U
+lex_stuff_pvn # U
+lex_stuff_sv # U
+lex_unstuff # U
+pad_findmy # E (Perl_pad_findmy)
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011003
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011003 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011003 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.011003
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011004
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011004 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011004 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+5.011004
+prescan_version # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011005
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011005 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5011005 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+5.011005
+sv_pos_u2b_flags # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012000
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012000 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012000 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.012000
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012001
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012001 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012001 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.012001
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012002
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012002 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012002 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.012002
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012003
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012003 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5012003 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.012003
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013000
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013000 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013000 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.013000
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013001
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013001 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013001 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+5.013001
+croak_sv # U
+die_sv # U
+mess_sv # U
+sv_2nv_flags # U
+warn_sv # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013002
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013002 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013002 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
+5.013002
+SvNV_nomg # U
+find_rundefsv # U
+foldEQ # U
+foldEQ_locale # U
+foldEQ_utf8 # U
+hv_fill # U
+sv_dec_nomg # U
+sv_inc_nomg # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013003
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013003 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013003 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+5.013003
+blockhook_register # E
+croak_no_modify # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013004
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013004 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013004 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+5.013004
+XS_APIVERSION_BOOTCHECK # E
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013005
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013005 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013005 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+5.013005
+PL_rpeepp # E
+caller_cx # U
+isOCTAL # U
+lex_stuff_pvs # U
+parse_fullstmt # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013006
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013006 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013006 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,33 @@
+5.013006
+LINKLIST # U
+SvTRUE_nomg # U
+ck_entersub_args_list # U
+ck_entersub_args_proto # U
+ck_entersub_args_proto_or_list # U
+cv_get_call_checker # E
+cv_set_call_checker # E
+isWORDCHAR # U
+lex_stuff_pv # U
+mg_free_type # U
+newSVpv_share # U
+op_append_elem # U
+op_append_list # U
+op_contextualize # U
+op_linklist # U
+op_prepend_elem # U
+parse_stmtseq # U
+rv2cv_op_cv # U
+savesharedpvs # U
+savesharedsvpv # U
+sv_2bool_flags # U
+sv_catpv_flags # U
+sv_catpv_nomg # U
+sv_catpvs_flags # U
+sv_catpvs_mg # U
+sv_catpvs_nomg # U
+sv_cmp_flags # U
+sv_cmp_locale_flags # U
+sv_collxfrm_flags # U
+sv_eq_flags # U
+sv_setpvs_mg # U
+sv_setref_pvs # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013007
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013007 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013007 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
+5.013007
+HvENAME # U
+OP_CLASS # U
+SvPV_nomg_nolen # U
+XopFLAGS # E
+amagic_deref_call # U
+bytes_cmp_utf8 # U
+cop_hints_2hv # A
+cop_hints_fetch_pv # U
+cop_hints_fetch_pvn # U
+cop_hints_fetch_pvs # U
+cop_hints_fetch_sv # U
+cophh_2hv # E
+cophh_copy # E
+cophh_delete_pv # E
+cophh_delete_pvn # E
+cophh_delete_pvs # E
+cophh_delete_sv # E
+cophh_fetch_pv # E
+cophh_fetch_pvn # E
+cophh_fetch_pvs # E
+cophh_fetch_sv # E
+cophh_free # E
+cophh_store_pv # E
+cophh_store_pvn # E
+cophh_store_pvs # E
+cophh_store_sv # E
+custom_op_register # E
+custom_op_xop # E
+newFOROP # A
+newWHILEOP # A
+op_lvalue # U
+op_scope # U
+parse_barestmt # U
+parse_block # U
+parse_label # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013008
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013008 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013008 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,8 @@
+5.013008
+foldEQ_latin1 # U
+mg_findext # U
+parse_arithexpr # U
+parse_fullexpr # U
+parse_listexpr # U
+parse_termexpr # U
+sv_unmagicext # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013009
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013009 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013009 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.013009
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013010
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013010 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013010 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,4 @@
+5.013010
+foldEQ_utf8_flags # U
+is_utf8_xidcont # U
+is_utf8_xidfirst # U
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013011
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013011 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5013011 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+5.013011
Added: vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5014000
===================================================================
--- vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5014000 (rev 0)
+++ vendor/perl/dist/cpan/Devel-PPPort/parts/todo/5014000 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,17 @@
+5.014000
+BhkDISABLE # E
+BhkENABLE # E
+BhkENTRY_set # E
+MULTICALL # E
+PERL_SYS_TERM # E
+POP_MULTICALL # E
+PUSH_MULTICALL # E
+XopDISABLE # E
+XopENABLE # E
+XopENTRY # E
+XopENTRY_set # E
+cophh_new_empty # E
+my_lstat # U (Perl_my_lstat)
+my_stat # U (Perl_my_stat)
+ref # U (Perl_ref)
+stashpv_hvname_match # U
Added: vendor/perl/dist/cpan/Digest/t/lib/Digest/Dummy.pm
===================================================================
--- vendor/perl/dist/cpan/Digest/t/lib/Digest/Dummy.pm (rev 0)
+++ vendor/perl/dist/cpan/Digest/t/lib/Digest/Dummy.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+package Digest::Dummy;
+
+use strict;
+use vars qw($VERSION @ISA);
+$VERSION = 1;
+
+require Digest::base;
+ at ISA = qw(Digest::base);
+
+sub new {
+ my $class = shift;
+ my $d = shift || "ooo";
+ bless { d => $d }, $class;
+}
+
+sub add {}
+sub digest { shift->{d} }
+
+1;
+
Added: vendor/perl/dist/cpan/Digest/t/security.t
===================================================================
--- vendor/perl/dist/cpan/Digest/t/security.t (rev 0)
+++ vendor/perl/dist/cpan/Digest/t/security.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl
+
+# Digest->new() had an exploitable eval
+
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+use Digest;
+
+$LOL::PWNED = 0;
+eval { Digest->new(q[MD;5;$LOL::PWNED = 42]) };
+is $LOL::PWNED, 0;
Added: vendor/perl/dist/cpan/Digest-SHA/t/unicode.t
===================================================================
--- vendor/perl/dist/cpan/Digest-SHA/t/unicode.t (rev 0)
+++ vendor/perl/dist/cpan/Digest-SHA/t/unicode.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,43 @@
+use strict;
+
+my $MODULE;
+
+BEGIN {
+ $MODULE = (-d "src") ? "Digest::SHA" : "Digest::SHA::PurePerl";
+ eval "require $MODULE" || die $@;
+ $MODULE->import(qw(sha1_hex));
+}
+
+BEGIN {
+ if ($ENV{PERL_CORE}) {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+}
+
+my $skip = $] < 5.006 ? 1 : 0;
+
+my $TEMPLATE = $] >= 5.006 ? 'U*' : 'C*';
+my $empty_unicode = pack($TEMPLATE, ());
+my $ok_unicode = pack($TEMPLATE, (0..255));
+my $wide_unicode = pack($TEMPLATE, (0..256));
+
+print "1..3\n";
+
+unless ($skip) {
+ print "not " unless sha1_hex($empty_unicode."abc") eq
+ "a9993e364706816aba3e25717850c26c9cd0d89d";
+}
+print "ok 1", $skip ? " # skip: no Unicode" : "", "\n";
+
+unless ($skip) {
+ print "not " unless sha1_hex($ok_unicode) eq
+ "4916d6bdb7f78e6803698cab32d1586ea457dfc8";
+}
+print "ok 2", $skip ? " # skip: no Unicode" : "", "\n";
+
+unless ($skip) {
+ eval { sha1_hex($wide_unicode) };
+ print "not " unless $@ =~ /Wide character/;
+}
+print "ok 3", $skip ? " # skip: no Unicode" : "", "\n";
Added: vendor/perl/dist/cpan/Encode/META.json
===================================================================
--- vendor/perl/dist/cpan/Encode/META.json (rev 0)
+++ vendor/perl/dist/cpan/Encode/META.json 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,39 @@
+{
+ "abstract" : "unknown",
+ "author" : [
+ "unknown"
+ ],
+ "dynamic_config" : 1,
+ "generated_by" : "ExtUtils::MakeMaker version 6.64, CPAN::Meta::Converter version 2.120921",
+ "license" : [
+ "perl_5"
+ ],
+ "meta-spec" : {
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+ "version" : "2"
+ },
+ "name" : "Encode",
+ "no_index" : {
+ "directory" : [
+ "t",
+ "inc"
+ ]
+ },
+ "prereqs" : {
+ "build" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0"
+ }
+ },
+ "configure" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0"
+ }
+ },
+ "runtime" : {
+ "requires" : {}
+ }
+ },
+ "release_status" : "stable",
+ "version" : "2.49"
+}
Added: vendor/perl/dist/cpan/ExtUtils-MakeMaker/README.packaging
===================================================================
--- vendor/perl/dist/cpan/ExtUtils-MakeMaker/README.packaging (rev 0)
+++ vendor/perl/dist/cpan/ExtUtils-MakeMaker/README.packaging 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+If you wish to package MakeMaker in a binary package, here's some tips.
+
+tl;dr version:
+
+1a) Set the BUILDING_AS_PACKAGE environment variable to a true value.
+OR
+1b) Set the $BUILDING_AS_PACKAGE variable in the Makefile.PL to true.
+2) Package normally, but watch out for dependency loops.
+
+MakeMaker cannot have any dependencies, everything depends on it and
+that would be a dependency loop. It instead bundles pre-built copies
+of all its non-core dependencies in the bundled/ directory. It adds
+them to itself if they're not already installed.
+
+This can confuse packagers, it makes it look like MakeMaker contains a
+lot more modules than it really does and causes conflicts.
+
+You can tell MakeMaker not to use it's bundles and instead declare the
+dependencies normally. This is done either by setting the
+BUILDING_AS_PACKAGE environment variable to true or by patching the
+Makefile.PL and setting $BUILDING_AS_PACKAGE to true. On the down
+side, there will be dependency loops which your packaging system will
+have to resolve.
Added: vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/01perl_bugs.t
===================================================================
--- vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/01perl_bugs.t (rev 0)
+++ vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/01perl_bugs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl -w
+
+# Inform the user early and clearly that their Perl is broken beyond redemption
+
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+use Test::More;
+
+note "The 0.01 / Gconvert bug"; {
+ my $number = 0.01;
+ my $string = "VERSION=$number";
+
+ is "VERSION=$number", "VERSION=0.01" or do {
+ diag <<END;
+Sorry, but your perl's ability to translate decimal numbers to strings
+is broken. You should probably recompile it with -Dd_Gconvert=sprintf
+or upgrade to a newer version of Perl.
+END
+ };
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing.json
===================================================================
--- vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing.json (rev 0)
+++ vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing.json 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,60 @@
+{
+ "abstract" : "Create a module Makefile",
+ "author" : [
+ "Michael G Schwern <schwern at pobox.com>"
+ ],
+ "dynamic_config" : 1,
+ "generated_by" : "ExtUtils::MakeMaker version 6.5707, CPAN::Meta::Converter version 2.110580",
+ "license" : [
+ "perl_5"
+ ],
+ "meta-spec" : {
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+ "version" : "2"
+ },
+ "name" : "ExtUtils-MakeMaker",
+ "no_index" : {
+ "directory" : [
+ "t",
+ "inc"
+ ],
+ "package" : [
+ "DynaLoader",
+ "in"
+ ]
+ },
+ "prereqs" : {
+ "build" : {
+ "requires" : {
+ "Data::Dumper" : 0
+ }
+ },
+ "configure" : {
+ "requires" : {}
+ },
+ "runtime" : {
+ "requires" : {
+ "DirHandle" : 0,
+ "File::Basename" : 0,
+ "File::Spec" : "0.8",
+ "Pod::Man" : 0,
+ "perl" : "5.006"
+ }
+ }
+ },
+ "release_status" : "testing",
+ "resources" : {
+ "bugtracker" : {
+ "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker"
+ },
+ "homepage" : "http://makemaker.org",
+ "license" : [
+ "http://dev.perl.org/licenses/"
+ ],
+ "repository" : {
+ "url" : "http://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker"
+ },
+ "x_MailingList" : "makemaker at perl.org"
+ },
+ "version" : "6.57_07"
+}
Added: vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing.yml
===================================================================
--- vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing.yml (rev 0)
+++ vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing.yml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,34 @@
+---
+abstract: 'Create a module Makefile'
+author:
+ - 'Michael G Schwern <schwern at pobox.com>'
+build_requires:
+ Data::Dumper: 0
+configure_requires: {}
+dynamic_config: 1
+generated_by: 'ExtUtils::MakeMaker version 6.5707, CPAN::Meta::Converter version 2.110580'
+license: perl
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
+name: ExtUtils-MakeMaker
+no_index:
+ directory:
+ - t
+ - inc
+ package:
+ - DynaLoader
+ - in
+requires:
+ DirHandle: 0
+ File::Basename: 0
+ File::Spec: 0.8
+ Pod::Man: 0
+ perl: 5.006
+resources:
+ bugtracker: http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker
+ homepage: http://makemaker.org
+ license: http://dev.perl.org/licenses/
+ repository: http://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker
+ x_MailingList: makemaker at perl.org
+version: 6.57_07
Added: vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing_tricky_version.yml
===================================================================
--- vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing_tricky_version.yml (rev 0)
+++ vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/META_for_testing_tricky_version.yml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+--- #YAML:1.0
+name: GD-Barcode-Code93
+version: 1.4
+abstract: Code 93 implementation of GD::Barcode family
+author:
+ - Chris DiMartino
+license: unknown
+distribution_type: module
+configure_requires:
+ ExtUtils::MakeMaker: 0
+build_requires:
+ ExtUtils::MakeMaker: 0
+requires:
+ GD: 0
+ GD::Barcode: 0
+no_index:
+ directory:
+ - t
+ - inc
+generated_by: ExtUtils::MakeMaker version 6.55_02
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
Added: vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/echo.t
===================================================================
--- vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/echo.t (rev 0)
+++ vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/echo.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,114 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ unshift @INC, 't/lib';
+}
+
+use strict;
+use warnings;
+
+use Carp;
+use Config;
+use ExtUtils::MM;
+use MakeMaker::Test::Utils;
+use File::Temp;
+use Cwd 'abs_path';
+
+use Test::More;
+
+
+#--------------------- Setup
+
+my $cwd = abs_path;
+my $perl = which_perl;
+my $make = make_run();
+my $mm = bless { NAME => "Foo", MAKE => $Config{make}, PARENT_NAME => '' }, "MM";
+$mm->init_INST; # *PERLRUN needs INIT_*
+$mm->init_PERL; # generic ECHO needs ABSPERLRUN
+$mm->init_tools; # need ECHO
+
+# Run Perl with the currently installing MakeMaker
+$mm->{$_} .= q[ "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"] for qw( PERLRUN FULLPERLRUN ABSPERLRUN );
+
+#------------------- Testing functions
+
+sub test_for_echo {
+ my($calls, $want, $name) = @_;
+ my $output_file = $calls->[0][1];
+
+ note "Testing $name";
+
+ my $dir = File::Temp->newdir();
+ chdir $dir;
+ note "Temp dir: $dir";
+
+ # Write a Makefile to test the output of echo
+ {
+ open my $makefh, ">", "Makefile" or croak "Can't open Makefile: $!";
+ print $makefh "FOO=42\n"; # a variable to test with
+
+ for my $key (qw(INST_ARCHLIB INST_LIB PERL ABSPERL ABSPERLRUN ECHO)) {
+ print $makefh "$key=$mm->{$key}\n";
+ }
+
+ print $makefh "all :\n";
+ for my $args (@$calls) {
+ print $makefh map { "\t$_\n" } $mm->echo(@$args);
+ }
+ }
+
+ # Run the Makefile
+ ok run($make), "make: $name";
+
+ # Check it made the file in question
+ ok -e $output_file, "$output_file exists";
+ open my $fh, "<", $output_file or croak "Can't open $output_file: $!";
+ is join("", <$fh>), $want, "contents";
+
+ chdir $cwd;
+}
+
+
+#---------------- Tests begin
+
+test_for_echo(
+ [["Foo", "bar.txt"]],
+ "Foo\n",
+ "simple echo"
+);
+
+test_for_echo(
+ [["Foo\nBar\nBaz Biff\n", "something.txt"]],
+ "Foo\nBar\nBaz Biff\n",
+ "multiline echo"
+);
+
+test_for_echo(
+ [['$something$', "something.txt"]],
+ '$something$'."\n",
+ "dollar signs escaped"
+);
+
+test_for_echo(
+ [['$(something)', "something.txt"]],
+ '$(something)'."\n",
+ "variables escaped"
+);
+
+test_for_echo(
+ [['Answer: $(FOO)', "bar.txt", { allow_variables => 1 }]],
+ "Answer: 42\n",
+ "allow_variables"
+);
+
+test_for_echo(
+ [
+ ["Foo", "bar.txt"],
+ ["Bar", "bar.txt", { append => 1 }],
+ ["Baz", "bar.txt", 1],
+ ],
+ "Foo\nBar\nBaz\n",
+ "append"
+);
+
+done_testing;
Added: vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/meta_convert.t
===================================================================
--- vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/meta_convert.t (rev 0)
+++ vendor/perl/dist/cpan/ExtUtils-MakeMaker/t/meta_convert.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,127 @@
+BEGIN {
+ chdir '..' if -d '../t';
+ unshift @INC, 't/lib';
+ use lib 'lib';
+}
+
+use strict;
+use warnings;
+use Test::More 'no_plan';
+
+require ExtUtils::MM_Any;
+
+sub ExtUtils::MM_Any::quote_literal { $_[1] }
+
+my $new_mm = sub {
+ return bless { ARGS => {@_}, @_ }, 'ExtUtils::MM_Any';
+};
+
+my $warn_ok = sub {
+ my($code, $want, $name) = @_;
+
+ my @have;
+ my $ret;
+ {
+ local $SIG{__WARN__} = sub { push @have, @_ };
+ $ret = $code->();
+ }
+
+ like join("", @have), $want, $name;
+ return $ret;
+};
+
+my $version_regex = qr/version: ''/;
+my $version_action = "they're converted to empty string";
+
+
+note "Filename as version"; {
+ my $mm = $new_mm->(
+ DISTNAME => 'Net::FTP::Recursive',
+ VERSION => 'Recursive.pm',
+ );
+
+ my $res = $warn_ok->(
+ sub { eval { $mm->metafile_target } },
+ qr{Can't parse version 'Recursive.pm'}
+ );
+ ok $res, 'we know how to deal with bogus versions defined in Makefile.PL';
+ like $res, $version_regex, $version_action;
+}
+
+
+note "'undef' version from parse_version"; {
+ my $mm = $new_mm->(
+ DISTNAME => 'Image::Imgur',
+ VERSION => 'undef',
+ );
+ my $res = $warn_ok->(
+ sub { eval { $mm->metafile_target } },
+ qr{Can't parse version 'undef'}
+ );
+ ok $res, q|when there's no $VERSION in Module.pm, $self->{VERSION} = 'undef'; via MM_Unix::parse_version and we know how to deal with that|;
+ like $res, $version_regex, $version_action;
+}
+
+
+note "x.y.z version"; {
+ my $mm = $new_mm->(
+ DISTNAME => 'SQL::Library',
+ VERSION => 0.0.3,
+ );
+
+ # It would be more useful if the warning got translated to visible characters
+ my $res = $warn_ok->(
+ sub { eval { $mm->metafile_target } },
+ qr{Can't parse version '\x00\x00\x03'}
+ );
+ ok $res, q|we know how to deal with our $VERSION = 0.0.3; style versions defined in the module|;
+ like $res, $version_regex, $version_action;
+}
+
+
+note ".5 version"; {
+ my $mm = $new_mm->(
+ DISTNAME => 'Array::Suffix',
+ VERSION => '.5',
+ );
+ my $res = $warn_ok->(
+ sub { eval { $mm->metafile_target } },
+ qr{Can't parse version '.5'}
+ );
+ ok $res, q|we know how to deal with our $VERSION = '.5'; style versions defined in the module|;
+ like $res, $version_regex, $version_action;
+}
+
+
+note "Non-camel case metadata"; {
+ my $mm = $new_mm->(
+ DISTNAME => 'Attribute::Signature',
+ META_MERGE => {
+ resources => {
+ repository => 'http://github.com/chorny/Attribute-Signature',
+ 'Repository-clone' => 'git://github.com/chorny/Attribute-Signature.git',
+ },
+ },
+ );
+ my $res = eval { $mm->metafile_target };
+ ok $res, q|we know how to deal with non-camel-cased custom meta resource keys defined in Makefile.PL|;
+ like $res, qr/x_Repositoryclone:/, "they're camel-cased";
+}
+
+
+note "version object in provides"; {
+ my $mm = $new_mm->(
+ DISTNAME => 'CPAN::Testers::ParseReport',
+ VERSION => '2.34',
+ META_ADD => {
+ provides => {
+ "CPAN::Testers::ParseReport" => {
+ version => version->declare("v1.2.3"),
+ file => "lib/CPAN/Testers/ParseReport.pm"
+ }
+ }
+ },
+ );
+ my $res = eval { $mm->metafile_target };
+ like $res, qr{version: \s* v1.2.3}x;
+}
Added: vendor/perl/dist/cpan/File-CheckTree/lib/File/CheckTree.pm
===================================================================
--- vendor/perl/dist/cpan/File-CheckTree/lib/File/CheckTree.pm (rev 0)
+++ vendor/perl/dist/cpan/File-CheckTree/lib/File/CheckTree.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,240 @@
+package File::CheckTree;
+
+use 5.006;
+use Cwd;
+use Exporter;
+use File::Spec;
+use warnings;
+use strict;
+
+use if $] > 5.017, 'deprecate';
+
+our $VERSION = '4.42';
+our @ISA = qw(Exporter);
+our @EXPORT = qw(validate);
+
+=head1 NAME
+
+File::CheckTree - run many filetest checks on a tree
+
+=head1 SYNOPSIS
+
+ use File::CheckTree;
+
+ $num_warnings = validate( q{
+ /vmunix -e || die
+ /boot -e || die
+ /bin cd
+ csh -ex
+ csh !-ug
+ sh -ex
+ sh !-ug
+ /usr -d || warn "What happened to $file?\n"
+ });
+
+=head1 DESCRIPTION
+
+The validate() routine takes a single multiline string consisting of
+directives, each containing a filename plus a file test to try on it.
+(The file test may also be a "cd", causing subsequent relative filenames
+to be interpreted relative to that directory.) After the file test
+you may put C<|| die> to make it a fatal error if the file test fails.
+The default is C<|| warn>. The file test may optionally have a "!' prepended
+to test for the opposite condition. If you do a cd and then list some
+relative filenames, you may want to indent them slightly for readability.
+If you supply your own die() or warn() message, you can use $file to
+interpolate the filename.
+
+Filetests may be bunched: "-rwx" tests for all of C<-r>, C<-w>, and C<-x>.
+Only the first failed test of the bunch will produce a warning.
+
+The routine returns the number of warnings issued.
+
+=head1 AUTHOR
+
+File::CheckTree was derived from lib/validate.pl which was
+written by Larry Wall.
+Revised by Paul Grassie <F<grassie at perl.com>> in 2002.
+
+=head1 HISTORY
+
+File::CheckTree used to not display fatal error messages.
+It used to count only those warnings produced by a generic C<|| warn>
+(and not those in which the user supplied the message). In addition,
+the validate() routine would leave the user program in whatever
+directory was last entered through the use of "cd" directives.
+These bugs were fixed during the development of perl 5.8.
+The first fixed version of File::CheckTree was 4.2.
+
+=cut
+
+my $Warnings;
+
+sub validate {
+ my ($starting_dir, $file, $test, $cwd, $oldwarnings);
+
+ $starting_dir = cwd;
+
+ $cwd = "";
+ $Warnings = 0;
+
+ foreach my $check (split /\n/, $_[0]) {
+ my ($testlist, @testlist);
+
+ # skip blanks/comments
+ next if $check =~ /^\s*#/ || $check =~ /^\s*$/;
+
+ # Todo:
+ # should probably check for invalid directives and die
+ # but earlier versions of File::CheckTree did not do this either
+
+ # split a line like "/foo -r || die"
+ # so that $file is "/foo", $test is "-r || die"
+ # (making special allowance for quoted filenames).
+ if ($check =~ m/^\s*"([^"]+)"\s+(.*?)\s*$/ or
+ $check =~ m/^\s*'([^']+)'\s+(.*?)\s*$/ or
+ $check =~ m/^\s*(\S+?)\s+(\S.*?)\s*$/)
+ {
+ ($file, $test) = ($1,$2);
+ }
+ else {
+ die "Malformed line: '$check'";
+ };
+
+ # change a $test like "!-ug || die" to "!-Z || die",
+ # capturing the bundled tests (e.g. "ug") in $2
+ if ($test =~ s/ ^ (!?-) (\w{2,}) \b /$1Z/x) {
+ $testlist = $2;
+ # split bundled tests, e.g. "ug" to 'u', 'g'
+ @testlist = split(//, $testlist);
+ }
+ else {
+ # put in placeholder Z for stand-alone test
+ @testlist = ('Z');
+ }
+
+ # will compare these two later to stop on 1st warning w/in a bundle
+ $oldwarnings = $Warnings;
+
+ foreach my $one (@testlist) {
+ # examples of $test: "!-Z || die" or "-w || warn"
+ my $this = $test;
+
+ # expand relative $file to full pathname if preceded by cd directive
+ $file = File::Spec->catfile($cwd, $file)
+ if $cwd && !File::Spec->file_name_is_absolute($file);
+
+ # put filename in after the test operator
+ $this =~ s/(-\w\b)/$1 "\$file"/g;
+
+ # change the "-Z" representing a bundle with the $one test
+ $this =~ s/-Z/-$one/;
+
+ # if it's a "cd" directive...
+ if ($this =~ /^cd\b/) {
+ # add "|| die ..."
+ $this .= ' || die "cannot cd to $file\n"';
+ # expand "cd" directive with directory name
+ $this =~ s/\bcd\b/chdir(\$cwd = '$file')/;
+ }
+ else {
+ # add "|| warn" as a default disposition
+ $this .= ' || warn' unless $this =~ /\|\|/;
+
+ # change a generic ".. || die" or ".. || warn"
+ # to call valmess instead of die/warn directly
+ # valmess will look up the error message from %Val_Message
+ $this =~ s/ ^ ( (\S+) \s+ \S+ ) \s* \|\| \s* (die|warn) \s* $
+ /$1 || valmess('$3', '$2', \$file)/x;
+ }
+
+ {
+ # count warnings, either from valmess or '-r || warn "my msg"'
+ # also, call any pre-existing signal handler for __WARN__
+ my $orig_sigwarn = $SIG{__WARN__};
+ local $SIG{__WARN__} = sub {
+ ++$Warnings;
+ if ( $orig_sigwarn ) {
+ $orig_sigwarn->(@_);
+ }
+ else {
+ warn "@_";
+ }
+ };
+
+ # do the test
+ eval $this;
+
+ # re-raise an exception caused by a "... || die" test
+ if (my $err = $@) {
+ # in case of any cd directives, return from whence we came
+ if ($starting_dir ne cwd) {
+ chdir($starting_dir) || die "$starting_dir: $!";
+ }
+ die $err;
+ }
+ }
+
+ # stop on 1st warning within a bundle of tests
+ last if $Warnings > $oldwarnings;
+ }
+ }
+
+ # in case of any cd directives, return from whence we came
+ if ($starting_dir ne cwd) {
+ chdir($starting_dir) || die "chdir $starting_dir: $!";
+ }
+
+ return $Warnings;
+}
+
+my %Val_Message = (
+ 'r' => "is not readable by uid $>.",
+ 'w' => "is not writable by uid $>.",
+ 'x' => "is not executable by uid $>.",
+ 'o' => "is not owned by uid $>.",
+ 'R' => "is not readable by you.",
+ 'W' => "is not writable by you.",
+ 'X' => "is not executable by you.",
+ 'O' => "is not owned by you.",
+ 'e' => "does not exist.",
+ 'z' => "does not have zero size.",
+ 's' => "does not have non-zero size.",
+ 'f' => "is not a plain file.",
+ 'd' => "is not a directory.",
+ 'l' => "is not a symbolic link.",
+ 'p' => "is not a named pipe (FIFO).",
+ 'S' => "is not a socket.",
+ 'b' => "is not a block special file.",
+ 'c' => "is not a character special file.",
+ 'u' => "does not have the setuid bit set.",
+ 'g' => "does not have the setgid bit set.",
+ 'k' => "does not have the sticky bit set.",
+ 'T' => "is not a text file.",
+ 'B' => "is not a binary file."
+);
+
+sub valmess {
+ my ($disposition, $test, $file) = @_;
+ my $ferror;
+
+ if ($test =~ / ^ (!?) -(\w) \s* $ /x) {
+ my ($neg, $ftype) = ($1, $2);
+
+ $ferror = "$file $Val_Message{$ftype}";
+
+ if ($neg eq '!') {
+ $ferror =~ s/ is not / should not be / ||
+ $ferror =~ s/ does not / should not / ||
+ $ferror =~ s/ not / /;
+ }
+ }
+ else {
+ $ferror = "Can't do $test $file.\n";
+ }
+
+ die "$ferror\n" if $disposition eq 'die';
+ warn "$ferror\n";
+}
+
+1;
Added: vendor/perl/dist/cpan/File-CheckTree/t/CheckTree.t
===================================================================
--- vendor/perl/dist/cpan/File-CheckTree/t/CheckTree.t (rev 0)
+++ vendor/perl/dist/cpan/File-CheckTree/t/CheckTree.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,181 @@
+#!./perl -w
+
+use Test::More tests => 23;
+
+use strict;
+
+require overload;
+
+use File::CheckTree;
+use File::Spec; # used to get absolute paths
+
+# We assume that we start from the dist/File-CheckTree in the perl repository,
+# or the dist root directory for the CPAN version.
+
+
+#### TEST 1 -- No warnings ####
+# usings both relative and full paths, indented comments
+
+{
+ my ($num_warnings, $path_to_libFileCheckTree);
+ $path_to_libFileCheckTree = File::Spec->rel2abs(
+ File::Spec->catfile('lib', 'File', 'CheckTree.pm'),
+ );
+
+ my @warnings;
+ local $SIG{__WARN__} = sub { push @warnings, "@_" };
+
+ eval {
+ $num_warnings = validate qq{
+ lib -d
+# comment, followed "blank" line (w/ whitespace):
+
+ # indented comment, followed blank line (w/o whitespace):
+
+ lib/File/CheckTree.pm -f
+ '$path_to_libFileCheckTree' -e || warn
+ };
+ };
+
+ diag($_) for @warnings;
+ is( $@, '' );
+ is( scalar @warnings, 0 );
+ is( $num_warnings, 0 );
+}
+
+
+#### TEST 2 -- One warning ####
+
+{
+ my ($num_warnings, @warnings);
+
+ local $SIG{__WARN__} = sub { push @warnings, "@_" };
+
+ eval {
+ $num_warnings = validate qq{
+ lib -f
+ lib/File/CheckTree.pm -f
+ };
+ };
+
+ is( $@, '' );
+ is( scalar @warnings, 1 );
+ like( $warnings[0], qr/lib is not a plain file/);
+ is( $num_warnings, 1 );
+}
+
+
+#### TEST 3 -- Multiple warnings ####
+# including first warning only from a bundle of tests,
+# generic "|| warn", default "|| warn" and "|| warn '...' "
+
+{
+ my ($num_warnings, @warnings);
+
+ local $SIG{__WARN__} = sub { push @warnings, "@_" };
+
+ eval {
+ $num_warnings = validate q{
+ lib -effd
+ lib/File/CheckTree.pm -f || die
+ lib/File/CheckTree.pm -d || warn
+ lib -f || warn "my warning: $file\n"
+ };
+ };
+
+ is( $@, '' );
+ is( scalar @warnings, 3 );
+ like( $warnings[0], qr/lib is not a plain file/);
+ like( $warnings[1], qr{lib/File/CheckTree.pm is not a directory});
+ like( $warnings[2], qr/my warning: lib/);
+ is( $num_warnings, 3 );
+}
+
+
+#### TEST 4 -- cd directive ####
+# cd directive followed by relative paths, followed by full paths
+{
+ my ($num_warnings, @warnings, $path_to_lib, $path_to_dist);
+ $path_to_lib = File::Spec->rel2abs(File::Spec->catdir('lib'));
+ $path_to_dist = File::Spec->rel2abs(File::Spec->curdir);
+
+ local $SIG{__WARN__} = sub { push @warnings, "@_" };
+
+ eval {
+ $num_warnings = validate qq{
+ lib -d || die
+ '$path_to_lib' cd
+ File -e
+ File -f
+ '$path_to_dist' cd
+ lib/File/CheckTree.pm -ef
+ lib/File/CheckTree.pm -d || warn
+ '$path_to_lib' -d || die
+ };
+ };
+
+ is( $@, '' );
+ is( scalar @warnings, 2 );
+ like( $warnings[0], qr/File is not a plain file/);
+ like( $warnings[1], qr/CheckTree\.pm is not a directory/);
+ is( $num_warnings, 2 );
+}
+
+
+#### TEST 5 -- Exception ####
+# test with generic "|| die"
+{
+ my $num_warnings;
+
+ eval {
+ $num_warnings = validate q{
+ lib -ef || die
+ lib/File/CheckTree.pm -d
+ };
+ };
+
+ like($@, qr/lib is not a plain file/);
+}
+
+
+#### TEST 6 -- Exception ####
+# test with "|| die 'my error message'"
+{
+ my $num_warnings;
+
+ eval {
+ $num_warnings = validate q{
+ lib -ef || die "yadda $file yadda...\n"
+ lib/File/CheckTree.pm -d
+ };
+ };
+
+ like($@, qr/yadda lib yadda/);
+ is( $num_warnings, undef );
+}
+
+#### TEST 7 -- Quoted file names ####
+{
+ my $num_warnings;
+ eval {
+ $num_warnings = validate q{
+ "a file with whitespace" !-ef
+ 'a file with whitespace' !-ef
+ };
+ };
+
+ is ( $@, '', 'No errors mean we compile correctly');
+}
+
+#### TEST 8 -- Malformed query ####
+{
+ my $num_warnings;
+ eval {
+ $num_warnings = validate q{
+ a file with whitespace !-ef
+ };
+ };
+
+ like( $@, qr/syntax error/,
+ 'We got a syntax error for a malformed file query' );
+}
Added: vendor/perl/dist/cpan/File-Temp/lib/File/Temp.pm
===================================================================
--- vendor/perl/dist/cpan/File-Temp/lib/File/Temp.pm (rev 0)
+++ vendor/perl/dist/cpan/File-Temp/lib/File/Temp.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2539 @@
+package File::Temp;
+
+=head1 NAME
+
+File::Temp - return name and handle of a temporary file safely
+
+=begin __INTERNALS
+
+=head1 PORTABILITY
+
+This section is at the top in order to provide easier access to
+porters. It is not expected to be rendered by a standard pod
+formatting tool. Please skip straight to the SYNOPSIS section if you
+are not trying to port this module to a new platform.
+
+This module is designed to be portable across operating systems and it
+currently supports Unix, VMS, DOS, OS/2, Windows and Mac OS
+(Classic). When porting to a new OS there are generally three main
+issues that have to be solved:
+
+=over 4
+
+=item *
+
+Can the OS unlink an open file? If it can not then the
+C<_can_unlink_opened_file> method should be modified.
+
+=item *
+
+Are the return values from C<stat> reliable? By default all the
+return values from C<stat> are compared when unlinking a temporary
+file using the filename and the handle. Operating systems other than
+unix do not always have valid entries in all fields. If utility function
+C<File::Temp::unlink0> fails then the C<stat> comparison should be
+modified accordingly.
+
+=item *
+
+Security. Systems that can not support a test for the sticky bit
+on a directory can not use the MEDIUM and HIGH security tests.
+The C<_can_do_level> method should be modified accordingly.
+
+=back
+
+=end __INTERNALS
+
+=head1 SYNOPSIS
+
+ use File::Temp qw/ tempfile tempdir /;
+
+ $fh = tempfile();
+ ($fh, $filename) = tempfile();
+
+ ($fh, $filename) = tempfile( $template, DIR => $dir);
+ ($fh, $filename) = tempfile( $template, SUFFIX => '.dat');
+ ($fh, $filename) = tempfile( $template, TMPDIR => 1 );
+
+ binmode( $fh, ":utf8" );
+
+ $dir = tempdir( CLEANUP => 1 );
+ ($fh, $filename) = tempfile( DIR => $dir );
+
+Object interface:
+
+ require File::Temp;
+ use File::Temp ();
+ use File::Temp qw/ :seekable /;
+
+ $fh = File::Temp->new();
+ $fname = $fh->filename;
+
+ $fh = File::Temp->new(TEMPLATE => $template);
+ $fname = $fh->filename;
+
+ $tmp = File::Temp->new( UNLINK => 0, SUFFIX => '.dat' );
+ print $tmp "Some data\n";
+ print "Filename is $tmp\n";
+ $tmp->seek( 0, SEEK_END );
+
+The following interfaces are provided for compatibility with
+existing APIs. They should not be used in new code.
+
+MkTemp family:
+
+ use File::Temp qw/ :mktemp /;
+
+ ($fh, $file) = mkstemp( "tmpfileXXXXX" );
+ ($fh, $file) = mkstemps( "tmpfileXXXXXX", $suffix);
+
+ $tmpdir = mkdtemp( $template );
+
+ $unopened_file = mktemp( $template );
+
+POSIX functions:
+
+ use File::Temp qw/ :POSIX /;
+
+ $file = tmpnam();
+ $fh = tmpfile();
+
+ ($fh, $file) = tmpnam();
+
+Compatibility functions:
+
+ $unopened_file = File::Temp::tempnam( $dir, $pfx );
+
+=head1 DESCRIPTION
+
+C<File::Temp> can be used to create and open temporary files in a safe
+way. There is both a function interface and an object-oriented
+interface. The File::Temp constructor or the tempfile() function can
+be used to return the name and the open filehandle of a temporary
+file. The tempdir() function can be used to create a temporary
+directory.
+
+The security aspect of temporary file creation is emphasized such that
+a filehandle and filename are returned together. This helps guarantee
+that a race condition can not occur where the temporary file is
+created by another process between checking for the existence of the
+file and its opening. Additional security levels are provided to
+check, for example, that the sticky bit is set on world writable
+directories. See L<"safe_level"> for more information.
+
+For compatibility with popular C library functions, Perl implementations of
+the mkstemp() family of functions are provided. These are, mkstemp(),
+mkstemps(), mkdtemp() and mktemp().
+
+Additionally, implementations of the standard L<POSIX|POSIX>
+tmpnam() and tmpfile() functions are provided if required.
+
+Implementations of mktemp(), tmpnam(), and tempnam() are provided,
+but should be used with caution since they return only a filename
+that was valid when function was called, so cannot guarantee
+that the file will not exist by the time the caller opens the filename.
+
+Filehandles returned by these functions support the seekable methods.
+
+=cut
+
+# 5.6.0 gives us S_IWOTH, S_IWGRP, our and auto-vivifying filehandls
+# People would like a version on 5.004 so give them what they want :-)
+use 5.004;
+use strict;
+use Carp;
+use File::Spec 0.8;
+use Cwd ();
+use File::Path qw/ rmtree /;
+use Fcntl 1.03;
+use IO::Seekable; # For SEEK_*
+use Errno;
+use Scalar::Util 'refaddr';
+require VMS::Stdio if $^O eq 'VMS';
+
+# pre-emptively load Carp::Heavy. If we don't when we run out of file
+# handles and attempt to call croak() we get an error message telling
+# us that Carp::Heavy won't load rather than an error telling us we
+# have run out of file handles. We either preload croak() or we
+# switch the calls to croak from _gettemp() to use die.
+eval { require Carp::Heavy; };
+
+# Need the Symbol package if we are running older perl
+require Symbol if $] < 5.006;
+
+### For the OO interface
+use base qw/ IO::Handle IO::Seekable /;
+use overload '""' => "STRINGIFY", '0+' => "NUMIFY",
+ fallback => 1;
+
+# use 'our' on v5.6.0
+use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS $DEBUG $KEEP_ALL);
+
+$DEBUG = 0;
+$KEEP_ALL = 0;
+
+# We are exporting functions
+
+use base qw/Exporter/;
+
+# Export list - to allow fine tuning of export table
+
+ at EXPORT_OK = qw{
+ tempfile
+ tempdir
+ tmpnam
+ tmpfile
+ mktemp
+ mkstemp
+ mkstemps
+ mkdtemp
+ unlink0
+ cleanup
+ SEEK_SET
+ SEEK_CUR
+ SEEK_END
+ };
+
+# Groups of functions for export
+
+%EXPORT_TAGS = (
+ 'POSIX' => [qw/ tmpnam tmpfile /],
+ 'mktemp' => [qw/ mktemp mkstemp mkstemps mkdtemp/],
+ 'seekable' => [qw/ SEEK_SET SEEK_CUR SEEK_END /],
+ );
+
+# add contents of these tags to @EXPORT
+Exporter::export_tags('POSIX','mktemp','seekable');
+
+# Version number
+
+$VERSION = '0.23';
+
+# This is a list of characters that can be used in random filenames
+
+my @CHARS = (qw/ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
+ a b c d e f g h i j k l m n o p q r s t u v w x y z
+ 0 1 2 3 4 5 6 7 8 9 _
+ /);
+
+# Maximum number of tries to make a temp file before failing
+
+use constant MAX_TRIES => 1000;
+
+# Minimum number of X characters that should be in a template
+use constant MINX => 4;
+
+# Default template when no template supplied
+
+use constant TEMPXXX => 'X' x 10;
+
+# Constants for the security level
+
+use constant STANDARD => 0;
+use constant MEDIUM => 1;
+use constant HIGH => 2;
+
+# OPENFLAGS. If we defined the flag to use with Sysopen here this gives
+# us an optimisation when many temporary files are requested
+
+my $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR;
+my $LOCKFLAG;
+
+unless ($^O eq 'MacOS') {
+ for my $oflag (qw/ NOFOLLOW BINARY LARGEFILE NOINHERIT /) {
+ my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
+ no strict 'refs';
+ $OPENFLAGS |= $bit if eval {
+ # Make sure that redefined die handlers do not cause problems
+ # e.g. CGI::Carp
+ local $SIG{__DIE__} = sub {};
+ local $SIG{__WARN__} = sub {};
+ $bit = &$func();
+ 1;
+ };
+ }
+ # Special case O_EXLOCK
+ $LOCKFLAG = eval {
+ local $SIG{__DIE__} = sub {};
+ local $SIG{__WARN__} = sub {};
+ &Fcntl::O_EXLOCK();
+ };
+}
+
+# On some systems the O_TEMPORARY flag can be used to tell the OS
+# to automatically remove the file when it is closed. This is fine
+# in most cases but not if tempfile is called with UNLINK=>0 and
+# the filename is requested -- in the case where the filename is to
+# be passed to another routine. This happens on windows. We overcome
+# this by using a second open flags variable
+
+my $OPENTEMPFLAGS = $OPENFLAGS;
+unless ($^O eq 'MacOS') {
+ for my $oflag (qw/ TEMPORARY /) {
+ my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
+ local($@);
+ no strict 'refs';
+ $OPENTEMPFLAGS |= $bit if eval {
+ # Make sure that redefined die handlers do not cause problems
+ # e.g. CGI::Carp
+ local $SIG{__DIE__} = sub {};
+ local $SIG{__WARN__} = sub {};
+ $bit = &$func();
+ 1;
+ };
+ }
+}
+
+# Private hash tracking which files have been created by each process id via the OO interface
+my %FILES_CREATED_BY_OBJECT;
+
+# INTERNAL ROUTINES - not to be used outside of package
+
+# Generic routine for getting a temporary filename
+# modelled on OpenBSD _gettemp() in mktemp.c
+
+# The template must contain X's that are to be replaced
+# with the random values
+
+# Arguments:
+
+# TEMPLATE - string containing the XXXXX's that is converted
+# to a random filename and opened if required
+
+# Optionally, a hash can also be supplied containing specific options
+# "open" => if true open the temp file, else just return the name
+# default is 0
+# "mkdir"=> if true, we are creating a temp directory rather than tempfile
+# default is 0
+# "suffixlen" => number of characters at end of PATH to be ignored.
+# default is 0.
+# "unlink_on_close" => indicates that, if possible, the OS should remove
+# the file as soon as it is closed. Usually indicates
+# use of the O_TEMPORARY flag to sysopen.
+# Usually irrelevant on unix
+# "use_exlock" => Indicates that O_EXLOCK should be used. Default is true.
+
+# Optionally a reference to a scalar can be passed into the function
+# On error this will be used to store the reason for the error
+# "ErrStr" => \$errstr
+
+# "open" and "mkdir" can not both be true
+# "unlink_on_close" is not used when "mkdir" is true.
+
+# The default options are equivalent to mktemp().
+
+# Returns:
+# filehandle - open file handle (if called with doopen=1, else undef)
+# temp name - name of the temp file or directory
+
+# For example:
+# ($fh, $name) = _gettemp($template, "open" => 1);
+
+# for the current version, failures are associated with
+# stored in an error string and returned to give the reason whilst debugging
+# This routine is not called by any external function
+sub _gettemp {
+
+ croak 'Usage: ($fh, $name) = _gettemp($template, OPTIONS);'
+ unless scalar(@_) >= 1;
+
+ # the internal error string - expect it to be overridden
+ # Need this in case the caller decides not to supply us a value
+ # need an anonymous scalar
+ my $tempErrStr;
+
+ # Default options
+ my %options = (
+ "open" => 0,
+ "mkdir" => 0,
+ "suffixlen" => 0,
+ "unlink_on_close" => 0,
+ "use_exlock" => 1,
+ "ErrStr" => \$tempErrStr,
+ );
+
+ # Read the template
+ my $template = shift;
+ if (ref($template)) {
+ # Use a warning here since we have not yet merged ErrStr
+ carp "File::Temp::_gettemp: template must not be a reference";
+ return ();
+ }
+
+ # Check that the number of entries on stack are even
+ if (scalar(@_) % 2 != 0) {
+ # Use a warning here since we have not yet merged ErrStr
+ carp "File::Temp::_gettemp: Must have even number of options";
+ return ();
+ }
+
+ # Read the options and merge with defaults
+ %options = (%options, @_) if @_;
+
+ # Make sure the error string is set to undef
+ ${$options{ErrStr}} = undef;
+
+ # Can not open the file and make a directory in a single call
+ if ($options{"open"} && $options{"mkdir"}) {
+ ${$options{ErrStr}} = "doopen and domkdir can not both be true\n";
+ return ();
+ }
+
+ # Find the start of the end of the Xs (position of last X)
+ # Substr starts from 0
+ my $start = length($template) - 1 - $options{"suffixlen"};
+
+ # Check that we have at least MINX x X (e.g. 'XXXX") at the end of the string
+ # (taking suffixlen into account). Any fewer is insecure.
+
+ # Do it using substr - no reason to use a pattern match since
+ # we know where we are looking and what we are looking for
+
+ if (substr($template, $start - MINX + 1, MINX) ne 'X' x MINX) {
+ ${$options{ErrStr}} = "The template must end with at least ".
+ MINX . " 'X' characters\n";
+ return ();
+ }
+
+ # Replace all the X at the end of the substring with a
+ # random character or just all the XX at the end of a full string.
+ # Do it as an if, since the suffix adjusts which section to replace
+ # and suffixlen=0 returns nothing if used in the substr directly
+ # and generate a full path from the template
+
+ my $path = _replace_XX($template, $options{"suffixlen"});
+
+
+ # Split the path into constituent parts - eventually we need to check
+ # whether the directory exists
+ # We need to know whether we are making a temp directory
+ # or a tempfile
+
+ my ($volume, $directories, $file);
+ my $parent; # parent directory
+ if ($options{"mkdir"}) {
+ # There is no filename at the end
+ ($volume, $directories, $file) = File::Spec->splitpath( $path, 1);
+
+ # The parent is then $directories without the last directory
+ # Split the directory and put it back together again
+ my @dirs = File::Spec->splitdir($directories);
+
+ # If @dirs only has one entry (i.e. the directory template) that means
+ # we are in the current directory
+ if ($#dirs == 0) {
+ $parent = File::Spec->curdir;
+ } else {
+
+ if ($^O eq 'VMS') { # need volume to avoid relative dir spec
+ $parent = File::Spec->catdir($volume, @dirs[0..$#dirs-1]);
+ $parent = 'sys$disk:[]' if $parent eq '';
+ } else {
+
+ # Put it back together without the last one
+ $parent = File::Spec->catdir(@dirs[0..$#dirs-1]);
+
+ # ...and attach the volume (no filename)
+ $parent = File::Spec->catpath($volume, $parent, '');
+ }
+
+ }
+
+ } else {
+
+ # Get rid of the last filename (use File::Basename for this?)
+ ($volume, $directories, $file) = File::Spec->splitpath( $path );
+
+ # Join up without the file part
+ $parent = File::Spec->catpath($volume,$directories,'');
+
+ # If $parent is empty replace with curdir
+ $parent = File::Spec->curdir
+ unless $directories ne '';
+
+ }
+
+ # Check that the parent directories exist
+ # Do this even for the case where we are simply returning a name
+ # not a file -- no point returning a name that includes a directory
+ # that does not exist or is not writable
+
+ unless (-e $parent) {
+ ${$options{ErrStr}} = "Parent directory ($parent) does not exist";
+ return ();
+ }
+ unless (-d $parent) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not a directory";
+ return ();
+ }
+
+ # Check the stickiness of the directory and chown giveaway if required
+ # If the directory is world writable the sticky bit
+ # must be set
+
+ if (File::Temp->safe_level == MEDIUM) {
+ my $safeerr;
+ unless (_is_safe($parent,\$safeerr)) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
+ return ();
+ }
+ } elsif (File::Temp->safe_level == HIGH) {
+ my $safeerr;
+ unless (_is_verysafe($parent, \$safeerr)) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
+ return ();
+ }
+ }
+
+
+ # Now try MAX_TRIES time to open the file
+ for (my $i = 0; $i < MAX_TRIES; $i++) {
+
+ # Try to open the file if requested
+ if ($options{"open"}) {
+ my $fh;
+
+ # If we are running before perl5.6.0 we can not auto-vivify
+ if ($] < 5.006) {
+ $fh = &Symbol::gensym;
+ }
+
+ # Try to make sure this will be marked close-on-exec
+ # XXX: Win32 doesn't respect this, nor the proper fcntl,
+ # but may have O_NOINHERIT. This may or may not be in Fcntl.
+ local $^F = 2;
+
+ # Attempt to open the file
+ my $open_success = undef;
+ if ( $^O eq 'VMS' and $options{"unlink_on_close"} && !$KEEP_ALL) {
+ # make it auto delete on close by setting FAB$V_DLT bit
+ $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, 0600, 'fop=dlt');
+ $open_success = $fh;
+ } else {
+ my $flags = ( ($options{"unlink_on_close"} && !$KEEP_ALL) ?
+ $OPENTEMPFLAGS :
+ $OPENFLAGS );
+ $flags |= $LOCKFLAG if (defined $LOCKFLAG && $options{use_exlock});
+ $open_success = sysopen($fh, $path, $flags, 0600);
+ }
+ if ( $open_success ) {
+
+ # in case of odd umask force rw
+ chmod(0600, $path);
+
+ # Opened successfully - return file handle and name
+ return ($fh, $path);
+
+ } else {
+
+ # Error opening file - abort with error
+ # if the reason was anything but EEXIST
+ unless ($!{EEXIST}) {
+ ${$options{ErrStr}} = "Could not create temp file $path: $!";
+ return ();
+ }
+
+ # Loop round for another try
+
+ }
+ } elsif ($options{"mkdir"}) {
+
+ # Open the temp directory
+ if (mkdir( $path, 0700)) {
+ # in case of odd umask
+ chmod(0700, $path);
+
+ return undef, $path;
+ } else {
+
+ # Abort with error if the reason for failure was anything
+ # except EEXIST
+ unless ($!{EEXIST}) {
+ ${$options{ErrStr}} = "Could not create directory $path: $!";
+ return ();
+ }
+
+ # Loop round for another try
+
+ }
+
+ } else {
+
+ # Return true if the file can not be found
+ # Directory has been checked previously
+
+ return (undef, $path) unless -e $path;
+
+ # Try again until MAX_TRIES
+
+ }
+
+ # Did not successfully open the tempfile/dir
+ # so try again with a different set of random letters
+ # No point in trying to increment unless we have only
+ # 1 X say and the randomness could come up with the same
+ # file MAX_TRIES in a row.
+
+ # Store current attempt - in principal this implies that the
+ # 3rd time around the open attempt that the first temp file
+ # name could be generated again. Probably should store each
+ # attempt and make sure that none are repeated
+
+ my $original = $path;
+ my $counter = 0; # Stop infinite loop
+ my $MAX_GUESS = 50;
+
+ do {
+
+ # Generate new name from original template
+ $path = _replace_XX($template, $options{"suffixlen"});
+
+ $counter++;
+
+ } until ($path ne $original || $counter > $MAX_GUESS);
+
+ # Check for out of control looping
+ if ($counter > $MAX_GUESS) {
+ ${$options{ErrStr}} = "Tried to get a new temp name different to the previous value $MAX_GUESS times.\nSomething wrong with template?? ($template)";
+ return ();
+ }
+
+ }
+
+ # If we get here, we have run out of tries
+ ${ $options{ErrStr} } = "Have exceeded the maximum number of attempts ("
+ . MAX_TRIES . ") to open temp file/dir";
+
+ return ();
+
+}
+
+# Internal routine to replace the XXXX... with random characters
+# This has to be done by _gettemp() every time it fails to
+# open a temp file/dir
+
+# Arguments: $template (the template with XXX),
+# $ignore (number of characters at end to ignore)
+
+# Returns: modified template
+
+sub _replace_XX {
+
+ croak 'Usage: _replace_XX($template, $ignore)'
+ unless scalar(@_) == 2;
+
+ my ($path, $ignore) = @_;
+
+ # Do it as an if, since the suffix adjusts which section to replace
+ # and suffixlen=0 returns nothing if used in the substr directly
+ # Alternatively, could simply set $ignore to length($path)-1
+ # Don't want to always use substr when not required though.
+ my $end = ( $] >= 5.006 ? "\\z" : "\\Z" );
+
+ if ($ignore) {
+ substr($path, 0, - $ignore) =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge;
+ } else {
+ $path =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge;
+ }
+ return $path;
+}
+
+# Internal routine to force a temp file to be writable after
+# it is created so that we can unlink it. Windows seems to occasionally
+# force a file to be readonly when written to certain temp locations
+sub _force_writable {
+ my $file = shift;
+ chmod 0600, $file;
+}
+
+
+# internal routine to check to see if the directory is safe
+# First checks to see if the directory is not owned by the
+# current user or root. Then checks to see if anyone else
+# can write to the directory and if so, checks to see if
+# it has the sticky bit set
+
+# Will not work on systems that do not support sticky bit
+
+#Args: directory path to check
+# Optionally: reference to scalar to contain error message
+# Returns true if the path is safe and false otherwise.
+# Returns undef if can not even run stat() on the path
+
+# This routine based on version written by Tom Christiansen
+
+# Presumably, by the time we actually attempt to create the
+# file or directory in this directory, it may not be safe
+# anymore... Have to run _is_safe directly after the open.
+
+sub _is_safe {
+
+ my $path = shift;
+ my $err_ref = shift;
+
+ # Stat path
+ my @info = stat($path);
+ unless (scalar(@info)) {
+ $$err_ref = "stat(path) returned no values";
+ return 0;
+ }
+ ;
+ return 1 if $^O eq 'VMS'; # owner delete control at file level
+
+ # Check to see whether owner is neither superuser (or a system uid) nor me
+ # Use the effective uid from the $> variable
+ # UID is in [4]
+ if ($info[4] > File::Temp->top_system_uid() && $info[4] != $>) {
+
+ Carp::cluck(sprintf "uid=$info[4] topuid=%s euid=$> path='$path'",
+ File::Temp->top_system_uid());
+
+ $$err_ref = "Directory owned neither by root nor the current user"
+ if ref($err_ref);
+ return 0;
+ }
+
+ # check whether group or other can write file
+ # use 066 to detect either reading or writing
+ # use 022 to check writability
+ # Do it with S_IWOTH and S_IWGRP for portability (maybe)
+ # mode is in info[2]
+ if (($info[2] & &Fcntl::S_IWGRP) || # Is group writable?
+ ($info[2] & &Fcntl::S_IWOTH) ) { # Is world writable?
+ # Must be a directory
+ unless (-d $path) {
+ $$err_ref = "Path ($path) is not a directory"
+ if ref($err_ref);
+ return 0;
+ }
+ # Must have sticky bit set
+ unless (-k $path) {
+ $$err_ref = "Sticky bit not set on $path when dir is group|world writable"
+ if ref($err_ref);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+# Internal routine to check whether a directory is safe
+# for temp files. Safer than _is_safe since it checks for
+# the possibility of chown giveaway and if that is a possibility
+# checks each directory in the path to see if it is safe (with _is_safe)
+
+# If _PC_CHOWN_RESTRICTED is not set, does the full test of each
+# directory anyway.
+
+# Takes optional second arg as scalar ref to error reason
+
+sub _is_verysafe {
+
+ # Need POSIX - but only want to bother if really necessary due to overhead
+ require POSIX;
+
+ my $path = shift;
+ print "_is_verysafe testing $path\n" if $DEBUG;
+ return 1 if $^O eq 'VMS'; # owner delete control at file level
+
+ my $err_ref = shift;
+
+ # Should Get the value of _PC_CHOWN_RESTRICTED if it is defined
+ # and If it is not there do the extensive test
+ local($@);
+ my $chown_restricted;
+ $chown_restricted = &POSIX::_PC_CHOWN_RESTRICTED()
+ if eval { &POSIX::_PC_CHOWN_RESTRICTED(); 1};
+
+ # If chown_resticted is set to some value we should test it
+ if (defined $chown_restricted) {
+
+ # Return if the current directory is safe
+ return _is_safe($path,$err_ref) if POSIX::sysconf( $chown_restricted );
+
+ }
+
+ # To reach this point either, the _PC_CHOWN_RESTRICTED symbol
+ # was not available or the symbol was there but chown giveaway
+ # is allowed. Either way, we now have to test the entire tree for
+ # safety.
+
+ # Convert path to an absolute directory if required
+ unless (File::Spec->file_name_is_absolute($path)) {
+ $path = File::Spec->rel2abs($path);
+ }
+
+ # Split directory into components - assume no file
+ my ($volume, $directories, undef) = File::Spec->splitpath( $path, 1);
+
+ # Slightly less efficient than having a function in File::Spec
+ # to chop off the end of a directory or even a function that
+ # can handle ../ in a directory tree
+ # Sometimes splitdir() returns a blank at the end
+ # so we will probably check the bottom directory twice in some cases
+ my @dirs = File::Spec->splitdir($directories);
+
+ # Concatenate one less directory each time around
+ foreach my $pos (0.. $#dirs) {
+ # Get a directory name
+ my $dir = File::Spec->catpath($volume,
+ File::Spec->catdir(@dirs[0.. $#dirs - $pos]),
+ ''
+ );
+
+ print "TESTING DIR $dir\n" if $DEBUG;
+
+ # Check the directory
+ return 0 unless _is_safe($dir,$err_ref);
+
+ }
+
+ return 1;
+}
+
+
+
+# internal routine to determine whether unlink works on this
+# platform for files that are currently open.
+# Returns true if we can, false otherwise.
+
+# Currently WinNT, OS/2 and VMS can not unlink an opened file
+# On VMS this is because the O_EXCL flag is used to open the
+# temporary file. Currently I do not know enough about the issues
+# on VMS to decide whether O_EXCL is a requirement.
+
+sub _can_unlink_opened_file {
+
+ if (grep { $^O eq $_ } qw/MSWin32 os2 VMS dos MacOS haiku/) {
+ return 0;
+ } else {
+ return 1;
+ }
+
+}
+
+# internal routine to decide which security levels are allowed
+# see safe_level() for more information on this
+
+# Controls whether the supplied security level is allowed
+
+# $cando = _can_do_level( $level )
+
+sub _can_do_level {
+
+ # Get security level
+ my $level = shift;
+
+ # Always have to be able to do STANDARD
+ return 1 if $level == STANDARD;
+
+ # Currently, the systems that can do HIGH or MEDIUM are identical
+ if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'MacOS' || $^O eq 'mpeix') {
+ return 0;
+ } else {
+ return 1;
+ }
+
+}
+
+# This routine sets up a deferred unlinking of a specified
+# filename and filehandle. It is used in the following cases:
+# - Called by unlink0 if an opened file can not be unlinked
+# - Called by tempfile() if files are to be removed on shutdown
+# - Called by tempdir() if directories are to be removed on shutdown
+
+# Arguments:
+# _deferred_unlink( $fh, $fname, $isdir );
+#
+# - filehandle (so that it can be explicitly closed if open
+# - filename (the thing we want to remove)
+# - isdir (flag to indicate that we are being given a directory)
+# [and hence no filehandle]
+
+# Status is not referred to since all the magic is done with an END block
+
+{
+ # Will set up two lexical variables to contain all the files to be
+ # removed. One array for files, another for directories They will
+ # only exist in this block.
+
+ # This means we only have to set up a single END block to remove
+ # all files.
+
+ # in order to prevent child processes inadvertently deleting the parent
+ # temp files we use a hash to store the temp files and directories
+ # created by a particular process id.
+
+ # %files_to_unlink contains values that are references to an array of
+ # array references containing the filehandle and filename associated with
+ # the temp file.
+ my (%files_to_unlink, %dirs_to_unlink);
+
+ # Set up an end block to use these arrays
+ END {
+ local($., $@, $!, $^E, $?);
+ cleanup(at_exit => 1);
+ }
+
+ # Cleanup function. Always triggered on END (with at_exit => 1) but
+ # can be invoked manually.
+ sub cleanup {
+ my %h = @_;
+ my $at_exit = delete $h{at_exit};
+ $at_exit = 0 if not defined $at_exit;
+ { my @k = sort keys %h; die "unrecognized parameters: @k" if @k }
+
+ if (!$KEEP_ALL) {
+ # Files
+ my @files = (exists $files_to_unlink{$$} ?
+ @{ $files_to_unlink{$$} } : () );
+ foreach my $file (@files) {
+ # close the filehandle without checking its state
+ # in order to make real sure that this is closed
+ # if its already closed then I dont care about the answer
+ # probably a better way to do this
+ close($file->[0]); # file handle is [0]
+
+ if (-f $file->[1]) { # file name is [1]
+ _force_writable( $file->[1] ); # for windows
+ unlink $file->[1] or warn "Error removing ".$file->[1];
+ }
+ }
+ # Dirs
+ my @dirs = (exists $dirs_to_unlink{$$} ?
+ @{ $dirs_to_unlink{$$} } : () );
+ my ($cwd, $cwd_to_remove);
+ foreach my $dir (@dirs) {
+ if (-d $dir) {
+ # Some versions of rmtree will abort if you attempt to remove
+ # the directory you are sitting in. For automatic cleanup
+ # at program exit, we avoid this by chdir()ing out of the way
+ # first. If not at program exit, it's best not to mess with the
+ # current directory, so just let it fail with a warning.
+ if ($at_exit) {
+ $cwd = Cwd::abs_path(File::Spec->curdir) if not defined $cwd;
+ my $abs = Cwd::abs_path($dir);
+ if ($abs eq $cwd) {
+ $cwd_to_remove = $dir;
+ next;
+ }
+ }
+ eval { rmtree($dir, $DEBUG, 0); };
+ warn $@ if ($@ && $^W);
+ }
+ }
+
+ if (defined $cwd_to_remove) {
+ # We do need to clean up the current directory, and everything
+ # else is done, so get out of there and remove it.
+ chdir $cwd_to_remove or die "cannot chdir to $cwd_to_remove: $!";
+ my $updir = File::Spec->updir;
+ chdir $updir or die "cannot chdir to $updir: $!";
+ eval { rmtree($cwd_to_remove, $DEBUG, 0); };
+ warn $@ if ($@ && $^W);
+ }
+
+ # clear the arrays
+ @{ $files_to_unlink{$$} } = ()
+ if exists $files_to_unlink{$$};
+ @{ $dirs_to_unlink{$$} } = ()
+ if exists $dirs_to_unlink{$$};
+ }
+ }
+
+
+ # This is the sub called to register a file for deferred unlinking
+ # This could simply store the input parameters and defer everything
+ # until the END block. For now we do a bit of checking at this
+ # point in order to make sure that (1) we have a file/dir to delete
+ # and (2) we have been called with the correct arguments.
+ sub _deferred_unlink {
+
+ croak 'Usage: _deferred_unlink($fh, $fname, $isdir)'
+ unless scalar(@_) == 3;
+
+ my ($fh, $fname, $isdir) = @_;
+
+ warn "Setting up deferred removal of $fname\n"
+ if $DEBUG;
+
+ # make sure we save the absolute path for later cleanup
+ # OK to untaint because we only ever use this internally
+ # as a file path, never interpolating into the shell
+ $fname = Cwd::abs_path($fname);
+ ($fname) = $fname =~ /^(.*)$/;
+
+ # If we have a directory, check that it is a directory
+ if ($isdir) {
+
+ if (-d $fname) {
+
+ # Directory exists so store it
+ # first on VMS turn []foo into [.foo] for rmtree
+ $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS';
+ $dirs_to_unlink{$$} = []
+ unless exists $dirs_to_unlink{$$};
+ push (@{ $dirs_to_unlink{$$} }, $fname);
+
+ } else {
+ carp "Request to remove directory $fname could not be completed since it does not exist!\n" if $^W;
+ }
+
+ } else {
+
+ if (-f $fname) {
+
+ # file exists so store handle and name for later removal
+ $files_to_unlink{$$} = []
+ unless exists $files_to_unlink{$$};
+ push(@{ $files_to_unlink{$$} }, [$fh, $fname]);
+
+ } else {
+ carp "Request to remove file $fname could not be completed since it is not there!\n" if $^W;
+ }
+
+ }
+
+ }
+
+
+}
+
+# normalize argument keys to upper case and do consistent handling
+# of leading template vs TEMPLATE
+sub _parse_args {
+ my $leading_template = (scalar(@_) % 2 == 1 ? shift(@_) : '' );
+ my %args = @_;
+ %args = map { uc($_), $args{$_} } keys %args;
+
+ # template (store it in an array so that it will
+ # disappear from the arg list of tempfile)
+ my @template = (
+ exists $args{TEMPLATE} ? $args{TEMPLATE} :
+ $leading_template ? $leading_template : ()
+ );
+ delete $args{TEMPLATE};
+
+ return( \@template, \%args );
+}
+
+=head1 OBJECT-ORIENTED INTERFACE
+
+This is the primary interface for interacting with
+C<File::Temp>. Using the OO interface a temporary file can be created
+when the object is constructed and the file can be removed when the
+object is no longer required.
+
+Note that there is no method to obtain the filehandle from the
+C<File::Temp> object. The object itself acts as a filehandle. The object
+isa C<IO::Handle> and isa C<IO::Seekable> so all those methods are
+available.
+
+Also, the object is configured such that it stringifies to the name of the
+temporary file and so can be compared to a filename directly. It numifies
+to the C<refaddr> the same as other handles and so can be compared to other
+handles with C<==>.
+
+ $fh eq $filename # as a string
+ $fh != \*STDOUT # as a number
+
+=over 4
+
+=item B<new>
+
+Create a temporary file object.
+
+ my $tmp = File::Temp->new();
+
+by default the object is constructed as if C<tempfile>
+was called without options, but with the additional behaviour
+that the temporary file is removed by the object destructor
+if UNLINK is set to true (the default).
+
+Supported arguments are the same as for C<tempfile>: UNLINK
+(defaulting to true), DIR, EXLOCK and SUFFIX. Additionally, the filename
+template is specified using the TEMPLATE option. The OPEN option
+is not supported (the file is always opened).
+
+ $tmp = File::Temp->new( TEMPLATE => 'tempXXXXX',
+ DIR => 'mydir',
+ SUFFIX => '.dat');
+
+Arguments are case insensitive.
+
+Can call croak() if an error occurs.
+
+=cut
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ my ($maybe_template, $args) = _parse_args(@_);
+
+ # see if they are unlinking (defaulting to yes)
+ my $unlink = (exists $args->{UNLINK} ? $args->{UNLINK} : 1 );
+ delete $args->{UNLINK};
+
+ # Protect OPEN
+ delete $args->{OPEN};
+
+ # Open the file and retain file handle and file name
+ my ($fh, $path) = tempfile( @$maybe_template, %$args );
+
+ print "Tmp: $fh - $path\n" if $DEBUG;
+
+ # Store the filename in the scalar slot
+ ${*$fh} = $path;
+
+ # Cache the filename by pid so that the destructor can decide whether to remove it
+ $FILES_CREATED_BY_OBJECT{$$}{$path} = 1;
+
+ # Store unlink information in hash slot (plus other constructor info)
+ %{*$fh} = %$args;
+
+ # create the object
+ bless $fh, $class;
+
+ # final method-based configuration
+ $fh->unlink_on_destroy( $unlink );
+
+ return $fh;
+}
+
+=item B<newdir>
+
+Create a temporary directory using an object oriented interface.
+
+ $dir = File::Temp->newdir();
+
+By default the directory is deleted when the object goes out of scope.
+
+Supports the same options as the C<tempdir> function. Note that directories
+created with this method default to CLEANUP => 1.
+
+ $dir = File::Temp->newdir( $template, %options );
+
+A template may be specified either with a leading template or
+with a TEMPLATE argument.
+
+=cut
+
+sub newdir {
+ my $self = shift;
+
+ my ($maybe_template, $args) = _parse_args(@_);
+
+ # handle CLEANUP without passing CLEANUP to tempdir
+ my $cleanup = (exists $args->{CLEANUP} ? $args->{CLEANUP} : 1 );
+ delete $args->{CLEANUP};
+
+ my $tempdir = tempdir( @$maybe_template, %$args);
+
+ # get a safe absolute path for cleanup, just like
+ # happens in _deferred_unlink
+ my $real_dir = Cwd::abs_path( $tempdir );
+ ($real_dir) = $real_dir =~ /^(.*)$/;
+
+ return bless { DIRNAME => $tempdir,
+ REALNAME => $real_dir,
+ CLEANUP => $cleanup,
+ LAUNCHPID => $$,
+ }, "File::Temp::Dir";
+}
+
+=item B<filename>
+
+Return the name of the temporary file associated with this object
+(if the object was created using the "new" constructor).
+
+ $filename = $tmp->filename;
+
+This method is called automatically when the object is used as
+a string.
+
+=cut
+
+sub filename {
+ my $self = shift;
+ return ${*$self};
+}
+
+sub STRINGIFY {
+ my $self = shift;
+ return $self->filename;
+}
+
+# For reference, can't use '0+'=>\&Scalar::Util::refaddr directly because
+# refaddr() demands one parameter only, whereas overload.pm calls with three
+# even for unary operations like '0+'.
+sub NUMIFY {
+ return refaddr($_[0]);
+}
+
+=item B<dirname>
+
+Return the name of the temporary directory associated with this
+object (if the object was created using the "newdir" constructor).
+
+ $dirname = $tmpdir->dirname;
+
+This method is called automatically when the object is used in string context.
+
+=item B<unlink_on_destroy>
+
+Control whether the file is unlinked when the object goes out of scope.
+The file is removed if this value is true and $KEEP_ALL is not.
+
+ $fh->unlink_on_destroy( 1 );
+
+Default is for the file to be removed.
+
+=cut
+
+sub unlink_on_destroy {
+ my $self = shift;
+ if (@_) {
+ ${*$self}{UNLINK} = shift;
+ }
+ return ${*$self}{UNLINK};
+}
+
+=item B<DESTROY>
+
+When the object goes out of scope, the destructor is called. This
+destructor will attempt to unlink the file (using L<unlink1|"unlink1">)
+if the constructor was called with UNLINK set to 1 (the default state
+if UNLINK is not specified).
+
+No error is given if the unlink fails.
+
+If the object has been passed to a child process during a fork, the
+file will be deleted when the object goes out of scope in the parent.
+
+For a temporary directory object the directory will be removed unless
+the CLEANUP argument was used in the constructor (and set to false) or
+C<unlink_on_destroy> was modified after creation. Note that if a temp
+directory is your current directory, it cannot be removed - a warning
+will be given in this case. C<chdir()> out of the directory before
+letting the object go out of scope.
+
+If the global variable $KEEP_ALL is true, the file or directory
+will not be removed.
+
+=cut
+
+sub DESTROY {
+ local($., $@, $!, $^E, $?);
+ my $self = shift;
+
+ # Make sure we always remove the file from the global hash
+ # on destruction. This prevents the hash from growing uncontrollably
+ # and post-destruction there is no reason to know about the file.
+ my $file = $self->filename;
+ my $was_created_by_proc;
+ if (exists $FILES_CREATED_BY_OBJECT{$$}{$file}) {
+ $was_created_by_proc = 1;
+ delete $FILES_CREATED_BY_OBJECT{$$}{$file};
+ }
+
+ if (${*$self}{UNLINK} && !$KEEP_ALL) {
+ print "# ---------> Unlinking $self\n" if $DEBUG;
+
+ # only delete if this process created it
+ return unless $was_created_by_proc;
+
+ # The unlink1 may fail if the file has been closed
+ # by the caller. This leaves us with the decision
+ # of whether to refuse to remove the file or simply
+ # do an unlink without test. Seems to be silly
+ # to do this when we are trying to be careful
+ # about security
+ _force_writable( $file ); # for windows
+ unlink1( $self, $file )
+ or unlink($file);
+ }
+}
+
+=back
+
+=head1 FUNCTIONS
+
+This section describes the recommended interface for generating
+temporary files and directories.
+
+=over 4
+
+=item B<tempfile>
+
+This is the basic function to generate temporary files.
+The behaviour of the file can be changed using various options:
+
+ $fh = tempfile();
+ ($fh, $filename) = tempfile();
+
+Create a temporary file in the directory specified for temporary
+files, as specified by the tmpdir() function in L<File::Spec>.
+
+ ($fh, $filename) = tempfile($template);
+
+Create a temporary file in the current directory using the supplied
+template. Trailing `X' characters are replaced with random letters to
+generate the filename. At least four `X' characters must be present
+at the end of the template.
+
+ ($fh, $filename) = tempfile($template, SUFFIX => $suffix)
+
+Same as previously, except that a suffix is added to the template
+after the `X' translation. Useful for ensuring that a temporary
+filename has a particular extension when needed by other applications.
+But see the WARNING at the end.
+
+ ($fh, $filename) = tempfile($template, DIR => $dir);
+
+Translates the template as before except that a directory name
+is specified.
+
+ ($fh, $filename) = tempfile($template, TMPDIR => 1);
+
+Equivalent to specifying a DIR of "File::Spec->tmpdir", writing the file
+into the same temporary directory as would be used if no template was
+specified at all.
+
+ ($fh, $filename) = tempfile($template, UNLINK => 1);
+
+Return the filename and filehandle as before except that the file is
+automatically removed when the program exits (dependent on
+$KEEP_ALL). Default is for the file to be removed if a file handle is
+requested and to be kept if the filename is requested. In a scalar
+context (where no filename is returned) the file is always deleted
+either (depending on the operating system) on exit or when it is
+closed (unless $KEEP_ALL is true when the temp file is created).
+
+Use the object-oriented interface if fine-grained control of when
+a file is removed is required.
+
+If the template is not specified, a template is always
+automatically generated. This temporary file is placed in tmpdir()
+(L<File::Spec>) unless a directory is specified explicitly with the
+DIR option.
+
+ $fh = tempfile( DIR => $dir );
+
+If called in scalar context, only the filehandle is returned and the
+file will automatically be deleted when closed on operating systems
+that support this (see the description of tmpfile() elsewhere in this
+document). This is the preferred mode of operation, as if you only
+have a filehandle, you can never create a race condition by fumbling
+with the filename. On systems that can not unlink an open file or can
+not mark a file as temporary when it is opened (for example, Windows
+NT uses the C<O_TEMPORARY> flag) the file is marked for deletion when
+the program ends (equivalent to setting UNLINK to 1). The C<UNLINK>
+flag is ignored if present.
+
+ (undef, $filename) = tempfile($template, OPEN => 0);
+
+This will return the filename based on the template but
+will not open this file. Cannot be used in conjunction with
+UNLINK set to true. Default is to always open the file
+to protect from possible race conditions. A warning is issued
+if warnings are turned on. Consider using the tmpnam()
+and mktemp() functions described elsewhere in this document
+if opening the file is not required.
+
+If the operating system supports it (for example BSD derived systems), the
+filehandle will be opened with O_EXLOCK (open with exclusive file lock).
+This can sometimes cause problems if the intention is to pass the filename
+to another system that expects to take an exclusive lock itself (such as
+DBD::SQLite) whilst ensuring that the tempfile is not reused. In this
+situation the "EXLOCK" option can be passed to tempfile. By default EXLOCK
+will be true (this retains compatibility with earlier releases).
+
+ ($fh, $filename) = tempfile($template, EXLOCK => 0);
+
+Options can be combined as required.
+
+Will croak() if there is an error.
+
+=cut
+
+sub tempfile {
+ if ( @_ && $_[0] eq 'File::Temp' ) {
+ croak "'tempfile' can't be called as a method";
+ }
+ # Can not check for argument count since we can have any
+ # number of args
+
+ # Default options
+ my %options = (
+ "DIR" => undef, # Directory prefix
+ "SUFFIX" => '', # Template suffix
+ "UNLINK" => 0, # Do not unlink file on exit
+ "OPEN" => 1, # Open file
+ "TMPDIR" => 0, # Place tempfile in tempdir if template specified
+ "EXLOCK" => 1, # Open file with O_EXLOCK
+ );
+
+ # Check to see whether we have an odd or even number of arguments
+ my ($maybe_template, $args) = _parse_args(@_);
+ my $template = @$maybe_template ? $maybe_template->[0] : undef;
+
+ # Read the options and merge with defaults
+ %options = (%options, %$args);
+
+ # First decision is whether or not to open the file
+ if (! $options{"OPEN"}) {
+
+ warn "tempfile(): temporary filename requested but not opened.\nPossibly unsafe, consider using tempfile() with OPEN set to true\n"
+ if $^W;
+
+ }
+
+ if ($options{"DIR"} and $^O eq 'VMS') {
+
+ # on VMS turn []foo into [.foo] for concatenation
+ $options{"DIR"} = VMS::Filespec::vmspath($options{"DIR"});
+ }
+
+ # Construct the template
+
+ # Have a choice of trying to work around the mkstemp/mktemp/tmpnam etc
+ # functions or simply constructing a template and using _gettemp()
+ # explicitly. Go for the latter
+
+ # First generate a template if not defined and prefix the directory
+ # If no template must prefix the temp directory
+ if (defined $template) {
+ # End up with current directory if neither DIR not TMPDIR are set
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catfile($options{"DIR"}, $template);
+
+ } elsif ($options{TMPDIR}) {
+
+ $template = File::Spec->catfile(File::Spec->tmpdir, $template );
+
+ }
+
+ } else {
+
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catfile($options{"DIR"}, TEMPXXX);
+
+ } else {
+
+ $template = File::Spec->catfile(File::Spec->tmpdir, TEMPXXX);
+
+ }
+
+ }
+
+ # Now add a suffix
+ $template .= $options{"SUFFIX"};
+
+ # Determine whether we should tell _gettemp to unlink the file
+ # On unix this is irrelevant and can be worked out after the file is
+ # opened (simply by unlinking the open filehandle). On Windows or VMS
+ # we have to indicate temporary-ness when we open the file. In general
+ # we only want a true temporary file if we are returning just the
+ # filehandle - if the user wants the filename they probably do not
+ # want the file to disappear as soon as they close it (which may be
+ # important if they want a child process to use the file)
+ # For this reason, tie unlink_on_close to the return context regardless
+ # of OS.
+ my $unlink_on_close = ( wantarray ? 0 : 1);
+
+ # Create the file
+ my ($fh, $path, $errstr);
+ croak "Error in tempfile() using template $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => $options{'OPEN'},
+ "mkdir"=> 0 ,
+ "unlink_on_close" => $unlink_on_close,
+ "suffixlen" => length($options{'SUFFIX'}),
+ "ErrStr" => \$errstr,
+ "use_exlock" => $options{EXLOCK},
+ ) );
+
+ # Set up an exit handler that can do whatever is right for the
+ # system. This removes files at exit when requested explicitly or when
+ # system is asked to unlink_on_close but is unable to do so because
+ # of OS limitations.
+ # The latter should be achieved by using a tied filehandle.
+ # Do not check return status since this is all done with END blocks.
+ _deferred_unlink($fh, $path, 0) if $options{"UNLINK"};
+
+ # Return
+ if (wantarray()) {
+
+ if ($options{'OPEN'}) {
+ return ($fh, $path);
+ } else {
+ return (undef, $path);
+ }
+
+ } else {
+
+ # Unlink the file. It is up to unlink0 to decide what to do with
+ # this (whether to unlink now or to defer until later)
+ unlink0($fh, $path) or croak "Error unlinking file $path using unlink0";
+
+ # Return just the filehandle.
+ return $fh;
+ }
+
+
+}
+
+=item B<tempdir>
+
+This is the recommended interface for creation of temporary
+directories. By default the directory will not be removed on exit
+(that is, it won't be temporary; this behaviour can not be changed
+because of issues with backwards compatibility). To enable removal
+either use the CLEANUP option which will trigger removal on program
+exit, or consider using the "newdir" method in the object interface which
+will allow the directory to be cleaned up when the object goes out of
+scope.
+
+The behaviour of the function depends on the arguments:
+
+ $tempdir = tempdir();
+
+Create a directory in tmpdir() (see L<File::Spec|File::Spec>).
+
+ $tempdir = tempdir( $template );
+
+Create a directory from the supplied template. This template is
+similar to that described for tempfile(). `X' characters at the end
+of the template are replaced with random letters to construct the
+directory name. At least four `X' characters must be in the template.
+
+ $tempdir = tempdir ( DIR => $dir );
+
+Specifies the directory to use for the temporary directory.
+The temporary directory name is derived from an internal template.
+
+ $tempdir = tempdir ( $template, DIR => $dir );
+
+Prepend the supplied directory name to the template. The template
+should not include parent directory specifications itself. Any parent
+directory specifications are removed from the template before
+prepending the supplied directory.
+
+ $tempdir = tempdir ( $template, TMPDIR => 1 );
+
+Using the supplied template, create the temporary directory in
+a standard location for temporary files. Equivalent to doing
+
+ $tempdir = tempdir ( $template, DIR => File::Spec->tmpdir);
+
+but shorter. Parent directory specifications are stripped from the
+template itself. The C<TMPDIR> option is ignored if C<DIR> is set
+explicitly. Additionally, C<TMPDIR> is implied if neither a template
+nor a directory are supplied.
+
+ $tempdir = tempdir( $template, CLEANUP => 1);
+
+Create a temporary directory using the supplied template, but
+attempt to remove it (and all files inside it) when the program
+exits. Note that an attempt will be made to remove all files from
+the directory even if they were not created by this module (otherwise
+why ask to clean it up?). The directory removal is made with
+the rmtree() function from the L<File::Path|File::Path> module.
+Of course, if the template is not specified, the temporary directory
+will be created in tmpdir() and will also be removed at program exit.
+
+Will croak() if there is an error.
+
+=cut
+
+# '
+
+sub tempdir {
+ if ( @_ && $_[0] eq 'File::Temp' ) {
+ croak "'tempdir' can't be called as a method";
+ }
+
+ # Can not check for argument count since we can have any
+ # number of args
+
+ # Default options
+ my %options = (
+ "CLEANUP" => 0, # Remove directory on exit
+ "DIR" => '', # Root directory
+ "TMPDIR" => 0, # Use tempdir with template
+ );
+
+ # Check to see whether we have an odd or even number of arguments
+ my ($maybe_template, $args) = _parse_args(@_);
+ my $template = @$maybe_template ? $maybe_template->[0] : undef;
+
+ # Read the options and merge with defaults
+ %options = (%options, %$args);
+
+ # Modify or generate the template
+
+ # Deal with the DIR and TMPDIR options
+ if (defined $template) {
+
+ # Need to strip directory path if using DIR or TMPDIR
+ if ($options{'TMPDIR'} || $options{'DIR'}) {
+
+ # Strip parent directory from the filename
+ #
+ # There is no filename at the end
+ $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS';
+ my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1);
+
+ # Last directory is then our template
+ $template = (File::Spec->splitdir($directories))[-1];
+
+ # Prepend the supplied directory or temp dir
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catdir($options{"DIR"}, $template);
+
+ } elsif ($options{TMPDIR}) {
+
+ # Prepend tmpdir
+ $template = File::Spec->catdir(File::Spec->tmpdir, $template);
+
+ }
+
+ }
+
+ } else {
+
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catdir($options{"DIR"}, TEMPXXX);
+
+ } else {
+
+ $template = File::Spec->catdir(File::Spec->tmpdir, TEMPXXX);
+
+ }
+
+ }
+
+ # Create the directory
+ my $tempdir;
+ my $suffixlen = 0;
+ if ($^O eq 'VMS') { # dir names can end in delimiters
+ $template =~ m/([\.\]:>]+)$/;
+ $suffixlen = length($1);
+ }
+ if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
+ # dir name has a trailing ':'
+ ++$suffixlen;
+ }
+
+ my $errstr;
+ croak "Error in tempdir() using $template: $errstr"
+ unless ((undef, $tempdir) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 1 ,
+ "suffixlen" => $suffixlen,
+ "ErrStr" => \$errstr,
+ ) );
+
+ # Install exit handler; must be dynamic to get lexical
+ if ( $options{'CLEANUP'} && -d $tempdir) {
+ _deferred_unlink(undef, $tempdir, 1);
+ }
+
+ # Return the dir name
+ return $tempdir;
+
+}
+
+=back
+
+=head1 MKTEMP FUNCTIONS
+
+The following functions are Perl implementations of the
+mktemp() family of temp file generation system calls.
+
+=over 4
+
+=item B<mkstemp>
+
+Given a template, returns a filehandle to the temporary file and the name
+of the file.
+
+ ($fh, $name) = mkstemp( $template );
+
+In scalar context, just the filehandle is returned.
+
+The template may be any filename with some number of X's appended
+to it, for example F</tmp/temp.XXXX>. The trailing X's are replaced
+with unique alphanumeric combinations.
+
+Will croak() if there is an error.
+
+=cut
+
+
+
+sub mkstemp {
+
+ croak "Usage: mkstemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+
+ my ($fh, $path, $errstr);
+ croak "Error in mkstemp using $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => 1,
+ "mkdir"=> 0 ,
+ "suffixlen" => 0,
+ "ErrStr" => \$errstr,
+ ) );
+
+ if (wantarray()) {
+ return ($fh, $path);
+ } else {
+ return $fh;
+ }
+
+}
+
+
+=item B<mkstemps>
+
+Similar to mkstemp(), except that an extra argument can be supplied
+with a suffix to be appended to the template.
+
+ ($fh, $name) = mkstemps( $template, $suffix );
+
+For example a template of C<testXXXXXX> and suffix of C<.dat>
+would generate a file similar to F<testhGji_w.dat>.
+
+Returns just the filehandle alone when called in scalar context.
+
+Will croak() if there is an error.
+
+=cut
+
+sub mkstemps {
+
+ croak "Usage: mkstemps(template, suffix)"
+ if scalar(@_) != 2;
+
+
+ my $template = shift;
+ my $suffix = shift;
+
+ $template .= $suffix;
+
+ my ($fh, $path, $errstr);
+ croak "Error in mkstemps using $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => 1,
+ "mkdir"=> 0 ,
+ "suffixlen" => length($suffix),
+ "ErrStr" => \$errstr,
+ ) );
+
+ if (wantarray()) {
+ return ($fh, $path);
+ } else {
+ return $fh;
+ }
+
+}
+
+=item B<mkdtemp>
+
+Create a directory from a template. The template must end in
+X's that are replaced by the routine.
+
+ $tmpdir_name = mkdtemp($template);
+
+Returns the name of the temporary directory created.
+
+Directory must be removed by the caller.
+
+Will croak() if there is an error.
+
+=cut
+
+#' # for emacs
+
+sub mkdtemp {
+
+ croak "Usage: mkdtemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+ my $suffixlen = 0;
+ if ($^O eq 'VMS') { # dir names can end in delimiters
+ $template =~ m/([\.\]:>]+)$/;
+ $suffixlen = length($1);
+ }
+ if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
+ # dir name has a trailing ':'
+ ++$suffixlen;
+ }
+ my ($junk, $tmpdir, $errstr);
+ croak "Error creating temp directory from template $template\: $errstr"
+ unless (($junk, $tmpdir) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 1 ,
+ "suffixlen" => $suffixlen,
+ "ErrStr" => \$errstr,
+ ) );
+
+ return $tmpdir;
+
+}
+
+=item B<mktemp>
+
+Returns a valid temporary filename but does not guarantee
+that the file will not be opened by someone else.
+
+ $unopened_file = mktemp($template);
+
+Template is the same as that required by mkstemp().
+
+Will croak() if there is an error.
+
+=cut
+
+sub mktemp {
+
+ croak "Usage: mktemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+
+ my ($tmpname, $junk, $errstr);
+ croak "Error getting name to temp file from template $template: $errstr"
+ unless (($junk, $tmpname) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 0 ,
+ "suffixlen" => 0,
+ "ErrStr" => \$errstr,
+ ) );
+
+ return $tmpname;
+}
+
+=back
+
+=head1 POSIX FUNCTIONS
+
+This section describes the re-implementation of the tmpnam()
+and tmpfile() functions described in L<POSIX>
+using the mkstemp() from this module.
+
+Unlike the L<POSIX|POSIX> implementations, the directory used
+for the temporary file is not specified in a system include
+file (C<P_tmpdir>) but simply depends on the choice of tmpdir()
+returned by L<File::Spec|File::Spec>. On some implementations this
+location can be set using the C<TMPDIR> environment variable, which
+may not be secure.
+If this is a problem, simply use mkstemp() and specify a template.
+
+=over 4
+
+=item B<tmpnam>
+
+When called in scalar context, returns the full name (including path)
+of a temporary file (uses mktemp()). The only check is that the file does
+not already exist, but there is no guarantee that that condition will
+continue to apply.
+
+ $file = tmpnam();
+
+When called in list context, a filehandle to the open file and
+a filename are returned. This is achieved by calling mkstemp()
+after constructing a suitable template.
+
+ ($fh, $file) = tmpnam();
+
+If possible, this form should be used to prevent possible
+race conditions.
+
+See L<File::Spec/tmpdir> for information on the choice of temporary
+directory for a particular operating system.
+
+Will croak() if there is an error.
+
+=cut
+
+sub tmpnam {
+
+ # Retrieve the temporary directory name
+ my $tmpdir = File::Spec->tmpdir;
+
+ croak "Error temporary directory is not writable"
+ if $tmpdir eq '';
+
+ # Use a ten character template and append to tmpdir
+ my $template = File::Spec->catfile($tmpdir, TEMPXXX);
+
+ if (wantarray() ) {
+ return mkstemp($template);
+ } else {
+ return mktemp($template);
+ }
+
+}
+
+=item B<tmpfile>
+
+Returns the filehandle of a temporary file.
+
+ $fh = tmpfile();
+
+The file is removed when the filehandle is closed or when the program
+exits. No access to the filename is provided.
+
+If the temporary file can not be created undef is returned.
+Currently this command will probably not work when the temporary
+directory is on an NFS file system.
+
+Will croak() if there is an error.
+
+=cut
+
+sub tmpfile {
+
+ # Simply call tmpnam() in a list context
+ my ($fh, $file) = tmpnam();
+
+ # Make sure file is removed when filehandle is closed
+ # This will fail on NFS
+ unlink0($fh, $file)
+ or return undef;
+
+ return $fh;
+
+}
+
+=back
+
+=head1 ADDITIONAL FUNCTIONS
+
+These functions are provided for backwards compatibility
+with common tempfile generation C library functions.
+
+They are not exported and must be addressed using the full package
+name.
+
+=over 4
+
+=item B<tempnam>
+
+Return the name of a temporary file in the specified directory
+using a prefix. The file is guaranteed not to exist at the time
+the function was called, but such guarantees are good for one
+clock tick only. Always use the proper form of C<sysopen>
+with C<O_CREAT | O_EXCL> if you must open such a filename.
+
+ $filename = File::Temp::tempnam( $dir, $prefix );
+
+Equivalent to running mktemp() with $dir/$prefixXXXXXXXX
+(using unix file convention as an example)
+
+Because this function uses mktemp(), it can suffer from race conditions.
+
+Will croak() if there is an error.
+
+=cut
+
+sub tempnam {
+
+ croak 'Usage tempnam($dir, $prefix)' unless scalar(@_) == 2;
+
+ my ($dir, $prefix) = @_;
+
+ # Add a string to the prefix
+ $prefix .= 'XXXXXXXX';
+
+ # Concatenate the directory to the file
+ my $template = File::Spec->catfile($dir, $prefix);
+
+ return mktemp($template);
+
+}
+
+=back
+
+=head1 UTILITY FUNCTIONS
+
+Useful functions for dealing with the filehandle and filename.
+
+=over 4
+
+=item B<unlink0>
+
+Given an open filehandle and the associated filename, make a safe
+unlink. This is achieved by first checking that the filename and
+filehandle initially point to the same file and that the number of
+links to the file is 1 (all fields returned by stat() are compared).
+Then the filename is unlinked and the filehandle checked once again to
+verify that the number of links on that file is now 0. This is the
+closest you can come to making sure that the filename unlinked was the
+same as the file whose descriptor you hold.
+
+ unlink0($fh, $path)
+ or die "Error unlinking file $path safely";
+
+Returns false on error but croaks() if there is a security
+anomaly. The filehandle is not closed since on some occasions this is
+not required.
+
+On some platforms, for example Windows NT, it is not possible to
+unlink an open file (the file must be closed first). On those
+platforms, the actual unlinking is deferred until the program ends and
+good status is returned. A check is still performed to make sure that
+the filehandle and filename are pointing to the same thing (but not at
+the time the end block is executed since the deferred removal may not
+have access to the filehandle).
+
+Additionally, on Windows NT not all the fields returned by stat() can
+be compared. For example, the C<dev> and C<rdev> fields seem to be
+different. Also, it seems that the size of the file returned by stat()
+does not always agree, with C<stat(FH)> being more accurate than
+C<stat(filename)>, presumably because of caching issues even when
+using autoflush (this is usually overcome by waiting a while after
+writing to the tempfile before attempting to C<unlink0> it).
+
+Finally, on NFS file systems the link count of the file handle does
+not always go to zero immediately after unlinking. Currently, this
+command is expected to fail on NFS disks.
+
+This function is disabled if the global variable $KEEP_ALL is true
+and an unlink on open file is supported. If the unlink is to be deferred
+to the END block, the file is still registered for removal.
+
+This function should not be called if you are using the object oriented
+interface since the it will interfere with the object destructor deleting
+the file.
+
+=cut
+
+sub unlink0 {
+
+ croak 'Usage: unlink0(filehandle, filename)'
+ unless scalar(@_) == 2;
+
+ # Read args
+ my ($fh, $path) = @_;
+
+ cmpstat($fh, $path) or return 0;
+
+ # attempt remove the file (does not work on some platforms)
+ if (_can_unlink_opened_file()) {
+
+ # return early (Without unlink) if we have been instructed to retain files.
+ return 1 if $KEEP_ALL;
+
+ # XXX: do *not* call this on a directory; possible race
+ # resulting in recursive removal
+ croak "unlink0: $path has become a directory!" if -d $path;
+ unlink($path) or return 0;
+
+ # Stat the filehandle
+ my @fh = stat $fh;
+
+ print "Link count = $fh[3] \n" if $DEBUG;
+
+ # Make sure that the link count is zero
+ # - Cygwin provides deferred unlinking, however,
+ # on Win9x the link count remains 1
+ # On NFS the link count may still be 1 but we can't know that
+ # we are on NFS. Since we can't be sure, we'll defer it
+
+ return 1 if $fh[3] == 0 || $^O eq 'cygwin';
+ }
+ # fall-through if we can't unlink now
+ _deferred_unlink($fh, $path, 0);
+ return 1;
+}
+
+=item B<cmpstat>
+
+Compare C<stat> of filehandle with C<stat> of provided filename. This
+can be used to check that the filename and filehandle initially point
+to the same file and that the number of links to the file is 1 (all
+fields returned by stat() are compared).
+
+ cmpstat($fh, $path)
+ or die "Error comparing handle with file";
+
+Returns false if the stat information differs or if the link count is
+greater than 1. Calls croak if there is a security anomaly.
+
+On certain platforms, for example Windows, not all the fields returned by stat()
+can be compared. For example, the C<dev> and C<rdev> fields seem to be
+different in Windows. Also, it seems that the size of the file
+returned by stat() does not always agree, with C<stat(FH)> being more
+accurate than C<stat(filename)>, presumably because of caching issues
+even when using autoflush (this is usually overcome by waiting a while
+after writing to the tempfile before attempting to C<unlink0> it).
+
+Not exported by default.
+
+=cut
+
+sub cmpstat {
+
+ croak 'Usage: cmpstat(filehandle, filename)'
+ unless scalar(@_) == 2;
+
+ # Read args
+ my ($fh, $path) = @_;
+
+ warn "Comparing stat\n"
+ if $DEBUG;
+
+ # Stat the filehandle - which may be closed if someone has manually
+ # closed the file. Can not turn off warnings without using $^W
+ # unless we upgrade to 5.006 minimum requirement
+ my @fh;
+ {
+ local ($^W) = 0;
+ @fh = stat $fh;
+ }
+ return unless @fh;
+
+ if ($fh[3] > 1 && $^W) {
+ carp "unlink0: fstat found too many links; SB=@fh" if $^W;
+ }
+
+ # Stat the path
+ my @path = stat $path;
+
+ unless (@path) {
+ carp "unlink0: $path is gone already" if $^W;
+ return;
+ }
+
+ # this is no longer a file, but may be a directory, or worse
+ unless (-f $path) {
+ confess "panic: $path is no longer a file: SB=@fh";
+ }
+
+ # Do comparison of each member of the array
+ # On WinNT dev and rdev seem to be different
+ # depending on whether it is a file or a handle.
+ # Cannot simply compare all members of the stat return
+ # Select the ones we can use
+ my @okstat = (0..$#fh); # Use all by default
+ if ($^O eq 'MSWin32') {
+ @okstat = (1,2,3,4,5,7,8,9,10);
+ } elsif ($^O eq 'os2') {
+ @okstat = (0, 2..$#fh);
+ } elsif ($^O eq 'VMS') { # device and file ID are sufficient
+ @okstat = (0, 1);
+ } elsif ($^O eq 'dos') {
+ @okstat = (0,2..7,11..$#fh);
+ } elsif ($^O eq 'mpeix') {
+ @okstat = (0..4,8..10);
+ }
+
+ # Now compare each entry explicitly by number
+ for (@okstat) {
+ print "Comparing: $_ : $fh[$_] and $path[$_]\n" if $DEBUG;
+ # Use eq rather than == since rdev, blksize, and blocks (6, 11,
+ # and 12) will be '' on platforms that do not support them. This
+ # is fine since we are only comparing integers.
+ unless ($fh[$_] eq $path[$_]) {
+ warn "Did not match $_ element of stat\n" if $DEBUG;
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+=item B<unlink1>
+
+Similar to C<unlink0> except after file comparison using cmpstat, the
+filehandle is closed prior to attempting to unlink the file. This
+allows the file to be removed without using an END block, but does
+mean that the post-unlink comparison of the filehandle state provided
+by C<unlink0> is not available.
+
+ unlink1($fh, $path)
+ or die "Error closing and unlinking file";
+
+Usually called from the object destructor when using the OO interface.
+
+Not exported by default.
+
+This function is disabled if the global variable $KEEP_ALL is true.
+
+Can call croak() if there is a security anomaly during the stat()
+comparison.
+
+=cut
+
+sub unlink1 {
+ croak 'Usage: unlink1(filehandle, filename)'
+ unless scalar(@_) == 2;
+
+ # Read args
+ my ($fh, $path) = @_;
+
+ cmpstat($fh, $path) or return 0;
+
+ # Close the file
+ close( $fh ) or return 0;
+
+ # Make sure the file is writable (for windows)
+ _force_writable( $path );
+
+ # return early (without unlink) if we have been instructed to retain files.
+ return 1 if $KEEP_ALL;
+
+ # remove the file
+ return unlink($path);
+}
+
+=item B<cleanup>
+
+Calling this function will cause any temp files or temp directories
+that are registered for removal to be removed. This happens automatically
+when the process exits but can be triggered manually if the caller is sure
+that none of the temp files are required. This method can be registered as
+an Apache callback.
+
+Note that if a temp directory is your current directory, it cannot be
+removed. C<chdir()> out of the directory first before calling
+C<cleanup()>. (For the cleanup at program exit when the CLEANUP flag
+is set, this happens automatically.)
+
+On OSes where temp files are automatically removed when the temp file
+is closed, calling this function will have no effect other than to remove
+temporary directories (which may include temporary files).
+
+ File::Temp::cleanup();
+
+Not exported by default.
+
+=back
+
+=head1 PACKAGE VARIABLES
+
+These functions control the global state of the package.
+
+=over 4
+
+=item B<safe_level>
+
+Controls the lengths to which the module will go to check the safety of the
+temporary file or directory before proceeding.
+Options are:
+
+=over 8
+
+=item STANDARD
+
+Do the basic security measures to ensure the directory exists and is
+writable, that temporary files are opened only if they do not already
+exist, and that possible race conditions are avoided. Finally the
+L<unlink0|"unlink0"> function is used to remove files safely.
+
+=item MEDIUM
+
+In addition to the STANDARD security, the output directory is checked
+to make sure that it is owned either by root or the user running the
+program. If the directory is writable by group or by other, it is then
+checked to make sure that the sticky bit is set.
+
+Will not work on platforms that do not support the C<-k> test
+for sticky bit.
+
+=item HIGH
+
+In addition to the MEDIUM security checks, also check for the
+possibility of ``chown() giveaway'' using the L<POSIX|POSIX>
+sysconf() function. If this is a possibility, each directory in the
+path is checked in turn for safeness, recursively walking back to the
+root directory.
+
+For platforms that do not support the L<POSIX|POSIX>
+C<_PC_CHOWN_RESTRICTED> symbol (for example, Windows NT) it is
+assumed that ``chown() giveaway'' is possible and the recursive test
+is performed.
+
+=back
+
+The level can be changed as follows:
+
+ File::Temp->safe_level( File::Temp::HIGH );
+
+The level constants are not exported by the module.
+
+Currently, you must be running at least perl v5.6.0 in order to
+run with MEDIUM or HIGH security. This is simply because the
+safety tests use functions from L<Fcntl|Fcntl> that are not
+available in older versions of perl. The problem is that the version
+number for Fcntl is the same in perl 5.6.0 and in 5.005_03 even though
+they are different versions.
+
+On systems that do not support the HIGH or MEDIUM safety levels
+(for example Win NT or OS/2) any attempt to change the level will
+be ignored. The decision to ignore rather than raise an exception
+allows portable programs to be written with high security in mind
+for the systems that can support this without those programs failing
+on systems where the extra tests are irrelevant.
+
+If you really need to see whether the change has been accepted
+simply examine the return value of C<safe_level>.
+
+ $newlevel = File::Temp->safe_level( File::Temp::HIGH );
+ die "Could not change to high security"
+ if $newlevel != File::Temp::HIGH;
+
+=cut
+
+{
+ # protect from using the variable itself
+ my $LEVEL = STANDARD;
+ sub safe_level {
+ my $self = shift;
+ if (@_) {
+ my $level = shift;
+ if (($level != STANDARD) && ($level != MEDIUM) && ($level != HIGH)) {
+ carp "safe_level: Specified level ($level) not STANDARD, MEDIUM or HIGH - ignoring\n" if $^W;
+ } else {
+ # Don't allow this on perl 5.005 or earlier
+ if ($] < 5.006 && $level != STANDARD) {
+ # Cant do MEDIUM or HIGH checks
+ croak "Currently requires perl 5.006 or newer to do the safe checks";
+ }
+ # Check that we are allowed to change level
+ # Silently ignore if we can not.
+ $LEVEL = $level if _can_do_level($level);
+ }
+ }
+ return $LEVEL;
+ }
+}
+
+=item TopSystemUID
+
+This is the highest UID on the current system that refers to a root
+UID. This is used to make sure that the temporary directory is
+owned by a system UID (C<root>, C<bin>, C<sys> etc) rather than
+simply by root.
+
+This is required since on many unix systems C</tmp> is not owned
+by root.
+
+Default is to assume that any UID less than or equal to 10 is a root
+UID.
+
+ File::Temp->top_system_uid(10);
+ my $topid = File::Temp->top_system_uid;
+
+This value can be adjusted to reduce security checking if required.
+The value is only relevant when C<safe_level> is set to MEDIUM or higher.
+
+=cut
+
+{
+ my $TopSystemUID = 10;
+ $TopSystemUID = 197108 if $^O eq 'interix'; # "Administrator"
+ sub top_system_uid {
+ my $self = shift;
+ if (@_) {
+ my $newuid = shift;
+ croak "top_system_uid: UIDs should be numeric"
+ unless $newuid =~ /^\d+$/s;
+ $TopSystemUID = $newuid;
+ }
+ return $TopSystemUID;
+ }
+}
+
+=item B<$KEEP_ALL>
+
+Controls whether temporary files and directories should be retained
+regardless of any instructions in the program to remove them
+automatically. This is useful for debugging but should not be used in
+production code.
+
+ $File::Temp::KEEP_ALL = 1;
+
+Default is for files to be removed as requested by the caller.
+
+In some cases, files will only be retained if this variable is true
+when the file is created. This means that you can not create a temporary
+file, set this variable and expect the temp file to still be around
+when the program exits.
+
+=item B<$DEBUG>
+
+Controls whether debugging messages should be enabled.
+
+ $File::Temp::DEBUG = 1;
+
+Default is for debugging mode to be disabled.
+
+=back
+
+=head1 WARNING
+
+For maximum security, endeavour always to avoid ever looking at,
+touching, or even imputing the existence of the filename. You do not
+know that that filename is connected to the same file as the handle
+you have, and attempts to check this can only trigger more race
+conditions. It's far more secure to use the filehandle alone and
+dispense with the filename altogether.
+
+If you need to pass the handle to something that expects a filename
+then on a unix system you can use C<"/dev/fd/" . fileno($fh)> for
+arbitrary programs. Perl code that uses the 2-argument version of
+C<< open >> can be passed C<< "+<=&" . fileno($fh) >>. Otherwise you
+will need to pass the filename. You will have to clear the
+close-on-exec bit on that file descriptor before passing it to another
+process.
+
+ use Fcntl qw/F_SETFD F_GETFD/;
+ fcntl($tmpfh, F_SETFD, 0)
+ or die "Can't clear close-on-exec flag on temp fh: $!\n";
+
+=head2 Temporary files and NFS
+
+Some problems are associated with using temporary files that reside
+on NFS file systems and it is recommended that a local filesystem
+is used whenever possible. Some of the security tests will most probably
+fail when the temp file is not local. Additionally, be aware that
+the performance of I/O operations over NFS will not be as good as for
+a local disk.
+
+=head2 Forking
+
+In some cases files created by File::Temp are removed from within an
+END block. Since END blocks are triggered when a child process exits
+(unless C<POSIX::_exit()> is used by the child) File::Temp takes care
+to only remove those temp files created by a particular process ID. This
+means that a child will not attempt to remove temp files created by the
+parent process.
+
+If you are forking many processes in parallel that are all creating
+temporary files, you may need to reset the random number seed using
+srand(EXPR) in each child else all the children will attempt to walk
+through the same set of random file names and may well cause
+themselves to give up if they exceed the number of retry attempts.
+
+=head2 Directory removal
+
+Note that if you have chdir'ed into the temporary directory and it is
+subsequently cleaned up (either in the END block or as part of object
+destruction), then you will get a warning from File::Path::rmtree().
+
+=head2 Taint mode
+
+If you need to run code under taint mode, updating to the latest
+L<File::Spec> is highly recommended.
+
+=head2 BINMODE
+
+The file returned by File::Temp will have been opened in binary mode
+if such a mode is available. If that is not correct, use the C<binmode()>
+function to change the mode of the filehandle.
+
+Note that you can modify the encoding of a file opened by File::Temp
+also by using C<binmode()>.
+
+=head1 HISTORY
+
+Originally began life in May 1999 as an XS interface to the system
+mkstemp() function. In March 2000, the OpenBSD mkstemp() code was
+translated to Perl for total control of the code's
+security checking, to ensure the presence of the function regardless of
+operating system and to help with portability. The module was shipped
+as a standard part of perl from v5.6.1.
+
+=head1 SEE ALSO
+
+L<POSIX/tmpnam>, L<POSIX/tmpfile>, L<File::Spec>, L<File::Path>
+
+See L<IO::File> and L<File::MkTemp>, L<Apache::TempFile> for
+different implementations of temporary file handling.
+
+See L<File::Tempdir> for an alternative object-oriented wrapper for
+the C<tempdir> function.
+
+=head1 AUTHOR
+
+Tim Jenness E<lt>tjenness at cpan.orgE<gt>
+
+Copyright (C) 2007-2010 Tim Jenness.
+Copyright (C) 1999-2007 Tim Jenness and the UK Particle Physics and
+Astronomy Research Council. All Rights Reserved. This program is free
+software; you can redistribute it and/or modify it under the same
+terms as Perl itself.
+
+Original Perl implementation loosely based on the OpenBSD C code for
+mkstemp(). Thanks to Tom Christiansen for suggesting that this module
+should be written and providing ideas for code improvements and
+security enhancements.
+
+=cut
+
+package File::Temp::Dir;
+
+use File::Path qw/ rmtree /;
+use strict;
+use overload '""' => "STRINGIFY",
+ '0+' => \&File::Temp::NUMIFY,
+ fallback => 1;
+
+# private class specifically to support tempdir objects
+# created by File::Temp->newdir
+
+# ostensibly the same method interface as File::Temp but without
+# inheriting all the IO::Seekable methods and other cruft
+
+# Read-only - returns the name of the temp directory
+
+sub dirname {
+ my $self = shift;
+ return $self->{DIRNAME};
+}
+
+sub STRINGIFY {
+ my $self = shift;
+ return $self->dirname;
+}
+
+sub unlink_on_destroy {
+ my $self = shift;
+ if (@_) {
+ $self->{CLEANUP} = shift;
+ }
+ return $self->{CLEANUP};
+}
+
+sub DESTROY {
+ my $self = shift;
+ local($., $@, $!, $^E, $?);
+ if ($self->unlink_on_destroy &&
+ $$ == $self->{LAUNCHPID} && !$File::Temp::KEEP_ALL) {
+ if (-d $self->{REALNAME}) {
+ # Some versions of rmtree will abort if you attempt to remove
+ # the directory you are sitting in. We protect that and turn it
+ # into a warning. We do this because this occurs during object
+ # destruction and so can not be caught by the user.
+ eval { rmtree($self->{REALNAME}, $File::Temp::DEBUG, 0); };
+ warn $@ if ($@ && $^W);
+ }
+ }
+}
+
+
+1;
+
+# vim: ts=2 sts=2 sw=2 et:
Added: vendor/perl/dist/cpan/File-Temp/t/rmtree.t
===================================================================
--- vendor/perl/dist/cpan/File-Temp/t/rmtree.t (rev 0)
+++ vendor/perl/dist/cpan/File-Temp/t/rmtree.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+use Test::More tests => 1;
+
+use File::Spec;
+use File::Path;
+use File::Temp;
+
+rmtree "testing";
+mkdir "testing" or die "mkdir failed: $!";
+chdir "testing";
+mkdir "tmp" or die "mkdir failed: $!";
+
+my $tempdirstr;
+{
+ my $dir = File::Temp->newdir( DIR => "tmp" );
+ $tempdirstr = "$dir";
+
+ mkdir "hide" or die "mkdir failed: $!";
+ chdir "hide";
+}
+
+chdir File::Spec->updir;
+$tempdirstr = File::Spec->rel2abs($tempdirstr);
+ok !-d $tempdirstr or diag dircontent("tmp", $tempdirstr);
+
+# cleanup
+chdir File::Spec->updir;
+rmtree( "testing" );
+
+exit;
+
+sub dircontent {
+ my $dir = shift;
+ my $tempdirstr = shift;
+ my $str = "Contents of $dir (should not contain \"$tempdirstr\"):\n";
+ opendir(my $DH, $dir) or die "opendir failed; $!";
+ my @contents = grep { $_ !~ /^\.+/; } readdir($DH);
+ closedir($DH);
+ for my $ls (@contents) {
+ $str .= " $ls\n";
+ }
+ return $str;
+}
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/003_agent.t
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/003_agent.t (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/003_agent.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,33 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3;
+use HTTP::Tiny;
+
+# a couple tests to ensure that we get the default agent expected, the coorect
+# agent when specified, and the correct agent when specifified with a space at
+# the end of the string (as LWP::UserAgent does)
+
+
+my $default = 'HTTP-Tiny/' . (HTTP::Tiny->VERSION || 0);
+
+{
+ my $ua = HTTP::Tiny->new();
+ is $ua->agent, $default, 'default agent string is as expected';
+}
+
+{
+ my $ua = HTTP::Tiny->new(agent => 'something else');
+ is $ua->agent, 'something else', 'agent string is as expected';
+}
+
+{
+ my $ua = HTTP::Tiny->new(agent => 'something else ');
+ is
+ $ua->agent,
+ "something else $default",
+ 'agent string is as properly appended to',
+ ;
+}
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/101_head.t
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/101_head.t (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/101_head.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,74 @@
+#!perl
+
+use strict;
+use warnings;
+
+use File::Basename;
+use Test::More 0.88;
+use t::Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case
+ set_socket_source sort_headers $CRLF $LF];
+use HTTP::Tiny;
+BEGIN { monkey_patch() }
+
+for my $file ( dir_list("t/cases", qr/^head/ ) ) {
+ my $data = do { local (@ARGV,$/) = $file; <> };
+ my ($params, $expect_req, $give_res) = split /--+\n/, $data;
+ # cleanup source data
+ my $version = HTTP::Tiny->VERSION || 0;
+ $expect_req =~ s{VERSION}{$version};
+ s{\n}{$CRLF}g for ($expect_req, $give_res);
+
+ # figure out what request to make
+ my $case = parse_case($params);
+ my $url = $case->{url}[0];
+ my %options;
+
+ my %headers;
+ for my $line ( @{ $case->{headers} } ) {
+ my ($k,$v) = ($line =~ m{^([^:]+): (.*)$}g);
+ $headers{$k} = $v;
+ }
+ $options{headers} = \%headers if %headers;
+
+ if ( $case->{content} ) {
+ $options{content} = $case->{content}[0];
+ }
+ elsif ( $case->{content_cb} ) {
+ $options{content} = eval join "\n", @{$case->{content_cb}};
+ }
+
+ if ( $case->{trailer_cb} ) {
+ $options{trailer_callback} = eval join "\n", @{$case->{trailer_cb}};
+ }
+
+ # setup mocking and test
+ my $res_fh = tmpfile($give_res);
+ my $req_fh = tmpfile();
+
+ my $http = HTTP::Tiny->new;
+ set_socket_source($req_fh, $res_fh);
+
+ (my $url_basename = $url) =~ s{.*/}{};
+
+ my @call_args = %options ? ($url, \%options) : ($url);
+ my $response = $http->head(@call_args);
+
+ my $got_req = slurp($req_fh);
+
+ my $label = basename($file);
+
+ is( sort_headers($got_req), sort_headers($expect_req), "$label request" );
+
+ my ($rc) = $give_res =~ m{\S+\s+(\d+)}g;
+ is( $response->{status}, $rc, "$label response code $rc" )
+ or diag $response->{content};
+
+ if ( substr($rc,0,1) eq '2' ) {
+ ok( $response->{success}, "$label success flag true" );
+ }
+ else {
+ ok( ! $response->{success}, "$label success flag false" );
+ }
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/102_put.t
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/102_put.t (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/102_put.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,74 @@
+#!perl
+
+use strict;
+use warnings;
+
+use File::Basename;
+use Test::More 0.88;
+use t::Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case
+ set_socket_source sort_headers $CRLF $LF];
+use HTTP::Tiny;
+BEGIN { monkey_patch() }
+
+for my $file ( dir_list("t/cases", qr/^put/ ) ) {
+ my $data = do { local (@ARGV,$/) = $file; <> };
+ my ($params, $expect_req, $give_res) = split /--+\n/, $data;
+ # cleanup source data
+ my $version = HTTP::Tiny->VERSION || 0;
+ $expect_req =~ s{VERSION}{$version};
+ s{\n}{$CRLF}g for ($expect_req, $give_res);
+
+ # figure out what request to make
+ my $case = parse_case($params);
+ my $url = $case->{url}[0];
+ my %options;
+
+ my %headers;
+ for my $line ( @{ $case->{headers} } ) {
+ my ($k,$v) = ($line =~ m{^([^:]+): (.*)$}g);
+ $headers{$k} = $v;
+ }
+ $options{headers} = \%headers if %headers;
+
+ if ( $case->{content} ) {
+ $options{content} = $case->{content}[0];
+ }
+ elsif ( $case->{content_cb} ) {
+ $options{content} = eval join "\n", @{$case->{content_cb}};
+ }
+
+ if ( $case->{trailer_cb} ) {
+ $options{trailer_callback} = eval join "\n", @{$case->{trailer_cb}};
+ }
+
+ # setup mocking and test
+ my $res_fh = tmpfile($give_res);
+ my $req_fh = tmpfile();
+
+ my $http = HTTP::Tiny->new;
+ set_socket_source($req_fh, $res_fh);
+
+ (my $url_basename = $url) =~ s{.*/}{};
+
+ my @call_args = %options ? ($url, \%options) : ($url);
+ my $response = $http->put(@call_args);
+
+ my $got_req = slurp($req_fh);
+
+ my $label = basename($file);
+
+ is( sort_headers($got_req), sort_headers($expect_req), "$label request" );
+
+ my ($rc) = $give_res =~ m{\S+\s+(\d+)}g;
+ is( $response->{status}, $rc, "$label response code $rc" )
+ or diag $response->{content};
+
+ if ( substr($rc,0,1) eq '2' ) {
+ ok( $response->{success}, "$label success flag true" );
+ }
+ else {
+ ok( ! $response->{success}, "$label success flag false" );
+ }
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/103_delete.t
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/103_delete.t (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/103_delete.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,74 @@
+#!perl
+
+use strict;
+use warnings;
+
+use File::Basename;
+use Test::More 0.88;
+use t::Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case
+ set_socket_source sort_headers $CRLF $LF];
+use HTTP::Tiny;
+BEGIN { monkey_patch() }
+
+for my $file ( dir_list("t/cases", qr/^delete/ ) ) {
+ my $data = do { local (@ARGV,$/) = $file; <> };
+ my ($params, $expect_req, $give_res) = split /--+\n/, $data;
+ # cleanup source data
+ my $version = HTTP::Tiny->VERSION || 0;
+ $expect_req =~ s{VERSION}{$version};
+ s{\n}{$CRLF}g for ($expect_req, $give_res);
+
+ # figure out what request to make
+ my $case = parse_case($params);
+ my $url = $case->{url}[0];
+ my %options;
+
+ my %headers;
+ for my $line ( @{ $case->{headers} } ) {
+ my ($k,$v) = ($line =~ m{^([^:]+): (.*)$}g);
+ $headers{$k} = $v;
+ }
+ $options{headers} = \%headers if %headers;
+
+ if ( $case->{content} ) {
+ $options{content} = $case->{content}[0];
+ }
+ elsif ( $case->{content_cb} ) {
+ $options{content} = eval join "\n", @{$case->{content_cb}};
+ }
+
+ if ( $case->{trailer_cb} ) {
+ $options{trailer_callback} = eval join "\n", @{$case->{trailer_cb}};
+ }
+
+ # setup mocking and test
+ my $res_fh = tmpfile($give_res);
+ my $req_fh = tmpfile();
+
+ my $http = HTTP::Tiny->new;
+ set_socket_source($req_fh, $res_fh);
+
+ (my $url_basename = $url) =~ s{.*/}{};
+
+ my @call_args = %options ? ($url, \%options) : ($url);
+ my $response = $http->delete(@call_args);
+
+ my $got_req = slurp($req_fh);
+
+ my $label = basename($file);
+
+ is( sort_headers($got_req), sort_headers($expect_req), "$label request" );
+
+ my ($rc) = $give_res =~ m{\S+\s+(\d+)}g;
+ is( $response->{status}, $rc, "$label response code $rc" )
+ or diag $response->{content};
+
+ if ( substr($rc,0,1) eq '2' ) {
+ ok( $response->{success}, "$label success flag true" );
+ }
+ else {
+ ok( ! $response->{success}, "$label success flag false" );
+ }
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/104_post.t
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/104_post.t (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/104_post.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,74 @@
+#!perl
+
+use strict;
+use warnings;
+
+use File::Basename;
+use Test::More 0.88;
+use t::Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case
+ set_socket_source sort_headers $CRLF $LF];
+use HTTP::Tiny;
+BEGIN { monkey_patch() }
+
+for my $file ( dir_list("t/cases", qr/^post/ ) ) {
+ my $data = do { local (@ARGV,$/) = $file; <> };
+ my ($params, $expect_req, $give_res) = split /--+\n/, $data;
+ # cleanup source data
+ my $version = HTTP::Tiny->VERSION || 0;
+ $expect_req =~ s{VERSION}{$version};
+ s{\n}{$CRLF}g for ($expect_req, $give_res);
+
+ # figure out what request to make
+ my $case = parse_case($params);
+ my $url = $case->{url}[0];
+ my %options;
+
+ my %headers;
+ for my $line ( @{ $case->{headers} } ) {
+ my ($k,$v) = ($line =~ m{^([^:]+): (.*)$}g);
+ $headers{$k} = $v;
+ }
+ $options{headers} = \%headers if %headers;
+
+ if ( $case->{content} ) {
+ $options{content} = $case->{content}[0];
+ }
+ elsif ( $case->{content_cb} ) {
+ $options{content} = eval join "\n", @{$case->{content_cb}};
+ }
+
+ if ( $case->{trailer_cb} ) {
+ $options{trailer_callback} = eval join "\n", @{$case->{trailer_cb}};
+ }
+
+ # setup mocking and test
+ my $res_fh = tmpfile($give_res);
+ my $req_fh = tmpfile();
+
+ my $http = HTTP::Tiny->new;
+ set_socket_source($req_fh, $res_fh);
+
+ (my $url_basename = $url) =~ s{.*/}{};
+
+ my @call_args = %options ? ($url, \%options) : ($url);
+ my $response = $http->post(@call_args);
+
+ my $got_req = slurp($req_fh);
+
+ my $label = basename($file);
+
+ is( sort_headers($got_req), sort_headers($expect_req), "$label request" );
+
+ my ($rc) = $give_res =~ m{\S+\s+(\d+)}g;
+ is( $response->{status}, $rc, "$label response code $rc" )
+ or diag $response->{content};
+
+ if ( substr($rc,0,1) eq '2' ) {
+ ok( $response->{success}, "$label success flag true" );
+ }
+ else {
+ ok( ! $response->{success}, "$label success flag false" );
+ }
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/140_proxy.t
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/140_proxy.t (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/140_proxy.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,35 @@
+#!perl
+
+use strict;
+use warnings;
+
+use File::Basename;
+use Test::More 0.88;
+
+use HTTP::Tiny;
+
+# Require a true value
+for my $proxy (undef, "", 0){
+ local $ENV{http_proxy} = $proxy;
+ my $c = HTTP::Tiny->new();
+ ok(!defined $c->proxy);
+}
+
+# trailing / is optional
+for my $proxy ("http://localhost:8080/", "http://localhost:8080"){
+ local $ENV{http_proxy} = $proxy;
+ my $c = HTTP::Tiny->new();
+ is($c->proxy, $proxy);
+}
+
+# http_proxy must be http://<host>:<port> format
+{
+ local $ENV{http_proxy} = "localhost:8080";
+ eval {
+ my $c = HTTP::Tiny->new();
+ };
+ like($@, qr{Environment 'http_proxy' must be in format http://<host>:<port>/});
+}
+
+
+done_testing();
\ No newline at end of file
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/150_post_form.t
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/150_post_form.t (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/150_post_form.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,83 @@
+#!perl
+
+use strict;
+use warnings;
+use open IN => ':raw';
+
+use File::Basename;
+use Test::More 0.88;
+use t::Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case
+ set_socket_source sort_headers $CRLF $LF];
+use HTTP::Tiny;
+BEGIN { monkey_patch() }
+
+for my $file ( dir_list("t/cases", qr/^form/ ) ) {
+ my $data = do { local (@ARGV,$/) = $file; <> };
+ my ($params, $expect_req, $give_res) = split /--+\n/, $data;
+ # cleanup source data
+ my $version = HTTP::Tiny->VERSION || 0;
+ $expect_req =~ s{VERSION}{$version};
+ s{\n}{$CRLF}g for ($expect_req, $give_res);
+
+ # figure out what request to make
+ my $case = parse_case($params);
+ my $url = $case->{url}[0];
+ my %options;
+
+ my %headers;
+ for my $line ( @{ $case->{headers} } ) {
+ my ($k,$v) = ($line =~ m{^([^:]+): (.*)$}g);
+ $headers{$k} = $v;
+ }
+ $options{headers} = \%headers if %headers;
+
+ my @params = split "\\|", $case->{content}[0];
+ my $formdata;
+ if ( $case->{datatype} eq 'HASH' ) {
+ while ( @params ) {
+ my ($key, $value) = splice( @params, 0, 2 );
+ if ( ref $formdata->{$key} ) {
+ push @{$formdata->{$key}}, $value;
+ }
+ elsif ( exists $formdata->{$key} ) {
+ $formdata->{$key} = [ $formdata->{$key}, $value ];
+ }
+ else {
+ $formdata->{$key} = $value;
+ }
+ }
+ }
+ else {
+ $formdata = [ @params ];
+ }
+
+ # setup mocking and test
+ my $res_fh = tmpfile($give_res);
+ my $req_fh = tmpfile();
+
+ my $http = HTTP::Tiny->new;
+ set_socket_source($req_fh, $res_fh);
+
+ (my $url_basename = $url) =~ s{.*/}{};
+
+ my $response = $http->post_form( $url, $formdata, %options ? (\%options) : ());
+
+ my $got_req = slurp($req_fh);
+
+ my $label = basename($file);
+
+ is( sort_headers($got_req), sort_headers($expect_req), "$label request" );
+
+ my ($rc) = $give_res =~ m{\S+\s+(\d+)}g;
+ is( $response->{status}, $rc, "$label response code $rc" )
+ or diag $response->{content};
+
+ if ( substr($rc,0,1) eq '2' ) {
+ ok( $response->{success}, "$label success flag true" );
+ }
+ else {
+ ok( ! $response->{success}, "$label success flag false" );
+ }
+}
+
+done_testing;
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/cases/delete-01.txt
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/cases/delete-01.txt (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/cases/delete-01.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+url
+ http://example.com/index.html
+expected
+ abcdefghijklmnopqrstuvwxyz1234567890abcdef
+----------
+DELETE /index.html HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Length: 0
+
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-01.txt
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-01.txt (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-01.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+url
+ http://example.com/new
+headers
+ Content-Type: text/plain
+content
+ key|value|name|John Doe|noise|!@#$%^&*()
+datatype
+ ARRAY
+----------
+POST /new HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+Content-Type: application/x-www-form-urlencoded
+Content-Length: 60
+
+key=value&name=John+Doe&noise=%21%40%23%24%25%5E%26%2A%28%29
+----------
+HTTP/1.1 201 Created
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Location: http://example.com/new/01.txt
+Content-Length: 0
+
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-02.txt
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-02.txt (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-02.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+url
+ http://example.com/new
+content
+ key|value|name|John Doe|noise|!@#$%^&*()
+datatype
+ HASH
+----------
+POST /new HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+Content-Type: application/x-www-form-urlencoded
+Content-Length: 60
+
+key=value&name=John+Doe&noise=%21%40%23%24%25%5E%26%2A%28%29
+----------
+HTTP/1.1 201 Created
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Location: http://example.com/new/01.txt
+Content-Length: 0
+
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-03.txt
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-03.txt (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-03.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+url
+ http://example.com/new
+content
+ bar|baz|ack|foo
+datatype
+ ARRAY
+----------
+POST /new HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+Content-Type: application/x-www-form-urlencoded
+Content-Length: 15
+
+ack=foo&bar=baz
+----------
+HTTP/1.1 201 Created
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Location: http://example.com/new/01.txt
+Content-Length: 0
+
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-04.txt
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-04.txt (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/cases/form-04.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+url
+ http://example.com/new
+content
+ utf8|☺
+datatype
+ ARRAY
+----------
+POST /new HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+Content-Type: application/x-www-form-urlencoded
+Content-Length: 23
+
+utf8=%C3%A2%C2%98%C2%BA
+----------
+HTTP/1.1 201 Created
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Location: http://example.com/new/01.txt
+Content-Length: 0
+
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/cases/head-01.txt
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/cases/head-01.txt (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/cases/head-01.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,16 @@
+url
+ http://example.com/index.html
+expected
+ abcdefghijklmnopqrstuvwxyz1234567890abcdef
+----------
+HEAD /index.html HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 44
+
Added: vendor/perl/dist/cpan/HTTP-Tiny/t/cases/post-01.txt
===================================================================
--- vendor/perl/dist/cpan/HTTP-Tiny/t/cases/post-01.txt (rev 0)
+++ vendor/perl/dist/cpan/HTTP-Tiny/t/cases/post-01.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,24 @@
+url
+ http://example.com/index.html
+headers
+ Content-Type: text/plain
+ Content-Length: 42
+content
+ abcdefghijklmnopqrstuvwxyz1234567890abcdef
+----------
+POST /index.html HTTP/1.1
+Host: example.com
+Connection: close
+User-Agent: HTTP-Tiny/VERSION
+Content-Type: text/plain
+Content-Length: 42
+
+abcdefghijklmnopqrstuvwxyz1234567890abcdef
+
+----------
+HTTP/1.1 200 OK
+Date: Thu, 03 Feb 1994 00:00:00 GMT
+Content-Type: text/plain
+Content-Length: 42
+
+abcdefghijklmnopqrstuvwxyz1234567890abcdef
Added: vendor/perl/dist/cpan/IO-Compress/bin/zipdetails
===================================================================
--- vendor/perl/dist/cpan/IO-Compress/bin/zipdetails (rev 0)
+++ vendor/perl/dist/cpan/IO-Compress/bin/zipdetails 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2113 @@
+#!/usr/bin/perl
+
+# zipdetails
+#
+# Display info on the contents of a Zip file
+#
+
+use strict;
+use warnings ;
+
+use IO::File;
+use Encode;
+
+# Compression types
+use constant ZIP_CM_STORE => 0 ;
+use constant ZIP_CM_IMPLODE => 6 ;
+use constant ZIP_CM_DEFLATE => 8 ;
+use constant ZIP_CM_BZIP2 => 12 ;
+use constant ZIP_CM_LZMA => 14 ;
+use constant ZIP_CM_PPMD => 98 ;
+
+# General Purpose Flag
+use constant ZIP_GP_FLAG_ENCRYPTED_MASK => (1 << 0) ;
+use constant ZIP_GP_FLAG_STREAMING_MASK => (1 << 3) ;
+use constant ZIP_GP_FLAG_PATCHED_MASK => (1 << 5) ;
+use constant ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK => (1 << 6) ;
+use constant ZIP_GP_FLAG_LZMA_EOS_PRESENT => (1 << 1) ;
+use constant ZIP_GP_FLAG_LANGUAGE_ENCODING => (1 << 11) ;
+
+# Internal File Attributes
+use constant ZIP_IFA_TEXT_MASK => 1;
+
+# Signatures for each of the headers
+use constant ZIP_LOCAL_HDR_SIG => 0x04034b50;
+use constant ZIP_DATA_HDR_SIG => 0x08074b50;
+use constant ZIP_CENTRAL_HDR_SIG => 0x02014b50;
+use constant ZIP_END_CENTRAL_HDR_SIG => 0x06054b50;
+use constant ZIP64_END_CENTRAL_REC_HDR_SIG => 0x06064b50;
+use constant ZIP64_END_CENTRAL_LOC_HDR_SIG => 0x07064b50;
+use constant ZIP64_ARCHIVE_EXTRA_SIG => 0x08064b50;
+use constant ZIP64_DIGITAL_SIGNATURE_SIG => 0x05054b50;
+
+use constant ZIP_ARCHIVE_EXTRA_DATA_RECORD_SIG => 0x08064b50;
+
+# Extra sizes
+use constant ZIP_EXTRA_HEADER_SIZE => 2 ;
+use constant ZIP_EXTRA_MAX_SIZE => 0xFFFF ;
+use constant ZIP_EXTRA_SUBFIELD_ID_SIZE => 2 ;
+use constant ZIP_EXTRA_SUBFIELD_LEN_SIZE => 2 ;
+use constant ZIP_EXTRA_SUBFIELD_HEADER_SIZE => ZIP_EXTRA_SUBFIELD_ID_SIZE +
+ ZIP_EXTRA_SUBFIELD_LEN_SIZE;
+use constant ZIP_EXTRA_SUBFIELD_MAX_SIZE => ZIP_EXTRA_MAX_SIZE -
+ ZIP_EXTRA_SUBFIELD_HEADER_SIZE;
+
+my %ZIP_CompressionMethods =
+ (
+ 0 => 'Stored',
+ 1 => 'Shrunk',
+ 2 => 'Reduced compression factor 1',
+ 3 => 'Reduced compression factor 2',
+ 4 => 'Reduced compression factor 3',
+ 5 => 'Reduced compression factor 4',
+ 6 => 'Imploded',
+ 7 => 'Reserved for Tokenizing compression algorithm',
+ 8 => 'Deflated',
+ 9 => 'Enhanced Deflating using Deflate64(tm)',
+ 10 => 'PKWARE Data Compression Library Imploding',
+ 11 => 'Reserved by PKWARE',
+ 12 => 'BZIP2 ',
+ 13 => 'Reserved by PKWARE',
+ 14 => 'LZMA',
+ 15 => 'Reserved by PKWARE',
+ 16 => 'Reserved by PKWARE',
+ 17 => 'Reserved by PKWARE',
+ 18 => 'File is compressed using IBM TERSE (new)',
+ 19 => 'IBM LZ77 z Architecture (PFS)',
+ 96 => 'WinZip JPEG Compression',
+ 97 => 'WavPack compressed data',
+ 98 => 'PPMd version I, Rev 1',
+ 99 => 'AES Encryption',
+ );
+
+my %OS_Lookup = (
+ 0 => "MS-DOS",
+ 1 => "Amiga",
+ 2 => "OpenVMS",
+ 3 => "Unix",
+ 4 => "VM/CMS",
+ 5 => "Atari ST",
+ 6 => "HPFS (OS/2, NT 3.x)",
+ 7 => "Macintosh",
+ 8 => "Z-System",
+ 9 => "CP/M",
+ 10 => "Windoxs NTFS or TOPS-20",
+ 11 => "MVS or NTFS",
+ 12 => "VSE or SMS/QDOS",
+ 13 => "Acorn RISC OS",
+ 14 => "VFAT",
+ 15 => "alternate MVS",
+ 16 => "BeOS",
+ 17 => "Tandem",
+ 18 => "OS/400",
+ 19 => "OS/X (Darwin)",
+ 30 => "AtheOS/Syllable",
+ );
+
+
+my %Lookup = (
+ ZIP_LOCAL_HDR_SIG, \&LocalHeader,
+ ZIP_DATA_HDR_SIG, \&DataHeader,
+ ZIP_CENTRAL_HDR_SIG, \&CentralHeader,
+ ZIP_END_CENTRAL_HDR_SIG, \&EndCentralHeader,
+ ZIP64_END_CENTRAL_REC_HDR_SIG, \&Zip64EndCentralHeader,
+ ZIP64_END_CENTRAL_LOC_HDR_SIG, \&Zip64EndCentralLocator,
+
+ # TODO - Archive Encryption Headers
+ #ZIP_ARCHIVE_EXTRA_DATA_RECORD_SIG
+);
+
+my %Extras = (
+ 0x0001, ['ZIP64', \&decode_Zip64],
+ 0x0007, ['AV Info', undef],
+ 0x0008, ['Extended Language Encoding', undef],
+ 0x0009, ['OS/2 extended attributes', undef],
+ 0x000a, ['NTFS FileTimes', \&decode_NTFS_Filetimes],
+ 0x000c, ['OpenVMS', undef],
+ 0x000d, ['Unix', undef],
+ 0x000e, ['Stream & Fork Descriptors', undef],
+ 0x000f, ['Patch Descriptor', undef],
+ 0x0014, ['PKCS#7 Store for X.509 Certificates', undef],
+ 0x0015, ['X.509 Certificate ID and Signature for individual file', undef],
+ 0x0016, ['X.509 Certificate ID for Central Directory', undef],
+ 0x0017, ['Strong Encryption Header', undef],
+ 0x0018, ['Record Management Controls', undef],
+ 0x0019, ['PKCS#7 Encryption Recipient Certificate List', undef],
+
+
+ #The Header ID mappings defined by Info-ZIP and third parties are:
+
+ 0x0065, ['IBM S/390 attributes - uncompressed', undef],
+ 0x0066, ['IBM S/390 attributes - compressed', undef],
+ 0x07c8, ['Info-ZIP Macintosh (old, J. Lee)', undef],
+ 0x2605, ['ZipIt Macintosh (first version)', undef],
+ 0x2705, ['ZipIt Macintosh v 1.3.5 and newer (w/o full filename)', undef],
+ 0x2805, ['ZipIt Macintosh v 1.3.5 and newer ', undef],
+ 0x334d, ["Info-ZIP Macintosh (new, D. Haase's 'Mac3' field)", undef],
+ 0x4154, ['Tandem NSK', undef],
+ 0x4341, ['Acorn/SparkFS (David Pilling)', undef],
+ 0x4453, ['Windows NT security descriptor', \&decode_NT_security],
+ 0x4690, ['POSZIP 4690', undef],
+ 0x4704, ['VM/CMS', undef],
+ 0x470f, ['MVS', undef],
+ 0x4854, ['Theos, old inofficial port', undef],
+ 0x4b46, ['FWKCS MD5 (see below)', undef],
+ 0x4c41, ['OS/2 access control list (text ACL)', undef],
+ 0x4d49, ['Info-ZIP OpenVMS (obsolete)', undef],
+ 0x4d63, ['Macintosh SmartZIP, by Macro Bambini', undef],
+ 0x4f4c, ['Xceed original location extra field', undef],
+ 0x5356, ['AOS/VS (binary ACL)', undef],
+ 0x5455, ['Extended Timestamp', \&decode_UT],
+ 0x554e, ['Xceed unicode extra field', \&decode_Xceed_unicode],
+ 0x5855, ['Info-ZIP Unix (original; also OS/2, NT, etc.)', \&decode_UX],
+ 0x5a4c, ['ZipArchive Unicode Filename', undef],
+ 0x5a4d, ['ZipArchive Offsets Array', undef],
+ 0x6375, ["Info-ZIP Unicode Comment", \&decode_up ],
+ 0x6542, ['BeOS (BeBox, PowerMac, etc.)', undef],
+ 0x6854, ['Theos', undef],
+ 0x7075, ["Info-ZIP Unicode Path", \&decode_up ],
+ 0x756e, ['ASi Unix', undef],
+ 0x7441, ['AtheOS (AtheOS/Syllable attributes)', undef],
+ 0x7855, ["Unix Extra type 2", \&decode_Ux],
+ 0x7875, ["Unix Extra Type 3", \&decode_ux],
+ 0x9901, ['AES Encryption', \&decode_AES],
+ 0xA220, ["Microsoft Microsoft Open Packaging Growth Hint", undef ],
+ 0xCAFE, ["Java Executable", \&decode_Java_exe],
+ 0xfb4a, ['SMS/QDOS', undef],
+
+ );
+
+my $VERSION = "1.05" ;
+
+my $FH;
+
+my $ZIP64 = 0 ;
+my $NIBBLES = 8;
+my $LocalHeaderCount = 0;
+my $CentralHeaderCount = 0;
+
+my $START;
+my $OFFSET = new U64 0;
+my $TRAILING = 0 ;
+my $PAYLOADLIMIT = new U64 256;
+my $ZERO = new U64 0 ;
+
+sub prOff
+{
+ my $offset = shift;
+ my $s = offset($OFFSET);
+ $OFFSET->add($offset);
+ return $s;
+}
+
+sub offset
+{
+ my $v = shift ;
+
+ if (ref $v eq 'U64') {
+ my $hi = $v->getHigh();
+ my $lo = $v->getLow();
+
+ if ($hi)
+ {
+ my $hiNib = $NIBBLES - 8 ;
+ sprintf("%0${hiNib}X", $hi) .
+ sprintf("%08X", $lo);
+ }
+ else
+ {
+ sprintf("%0${NIBBLES}X", $lo);
+ }
+ }
+ else {
+ sprintf("%0${NIBBLES}X", $v);
+ }
+
+}
+
+my ($OFF, $LENGTH, $CONTENT, $TEXT, $VALUE) ;
+
+my $FMT1 ;
+my $FMT2 ;
+
+sub setupFormat
+{
+ my $wantVerbose = shift ;
+ my $nibbles = shift;
+
+ my $width = '@' . ('>' x ($nibbles -1));
+ my $space = " " x length($width);
+
+ my $fmt ;
+
+ if ($wantVerbose) {
+
+ $FMT1 = "
+ format STDOUT =
+$width $width ^<<<<<<<<<<<^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\$OFF, \$LENGTH, \$CONTENT, \$TEXT, \$VALUE
+$space $space ^<<<<<<<<<<<^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+ \$CONTENT, \$TEXT, \$VALUE
+.
+";
+
+ $FMT2 = "
+ format STDOUT =
+$width $width ^<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\$OFF, \$LENGTH, \$CONTENT, \$TEXT, \$VALUE
+$space $space ^<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+ \$CONTENT, \$TEXT, \$VALUE
+. " ;
+
+ }
+ else {
+
+ $FMT1 = "
+ format STDOUT =
+$width ^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\$OFF, \$TEXT, \$VALUE
+$space ^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+ \$TEXT, \$VALUE
+.
+";
+
+ $FMT2 = "
+ format STDOUT =
+$width ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\$OFF, \$TEXT, \$VALUE
+$space ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+ \$TEXT, \$VALUE
+.
+" ;
+ }
+
+ eval "$FMT1";
+
+ $| = 1;
+
+}
+
+sub mySpr
+{
+ my $format = shift ;
+
+ return "" if ! defined $format;
+ return $format unless @_ ;
+ return sprintf $format, @_ ;
+}
+
+sub out0
+{
+ my $size = shift;
+ my $text = shift;
+ my $format = shift;
+
+ $OFF = prOff($size);
+ $LENGTH = offset($size) ;
+ $CONTENT = '...';
+ $TEXT = $text;
+ $VALUE = mySpr $format, @_;
+
+ write;
+
+ skip($FH, $size);
+}
+
+sub xDump
+{
+ my $input = shift;
+
+ $input =~ tr/\0-\37\177-\377/./;
+ return $input;
+}
+
+sub hexDump
+{
+ my $input = shift;
+
+ my $out = unpack('H*', $input) ;
+ $out =~ s#(..)# $1#g ;
+ $out =~ s/^ //;
+ $out = uc $out;
+
+ return $out;
+}
+
+sub out
+{
+ my $data = shift;
+ my $text = shift;
+ my $format = shift;
+
+ my $size = length($data) ;
+
+ $OFF = prOff($size);
+ $LENGTH = offset($size) ;
+ $CONTENT = hexDump($data);
+ $TEXT = $text;
+ $VALUE = mySpr $format, @_;
+
+ write;
+}
+
+sub out1
+{
+ my $text = shift;
+ my $format = shift;
+
+ $OFF = '';
+ $LENGTH = '' ;
+ $CONTENT = '';
+ $TEXT = $text;
+ $VALUE = mySpr $format, @_;
+
+ write;
+}
+
+sub out2
+{
+ my $data = shift ;
+ my $text = shift ;
+ my $format = shift;
+
+ my $size = length($data) ;
+ $OFF = prOff($size);
+ $LENGTH = offset($size);
+ $CONTENT = hexDump($data);
+ $TEXT = $text;
+ $VALUE = mySpr $format, @_;
+
+ no warnings;
+ eval "$FMT2";
+ write ;
+ eval "$FMT1";
+}
+
+sub Value
+{
+ my $letter = shift;
+ my @value = @_;
+
+ if ($letter eq 'C')
+ { return Value_C(@value) }
+ elsif ($letter eq 'v')
+ { return Value_v(@value) }
+ elsif ($letter eq 'V')
+ { return Value_V(@value) }
+ elsif ($letter eq 'VV')
+ { return Value_VV(@value) }
+}
+
+sub outer
+{
+ my $name = shift ;
+ my $unpack = shift ;
+ my $size = shift ;
+ my $cb1 = shift ;
+ my $cb2 = shift ;
+
+
+ myRead(my $buff, $size);
+ my (@value) = unpack $unpack, $buff;
+ my $hex = Value($unpack, @value);
+
+ if (defined $cb1) {
+ my $v ;
+ if (ref $cb1 eq 'CODE') {
+ $v = $cb1->(@value) ;
+ }
+ else {
+ $v = $cb1 ;
+ }
+
+ $v = "'" . $v unless $v =~ /^'/;
+ $v .= "'" unless $v =~ /'$/;
+ $hex .= " $v" ;
+ }
+
+ out $buff, $name, $hex ;
+
+ $cb2->(@value)
+ if defined $cb2 ;
+
+ return $value[0];
+}
+
+sub out_C
+{
+ my $name = shift ;
+ my $cb1 = shift ;
+ my $cb2 = shift ;
+
+ outer($name, 'C', 1, $cb1, $cb2);
+}
+
+sub out_v
+{
+ my $name = shift ;
+ my $cb1 = shift ;
+ my $cb2 = shift ;
+
+ outer($name, 'v', 2, $cb1, $cb2);
+}
+
+sub out_V
+{
+ my $name = shift ;
+ my $cb1 = shift ;
+ my $cb2 = shift ;
+
+ outer($name, 'V', 4, $cb1, $cb2);
+}
+
+sub out_VV
+{
+ my $name = shift ;
+ my $cb1 = shift ;
+ my $cb2 = shift ;
+
+ outer($name, 'VV', 8, $cb1, $cb2);
+}
+
+sub outSomeData
+{
+ my $size = shift;
+ my $message = shift;
+
+ my $size64 = U64::mkU64($size);
+
+ if ($size64->gt($ZERO)) {
+ my $size32 = $size64->getLow();
+ if ($size64->gt($PAYLOADLIMIT) ) {
+ out0 $size32, $message;
+ } else {
+ myRead(my $buffer, $size32 );
+ out $buffer, $message, xDump $buffer ;
+ }
+ }
+}
+
+sub unpackValue_C
+{
+ Value_v(unpack "C", $_[0]);
+}
+
+sub Value_C
+{
+ sprintf "%02X", $_[0];
+}
+
+
+sub unpackValue_v
+{
+ Value_v(unpack "v", $_[0]);
+}
+
+sub Value_v
+{
+ sprintf "%04X", $_[0];
+}
+
+sub unpackValue_V
+{
+ Value_V(unpack "V", $_[0]);
+}
+
+sub Value_V
+{
+ my $v = defined $_[0] ? $_[0] : 0;
+ sprintf "%08X", $v;
+}
+
+sub unpackValue_VV
+{
+ my ($lo, $hi) = unpack ("V V", $_[0]);
+ Value_VV($lo, $hi);
+}
+
+sub Value_U64
+{
+ my $u64 = shift ;
+ Value_VV($u64->getLow(), $u64->getHigh());
+}
+
+sub Value_VV
+{
+ my $lo = defined $_[0] ? $_[0] : 0;
+ my $hi = defined $_[1] ? $_[1] : 0;
+
+ if ($hi == 0)
+ {
+ sprintf "%016X", $lo;
+ }
+ else
+ {
+ sprintf("%08X", $hi) .
+ sprintf "%08X", $lo;
+ }
+}
+
+sub Value_VV64
+{
+ my $buffer = shift;
+
+ my ($lo, $hi) = unpack ("V V" , $buffer);
+ no warnings 'uninitialized';
+ return $hi * (0xFFFFFFFF+1) + $lo;
+}
+
+sub read_U64
+{
+ my $b ;
+ myRead($b, 8);
+ my ($lo, $hi) = unpack ("V V" , $b);
+ no warnings 'uninitialized';
+ return ($b, new U64 $hi, $lo);
+}
+
+sub read_VV
+{
+ my $b ;
+ myRead($b, 8);
+ my ($lo, $hi) = unpack ("V V" , $b);
+ no warnings 'uninitialized';
+ return ($b, $hi * (0xFFFFFFFF+1) + $lo);
+}
+
+sub read_V
+{
+ my $b ;
+ myRead($b, 4);
+ return ($b, unpack ("V", $b));
+}
+
+sub read_v
+{
+ my $b ;
+ myRead($b, 2);
+ return ($b, unpack "v", $b);
+}
+
+
+sub read_C
+{
+ my $b ;
+ myRead($b, 1);
+ return ($b, unpack "C", $b);
+}
+
+
+my $opt_verbose = 0;
+while (@ARGV && $ARGV[0] =~ /^-/)
+{
+ my $opt = shift;
+
+ if ($opt =~ /^-h/i)
+ {
+ Usage();
+ exit;
+ }
+ elsif ($opt =~ /^-v/i)
+ {
+ $opt_verbose = 1;
+ }
+ else {
+ Usage();
+ }
+}
+
+Usage() unless @ARGV == 1;
+
+my $filename = shift @ARGV;
+
+die "$filename does not exist\n"
+ unless -e $filename ;
+
+die "$filename not a standard file\n"
+ unless -f $filename ;
+
+$FH = new IO::File "<$filename"
+ or die "Cannot open $filename: $!\n";
+
+
+my $FILELEN = -s $filename ;
+$TRAILING = -s $filename ;
+$NIBBLES = U64::nibbles(-s $filename) ;
+#$NIBBLES = int ($NIBBLES / 4) + ( ($NIBBLES % 4) ? 1 : 0 );
+#$NIBBLES = 4 * $NIBBLES;
+# Minimum of 4 nibbles
+$NIBBLES = 4 if $NIBBLES < 4 ;
+
+die "$filename too short to be a zip file\n"
+ if $FILELEN < 100 ;
+
+setupFormat($opt_verbose, $NIBBLES);
+
+if(0)
+{
+ # Sanity check that this is a Zip file
+ my ($buffer, $signature) = read_V();
+
+ warn "$filename doesn't look like a zip file\n"
+ if $signature != ZIP_LOCAL_HDR_SIG ;
+ $FH->seek(0, SEEK_SET) ;
+}
+
+
+our @CentralDirectory = scanCentralDirectory($FH);
+die "No Central Directory found\n"
+ if ! @CentralDirectory ;
+
+$OFFSET->reset();
+$FH->seek(0, SEEK_SET) ;
+
+outSomeData($START, "PREFIX DATA")
+ if defined $START && $START > 0 ;
+
+while (1)
+{
+ last if $FH->eof();
+
+ if ($FH->tell() >= $TRAILING) {
+ print "\n" ;
+ outSomeData($FILELEN - $TRAILING, "TRAILING DATA");
+ last;
+
+ }
+
+ my ($buffer, $signature) = read_V();
+
+ my $handler = $Lookup{$signature};
+
+ if (!defined $handler)
+ {
+ my $offset = $FH->tell() - 4;
+ printf "\n\nUnexpecded END at offset %08X, value %s\n", $offset, Value_V($signature);
+ last;
+ }
+
+ $ZIP64 = 0 if $signature != ZIP_DATA_HDR_SIG ;
+ $handler->($signature, $buffer);
+}
+
+print "Done\n";
+
+exit ;
+
+sub compressionMethod
+{
+ my $id = shift ;
+ Value_v($id) . " '" . ($ZIP_CompressionMethods{$id} || "Unknown Method") . "'" ;
+}
+
+sub LocalHeader
+{
+ my $signature = shift ;
+ my $data = shift ;
+
+ print "\n";
+ ++ $LocalHeaderCount;
+ out $data, "LOCAL HEADER #" . sprintf("%X", $LocalHeaderCount) , Value_V($signature);
+
+ my $buffer;
+
+ my ($loc, $CDcompressedLength) = @{ shift @CentralDirectory };
+ # TODO - add test to check that the loc from central header matches
+
+ out_C "Extract Zip Spec", \&decodeZipVer;
+ out_C "Extract OS", \&decodeOS;
+
+ my ($bgp, $gpFlag) = read_v();
+ my ($bcm, $compressedMethod) = read_v();
+
+ out $bgp, "General Purpose Flag", Value_v($gpFlag) ;
+ GeneralPurposeBits($compressedMethod, $gpFlag);
+
+ out $bcm, "Compression Method", compressionMethod($compressedMethod) ;
+
+ out_V "Last Mod Time", sub { scalar getTime(_dosToUnixTime($_[0])) };
+
+ my $crc = out_V "CRC";
+ my $compressedLength = out_V "Compressed Length";
+ my $uncompressedLength = out_V "Uncompressed Length";
+ my $filenameLength = out_v "Filename Length";
+ my $extraLength = out_v "Extra Length";
+
+ my $filename ;
+ myRead($filename, $filenameLength);
+ out $filename, "Filename", "'". $filename . "'";
+
+ my $cl64 = new U64 $compressedLength ;
+ my %ExtraContext = ();
+ if ($extraLength)
+ {
+ my @z64 = ($uncompressedLength, $compressedLength, 1, 1);
+ $ExtraContext{Zip64} = \@z64 ;
+ $ExtraContext{InCentralDir} = 0;
+ walkExtra($extraLength, \%ExtraContext);
+ }
+
+ my $size = 0;
+ $size = printAes(\%ExtraContext)
+ if $compressedMethod == 99 ;
+
+ $size += printLzmaProperties()
+ if $compressedMethod == ZIP_CM_LZMA ;
+
+ $CDcompressedLength->subtract($size)
+ if $size ;
+
+ if ($CDcompressedLength->getHigh() || $CDcompressedLength->getLow()) {
+ outSomeData($CDcompressedLength, "PAYLOAD") ;
+ }
+
+ if ($compressedMethod == 99) {
+ my $auth ;
+ myRead($auth, 10);
+ out $auth, "AES Auth", hexDump($auth);
+ }
+}
+
+
+sub CentralHeader
+{
+ my $signature = shift ;
+ my $data = shift ;
+
+ ++ $CentralHeaderCount;
+ print "\n";
+ out $data, "CENTRAL HEADER #" . sprintf("%X", $CentralHeaderCount) . "", Value_V($signature);
+ my $buffer;
+
+ out_C "Created Zip Spec", \&decodeZipVer;
+ out_C "Created OS", \&decodeOS;
+ out_C "Extract Zip Spec", \&decodeZipVer;
+ out_C "Extract OS", \&decodeOS;
+
+ my ($bgp, $gpFlag) = read_v();
+ my ($bcm, $compressedMethod) = read_v();
+
+ out $bgp, "General Purpose Flag", Value_v($gpFlag) ;
+ GeneralPurposeBits($compressedMethod, $gpFlag);
+
+ out $bcm, "Compression Method", compressionMethod($compressedMethod) ;
+
+ out_V "Last Mod Time", sub { scalar getTime(_dosToUnixTime($_[0])) };
+
+ my $crc = out_V "CRC";
+ my $compressedLength = out_V "Compressed Length";
+ my $uncompressedLength = out_V "Uncompressed Length";
+ my $filenameLength = out_v "Filename Length";
+ my $extraLength = out_v "Extra Length";
+ my $comment_length = out_v "Comment Length";
+ my $disk_start = out_v "Disk Start";
+ my $int_file_attrib = out_v "Int File Attributes";
+
+ out1 "[Bit 0]", $int_file_attrib & 1 ? "1 Text Data" : "0 'Binary Data'";
+
+ my $ext_file_attrib = out_V "Ext File Attributes";
+ out1 "[Bit 0]", "Read-Only"
+ if $ext_file_attrib & 0x01 ;
+ out1 "[Bit 1]", "Hidden"
+ if $ext_file_attrib & 0x02 ;
+ out1 "[Bit 2]", "System"
+ if $ext_file_attrib & 0x04 ;
+ out1 "[Bit 3]", "Label"
+ if $ext_file_attrib & 0x08 ;
+ out1 "[Bit 4]", "Directory"
+ if $ext_file_attrib & 0x10 ;
+ out1 "[Bit 5]", "Archive"
+ if $ext_file_attrib & 0x20 ;
+
+ my $lcl_hdr_offset = out_V "Local Header Offset";
+
+ my $filename ;
+ myRead($filename, $filenameLength);
+ out $filename, "Filename", "'". $filename . "'";
+
+ my %ExtraContext = ();
+ if ($extraLength)
+ {
+ my @z64 = ($uncompressedLength, $compressedLength, $lcl_hdr_offset, $disk_start);
+ $ExtraContext{Zip64} = \@z64 ;
+ $ExtraContext{InCentralDir} = 1;
+ walkExtra($extraLength, \%ExtraContext);
+ }
+
+ if ($comment_length)
+ {
+ my $comment ;
+ myRead($comment, $comment_length);
+ out $comment, "Comment", "'". $comment . "'";
+ }
+}
+
+sub decodeZipVer
+{
+ my $ver = shift ;
+
+ my $sHi = int($ver /10) ;
+ my $sLo = $ver % 10 ;
+
+ #out1 "Zip Spec", "$sHi.$sLo";
+ "$sHi.$sLo";
+}
+
+sub decodeOS
+{
+ my $ver = shift ;
+
+ $OS_Lookup{$ver} || "Unknown" ;
+}
+
+sub Zip64EndCentralHeader
+{
+ my $signature = shift ;
+ my $data = shift ;
+
+ print "\n";
+ out $data, "ZIP64 END CENTRAL DIR RECORD", Value_V($signature);
+
+ my $buff;
+ myRead($buff, 8);
+
+ out $buff, "Size of record", unpackValue_VV($buff);
+
+ my $size = Value_VV64($buff);
+
+ out_C "Created Zip Spec", \&decodeZipVer;
+ out_C "Created OS", \&decodeOS;
+ out_C "Extract Zip Spec", \&decodeZipVer;
+ out_C "Extract OS", \&decodeOS;
+ out_V "Number of this disk";
+ out_V "Central Dir Disk no";
+ out_VV "Entries in this disk";
+ out_VV "Total Entries";
+ out_VV "Size of Central Dir";
+ out_VV "Offset to Central dir";
+
+ # TODO -
+ die "Unsupported Size ($size) in Zip64EndCentralHeader\n"
+ if $size != 44;
+}
+
+
+sub Zip64EndCentralLocator
+{
+ my $signature = shift ;
+ my $data = shift ;
+
+ print "\n";
+ out $data, "ZIP64 END CENTRAL DIR LOCATOR", Value_V($signature);
+
+ out_V "Central Dir Disk no";
+ out_VV "Offset to Central dir";
+ out_V "Total no of Disks";
+}
+
+sub EndCentralHeader
+{
+ my $signature = shift ;
+ my $data = shift ;
+
+ print "\n";
+ out $data, "END CENTRAL HEADER", Value_V($signature);
+
+ out_v "Number of this disk";
+ out_v "Central Dir Disk no";
+ out_v "Entries in this disk";
+ out_v "Total Entries";
+ out_V "Size of Central Dir";
+ out_V "Offset to Central Dir";
+ my $comment_length = out_v "Comment Length";
+
+ if ($comment_length)
+ {
+ my $comment ;
+ myRead($comment, $comment_length);
+ out $comment, "Comment", "'$comment'";
+ }
+}
+
+sub DataHeader
+{
+ my $signature = shift ;
+ my $data = shift ;
+
+ print "\n";
+ out $data, "STREAMING DATA HEADER", Value_V($signature);
+
+ out_V "CRC";
+
+ if ($ZIP64)
+ {
+ out_VV "Compressed Length" ;
+ out_VV "Uncompressed Length" ;
+ }
+ else
+ {
+ out_V "Compressed Length" ;
+ out_V "Uncompressed Length" ;
+ }
+}
+
+
+sub GeneralPurposeBits
+{
+ my $method = shift;
+ my $gp = shift;
+
+ out1 "[Bit 0]", "1 'Encryption'" if $gp & ZIP_GP_FLAG_ENCRYPTED_MASK;
+
+ my %lookup = (
+ 0 => "Normal Compression",
+ 1 => "Maximum Compression",
+ 2 => "Fast Compression",
+ 3 => "Super Fast Compression");
+
+
+ if ($method == ZIP_CM_DEFLATE)
+ {
+ my $mid = $gp & 0x03;
+
+ out1 "[Bits 1-2]", "$mid '$lookup{$mid}'";
+ }
+
+ if ($method == ZIP_CM_LZMA)
+ {
+ if ($gp & ZIP_GP_FLAG_LZMA_EOS_PRESENT) {
+ out1 "[Bit 1]", "1 'LZMA EOS Marker Present'" ;
+ }
+ else {
+ out1 "[Bit 1]", "0 'LZMA EOS Marker Not Present'" ;
+ }
+ }
+
+ if ($method == ZIP_CM_IMPLODE) # Imploding
+ {
+ out1 "[Bit 1]", ($gp & 1 ? "1 '8k" : "0 '4k") . " Sliding Dictionary'" ;
+ out1 "[Bit 2]", ($gp & 2 ? "1 '3" : "0 '2" ) . " Shannon-Fano
+ Trees'" ;
+ }
+
+ out1 "[Bit 3]", "1 'Streamed'" if $gp & ZIP_GP_FLAG_STREAMING_MASK;
+ out1 "[Bit 4]", "1 'Enhanced Deflating'" if $gp & 1 << 4;
+ out1 "[Bit 5]", "1 'Compressed Patched'" if $gp & 1 << 5 ;
+ out1 "[Bit 6]", "1 'Strong Encryption'" if $gp & ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK;
+ out1 "[Bit 11]", "1 'Language Encoding'" if $gp & ZIP_GP_FLAG_LANGUAGE_ENCODING;
+ out1 "[Bit 12]", "1 'Pkware Enhanced Compression'" if $gp & 1 <<12 ;
+ out1 "[Bit 13]", "1 'Encrypted Central Dir'" if $gp & 1 <<13 ;
+
+ return ();
+}
+
+
+
+
+sub skip
+{
+ my $fh = $_[0] ;
+ my $size = $_[1];
+
+ use Fcntl qw(SEEK_CUR);
+ if (ref $size eq 'U64') {
+ seek($fh, $size->get64bit(), SEEK_CUR);
+ }
+ else {
+ seek($fh, $size, SEEK_CUR);
+ }
+
+}
+
+
+sub myRead
+{
+ my $got = \$_[0] ;
+ my $size = $_[1];
+
+ my $wantSize = $size;
+ $$got = '';
+
+ if ($size == 0)
+ {
+ return ;
+ }
+
+ if ($size > 0)
+ {
+ my $buff ;
+ my $status = $FH->read($buff, $size);
+ return $status
+ if $status < 0;
+ $$got .= $buff ;
+ }
+
+ my $len = length $$got;
+ die "Truncated file (got $len, wanted $wantSize): $!\n"
+ if length $$got != $wantSize;
+}
+
+
+
+
+sub walkExtra
+{
+ my $XLEN = shift;
+ my $context = shift;
+
+ my $buff ;
+ my $offset = 0 ;
+
+ my $id;
+ my $subLen;
+ my $payload ;
+
+ my $count = 0 ;
+
+ while ($offset < $XLEN) {
+
+ ++ $count;
+
+ return undef
+ if $offset + ZIP_EXTRA_SUBFIELD_HEADER_SIZE > $XLEN ;
+
+ myRead($id, ZIP_EXTRA_SUBFIELD_ID_SIZE);
+ $offset += ZIP_EXTRA_SUBFIELD_ID_SIZE;
+ my $lookID = unpack "v", $id ;
+ my ($who, $decoder) = @{ defined $Extras{$lookID} ? $Extras{$lookID} : ['', undef] };
+ #my ($who, $decoder) = @{ $Extras{unpack "v", $id} || ['', undef] };
+
+ $who = "$id: $who"
+ if $id =~ /\w\w/ ;
+
+ $who = "'$who'";
+ out $id, "Extra ID #" . Value_v($count), unpackValue_v($id) . " $who" ;
+
+ myRead($buff, ZIP_EXTRA_SUBFIELD_LEN_SIZE);
+ $offset += ZIP_EXTRA_SUBFIELD_LEN_SIZE;
+
+ $subLen = unpack("v", $buff);
+ out2 $buff, "Length", Value_v($subLen) ;
+
+ return undef
+ if $offset + $subLen > $XLEN ;
+
+ if (! defined $decoder)
+ {
+ myRead($payload, $subLen);
+ my $data = hexDump($payload);
+
+ out2 $payload, "Extra Payload", $data;
+ }
+ else
+ {
+ $decoder->($subLen, $context) ;
+ }
+
+ $offset += $subLen ;
+ }
+
+ return undef ;
+}
+
+
+sub full32
+{
+ return $_[0] == 0xFFFFFFFF ;
+}
+
+sub decode_Zip64
+{
+ my $len = shift;
+ my $context = shift;
+
+ my $z64Data = $context->{Zip64};
+
+ $ZIP64 = 1;
+
+ if (full32 $z64Data->[0] ) {
+ out_VV " Uncompressed Size";
+ }
+
+ if (full32 $z64Data->[1] ) {
+ out_VV " Compressed Size";
+ }
+
+ if (full32 $z64Data->[2] ) {
+ out_VV " Offset to Central Dir";
+ }
+
+ if ($z64Data->[3] == 0xFFFF ) {
+ out_V " Disk Number";
+ }
+}
+
+sub Ntfs2Unix
+{
+ my $v = shift;
+ my $u64 = shift;
+
+ # NTFS offset is 19DB1DED53E8000
+
+ my $hex = Value_U64($u64) ;
+ my $NTFS_OFFSET = new U64 0x19DB1DE, 0xD53E8000 ;
+ $u64->subtract($NTFS_OFFSET);
+ my $elapse = $u64->get64bit();
+ my $ns = ($elapse % 10000000) * 100;
+ $elapse = int ($elapse/10000000);
+ return "$hex '" . localtime($elapse) .
+ " " . sprintf("%0dns'", $ns);
+}
+
+sub decode_NTFS_Filetimes
+{
+ my $len = shift;
+ my $context = shift;
+
+ out_V " Reserved";
+ out_v " Tag1";
+ out_v " Size1" ;
+
+ my ($m, $s1) = read_U64;
+ out $m, " Mtime", Ntfs2Unix($m, $s1);
+
+ my ($c, $s2) = read_U64;
+ out $c, " Ctime", Ntfs2Unix($m, $s2);
+
+ my ($a, $s3) = read_U64;
+ out $m, " Atime", Ntfs2Unix($m, $s3);
+}
+
+sub getTime
+{
+ my $time = shift ;
+
+ return "'" . localtime($time) . "'" ;
+}
+
+sub decode_UT
+{
+ my $len = shift;
+ my $context = shift;
+
+ my ($data, $flags) = read_C();
+
+ my $f = Value_C $flags;
+ $f .= " mod" if $flags & 1;
+ $f .= " access" if $flags & 2;
+ $f .= " change" if $flags & 4;
+
+ out $data, " Flags", "'$f'";
+
+ -- $len;
+
+ if ($flags & 1)
+ {
+ my ($data, $time) = read_V();
+
+ out2 $data, "Mod Time", Value_V($time) . " " . getTime($time) ;
+
+ $len -= 4 ;
+ }
+
+
+ if ($flags & 2 && $len > 0 )
+ {
+ my ($data, $time) = read_V();
+
+ out2 $data, "Access Time", Value_V($time) . " " . getTime($time) ;
+ $len -= 4 ;
+ }
+
+ if ($flags & 4 && $len > 0)
+ {
+ my ($data, $time) = read_V();
+
+ out2 $data, "Change Time", Value_V($time) . " " . getTime($time) ;
+ }
+}
+
+
+
+sub decode_AES
+{
+ my $len = shift;
+ my $context = shift;
+
+ return if $len == 0 ;
+
+ my %lookup = ( 1 => "AE-1", 2 => "AE-2");
+ out_v " Vendor Version", sub { $lookup{$_[0]} || "Unknown" } ;
+
+ my $id ;
+ myRead($id, 2);
+ out $id, " Vendor ID", unpackValue_v($id) . " '$id'";
+
+ my %strengths = (1 => "128-bit encryption key",
+ 2 => "192-bit encryption key",
+ 3 => "256-bit encryption key",
+ );
+
+ my $strength = out_C " Encryption Strength", sub {$strengths{$_[0]} || "Unknown" } ;
+
+ my ($bmethod, $method) = read_v();
+ out $bmethod, " Compression Method", compressionMethod($method) ;
+
+ $context->{AesStrength} = $strength ;
+}
+
+sub decode_UX
+{
+ my $len = shift;
+ my $context = shift;
+ my $inCentralHdr = $context->{InCentralDir} ;
+
+ return if $len == 0 ;
+
+ my ($data, $time) = read_V();
+ out2 $data, "Access Time", Value_V($time) . " " . getTime($time) ;
+
+ ($data, $time) = read_V();
+ out2 $data, "Mod Time", Value_V($time) . " " . getTime($time) ;
+
+ if (! $inCentralHdr ) {
+ out_v " UID" ;
+ out_v " GID";
+ }
+}
+
+sub decode_Ux
+{
+ my $len = shift;
+ my $context = shift;
+
+ return if $len == 0 ;
+ out_v " UID" ;
+ out_v " GID";
+}
+
+sub decodeLitteEndian
+{
+ my $value = shift ;
+
+ if (length $value == 4)
+ {
+ return Value_V unpack ("V", $value)
+ }
+ else {
+ # TODO - fix this
+ die "unsupported\n";
+ }
+
+ my $got = 0 ;
+ my $shift = 0;
+
+ #hexDump
+ #reverse
+ #my @a =unpack "C*", $value;
+ #@a = reverse @a;
+ #hexDump(@a);
+
+ for (reverse unpack "C*", $value)
+ {
+ $got = ($got << 8) + $_ ;
+ }
+
+ return $got ;
+}
+
+sub decode_ux
+{
+ my $len = shift;
+ my $context = shift;
+
+ return if $len == 0 ;
+ out_C " Version" ;
+ my $uidSize = out_C " UID Size";
+ myRead(my $data, $uidSize);
+ out2 $data, "UID", decodeLitteEndian($data);
+
+ my $gidSize = out_C " GID Size";
+ myRead($data, $gidSize);
+ out2 $data, "GID", decodeLitteEndian($data);
+
+}
+
+sub decode_Java_exe
+{
+ my $len = shift;
+ my $context = shift;
+
+}
+
+sub decode_up
+{
+ my $len = shift;
+ my $context = shift;
+
+
+ out_C " Version";
+ out_V " NameCRC32";
+
+ myRead(my $data, $len - 5);
+
+ out $data, " UnicodeName", $data;
+}
+
+sub decode_Xceed_unicode
+{
+ my $len = shift;
+ my $context = shift;
+
+ my $data ;
+
+ # guess the fields used for this one
+ myRead($data, 4);
+ out $data, " ID", $data;
+
+ out_v " Length";
+ out_v " Null";
+
+ myRead($data, $len - 8);
+
+ out $data, " UTF16LE Name", decode("UTF16LE", $data);
+}
+
+
+sub decode_NT_security
+{
+ my $len = shift;
+ my $context = shift;
+ my $inCentralHdr = $context->{InCentralDir} ;
+
+ out_V " Uncompressed Size" ;
+
+ if (! $inCentralHdr) {
+
+ out_C " Version" ;
+
+ out_v " Type";
+
+ out_V " NameCRC32" ;
+
+ my $plen = $len - 4 - 1 - 2 - 4;
+ myRead(my $payload, $plen);
+ out $plen, " Extra Payload", hexDump($payload);
+ }
+}
+
+sub printAes
+{
+ my $context = shift ;
+
+ my %saltSize = (
+ 1 => 8,
+ 2 => 12,
+ 3 => 16,
+ );
+
+ myRead(my $salt, $saltSize{$context->{AesStrength} });
+ out $salt, "AES Salt", hexDump($salt);
+ myRead(my $pwv, 2);
+ out $pwv, "AES Pwd Ver", hexDump($pwv);
+
+ return $saltSize{$context->{AesStrength}} + 2 + 10;
+}
+
+sub printLzmaProperties
+{
+ my $len = 0;
+
+ my $b1;
+ my $b2;
+ my $buffer;
+
+ myRead($b1, 2);
+ my ($verHi, $verLow) = unpack ("CC", $b1);
+
+ out $b1, "LZMA Version", sprintf("%02X%02X", $verHi, $verLow) . " '$verHi.$verLow'";
+ my $LzmaPropertiesSize = out_v "LZMA Properties Size";
+ $len += 4;
+
+ my $LzmaInfo = out_C "LZMA Info", sub { $_[0] == 93 ? "(Default)" : ""};
+
+ my $PosStateBits = 0;
+ my $LiteralPosStateBits = 0;
+ my $LiteralContextBits = 0;
+ $PosStateBits = int($LzmaInfo / (9 * 5));
+ $LzmaInfo -= $PosStateBits * 9 * 5;
+ $LiteralPosStateBits = int($LzmaInfo / 9);
+ $LiteralContextBits = $LzmaInfo - $LiteralPosStateBits * 9;
+
+ out1 " PosStateBits", $PosStateBits;
+ out1 " LiteralPosStateBits", $LiteralPosStateBits;
+ out1 " LiteralContextBits", $LiteralContextBits;
+
+ out_V "LZMA Dictionary Size";
+
+ # TODO - assumption that this is 5
+ $len += $LzmaPropertiesSize;
+
+ skip($FH, $LzmaPropertiesSize - 5)
+ if $LzmaPropertiesSize != 5 ;
+
+ return $len;
+}
+
+sub scanCentralDirectory
+{
+ my $fh = shift;
+
+ my $here = $fh->tell();
+
+ # Use cases
+ # 1 32-bit CD
+ # 2 64-bit CD
+
+ my @CD = ();
+ my $offset = findCentralDirectoryOffset($fh);
+
+ return ()
+ if ! defined $offset;
+
+ $fh->seek($offset, SEEK_SET) ;
+
+ # Now walk the Central Directory Records
+ my $buffer ;
+ while ($fh->read($buffer, 46) == 46 &&
+ unpack("V", $buffer) == ZIP_CENTRAL_HDR_SIG) {
+
+ my $compressedLength = unpack("V", substr($buffer, 20, 4));
+ my $uncompressedLength = unpack("V", substr($buffer, 24, 4));
+ my $filename_length = unpack("v", substr($buffer, 28, 2));
+ my $extra_length = unpack("v", substr($buffer, 30, 2));
+ my $comment_length = unpack("v", substr($buffer, 32, 2));
+ my $locHeaderOffset = unpack("V", substr($buffer, 42, 4));
+
+ $START = $locHeaderOffset
+ if ! defined $START;
+
+ skip($fh, $filename_length ) ;
+
+ my $v64 = new U64 $compressedLength ;
+ my $loc64 = new U64 $locHeaderOffset ;
+ my $got = [$loc64, $v64] ;
+
+ if (full32 $compressedLength || full32 $locHeaderOffset) {
+ $fh->read($buffer, $extra_length) ;
+ # TODO - fix this
+ die "xxx $offset $comment_length $filename_length $extra_length" . length($buffer)
+ if length($buffer) != $extra_length;
+ $got = get64Extra($buffer, full32($uncompressedLength),
+ $v64,
+ $loc64);
+
+ # If not Zip64 extra field, assume size is 0xFFFFFFFF
+ #$v64 = $got if defined $got;
+ }
+ else {
+ skip($fh, $extra_length) ;
+ }
+
+ skip($fh, $comment_length ) ;
+
+ push @CD, $got ;
+ }
+
+ $fh->seek($here, SEEK_SET) ;
+
+ @CD = sort { $a->[0]->cmp($b->[0]) } @CD ;
+ return @CD;
+}
+
+sub get64Extra
+{
+ my $buffer = shift;
+ my $is_uncomp = shift ;
+ my $comp = shift ;
+ my $loc = shift ;
+
+ my $extra = findID(0x0001, $buffer);
+
+ if ( defined $extra)
+ {
+ my $offset = 0;
+ $offset += 8 if $is_uncomp;
+ if ($comp->max32()) {
+ $comp = U64::newUnpack_V64(substr($extra, $offset)) ;
+ $offset += 8;
+ }
+ if ($loc->max32()) {
+ $loc = U64::newUnpack_V64(substr($extra, $offset)) ;
+ }
+ }
+
+ return [$loc, $comp] ;
+}
+
+sub offsetFromZip64
+{
+ my $fh = shift ;
+ my $here = shift;
+
+ $fh->seek($here - 20, SEEK_SET)
+ # TODO - fix this
+ or die "xx $!" ;
+
+ my $buffer;
+ my $got = 0;
+ ($got = $fh->read($buffer, 20)) == 20
+ # TODO - fix this
+ or die "xxx $here $got $!" ;
+
+ if ( unpack("V", $buffer) == ZIP64_END_CENTRAL_LOC_HDR_SIG ) {
+ my $cd64 = Value_VV64 substr($buffer, 8, 8);
+
+ $fh->seek($cd64, SEEK_SET) ;
+
+ $fh->read($buffer, 4) == 4
+ # TODO - fix this
+ or die "xxx" ;
+
+ if ( unpack("V", $buffer) == ZIP64_END_CENTRAL_REC_HDR_SIG ) {
+
+ $fh->read($buffer, 8) == 8
+ # TODO - fix this
+ or die "xxx" ;
+ my $size = Value_VV64($buffer);
+ $fh->read($buffer, $size) == $size
+ # TODO - fix this
+ or die "xxx" ;
+
+ my $cd64 = Value_VV64 substr($buffer, 36, 8);
+
+ return $cd64 ;
+ }
+
+ # TODO - fix this
+ die "zzz";
+ }
+
+ # TODO - fix this
+ die "zzz";
+}
+
+use constant Pack_ZIP_END_CENTRAL_HDR_SIG => pack("V", ZIP_END_CENTRAL_HDR_SIG);
+
+sub findCentralDirectoryOffset
+{
+ my $fh = shift ;
+
+ # Most common use-case is where there is no comment, so
+ # know exactly where the end of central directory record
+ # should be.
+
+ $fh->seek(-22, SEEK_END) ;
+ my $here = $fh->tell();
+
+ my $buffer;
+ $fh->read($buffer, 22) == 22
+ # TODO - fix this
+ or die "xxx" ;
+
+ my $zip64 = 0;
+ my $centralDirOffset ;
+ if ( unpack("V", $buffer) == ZIP_END_CENTRAL_HDR_SIG ) {
+ $centralDirOffset = unpack("V", substr($buffer, 16, 4));
+ }
+ else {
+ $fh->seek(0, SEEK_END) ;
+
+ my $fileLen = $fh->tell();
+ my $want = 0 ;
+
+ while(1) {
+ $want += 1024 * 32;
+ my $seekTo = $fileLen - $want;
+ if ($seekTo < 0 ) {
+ $seekTo = 0;
+ $want = $fileLen ;
+ }
+ $fh->seek( $seekTo, SEEK_SET)
+ # TODO - fix this
+ or die "xxx $!" ;
+ my $got;
+ ($got = $fh->read($buffer, $want)) == $want
+ # TODO - fix this
+ or die "xxx $got $!" ;
+ my $pos = rindex( $buffer, Pack_ZIP_END_CENTRAL_HDR_SIG);
+
+ if ($pos >= 0 && $want - $pos > 22) {
+ $here = $seekTo + $pos ;
+ $centralDirOffset = unpack("V", substr($buffer, $pos + 16, 4));
+ my $commentLength = unpack("V", substr($buffer, $pos + 20, 2));
+ $commentLength = 0 if ! defined $commentLength ;
+
+ my $expectedEof = $fileLen - $want + $pos + 22 + $commentLength ;
+ # check for trailing data after end of zip
+ if ($expectedEof < $fileLen ) {
+ $TRAILING = $expectedEof ;
+ }
+ last ;
+ }
+
+ return undef
+ if $want == $fileLen;
+ }
+ }
+
+ $centralDirOffset = offsetFromZip64($fh, $here)
+ if full32 $centralDirOffset ;
+
+ return $centralDirOffset ;
+}
+
+sub findID
+{
+ my $id_want = shift ;
+ my $data = shift;
+
+ my $XLEN = length $data ;
+
+ my $offset = 0 ;
+ while ($offset < $XLEN) {
+
+ return undef
+ if $offset + ZIP_EXTRA_SUBFIELD_HEADER_SIZE > $XLEN ;
+
+ my $id = substr($data, $offset, ZIP_EXTRA_SUBFIELD_ID_SIZE);
+ $id = unpack("v", $id);
+ $offset += ZIP_EXTRA_SUBFIELD_ID_SIZE;
+
+ my $subLen = unpack("v", substr($data, $offset,
+ ZIP_EXTRA_SUBFIELD_LEN_SIZE));
+ $offset += ZIP_EXTRA_SUBFIELD_LEN_SIZE ;
+
+ return undef
+ if $offset + $subLen > $XLEN ;
+
+ return substr($data, $offset, $subLen)
+ if $id eq $id_want ;
+
+ $offset += $subLen ;
+ }
+
+ return undef ;
+}
+
+
+sub _dosToUnixTime
+{
+ my $dt = shift;
+
+ my $year = ( ( $dt >> 25 ) & 0x7f ) + 80;
+ my $mon = ( ( $dt >> 21 ) & 0x0f ) - 1;
+ my $mday = ( ( $dt >> 16 ) & 0x1f );
+
+ my $hour = ( ( $dt >> 11 ) & 0x1f );
+ my $min = ( ( $dt >> 5 ) & 0x3f );
+ my $sec = ( ( $dt << 1 ) & 0x3e );
+
+
+ use POSIX 'mktime';
+
+ my $time_t = mktime( $sec, $min, $hour, $mday, $mon, $year, 0, 0, -1 );
+ return 0 if ! defined $time_t;
+ return $time_t;
+}
+
+
+{
+ package U64;
+
+ use constant MAX32 => 0xFFFFFFFF ;
+ use constant HI_1 => MAX32 + 1 ;
+ use constant LOW => 0 ;
+ use constant HIGH => 1;
+
+ sub new
+ {
+ my $class = shift ;
+
+ my $high = 0 ;
+ my $low = 0 ;
+
+ if (@_ == 2) {
+ $high = shift ;
+ $low = shift ;
+ }
+ elsif (@_ == 1) {
+ $low = shift ;
+ }
+
+ bless [$low, $high], $class;
+ }
+
+ sub newUnpack_V64
+ {
+ my $string = shift;
+
+ my ($low, $hi) = unpack "V V", $string ;
+ bless [ $low, $hi ], "U64";
+ }
+
+ sub newUnpack_V32
+ {
+ my $string = shift;
+
+ my $low = unpack "V", $string ;
+ bless [ $low, 0 ], "U64";
+ }
+
+ sub reset
+ {
+ my $self = shift;
+ $self->[HIGH] = $self->[LOW] = 0;
+ }
+
+ sub clone
+ {
+ my $self = shift;
+ bless [ @$self ], ref $self ;
+ }
+
+ sub mkU64
+ {
+ my $value = shift;
+
+ return $value
+ if ref $value eq 'U64';
+
+ bless [ $value, 0 ], "U64" ;
+ }
+
+ sub getHigh
+ {
+ my $self = shift;
+ return $self->[HIGH];
+ }
+
+ sub getLow
+ {
+ my $self = shift;
+ return $self->[LOW];
+ }
+
+ sub get32bit
+ {
+ my $self = shift;
+ return $self->[LOW];
+ }
+
+ sub get64bit
+ {
+ my $self = shift;
+ # Not using << here because the result will still be
+ # a 32-bit value on systems where int size is 32-bits
+ return $self->[HIGH] * HI_1 + $self->[LOW];
+ }
+
+ sub add
+ {
+ my $self = shift;
+ my $value = shift;
+
+ if (ref $value eq 'U64') {
+ $self->[HIGH] += $value->[HIGH] ;
+ $value = $value->[LOW];
+ }
+
+ my $available = MAX32 - $self->[LOW] ;
+
+ if ($value > $available) {
+ ++ $self->[HIGH] ;
+ $self->[LOW] = $value - $available - 1;
+ }
+ else {
+ $self->[LOW] += $value ;
+ }
+
+ }
+
+ sub subtract
+ {
+ my $self = shift;
+ my $value = shift;
+
+ if (ref $value eq 'U64') {
+
+ if ($value->[HIGH]) {
+ die "unsupport subtract option"
+ if $self->[HIGH] == 0 ||
+ $value->[HIGH] > $self->[HIGH] ;
+
+ $self->[HIGH] -= $value->[HIGH] ;
+ }
+
+ $value = $value->[LOW] ;
+ }
+
+ if ($value > $self->[LOW]) {
+ -- $self->[HIGH] ;
+ $self->[LOW] = MAX32 - $value + $self->[LOW] + 1;
+ }
+ else {
+ $self->[LOW] -= $value;
+ }
+ }
+
+ sub rshift
+ {
+ my $self = shift;
+ my $count = shift;
+
+ for (1 .. $count)
+ {
+ $self->[LOW] >>= 1;
+ $self->[LOW] |= 0x80000000
+ if $self->[HIGH] & 1 ;
+ $self->[HIGH] >>= 1;
+ }
+ }
+
+ sub is64bit
+ {
+ my $self = shift;
+ return $self->[HIGH] > 0 ;
+ }
+
+ sub getPacked_V64
+ {
+ my $self = shift;
+
+ return pack "V V", @$self ;
+ }
+
+ sub getPacked_V32
+ {
+ my $self = shift;
+
+ return pack "V", $self->[LOW] ;
+ }
+
+ sub pack_V64
+ {
+ my $low = shift;
+
+ return pack "V V", $low, 0;
+ }
+
+ sub max32
+ {
+ my $self = shift;
+ return $self->[HIGH] == 0 && $self->[LOW] == MAX32;
+ }
+
+ sub stringify
+ {
+ my $self = shift;
+
+ return "High [$self->[HIGH]], Low [$self->[LOW]]";
+ }
+
+ sub equal
+ {
+ my $self = shift;
+ my $other = shift;
+
+ return $self->[LOW] == $other->[LOW] &&
+ $self->[HIGH] == $other->[HIGH] ;
+ }
+
+ sub gt
+ {
+ my $self = shift;
+ my $other = shift;
+
+ return $self->cmp($other) > 0 ;
+ }
+
+ sub cmp
+ {
+ my $self = shift;
+ my $other = shift ;
+
+ if ($self->[LOW] == $other->[LOW]) {
+ return $self->[HIGH] - $other->[HIGH] ;
+ }
+ else {
+ return $self->[LOW] - $other->[LOW] ;
+ }
+ }
+
+ sub nibbles
+ {
+ my @nibbles = (
+ [ 16 => HI_1 * 0x10000000 ],
+ [ 15 => HI_1 * 0x1000000 ],
+ [ 14 => HI_1 * 0x100000 ],
+ [ 13 => HI_1 * 0x10000 ],
+ [ 12 => HI_1 * 0x1000 ],
+ [ 11 => HI_1 * 0x100 ],
+ [ 10 => HI_1 * 0x10 ],
+ [ 9 => HI_1 * 0x1 ],
+
+ [ 8 => 0x10000000 ],
+ [ 7 => 0x1000000 ],
+ [ 6 => 0x100000 ],
+ [ 5 => 0x10000 ],
+ [ 4 => 0x1000 ],
+ [ 3 => 0x100 ],
+ [ 2 => 0x10 ],
+ [ 1 => 0x1 ],
+ );
+ my $value = shift ;
+
+ for my $pair (@nibbles)
+ {
+ my ($count, $limit) = @{ $pair };
+
+ return $count
+ if $value >= $limit ;
+ }
+
+ }
+}
+
+sub Usage
+{
+ die <<EOM;
+zipdetails [OPTIONS] file
+
+Display details about the internal structure of a Zip file.
+
+This is zipdetails version $VERSION
+
+OPTIONS
+ -h display help
+ -v Verbose - output more stuff
+
+Copyright (c) 2011 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+EOM
+
+
+}
+
+__END__
+
+=head1 NAME
+
+zipdetails - display the internal structure of zip files
+
+=head1 SYNOPSIS
+
+ zipdetaile [-v] zipfile.zip
+ zipdetails -h
+
+=head1 DESCRIPTION
+
+Zipdetails displays information about the internal record structure of the
+zip file. It is not concerned with displaying any details of the compressed
+data stored in the zip file.
+
+The program assumes prior understanding of the internal structure of a Zip
+file. You should have a copy of the Zip APPNOTE file at hand to help
+understand the output from this program (L<SEE ALSO> for details).
+
+=head2 OPTIONS
+
+=over 5
+
+=item -v
+
+Enable Verbose mode
+
+=item -h
+
+Display help
+
+=back
+
+
+By default zipdetails will output the details of the zip file in three
+columns.
+
+=over 5
+
+=item Column 1
+
+This contains the offset from the start of the file in hex.
+
+=item Column 2
+
+This contains a textual description of the field.
+
+=item Column 3
+
+If the field contains a numeric value it will be displayed in hex. Zip
+stored most numbers in little-endian format - the value displayed will have
+the little-endian encoding removed.
+
+Next, is an optional description of what the value means.
+
+
+=back
+
+If the C<-v> option is present, column 1 is expanded to include
+
+=over 5
+
+=item *
+
+The offset from the start of the file in hex.
+
+=item *
+
+The length of the filed in hex.
+
+=item *
+
+A hex dump of the bytes in field in the order they are stored in the zip
+file.
+
+=back
+
+
+=head1 TODO
+
+Error handling is still a work in progress. If the program encounters a
+problem reading a zip file it is likely to terminate with an unhelpful
+error message.
+
+
+=head1 SEE ALSO
+
+
+The primary reference for Zip files is the "appnote" document available at
+L<http://www.pkware.com/documents/casestudies/APPNOTE.TXT>.
+
+An alternative is the Info-Zip appnote. This is available from
+L<ftp://ftp.info-zip.org/pub/infozip/doc/>
+
+
+The C<zipinfo> program that comes with the info-zip distribution
+(L<http://www.info-zip.org/>) can also display details of the structure of
+a zip file.
+
+See also L<IO::Compress::Zip>, L<IO::Uncompress::Unzip>.
+
+
+=head1 AUTHOR
+
+Paul Marquess F<pmqs at cpan.org>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2011-2012 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
Added: vendor/perl/dist/cpan/IO-Compress/lib/IO/Compress/FAQ.pod
===================================================================
--- vendor/perl/dist/cpan/IO-Compress/lib/IO/Compress/FAQ.pod (rev 0)
+++ vendor/perl/dist/cpan/IO-Compress/lib/IO/Compress/FAQ.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,672 @@
+
+=head1 NAME
+
+IO::Compress::FAQ -- Frequently Asked Questions about IO::Compress
+
+=head1 DESCRIPTION
+
+Common questions answered.
+
+=head1 GENERAL
+
+=head2 Compatibility with Unix compress/uncompress.
+
+Although C<Compress::Zlib> has a pair of functions called C<compress> and
+C<uncompress>, they are I<not> related to the Unix programs of the same
+name. The C<Compress::Zlib> module is not compatible with Unix
+C<compress>.
+
+If you have the C<uncompress> program available, you can use this to read
+compressed files
+
+ open F, "uncompress -c $filename |";
+ while (<F>)
+ {
+ ...
+
+Alternatively, if you have the C<gunzip> program available, you can use
+this to read compressed files
+
+ open F, "gunzip -c $filename |";
+ while (<F>)
+ {
+ ...
+
+and this to write compress files, if you have the C<compress> program
+available
+
+ open F, "| compress -c $filename ";
+ print F "data";
+ ...
+ close F ;
+
+=head2 Accessing .tar.Z files
+
+The C<Archive::Tar> module can optionally use C<Compress::Zlib> (via the
+C<IO::Zlib> module) to access tar files that have been compressed with
+C<gzip>. Unfortunately tar files compressed with the Unix C<compress>
+utility cannot be read by C<Compress::Zlib> and so cannot be directly
+accessed by C<Archive::Tar>.
+
+If the C<uncompress> or C<gunzip> programs are available, you can use one
+of these workarounds to read C<.tar.Z> files from C<Archive::Tar>
+
+Firstly with C<uncompress>
+
+ use strict;
+ use warnings;
+ use Archive::Tar;
+
+ open F, "uncompress -c $filename |";
+ my $tar = Archive::Tar->new(*F);
+ ...
+
+and this with C<gunzip>
+
+ use strict;
+ use warnings;
+ use Archive::Tar;
+
+ open F, "gunzip -c $filename |";
+ my $tar = Archive::Tar->new(*F);
+ ...
+
+Similarly, if the C<compress> program is available, you can use this to
+write a C<.tar.Z> file
+
+ use strict;
+ use warnings;
+ use Archive::Tar;
+ use IO::File;
+
+ my $fh = new IO::File "| compress -c >$filename";
+ my $tar = Archive::Tar->new();
+ ...
+ $tar->write($fh);
+ $fh->close ;
+
+=head2 How do I recompress using a different compression?
+
+This is easier that you might expect if you realise that all the
+C<IO::Compress::*> objects are derived from C<IO::File> and that all the
+C<IO::Uncompress::*> modules can read from an C<IO::File> filehandle.
+
+So, for example, say you have a file compressed with gzip that you want to
+recompress with bzip2. Here is all that is needed to carry out the
+recompression.
+
+ use IO::Uncompress::Gunzip ':all';
+ use IO::Compress::Bzip2 ':all';
+
+ my $gzipFile = "somefile.gz";
+ my $bzipFile = "somefile.bz2";
+
+ my $gunzip = new IO::Uncompress::Gunzip $gzipFile
+ or die "Cannot gunzip $gzipFile: $GunzipError\n" ;
+
+ bzip2 $gunzip => $bzipFile
+ or die "Cannot bzip2 to $bzipFile: $Bzip2Error\n" ;
+
+Note, there is a limitation of this technique. Some compression file
+formats store extra information along with the compressed data payload. For
+example, gzip can optionally store the original filename and Zip stores a
+lot of information about the original file. If the original compressed file
+contains any of this extra information, it will not be transferred to the
+new compressed file usign the technique above.
+
+=head1 ZIP
+
+=head2 What Compression Types do IO::Compress::Zip & IO::Uncompress::Unzip support?
+
+The following compression formats are supported by C<IO::Compress::Zip> and
+C<IO::Uncompress::Unzip>
+
+=over 5
+
+=item * Store (method 0)
+
+No compression at all.
+
+=item * Deflate (method 8)
+
+This is the default compression used when creating a zip file with
+C<IO::Compress::Zip>.
+
+=item * Bzip2 (method 12)
+
+Only supported if the C<IO-Compress-Bzip2> module is installed.
+
+=item * Lzma (method 14)
+
+Only supported if the C<IO-Compress-Lzma> module is installed.
+
+=back
+
+=head2 Can I Read/Write Zip files larger the 4 Gig?
+
+Yes, both the C<IO-Compress-Zip> and C<IO-Uncompress-Unzip> modules
+support the zip feature called I<Zip64>. That allows them to read/write
+files/buffers larger than 4Gig.
+
+If you are creating a Zip file using the one-shot interface, and any of the
+input files is greater than 4Gig, a zip64 complaint zip file will be
+created.
+
+ zip "really-large-file" => "my.zip";
+
+Similarly with the one-shot interface, if the input is a buffer larger than
+4 Gig, a zip64 complaint zip file will be created.
+
+ zip \$really_large_buffer => "my.zip";
+
+The one-shot interface allows you to force the creation of a zip64 zip file
+by including the C<Zip64> option.
+
+ zip $filehandle => "my.zip", Zip64 => 1;
+
+If you want to create a zip64 zip file with the OO interface you must
+specify the C<Zip64> option.
+
+ my $zip = new IO::Compress::Zip "whatever", Zip64 => 1;
+
+When uncompressing with C<IO-Uncompress-Unzip>, it will automatically
+detect if the zip file is zip64.
+
+If you intend to manipulate the Zip64 zip files created with
+C<IO-Compress-Zip> using an external zip/unzip, make sure that it supports
+Zip64.
+
+In particular, if you are using Info-Zip you need to have zip version 3.x
+or better to update a Zip64 archive and unzip version 6.x to read a zip64
+archive.
+
+=head2 Can I write more that 64K entries is a Zip files?
+
+Yes. Zip64 allows this. See previous question.
+
+=head2 Zip Resources
+
+The primary reference for zip files is the "appnote" document available at
+L<http://www.pkware.com/documents/casestudies/APPNOTE.TXT>
+
+An alternatively is the Info-Zip appnote. This is available from
+L<ftp://ftp.info-zip.org/pub/infozip/doc/>
+
+=head1 GZIP
+
+=head2 Gzip Resources
+
+The primary reference for gzip files is RFC 1952
+L<http://www.faqs.org/rfcs/rfc1952.html>
+
+The primary site for gzip is F<http://www.gzip.org>.
+
+=head2 Dealing with Concatenated gzip files
+
+If the gunzip program encounters a file containing multiple gzip files
+concatenated together it will automatically uncompress them all.
+The example below illustrates this behaviour
+
+ $ echo abc | gzip -c >x.gz
+ $ echo def | gzip -c >>x.gz
+ $ gunzip -c x.gz
+ abc
+ def
+
+By default C<IO::Uncompress::Gunzip> will I<not> bahave like the gunzip
+program. It will only uncompress the first gzip data stream in the file, as
+shown below
+
+ $ perl -MIO::Uncompress::Gunzip=:all -e 'gunzip "x.gz" => \*STDOUT'
+ abc
+
+To force C<IO::Uncompress::Gunzip> to uncompress all the gzip data streams,
+include the C<MultiStream> option, as shown below
+
+ $ perl -MIO::Uncompress::Gunzip=:all -e 'gunzip "x.gz" => \*STDOUT, MultiStream => 1'
+ abc
+ def
+
+=head1 ZLIB
+
+=head2 Zlib Resources
+
+The primary site for the I<zlib> compression library is
+F<http://www.zlib.org>.
+
+=head1 Bzip2
+
+=head2 Bzip2 Resources
+
+The primary site for bzip2 is F<http://www.bzip.org>.
+
+=head2 Dealing with Concatenated bzip2 files
+
+If the bunzip2 program encounters a file containing multiple bzip2 files
+concatenated together it will automatically uncompress them all.
+The example below illustrates this behaviour
+
+ $ echo abc | bzip2 -c >x.bz2
+ $ echo def | bzip2 -c >>x.bz2
+ $ bunzip2 -c x.bz2
+ abc
+ def
+
+By default C<IO::Uncompress::Bunzip2> will I<not> bahave like the bunzip2
+program. It will only uncompress the first bunzip2 data stream in the file, as
+shown below
+
+ $ perl -MIO::Uncompress::Bunzip2=:all -e 'bunzip2 "x.bz2" => \*STDOUT'
+ abc
+
+To force C<IO::Uncompress::Bunzip2> to uncompress all the bzip2 data streams,
+include the C<MultiStream> option, as shown below
+
+ $ perl -MIO::Uncompress::Bunzip2=:all -e 'bunzip2 "x.bz2" => \*STDOUT, MultiStream => 1'
+ abc
+ def
+
+=head2 Interoperating with Pbzip2
+
+Pbzip2 (L<http://compression.ca/pbzip2/>) is a parallel implementation of
+bzip2. The output from pbzip2 consists of a series of concatenated bzip2
+data streams.
+
+By default C<IO::Uncompress::Bzip2> will only uncompress the first bzip2
+data stream in a pbzip2 file. To uncompress the complete pbzip2 file you
+must include the C<MultiStream> option, like this.
+
+ bunzip2 $input => \$output, MultiStream => 1
+ or die "bunzip2 failed: $Bunzip2Error\n";
+
+=head1 HTTP & NETWORK
+
+=head2 Apache::GZip Revisited
+
+Below is a mod_perl Apache compression module, called C<Apache::GZip>,
+taken from
+F<http://perl.apache.org/docs/tutorials/tips/mod_perl_tricks/mod_perl_tricks.html#On_the_Fly_Compression>
+
+ package Apache::GZip;
+ #File: Apache::GZip.pm
+
+ use strict vars;
+ use Apache::Constants ':common';
+ use Compress::Zlib;
+ use IO::File;
+ use constant GZIP_MAGIC => 0x1f8b;
+ use constant OS_MAGIC => 0x03;
+
+ sub handler {
+ my $r = shift;
+ my ($fh,$gz);
+ my $file = $r->filename;
+ return DECLINED unless $fh=IO::File->new($file);
+ $r->header_out('Content-Encoding'=>'gzip');
+ $r->send_http_header;
+ return OK if $r->header_only;
+
+ tie *STDOUT,'Apache::GZip',$r;
+ print($_) while <$fh>;
+ untie *STDOUT;
+ return OK;
+ }
+
+ sub TIEHANDLE {
+ my($class,$r) = @_;
+ # initialize a deflation stream
+ my $d = deflateInit(-WindowBits=>-MAX_WBITS()) || return undef;
+
+ # gzip header -- don't ask how I found out
+ $r->print(pack("nccVcc",GZIP_MAGIC,Z_DEFLATED,0,time(),0,OS_MAGIC));
+
+ return bless { r => $r,
+ crc => crc32(undef),
+ d => $d,
+ l => 0
+ },$class;
+ }
+
+ sub PRINT {
+ my $self = shift;
+ foreach (@_) {
+ # deflate the data
+ my $data = $self->{d}->deflate($_);
+ $self->{r}->print($data);
+ # keep track of its length and crc
+ $self->{l} += length($_);
+ $self->{crc} = crc32($_,$self->{crc});
+ }
+ }
+
+ sub DESTROY {
+ my $self = shift;
+
+ # flush the output buffers
+ my $data = $self->{d}->flush;
+ $self->{r}->print($data);
+
+ # print the CRC and the total length (uncompressed)
+ $self->{r}->print(pack("LL",@{$self}{qw/crc l/}));
+ }
+
+ 1;
+
+Here's the Apache configuration entry you'll need to make use of it. Once
+set it will result in everything in the /compressed directory will be
+compressed automagically.
+
+ <Location /compressed>
+ SetHandler perl-script
+ PerlHandler Apache::GZip
+ </Location>
+
+Although at first sight there seems to be quite a lot going on in
+C<Apache::GZip>, you could sum up what the code was doing as follows --
+read the contents of the file in C<< $r->filename >>, compress it and write
+the compressed data to standard output. That's all.
+
+This code has to jump through a few hoops to achieve this because
+
+=over
+
+=item 1.
+
+The gzip support in C<Compress::Zlib> version 1.x can only work with a real
+filesystem filehandle. The filehandles used by Apache modules are not
+associated with the filesystem.
+
+=item 2.
+
+That means all the gzip support has to be done by hand - in this case by
+creating a tied filehandle to deal with creating the gzip header and
+trailer.
+
+=back
+
+C<IO::Compress::Gzip> doesn't have that filehandle limitation (this was one
+of the reasons for writing it in the first place). So if
+C<IO::Compress::Gzip> is used instead of C<Compress::Zlib> the whole tied
+filehandle code can be removed. Here is the rewritten code.
+
+ package Apache::GZip;
+
+ use strict vars;
+ use Apache::Constants ':common';
+ use IO::Compress::Gzip;
+ use IO::File;
+
+ sub handler {
+ my $r = shift;
+ my ($fh,$gz);
+ my $file = $r->filename;
+ return DECLINED unless $fh=IO::File->new($file);
+ $r->header_out('Content-Encoding'=>'gzip');
+ $r->send_http_header;
+ return OK if $r->header_only;
+
+ my $gz = new IO::Compress::Gzip '-', Minimal => 1
+ or return DECLINED ;
+
+ print $gz $_ while <$fh>;
+
+ return OK;
+ }
+
+or even more succinctly, like this, using a one-shot gzip
+
+ package Apache::GZip;
+
+ use strict vars;
+ use Apache::Constants ':common';
+ use IO::Compress::Gzip qw(gzip);
+
+ sub handler {
+ my $r = shift;
+ $r->header_out('Content-Encoding'=>'gzip');
+ $r->send_http_header;
+ return OK if $r->header_only;
+
+ gzip $r->filename => '-', Minimal => 1
+ or return DECLINED ;
+
+ return OK;
+ }
+
+ 1;
+
+The use of one-shot C<gzip> above just reads from C<< $r->filename >> and
+writes the compressed data to standard output.
+
+Note the use of the C<Minimal> option in the code above. When using gzip
+for Content-Encoding you should I<always> use this option. In the example
+above it will prevent the filename being included in the gzip header and
+make the size of the gzip data stream a slight bit smaller.
+
+=head2 Compressed files and Net::FTP
+
+The C<Net::FTP> module provides two low-level methods called C<stor> and
+C<retr> that both return filehandles. These filehandles can used with the
+C<IO::Compress/Uncompress> modules to compress or uncompress files read
+from or written to an FTP Server on the fly, without having to create a
+temporary file.
+
+Firstly, here is code that uses C<retr> to uncompressed a file as it is
+read from the FTP Server.
+
+ use Net::FTP;
+ use IO::Uncompress::Gunzip qw(:all);
+
+ my $ftp = new Net::FTP ...
+
+ my $retr_fh = $ftp->retr($compressed_filename);
+ gunzip $retr_fh => $outFilename, AutoClose => 1
+ or die "Cannot uncompress '$compressed_file': $GunzipError\n";
+
+and this to compress a file as it is written to the FTP Server
+
+ use Net::FTP;
+ use IO::Compress::Gzip qw(:all);
+
+ my $stor_fh = $ftp->stor($filename);
+ gzip "filename" => $stor_fh, AutoClose => 1
+ or die "Cannot compress '$filename': $GzipError\n";
+
+=head1 MISC
+
+=head2 Using C<InputLength> to uncompress data embedded in a larger file/buffer.
+
+A fairly common use-case is where compressed data is embedded in a larger
+file/buffer and you want to read both.
+
+As an example consider the structure of a zip file. This is a well-defined
+file format that mixes both compressed and uncompressed sections of data in
+a single file.
+
+For the purposes of this discussion you can think of a zip file as sequence
+of compressed data streams, each of which is prefixed by an uncompressed
+local header. The local header contains information about the compressed
+data stream, including the name of the compressed file and, in particular,
+the length of the compressed data stream.
+
+To illustrate how to use C<InputLength> here is a script that walks a zip
+file and prints out how many lines are in each compressed file (if you
+intend write code to walking through a zip file for real see
+L<IO::Uncompress::Unzip/"Walking through a zip file"> ). Also, although
+this example uses the zlib-based compression, the technique can be used by
+the other C<IO::Uncompress::*> modules.
+
+ use strict;
+ use warnings;
+
+ use IO::File;
+ use IO::Uncompress::RawInflate qw(:all);
+
+ use constant ZIP_LOCAL_HDR_SIG => 0x04034b50;
+ use constant ZIP_LOCAL_HDR_LENGTH => 30;
+
+ my $file = $ARGV[0] ;
+
+ my $fh = new IO::File "<$file"
+ or die "Cannot open '$file': $!\n";
+
+ while (1)
+ {
+ my $sig;
+ my $buffer;
+
+ my $x ;
+ ($x = $fh->read($buffer, ZIP_LOCAL_HDR_LENGTH)) == ZIP_LOCAL_HDR_LENGTH
+ or die "Truncated file: $!\n";
+
+ my $signature = unpack ("V", substr($buffer, 0, 4));
+
+ last unless $signature == ZIP_LOCAL_HDR_SIG;
+
+ # Read Local Header
+ my $gpFlag = unpack ("v", substr($buffer, 6, 2));
+ my $compressedMethod = unpack ("v", substr($buffer, 8, 2));
+ my $compressedLength = unpack ("V", substr($buffer, 18, 4));
+ my $uncompressedLength = unpack ("V", substr($buffer, 22, 4));
+ my $filename_length = unpack ("v", substr($buffer, 26, 2));
+ my $extra_length = unpack ("v", substr($buffer, 28, 2));
+
+ my $filename ;
+ $fh->read($filename, $filename_length) == $filename_length
+ or die "Truncated file\n";
+
+ $fh->read($buffer, $extra_length) == $extra_length
+ or die "Truncated file\n";
+
+ if ($compressedMethod != 8 && $compressedMethod != 0)
+ {
+ warn "Skipping file '$filename' - not deflated $compressedMethod\n";
+ $fh->read($buffer, $compressedLength) == $compressedLength
+ or die "Truncated file\n";
+ next;
+ }
+
+ if ($compressedMethod == 0 && $gpFlag & 8 == 8)
+ {
+ die "Streamed Stored not supported for '$filename'\n";
+ }
+
+ next if $compressedLength == 0;
+
+ # Done reading the Local Header
+
+ my $inf = new IO::Uncompress::RawInflate $fh,
+ Transparent => 1,
+ InputLength => $compressedLength
+ or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ;
+
+ my $line_count = 0;
+
+ while (<$inf>)
+ {
+ ++ $line_count;
+ }
+
+ print "$filename: $line_count\n";
+ }
+
+The majority of the code above is concerned with reading the zip local
+header data. The code that I want to focus on is at the bottom.
+
+ while (1) {
+
+ # read local zip header data
+ # get $filename
+ # get $compressedLength
+
+ my $inf = new IO::Uncompress::RawInflate $fh,
+ Transparent => 1,
+ InputLength => $compressedLength
+ or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ;
+
+ my $line_count = 0;
+
+ while (<$inf>)
+ {
+ ++ $line_count;
+ }
+
+ print "$filename: $line_count\n";
+ }
+
+The call to C<IO::Uncompress::RawInflate> creates a new filehandle C<$inf>
+that can be used to read from the parent filehandle C<$fh>, uncompressing
+it as it goes. The use of the C<InputLength> option will guarantee that
+I<at most> C<$compressedLength> bytes of compressed data will be read from
+the C<$fh> filehandle (The only exception is for an error case like a
+truncated file or a corrupt data stream).
+
+This means that once RawInflate is finished C<$fh> will be left at the
+byte directly after the compressed data stream.
+
+Now consider what the code looks like without C<InputLength>
+
+ while (1) {
+
+ # read local zip header data
+ # get $filename
+ # get $compressedLength
+
+ # read all the compressed data into $data
+ read($fh, $data, $compressedLength);
+
+ my $inf = new IO::Uncompress::RawInflate \$data,
+ Transparent => 1,
+ or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ;
+
+ my $line_count = 0;
+
+ while (<$inf>)
+ {
+ ++ $line_count;
+ }
+
+ print "$filename: $line_count\n";
+ }
+
+The difference here is the addition of the temporary variable C<$data>.
+This is used to store a copy of the compressed data while it is being
+uncompressed.
+
+If you know that C<$compressedLength> isn't that big then using temporary
+storage won't be a problem. But if C<$compressedLength> is very large or
+you are writing an application that other people will use, and so have no
+idea how big C<$compressedLength> will be, it could be an issue.
+
+Using C<InputLength> avoids the use of temporary storage and means the
+application can cope with large compressed data streams.
+
+One final point -- obviously C<InputLength> can only be used whenever you
+know the length of the compressed data beforehand, like here with a zip
+file.
+
+=head1 SEE ALSO
+
+L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
+
+L<IO::Compress::FAQ|IO::Compress::FAQ>
+
+L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
+L<Archive::Tar|Archive::Tar>,
+L<IO::Zlib|IO::Zlib>
+
+=head1 AUTHOR
+
+This module was written by Paul Marquess, F<pmqs at cpan.org>.
+
+=head1 MODIFICATION HISTORY
+
+See the Changes file.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 2005-2013 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
Added: vendor/perl/dist/cpan/IO-Compress/t/105oneshot-zip-store-only.t
===================================================================
--- vendor/perl/dist/cpan/IO-Compress/t/105oneshot-zip-store-only.t (rev 0)
+++ vendor/perl/dist/cpan/IO-Compress/t/105oneshot-zip-store-only.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,98 @@
+BEGIN {
+ if ($ENV{PERL_CORE}) {
+ chdir 't' if -d 't';
+ @INC = ("../lib", "lib/compress");
+ }
+}
+
+use lib qw(t t/compress);
+use strict;
+use warnings;
+use bytes;
+
+use Test::More ;
+use CompTestUtils;
+
+BEGIN {
+ plan(skip_all => "oneshot needs Perl 5.005 or better - you have Perl $]" )
+ if $] < 5.005 ;
+
+ plan(skip_all => "IO::Compress::Bzip2 not available" )
+ unless eval { require IO::Compress::Bzip2;
+ require IO::Uncompress::Bunzip2;
+ 1
+ } ;
+
+ # use Test::NoWarnings, if available
+ my $extra = 0 ;
+ $extra = 1
+ if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
+
+ plan tests => 1058 + $extra ;
+
+ use_ok('IO::Compress::Zip', qw(:all)) ;
+ use_ok('IO::Uncompress::Unzip', qw(unzip $UnzipError)) ;
+}
+
+my @contents;
+my $content = "x" x 1025;
+$content .= "\x50" ;
+
+push @contents, $content ;
+
+$content .= "y" x 321 ;
+$content .= "\x50\x4b" ;
+push @contents, $content ;
+
+$content .= "z" x 21 ;
+$content .= "\x50\x4b\x07" . "a" x 73 ;
+push @contents, $content ;
+
+$content .= "a" x 73 ;
+$content .= "\x50\x4b\x07\x08" ;
+push @contents, $content ;
+
+$content .= "b" x 102 ;
+$content .= "\x50\x4b\x07\x08" . "\x50\x4b\x07\x08" ;
+push @contents, $content ;
+
+$content .= "c" x 102 ;
+push @contents, $content ;
+
+
+my $index = 0;
+for $content (@contents)
+{
+ ++ $index ;
+ my $contentLen = length $content ;
+
+
+ for my $stream (0, 1)
+ {
+ for my $zip64 (0, 1)
+ {
+ for my $blockSize (1 .. 7, $contentLen, $contentLen-1, $contentLen +1, 16*1024)
+ {
+ title "Index $index, Stream $stream, Zip64 $zip64, BlockSize $blockSize";
+
+ my $crc = Compress::Raw::Zlib::crc32($content);
+ $content .= "\x50\x4b\x07\x08" . pack("V", $crc) . "b" x 53 ;
+
+ my $zipped ;
+
+ ok zip(\$content => \$zipped , Method => ZIP_CM_STORE,
+ Zip64 => $zip64,
+ Stream => $stream), " zip ok"
+ or diag $ZipError ;
+
+ my $got ;
+ ok unzip(\$zipped => \$got, BlockSize => $blockSize), " unzip ok"
+ or diag $UnzipError ;
+
+ is $got, $content, " content ok";
+
+ }
+ }
+ }
+}
+
Added: vendor/perl/dist/cpan/IO-Compress/t/111const-deflate.t
===================================================================
--- vendor/perl/dist/cpan/IO-Compress/t/111const-deflate.t (rev 0)
+++ vendor/perl/dist/cpan/IO-Compress/t/111const-deflate.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,100 @@
+BEGIN {
+ if ($ENV{PERL_CORE}) {
+ chdir 't' if -d 't';
+ @INC = ("../lib", "lib/compress");
+ }
+}
+
+use lib qw(t t/compress);
+use strict;
+use warnings;
+use bytes;
+
+use Test::More ;
+use CompTestUtils;
+
+
+BEGIN {
+ # use Test::NoWarnings, if available
+ my $extra = 0 ;
+ $extra = 1
+ if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
+
+ plan tests => 355 + $extra ;
+}
+
+
+{
+ use Compress::Raw::Zlib ;
+
+ my %all;
+ for my $symbol (@Compress::Raw::Zlib::DEFLATE_CONSTANTS)
+ {
+ eval "defined Compress::Raw::Zlib::$symbol" ;
+ $all{$symbol} = ! $@ ;
+ }
+
+ my $pkg = 1;
+
+ for my $module ( qw( Adapter::Deflate RawDeflate Deflate Gzip Zip ))
+ {
+ ++ $pkg ;
+ eval <<EOM;
+ package P$pkg;
+ use Test::More ;
+ use CompTestUtils;
+
+ use IO::Compress::$module () ;
+
+ ::title "IO::Compress::$module - no import" ;
+EOM
+ is $@, "", "create package P$pkg";
+ for my $symbol (@Compress::Raw::Zlib::DEFLATE_CONSTANTS)
+ {
+ if ( $all{$symbol})
+ {
+ eval "package P$pkg; defined IO::Compress::${module}::$symbol ;";
+ is $@, "", " has $symbol";
+ }
+ else
+ {
+ ok 1, " $symbol not available";
+ }
+ }
+ }
+
+ for my $module ( qw( Adapter::Deflate RawDeflate Deflate Gzip Zip ))
+ {
+ for my $label (keys %Compress::Raw::Zlib::DEFLATE_CONSTANTS)
+ {
+ ++ $pkg ;
+
+ eval <<EOM;
+ package P$pkg;
+ use Test::More ;
+ use CompTestUtils;
+
+ use IO::Compress::$module qw(:$label) ;
+
+ ::title "IO::Compress::$module - import :$label" ;
+
+EOM
+ is $@, "", "create package P$pkg";
+
+ for my $symbol (@{ $Compress::Raw::Zlib::DEFLATE_CONSTANTS{$label} } )
+ {
+ if ( $all{$symbol})
+ {
+ eval "package P$pkg; defined $symbol ;";
+ is $@, "", " has $symbol";
+ }
+ else
+ {
+ ok 1, " $symbol not available";
+ }
+ }
+ }
+ }
+
+}
+
Added: vendor/perl/dist/cpan/JSON-PP/t/116_incr_parse_fixed.t
===================================================================
--- vendor/perl/dist/cpan/JSON-PP/t/116_incr_parse_fixed.t (rev 0)
+++ vendor/perl/dist/cpan/JSON-PP/t/116_incr_parse_fixed.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More tests => 4;
+
+use JSON::PP;
+
+my $json = JSON::PP->new->allow_nonref();
+
+my @vs = $json->incr_parse('"a\"bc');
+
+ok( not scalar(@vs) );
+
+ at vs = $json->incr_parse('"');
+
+is( $vs[0], "a\"bc" );
+
+
+$json = JSON::PP->new;
+
+ at vs = $json->incr_parse('"a\"bc');
+ok( not scalar(@vs) );
+ at vs = eval { $json->incr_parse('"') };
+ok($@ =~ qr/JSON text must be an object or array/);
+
Added: vendor/perl/dist/cpan/List-Util/t/getmagic-once.t
===================================================================
--- vendor/perl/dist/cpan/List-Util/t/getmagic-once.t (rev 0)
+++ vendor/perl/dist/cpan/List-Util/t/getmagic-once.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,47 @@
+#!./perl
+
+BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require Config; import Config;
+ keys %Config; # Silence warning
+ if ($Config{extensions} !~ /\bList\/Util\b/) {
+ print "1..0 # Skip: List::Util was not built\n";
+ exit 0;
+ }
+ }
+}
+use strict;
+use Scalar::Util qw(blessed reftype refaddr);
+use Test::More tests => 6;
+
+my $getmagic_count;
+
+{
+ package T;
+ use Tie::Scalar;
+ use base qw(Tie::StdScalar);
+
+ sub FETCH {
+ $getmagic_count++;
+ my($self) = @_;
+ return $self->SUPER::FETCH;
+ }
+}
+
+tie my $var, 'T';
+
+$var = bless {};
+
+$getmagic_count = 0;
+ok blessed($var);
+is $getmagic_count, 1, 'blessed';
+
+$getmagic_count = 0;
+ok reftype($var);
+is $getmagic_count, 1, 'reftype';
+
+$getmagic_count = 0;
+ok refaddr($var);
+is $getmagic_count, 1, 'refaddr';
Added: vendor/perl/dist/cpan/List-Util/t/multicall-refcount.t
===================================================================
--- vendor/perl/dist/cpan/List-Util/t/multicall-refcount.t (rev 0)
+++ vendor/perl/dist/cpan/List-Util/t/multicall-refcount.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+use Test::More tests => 1;
+
+use List::Util 'first';
+
+our $comparison;
+
+sub foo {
+ if( $comparison ) {
+ return 1;
+ }
+ else {
+ local $comparison = 1;
+ first \&foo, 1,2,3;
+ }
+}
+
+for(1,2){
+ foo();
+}
+
+ok( "Didn't crash calling recursively" );
Added: vendor/perl/dist/cpan/List-Util/t/sum0.t
===================================================================
--- vendor/perl/dist/cpan/List-Util/t/sum0.t (rev 0)
+++ vendor/perl/dist/cpan/List-Util/t/sum0.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+use strict;
+use warnings;
+
+use Test::More tests => 3;
+
+use List::Util qw( sum0 );
+
+my $v = sum0;
+is( $v, 0, 'no args' );
+
+$v = sum0(9);
+is( $v, 9, 'one arg' );
+
+$v = sum0(1,2,3,4);
+is( $v, 10, '4 args');
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/API.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/API.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/API.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,320 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::API - a description of the callable function in each module
+
+=head1 DESCRIPTION
+
+Although there are several modules in the Locale-Codes distribution, all of them
+(as of version 3.10) use exactly the same API. As a matter of fact, each of the
+main callable modules are just wrappers around a central module which does all
+the real work.
+
+=head1 ROUTINES
+
+In order to maintain the documentation for the modules consistently,
+the functions are all documented here, rather than in the documentation
+for the separate modules.
+
+The name of the function depends on the module. For example, every module
+contains a function "code2XXX" where XXX refers to the type of data.
+The values of XXX are described in the following table:
+
+ XXX MODULE
+
+ country Locale::Codes::Country
+ language Locale::Codes::Language
+ currency Locale::Codes::Currency
+ script Locale::Codes::Script
+ langext Locale::Codes::LangExt
+ langvar Locale::Codes::LangVar
+ langfam Locale::Codes::LangFAM
+
+So, the Locale::Country module contains the function code2country, the
+Locale::Language module contains the function code2language, etc.
+
+In all of the functions below, CODE refers to a code for one element in
+the code set. For example, in the two-letter country codes from ISO 3166-1,
+the code 'fi' is used to refer to the country Finland. CODE is always
+case insensitive (though when a code is returned, it will always be in
+the case as used in the standard), so 'fi', 'FI', and 'Fi' would all
+be equivalent.
+
+CODESET refers to a constant specified in the documentation for each
+module to label the various code sets. For example, in the
+Locale::Language module, CODESET could be LOCALE_CODE_ALPHA_2 or
+LOCALE_CODE_ALPHA_3 (among others). Most functions have a default one,
+so they do not need to be specified. So the following calls are valid:
+
+ code2country("fi");
+ code2country("fi",LOCALE_CODE_ALPHA_2);
+ code2country("fin",LOCALE_CODE_ALPHA_3);
+
+Since LOCALE_CODE_ALPHA_2 is the default code set, the first two are
+identical.
+
+=over 4
+
+=item B<code2XXX ( CODE [,CODESET] [,'retired'] )>
+
+These functions take a code and returns a string which contains
+the name of the element identified. If the code is not a valid
+code in the CODESET specified then C<undef> will be returned.
+
+The name of the element is the name as specified in the standard,
+and as a result, different variations of an element name may
+be returned for different values of CODESET.
+
+For example, the B<alpha-2> country code set defines the two-letter
+code "bo" to be "Bolivia, Plurinational State of", whereas the
+B<alpha-3> code set defines the code 'bol' to be the country "Bolivia
+(Plurinational State of)". So:
+
+ code2country('bo',LOCALE_CODE_ALPHA_2);
+ => 'Bolivia, Plurinational State of'
+
+ code2country('bol',LOCALE_CODE_ALPHA_3);
+ => 'Bolivia (Plurinational State of)'
+
+By default, only active codes will be used, but if the string
+'retired' is passed in as an argument, both active and retired
+codes will be examined.
+
+=item B<XXX2code ( NAME [,CODESET] [,'retired'] )>
+
+These functions takes the name of an element (or any of it's aliases)
+and returns the code that corresponds to it, if it exists. If NAME
+could not be identified as the name of one of the elements, then
+C<undef> will be returned.
+
+The name is not case sensitive. Also, any known variation of a name
+may be passed in.
+
+For example, even though the country name returned using
+LOCALE_CODE_ALPHA_2 and LOCALE_CODE_ALPHA_3 country codes for Bolivia is different,
+either country name may be passed in since for each code set, in addition to
+the alias 'Bolivia'. So:
+
+ country2code('Bolivia, Plurinational State of',
+ LOCALE_CODE_ALPHA_2);
+ => bo
+
+ country2code('Bolivia (Plurinational State of)',
+ LOCALE_CODE_ALPHA_2);
+ => bo
+
+ country2code('Bolivia',LOCALE_CODE_ALPHA_2);
+ => bo
+
+By default, only active names will be used, but if the string
+'retired' is passed in as an argument, both active and retired
+names will be examined.
+
+=item B<XXX_code2code ( CODE ,CODESET ,CODESET2 )>
+
+These functions takes a a code from one code set, and returns the
+corresponding code from another code set. CODE must exists in the code
+set specified by CODESET and must have a corresponding code in the
+code set specified by CODESET2 or C<undef> will be returned.
+
+Both CODESETs must be explicitly entered.
+
+ country_code2code('fin', LOCALE_CODE_ALPHA_3,
+ LOCALE_CODE_ALPHA_2);
+ => 'fi'
+
+Note that this function does NOT support retired codes.
+
+=item B<all_XXX_codes ( [CODESET] [,'retired'] )>
+
+These returns a list of all code in the code set. The codes will be
+sorted.
+
+By default, only active codes will be returned, but if the string
+'retired' is passed in as an argument, both active and retired
+codes will be returned.
+
+=item B<all_XXX_names ( [CODESET] [,'retired'] )>
+
+These return a list of all elements names for which there is a
+corresponding code in the specified code set.
+
+The names returned are exactly as they are specified in the standard,
+and are sorted.
+
+Since not all elements are listed in all code sets, the list of
+elements may differ depending on the code set specified.
+
+By default, only active names will be returned, but if the string
+'retired' is passed in as an argument, both active and retired
+names will be returned.
+
+=back
+
+=head1 SEMI-PRIVATE ROUTINES
+
+Additional semi-private routines which may be used to modify the
+internal data are also available. Given their status, they aren't
+exported, and so need to be called by prefixing the function name with
+the package name.
+
+These routines do not currently work with retired codes.
+
+=over 4
+
+=item B<MODULE::rename_XXX ( CODE ,NEW_NAME [,CODESET] )>
+
+These routines are used to change the official name of an element. At
+that point, the name returned by the code2XXX routine would be
+NEW_NAME instead of the name specified in the standard.
+
+The original name will remain as an alias.
+
+For example, the official country name for code 'gb' is 'United
+Kingdom'. If you want to change that, you might call:
+
+ Locale::Codes::Country::rename_country('gb', 'Great Britain');
+
+This means that calling code2country('gb') will now return 'Great
+Britain' instead of 'United Kingdom'.
+
+If any error occurs, a warning is issued and 0 is returned. An error
+occurs if CODE doesn't exist in the specified code set, or if
+NEW_NAME is already in use but for a different element.
+
+If the routine succeeds, 1 is returned.
+
+=item B<MODULE::add_XXX ( CODE ,NAME [,CODESET] )>
+
+These routines are used to add a new code and name to the data.
+
+Both CODE and NAME must be unused in the data set or an error
+occurs (though NAME may be used in a different data set).
+
+For example, to create the fictitious country named "Duchy of
+Grand Fenwick" with codes "gf" and "fen", use the following:
+
+ Locale::Codes::Country::add_country("fe","Duchy of Grand Fenwick",
+ LOCALE_CODE_ALPHA_2);
+
+ Locale::Codes::Country::add_country("fen","Duchy of Grand Fenwick",
+ LOCALE_CODE_ALPHA_3);
+
+The return value is 1 on success, 0 on an error.
+
+=item B<MODULE::delete_XXX ( CODE [,CODESET] )>
+
+These routines are used to delete a code from the data.
+
+CODE must refer to an existing code in the code set.
+
+The return value is 1 on success, 0 on an error.
+
+=item B<MODULE::add_XXX_alias ( NAME ,NEW_NAME )>
+
+These routines are used to add a new alias to the data. They do
+not alter the return value of the code2XXX function.
+
+NAME must be an existing element name, and NEW_NAME must
+be unused or an error occurs.
+
+The return value is 1 on success, 0 on an error.
+
+=item B<MODULE::delete_XXX_alias ( NAME )>
+
+These routines are used to delete an alias from the data. Once
+removed, the element may not be referred to by NAME.
+
+NAME must be one of a list of at least two names that may be used to
+specify an element. If the element may only be referred to by a single
+name, you'll need to use the add_XXX_alias function to add a new alias
+first, or the remove_XXX function to remove the element entirely.
+
+If the alias is used as the name in any code set, one of the other
+names will be used instead. Predicting exactly which one will
+be used requires you to know the order in which the standards
+were read, which is not reliable, so you may want to use the
+rename_XXX function to force one of the alternate names to be
+used.
+
+The return value is 1 on success, 0 on an error.
+
+=item B<MODULE::rename_XXX_code ( CODE ,NEW_CODE [,CODESET] )>
+
+These routines are used to change the official code for an element. At
+that point, the code returned by the XXX2code routine would be
+NEW_CODE instead of the code specified in the standard.
+
+NEW_CODE may either be a code that is not in use, or it may be an
+alias for CODE (in which case, CODE becomes and alias and NEW_CODE
+becomes the "real" code).
+
+The original code is kept as an alias, so that the code2XXX routines
+will work with either the code from the standard or the new code.
+
+However, the all_XXX_codes routine will only return the codes which
+are considered "real" (which means that the list of codes will now
+contain NEW_CODE, but will not contain CODE).
+
+=item B<MODULE::add_XXX_code_alias ( CODE ,NEW_CODE [,CODESET] )>
+
+These routines add an alias for the code. At that point, NEW_CODE and CODE
+will both work in the code2XXX routines. However, the XXX2code routines will
+still return the original code.
+
+=item B<MODULE::delete_XXX_code_alias ( CODE [,CODESET] )>
+
+These routines delete an alias for the code.
+
+These will only work if CODE is actually an alias. If it is the "real"
+code, it will not be deleted. You will need to use the rename_XXX_code
+function to switch the real code with one of the aliases, and then
+delete the alias.
+
+=back
+
+=head1 KNOWN BUGS AND LIMITATIONS
+
+=over 4
+
+=item B<Relationship between code sets>
+
+Because each code set uses a slightly different list of elements, and
+they are not necessarily one-to-one, there may be some confusion
+about the relationship between codes from different code sets.
+
+For example, ISO 3166 assigns one code to the country "United States
+Minor Outlying Islands", but the FIPS 10 codes give different codes
+to different islands (Baker Island, Howland Island, etc.).
+
+This may cause some confusion... I've done the best that I could do
+to minimize it.
+
+=item B<Non-ASCII characters not supported>
+
+Currently all names must be all ASCII. I plan on relaxing that
+limitation in the future.
+
+=back
+
+=head1 SEE ALSO
+
+Locale::Codes
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Constants.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Constants.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Constants.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,133 @@
+package Locale::Codes::Constants;
+# Copyright (C) 2001 Canon Research Centre Europe (CRE).
+# Copyright (C) 2002-2009 Neil Bowers
+# Copyright (c) 2010-2013 Sullivan Beck
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+use warnings;
+
+require Exporter;
+
+#-----------------------------------------------------------------------
+# Public Global Variables
+#-----------------------------------------------------------------------
+
+our($VERSION, at ISA, at EXPORT);
+our(%ALL_CODESETS);
+
+$VERSION='3.25';
+ at ISA = qw(Exporter);
+ at EXPORT = qw(LOCALE_CODE_ALPHA_2
+ LOCALE_CODE_ALPHA_3
+ LOCALE_CODE_NUMERIC
+ LOCALE_CODE_FIPS
+ LOCALE_CODE_DOM
+
+ LOCALE_LANG_ALPHA_2
+ LOCALE_LANG_ALPHA_3
+ LOCALE_LANG_TERM
+
+ LOCALE_CURR_ALPHA
+ LOCALE_CURR_NUMERIC
+
+ LOCALE_SCRIPT_ALPHA
+ LOCALE_SCRIPT_NUMERIC
+
+ LOCALE_LANGEXT_ALPHA
+
+ LOCALE_LANGVAR_ALPHA
+
+ LOCALE_LANGFAM_ALPHA
+
+ %ALL_CODESETS
+ );
+
+#-----------------------------------------------------------------------
+# Constants
+#-----------------------------------------------------------------------
+
+use constant LOCALE_CODE_ALPHA_2 => 'alpha-2';
+use constant LOCALE_CODE_ALPHA_3 => 'alpha-3';
+use constant LOCALE_CODE_NUMERIC => 'numeric';
+use constant LOCALE_CODE_FIPS => 'fips-10';
+use constant LOCALE_CODE_DOM => 'dom';
+
+$ALL_CODESETS{'country'} = {
+ 'default' => 'alpha-2',
+ 'codesets' => { 'alpha-2' => ['lc'],
+ 'alpha-3' => ['lc'],
+ 'numeric' => ['numeric',3],
+ 'fips-10' => ['uc'],
+ 'dom' => ['lc'],
+ }
+ };
+
+use constant LOCALE_LANG_ALPHA_2 => 'alpha-2';
+use constant LOCALE_LANG_ALPHA_3 => 'alpha-3';
+use constant LOCALE_LANG_TERM => 'term';
+
+$ALL_CODESETS{'language'} = {
+ 'default' => 'alpha-2',
+ 'codesets' => { 'alpha-2' => ['lc'],
+ 'alpha-3' => ['lc'],
+ 'term' => ['lc'],
+ }
+ };
+
+use constant LOCALE_CURR_ALPHA => 'alpha';
+use constant LOCALE_CURR_NUMERIC => 'num';
+
+$ALL_CODESETS{'currency'} = {
+ 'default' => 'alpha',
+ 'codesets' => { 'alpha' => ['uc'],
+ 'num' => ['numeric',3],
+ }
+ };
+
+use constant LOCALE_SCRIPT_ALPHA => 'alpha';
+use constant LOCALE_SCRIPT_NUMERIC => 'num';
+
+$ALL_CODESETS{'script'} = {
+ 'default' => 'alpha',
+ 'codesets' => { 'alpha' => ['ucfirst'],
+ 'num' => ['numeric',3],
+ }
+ };
+
+use constant LOCALE_LANGEXT_ALPHA => 'alpha';
+
+$ALL_CODESETS{'langext'} = {
+ 'default' => 'alpha',
+ 'codesets' => { 'alpha' => ['lc'],
+ }
+ };
+
+use constant LOCALE_LANGVAR_ALPHA => 'alpha';
+
+$ALL_CODESETS{'langvar'} = {
+ 'default' => 'alpha',
+ 'codesets' => { 'alpha' => ['lc'],
+ }
+ };
+
+use constant LOCALE_LANGFAM_ALPHA => 'alpha';
+
+$ALL_CODESETS{'langfam'} = {
+ 'default' => 'alpha',
+ 'codesets' => { 'alpha' => ['lc'],
+ }
+ };
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Constants.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Constants.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Constants.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,41 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::Constants - constants for Locale codes
+
+=head1 DESCRIPTION
+
+B<Locale::Codes::Constants> defines symbols which are used in the other
+modules from the Locale-Codes distribution.
+
+You shouldn't have to C<use> this module directly yourself - it is
+used by the other Locale modules, which in turn export the symbols.
+
+The constants are documented in each of the Locale modules.
+
+=head1 KNOWN BUGS AND LIMITATIONS
+
+None known.
+
+=head1 SEE ALSO
+
+Locale::Codes
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,217 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::Country - standard codes for country identification
+
+=head1 SYNOPSIS
+
+ use Locale::Codes::Country;
+
+ $country = code2country('jp' [,CODESET]); # $country gets 'Japan'
+ $code = country2code('Norway' [,CODESET]); # $code gets 'no'
+
+ @codes = all_country_codes( [CODESET]);
+ @names = all_country_names();
+
+ # semi-private routines
+ Locale::Codes::Country::alias_code('uk' => 'gb');
+ Locale::Codes::Country::rename_country('gb' => 'Great Britain');
+
+=head1 DESCRIPTION
+
+The C<Locale::Codes::Country> module provides access to several code sets
+that can be used for identifying countries, such as those defined in
+ISO 3166-1.
+
+Most of the routines take an optional additional argument which
+specifies the code set to use. If not specified, the default ISO
+3166-1 two-letter codes will be used.
+
+=head1 SUPPORTED CODE SETS
+
+There are several different code sets you can use for identifying
+countries. A code set may be specified using either a name, or a
+constant that is automatically exported by this module.
+
+For example, the two are equivalent:
+
+ $country = code2country('jp','alpha-2');
+ $country = code2country('jp',LOCALE_CODE_ALPHA_2);
+
+The codesets currently supported are:
+
+=over 4
+
+=item B<alpha-2, LOCALE_CODE_ALPHA_2>
+
+This is the set of two-letter (lowercase) codes from ISO 3166-1, such
+as 'tv' for Tuvalu.
+
+This is the default code set.
+
+=item B<alpha-3, LOCALE_CODE_ALPHA_3>
+
+This is the set of three-letter (lowercase) codes from ISO 3166-1,
+such as 'brb' for Barbados. These codes are actually defined and
+maintained by the U.N. Statistics division.
+
+=item B<numeric, LOCALE_CODE_NUMERIC>
+
+This is the set of three-digit numeric codes from ISO 3166-1, such as
+064 for Bhutan. These codes are actually defined and maintained by the
+U.N. Statistics division.
+
+If a 2-digit code is entered, it is converted to 3 digits by prepending
+a 0.
+
+=item B<fips-10, LOCALE_CODE_FIPS>
+
+The FIPS 10 data are two-letter (uppercase) codes assigned by the
+National Geospatial-Intelligence Agency.
+
+=item B<dom, LOCALE_CODE_DOM>
+
+The IANA is responsible for delegating management of the top level country
+domains. The country domains are the two-letter (lowercase) codes from ISO 3166
+with a few other additions.
+
+=back
+
+=head1 ROUTINES
+
+=over 4
+
+=item B<code2country ( CODE [,CODESET] )>
+
+=item B<country2code ( NAME [,CODESET] )>
+
+=item B<country_code2code ( CODE ,CODESET ,CODESET2 )>
+
+=item B<all_country_codes ( [CODESET] )>
+
+=item B<all_country_names ( [CODESET] )>
+
+=item B<Locale::Codes::Country::rename_country ( CODE ,NEW_NAME [,CODESET] )>
+
+=item B<Locale::Codes::Country::add_country ( CODE ,NAME [,CODESET] )>
+
+=item B<Locale::Codes::Country::delete_country ( CODE [,CODESET] )>
+
+=item B<Locale::Codes::Country::add_country_alias ( NAME ,NEW_NAME )>
+
+=item B<Locale::Codes::Country::delete_country_alias ( NAME )>
+
+=item B<Locale::Codes::Country::rename_country_code ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::Country::add_country_code_alias ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::Country::delete_country_code_alias ( CODE [,CODESET] )>
+
+These routines are all documented in the Locale::Codes::API man page.
+
+=item B<alias_code ( ALIAS, CODE [,CODESET] )>
+
+Version 2.07 included 2 functions for modifying the internal data:
+rename_country and alias_code. Both of these could be used only to
+modify the internal data for country codes.
+
+As of 3.10, the internal data for all types of codes can be modified.
+
+The alias_code function is preserved for backwards compatibility, but
+the following two are identical:
+
+ alias_code(ALIAS,CODE [,CODESET]);
+ rename_country_code(CODE,ALIAS [,CODESET]);
+
+and the latter should be used for consistency.
+
+The alias_code function is deprecated and will be removed at some point
+in the future.
+
+B<Note:> this function was previously called _alias_code, but the
+leading underscore has been dropped. The old name was supported for
+all 2.X releases, but has been dropped as of 3.00.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item B<Locale::Codes>
+
+The Locale-Codes distribution.
+
+=item B<Locale::Codes::API>
+
+The list of functions supported by this module.
+
+=item B<Locale::SubCountry>
+
+ISO codes for country sub-divisions (states, counties, provinces,
+etc), as defined in ISO 3166-2. This module is not part of the
+Locale-Codes distribution, but is available from CPAN in
+CPAN/modules/by-module/Locale/
+
+=item B<http://www.iso.org/iso/country_codes>
+
+Official home page for the ISO 3166 maintenance agency.
+
+Unfortunately, they do not make the actual ISO available for free,
+so I cannot check the alpha-3 and numerical codes here.
+
+=item B<http://www.iso.org/iso/list-en1-semic-3.txt>
+
+=item B<http://www.iso.org/iso/home/standards/country_codes/iso-3166-1_decoding_table.htm>
+
+The source of ISO 3166-1 two-letter codes used by this
+module.
+
+=item B<http://unstats.un.org/unsd/methods/m49/m49alpha.htm>
+
+The source of the official ISO 3166-1 three-letter codes and
+three-digit codes.
+
+For some reason, this table is incomplete! Several countries are
+missing from it, and I cannot find them anywhere on the UN site. I
+get as much of the data from here as I can.
+
+=item B<http://earth-info.nga.mil/gns/html/digraphs.htm>
+
+The official list of the FIPS 10 codes.
+
+=item B<http://www.iana.org/domains/>
+
+Official source of the top-level domain names.
+
+=item B<https://www.cia.gov/library/publications/the-world-factbook/appendix/print_appendix-d.html>
+
+The World Factbook maintained by the CIA is a potential source of
+the data. Unfortunately, it adds/preserves non-standard codes, so it is no
+longer used as a source of data.
+
+=item B<http://www.statoids.com/wab.html>
+
+Another unofficial source of data. Currently, it is not used to get
+data, but the notes and explanatory material were very useful for
+understanding discrepancies between the sources.
+
+=back
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country_Codes.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country_Codes.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country_Codes.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,8761 @@
+package Locale::Codes::Country_Codes;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'get_codes' is run.
+# Generated on: Wed Feb 27 10:04:03 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::Country_Codes - country codes for the Locale::Codes::Country module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::Country module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Data{'country'}{'id'} = '0294';
+
+$Locale::Codes::Data{'country'}{'id2names'} = {
+ q(0001) => [
+ q(Afghanistan),
+ ],
+ q(0002) => [
+ q(Aland Islands),
+ ],
+ q(0003) => [
+ q(Albania),
+ ],
+ q(0004) => [
+ q(Algeria),
+ ],
+ q(0005) => [
+ q(American Samoa),
+ ],
+ q(0006) => [
+ q(Andorra),
+ ],
+ q(0007) => [
+ q(Angola),
+ ],
+ q(0008) => [
+ q(Anguilla),
+ ],
+ q(0009) => [
+ q(Antarctica),
+ ],
+ q(0010) => [
+ q(Antigua and Barbuda),
+ ],
+ q(0011) => [
+ q(Argentina),
+ ],
+ q(0012) => [
+ q(Armenia),
+ ],
+ q(0013) => [
+ q(Aruba),
+ ],
+ q(0014) => [
+ q(Australia),
+ ],
+ q(0015) => [
+ q(Austria),
+ ],
+ q(0016) => [
+ q(Azerbaijan),
+ ],
+ q(0017) => [
+ q(Bahamas),
+ q(Bahamas, The),
+ q(The Bahamas),
+ ],
+ q(0018) => [
+ q(Bahrain),
+ ],
+ q(0019) => [
+ q(Bangladesh),
+ ],
+ q(0020) => [
+ q(Barbados),
+ ],
+ q(0021) => [
+ q(Belarus),
+ ],
+ q(0022) => [
+ q(Belgium),
+ ],
+ q(0023) => [
+ q(Belize),
+ ],
+ q(0024) => [
+ q(Benin),
+ ],
+ q(0025) => [
+ q(Bermuda),
+ ],
+ q(0026) => [
+ q(Bhutan),
+ ],
+ q(0027) => [
+ q(Bolivia, Plurinational State of),
+ q(Bolivia (Plurinational State of)),
+ q(Bolivia),
+ ],
+ q(0028) => [
+ q(Bonaire, Saint Eustatius and Saba),
+ ],
+ q(0029) => [
+ q(Bosnia and Herzegovina),
+ ],
+ q(0030) => [
+ q(Botswana),
+ ],
+ q(0031) => [
+ q(Bouvet Island),
+ ],
+ q(0032) => [
+ q(Brazil),
+ ],
+ q(0033) => [
+ q(British Indian Ocean Territory),
+ ],
+ q(0034) => [
+ q(Brunei Darussalam),
+ q(Brunei),
+ ],
+ q(0035) => [
+ q(Bulgaria),
+ ],
+ q(0036) => [
+ q(Burkina Faso),
+ ],
+ q(0037) => [
+ q(Burundi),
+ ],
+ q(0038) => [
+ q(Cambodia),
+ ],
+ q(0039) => [
+ q(Cameroon),
+ ],
+ q(0040) => [
+ q(Canada),
+ ],
+ q(0041) => [
+ q(Cape Verde),
+ ],
+ q(0042) => [
+ q(Cayman Islands),
+ ],
+ q(0043) => [
+ q(Central African Republic),
+ ],
+ q(0044) => [
+ q(Chad),
+ ],
+ q(0045) => [
+ q(Chile),
+ ],
+ q(0046) => [
+ q(China),
+ ],
+ q(0047) => [
+ q(Christmas Island),
+ ],
+ q(0048) => [
+ q(Cocos (Keeling) Islands),
+ q(Keeling Islands),
+ q(Cocos Islands),
+ ],
+ q(0049) => [
+ q(Colombia),
+ ],
+ q(0050) => [
+ q(Comoros),
+ ],
+ q(0051) => [
+ q(Congo),
+ q(Congo (Brazzaville)),
+ q(Congo, Republic of the),
+ q(The Republic of the Congo),
+ ],
+ q(0052) => [
+ q(Congo, The Democratic Republic of the),
+ q(Democratic Republic of the Congo),
+ q(Congo, Democratic Republic of the),
+ q(The Democratic Republic of the Congo),
+ ],
+ q(0053) => [
+ q(Cook Islands),
+ ],
+ q(0054) => [
+ q(Costa Rica),
+ ],
+ q(0055) => [
+ q(Cote d'Ivoire),
+ ],
+ q(0056) => [
+ q(Croatia),
+ ],
+ q(0057) => [
+ q(Cuba),
+ ],
+ q(0058) => [
+ q(Curacao),
+ ],
+ q(0059) => [
+ q(Cyprus),
+ ],
+ q(0060) => [
+ q(Czech Republic),
+ ],
+ q(0061) => [
+ q(Denmark),
+ ],
+ q(0062) => [
+ q(Djibouti),
+ ],
+ q(0063) => [
+ q(Dominica),
+ ],
+ q(0064) => [
+ q(Dominican Republic),
+ ],
+ q(0065) => [
+ q(Ecuador),
+ ],
+ q(0066) => [
+ q(Egypt),
+ ],
+ q(0067) => [
+ q(El Salvador),
+ ],
+ q(0068) => [
+ q(Equatorial Guinea),
+ ],
+ q(0069) => [
+ q(Eritrea),
+ ],
+ q(0070) => [
+ q(Estonia),
+ ],
+ q(0071) => [
+ q(Ethiopia),
+ ],
+ q(0072) => [
+ q(Falkland Islands (Malvinas)),
+ q(Falkland Islands (Islas Malvinas)),
+ ],
+ q(0073) => [
+ q(Faroe Islands),
+ q(Faeroe Islands),
+ ],
+ q(0074) => [
+ q(Fiji),
+ ],
+ q(0075) => [
+ q(Finland),
+ ],
+ q(0076) => [
+ q(France),
+ ],
+ q(0077) => [
+ q(French Guiana),
+ ],
+ q(0078) => [
+ q(French Polynesia),
+ ],
+ q(0079) => [
+ q(French Southern Territories),
+ q(French Southern and Antarctic Lands),
+ ],
+ q(0080) => [
+ q(Gabon),
+ ],
+ q(0081) => [
+ q(Gambia),
+ q(Gambia, The),
+ ],
+ q(0082) => [
+ q(Georgia),
+ ],
+ q(0083) => [
+ q(Germany),
+ ],
+ q(0084) => [
+ q(Ghana),
+ ],
+ q(0085) => [
+ q(Gibraltar),
+ ],
+ q(0086) => [
+ q(Greece),
+ ],
+ q(0087) => [
+ q(Greenland),
+ ],
+ q(0088) => [
+ q(Grenada),
+ ],
+ q(0089) => [
+ q(Guadeloupe),
+ ],
+ q(0090) => [
+ q(Guam),
+ ],
+ q(0091) => [
+ q(Guatemala),
+ ],
+ q(0092) => [
+ q(Guernsey),
+ ],
+ q(0093) => [
+ q(Guinea),
+ ],
+ q(0094) => [
+ q(Guinea-Bissau),
+ ],
+ q(0095) => [
+ q(Guyana),
+ ],
+ q(0096) => [
+ q(Haiti),
+ ],
+ q(0097) => [
+ q(Heard Island and Mcdonald Islands),
+ ],
+ q(0098) => [
+ q(Holy See (Vatican City State)),
+ q(Holy See),
+ q(Vatican City),
+ q(Holy See (Vatican City)),
+ ],
+ q(0099) => [
+ q(Honduras),
+ ],
+ q(0100) => [
+ q(Hong Kong),
+ q(China, Hong Kong Special Administrative Region),
+ q(Hong Kong S.A.R.),
+ q(Hong Kong Special Administrative Region of China),
+ ],
+ q(0101) => [
+ q(Hungary),
+ ],
+ q(0102) => [
+ q(Iceland),
+ ],
+ q(0103) => [
+ q(India),
+ ],
+ q(0104) => [
+ q(Indonesia),
+ ],
+ q(0105) => [
+ q(Iran, Islamic Republic of),
+ q(Iran (Islamic Republic of)),
+ q(Iran),
+ ],
+ q(0106) => [
+ q(Iraq),
+ ],
+ q(0107) => [
+ q(Ireland),
+ ],
+ q(0108) => [
+ q(Isle of Man),
+ ],
+ q(0109) => [
+ q(Israel),
+ ],
+ q(0110) => [
+ q(Italy),
+ ],
+ q(0111) => [
+ q(Jamaica),
+ ],
+ q(0112) => [
+ q(Japan),
+ ],
+ q(0113) => [
+ q(Jersey),
+ ],
+ q(0114) => [
+ q(Jordan),
+ ],
+ q(0115) => [
+ q(Kazakhstan),
+ q(Kazakstan),
+ ],
+ q(0116) => [
+ q(Kenya),
+ ],
+ q(0117) => [
+ q(Kiribati),
+ ],
+ q(0118) => [
+ q(Korea, Democratic People's Republic of),
+ q(Democratic People's Republic of Korea),
+ q(North Korea),
+ ],
+ q(0119) => [
+ q(Korea, Republic of),
+ q(Republic of Korea),
+ q(South Korea),
+ ],
+ q(0120) => [
+ q(Kuwait),
+ ],
+ q(0121) => [
+ q(Kyrgyzstan),
+ ],
+ q(0122) => [
+ q(Lao People's Democratic Republic),
+ ],
+ q(0123) => [
+ q(Latvia),
+ ],
+ q(0124) => [
+ q(Lebanon),
+ ],
+ q(0125) => [
+ q(Lesotho),
+ ],
+ q(0126) => [
+ q(Liberia),
+ ],
+ q(0127) => [
+ q(Libya),
+ ],
+ q(0128) => [
+ q(Liechtenstein),
+ ],
+ q(0129) => [
+ q(Lithuania),
+ ],
+ q(0130) => [
+ q(Luxembourg),
+ ],
+ q(0131) => [
+ q(Macao),
+ q(China, Macao Special Administrative Region),
+ q(Macau),
+ q(Macau S.A.R),
+ q(Macau S.A.R.),
+ q(Macao Special Administrative Region of China),
+ ],
+ q(0132) => [
+ q(Macedonia, The Former Yugoslav Republic of),
+ q(The former Yugoslav Republic of Macedonia),
+ q(Macedonia),
+ q(Macedonia, Former Yugoslav Republic of),
+ ],
+ q(0133) => [
+ q(Madagascar),
+ ],
+ q(0134) => [
+ q(Malawi),
+ ],
+ q(0135) => [
+ q(Malaysia),
+ ],
+ q(0136) => [
+ q(Maldives),
+ ],
+ q(0137) => [
+ q(Mali),
+ ],
+ q(0138) => [
+ q(Malta),
+ ],
+ q(0139) => [
+ q(Marshall Islands),
+ ],
+ q(0140) => [
+ q(Martinique),
+ ],
+ q(0141) => [
+ q(Mauritania),
+ ],
+ q(0142) => [
+ q(Mauritius),
+ ],
+ q(0143) => [
+ q(Mayotte),
+ ],
+ q(0144) => [
+ q(Mexico),
+ ],
+ q(0145) => [
+ q(Micronesia, Federated States of),
+ q(Micronesia (Federated States of)),
+ q(Federated States of Micronesia),
+ ],
+ q(0146) => [
+ q(Moldova, Republic of),
+ q(Republic of Moldova),
+ ],
+ q(0147) => [
+ q(Monaco),
+ ],
+ q(0148) => [
+ q(Mongolia),
+ ],
+ q(0149) => [
+ q(Montenegro),
+ ],
+ q(0150) => [
+ q(Montserrat),
+ ],
+ q(0151) => [
+ q(Morocco),
+ ],
+ q(0152) => [
+ q(Mozambique),
+ ],
+ q(0153) => [
+ q(Myanmar),
+ q(Burma),
+ ],
+ q(0154) => [
+ q(Namibia),
+ ],
+ q(0155) => [
+ q(Nauru),
+ ],
+ q(0156) => [
+ q(Nepal),
+ ],
+ q(0157) => [
+ q(Netherlands),
+ ],
+ q(0158) => [
+ q(New Caledonia),
+ ],
+ q(0159) => [
+ q(New Zealand),
+ ],
+ q(0160) => [
+ q(Nicaragua),
+ ],
+ q(0161) => [
+ q(Niger),
+ ],
+ q(0162) => [
+ q(Nigeria),
+ ],
+ q(0163) => [
+ q(Niue),
+ ],
+ q(0164) => [
+ q(Norfolk Island),
+ ],
+ q(0165) => [
+ q(Northern Mariana Islands),
+ ],
+ q(0166) => [
+ q(Norway),
+ ],
+ q(0167) => [
+ q(Oman),
+ ],
+ q(0168) => [
+ q(Pakistan),
+ ],
+ q(0169) => [
+ q(Palau),
+ ],
+ q(0170) => [
+ q(Palestine, State of),
+ q(State of Palestine),
+ ],
+ q(0171) => [
+ q(Panama),
+ ],
+ q(0172) => [
+ q(Papua New Guinea),
+ ],
+ q(0173) => [
+ q(Paraguay),
+ ],
+ q(0174) => [
+ q(Peru),
+ ],
+ q(0175) => [
+ q(Philippines),
+ ],
+ q(0176) => [
+ q(Pitcairn),
+ q(Pitcairn Islands),
+ q(Pitcairn Island),
+ ],
+ q(0177) => [
+ q(Poland),
+ ],
+ q(0178) => [
+ q(Portugal),
+ ],
+ q(0179) => [
+ q(Puerto Rico),
+ ],
+ q(0180) => [
+ q(Qatar),
+ ],
+ q(0181) => [
+ q(Reunion),
+ ],
+ q(0182) => [
+ q(Romania),
+ ],
+ q(0183) => [
+ q(Russian Federation),
+ ],
+ q(0184) => [
+ q(Rwanda),
+ ],
+ q(0185) => [
+ q(Saint Barthelemy),
+ q(Saint-Barthelemy),
+ ],
+ q(0186) => [
+ q(Saint Helena, Ascension and Tristan da Cunha),
+ q(Saint Helena),
+ ],
+ q(0187) => [
+ q(Saint Kitts and Nevis),
+ ],
+ q(0188) => [
+ q(Saint Lucia),
+ ],
+ q(0189) => [
+ q(Saint Martin (French part)),
+ q(Saint-Martin (French part)),
+ q(Saint Martin),
+ q(Saint-Martin),
+ ],
+ q(0190) => [
+ q(Saint Pierre and Miquelon),
+ ],
+ q(0191) => [
+ q(Saint Vincent and the Grenadines),
+ ],
+ q(0192) => [
+ q(Samoa),
+ ],
+ q(0193) => [
+ q(San Marino),
+ ],
+ q(0194) => [
+ q(Sao Tome and Principe),
+ ],
+ q(0195) => [
+ q(Saudi Arabia),
+ ],
+ q(0196) => [
+ q(Senegal),
+ ],
+ q(0197) => [
+ q(Serbia),
+ ],
+ q(0198) => [
+ q(Seychelles),
+ ],
+ q(0199) => [
+ q(Sierra Leone),
+ ],
+ q(0200) => [
+ q(Singapore),
+ ],
+ q(0201) => [
+ q(Sint Maarten (Dutch part)),
+ ],
+ q(0202) => [
+ q(Slovakia),
+ ],
+ q(0203) => [
+ q(Slovenia),
+ ],
+ q(0204) => [
+ q(Solomon Islands),
+ ],
+ q(0205) => [
+ q(Somalia),
+ ],
+ q(0206) => [
+ q(South Africa),
+ ],
+ q(0207) => [
+ q(South Georgia and the South Sandwich Islands),
+ q(South Georgia and the Islands),
+ ],
+ q(0208) => [
+ q(South Sudan),
+ ],
+ q(0209) => [
+ q(Spain),
+ ],
+ q(0210) => [
+ q(Sri Lanka),
+ ],
+ q(0211) => [
+ q(Sudan),
+ ],
+ q(0212) => [
+ q(Suriname),
+ ],
+ q(0213) => [
+ q(Svalbard and Jan Mayen),
+ q(Svalbard and Jan Mayen Islands),
+ ],
+ q(0214) => [
+ q(Swaziland),
+ ],
+ q(0215) => [
+ q(Sweden),
+ ],
+ q(0216) => [
+ q(Switzerland),
+ ],
+ q(0217) => [
+ q(Syrian Arab Republic),
+ q(Syria),
+ q(Golan Heights (Israeli-occupied)),
+ ],
+ q(0218) => [
+ q(Taiwan, Province of China),
+ q(Taiwan),
+ ],
+ q(0219) => [
+ q(Tajikistan),
+ ],
+ q(0220) => [
+ q(Tanzania, United Republic of),
+ q(United Republic of Tanzania),
+ ],
+ q(0221) => [
+ q(Thailand),
+ ],
+ q(0222) => [
+ q(Timor-Leste),
+ q(East Timor),
+ ],
+ q(0223) => [
+ q(Togo),
+ ],
+ q(0224) => [
+ q(Tokelau),
+ ],
+ q(0225) => [
+ q(Tonga),
+ ],
+ q(0226) => [
+ q(Trinidad and Tobago),
+ ],
+ q(0227) => [
+ q(Tunisia),
+ ],
+ q(0228) => [
+ q(Turkey),
+ ],
+ q(0229) => [
+ q(Turkmenistan),
+ ],
+ q(0230) => [
+ q(Turks and Caicos Islands),
+ ],
+ q(0231) => [
+ q(Tuvalu),
+ ],
+ q(0232) => [
+ q(Uganda),
+ ],
+ q(0233) => [
+ q(Ukraine),
+ ],
+ q(0234) => [
+ q(United Arab Emirates),
+ ],
+ q(0235) => [
+ q(United Kingdom),
+ q(United Kingdom of Great Britain and Northern Ireland),
+ q(Great Britain),
+ q(UK),
+ ],
+ q(0236) => [
+ q(United States),
+ q(United States of America),
+ q(US),
+ q(USA),
+ ],
+ q(0237) => [
+ q(United States Minor Outlying Islands),
+ ],
+ q(0238) => [
+ q(Uruguay),
+ ],
+ q(0239) => [
+ q(Uzbekistan),
+ ],
+ q(0240) => [
+ q(Vanuatu),
+ ],
+ q(0241) => [
+ q(Venezuela, Bolivarian Republic of),
+ q(Venezuela (Bolivarian Republic of)),
+ q(Venezuela),
+ ],
+ q(0242) => [
+ q(Viet Nam),
+ q(Vietnam),
+ ],
+ q(0243) => [
+ q(Virgin Islands, British),
+ q(British Virgin Islands),
+ q(Virgin Islands (UK)),
+ ],
+ q(0244) => [
+ q(Virgin Islands, U.S.),
+ q(United States Virgin Islands),
+ q(Virgin Islands (US)),
+ q(Virgin Islands),
+ ],
+ q(0245) => [
+ q(Wallis and Futuna),
+ q(Wallis and Futuna Islands),
+ ],
+ q(0246) => [
+ q(Western Sahara),
+ ],
+ q(0247) => [
+ q(Yemen),
+ ],
+ q(0248) => [
+ q(Zambia),
+ ],
+ q(0249) => [
+ q(Zimbabwe),
+ ],
+ q(0250) => [
+ q(Channel Islands),
+ ],
+ q(0251) => [
+ q(Sark),
+ ],
+ q(0252) => [
+ q(Akrotiri),
+ ],
+ q(0253) => [
+ q(Ashmore and Cartier Islands),
+ ],
+ q(0254) => [
+ q(Baker Island),
+ ],
+ q(0255) => [
+ q(Bassas da India),
+ ],
+ q(0256) => [
+ q(Clipperton Island),
+ ],
+ q(0257) => [
+ q(Congo (Kinshasa)),
+ ],
+ q(0258) => [
+ q(Coral Sea Islands),
+ ],
+ q(0259) => [
+ q(Dhekelia),
+ ],
+ q(0260) => [
+ q(Etorofu, Habomai, Kunashiri, and Shikotan Islands),
+ ],
+ q(0261) => [
+ q(Europa Island),
+ ],
+ q(0262) => [
+ q(Gaza Strip),
+ ],
+ q(0263) => [
+ q(Glorioso Islands),
+ ],
+ q(0264) => [
+ q(Heard Island and McDonald Islands),
+ ],
+ q(0265) => [
+ q(Howland Island),
+ ],
+ q(0266) => [
+ q(Jan Mayen),
+ ],
+ q(0267) => [
+ q(Jarvis Island),
+ ],
+ q(0268) => [
+ q(Johnston Atoll),
+ ],
+ q(0269) => [
+ q(Juan de Nova Island),
+ ],
+ q(0270) => [
+ q(Kingman Reef),
+ ],
+ q(0271) => [
+ q(Korea, North),
+ ],
+ q(0272) => [
+ q(Korea, South),
+ ],
+ q(0273) => [
+ q(Kosovo),
+ ],
+ q(0274) => [
+ q(Laos),
+ ],
+ q(0275) => [
+ q(Midway Islands),
+ ],
+ q(0276) => [
+ q(Moldova),
+ ],
+ q(0277) => [
+ q(Navassa Island),
+ ],
+ q(0278) => [
+ q(Palmyra Atoll),
+ ],
+ q(0279) => [
+ q(Paracel Islands),
+ ],
+ q(0280) => [
+ q(Russia),
+ ],
+ q(0281) => [
+ q(Saint Helena, Ascension, and Tristan da Cunha),
+ ],
+ q(0282) => [
+ q(Sint Maarten),
+ ],
+ q(0283) => [
+ q(South Georgia and South Sandwich Islands),
+ ],
+ q(0284) => [
+ q(Spratly Islands),
+ ],
+ q(0285) => [
+ q(Svalbard),
+ ],
+ q(0286) => [
+ q(Tanzania),
+ ],
+ q(0287) => [
+ q(Tromelin Island),
+ ],
+ q(0288) => [
+ q(Wake Island),
+ ],
+ q(0289) => [
+ q(West Bank),
+ ],
+ q(0290) => [
+ q(Ascension Island),
+ ],
+ q(0291) => [
+ q(Netherlands Antilles),
+ ],
+ q(0292) => [
+ q(European Union),
+ ],
+ q(0293) => [
+ q(USSR),
+ ],
+};
+
+$Locale::Codes::Data{'country'}{'alias2id'} = {
+ q(afghanistan) => [
+ q(0001),
+ q(0),
+ ],
+ q(akrotiri) => [
+ q(0252),
+ q(0),
+ ],
+ q(aland islands) => [
+ q(0002),
+ q(0),
+ ],
+ q(albania) => [
+ q(0003),
+ q(0),
+ ],
+ q(algeria) => [
+ q(0004),
+ q(0),
+ ],
+ q(american samoa) => [
+ q(0005),
+ q(0),
+ ],
+ q(andorra) => [
+ q(0006),
+ q(0),
+ ],
+ q(angola) => [
+ q(0007),
+ q(0),
+ ],
+ q(anguilla) => [
+ q(0008),
+ q(0),
+ ],
+ q(antarctica) => [
+ q(0009),
+ q(0),
+ ],
+ q(antigua and barbuda) => [
+ q(0010),
+ q(0),
+ ],
+ q(argentina) => [
+ q(0011),
+ q(0),
+ ],
+ q(armenia) => [
+ q(0012),
+ q(0),
+ ],
+ q(aruba) => [
+ q(0013),
+ q(0),
+ ],
+ q(ascension island) => [
+ q(0290),
+ q(0),
+ ],
+ q(ashmore and cartier islands) => [
+ q(0253),
+ q(0),
+ ],
+ q(australia) => [
+ q(0014),
+ q(0),
+ ],
+ q(austria) => [
+ q(0015),
+ q(0),
+ ],
+ q(azerbaijan) => [
+ q(0016),
+ q(0),
+ ],
+ q(bahamas) => [
+ q(0017),
+ q(0),
+ ],
+ q(bahamas, the) => [
+ q(0017),
+ q(1),
+ ],
+ q(bahrain) => [
+ q(0018),
+ q(0),
+ ],
+ q(baker island) => [
+ q(0254),
+ q(0),
+ ],
+ q(bangladesh) => [
+ q(0019),
+ q(0),
+ ],
+ q(barbados) => [
+ q(0020),
+ q(0),
+ ],
+ q(bassas da india) => [
+ q(0255),
+ q(0),
+ ],
+ q(belarus) => [
+ q(0021),
+ q(0),
+ ],
+ q(belgium) => [
+ q(0022),
+ q(0),
+ ],
+ q(belize) => [
+ q(0023),
+ q(0),
+ ],
+ q(benin) => [
+ q(0024),
+ q(0),
+ ],
+ q(bermuda) => [
+ q(0025),
+ q(0),
+ ],
+ q(bhutan) => [
+ q(0026),
+ q(0),
+ ],
+ q(bolivia) => [
+ q(0027),
+ q(2),
+ ],
+ q(bolivia (plurinational state of)) => [
+ q(0027),
+ q(1),
+ ],
+ q(bolivia, plurinational state of) => [
+ q(0027),
+ q(0),
+ ],
+ q(bonaire, saint eustatius and saba) => [
+ q(0028),
+ q(0),
+ ],
+ q(bosnia and herzegovina) => [
+ q(0029),
+ q(0),
+ ],
+ q(botswana) => [
+ q(0030),
+ q(0),
+ ],
+ q(bouvet island) => [
+ q(0031),
+ q(0),
+ ],
+ q(brazil) => [
+ q(0032),
+ q(0),
+ ],
+ q(british indian ocean territory) => [
+ q(0033),
+ q(0),
+ ],
+ q(british virgin islands) => [
+ q(0243),
+ q(1),
+ ],
+ q(brunei) => [
+ q(0034),
+ q(1),
+ ],
+ q(brunei darussalam) => [
+ q(0034),
+ q(0),
+ ],
+ q(bulgaria) => [
+ q(0035),
+ q(0),
+ ],
+ q(burkina faso) => [
+ q(0036),
+ q(0),
+ ],
+ q(burma) => [
+ q(0153),
+ q(1),
+ ],
+ q(burundi) => [
+ q(0037),
+ q(0),
+ ],
+ q(cambodia) => [
+ q(0038),
+ q(0),
+ ],
+ q(cameroon) => [
+ q(0039),
+ q(0),
+ ],
+ q(canada) => [
+ q(0040),
+ q(0),
+ ],
+ q(cape verde) => [
+ q(0041),
+ q(0),
+ ],
+ q(cayman islands) => [
+ q(0042),
+ q(0),
+ ],
+ q(central african republic) => [
+ q(0043),
+ q(0),
+ ],
+ q(chad) => [
+ q(0044),
+ q(0),
+ ],
+ q(channel islands) => [
+ q(0250),
+ q(0),
+ ],
+ q(chile) => [
+ q(0045),
+ q(0),
+ ],
+ q(china) => [
+ q(0046),
+ q(0),
+ ],
+ q(china, hong kong special administrative region) => [
+ q(0100),
+ q(1),
+ ],
+ q(china, macao special administrative region) => [
+ q(0131),
+ q(1),
+ ],
+ q(christmas island) => [
+ q(0047),
+ q(0),
+ ],
+ q(clipperton island) => [
+ q(0256),
+ q(0),
+ ],
+ q(cocos (keeling) islands) => [
+ q(0048),
+ q(0),
+ ],
+ q(cocos islands) => [
+ q(0048),
+ q(2),
+ ],
+ q(colombia) => [
+ q(0049),
+ q(0),
+ ],
+ q(comoros) => [
+ q(0050),
+ q(0),
+ ],
+ q(congo) => [
+ q(0051),
+ q(0),
+ ],
+ q(congo (brazzaville)) => [
+ q(0051),
+ q(1),
+ ],
+ q(congo (kinshasa)) => [
+ q(0257),
+ q(0),
+ ],
+ q(congo, democratic republic of the) => [
+ q(0052),
+ q(2),
+ ],
+ q(congo, republic of the) => [
+ q(0051),
+ q(2),
+ ],
+ q(congo, the democratic republic of the) => [
+ q(0052),
+ q(0),
+ ],
+ q(cook islands) => [
+ q(0053),
+ q(0),
+ ],
+ q(coral sea islands) => [
+ q(0258),
+ q(0),
+ ],
+ q(costa rica) => [
+ q(0054),
+ q(0),
+ ],
+ q(cote d'ivoire) => [
+ q(0055),
+ q(0),
+ ],
+ q(croatia) => [
+ q(0056),
+ q(0),
+ ],
+ q(cuba) => [
+ q(0057),
+ q(0),
+ ],
+ q(curacao) => [
+ q(0058),
+ q(0),
+ ],
+ q(cyprus) => [
+ q(0059),
+ q(0),
+ ],
+ q(czech republic) => [
+ q(0060),
+ q(0),
+ ],
+ q(democratic people's republic of korea) => [
+ q(0118),
+ q(1),
+ ],
+ q(democratic republic of the congo) => [
+ q(0052),
+ q(1),
+ ],
+ q(denmark) => [
+ q(0061),
+ q(0),
+ ],
+ q(dhekelia) => [
+ q(0259),
+ q(0),
+ ],
+ q(djibouti) => [
+ q(0062),
+ q(0),
+ ],
+ q(dominica) => [
+ q(0063),
+ q(0),
+ ],
+ q(dominican republic) => [
+ q(0064),
+ q(0),
+ ],
+ q(east timor) => [
+ q(0222),
+ q(1),
+ ],
+ q(ecuador) => [
+ q(0065),
+ q(0),
+ ],
+ q(egypt) => [
+ q(0066),
+ q(0),
+ ],
+ q(el salvador) => [
+ q(0067),
+ q(0),
+ ],
+ q(equatorial guinea) => [
+ q(0068),
+ q(0),
+ ],
+ q(eritrea) => [
+ q(0069),
+ q(0),
+ ],
+ q(estonia) => [
+ q(0070),
+ q(0),
+ ],
+ q(ethiopia) => [
+ q(0071),
+ q(0),
+ ],
+ q(etorofu, habomai, kunashiri, and shikotan islands) => [
+ q(0260),
+ q(0),
+ ],
+ q(europa island) => [
+ q(0261),
+ q(0),
+ ],
+ q(european union) => [
+ q(0292),
+ q(0),
+ ],
+ q(faeroe islands) => [
+ q(0073),
+ q(1),
+ ],
+ q(falkland islands (islas malvinas)) => [
+ q(0072),
+ q(1),
+ ],
+ q(falkland islands (malvinas)) => [
+ q(0072),
+ q(0),
+ ],
+ q(faroe islands) => [
+ q(0073),
+ q(0),
+ ],
+ q(federated states of micronesia) => [
+ q(0145),
+ q(2),
+ ],
+ q(fiji) => [
+ q(0074),
+ q(0),
+ ],
+ q(finland) => [
+ q(0075),
+ q(0),
+ ],
+ q(france) => [
+ q(0076),
+ q(0),
+ ],
+ q(french guiana) => [
+ q(0077),
+ q(0),
+ ],
+ q(french polynesia) => [
+ q(0078),
+ q(0),
+ ],
+ q(french southern and antarctic lands) => [
+ q(0079),
+ q(1),
+ ],
+ q(french southern territories) => [
+ q(0079),
+ q(0),
+ ],
+ q(gabon) => [
+ q(0080),
+ q(0),
+ ],
+ q(gambia) => [
+ q(0081),
+ q(0),
+ ],
+ q(gambia, the) => [
+ q(0081),
+ q(1),
+ ],
+ q(gaza strip) => [
+ q(0262),
+ q(0),
+ ],
+ q(georgia) => [
+ q(0082),
+ q(0),
+ ],
+ q(germany) => [
+ q(0083),
+ q(0),
+ ],
+ q(ghana) => [
+ q(0084),
+ q(0),
+ ],
+ q(gibraltar) => [
+ q(0085),
+ q(0),
+ ],
+ q(glorioso islands) => [
+ q(0263),
+ q(0),
+ ],
+ q(golan heights (israeli-occupied)) => [
+ q(0217),
+ q(2),
+ ],
+ q(great britain) => [
+ q(0235),
+ q(2),
+ ],
+ q(greece) => [
+ q(0086),
+ q(0),
+ ],
+ q(greenland) => [
+ q(0087),
+ q(0),
+ ],
+ q(grenada) => [
+ q(0088),
+ q(0),
+ ],
+ q(guadeloupe) => [
+ q(0089),
+ q(0),
+ ],
+ q(guam) => [
+ q(0090),
+ q(0),
+ ],
+ q(guatemala) => [
+ q(0091),
+ q(0),
+ ],
+ q(guernsey) => [
+ q(0092),
+ q(0),
+ ],
+ q(guinea) => [
+ q(0093),
+ q(0),
+ ],
+ q(guinea-bissau) => [
+ q(0094),
+ q(0),
+ ],
+ q(guyana) => [
+ q(0095),
+ q(0),
+ ],
+ q(haiti) => [
+ q(0096),
+ q(0),
+ ],
+ q(heard island and mcdonald islands) => [
+ q(0264),
+ q(0),
+ ],
+ q(heard island and mcdonald islands) => [
+ q(0097),
+ q(0),
+ ],
+ q(holy see) => [
+ q(0098),
+ q(1),
+ ],
+ q(holy see (vatican city state)) => [
+ q(0098),
+ q(0),
+ ],
+ q(holy see (vatican city)) => [
+ q(0098),
+ q(3),
+ ],
+ q(honduras) => [
+ q(0099),
+ q(0),
+ ],
+ q(hong kong) => [
+ q(0100),
+ q(0),
+ ],
+ q(hong kong s.a.r.) => [
+ q(0100),
+ q(2),
+ ],
+ q(hong kong special administrative region of china) => [
+ q(0100),
+ q(3),
+ ],
+ q(howland island) => [
+ q(0265),
+ q(0),
+ ],
+ q(hungary) => [
+ q(0101),
+ q(0),
+ ],
+ q(iceland) => [
+ q(0102),
+ q(0),
+ ],
+ q(india) => [
+ q(0103),
+ q(0),
+ ],
+ q(indonesia) => [
+ q(0104),
+ q(0),
+ ],
+ q(iran) => [
+ q(0105),
+ q(2),
+ ],
+ q(iran (islamic republic of)) => [
+ q(0105),
+ q(1),
+ ],
+ q(iran, islamic republic of) => [
+ q(0105),
+ q(0),
+ ],
+ q(iraq) => [
+ q(0106),
+ q(0),
+ ],
+ q(ireland) => [
+ q(0107),
+ q(0),
+ ],
+ q(isle of man) => [
+ q(0108),
+ q(0),
+ ],
+ q(israel) => [
+ q(0109),
+ q(0),
+ ],
+ q(italy) => [
+ q(0110),
+ q(0),
+ ],
+ q(jamaica) => [
+ q(0111),
+ q(0),
+ ],
+ q(jan mayen) => [
+ q(0266),
+ q(0),
+ ],
+ q(japan) => [
+ q(0112),
+ q(0),
+ ],
+ q(jarvis island) => [
+ q(0267),
+ q(0),
+ ],
+ q(jersey) => [
+ q(0113),
+ q(0),
+ ],
+ q(johnston atoll) => [
+ q(0268),
+ q(0),
+ ],
+ q(jordan) => [
+ q(0114),
+ q(0),
+ ],
+ q(juan de nova island) => [
+ q(0269),
+ q(0),
+ ],
+ q(kazakhstan) => [
+ q(0115),
+ q(0),
+ ],
+ q(kazakstan) => [
+ q(0115),
+ q(1),
+ ],
+ q(keeling islands) => [
+ q(0048),
+ q(1),
+ ],
+ q(kenya) => [
+ q(0116),
+ q(0),
+ ],
+ q(kingman reef) => [
+ q(0270),
+ q(0),
+ ],
+ q(kiribati) => [
+ q(0117),
+ q(0),
+ ],
+ q(korea, democratic people's republic of) => [
+ q(0118),
+ q(0),
+ ],
+ q(korea, north) => [
+ q(0271),
+ q(0),
+ ],
+ q(korea, republic of) => [
+ q(0119),
+ q(0),
+ ],
+ q(korea, south) => [
+ q(0272),
+ q(0),
+ ],
+ q(kosovo) => [
+ q(0273),
+ q(0),
+ ],
+ q(kuwait) => [
+ q(0120),
+ q(0),
+ ],
+ q(kyrgyzstan) => [
+ q(0121),
+ q(0),
+ ],
+ q(lao people's democratic republic) => [
+ q(0122),
+ q(0),
+ ],
+ q(laos) => [
+ q(0274),
+ q(0),
+ ],
+ q(latvia) => [
+ q(0123),
+ q(0),
+ ],
+ q(lebanon) => [
+ q(0124),
+ q(0),
+ ],
+ q(lesotho) => [
+ q(0125),
+ q(0),
+ ],
+ q(liberia) => [
+ q(0126),
+ q(0),
+ ],
+ q(libya) => [
+ q(0127),
+ q(0),
+ ],
+ q(liechtenstein) => [
+ q(0128),
+ q(0),
+ ],
+ q(lithuania) => [
+ q(0129),
+ q(0),
+ ],
+ q(luxembourg) => [
+ q(0130),
+ q(0),
+ ],
+ q(macao) => [
+ q(0131),
+ q(0),
+ ],
+ q(macao special administrative region of china) => [
+ q(0131),
+ q(5),
+ ],
+ q(macau) => [
+ q(0131),
+ q(2),
+ ],
+ q(macau s.a.r) => [
+ q(0131),
+ q(3),
+ ],
+ q(macau s.a.r.) => [
+ q(0131),
+ q(4),
+ ],
+ q(macedonia) => [
+ q(0132),
+ q(2),
+ ],
+ q(macedonia, former yugoslav republic of) => [
+ q(0132),
+ q(3),
+ ],
+ q(macedonia, the former yugoslav republic of) => [
+ q(0132),
+ q(0),
+ ],
+ q(madagascar) => [
+ q(0133),
+ q(0),
+ ],
+ q(malawi) => [
+ q(0134),
+ q(0),
+ ],
+ q(malaysia) => [
+ q(0135),
+ q(0),
+ ],
+ q(maldives) => [
+ q(0136),
+ q(0),
+ ],
+ q(mali) => [
+ q(0137),
+ q(0),
+ ],
+ q(malta) => [
+ q(0138),
+ q(0),
+ ],
+ q(marshall islands) => [
+ q(0139),
+ q(0),
+ ],
+ q(martinique) => [
+ q(0140),
+ q(0),
+ ],
+ q(mauritania) => [
+ q(0141),
+ q(0),
+ ],
+ q(mauritius) => [
+ q(0142),
+ q(0),
+ ],
+ q(mayotte) => [
+ q(0143),
+ q(0),
+ ],
+ q(mexico) => [
+ q(0144),
+ q(0),
+ ],
+ q(micronesia (federated states of)) => [
+ q(0145),
+ q(1),
+ ],
+ q(micronesia, federated states of) => [
+ q(0145),
+ q(0),
+ ],
+ q(midway islands) => [
+ q(0275),
+ q(0),
+ ],
+ q(moldova) => [
+ q(0276),
+ q(0),
+ ],
+ q(moldova, republic of) => [
+ q(0146),
+ q(0),
+ ],
+ q(monaco) => [
+ q(0147),
+ q(0),
+ ],
+ q(mongolia) => [
+ q(0148),
+ q(0),
+ ],
+ q(montenegro) => [
+ q(0149),
+ q(0),
+ ],
+ q(montserrat) => [
+ q(0150),
+ q(0),
+ ],
+ q(morocco) => [
+ q(0151),
+ q(0),
+ ],
+ q(mozambique) => [
+ q(0152),
+ q(0),
+ ],
+ q(myanmar) => [
+ q(0153),
+ q(0),
+ ],
+ q(namibia) => [
+ q(0154),
+ q(0),
+ ],
+ q(nauru) => [
+ q(0155),
+ q(0),
+ ],
+ q(navassa island) => [
+ q(0277),
+ q(0),
+ ],
+ q(nepal) => [
+ q(0156),
+ q(0),
+ ],
+ q(netherlands) => [
+ q(0157),
+ q(0),
+ ],
+ q(netherlands antilles) => [
+ q(0291),
+ q(0),
+ ],
+ q(new caledonia) => [
+ q(0158),
+ q(0),
+ ],
+ q(new zealand) => [
+ q(0159),
+ q(0),
+ ],
+ q(nicaragua) => [
+ q(0160),
+ q(0),
+ ],
+ q(niger) => [
+ q(0161),
+ q(0),
+ ],
+ q(nigeria) => [
+ q(0162),
+ q(0),
+ ],
+ q(niue) => [
+ q(0163),
+ q(0),
+ ],
+ q(norfolk island) => [
+ q(0164),
+ q(0),
+ ],
+ q(north korea) => [
+ q(0118),
+ q(2),
+ ],
+ q(northern mariana islands) => [
+ q(0165),
+ q(0),
+ ],
+ q(norway) => [
+ q(0166),
+ q(0),
+ ],
+ q(oman) => [
+ q(0167),
+ q(0),
+ ],
+ q(pakistan) => [
+ q(0168),
+ q(0),
+ ],
+ q(palau) => [
+ q(0169),
+ q(0),
+ ],
+ q(palestine, state of) => [
+ q(0170),
+ q(0),
+ ],
+ q(palmyra atoll) => [
+ q(0278),
+ q(0),
+ ],
+ q(panama) => [
+ q(0171),
+ q(0),
+ ],
+ q(papua new guinea) => [
+ q(0172),
+ q(0),
+ ],
+ q(paracel islands) => [
+ q(0279),
+ q(0),
+ ],
+ q(paraguay) => [
+ q(0173),
+ q(0),
+ ],
+ q(peru) => [
+ q(0174),
+ q(0),
+ ],
+ q(philippines) => [
+ q(0175),
+ q(0),
+ ],
+ q(pitcairn) => [
+ q(0176),
+ q(0),
+ ],
+ q(pitcairn island) => [
+ q(0176),
+ q(2),
+ ],
+ q(pitcairn islands) => [
+ q(0176),
+ q(1),
+ ],
+ q(poland) => [
+ q(0177),
+ q(0),
+ ],
+ q(portugal) => [
+ q(0178),
+ q(0),
+ ],
+ q(puerto rico) => [
+ q(0179),
+ q(0),
+ ],
+ q(qatar) => [
+ q(0180),
+ q(0),
+ ],
+ q(republic of korea) => [
+ q(0119),
+ q(1),
+ ],
+ q(republic of moldova) => [
+ q(0146),
+ q(1),
+ ],
+ q(reunion) => [
+ q(0181),
+ q(0),
+ ],
+ q(romania) => [
+ q(0182),
+ q(0),
+ ],
+ q(russia) => [
+ q(0280),
+ q(0),
+ ],
+ q(russian federation) => [
+ q(0183),
+ q(0),
+ ],
+ q(rwanda) => [
+ q(0184),
+ q(0),
+ ],
+ q(saint barthelemy) => [
+ q(0185),
+ q(0),
+ ],
+ q(saint helena) => [
+ q(0186),
+ q(1),
+ ],
+ q(saint helena, ascension and tristan da cunha) => [
+ q(0186),
+ q(0),
+ ],
+ q(saint helena, ascension, and tristan da cunha) => [
+ q(0281),
+ q(0),
+ ],
+ q(saint kitts and nevis) => [
+ q(0187),
+ q(0),
+ ],
+ q(saint lucia) => [
+ q(0188),
+ q(0),
+ ],
+ q(saint martin) => [
+ q(0189),
+ q(2),
+ ],
+ q(saint martin (french part)) => [
+ q(0189),
+ q(0),
+ ],
+ q(saint pierre and miquelon) => [
+ q(0190),
+ q(0),
+ ],
+ q(saint vincent and the grenadines) => [
+ q(0191),
+ q(0),
+ ],
+ q(saint-barthelemy) => [
+ q(0185),
+ q(1),
+ ],
+ q(saint-martin) => [
+ q(0189),
+ q(3),
+ ],
+ q(saint-martin (french part)) => [
+ q(0189),
+ q(1),
+ ],
+ q(samoa) => [
+ q(0192),
+ q(0),
+ ],
+ q(san marino) => [
+ q(0193),
+ q(0),
+ ],
+ q(sao tome and principe) => [
+ q(0194),
+ q(0),
+ ],
+ q(sark) => [
+ q(0251),
+ q(0),
+ ],
+ q(saudi arabia) => [
+ q(0195),
+ q(0),
+ ],
+ q(senegal) => [
+ q(0196),
+ q(0),
+ ],
+ q(serbia) => [
+ q(0197),
+ q(0),
+ ],
+ q(seychelles) => [
+ q(0198),
+ q(0),
+ ],
+ q(sierra leone) => [
+ q(0199),
+ q(0),
+ ],
+ q(singapore) => [
+ q(0200),
+ q(0),
+ ],
+ q(sint maarten) => [
+ q(0282),
+ q(0),
+ ],
+ q(sint maarten (dutch part)) => [
+ q(0201),
+ q(0),
+ ],
+ q(slovakia) => [
+ q(0202),
+ q(0),
+ ],
+ q(slovenia) => [
+ q(0203),
+ q(0),
+ ],
+ q(solomon islands) => [
+ q(0204),
+ q(0),
+ ],
+ q(somalia) => [
+ q(0205),
+ q(0),
+ ],
+ q(south africa) => [
+ q(0206),
+ q(0),
+ ],
+ q(south georgia and south sandwich islands) => [
+ q(0283),
+ q(0),
+ ],
+ q(south georgia and the islands) => [
+ q(0207),
+ q(1),
+ ],
+ q(south georgia and the south sandwich islands) => [
+ q(0207),
+ q(0),
+ ],
+ q(south korea) => [
+ q(0119),
+ q(2),
+ ],
+ q(south sudan) => [
+ q(0208),
+ q(0),
+ ],
+ q(spain) => [
+ q(0209),
+ q(0),
+ ],
+ q(spratly islands) => [
+ q(0284),
+ q(0),
+ ],
+ q(sri lanka) => [
+ q(0210),
+ q(0),
+ ],
+ q(state of palestine) => [
+ q(0170),
+ q(1),
+ ],
+ q(sudan) => [
+ q(0211),
+ q(0),
+ ],
+ q(suriname) => [
+ q(0212),
+ q(0),
+ ],
+ q(svalbard) => [
+ q(0285),
+ q(0),
+ ],
+ q(svalbard and jan mayen) => [
+ q(0213),
+ q(0),
+ ],
+ q(svalbard and jan mayen islands) => [
+ q(0213),
+ q(1),
+ ],
+ q(swaziland) => [
+ q(0214),
+ q(0),
+ ],
+ q(sweden) => [
+ q(0215),
+ q(0),
+ ],
+ q(switzerland) => [
+ q(0216),
+ q(0),
+ ],
+ q(syria) => [
+ q(0217),
+ q(1),
+ ],
+ q(syrian arab republic) => [
+ q(0217),
+ q(0),
+ ],
+ q(taiwan) => [
+ q(0218),
+ q(1),
+ ],
+ q(taiwan, province of china) => [
+ q(0218),
+ q(0),
+ ],
+ q(tajikistan) => [
+ q(0219),
+ q(0),
+ ],
+ q(tanzania) => [
+ q(0286),
+ q(0),
+ ],
+ q(tanzania, united republic of) => [
+ q(0220),
+ q(0),
+ ],
+ q(thailand) => [
+ q(0221),
+ q(0),
+ ],
+ q(the bahamas) => [
+ q(0017),
+ q(2),
+ ],
+ q(the democratic republic of the congo) => [
+ q(0052),
+ q(3),
+ ],
+ q(the former yugoslav republic of macedonia) => [
+ q(0132),
+ q(1),
+ ],
+ q(the republic of the congo) => [
+ q(0051),
+ q(3),
+ ],
+ q(timor-leste) => [
+ q(0222),
+ q(0),
+ ],
+ q(togo) => [
+ q(0223),
+ q(0),
+ ],
+ q(tokelau) => [
+ q(0224),
+ q(0),
+ ],
+ q(tonga) => [
+ q(0225),
+ q(0),
+ ],
+ q(trinidad and tobago) => [
+ q(0226),
+ q(0),
+ ],
+ q(tromelin island) => [
+ q(0287),
+ q(0),
+ ],
+ q(tunisia) => [
+ q(0227),
+ q(0),
+ ],
+ q(turkey) => [
+ q(0228),
+ q(0),
+ ],
+ q(turkmenistan) => [
+ q(0229),
+ q(0),
+ ],
+ q(turks and caicos islands) => [
+ q(0230),
+ q(0),
+ ],
+ q(tuvalu) => [
+ q(0231),
+ q(0),
+ ],
+ q(uganda) => [
+ q(0232),
+ q(0),
+ ],
+ q(uk) => [
+ q(0235),
+ q(3),
+ ],
+ q(ukraine) => [
+ q(0233),
+ q(0),
+ ],
+ q(united arab emirates) => [
+ q(0234),
+ q(0),
+ ],
+ q(united kingdom) => [
+ q(0235),
+ q(0),
+ ],
+ q(united kingdom of great britain and northern ireland) => [
+ q(0235),
+ q(1),
+ ],
+ q(united republic of tanzania) => [
+ q(0220),
+ q(1),
+ ],
+ q(united states) => [
+ q(0236),
+ q(0),
+ ],
+ q(united states minor outlying islands) => [
+ q(0237),
+ q(0),
+ ],
+ q(united states of america) => [
+ q(0236),
+ q(1),
+ ],
+ q(united states virgin islands) => [
+ q(0244),
+ q(1),
+ ],
+ q(uruguay) => [
+ q(0238),
+ q(0),
+ ],
+ q(us) => [
+ q(0236),
+ q(2),
+ ],
+ q(usa) => [
+ q(0236),
+ q(3),
+ ],
+ q(ussr) => [
+ q(0293),
+ q(0),
+ ],
+ q(uzbekistan) => [
+ q(0239),
+ q(0),
+ ],
+ q(vanuatu) => [
+ q(0240),
+ q(0),
+ ],
+ q(vatican city) => [
+ q(0098),
+ q(2),
+ ],
+ q(venezuela) => [
+ q(0241),
+ q(2),
+ ],
+ q(venezuela (bolivarian republic of)) => [
+ q(0241),
+ q(1),
+ ],
+ q(venezuela, bolivarian republic of) => [
+ q(0241),
+ q(0),
+ ],
+ q(viet nam) => [
+ q(0242),
+ q(0),
+ ],
+ q(vietnam) => [
+ q(0242),
+ q(1),
+ ],
+ q(virgin islands) => [
+ q(0244),
+ q(3),
+ ],
+ q(virgin islands (uk)) => [
+ q(0243),
+ q(2),
+ ],
+ q(virgin islands (us)) => [
+ q(0244),
+ q(2),
+ ],
+ q(virgin islands, british) => [
+ q(0243),
+ q(0),
+ ],
+ q(virgin islands, u.s.) => [
+ q(0244),
+ q(0),
+ ],
+ q(wake island) => [
+ q(0288),
+ q(0),
+ ],
+ q(wallis and futuna) => [
+ q(0245),
+ q(0),
+ ],
+ q(wallis and futuna islands) => [
+ q(0245),
+ q(1),
+ ],
+ q(west bank) => [
+ q(0289),
+ q(0),
+ ],
+ q(western sahara) => [
+ q(0246),
+ q(0),
+ ],
+ q(yemen) => [
+ q(0247),
+ q(0),
+ ],
+ q(zambia) => [
+ q(0248),
+ q(0),
+ ],
+ q(zimbabwe) => [
+ q(0249),
+ q(0),
+ ],
+};
+
+$Locale::Codes::Data{'country'}{'code2id'} = {
+ q(alpha-2) => {
+ q(ad) => [
+ q(0006),
+ q(0),
+ ],
+ q(ae) => [
+ q(0234),
+ q(0),
+ ],
+ q(af) => [
+ q(0001),
+ q(0),
+ ],
+ q(ag) => [
+ q(0010),
+ q(0),
+ ],
+ q(ai) => [
+ q(0008),
+ q(0),
+ ],
+ q(al) => [
+ q(0003),
+ q(0),
+ ],
+ q(am) => [
+ q(0012),
+ q(0),
+ ],
+ q(ao) => [
+ q(0007),
+ q(0),
+ ],
+ q(aq) => [
+ q(0009),
+ q(0),
+ ],
+ q(ar) => [
+ q(0011),
+ q(0),
+ ],
+ q(as) => [
+ q(0005),
+ q(0),
+ ],
+ q(at) => [
+ q(0015),
+ q(0),
+ ],
+ q(au) => [
+ q(0014),
+ q(0),
+ ],
+ q(aw) => [
+ q(0013),
+ q(0),
+ ],
+ q(ax) => [
+ q(0002),
+ q(0),
+ ],
+ q(az) => [
+ q(0016),
+ q(0),
+ ],
+ q(ba) => [
+ q(0029),
+ q(0),
+ ],
+ q(bb) => [
+ q(0020),
+ q(0),
+ ],
+ q(bd) => [
+ q(0019),
+ q(0),
+ ],
+ q(be) => [
+ q(0022),
+ q(0),
+ ],
+ q(bf) => [
+ q(0036),
+ q(0),
+ ],
+ q(bg) => [
+ q(0035),
+ q(0),
+ ],
+ q(bh) => [
+ q(0018),
+ q(0),
+ ],
+ q(bi) => [
+ q(0037),
+ q(0),
+ ],
+ q(bj) => [
+ q(0024),
+ q(0),
+ ],
+ q(bl) => [
+ q(0185),
+ q(0),
+ ],
+ q(bm) => [
+ q(0025),
+ q(0),
+ ],
+ q(bn) => [
+ q(0034),
+ q(0),
+ ],
+ q(bo) => [
+ q(0027),
+ q(0),
+ ],
+ q(bq) => [
+ q(0028),
+ q(0),
+ ],
+ q(br) => [
+ q(0032),
+ q(0),
+ ],
+ q(bs) => [
+ q(0017),
+ q(0),
+ ],
+ q(bt) => [
+ q(0026),
+ q(0),
+ ],
+ q(bv) => [
+ q(0031),
+ q(0),
+ ],
+ q(bw) => [
+ q(0030),
+ q(0),
+ ],
+ q(by) => [
+ q(0021),
+ q(0),
+ ],
+ q(bz) => [
+ q(0023),
+ q(0),
+ ],
+ q(ca) => [
+ q(0040),
+ q(0),
+ ],
+ q(cc) => [
+ q(0048),
+ q(0),
+ ],
+ q(cd) => [
+ q(0052),
+ q(0),
+ ],
+ q(cf) => [
+ q(0043),
+ q(0),
+ ],
+ q(cg) => [
+ q(0051),
+ q(0),
+ ],
+ q(ch) => [
+ q(0216),
+ q(0),
+ ],
+ q(ci) => [
+ q(0055),
+ q(0),
+ ],
+ q(ck) => [
+ q(0053),
+ q(0),
+ ],
+ q(cl) => [
+ q(0045),
+ q(0),
+ ],
+ q(cm) => [
+ q(0039),
+ q(0),
+ ],
+ q(cn) => [
+ q(0046),
+ q(0),
+ ],
+ q(co) => [
+ q(0049),
+ q(0),
+ ],
+ q(cr) => [
+ q(0054),
+ q(0),
+ ],
+ q(cu) => [
+ q(0057),
+ q(0),
+ ],
+ q(cv) => [
+ q(0041),
+ q(0),
+ ],
+ q(cw) => [
+ q(0058),
+ q(0),
+ ],
+ q(cx) => [
+ q(0047),
+ q(0),
+ ],
+ q(cy) => [
+ q(0059),
+ q(0),
+ ],
+ q(cz) => [
+ q(0060),
+ q(0),
+ ],
+ q(de) => [
+ q(0083),
+ q(0),
+ ],
+ q(dj) => [
+ q(0062),
+ q(0),
+ ],
+ q(dk) => [
+ q(0061),
+ q(0),
+ ],
+ q(dm) => [
+ q(0063),
+ q(0),
+ ],
+ q(do) => [
+ q(0064),
+ q(0),
+ ],
+ q(dz) => [
+ q(0004),
+ q(0),
+ ],
+ q(ec) => [
+ q(0065),
+ q(0),
+ ],
+ q(ee) => [
+ q(0070),
+ q(0),
+ ],
+ q(eg) => [
+ q(0066),
+ q(0),
+ ],
+ q(eh) => [
+ q(0246),
+ q(0),
+ ],
+ q(er) => [
+ q(0069),
+ q(0),
+ ],
+ q(es) => [
+ q(0209),
+ q(0),
+ ],
+ q(et) => [
+ q(0071),
+ q(0),
+ ],
+ q(fi) => [
+ q(0075),
+ q(0),
+ ],
+ q(fj) => [
+ q(0074),
+ q(0),
+ ],
+ q(fk) => [
+ q(0072),
+ q(0),
+ ],
+ q(fm) => [
+ q(0145),
+ q(0),
+ ],
+ q(fo) => [
+ q(0073),
+ q(0),
+ ],
+ q(fr) => [
+ q(0076),
+ q(0),
+ ],
+ q(ga) => [
+ q(0080),
+ q(0),
+ ],
+ q(gb) => [
+ q(0235),
+ q(0),
+ ],
+ q(gd) => [
+ q(0088),
+ q(0),
+ ],
+ q(ge) => [
+ q(0082),
+ q(0),
+ ],
+ q(gf) => [
+ q(0077),
+ q(0),
+ ],
+ q(gg) => [
+ q(0092),
+ q(0),
+ ],
+ q(gh) => [
+ q(0084),
+ q(0),
+ ],
+ q(gi) => [
+ q(0085),
+ q(0),
+ ],
+ q(gl) => [
+ q(0087),
+ q(0),
+ ],
+ q(gm) => [
+ q(0081),
+ q(0),
+ ],
+ q(gn) => [
+ q(0093),
+ q(0),
+ ],
+ q(gp) => [
+ q(0089),
+ q(0),
+ ],
+ q(gq) => [
+ q(0068),
+ q(0),
+ ],
+ q(gr) => [
+ q(0086),
+ q(0),
+ ],
+ q(gs) => [
+ q(0207),
+ q(0),
+ ],
+ q(gt) => [
+ q(0091),
+ q(0),
+ ],
+ q(gu) => [
+ q(0090),
+ q(0),
+ ],
+ q(gw) => [
+ q(0094),
+ q(0),
+ ],
+ q(gy) => [
+ q(0095),
+ q(0),
+ ],
+ q(hk) => [
+ q(0100),
+ q(0),
+ ],
+ q(hm) => [
+ q(0097),
+ q(0),
+ ],
+ q(hn) => [
+ q(0099),
+ q(0),
+ ],
+ q(hr) => [
+ q(0056),
+ q(0),
+ ],
+ q(ht) => [
+ q(0096),
+ q(0),
+ ],
+ q(hu) => [
+ q(0101),
+ q(0),
+ ],
+ q(id) => [
+ q(0104),
+ q(0),
+ ],
+ q(ie) => [
+ q(0107),
+ q(0),
+ ],
+ q(il) => [
+ q(0109),
+ q(0),
+ ],
+ q(im) => [
+ q(0108),
+ q(0),
+ ],
+ q(in) => [
+ q(0103),
+ q(0),
+ ],
+ q(io) => [
+ q(0033),
+ q(0),
+ ],
+ q(iq) => [
+ q(0106),
+ q(0),
+ ],
+ q(ir) => [
+ q(0105),
+ q(0),
+ ],
+ q(is) => [
+ q(0102),
+ q(0),
+ ],
+ q(it) => [
+ q(0110),
+ q(0),
+ ],
+ q(je) => [
+ q(0113),
+ q(0),
+ ],
+ q(jm) => [
+ q(0111),
+ q(0),
+ ],
+ q(jo) => [
+ q(0114),
+ q(0),
+ ],
+ q(jp) => [
+ q(0112),
+ q(0),
+ ],
+ q(ke) => [
+ q(0116),
+ q(0),
+ ],
+ q(kg) => [
+ q(0121),
+ q(0),
+ ],
+ q(kh) => [
+ q(0038),
+ q(0),
+ ],
+ q(ki) => [
+ q(0117),
+ q(0),
+ ],
+ q(km) => [
+ q(0050),
+ q(0),
+ ],
+ q(kn) => [
+ q(0187),
+ q(0),
+ ],
+ q(kp) => [
+ q(0118),
+ q(0),
+ ],
+ q(kr) => [
+ q(0119),
+ q(0),
+ ],
+ q(kw) => [
+ q(0120),
+ q(0),
+ ],
+ q(ky) => [
+ q(0042),
+ q(0),
+ ],
+ q(kz) => [
+ q(0115),
+ q(0),
+ ],
+ q(la) => [
+ q(0122),
+ q(0),
+ ],
+ q(lb) => [
+ q(0124),
+ q(0),
+ ],
+ q(lc) => [
+ q(0188),
+ q(0),
+ ],
+ q(li) => [
+ q(0128),
+ q(0),
+ ],
+ q(lk) => [
+ q(0210),
+ q(0),
+ ],
+ q(lr) => [
+ q(0126),
+ q(0),
+ ],
+ q(ls) => [
+ q(0125),
+ q(0),
+ ],
+ q(lt) => [
+ q(0129),
+ q(0),
+ ],
+ q(lu) => [
+ q(0130),
+ q(0),
+ ],
+ q(lv) => [
+ q(0123),
+ q(0),
+ ],
+ q(ly) => [
+ q(0127),
+ q(0),
+ ],
+ q(ma) => [
+ q(0151),
+ q(0),
+ ],
+ q(mc) => [
+ q(0147),
+ q(0),
+ ],
+ q(md) => [
+ q(0146),
+ q(0),
+ ],
+ q(me) => [
+ q(0149),
+ q(0),
+ ],
+ q(mf) => [
+ q(0189),
+ q(0),
+ ],
+ q(mg) => [
+ q(0133),
+ q(0),
+ ],
+ q(mh) => [
+ q(0139),
+ q(0),
+ ],
+ q(mk) => [
+ q(0132),
+ q(0),
+ ],
+ q(ml) => [
+ q(0137),
+ q(0),
+ ],
+ q(mm) => [
+ q(0153),
+ q(0),
+ ],
+ q(mn) => [
+ q(0148),
+ q(0),
+ ],
+ q(mo) => [
+ q(0131),
+ q(0),
+ ],
+ q(mp) => [
+ q(0165),
+ q(0),
+ ],
+ q(mq) => [
+ q(0140),
+ q(0),
+ ],
+ q(mr) => [
+ q(0141),
+ q(0),
+ ],
+ q(ms) => [
+ q(0150),
+ q(0),
+ ],
+ q(mt) => [
+ q(0138),
+ q(0),
+ ],
+ q(mu) => [
+ q(0142),
+ q(0),
+ ],
+ q(mv) => [
+ q(0136),
+ q(0),
+ ],
+ q(mw) => [
+ q(0134),
+ q(0),
+ ],
+ q(mx) => [
+ q(0144),
+ q(0),
+ ],
+ q(my) => [
+ q(0135),
+ q(0),
+ ],
+ q(mz) => [
+ q(0152),
+ q(0),
+ ],
+ q(na) => [
+ q(0154),
+ q(0),
+ ],
+ q(nc) => [
+ q(0158),
+ q(0),
+ ],
+ q(ne) => [
+ q(0161),
+ q(0),
+ ],
+ q(nf) => [
+ q(0164),
+ q(0),
+ ],
+ q(ng) => [
+ q(0162),
+ q(0),
+ ],
+ q(ni) => [
+ q(0160),
+ q(0),
+ ],
+ q(nl) => [
+ q(0157),
+ q(0),
+ ],
+ q(no) => [
+ q(0166),
+ q(0),
+ ],
+ q(np) => [
+ q(0156),
+ q(0),
+ ],
+ q(nr) => [
+ q(0155),
+ q(0),
+ ],
+ q(nu) => [
+ q(0163),
+ q(0),
+ ],
+ q(nz) => [
+ q(0159),
+ q(0),
+ ],
+ q(om) => [
+ q(0167),
+ q(0),
+ ],
+ q(pa) => [
+ q(0171),
+ q(0),
+ ],
+ q(pe) => [
+ q(0174),
+ q(0),
+ ],
+ q(pf) => [
+ q(0078),
+ q(0),
+ ],
+ q(pg) => [
+ q(0172),
+ q(0),
+ ],
+ q(ph) => [
+ q(0175),
+ q(0),
+ ],
+ q(pk) => [
+ q(0168),
+ q(0),
+ ],
+ q(pl) => [
+ q(0177),
+ q(0),
+ ],
+ q(pm) => [
+ q(0190),
+ q(0),
+ ],
+ q(pn) => [
+ q(0176),
+ q(0),
+ ],
+ q(pr) => [
+ q(0179),
+ q(0),
+ ],
+ q(ps) => [
+ q(0170),
+ q(0),
+ ],
+ q(pt) => [
+ q(0178),
+ q(0),
+ ],
+ q(pw) => [
+ q(0169),
+ q(0),
+ ],
+ q(py) => [
+ q(0173),
+ q(0),
+ ],
+ q(qa) => [
+ q(0180),
+ q(0),
+ ],
+ q(re) => [
+ q(0181),
+ q(0),
+ ],
+ q(ro) => [
+ q(0182),
+ q(0),
+ ],
+ q(rs) => [
+ q(0197),
+ q(0),
+ ],
+ q(ru) => [
+ q(0183),
+ q(0),
+ ],
+ q(rw) => [
+ q(0184),
+ q(0),
+ ],
+ q(sa) => [
+ q(0195),
+ q(0),
+ ],
+ q(sb) => [
+ q(0204),
+ q(0),
+ ],
+ q(sc) => [
+ q(0198),
+ q(0),
+ ],
+ q(sd) => [
+ q(0211),
+ q(0),
+ ],
+ q(se) => [
+ q(0215),
+ q(0),
+ ],
+ q(sg) => [
+ q(0200),
+ q(0),
+ ],
+ q(sh) => [
+ q(0186),
+ q(0),
+ ],
+ q(si) => [
+ q(0203),
+ q(0),
+ ],
+ q(sj) => [
+ q(0213),
+ q(0),
+ ],
+ q(sk) => [
+ q(0202),
+ q(0),
+ ],
+ q(sl) => [
+ q(0199),
+ q(0),
+ ],
+ q(sm) => [
+ q(0193),
+ q(0),
+ ],
+ q(sn) => [
+ q(0196),
+ q(0),
+ ],
+ q(so) => [
+ q(0205),
+ q(0),
+ ],
+ q(sr) => [
+ q(0212),
+ q(0),
+ ],
+ q(ss) => [
+ q(0208),
+ q(0),
+ ],
+ q(st) => [
+ q(0194),
+ q(0),
+ ],
+ q(sv) => [
+ q(0067),
+ q(0),
+ ],
+ q(sx) => [
+ q(0201),
+ q(0),
+ ],
+ q(sy) => [
+ q(0217),
+ q(0),
+ ],
+ q(sz) => [
+ q(0214),
+ q(0),
+ ],
+ q(tc) => [
+ q(0230),
+ q(0),
+ ],
+ q(td) => [
+ q(0044),
+ q(0),
+ ],
+ q(tf) => [
+ q(0079),
+ q(0),
+ ],
+ q(tg) => [
+ q(0223),
+ q(0),
+ ],
+ q(th) => [
+ q(0221),
+ q(0),
+ ],
+ q(tj) => [
+ q(0219),
+ q(0),
+ ],
+ q(tk) => [
+ q(0224),
+ q(0),
+ ],
+ q(tl) => [
+ q(0222),
+ q(0),
+ ],
+ q(tm) => [
+ q(0229),
+ q(0),
+ ],
+ q(tn) => [
+ q(0227),
+ q(0),
+ ],
+ q(to) => [
+ q(0225),
+ q(0),
+ ],
+ q(tr) => [
+ q(0228),
+ q(0),
+ ],
+ q(tt) => [
+ q(0226),
+ q(0),
+ ],
+ q(tv) => [
+ q(0231),
+ q(0),
+ ],
+ q(tw) => [
+ q(0218),
+ q(0),
+ ],
+ q(tz) => [
+ q(0220),
+ q(0),
+ ],
+ q(ua) => [
+ q(0233),
+ q(0),
+ ],
+ q(ug) => [
+ q(0232),
+ q(0),
+ ],
+ q(um) => [
+ q(0237),
+ q(0),
+ ],
+ q(us) => [
+ q(0236),
+ q(0),
+ ],
+ q(uy) => [
+ q(0238),
+ q(0),
+ ],
+ q(uz) => [
+ q(0239),
+ q(0),
+ ],
+ q(va) => [
+ q(0098),
+ q(0),
+ ],
+ q(vc) => [
+ q(0191),
+ q(0),
+ ],
+ q(ve) => [
+ q(0241),
+ q(0),
+ ],
+ q(vg) => [
+ q(0243),
+ q(0),
+ ],
+ q(vi) => [
+ q(0244),
+ q(0),
+ ],
+ q(vn) => [
+ q(0242),
+ q(0),
+ ],
+ q(vu) => [
+ q(0240),
+ q(0),
+ ],
+ q(wf) => [
+ q(0245),
+ q(0),
+ ],
+ q(ws) => [
+ q(0192),
+ q(0),
+ ],
+ q(ye) => [
+ q(0247),
+ q(0),
+ ],
+ q(yt) => [
+ q(0143),
+ q(0),
+ ],
+ q(za) => [
+ q(0206),
+ q(0),
+ ],
+ q(zm) => [
+ q(0248),
+ q(0),
+ ],
+ q(zw) => [
+ q(0249),
+ q(0),
+ ],
+ },
+ q(alpha-3) => {
+ q(abw) => [
+ q(0013),
+ q(0),
+ ],
+ q(afg) => [
+ q(0001),
+ q(0),
+ ],
+ q(ago) => [
+ q(0007),
+ q(0),
+ ],
+ q(aia) => [
+ q(0008),
+ q(0),
+ ],
+ q(ala) => [
+ q(0002),
+ q(0),
+ ],
+ q(alb) => [
+ q(0003),
+ q(0),
+ ],
+ q(and) => [
+ q(0006),
+ q(0),
+ ],
+ q(are) => [
+ q(0234),
+ q(0),
+ ],
+ q(arg) => [
+ q(0011),
+ q(0),
+ ],
+ q(arm) => [
+ q(0012),
+ q(0),
+ ],
+ q(asm) => [
+ q(0005),
+ q(0),
+ ],
+ q(atg) => [
+ q(0010),
+ q(0),
+ ],
+ q(aus) => [
+ q(0014),
+ q(0),
+ ],
+ q(aut) => [
+ q(0015),
+ q(0),
+ ],
+ q(aze) => [
+ q(0016),
+ q(0),
+ ],
+ q(bdi) => [
+ q(0037),
+ q(0),
+ ],
+ q(bel) => [
+ q(0022),
+ q(0),
+ ],
+ q(ben) => [
+ q(0024),
+ q(0),
+ ],
+ q(bes) => [
+ q(0028),
+ q(0),
+ ],
+ q(bfa) => [
+ q(0036),
+ q(0),
+ ],
+ q(bgd) => [
+ q(0019),
+ q(0),
+ ],
+ q(bgr) => [
+ q(0035),
+ q(0),
+ ],
+ q(bhr) => [
+ q(0018),
+ q(0),
+ ],
+ q(bhs) => [
+ q(0017),
+ q(0),
+ ],
+ q(bih) => [
+ q(0029),
+ q(0),
+ ],
+ q(blm) => [
+ q(0185),
+ q(1),
+ ],
+ q(blr) => [
+ q(0021),
+ q(0),
+ ],
+ q(blz) => [
+ q(0023),
+ q(0),
+ ],
+ q(bmu) => [
+ q(0025),
+ q(0),
+ ],
+ q(bol) => [
+ q(0027),
+ q(1),
+ ],
+ q(bra) => [
+ q(0032),
+ q(0),
+ ],
+ q(brb) => [
+ q(0020),
+ q(0),
+ ],
+ q(brn) => [
+ q(0034),
+ q(0),
+ ],
+ q(btn) => [
+ q(0026),
+ q(0),
+ ],
+ q(bwa) => [
+ q(0030),
+ q(0),
+ ],
+ q(caf) => [
+ q(0043),
+ q(0),
+ ],
+ q(can) => [
+ q(0040),
+ q(0),
+ ],
+ q(che) => [
+ q(0216),
+ q(0),
+ ],
+ q(chl) => [
+ q(0045),
+ q(0),
+ ],
+ q(chn) => [
+ q(0046),
+ q(0),
+ ],
+ q(civ) => [
+ q(0055),
+ q(0),
+ ],
+ q(cmr) => [
+ q(0039),
+ q(0),
+ ],
+ q(cod) => [
+ q(0052),
+ q(1),
+ ],
+ q(cog) => [
+ q(0051),
+ q(0),
+ ],
+ q(cok) => [
+ q(0053),
+ q(0),
+ ],
+ q(col) => [
+ q(0049),
+ q(0),
+ ],
+ q(com) => [
+ q(0050),
+ q(0),
+ ],
+ q(cpv) => [
+ q(0041),
+ q(0),
+ ],
+ q(cri) => [
+ q(0054),
+ q(0),
+ ],
+ q(cub) => [
+ q(0057),
+ q(0),
+ ],
+ q(cuw) => [
+ q(0058),
+ q(0),
+ ],
+ q(cym) => [
+ q(0042),
+ q(0),
+ ],
+ q(cyp) => [
+ q(0059),
+ q(0),
+ ],
+ q(cze) => [
+ q(0060),
+ q(0),
+ ],
+ q(deu) => [
+ q(0083),
+ q(0),
+ ],
+ q(dji) => [
+ q(0062),
+ q(0),
+ ],
+ q(dma) => [
+ q(0063),
+ q(0),
+ ],
+ q(dnk) => [
+ q(0061),
+ q(0),
+ ],
+ q(dom) => [
+ q(0064),
+ q(0),
+ ],
+ q(dza) => [
+ q(0004),
+ q(0),
+ ],
+ q(ecu) => [
+ q(0065),
+ q(0),
+ ],
+ q(egy) => [
+ q(0066),
+ q(0),
+ ],
+ q(eri) => [
+ q(0069),
+ q(0),
+ ],
+ q(esh) => [
+ q(0246),
+ q(0),
+ ],
+ q(esp) => [
+ q(0209),
+ q(0),
+ ],
+ q(est) => [
+ q(0070),
+ q(0),
+ ],
+ q(eth) => [
+ q(0071),
+ q(0),
+ ],
+ q(fin) => [
+ q(0075),
+ q(0),
+ ],
+ q(fji) => [
+ q(0074),
+ q(0),
+ ],
+ q(flk) => [
+ q(0072),
+ q(0),
+ ],
+ q(fra) => [
+ q(0076),
+ q(0),
+ ],
+ q(fro) => [
+ q(0073),
+ q(1),
+ ],
+ q(fsm) => [
+ q(0145),
+ q(1),
+ ],
+ q(gab) => [
+ q(0080),
+ q(0),
+ ],
+ q(gbr) => [
+ q(0235),
+ q(1),
+ ],
+ q(geo) => [
+ q(0082),
+ q(0),
+ ],
+ q(ggy) => [
+ q(0092),
+ q(0),
+ ],
+ q(gha) => [
+ q(0084),
+ q(0),
+ ],
+ q(gib) => [
+ q(0085),
+ q(0),
+ ],
+ q(gin) => [
+ q(0093),
+ q(0),
+ ],
+ q(glp) => [
+ q(0089),
+ q(0),
+ ],
+ q(gmb) => [
+ q(0081),
+ q(0),
+ ],
+ q(gnb) => [
+ q(0094),
+ q(0),
+ ],
+ q(gnq) => [
+ q(0068),
+ q(0),
+ ],
+ q(grc) => [
+ q(0086),
+ q(0),
+ ],
+ q(grd) => [
+ q(0088),
+ q(0),
+ ],
+ q(grl) => [
+ q(0087),
+ q(0),
+ ],
+ q(gtm) => [
+ q(0091),
+ q(0),
+ ],
+ q(guf) => [
+ q(0077),
+ q(0),
+ ],
+ q(gum) => [
+ q(0090),
+ q(0),
+ ],
+ q(guy) => [
+ q(0095),
+ q(0),
+ ],
+ q(hkg) => [
+ q(0100),
+ q(1),
+ ],
+ q(hnd) => [
+ q(0099),
+ q(0),
+ ],
+ q(hrv) => [
+ q(0056),
+ q(0),
+ ],
+ q(hti) => [
+ q(0096),
+ q(0),
+ ],
+ q(hun) => [
+ q(0101),
+ q(0),
+ ],
+ q(idn) => [
+ q(0104),
+ q(0),
+ ],
+ q(imn) => [
+ q(0108),
+ q(0),
+ ],
+ q(ind) => [
+ q(0103),
+ q(0),
+ ],
+ q(irl) => [
+ q(0107),
+ q(0),
+ ],
+ q(irn) => [
+ q(0105),
+ q(1),
+ ],
+ q(irq) => [
+ q(0106),
+ q(0),
+ ],
+ q(isl) => [
+ q(0102),
+ q(0),
+ ],
+ q(isr) => [
+ q(0109),
+ q(0),
+ ],
+ q(ita) => [
+ q(0110),
+ q(0),
+ ],
+ q(jam) => [
+ q(0111),
+ q(0),
+ ],
+ q(jey) => [
+ q(0113),
+ q(0),
+ ],
+ q(jor) => [
+ q(0114),
+ q(0),
+ ],
+ q(jpn) => [
+ q(0112),
+ q(0),
+ ],
+ q(kaz) => [
+ q(0115),
+ q(0),
+ ],
+ q(ken) => [
+ q(0116),
+ q(0),
+ ],
+ q(kgz) => [
+ q(0121),
+ q(0),
+ ],
+ q(khm) => [
+ q(0038),
+ q(0),
+ ],
+ q(kir) => [
+ q(0117),
+ q(0),
+ ],
+ q(kna) => [
+ q(0187),
+ q(0),
+ ],
+ q(kor) => [
+ q(0119),
+ q(1),
+ ],
+ q(kwt) => [
+ q(0120),
+ q(0),
+ ],
+ q(lao) => [
+ q(0122),
+ q(0),
+ ],
+ q(lbn) => [
+ q(0124),
+ q(0),
+ ],
+ q(lbr) => [
+ q(0126),
+ q(0),
+ ],
+ q(lby) => [
+ q(0127),
+ q(0),
+ ],
+ q(lca) => [
+ q(0188),
+ q(0),
+ ],
+ q(lie) => [
+ q(0128),
+ q(0),
+ ],
+ q(lka) => [
+ q(0210),
+ q(0),
+ ],
+ q(lso) => [
+ q(0125),
+ q(0),
+ ],
+ q(ltu) => [
+ q(0129),
+ q(0),
+ ],
+ q(lux) => [
+ q(0130),
+ q(0),
+ ],
+ q(lva) => [
+ q(0123),
+ q(0),
+ ],
+ q(mac) => [
+ q(0131),
+ q(1),
+ ],
+ q(maf) => [
+ q(0189),
+ q(1),
+ ],
+ q(mar) => [
+ q(0151),
+ q(0),
+ ],
+ q(mco) => [
+ q(0147),
+ q(0),
+ ],
+ q(mda) => [
+ q(0146),
+ q(1),
+ ],
+ q(mdg) => [
+ q(0133),
+ q(0),
+ ],
+ q(mdv) => [
+ q(0136),
+ q(0),
+ ],
+ q(mex) => [
+ q(0144),
+ q(0),
+ ],
+ q(mhl) => [
+ q(0139),
+ q(0),
+ ],
+ q(mkd) => [
+ q(0132),
+ q(1),
+ ],
+ q(mli) => [
+ q(0137),
+ q(0),
+ ],
+ q(mlt) => [
+ q(0138),
+ q(0),
+ ],
+ q(mmr) => [
+ q(0153),
+ q(0),
+ ],
+ q(mne) => [
+ q(0149),
+ q(0),
+ ],
+ q(mng) => [
+ q(0148),
+ q(0),
+ ],
+ q(mnp) => [
+ q(0165),
+ q(0),
+ ],
+ q(moz) => [
+ q(0152),
+ q(0),
+ ],
+ q(mrt) => [
+ q(0141),
+ q(0),
+ ],
+ q(msr) => [
+ q(0150),
+ q(0),
+ ],
+ q(mtq) => [
+ q(0140),
+ q(0),
+ ],
+ q(mus) => [
+ q(0142),
+ q(0),
+ ],
+ q(mwi) => [
+ q(0134),
+ q(0),
+ ],
+ q(mys) => [
+ q(0135),
+ q(0),
+ ],
+ q(myt) => [
+ q(0143),
+ q(0),
+ ],
+ q(nam) => [
+ q(0154),
+ q(0),
+ ],
+ q(ncl) => [
+ q(0158),
+ q(0),
+ ],
+ q(ner) => [
+ q(0161),
+ q(0),
+ ],
+ q(nfk) => [
+ q(0164),
+ q(0),
+ ],
+ q(nga) => [
+ q(0162),
+ q(0),
+ ],
+ q(nic) => [
+ q(0160),
+ q(0),
+ ],
+ q(niu) => [
+ q(0163),
+ q(0),
+ ],
+ q(nld) => [
+ q(0157),
+ q(0),
+ ],
+ q(nor) => [
+ q(0166),
+ q(0),
+ ],
+ q(npl) => [
+ q(0156),
+ q(0),
+ ],
+ q(nru) => [
+ q(0155),
+ q(0),
+ ],
+ q(nzl) => [
+ q(0159),
+ q(0),
+ ],
+ q(omn) => [
+ q(0167),
+ q(0),
+ ],
+ q(pak) => [
+ q(0168),
+ q(0),
+ ],
+ q(pan) => [
+ q(0171),
+ q(0),
+ ],
+ q(pcn) => [
+ q(0176),
+ q(0),
+ ],
+ q(per) => [
+ q(0174),
+ q(0),
+ ],
+ q(phl) => [
+ q(0175),
+ q(0),
+ ],
+ q(plw) => [
+ q(0169),
+ q(0),
+ ],
+ q(png) => [
+ q(0172),
+ q(0),
+ ],
+ q(pol) => [
+ q(0177),
+ q(0),
+ ],
+ q(pri) => [
+ q(0179),
+ q(0),
+ ],
+ q(prk) => [
+ q(0118),
+ q(1),
+ ],
+ q(prt) => [
+ q(0178),
+ q(0),
+ ],
+ q(pry) => [
+ q(0173),
+ q(0),
+ ],
+ q(pse) => [
+ q(0170),
+ q(1),
+ ],
+ q(pyf) => [
+ q(0078),
+ q(0),
+ ],
+ q(qat) => [
+ q(0180),
+ q(0),
+ ],
+ q(reu) => [
+ q(0181),
+ q(0),
+ ],
+ q(rou) => [
+ q(0182),
+ q(0),
+ ],
+ q(rus) => [
+ q(0183),
+ q(0),
+ ],
+ q(rwa) => [
+ q(0184),
+ q(0),
+ ],
+ q(sau) => [
+ q(0195),
+ q(0),
+ ],
+ q(sdn) => [
+ q(0211),
+ q(0),
+ ],
+ q(sen) => [
+ q(0196),
+ q(0),
+ ],
+ q(sgp) => [
+ q(0200),
+ q(0),
+ ],
+ q(shn) => [
+ q(0186),
+ q(1),
+ ],
+ q(sjm) => [
+ q(0213),
+ q(1),
+ ],
+ q(slb) => [
+ q(0204),
+ q(0),
+ ],
+ q(sle) => [
+ q(0199),
+ q(0),
+ ],
+ q(slv) => [
+ q(0067),
+ q(0),
+ ],
+ q(smr) => [
+ q(0193),
+ q(0),
+ ],
+ q(som) => [
+ q(0205),
+ q(0),
+ ],
+ q(spm) => [
+ q(0190),
+ q(0),
+ ],
+ q(srb) => [
+ q(0197),
+ q(0),
+ ],
+ q(ssd) => [
+ q(0208),
+ q(0),
+ ],
+ q(stp) => [
+ q(0194),
+ q(0),
+ ],
+ q(sur) => [
+ q(0212),
+ q(0),
+ ],
+ q(svk) => [
+ q(0202),
+ q(0),
+ ],
+ q(svn) => [
+ q(0203),
+ q(0),
+ ],
+ q(swe) => [
+ q(0215),
+ q(0),
+ ],
+ q(swz) => [
+ q(0214),
+ q(0),
+ ],
+ q(sxm) => [
+ q(0201),
+ q(0),
+ ],
+ q(syc) => [
+ q(0198),
+ q(0),
+ ],
+ q(syr) => [
+ q(0217),
+ q(0),
+ ],
+ q(tca) => [
+ q(0230),
+ q(0),
+ ],
+ q(tcd) => [
+ q(0044),
+ q(0),
+ ],
+ q(tgo) => [
+ q(0223),
+ q(0),
+ ],
+ q(tha) => [
+ q(0221),
+ q(0),
+ ],
+ q(tjk) => [
+ q(0219),
+ q(0),
+ ],
+ q(tkl) => [
+ q(0224),
+ q(0),
+ ],
+ q(tkm) => [
+ q(0229),
+ q(0),
+ ],
+ q(tls) => [
+ q(0222),
+ q(0),
+ ],
+ q(ton) => [
+ q(0225),
+ q(0),
+ ],
+ q(tto) => [
+ q(0226),
+ q(0),
+ ],
+ q(tun) => [
+ q(0227),
+ q(0),
+ ],
+ q(tur) => [
+ q(0228),
+ q(0),
+ ],
+ q(tuv) => [
+ q(0231),
+ q(0),
+ ],
+ q(tza) => [
+ q(0220),
+ q(1),
+ ],
+ q(uga) => [
+ q(0232),
+ q(0),
+ ],
+ q(ukr) => [
+ q(0233),
+ q(0),
+ ],
+ q(ury) => [
+ q(0238),
+ q(0),
+ ],
+ q(usa) => [
+ q(0236),
+ q(1),
+ ],
+ q(uzb) => [
+ q(0239),
+ q(0),
+ ],
+ q(vat) => [
+ q(0098),
+ q(1),
+ ],
+ q(vct) => [
+ q(0191),
+ q(0),
+ ],
+ q(ven) => [
+ q(0241),
+ q(1),
+ ],
+ q(vgb) => [
+ q(0243),
+ q(1),
+ ],
+ q(vir) => [
+ q(0244),
+ q(1),
+ ],
+ q(vnm) => [
+ q(0242),
+ q(0),
+ ],
+ q(vut) => [
+ q(0240),
+ q(0),
+ ],
+ q(wlf) => [
+ q(0245),
+ q(1),
+ ],
+ q(wsm) => [
+ q(0192),
+ q(0),
+ ],
+ q(yem) => [
+ q(0247),
+ q(0),
+ ],
+ q(zaf) => [
+ q(0206),
+ q(0),
+ ],
+ q(zmb) => [
+ q(0248),
+ q(0),
+ ],
+ q(zwe) => [
+ q(0249),
+ q(0),
+ ],
+ },
+ q(dom) => {
+ q(ac) => [
+ q(0290),
+ q(0),
+ ],
+ q(ad) => [
+ q(0006),
+ q(0),
+ ],
+ q(ae) => [
+ q(0234),
+ q(0),
+ ],
+ q(af) => [
+ q(0001),
+ q(0),
+ ],
+ q(ag) => [
+ q(0010),
+ q(0),
+ ],
+ q(ai) => [
+ q(0008),
+ q(0),
+ ],
+ q(al) => [
+ q(0003),
+ q(0),
+ ],
+ q(am) => [
+ q(0012),
+ q(0),
+ ],
+ q(an) => [
+ q(0291),
+ q(0),
+ ],
+ q(ao) => [
+ q(0007),
+ q(0),
+ ],
+ q(aq) => [
+ q(0009),
+ q(0),
+ ],
+ q(ar) => [
+ q(0011),
+ q(0),
+ ],
+ q(as) => [
+ q(0005),
+ q(0),
+ ],
+ q(at) => [
+ q(0015),
+ q(0),
+ ],
+ q(au) => [
+ q(0014),
+ q(0),
+ ],
+ q(aw) => [
+ q(0013),
+ q(0),
+ ],
+ q(ax) => [
+ q(0002),
+ q(0),
+ ],
+ q(az) => [
+ q(0016),
+ q(0),
+ ],
+ q(ba) => [
+ q(0029),
+ q(0),
+ ],
+ q(bb) => [
+ q(0020),
+ q(0),
+ ],
+ q(bd) => [
+ q(0019),
+ q(0),
+ ],
+ q(be) => [
+ q(0022),
+ q(0),
+ ],
+ q(bf) => [
+ q(0036),
+ q(0),
+ ],
+ q(bg) => [
+ q(0035),
+ q(0),
+ ],
+ q(bh) => [
+ q(0018),
+ q(0),
+ ],
+ q(bi) => [
+ q(0037),
+ q(0),
+ ],
+ q(bj) => [
+ q(0024),
+ q(0),
+ ],
+ q(bl) => [
+ q(0185),
+ q(0),
+ ],
+ q(bm) => [
+ q(0025),
+ q(0),
+ ],
+ q(bn) => [
+ q(0034),
+ q(0),
+ ],
+ q(bo) => [
+ q(0027),
+ q(0),
+ ],
+ q(bq) => [
+ q(0028),
+ q(0),
+ ],
+ q(br) => [
+ q(0032),
+ q(0),
+ ],
+ q(bs) => [
+ q(0017),
+ q(0),
+ ],
+ q(bt) => [
+ q(0026),
+ q(0),
+ ],
+ q(bv) => [
+ q(0031),
+ q(0),
+ ],
+ q(bw) => [
+ q(0030),
+ q(0),
+ ],
+ q(by) => [
+ q(0021),
+ q(0),
+ ],
+ q(bz) => [
+ q(0023),
+ q(0),
+ ],
+ q(ca) => [
+ q(0040),
+ q(0),
+ ],
+ q(cc) => [
+ q(0048),
+ q(0),
+ ],
+ q(cd) => [
+ q(0052),
+ q(0),
+ ],
+ q(cf) => [
+ q(0043),
+ q(0),
+ ],
+ q(cg) => [
+ q(0051),
+ q(0),
+ ],
+ q(ch) => [
+ q(0216),
+ q(0),
+ ],
+ q(ci) => [
+ q(0055),
+ q(0),
+ ],
+ q(ck) => [
+ q(0053),
+ q(0),
+ ],
+ q(cl) => [
+ q(0045),
+ q(0),
+ ],
+ q(cm) => [
+ q(0039),
+ q(0),
+ ],
+ q(cn) => [
+ q(0046),
+ q(0),
+ ],
+ q(co) => [
+ q(0049),
+ q(0),
+ ],
+ q(cr) => [
+ q(0054),
+ q(0),
+ ],
+ q(cu) => [
+ q(0057),
+ q(0),
+ ],
+ q(cv) => [
+ q(0041),
+ q(0),
+ ],
+ q(cw) => [
+ q(0058),
+ q(0),
+ ],
+ q(cx) => [
+ q(0047),
+ q(0),
+ ],
+ q(cy) => [
+ q(0059),
+ q(0),
+ ],
+ q(cz) => [
+ q(0060),
+ q(0),
+ ],
+ q(de) => [
+ q(0083),
+ q(0),
+ ],
+ q(dj) => [
+ q(0062),
+ q(0),
+ ],
+ q(dk) => [
+ q(0061),
+ q(0),
+ ],
+ q(dm) => [
+ q(0063),
+ q(0),
+ ],
+ q(do) => [
+ q(0064),
+ q(0),
+ ],
+ q(dz) => [
+ q(0004),
+ q(0),
+ ],
+ q(ec) => [
+ q(0065),
+ q(0),
+ ],
+ q(ee) => [
+ q(0070),
+ q(0),
+ ],
+ q(eg) => [
+ q(0066),
+ q(0),
+ ],
+ q(eh) => [
+ q(0246),
+ q(0),
+ ],
+ q(er) => [
+ q(0069),
+ q(0),
+ ],
+ q(es) => [
+ q(0209),
+ q(0),
+ ],
+ q(et) => [
+ q(0071),
+ q(0),
+ ],
+ q(eu) => [
+ q(0292),
+ q(0),
+ ],
+ q(fi) => [
+ q(0075),
+ q(0),
+ ],
+ q(fj) => [
+ q(0074),
+ q(0),
+ ],
+ q(fk) => [
+ q(0072),
+ q(0),
+ ],
+ q(fm) => [
+ q(0145),
+ q(0),
+ ],
+ q(fo) => [
+ q(0073),
+ q(0),
+ ],
+ q(fr) => [
+ q(0076),
+ q(0),
+ ],
+ q(ga) => [
+ q(0080),
+ q(0),
+ ],
+ q(gb) => [
+ q(0235),
+ q(0),
+ ],
+ q(gd) => [
+ q(0088),
+ q(0),
+ ],
+ q(ge) => [
+ q(0082),
+ q(0),
+ ],
+ q(gf) => [
+ q(0077),
+ q(0),
+ ],
+ q(gg) => [
+ q(0092),
+ q(0),
+ ],
+ q(gh) => [
+ q(0084),
+ q(0),
+ ],
+ q(gi) => [
+ q(0085),
+ q(0),
+ ],
+ q(gl) => [
+ q(0087),
+ q(0),
+ ],
+ q(gm) => [
+ q(0081),
+ q(0),
+ ],
+ q(gn) => [
+ q(0093),
+ q(0),
+ ],
+ q(gp) => [
+ q(0089),
+ q(0),
+ ],
+ q(gq) => [
+ q(0068),
+ q(0),
+ ],
+ q(gr) => [
+ q(0086),
+ q(0),
+ ],
+ q(gs) => [
+ q(0207),
+ q(0),
+ ],
+ q(gt) => [
+ q(0091),
+ q(0),
+ ],
+ q(gu) => [
+ q(0090),
+ q(0),
+ ],
+ q(gw) => [
+ q(0094),
+ q(0),
+ ],
+ q(gy) => [
+ q(0095),
+ q(0),
+ ],
+ q(hk) => [
+ q(0100),
+ q(0),
+ ],
+ q(hm) => [
+ q(0097),
+ q(0),
+ ],
+ q(hn) => [
+ q(0099),
+ q(0),
+ ],
+ q(hr) => [
+ q(0056),
+ q(0),
+ ],
+ q(ht) => [
+ q(0096),
+ q(0),
+ ],
+ q(hu) => [
+ q(0101),
+ q(0),
+ ],
+ q(id) => [
+ q(0104),
+ q(0),
+ ],
+ q(ie) => [
+ q(0107),
+ q(0),
+ ],
+ q(il) => [
+ q(0109),
+ q(0),
+ ],
+ q(im) => [
+ q(0108),
+ q(0),
+ ],
+ q(in) => [
+ q(0103),
+ q(0),
+ ],
+ q(io) => [
+ q(0033),
+ q(0),
+ ],
+ q(iq) => [
+ q(0106),
+ q(0),
+ ],
+ q(ir) => [
+ q(0105),
+ q(0),
+ ],
+ q(is) => [
+ q(0102),
+ q(0),
+ ],
+ q(it) => [
+ q(0110),
+ q(0),
+ ],
+ q(je) => [
+ q(0113),
+ q(0),
+ ],
+ q(jm) => [
+ q(0111),
+ q(0),
+ ],
+ q(jo) => [
+ q(0114),
+ q(0),
+ ],
+ q(jp) => [
+ q(0112),
+ q(0),
+ ],
+ q(ke) => [
+ q(0116),
+ q(0),
+ ],
+ q(kg) => [
+ q(0121),
+ q(0),
+ ],
+ q(kh) => [
+ q(0038),
+ q(0),
+ ],
+ q(ki) => [
+ q(0117),
+ q(0),
+ ],
+ q(km) => [
+ q(0050),
+ q(0),
+ ],
+ q(kn) => [
+ q(0187),
+ q(0),
+ ],
+ q(kp) => [
+ q(0118),
+ q(0),
+ ],
+ q(kr) => [
+ q(0119),
+ q(0),
+ ],
+ q(kw) => [
+ q(0120),
+ q(0),
+ ],
+ q(ky) => [
+ q(0042),
+ q(0),
+ ],
+ q(kz) => [
+ q(0115),
+ q(0),
+ ],
+ q(la) => [
+ q(0122),
+ q(0),
+ ],
+ q(lb) => [
+ q(0124),
+ q(0),
+ ],
+ q(lc) => [
+ q(0188),
+ q(0),
+ ],
+ q(li) => [
+ q(0128),
+ q(0),
+ ],
+ q(lk) => [
+ q(0210),
+ q(0),
+ ],
+ q(lr) => [
+ q(0126),
+ q(0),
+ ],
+ q(ls) => [
+ q(0125),
+ q(0),
+ ],
+ q(lt) => [
+ q(0129),
+ q(0),
+ ],
+ q(lu) => [
+ q(0130),
+ q(0),
+ ],
+ q(lv) => [
+ q(0123),
+ q(0),
+ ],
+ q(ly) => [
+ q(0127),
+ q(0),
+ ],
+ q(ma) => [
+ q(0151),
+ q(0),
+ ],
+ q(mc) => [
+ q(0147),
+ q(0),
+ ],
+ q(md) => [
+ q(0146),
+ q(0),
+ ],
+ q(me) => [
+ q(0149),
+ q(0),
+ ],
+ q(mf) => [
+ q(0189),
+ q(0),
+ ],
+ q(mg) => [
+ q(0133),
+ q(0),
+ ],
+ q(mh) => [
+ q(0139),
+ q(0),
+ ],
+ q(mk) => [
+ q(0132),
+ q(0),
+ ],
+ q(ml) => [
+ q(0137),
+ q(0),
+ ],
+ q(mm) => [
+ q(0153),
+ q(0),
+ ],
+ q(mn) => [
+ q(0148),
+ q(0),
+ ],
+ q(mo) => [
+ q(0131),
+ q(0),
+ ],
+ q(mp) => [
+ q(0165),
+ q(0),
+ ],
+ q(mq) => [
+ q(0140),
+ q(0),
+ ],
+ q(mr) => [
+ q(0141),
+ q(0),
+ ],
+ q(ms) => [
+ q(0150),
+ q(0),
+ ],
+ q(mt) => [
+ q(0138),
+ q(0),
+ ],
+ q(mu) => [
+ q(0142),
+ q(0),
+ ],
+ q(mv) => [
+ q(0136),
+ q(0),
+ ],
+ q(mw) => [
+ q(0134),
+ q(0),
+ ],
+ q(mx) => [
+ q(0144),
+ q(0),
+ ],
+ q(my) => [
+ q(0135),
+ q(0),
+ ],
+ q(mz) => [
+ q(0152),
+ q(0),
+ ],
+ q(na) => [
+ q(0154),
+ q(0),
+ ],
+ q(nc) => [
+ q(0158),
+ q(0),
+ ],
+ q(ne) => [
+ q(0161),
+ q(0),
+ ],
+ q(nf) => [
+ q(0164),
+ q(0),
+ ],
+ q(ng) => [
+ q(0162),
+ q(0),
+ ],
+ q(ni) => [
+ q(0160),
+ q(0),
+ ],
+ q(nl) => [
+ q(0157),
+ q(0),
+ ],
+ q(no) => [
+ q(0166),
+ q(0),
+ ],
+ q(np) => [
+ q(0156),
+ q(0),
+ ],
+ q(nr) => [
+ q(0155),
+ q(0),
+ ],
+ q(nu) => [
+ q(0163),
+ q(0),
+ ],
+ q(nz) => [
+ q(0159),
+ q(0),
+ ],
+ q(om) => [
+ q(0167),
+ q(0),
+ ],
+ q(pa) => [
+ q(0171),
+ q(0),
+ ],
+ q(pe) => [
+ q(0174),
+ q(0),
+ ],
+ q(pf) => [
+ q(0078),
+ q(0),
+ ],
+ q(pg) => [
+ q(0172),
+ q(0),
+ ],
+ q(ph) => [
+ q(0175),
+ q(0),
+ ],
+ q(pk) => [
+ q(0168),
+ q(0),
+ ],
+ q(pl) => [
+ q(0177),
+ q(0),
+ ],
+ q(pm) => [
+ q(0190),
+ q(0),
+ ],
+ q(pn) => [
+ q(0176),
+ q(0),
+ ],
+ q(pr) => [
+ q(0179),
+ q(0),
+ ],
+ q(ps) => [
+ q(0170),
+ q(0),
+ ],
+ q(pt) => [
+ q(0178),
+ q(0),
+ ],
+ q(pw) => [
+ q(0169),
+ q(0),
+ ],
+ q(py) => [
+ q(0173),
+ q(0),
+ ],
+ q(qa) => [
+ q(0180),
+ q(0),
+ ],
+ q(re) => [
+ q(0181),
+ q(0),
+ ],
+ q(ro) => [
+ q(0182),
+ q(0),
+ ],
+ q(rs) => [
+ q(0197),
+ q(0),
+ ],
+ q(ru) => [
+ q(0183),
+ q(0),
+ ],
+ q(rw) => [
+ q(0184),
+ q(0),
+ ],
+ q(sa) => [
+ q(0195),
+ q(0),
+ ],
+ q(sb) => [
+ q(0204),
+ q(0),
+ ],
+ q(sc) => [
+ q(0198),
+ q(0),
+ ],
+ q(sd) => [
+ q(0211),
+ q(0),
+ ],
+ q(se) => [
+ q(0215),
+ q(0),
+ ],
+ q(sg) => [
+ q(0200),
+ q(0),
+ ],
+ q(sh) => [
+ q(0186),
+ q(0),
+ ],
+ q(si) => [
+ q(0203),
+ q(0),
+ ],
+ q(sj) => [
+ q(0213),
+ q(0),
+ ],
+ q(sk) => [
+ q(0202),
+ q(0),
+ ],
+ q(sl) => [
+ q(0199),
+ q(0),
+ ],
+ q(sm) => [
+ q(0193),
+ q(0),
+ ],
+ q(sn) => [
+ q(0196),
+ q(0),
+ ],
+ q(so) => [
+ q(0205),
+ q(0),
+ ],
+ q(sr) => [
+ q(0212),
+ q(0),
+ ],
+ q(ss) => [
+ q(0208),
+ q(0),
+ ],
+ q(st) => [
+ q(0194),
+ q(0),
+ ],
+ q(su) => [
+ q(0293),
+ q(0),
+ ],
+ q(sv) => [
+ q(0067),
+ q(0),
+ ],
+ q(sx) => [
+ q(0201),
+ q(0),
+ ],
+ q(sy) => [
+ q(0217),
+ q(0),
+ ],
+ q(sz) => [
+ q(0214),
+ q(0),
+ ],
+ q(tc) => [
+ q(0230),
+ q(0),
+ ],
+ q(td) => [
+ q(0044),
+ q(0),
+ ],
+ q(tf) => [
+ q(0079),
+ q(0),
+ ],
+ q(tg) => [
+ q(0223),
+ q(0),
+ ],
+ q(th) => [
+ q(0221),
+ q(0),
+ ],
+ q(tj) => [
+ q(0219),
+ q(0),
+ ],
+ q(tk) => [
+ q(0224),
+ q(0),
+ ],
+ q(tl) => [
+ q(0222),
+ q(0),
+ ],
+ q(tm) => [
+ q(0229),
+ q(0),
+ ],
+ q(tn) => [
+ q(0227),
+ q(0),
+ ],
+ q(to) => [
+ q(0225),
+ q(0),
+ ],
+ q(tp) => [
+ q(0222),
+ q(1),
+ ],
+ q(tr) => [
+ q(0228),
+ q(0),
+ ],
+ q(tt) => [
+ q(0226),
+ q(0),
+ ],
+ q(tv) => [
+ q(0231),
+ q(0),
+ ],
+ q(tw) => [
+ q(0218),
+ q(0),
+ ],
+ q(tz) => [
+ q(0220),
+ q(0),
+ ],
+ q(ua) => [
+ q(0233),
+ q(0),
+ ],
+ q(ug) => [
+ q(0232),
+ q(0),
+ ],
+ q(uk) => [
+ q(0235),
+ q(0),
+ ],
+ q(um) => [
+ q(0237),
+ q(0),
+ ],
+ q(us) => [
+ q(0236),
+ q(0),
+ ],
+ q(uy) => [
+ q(0238),
+ q(0),
+ ],
+ q(uz) => [
+ q(0239),
+ q(0),
+ ],
+ q(va) => [
+ q(0098),
+ q(0),
+ ],
+ q(vc) => [
+ q(0191),
+ q(0),
+ ],
+ q(ve) => [
+ q(0241),
+ q(0),
+ ],
+ q(vg) => [
+ q(0243),
+ q(0),
+ ],
+ q(vi) => [
+ q(0244),
+ q(0),
+ ],
+ q(vn) => [
+ q(0242),
+ q(0),
+ ],
+ q(vu) => [
+ q(0240),
+ q(0),
+ ],
+ q(wf) => [
+ q(0245),
+ q(0),
+ ],
+ q(ws) => [
+ q(0192),
+ q(0),
+ ],
+ q(ye) => [
+ q(0247),
+ q(0),
+ ],
+ q(yt) => [
+ q(0143),
+ q(0),
+ ],
+ q(za) => [
+ q(0206),
+ q(0),
+ ],
+ q(zm) => [
+ q(0248),
+ q(0),
+ ],
+ q(zw) => [
+ q(0249),
+ q(0),
+ ],
+ },
+ q(fips-10) => {
+ q(AA) => [
+ q(0013),
+ q(0),
+ ],
+ q(AC) => [
+ q(0010),
+ q(0),
+ ],
+ q(AE) => [
+ q(0234),
+ q(0),
+ ],
+ q(AF) => [
+ q(0001),
+ q(0),
+ ],
+ q(AG) => [
+ q(0004),
+ q(0),
+ ],
+ q(AJ) => [
+ q(0016),
+ q(0),
+ ],
+ q(AL) => [
+ q(0003),
+ q(0),
+ ],
+ q(AM) => [
+ q(0012),
+ q(0),
+ ],
+ q(AN) => [
+ q(0006),
+ q(0),
+ ],
+ q(AO) => [
+ q(0007),
+ q(0),
+ ],
+ q(AQ) => [
+ q(0005),
+ q(0),
+ ],
+ q(AR) => [
+ q(0011),
+ q(0),
+ ],
+ q(AS) => [
+ q(0014),
+ q(0),
+ ],
+ q(AT) => [
+ q(0253),
+ q(0),
+ ],
+ q(AU) => [
+ q(0015),
+ q(0),
+ ],
+ q(AV) => [
+ q(0008),
+ q(0),
+ ],
+ q(AX) => [
+ q(0252),
+ q(0),
+ ],
+ q(AY) => [
+ q(0009),
+ q(0),
+ ],
+ q(BA) => [
+ q(0018),
+ q(0),
+ ],
+ q(BB) => [
+ q(0020),
+ q(0),
+ ],
+ q(BC) => [
+ q(0030),
+ q(0),
+ ],
+ q(BD) => [
+ q(0025),
+ q(0),
+ ],
+ q(BE) => [
+ q(0022),
+ q(0),
+ ],
+ q(BF) => [
+ q(0017),
+ q(1),
+ ],
+ q(BG) => [
+ q(0019),
+ q(0),
+ ],
+ q(BH) => [
+ q(0023),
+ q(0),
+ ],
+ q(BK) => [
+ q(0029),
+ q(0),
+ ],
+ q(BL) => [
+ q(0027),
+ q(2),
+ ],
+ q(BM) => [
+ q(0153),
+ q(1),
+ ],
+ q(BN) => [
+ q(0024),
+ q(0),
+ ],
+ q(BO) => [
+ q(0021),
+ q(0),
+ ],
+ q(BP) => [
+ q(0204),
+ q(0),
+ ],
+ q(BQ) => [
+ q(0277),
+ q(0),
+ ],
+ q(BR) => [
+ q(0032),
+ q(0),
+ ],
+ q(BS) => [
+ q(0255),
+ q(0),
+ ],
+ q(BT) => [
+ q(0026),
+ q(0),
+ ],
+ q(BU) => [
+ q(0035),
+ q(0),
+ ],
+ q(BV) => [
+ q(0031),
+ q(0),
+ ],
+ q(BX) => [
+ q(0034),
+ q(1),
+ ],
+ q(BY) => [
+ q(0037),
+ q(0),
+ ],
+ q(CA) => [
+ q(0040),
+ q(0),
+ ],
+ q(CB) => [
+ q(0038),
+ q(0),
+ ],
+ q(CD) => [
+ q(0044),
+ q(0),
+ ],
+ q(CE) => [
+ q(0210),
+ q(0),
+ ],
+ q(CF) => [
+ q(0051),
+ q(1),
+ ],
+ q(CG) => [
+ q(0257),
+ q(0),
+ ],
+ q(CH) => [
+ q(0046),
+ q(0),
+ ],
+ q(CI) => [
+ q(0045),
+ q(0),
+ ],
+ q(CJ) => [
+ q(0042),
+ q(0),
+ ],
+ q(CK) => [
+ q(0048),
+ q(0),
+ ],
+ q(CM) => [
+ q(0039),
+ q(0),
+ ],
+ q(CN) => [
+ q(0050),
+ q(0),
+ ],
+ q(CO) => [
+ q(0049),
+ q(0),
+ ],
+ q(CQ) => [
+ q(0165),
+ q(0),
+ ],
+ q(CR) => [
+ q(0258),
+ q(0),
+ ],
+ q(CS) => [
+ q(0054),
+ q(0),
+ ],
+ q(CT) => [
+ q(0043),
+ q(0),
+ ],
+ q(CU) => [
+ q(0057),
+ q(0),
+ ],
+ q(CV) => [
+ q(0041),
+ q(0),
+ ],
+ q(CW) => [
+ q(0053),
+ q(0),
+ ],
+ q(CY) => [
+ q(0059),
+ q(0),
+ ],
+ q(DA) => [
+ q(0061),
+ q(0),
+ ],
+ q(DJ) => [
+ q(0062),
+ q(0),
+ ],
+ q(DO) => [
+ q(0063),
+ q(0),
+ ],
+ q(DQ) => [
+ q(0267),
+ q(0),
+ ],
+ q(DR) => [
+ q(0064),
+ q(0),
+ ],
+ q(DX) => [
+ q(0259),
+ q(0),
+ ],
+ q(EC) => [
+ q(0065),
+ q(0),
+ ],
+ q(EG) => [
+ q(0066),
+ q(0),
+ ],
+ q(EI) => [
+ q(0107),
+ q(0),
+ ],
+ q(EK) => [
+ q(0068),
+ q(0),
+ ],
+ q(EN) => [
+ q(0070),
+ q(0),
+ ],
+ q(ER) => [
+ q(0069),
+ q(0),
+ ],
+ q(ES) => [
+ q(0067),
+ q(0),
+ ],
+ q(ET) => [
+ q(0071),
+ q(0),
+ ],
+ q(EU) => [
+ q(0261),
+ q(0),
+ ],
+ q(EZ) => [
+ q(0060),
+ q(0),
+ ],
+ q(FG) => [
+ q(0077),
+ q(0),
+ ],
+ q(FI) => [
+ q(0075),
+ q(0),
+ ],
+ q(FJ) => [
+ q(0074),
+ q(0),
+ ],
+ q(FK) => [
+ q(0072),
+ q(1),
+ ],
+ q(FM) => [
+ q(0145),
+ q(0),
+ ],
+ q(FO) => [
+ q(0073),
+ q(0),
+ ],
+ q(FP) => [
+ q(0078),
+ q(0),
+ ],
+ q(FQ) => [
+ q(0254),
+ q(0),
+ ],
+ q(FR) => [
+ q(0076),
+ q(0),
+ ],
+ q(FS) => [
+ q(0079),
+ q(1),
+ ],
+ q(GA) => [
+ q(0081),
+ q(1),
+ ],
+ q(GB) => [
+ q(0080),
+ q(0),
+ ],
+ q(GG) => [
+ q(0082),
+ q(0),
+ ],
+ q(GH) => [
+ q(0084),
+ q(0),
+ ],
+ q(GI) => [
+ q(0085),
+ q(0),
+ ],
+ q(GJ) => [
+ q(0088),
+ q(0),
+ ],
+ q(GK) => [
+ q(0092),
+ q(0),
+ ],
+ q(GL) => [
+ q(0087),
+ q(0),
+ ],
+ q(GM) => [
+ q(0083),
+ q(0),
+ ],
+ q(GO) => [
+ q(0263),
+ q(0),
+ ],
+ q(GP) => [
+ q(0089),
+ q(0),
+ ],
+ q(GQ) => [
+ q(0090),
+ q(0),
+ ],
+ q(GR) => [
+ q(0086),
+ q(0),
+ ],
+ q(GT) => [
+ q(0091),
+ q(0),
+ ],
+ q(GV) => [
+ q(0093),
+ q(0),
+ ],
+ q(GY) => [
+ q(0095),
+ q(0),
+ ],
+ q(GZ) => [
+ q(0262),
+ q(0),
+ ],
+ q(HA) => [
+ q(0096),
+ q(0),
+ ],
+ q(HK) => [
+ q(0100),
+ q(0),
+ ],
+ q(HM) => [
+ q(0264),
+ q(0),
+ ],
+ q(HO) => [
+ q(0099),
+ q(0),
+ ],
+ q(HQ) => [
+ q(0265),
+ q(0),
+ ],
+ q(HR) => [
+ q(0056),
+ q(0),
+ ],
+ q(HU) => [
+ q(0101),
+ q(0),
+ ],
+ q(IC) => [
+ q(0102),
+ q(0),
+ ],
+ q(ID) => [
+ q(0104),
+ q(0),
+ ],
+ q(IM) => [
+ q(0108),
+ q(0),
+ ],
+ q(IN) => [
+ q(0103),
+ q(0),
+ ],
+ q(IO) => [
+ q(0033),
+ q(0),
+ ],
+ q(IP) => [
+ q(0256),
+ q(0),
+ ],
+ q(IR) => [
+ q(0105),
+ q(2),
+ ],
+ q(IS) => [
+ q(0109),
+ q(0),
+ ],
+ q(IT) => [
+ q(0110),
+ q(0),
+ ],
+ q(IV) => [
+ q(0055),
+ q(0),
+ ],
+ q(IZ) => [
+ q(0106),
+ q(0),
+ ],
+ q(JA) => [
+ q(0112),
+ q(0),
+ ],
+ q(JE) => [
+ q(0113),
+ q(0),
+ ],
+ q(JM) => [
+ q(0111),
+ q(0),
+ ],
+ q(JN) => [
+ q(0266),
+ q(0),
+ ],
+ q(JO) => [
+ q(0114),
+ q(0),
+ ],
+ q(JQ) => [
+ q(0268),
+ q(0),
+ ],
+ q(JU) => [
+ q(0269),
+ q(0),
+ ],
+ q(KE) => [
+ q(0116),
+ q(0),
+ ],
+ q(KG) => [
+ q(0121),
+ q(0),
+ ],
+ q(KN) => [
+ q(0271),
+ q(0),
+ ],
+ q(KQ) => [
+ q(0270),
+ q(0),
+ ],
+ q(KR) => [
+ q(0117),
+ q(0),
+ ],
+ q(KS) => [
+ q(0272),
+ q(0),
+ ],
+ q(KT) => [
+ q(0047),
+ q(0),
+ ],
+ q(KU) => [
+ q(0120),
+ q(0),
+ ],
+ q(KV) => [
+ q(0273),
+ q(0),
+ ],
+ q(KZ) => [
+ q(0115),
+ q(0),
+ ],
+ q(LA) => [
+ q(0274),
+ q(0),
+ ],
+ q(LE) => [
+ q(0124),
+ q(0),
+ ],
+ q(LG) => [
+ q(0123),
+ q(0),
+ ],
+ q(LH) => [
+ q(0129),
+ q(0),
+ ],
+ q(LI) => [
+ q(0126),
+ q(0),
+ ],
+ q(LO) => [
+ q(0202),
+ q(0),
+ ],
+ q(LQ) => [
+ q(0278),
+ q(0),
+ ],
+ q(LS) => [
+ q(0128),
+ q(0),
+ ],
+ q(LT) => [
+ q(0125),
+ q(0),
+ ],
+ q(LU) => [
+ q(0130),
+ q(0),
+ ],
+ q(LY) => [
+ q(0127),
+ q(0),
+ ],
+ q(MA) => [
+ q(0133),
+ q(0),
+ ],
+ q(MB) => [
+ q(0140),
+ q(0),
+ ],
+ q(MC) => [
+ q(0131),
+ q(2),
+ ],
+ q(MD) => [
+ q(0276),
+ q(0),
+ ],
+ q(MF) => [
+ q(0143),
+ q(0),
+ ],
+ q(MG) => [
+ q(0148),
+ q(0),
+ ],
+ q(MH) => [
+ q(0150),
+ q(0),
+ ],
+ q(MI) => [
+ q(0134),
+ q(0),
+ ],
+ q(MJ) => [
+ q(0149),
+ q(0),
+ ],
+ q(MK) => [
+ q(0132),
+ q(2),
+ ],
+ q(ML) => [
+ q(0137),
+ q(0),
+ ],
+ q(MN) => [
+ q(0147),
+ q(0),
+ ],
+ q(MO) => [
+ q(0151),
+ q(0),
+ ],
+ q(MP) => [
+ q(0142),
+ q(0),
+ ],
+ q(MQ) => [
+ q(0275),
+ q(0),
+ ],
+ q(MR) => [
+ q(0141),
+ q(0),
+ ],
+ q(MT) => [
+ q(0138),
+ q(0),
+ ],
+ q(MU) => [
+ q(0167),
+ q(0),
+ ],
+ q(MV) => [
+ q(0136),
+ q(0),
+ ],
+ q(MX) => [
+ q(0144),
+ q(0),
+ ],
+ q(MY) => [
+ q(0135),
+ q(0),
+ ],
+ q(MZ) => [
+ q(0152),
+ q(0),
+ ],
+ q(NC) => [
+ q(0158),
+ q(0),
+ ],
+ q(NE) => [
+ q(0163),
+ q(0),
+ ],
+ q(NF) => [
+ q(0164),
+ q(0),
+ ],
+ q(NG) => [
+ q(0161),
+ q(0),
+ ],
+ q(NH) => [
+ q(0240),
+ q(0),
+ ],
+ q(NI) => [
+ q(0162),
+ q(0),
+ ],
+ q(NL) => [
+ q(0157),
+ q(0),
+ ],
+ q(NN) => [
+ q(0282),
+ q(0),
+ ],
+ q(NO) => [
+ q(0166),
+ q(0),
+ ],
+ q(NP) => [
+ q(0156),
+ q(0),
+ ],
+ q(NR) => [
+ q(0155),
+ q(0),
+ ],
+ q(NS) => [
+ q(0212),
+ q(0),
+ ],
+ q(NU) => [
+ q(0160),
+ q(0),
+ ],
+ q(NZ) => [
+ q(0159),
+ q(0),
+ ],
+ q(OD) => [
+ q(0208),
+ q(0),
+ ],
+ q(PA) => [
+ q(0173),
+ q(0),
+ ],
+ q(PC) => [
+ q(0176),
+ q(1),
+ ],
+ q(PE) => [
+ q(0174),
+ q(0),
+ ],
+ q(PF) => [
+ q(0279),
+ q(0),
+ ],
+ q(PG) => [
+ q(0284),
+ q(0),
+ ],
+ q(PJ) => [
+ q(0260),
+ q(0),
+ ],
+ q(PK) => [
+ q(0168),
+ q(0),
+ ],
+ q(PL) => [
+ q(0177),
+ q(0),
+ ],
+ q(PM) => [
+ q(0171),
+ q(0),
+ ],
+ q(PO) => [
+ q(0178),
+ q(0),
+ ],
+ q(PP) => [
+ q(0172),
+ q(0),
+ ],
+ q(PS) => [
+ q(0169),
+ q(0),
+ ],
+ q(PU) => [
+ q(0094),
+ q(0),
+ ],
+ q(QA) => [
+ q(0180),
+ q(0),
+ ],
+ q(RE) => [
+ q(0181),
+ q(0),
+ ],
+ q(RI) => [
+ q(0197),
+ q(0),
+ ],
+ q(RM) => [
+ q(0139),
+ q(0),
+ ],
+ q(RN) => [
+ q(0189),
+ q(2),
+ ],
+ q(RO) => [
+ q(0182),
+ q(0),
+ ],
+ q(RP) => [
+ q(0175),
+ q(0),
+ ],
+ q(RQ) => [
+ q(0179),
+ q(0),
+ ],
+ q(RS) => [
+ q(0280),
+ q(0),
+ ],
+ q(RW) => [
+ q(0184),
+ q(0),
+ ],
+ q(SA) => [
+ q(0195),
+ q(0),
+ ],
+ q(SB) => [
+ q(0190),
+ q(0),
+ ],
+ q(SC) => [
+ q(0187),
+ q(0),
+ ],
+ q(SE) => [
+ q(0198),
+ q(0),
+ ],
+ q(SF) => [
+ q(0206),
+ q(0),
+ ],
+ q(SG) => [
+ q(0196),
+ q(0),
+ ],
+ q(SH) => [
+ q(0281),
+ q(0),
+ ],
+ q(SI) => [
+ q(0203),
+ q(0),
+ ],
+ q(SL) => [
+ q(0199),
+ q(0),
+ ],
+ q(SM) => [
+ q(0193),
+ q(0),
+ ],
+ q(SN) => [
+ q(0200),
+ q(0),
+ ],
+ q(SO) => [
+ q(0205),
+ q(0),
+ ],
+ q(SP) => [
+ q(0209),
+ q(0),
+ ],
+ q(ST) => [
+ q(0188),
+ q(0),
+ ],
+ q(SU) => [
+ q(0211),
+ q(0),
+ ],
+ q(SV) => [
+ q(0285),
+ q(0),
+ ],
+ q(SW) => [
+ q(0215),
+ q(0),
+ ],
+ q(SX) => [
+ q(0283),
+ q(0),
+ ],
+ q(SY) => [
+ q(0217),
+ q(1),
+ ],
+ q(SZ) => [
+ q(0216),
+ q(0),
+ ],
+ q(TB) => [
+ q(0185),
+ q(0),
+ ],
+ q(TD) => [
+ q(0226),
+ q(0),
+ ],
+ q(TE) => [
+ q(0287),
+ q(0),
+ ],
+ q(TH) => [
+ q(0221),
+ q(0),
+ ],
+ q(TI) => [
+ q(0219),
+ q(0),
+ ],
+ q(TK) => [
+ q(0230),
+ q(0),
+ ],
+ q(TL) => [
+ q(0224),
+ q(0),
+ ],
+ q(TN) => [
+ q(0225),
+ q(0),
+ ],
+ q(TO) => [
+ q(0223),
+ q(0),
+ ],
+ q(TP) => [
+ q(0194),
+ q(0),
+ ],
+ q(TS) => [
+ q(0227),
+ q(0),
+ ],
+ q(TT) => [
+ q(0222),
+ q(0),
+ ],
+ q(TU) => [
+ q(0228),
+ q(0),
+ ],
+ q(TV) => [
+ q(0231),
+ q(0),
+ ],
+ q(TW) => [
+ q(0218),
+ q(1),
+ ],
+ q(TX) => [
+ q(0229),
+ q(0),
+ ],
+ q(TZ) => [
+ q(0286),
+ q(0),
+ ],
+ q(UC) => [
+ q(0058),
+ q(0),
+ ],
+ q(UG) => [
+ q(0232),
+ q(0),
+ ],
+ q(UK) => [
+ q(0235),
+ q(0),
+ ],
+ q(UP) => [
+ q(0233),
+ q(0),
+ ],
+ q(US) => [
+ q(0236),
+ q(0),
+ ],
+ q(UV) => [
+ q(0036),
+ q(0),
+ ],
+ q(UY) => [
+ q(0238),
+ q(0),
+ ],
+ q(UZ) => [
+ q(0239),
+ q(0),
+ ],
+ q(VC) => [
+ q(0191),
+ q(0),
+ ],
+ q(VE) => [
+ q(0241),
+ q(2),
+ ],
+ q(VI) => [
+ q(0243),
+ q(0),
+ ],
+ q(VM) => [
+ q(0242),
+ q(1),
+ ],
+ q(VQ) => [
+ q(0244),
+ q(0),
+ ],
+ q(VT) => [
+ q(0098),
+ q(2),
+ ],
+ q(WA) => [
+ q(0154),
+ q(0),
+ ],
+ q(WE) => [
+ q(0289),
+ q(0),
+ ],
+ q(WF) => [
+ q(0245),
+ q(0),
+ ],
+ q(WI) => [
+ q(0246),
+ q(0),
+ ],
+ q(WQ) => [
+ q(0288),
+ q(0),
+ ],
+ q(WS) => [
+ q(0192),
+ q(0),
+ ],
+ q(WZ) => [
+ q(0214),
+ q(0),
+ ],
+ q(YM) => [
+ q(0247),
+ q(0),
+ ],
+ q(ZA) => [
+ q(0248),
+ q(0),
+ ],
+ q(ZI) => [
+ q(0249),
+ q(0),
+ ],
+ },
+ q(numeric) => {
+ q(004) => [
+ q(0001),
+ q(0),
+ ],
+ q(008) => [
+ q(0003),
+ q(0),
+ ],
+ q(012) => [
+ q(0004),
+ q(0),
+ ],
+ q(016) => [
+ q(0005),
+ q(0),
+ ],
+ q(020) => [
+ q(0006),
+ q(0),
+ ],
+ q(024) => [
+ q(0007),
+ q(0),
+ ],
+ q(028) => [
+ q(0010),
+ q(0),
+ ],
+ q(031) => [
+ q(0016),
+ q(0),
+ ],
+ q(032) => [
+ q(0011),
+ q(0),
+ ],
+ q(036) => [
+ q(0014),
+ q(0),
+ ],
+ q(040) => [
+ q(0015),
+ q(0),
+ ],
+ q(044) => [
+ q(0017),
+ q(0),
+ ],
+ q(048) => [
+ q(0018),
+ q(0),
+ ],
+ q(050) => [
+ q(0019),
+ q(0),
+ ],
+ q(051) => [
+ q(0012),
+ q(0),
+ ],
+ q(052) => [
+ q(0020),
+ q(0),
+ ],
+ q(056) => [
+ q(0022),
+ q(0),
+ ],
+ q(060) => [
+ q(0025),
+ q(0),
+ ],
+ q(064) => [
+ q(0026),
+ q(0),
+ ],
+ q(068) => [
+ q(0027),
+ q(1),
+ ],
+ q(070) => [
+ q(0029),
+ q(0),
+ ],
+ q(072) => [
+ q(0030),
+ q(0),
+ ],
+ q(076) => [
+ q(0032),
+ q(0),
+ ],
+ q(084) => [
+ q(0023),
+ q(0),
+ ],
+ q(090) => [
+ q(0204),
+ q(0),
+ ],
+ q(092) => [
+ q(0243),
+ q(1),
+ ],
+ q(096) => [
+ q(0034),
+ q(0),
+ ],
+ q(100) => [
+ q(0035),
+ q(0),
+ ],
+ q(104) => [
+ q(0153),
+ q(0),
+ ],
+ q(108) => [
+ q(0037),
+ q(0),
+ ],
+ q(112) => [
+ q(0021),
+ q(0),
+ ],
+ q(116) => [
+ q(0038),
+ q(0),
+ ],
+ q(120) => [
+ q(0039),
+ q(0),
+ ],
+ q(124) => [
+ q(0040),
+ q(0),
+ ],
+ q(132) => [
+ q(0041),
+ q(0),
+ ],
+ q(136) => [
+ q(0042),
+ q(0),
+ ],
+ q(140) => [
+ q(0043),
+ q(0),
+ ],
+ q(144) => [
+ q(0210),
+ q(0),
+ ],
+ q(148) => [
+ q(0044),
+ q(0),
+ ],
+ q(152) => [
+ q(0045),
+ q(0),
+ ],
+ q(156) => [
+ q(0046),
+ q(0),
+ ],
+ q(170) => [
+ q(0049),
+ q(0),
+ ],
+ q(174) => [
+ q(0050),
+ q(0),
+ ],
+ q(175) => [
+ q(0143),
+ q(0),
+ ],
+ q(178) => [
+ q(0051),
+ q(0),
+ ],
+ q(180) => [
+ q(0052),
+ q(1),
+ ],
+ q(184) => [
+ q(0053),
+ q(0),
+ ],
+ q(188) => [
+ q(0054),
+ q(0),
+ ],
+ q(191) => [
+ q(0056),
+ q(0),
+ ],
+ q(192) => [
+ q(0057),
+ q(0),
+ ],
+ q(196) => [
+ q(0059),
+ q(0),
+ ],
+ q(203) => [
+ q(0060),
+ q(0),
+ ],
+ q(204) => [
+ q(0024),
+ q(0),
+ ],
+ q(208) => [
+ q(0061),
+ q(0),
+ ],
+ q(212) => [
+ q(0063),
+ q(0),
+ ],
+ q(214) => [
+ q(0064),
+ q(0),
+ ],
+ q(218) => [
+ q(0065),
+ q(0),
+ ],
+ q(222) => [
+ q(0067),
+ q(0),
+ ],
+ q(226) => [
+ q(0068),
+ q(0),
+ ],
+ q(231) => [
+ q(0071),
+ q(0),
+ ],
+ q(232) => [
+ q(0069),
+ q(0),
+ ],
+ q(233) => [
+ q(0070),
+ q(0),
+ ],
+ q(234) => [
+ q(0073),
+ q(1),
+ ],
+ q(238) => [
+ q(0072),
+ q(0),
+ ],
+ q(242) => [
+ q(0074),
+ q(0),
+ ],
+ q(246) => [
+ q(0075),
+ q(0),
+ ],
+ q(248) => [
+ q(0002),
+ q(0),
+ ],
+ q(250) => [
+ q(0076),
+ q(0),
+ ],
+ q(254) => [
+ q(0077),
+ q(0),
+ ],
+ q(258) => [
+ q(0078),
+ q(0),
+ ],
+ q(262) => [
+ q(0062),
+ q(0),
+ ],
+ q(266) => [
+ q(0080),
+ q(0),
+ ],
+ q(268) => [
+ q(0082),
+ q(0),
+ ],
+ q(270) => [
+ q(0081),
+ q(0),
+ ],
+ q(275) => [
+ q(0170),
+ q(1),
+ ],
+ q(276) => [
+ q(0083),
+ q(0),
+ ],
+ q(288) => [
+ q(0084),
+ q(0),
+ ],
+ q(292) => [
+ q(0085),
+ q(0),
+ ],
+ q(296) => [
+ q(0117),
+ q(0),
+ ],
+ q(300) => [
+ q(0086),
+ q(0),
+ ],
+ q(304) => [
+ q(0087),
+ q(0),
+ ],
+ q(308) => [
+ q(0088),
+ q(0),
+ ],
+ q(312) => [
+ q(0089),
+ q(0),
+ ],
+ q(316) => [
+ q(0090),
+ q(0),
+ ],
+ q(320) => [
+ q(0091),
+ q(0),
+ ],
+ q(324) => [
+ q(0093),
+ q(0),
+ ],
+ q(328) => [
+ q(0095),
+ q(0),
+ ],
+ q(332) => [
+ q(0096),
+ q(0),
+ ],
+ q(336) => [
+ q(0098),
+ q(1),
+ ],
+ q(340) => [
+ q(0099),
+ q(0),
+ ],
+ q(344) => [
+ q(0100),
+ q(1),
+ ],
+ q(348) => [
+ q(0101),
+ q(0),
+ ],
+ q(352) => [
+ q(0102),
+ q(0),
+ ],
+ q(356) => [
+ q(0103),
+ q(0),
+ ],
+ q(360) => [
+ q(0104),
+ q(0),
+ ],
+ q(364) => [
+ q(0105),
+ q(1),
+ ],
+ q(368) => [
+ q(0106),
+ q(0),
+ ],
+ q(372) => [
+ q(0107),
+ q(0),
+ ],
+ q(376) => [
+ q(0109),
+ q(0),
+ ],
+ q(380) => [
+ q(0110),
+ q(0),
+ ],
+ q(384) => [
+ q(0055),
+ q(0),
+ ],
+ q(388) => [
+ q(0111),
+ q(0),
+ ],
+ q(392) => [
+ q(0112),
+ q(0),
+ ],
+ q(398) => [
+ q(0115),
+ q(0),
+ ],
+ q(400) => [
+ q(0114),
+ q(0),
+ ],
+ q(404) => [
+ q(0116),
+ q(0),
+ ],
+ q(408) => [
+ q(0118),
+ q(1),
+ ],
+ q(410) => [
+ q(0119),
+ q(1),
+ ],
+ q(414) => [
+ q(0120),
+ q(0),
+ ],
+ q(417) => [
+ q(0121),
+ q(0),
+ ],
+ q(418) => [
+ q(0122),
+ q(0),
+ ],
+ q(422) => [
+ q(0124),
+ q(0),
+ ],
+ q(426) => [
+ q(0125),
+ q(0),
+ ],
+ q(428) => [
+ q(0123),
+ q(0),
+ ],
+ q(430) => [
+ q(0126),
+ q(0),
+ ],
+ q(434) => [
+ q(0127),
+ q(0),
+ ],
+ q(438) => [
+ q(0128),
+ q(0),
+ ],
+ q(440) => [
+ q(0129),
+ q(0),
+ ],
+ q(442) => [
+ q(0130),
+ q(0),
+ ],
+ q(446) => [
+ q(0131),
+ q(1),
+ ],
+ q(450) => [
+ q(0133),
+ q(0),
+ ],
+ q(454) => [
+ q(0134),
+ q(0),
+ ],
+ q(458) => [
+ q(0135),
+ q(0),
+ ],
+ q(462) => [
+ q(0136),
+ q(0),
+ ],
+ q(466) => [
+ q(0137),
+ q(0),
+ ],
+ q(470) => [
+ q(0138),
+ q(0),
+ ],
+ q(474) => [
+ q(0140),
+ q(0),
+ ],
+ q(478) => [
+ q(0141),
+ q(0),
+ ],
+ q(480) => [
+ q(0142),
+ q(0),
+ ],
+ q(484) => [
+ q(0144),
+ q(0),
+ ],
+ q(492) => [
+ q(0147),
+ q(0),
+ ],
+ q(496) => [
+ q(0148),
+ q(0),
+ ],
+ q(498) => [
+ q(0146),
+ q(1),
+ ],
+ q(499) => [
+ q(0149),
+ q(0),
+ ],
+ q(500) => [
+ q(0150),
+ q(0),
+ ],
+ q(504) => [
+ q(0151),
+ q(0),
+ ],
+ q(508) => [
+ q(0152),
+ q(0),
+ ],
+ q(512) => [
+ q(0167),
+ q(0),
+ ],
+ q(516) => [
+ q(0154),
+ q(0),
+ ],
+ q(520) => [
+ q(0155),
+ q(0),
+ ],
+ q(524) => [
+ q(0156),
+ q(0),
+ ],
+ q(528) => [
+ q(0157),
+ q(0),
+ ],
+ q(531) => [
+ q(0058),
+ q(0),
+ ],
+ q(533) => [
+ q(0013),
+ q(0),
+ ],
+ q(534) => [
+ q(0201),
+ q(0),
+ ],
+ q(535) => [
+ q(0028),
+ q(0),
+ ],
+ q(540) => [
+ q(0158),
+ q(0),
+ ],
+ q(548) => [
+ q(0240),
+ q(0),
+ ],
+ q(554) => [
+ q(0159),
+ q(0),
+ ],
+ q(558) => [
+ q(0160),
+ q(0),
+ ],
+ q(562) => [
+ q(0161),
+ q(0),
+ ],
+ q(566) => [
+ q(0162),
+ q(0),
+ ],
+ q(570) => [
+ q(0163),
+ q(0),
+ ],
+ q(574) => [
+ q(0164),
+ q(0),
+ ],
+ q(578) => [
+ q(0166),
+ q(0),
+ ],
+ q(580) => [
+ q(0165),
+ q(0),
+ ],
+ q(583) => [
+ q(0145),
+ q(1),
+ ],
+ q(584) => [
+ q(0139),
+ q(0),
+ ],
+ q(585) => [
+ q(0169),
+ q(0),
+ ],
+ q(586) => [
+ q(0168),
+ q(0),
+ ],
+ q(591) => [
+ q(0171),
+ q(0),
+ ],
+ q(598) => [
+ q(0172),
+ q(0),
+ ],
+ q(600) => [
+ q(0173),
+ q(0),
+ ],
+ q(604) => [
+ q(0174),
+ q(0),
+ ],
+ q(608) => [
+ q(0175),
+ q(0),
+ ],
+ q(612) => [
+ q(0176),
+ q(0),
+ ],
+ q(616) => [
+ q(0177),
+ q(0),
+ ],
+ q(620) => [
+ q(0178),
+ q(0),
+ ],
+ q(624) => [
+ q(0094),
+ q(0),
+ ],
+ q(626) => [
+ q(0222),
+ q(0),
+ ],
+ q(630) => [
+ q(0179),
+ q(0),
+ ],
+ q(634) => [
+ q(0180),
+ q(0),
+ ],
+ q(638) => [
+ q(0181),
+ q(0),
+ ],
+ q(642) => [
+ q(0182),
+ q(0),
+ ],
+ q(643) => [
+ q(0183),
+ q(0),
+ ],
+ q(646) => [
+ q(0184),
+ q(0),
+ ],
+ q(652) => [
+ q(0185),
+ q(1),
+ ],
+ q(654) => [
+ q(0186),
+ q(1),
+ ],
+ q(659) => [
+ q(0187),
+ q(0),
+ ],
+ q(660) => [
+ q(0008),
+ q(0),
+ ],
+ q(662) => [
+ q(0188),
+ q(0),
+ ],
+ q(663) => [
+ q(0189),
+ q(1),
+ ],
+ q(666) => [
+ q(0190),
+ q(0),
+ ],
+ q(670) => [
+ q(0191),
+ q(0),
+ ],
+ q(674) => [
+ q(0193),
+ q(0),
+ ],
+ q(678) => [
+ q(0194),
+ q(0),
+ ],
+ q(680) => [
+ q(0251),
+ q(0),
+ ],
+ q(682) => [
+ q(0195),
+ q(0),
+ ],
+ q(686) => [
+ q(0196),
+ q(0),
+ ],
+ q(688) => [
+ q(0197),
+ q(0),
+ ],
+ q(690) => [
+ q(0198),
+ q(0),
+ ],
+ q(694) => [
+ q(0199),
+ q(0),
+ ],
+ q(702) => [
+ q(0200),
+ q(0),
+ ],
+ q(703) => [
+ q(0202),
+ q(0),
+ ],
+ q(704) => [
+ q(0242),
+ q(0),
+ ],
+ q(705) => [
+ q(0203),
+ q(0),
+ ],
+ q(706) => [
+ q(0205),
+ q(0),
+ ],
+ q(710) => [
+ q(0206),
+ q(0),
+ ],
+ q(716) => [
+ q(0249),
+ q(0),
+ ],
+ q(724) => [
+ q(0209),
+ q(0),
+ ],
+ q(728) => [
+ q(0208),
+ q(0),
+ ],
+ q(729) => [
+ q(0211),
+ q(0),
+ ],
+ q(732) => [
+ q(0246),
+ q(0),
+ ],
+ q(740) => [
+ q(0212),
+ q(0),
+ ],
+ q(744) => [
+ q(0213),
+ q(1),
+ ],
+ q(748) => [
+ q(0214),
+ q(0),
+ ],
+ q(752) => [
+ q(0215),
+ q(0),
+ ],
+ q(756) => [
+ q(0216),
+ q(0),
+ ],
+ q(760) => [
+ q(0217),
+ q(0),
+ ],
+ q(762) => [
+ q(0219),
+ q(0),
+ ],
+ q(764) => [
+ q(0221),
+ q(0),
+ ],
+ q(768) => [
+ q(0223),
+ q(0),
+ ],
+ q(772) => [
+ q(0224),
+ q(0),
+ ],
+ q(776) => [
+ q(0225),
+ q(0),
+ ],
+ q(780) => [
+ q(0226),
+ q(0),
+ ],
+ q(784) => [
+ q(0234),
+ q(0),
+ ],
+ q(788) => [
+ q(0227),
+ q(0),
+ ],
+ q(792) => [
+ q(0228),
+ q(0),
+ ],
+ q(795) => [
+ q(0229),
+ q(0),
+ ],
+ q(796) => [
+ q(0230),
+ q(0),
+ ],
+ q(798) => [
+ q(0231),
+ q(0),
+ ],
+ q(800) => [
+ q(0232),
+ q(0),
+ ],
+ q(804) => [
+ q(0233),
+ q(0),
+ ],
+ q(807) => [
+ q(0132),
+ q(1),
+ ],
+ q(818) => [
+ q(0066),
+ q(0),
+ ],
+ q(826) => [
+ q(0235),
+ q(1),
+ ],
+ q(830) => [
+ q(0250),
+ q(0),
+ ],
+ q(831) => [
+ q(0092),
+ q(0),
+ ],
+ q(832) => [
+ q(0113),
+ q(0),
+ ],
+ q(833) => [
+ q(0108),
+ q(0),
+ ],
+ q(834) => [
+ q(0220),
+ q(1),
+ ],
+ q(840) => [
+ q(0236),
+ q(1),
+ ],
+ q(850) => [
+ q(0244),
+ q(1),
+ ],
+ q(854) => [
+ q(0036),
+ q(0),
+ ],
+ q(858) => [
+ q(0238),
+ q(0),
+ ],
+ q(860) => [
+ q(0239),
+ q(0),
+ ],
+ q(862) => [
+ q(0241),
+ q(1),
+ ],
+ q(876) => [
+ q(0245),
+ q(1),
+ ],
+ q(882) => [
+ q(0192),
+ q(0),
+ ],
+ q(887) => [
+ q(0247),
+ q(0),
+ ],
+ q(894) => [
+ q(0248),
+ q(0),
+ ],
+ },
+};
+
+$Locale::Codes::Data{'country'}{'id2code'} = {
+ q(alpha-2) => {
+ q(0001) => q(af),
+ q(0002) => q(ax),
+ q(0003) => q(al),
+ q(0004) => q(dz),
+ q(0005) => q(as),
+ q(0006) => q(ad),
+ q(0007) => q(ao),
+ q(0008) => q(ai),
+ q(0009) => q(aq),
+ q(0010) => q(ag),
+ q(0011) => q(ar),
+ q(0012) => q(am),
+ q(0013) => q(aw),
+ q(0014) => q(au),
+ q(0015) => q(at),
+ q(0016) => q(az),
+ q(0017) => q(bs),
+ q(0018) => q(bh),
+ q(0019) => q(bd),
+ q(0020) => q(bb),
+ q(0021) => q(by),
+ q(0022) => q(be),
+ q(0023) => q(bz),
+ q(0024) => q(bj),
+ q(0025) => q(bm),
+ q(0026) => q(bt),
+ q(0027) => q(bo),
+ q(0028) => q(bq),
+ q(0029) => q(ba),
+ q(0030) => q(bw),
+ q(0031) => q(bv),
+ q(0032) => q(br),
+ q(0033) => q(io),
+ q(0034) => q(bn),
+ q(0035) => q(bg),
+ q(0036) => q(bf),
+ q(0037) => q(bi),
+ q(0038) => q(kh),
+ q(0039) => q(cm),
+ q(0040) => q(ca),
+ q(0041) => q(cv),
+ q(0042) => q(ky),
+ q(0043) => q(cf),
+ q(0044) => q(td),
+ q(0045) => q(cl),
+ q(0046) => q(cn),
+ q(0047) => q(cx),
+ q(0048) => q(cc),
+ q(0049) => q(co),
+ q(0050) => q(km),
+ q(0051) => q(cg),
+ q(0052) => q(cd),
+ q(0053) => q(ck),
+ q(0054) => q(cr),
+ q(0055) => q(ci),
+ q(0056) => q(hr),
+ q(0057) => q(cu),
+ q(0058) => q(cw),
+ q(0059) => q(cy),
+ q(0060) => q(cz),
+ q(0061) => q(dk),
+ q(0062) => q(dj),
+ q(0063) => q(dm),
+ q(0064) => q(do),
+ q(0065) => q(ec),
+ q(0066) => q(eg),
+ q(0067) => q(sv),
+ q(0068) => q(gq),
+ q(0069) => q(er),
+ q(0070) => q(ee),
+ q(0071) => q(et),
+ q(0072) => q(fk),
+ q(0073) => q(fo),
+ q(0074) => q(fj),
+ q(0075) => q(fi),
+ q(0076) => q(fr),
+ q(0077) => q(gf),
+ q(0078) => q(pf),
+ q(0079) => q(tf),
+ q(0080) => q(ga),
+ q(0081) => q(gm),
+ q(0082) => q(ge),
+ q(0083) => q(de),
+ q(0084) => q(gh),
+ q(0085) => q(gi),
+ q(0086) => q(gr),
+ q(0087) => q(gl),
+ q(0088) => q(gd),
+ q(0089) => q(gp),
+ q(0090) => q(gu),
+ q(0091) => q(gt),
+ q(0092) => q(gg),
+ q(0093) => q(gn),
+ q(0094) => q(gw),
+ q(0095) => q(gy),
+ q(0096) => q(ht),
+ q(0097) => q(hm),
+ q(0098) => q(va),
+ q(0099) => q(hn),
+ q(0100) => q(hk),
+ q(0101) => q(hu),
+ q(0102) => q(is),
+ q(0103) => q(in),
+ q(0104) => q(id),
+ q(0105) => q(ir),
+ q(0106) => q(iq),
+ q(0107) => q(ie),
+ q(0108) => q(im),
+ q(0109) => q(il),
+ q(0110) => q(it),
+ q(0111) => q(jm),
+ q(0112) => q(jp),
+ q(0113) => q(je),
+ q(0114) => q(jo),
+ q(0115) => q(kz),
+ q(0116) => q(ke),
+ q(0117) => q(ki),
+ q(0118) => q(kp),
+ q(0119) => q(kr),
+ q(0120) => q(kw),
+ q(0121) => q(kg),
+ q(0122) => q(la),
+ q(0123) => q(lv),
+ q(0124) => q(lb),
+ q(0125) => q(ls),
+ q(0126) => q(lr),
+ q(0127) => q(ly),
+ q(0128) => q(li),
+ q(0129) => q(lt),
+ q(0130) => q(lu),
+ q(0131) => q(mo),
+ q(0132) => q(mk),
+ q(0133) => q(mg),
+ q(0134) => q(mw),
+ q(0135) => q(my),
+ q(0136) => q(mv),
+ q(0137) => q(ml),
+ q(0138) => q(mt),
+ q(0139) => q(mh),
+ q(0140) => q(mq),
+ q(0141) => q(mr),
+ q(0142) => q(mu),
+ q(0143) => q(yt),
+ q(0144) => q(mx),
+ q(0145) => q(fm),
+ q(0146) => q(md),
+ q(0147) => q(mc),
+ q(0148) => q(mn),
+ q(0149) => q(me),
+ q(0150) => q(ms),
+ q(0151) => q(ma),
+ q(0152) => q(mz),
+ q(0153) => q(mm),
+ q(0154) => q(na),
+ q(0155) => q(nr),
+ q(0156) => q(np),
+ q(0157) => q(nl),
+ q(0158) => q(nc),
+ q(0159) => q(nz),
+ q(0160) => q(ni),
+ q(0161) => q(ne),
+ q(0162) => q(ng),
+ q(0163) => q(nu),
+ q(0164) => q(nf),
+ q(0165) => q(mp),
+ q(0166) => q(no),
+ q(0167) => q(om),
+ q(0168) => q(pk),
+ q(0169) => q(pw),
+ q(0170) => q(ps),
+ q(0171) => q(pa),
+ q(0172) => q(pg),
+ q(0173) => q(py),
+ q(0174) => q(pe),
+ q(0175) => q(ph),
+ q(0176) => q(pn),
+ q(0177) => q(pl),
+ q(0178) => q(pt),
+ q(0179) => q(pr),
+ q(0180) => q(qa),
+ q(0181) => q(re),
+ q(0182) => q(ro),
+ q(0183) => q(ru),
+ q(0184) => q(rw),
+ q(0185) => q(bl),
+ q(0186) => q(sh),
+ q(0187) => q(kn),
+ q(0188) => q(lc),
+ q(0189) => q(mf),
+ q(0190) => q(pm),
+ q(0191) => q(vc),
+ q(0192) => q(ws),
+ q(0193) => q(sm),
+ q(0194) => q(st),
+ q(0195) => q(sa),
+ q(0196) => q(sn),
+ q(0197) => q(rs),
+ q(0198) => q(sc),
+ q(0199) => q(sl),
+ q(0200) => q(sg),
+ q(0201) => q(sx),
+ q(0202) => q(sk),
+ q(0203) => q(si),
+ q(0204) => q(sb),
+ q(0205) => q(so),
+ q(0206) => q(za),
+ q(0207) => q(gs),
+ q(0208) => q(ss),
+ q(0209) => q(es),
+ q(0210) => q(lk),
+ q(0211) => q(sd),
+ q(0212) => q(sr),
+ q(0213) => q(sj),
+ q(0214) => q(sz),
+ q(0215) => q(se),
+ q(0216) => q(ch),
+ q(0217) => q(sy),
+ q(0218) => q(tw),
+ q(0219) => q(tj),
+ q(0220) => q(tz),
+ q(0221) => q(th),
+ q(0222) => q(tl),
+ q(0223) => q(tg),
+ q(0224) => q(tk),
+ q(0225) => q(to),
+ q(0226) => q(tt),
+ q(0227) => q(tn),
+ q(0228) => q(tr),
+ q(0229) => q(tm),
+ q(0230) => q(tc),
+ q(0231) => q(tv),
+ q(0232) => q(ug),
+ q(0233) => q(ua),
+ q(0234) => q(ae),
+ q(0235) => q(gb),
+ q(0236) => q(us),
+ q(0237) => q(um),
+ q(0238) => q(uy),
+ q(0239) => q(uz),
+ q(0240) => q(vu),
+ q(0241) => q(ve),
+ q(0242) => q(vn),
+ q(0243) => q(vg),
+ q(0244) => q(vi),
+ q(0245) => q(wf),
+ q(0246) => q(eh),
+ q(0247) => q(ye),
+ q(0248) => q(zm),
+ q(0249) => q(zw),
+ },
+ q(alpha-3) => {
+ q(0001) => q(afg),
+ q(0002) => q(ala),
+ q(0003) => q(alb),
+ q(0004) => q(dza),
+ q(0005) => q(asm),
+ q(0006) => q(and),
+ q(0007) => q(ago),
+ q(0008) => q(aia),
+ q(0010) => q(atg),
+ q(0011) => q(arg),
+ q(0012) => q(arm),
+ q(0013) => q(abw),
+ q(0014) => q(aus),
+ q(0015) => q(aut),
+ q(0016) => q(aze),
+ q(0017) => q(bhs),
+ q(0018) => q(bhr),
+ q(0019) => q(bgd),
+ q(0020) => q(brb),
+ q(0021) => q(blr),
+ q(0022) => q(bel),
+ q(0023) => q(blz),
+ q(0024) => q(ben),
+ q(0025) => q(bmu),
+ q(0026) => q(btn),
+ q(0027) => q(bol),
+ q(0028) => q(bes),
+ q(0029) => q(bih),
+ q(0030) => q(bwa),
+ q(0032) => q(bra),
+ q(0034) => q(brn),
+ q(0035) => q(bgr),
+ q(0036) => q(bfa),
+ q(0037) => q(bdi),
+ q(0038) => q(khm),
+ q(0039) => q(cmr),
+ q(0040) => q(can),
+ q(0041) => q(cpv),
+ q(0042) => q(cym),
+ q(0043) => q(caf),
+ q(0044) => q(tcd),
+ q(0045) => q(chl),
+ q(0046) => q(chn),
+ q(0049) => q(col),
+ q(0050) => q(com),
+ q(0051) => q(cog),
+ q(0052) => q(cod),
+ q(0053) => q(cok),
+ q(0054) => q(cri),
+ q(0055) => q(civ),
+ q(0056) => q(hrv),
+ q(0057) => q(cub),
+ q(0058) => q(cuw),
+ q(0059) => q(cyp),
+ q(0060) => q(cze),
+ q(0061) => q(dnk),
+ q(0062) => q(dji),
+ q(0063) => q(dma),
+ q(0064) => q(dom),
+ q(0065) => q(ecu),
+ q(0066) => q(egy),
+ q(0067) => q(slv),
+ q(0068) => q(gnq),
+ q(0069) => q(eri),
+ q(0070) => q(est),
+ q(0071) => q(eth),
+ q(0072) => q(flk),
+ q(0073) => q(fro),
+ q(0074) => q(fji),
+ q(0075) => q(fin),
+ q(0076) => q(fra),
+ q(0077) => q(guf),
+ q(0078) => q(pyf),
+ q(0080) => q(gab),
+ q(0081) => q(gmb),
+ q(0082) => q(geo),
+ q(0083) => q(deu),
+ q(0084) => q(gha),
+ q(0085) => q(gib),
+ q(0086) => q(grc),
+ q(0087) => q(grl),
+ q(0088) => q(grd),
+ q(0089) => q(glp),
+ q(0090) => q(gum),
+ q(0091) => q(gtm),
+ q(0092) => q(ggy),
+ q(0093) => q(gin),
+ q(0094) => q(gnb),
+ q(0095) => q(guy),
+ q(0096) => q(hti),
+ q(0098) => q(vat),
+ q(0099) => q(hnd),
+ q(0100) => q(hkg),
+ q(0101) => q(hun),
+ q(0102) => q(isl),
+ q(0103) => q(ind),
+ q(0104) => q(idn),
+ q(0105) => q(irn),
+ q(0106) => q(irq),
+ q(0107) => q(irl),
+ q(0108) => q(imn),
+ q(0109) => q(isr),
+ q(0110) => q(ita),
+ q(0111) => q(jam),
+ q(0112) => q(jpn),
+ q(0113) => q(jey),
+ q(0114) => q(jor),
+ q(0115) => q(kaz),
+ q(0116) => q(ken),
+ q(0117) => q(kir),
+ q(0118) => q(prk),
+ q(0119) => q(kor),
+ q(0120) => q(kwt),
+ q(0121) => q(kgz),
+ q(0122) => q(lao),
+ q(0123) => q(lva),
+ q(0124) => q(lbn),
+ q(0125) => q(lso),
+ q(0126) => q(lbr),
+ q(0127) => q(lby),
+ q(0128) => q(lie),
+ q(0129) => q(ltu),
+ q(0130) => q(lux),
+ q(0131) => q(mac),
+ q(0132) => q(mkd),
+ q(0133) => q(mdg),
+ q(0134) => q(mwi),
+ q(0135) => q(mys),
+ q(0136) => q(mdv),
+ q(0137) => q(mli),
+ q(0138) => q(mlt),
+ q(0139) => q(mhl),
+ q(0140) => q(mtq),
+ q(0141) => q(mrt),
+ q(0142) => q(mus),
+ q(0143) => q(myt),
+ q(0144) => q(mex),
+ q(0145) => q(fsm),
+ q(0146) => q(mda),
+ q(0147) => q(mco),
+ q(0148) => q(mng),
+ q(0149) => q(mne),
+ q(0150) => q(msr),
+ q(0151) => q(mar),
+ q(0152) => q(moz),
+ q(0153) => q(mmr),
+ q(0154) => q(nam),
+ q(0155) => q(nru),
+ q(0156) => q(npl),
+ q(0157) => q(nld),
+ q(0158) => q(ncl),
+ q(0159) => q(nzl),
+ q(0160) => q(nic),
+ q(0161) => q(ner),
+ q(0162) => q(nga),
+ q(0163) => q(niu),
+ q(0164) => q(nfk),
+ q(0165) => q(mnp),
+ q(0166) => q(nor),
+ q(0167) => q(omn),
+ q(0168) => q(pak),
+ q(0169) => q(plw),
+ q(0170) => q(pse),
+ q(0171) => q(pan),
+ q(0172) => q(png),
+ q(0173) => q(pry),
+ q(0174) => q(per),
+ q(0175) => q(phl),
+ q(0176) => q(pcn),
+ q(0177) => q(pol),
+ q(0178) => q(prt),
+ q(0179) => q(pri),
+ q(0180) => q(qat),
+ q(0181) => q(reu),
+ q(0182) => q(rou),
+ q(0183) => q(rus),
+ q(0184) => q(rwa),
+ q(0185) => q(blm),
+ q(0186) => q(shn),
+ q(0187) => q(kna),
+ q(0188) => q(lca),
+ q(0189) => q(maf),
+ q(0190) => q(spm),
+ q(0191) => q(vct),
+ q(0192) => q(wsm),
+ q(0193) => q(smr),
+ q(0194) => q(stp),
+ q(0195) => q(sau),
+ q(0196) => q(sen),
+ q(0197) => q(srb),
+ q(0198) => q(syc),
+ q(0199) => q(sle),
+ q(0200) => q(sgp),
+ q(0201) => q(sxm),
+ q(0202) => q(svk),
+ q(0203) => q(svn),
+ q(0204) => q(slb),
+ q(0205) => q(som),
+ q(0206) => q(zaf),
+ q(0208) => q(ssd),
+ q(0209) => q(esp),
+ q(0210) => q(lka),
+ q(0211) => q(sdn),
+ q(0212) => q(sur),
+ q(0213) => q(sjm),
+ q(0214) => q(swz),
+ q(0215) => q(swe),
+ q(0216) => q(che),
+ q(0217) => q(syr),
+ q(0219) => q(tjk),
+ q(0220) => q(tza),
+ q(0221) => q(tha),
+ q(0222) => q(tls),
+ q(0223) => q(tgo),
+ q(0224) => q(tkl),
+ q(0225) => q(ton),
+ q(0226) => q(tto),
+ q(0227) => q(tun),
+ q(0228) => q(tur),
+ q(0229) => q(tkm),
+ q(0230) => q(tca),
+ q(0231) => q(tuv),
+ q(0232) => q(uga),
+ q(0233) => q(ukr),
+ q(0234) => q(are),
+ q(0235) => q(gbr),
+ q(0236) => q(usa),
+ q(0238) => q(ury),
+ q(0239) => q(uzb),
+ q(0240) => q(vut),
+ q(0241) => q(ven),
+ q(0242) => q(vnm),
+ q(0243) => q(vgb),
+ q(0244) => q(vir),
+ q(0245) => q(wlf),
+ q(0246) => q(esh),
+ q(0247) => q(yem),
+ q(0248) => q(zmb),
+ q(0249) => q(zwe),
+ },
+ q(dom) => {
+ q(0001) => q(af),
+ q(0002) => q(ax),
+ q(0003) => q(al),
+ q(0004) => q(dz),
+ q(0005) => q(as),
+ q(0006) => q(ad),
+ q(0007) => q(ao),
+ q(0008) => q(ai),
+ q(0009) => q(aq),
+ q(0010) => q(ag),
+ q(0011) => q(ar),
+ q(0012) => q(am),
+ q(0013) => q(aw),
+ q(0014) => q(au),
+ q(0015) => q(at),
+ q(0016) => q(az),
+ q(0017) => q(bs),
+ q(0018) => q(bh),
+ q(0019) => q(bd),
+ q(0020) => q(bb),
+ q(0021) => q(by),
+ q(0022) => q(be),
+ q(0023) => q(bz),
+ q(0024) => q(bj),
+ q(0025) => q(bm),
+ q(0026) => q(bt),
+ q(0027) => q(bo),
+ q(0028) => q(bq),
+ q(0029) => q(ba),
+ q(0030) => q(bw),
+ q(0031) => q(bv),
+ q(0032) => q(br),
+ q(0033) => q(io),
+ q(0034) => q(bn),
+ q(0035) => q(bg),
+ q(0036) => q(bf),
+ q(0037) => q(bi),
+ q(0038) => q(kh),
+ q(0039) => q(cm),
+ q(0040) => q(ca),
+ q(0041) => q(cv),
+ q(0042) => q(ky),
+ q(0043) => q(cf),
+ q(0044) => q(td),
+ q(0045) => q(cl),
+ q(0046) => q(cn),
+ q(0047) => q(cx),
+ q(0048) => q(cc),
+ q(0049) => q(co),
+ q(0050) => q(km),
+ q(0051) => q(cg),
+ q(0052) => q(cd),
+ q(0053) => q(ck),
+ q(0054) => q(cr),
+ q(0055) => q(ci),
+ q(0056) => q(hr),
+ q(0057) => q(cu),
+ q(0058) => q(cw),
+ q(0059) => q(cy),
+ q(0060) => q(cz),
+ q(0061) => q(dk),
+ q(0062) => q(dj),
+ q(0063) => q(dm),
+ q(0064) => q(do),
+ q(0065) => q(ec),
+ q(0066) => q(eg),
+ q(0067) => q(sv),
+ q(0068) => q(gq),
+ q(0069) => q(er),
+ q(0070) => q(ee),
+ q(0071) => q(et),
+ q(0072) => q(fk),
+ q(0073) => q(fo),
+ q(0074) => q(fj),
+ q(0075) => q(fi),
+ q(0076) => q(fr),
+ q(0077) => q(gf),
+ q(0078) => q(pf),
+ q(0079) => q(tf),
+ q(0080) => q(ga),
+ q(0081) => q(gm),
+ q(0082) => q(ge),
+ q(0083) => q(de),
+ q(0084) => q(gh),
+ q(0085) => q(gi),
+ q(0086) => q(gr),
+ q(0087) => q(gl),
+ q(0088) => q(gd),
+ q(0089) => q(gp),
+ q(0090) => q(gu),
+ q(0091) => q(gt),
+ q(0092) => q(gg),
+ q(0093) => q(gn),
+ q(0094) => q(gw),
+ q(0095) => q(gy),
+ q(0096) => q(ht),
+ q(0097) => q(hm),
+ q(0098) => q(va),
+ q(0099) => q(hn),
+ q(0100) => q(hk),
+ q(0101) => q(hu),
+ q(0102) => q(is),
+ q(0103) => q(in),
+ q(0104) => q(id),
+ q(0105) => q(ir),
+ q(0106) => q(iq),
+ q(0107) => q(ie),
+ q(0108) => q(im),
+ q(0109) => q(il),
+ q(0110) => q(it),
+ q(0111) => q(jm),
+ q(0112) => q(jp),
+ q(0113) => q(je),
+ q(0114) => q(jo),
+ q(0115) => q(kz),
+ q(0116) => q(ke),
+ q(0117) => q(ki),
+ q(0118) => q(kp),
+ q(0119) => q(kr),
+ q(0120) => q(kw),
+ q(0121) => q(kg),
+ q(0122) => q(la),
+ q(0123) => q(lv),
+ q(0124) => q(lb),
+ q(0125) => q(ls),
+ q(0126) => q(lr),
+ q(0127) => q(ly),
+ q(0128) => q(li),
+ q(0129) => q(lt),
+ q(0130) => q(lu),
+ q(0131) => q(mo),
+ q(0132) => q(mk),
+ q(0133) => q(mg),
+ q(0134) => q(mw),
+ q(0135) => q(my),
+ q(0136) => q(mv),
+ q(0137) => q(ml),
+ q(0138) => q(mt),
+ q(0139) => q(mh),
+ q(0140) => q(mq),
+ q(0141) => q(mr),
+ q(0142) => q(mu),
+ q(0143) => q(yt),
+ q(0144) => q(mx),
+ q(0145) => q(fm),
+ q(0146) => q(md),
+ q(0147) => q(mc),
+ q(0148) => q(mn),
+ q(0149) => q(me),
+ q(0150) => q(ms),
+ q(0151) => q(ma),
+ q(0152) => q(mz),
+ q(0153) => q(mm),
+ q(0154) => q(na),
+ q(0155) => q(nr),
+ q(0156) => q(np),
+ q(0157) => q(nl),
+ q(0158) => q(nc),
+ q(0159) => q(nz),
+ q(0160) => q(ni),
+ q(0161) => q(ne),
+ q(0162) => q(ng),
+ q(0163) => q(nu),
+ q(0164) => q(nf),
+ q(0165) => q(mp),
+ q(0166) => q(no),
+ q(0167) => q(om),
+ q(0168) => q(pk),
+ q(0169) => q(pw),
+ q(0170) => q(ps),
+ q(0171) => q(pa),
+ q(0172) => q(pg),
+ q(0173) => q(py),
+ q(0174) => q(pe),
+ q(0175) => q(ph),
+ q(0176) => q(pn),
+ q(0177) => q(pl),
+ q(0178) => q(pt),
+ q(0179) => q(pr),
+ q(0180) => q(qa),
+ q(0181) => q(re),
+ q(0182) => q(ro),
+ q(0183) => q(ru),
+ q(0184) => q(rw),
+ q(0185) => q(bl),
+ q(0186) => q(sh),
+ q(0187) => q(kn),
+ q(0188) => q(lc),
+ q(0189) => q(mf),
+ q(0190) => q(pm),
+ q(0191) => q(vc),
+ q(0192) => q(ws),
+ q(0193) => q(sm),
+ q(0194) => q(st),
+ q(0195) => q(sa),
+ q(0196) => q(sn),
+ q(0197) => q(rs),
+ q(0198) => q(sc),
+ q(0199) => q(sl),
+ q(0200) => q(sg),
+ q(0201) => q(sx),
+ q(0202) => q(sk),
+ q(0203) => q(si),
+ q(0204) => q(sb),
+ q(0205) => q(so),
+ q(0206) => q(za),
+ q(0207) => q(gs),
+ q(0208) => q(ss),
+ q(0209) => q(es),
+ q(0210) => q(lk),
+ q(0211) => q(sd),
+ q(0212) => q(sr),
+ q(0213) => q(sj),
+ q(0214) => q(sz),
+ q(0215) => q(se),
+ q(0216) => q(ch),
+ q(0217) => q(sy),
+ q(0218) => q(tw),
+ q(0219) => q(tj),
+ q(0220) => q(tz),
+ q(0221) => q(th),
+ q(0222) => q(tp),
+ q(0223) => q(tg),
+ q(0224) => q(tk),
+ q(0225) => q(to),
+ q(0226) => q(tt),
+ q(0227) => q(tn),
+ q(0228) => q(tr),
+ q(0229) => q(tm),
+ q(0230) => q(tc),
+ q(0231) => q(tv),
+ q(0232) => q(ug),
+ q(0233) => q(ua),
+ q(0234) => q(ae),
+ q(0235) => q(uk),
+ q(0236) => q(us),
+ q(0237) => q(um),
+ q(0238) => q(uy),
+ q(0239) => q(uz),
+ q(0240) => q(vu),
+ q(0241) => q(ve),
+ q(0242) => q(vn),
+ q(0243) => q(vg),
+ q(0244) => q(vi),
+ q(0245) => q(wf),
+ q(0246) => q(eh),
+ q(0247) => q(ye),
+ q(0248) => q(zm),
+ q(0249) => q(zw),
+ q(0290) => q(ac),
+ q(0291) => q(an),
+ q(0292) => q(eu),
+ q(0293) => q(su),
+ },
+ q(fips-10) => {
+ q(0001) => q(AF),
+ q(0003) => q(AL),
+ q(0004) => q(AG),
+ q(0005) => q(AQ),
+ q(0006) => q(AN),
+ q(0007) => q(AO),
+ q(0008) => q(AV),
+ q(0009) => q(AY),
+ q(0010) => q(AC),
+ q(0011) => q(AR),
+ q(0012) => q(AM),
+ q(0013) => q(AA),
+ q(0014) => q(AS),
+ q(0015) => q(AU),
+ q(0016) => q(AJ),
+ q(0017) => q(BF),
+ q(0018) => q(BA),
+ q(0019) => q(BG),
+ q(0020) => q(BB),
+ q(0021) => q(BO),
+ q(0022) => q(BE),
+ q(0023) => q(BH),
+ q(0024) => q(BN),
+ q(0025) => q(BD),
+ q(0026) => q(BT),
+ q(0027) => q(BL),
+ q(0029) => q(BK),
+ q(0030) => q(BC),
+ q(0031) => q(BV),
+ q(0032) => q(BR),
+ q(0033) => q(IO),
+ q(0034) => q(BX),
+ q(0035) => q(BU),
+ q(0036) => q(UV),
+ q(0037) => q(BY),
+ q(0038) => q(CB),
+ q(0039) => q(CM),
+ q(0040) => q(CA),
+ q(0041) => q(CV),
+ q(0042) => q(CJ),
+ q(0043) => q(CT),
+ q(0044) => q(CD),
+ q(0045) => q(CI),
+ q(0046) => q(CH),
+ q(0047) => q(KT),
+ q(0048) => q(CK),
+ q(0049) => q(CO),
+ q(0050) => q(CN),
+ q(0051) => q(CF),
+ q(0053) => q(CW),
+ q(0054) => q(CS),
+ q(0055) => q(IV),
+ q(0056) => q(HR),
+ q(0057) => q(CU),
+ q(0058) => q(UC),
+ q(0059) => q(CY),
+ q(0060) => q(EZ),
+ q(0061) => q(DA),
+ q(0062) => q(DJ),
+ q(0063) => q(DO),
+ q(0064) => q(DR),
+ q(0065) => q(EC),
+ q(0066) => q(EG),
+ q(0067) => q(ES),
+ q(0068) => q(EK),
+ q(0069) => q(ER),
+ q(0070) => q(EN),
+ q(0071) => q(ET),
+ q(0072) => q(FK),
+ q(0073) => q(FO),
+ q(0074) => q(FJ),
+ q(0075) => q(FI),
+ q(0076) => q(FR),
+ q(0077) => q(FG),
+ q(0078) => q(FP),
+ q(0079) => q(FS),
+ q(0080) => q(GB),
+ q(0081) => q(GA),
+ q(0082) => q(GG),
+ q(0083) => q(GM),
+ q(0084) => q(GH),
+ q(0085) => q(GI),
+ q(0086) => q(GR),
+ q(0087) => q(GL),
+ q(0088) => q(GJ),
+ q(0089) => q(GP),
+ q(0090) => q(GQ),
+ q(0091) => q(GT),
+ q(0092) => q(GK),
+ q(0093) => q(GV),
+ q(0094) => q(PU),
+ q(0095) => q(GY),
+ q(0096) => q(HA),
+ q(0098) => q(VT),
+ q(0099) => q(HO),
+ q(0100) => q(HK),
+ q(0101) => q(HU),
+ q(0102) => q(IC),
+ q(0103) => q(IN),
+ q(0104) => q(ID),
+ q(0105) => q(IR),
+ q(0106) => q(IZ),
+ q(0107) => q(EI),
+ q(0108) => q(IM),
+ q(0109) => q(IS),
+ q(0110) => q(IT),
+ q(0111) => q(JM),
+ q(0112) => q(JA),
+ q(0113) => q(JE),
+ q(0114) => q(JO),
+ q(0115) => q(KZ),
+ q(0116) => q(KE),
+ q(0117) => q(KR),
+ q(0120) => q(KU),
+ q(0121) => q(KG),
+ q(0123) => q(LG),
+ q(0124) => q(LE),
+ q(0125) => q(LT),
+ q(0126) => q(LI),
+ q(0127) => q(LY),
+ q(0128) => q(LS),
+ q(0129) => q(LH),
+ q(0130) => q(LU),
+ q(0131) => q(MC),
+ q(0132) => q(MK),
+ q(0133) => q(MA),
+ q(0134) => q(MI),
+ q(0135) => q(MY),
+ q(0136) => q(MV),
+ q(0137) => q(ML),
+ q(0138) => q(MT),
+ q(0139) => q(RM),
+ q(0140) => q(MB),
+ q(0141) => q(MR),
+ q(0142) => q(MP),
+ q(0143) => q(MF),
+ q(0144) => q(MX),
+ q(0145) => q(FM),
+ q(0147) => q(MN),
+ q(0148) => q(MG),
+ q(0149) => q(MJ),
+ q(0150) => q(MH),
+ q(0151) => q(MO),
+ q(0152) => q(MZ),
+ q(0153) => q(BM),
+ q(0154) => q(WA),
+ q(0155) => q(NR),
+ q(0156) => q(NP),
+ q(0157) => q(NL),
+ q(0158) => q(NC),
+ q(0159) => q(NZ),
+ q(0160) => q(NU),
+ q(0161) => q(NG),
+ q(0162) => q(NI),
+ q(0163) => q(NE),
+ q(0164) => q(NF),
+ q(0165) => q(CQ),
+ q(0166) => q(NO),
+ q(0167) => q(MU),
+ q(0168) => q(PK),
+ q(0169) => q(PS),
+ q(0171) => q(PM),
+ q(0172) => q(PP),
+ q(0173) => q(PA),
+ q(0174) => q(PE),
+ q(0175) => q(RP),
+ q(0176) => q(PC),
+ q(0177) => q(PL),
+ q(0178) => q(PO),
+ q(0179) => q(RQ),
+ q(0180) => q(QA),
+ q(0181) => q(RE),
+ q(0182) => q(RO),
+ q(0184) => q(RW),
+ q(0185) => q(TB),
+ q(0187) => q(SC),
+ q(0188) => q(ST),
+ q(0189) => q(RN),
+ q(0190) => q(SB),
+ q(0191) => q(VC),
+ q(0192) => q(WS),
+ q(0193) => q(SM),
+ q(0194) => q(TP),
+ q(0195) => q(SA),
+ q(0196) => q(SG),
+ q(0197) => q(RI),
+ q(0198) => q(SE),
+ q(0199) => q(SL),
+ q(0200) => q(SN),
+ q(0202) => q(LO),
+ q(0203) => q(SI),
+ q(0204) => q(BP),
+ q(0205) => q(SO),
+ q(0206) => q(SF),
+ q(0208) => q(OD),
+ q(0209) => q(SP),
+ q(0210) => q(CE),
+ q(0211) => q(SU),
+ q(0212) => q(NS),
+ q(0214) => q(WZ),
+ q(0215) => q(SW),
+ q(0216) => q(SZ),
+ q(0217) => q(SY),
+ q(0218) => q(TW),
+ q(0219) => q(TI),
+ q(0221) => q(TH),
+ q(0222) => q(TT),
+ q(0223) => q(TO),
+ q(0224) => q(TL),
+ q(0225) => q(TN),
+ q(0226) => q(TD),
+ q(0227) => q(TS),
+ q(0228) => q(TU),
+ q(0229) => q(TX),
+ q(0230) => q(TK),
+ q(0231) => q(TV),
+ q(0232) => q(UG),
+ q(0233) => q(UP),
+ q(0234) => q(AE),
+ q(0235) => q(UK),
+ q(0236) => q(US),
+ q(0238) => q(UY),
+ q(0239) => q(UZ),
+ q(0240) => q(NH),
+ q(0241) => q(VE),
+ q(0242) => q(VM),
+ q(0243) => q(VI),
+ q(0244) => q(VQ),
+ q(0245) => q(WF),
+ q(0246) => q(WI),
+ q(0247) => q(YM),
+ q(0248) => q(ZA),
+ q(0249) => q(ZI),
+ q(0252) => q(AX),
+ q(0253) => q(AT),
+ q(0254) => q(FQ),
+ q(0255) => q(BS),
+ q(0256) => q(IP),
+ q(0257) => q(CG),
+ q(0258) => q(CR),
+ q(0259) => q(DX),
+ q(0260) => q(PJ),
+ q(0261) => q(EU),
+ q(0262) => q(GZ),
+ q(0263) => q(GO),
+ q(0264) => q(HM),
+ q(0265) => q(HQ),
+ q(0266) => q(JN),
+ q(0267) => q(DQ),
+ q(0268) => q(JQ),
+ q(0269) => q(JU),
+ q(0270) => q(KQ),
+ q(0271) => q(KN),
+ q(0272) => q(KS),
+ q(0273) => q(KV),
+ q(0274) => q(LA),
+ q(0275) => q(MQ),
+ q(0276) => q(MD),
+ q(0277) => q(BQ),
+ q(0278) => q(LQ),
+ q(0279) => q(PF),
+ q(0280) => q(RS),
+ q(0281) => q(SH),
+ q(0282) => q(NN),
+ q(0283) => q(SX),
+ q(0284) => q(PG),
+ q(0285) => q(SV),
+ q(0286) => q(TZ),
+ q(0287) => q(TE),
+ q(0288) => q(WQ),
+ q(0289) => q(WE),
+ },
+ q(numeric) => {
+ q(0001) => q(004),
+ q(0002) => q(248),
+ q(0003) => q(008),
+ q(0004) => q(012),
+ q(0005) => q(016),
+ q(0006) => q(020),
+ q(0007) => q(024),
+ q(0008) => q(660),
+ q(0010) => q(028),
+ q(0011) => q(032),
+ q(0012) => q(051),
+ q(0013) => q(533),
+ q(0014) => q(036),
+ q(0015) => q(040),
+ q(0016) => q(031),
+ q(0017) => q(044),
+ q(0018) => q(048),
+ q(0019) => q(050),
+ q(0020) => q(052),
+ q(0021) => q(112),
+ q(0022) => q(056),
+ q(0023) => q(084),
+ q(0024) => q(204),
+ q(0025) => q(060),
+ q(0026) => q(064),
+ q(0027) => q(068),
+ q(0028) => q(535),
+ q(0029) => q(070),
+ q(0030) => q(072),
+ q(0032) => q(076),
+ q(0034) => q(096),
+ q(0035) => q(100),
+ q(0036) => q(854),
+ q(0037) => q(108),
+ q(0038) => q(116),
+ q(0039) => q(120),
+ q(0040) => q(124),
+ q(0041) => q(132),
+ q(0042) => q(136),
+ q(0043) => q(140),
+ q(0044) => q(148),
+ q(0045) => q(152),
+ q(0046) => q(156),
+ q(0049) => q(170),
+ q(0050) => q(174),
+ q(0051) => q(178),
+ q(0052) => q(180),
+ q(0053) => q(184),
+ q(0054) => q(188),
+ q(0055) => q(384),
+ q(0056) => q(191),
+ q(0057) => q(192),
+ q(0058) => q(531),
+ q(0059) => q(196),
+ q(0060) => q(203),
+ q(0061) => q(208),
+ q(0062) => q(262),
+ q(0063) => q(212),
+ q(0064) => q(214),
+ q(0065) => q(218),
+ q(0066) => q(818),
+ q(0067) => q(222),
+ q(0068) => q(226),
+ q(0069) => q(232),
+ q(0070) => q(233),
+ q(0071) => q(231),
+ q(0072) => q(238),
+ q(0073) => q(234),
+ q(0074) => q(242),
+ q(0075) => q(246),
+ q(0076) => q(250),
+ q(0077) => q(254),
+ q(0078) => q(258),
+ q(0080) => q(266),
+ q(0081) => q(270),
+ q(0082) => q(268),
+ q(0083) => q(276),
+ q(0084) => q(288),
+ q(0085) => q(292),
+ q(0086) => q(300),
+ q(0087) => q(304),
+ q(0088) => q(308),
+ q(0089) => q(312),
+ q(0090) => q(316),
+ q(0091) => q(320),
+ q(0092) => q(831),
+ q(0093) => q(324),
+ q(0094) => q(624),
+ q(0095) => q(328),
+ q(0096) => q(332),
+ q(0098) => q(336),
+ q(0099) => q(340),
+ q(0100) => q(344),
+ q(0101) => q(348),
+ q(0102) => q(352),
+ q(0103) => q(356),
+ q(0104) => q(360),
+ q(0105) => q(364),
+ q(0106) => q(368),
+ q(0107) => q(372),
+ q(0108) => q(833),
+ q(0109) => q(376),
+ q(0110) => q(380),
+ q(0111) => q(388),
+ q(0112) => q(392),
+ q(0113) => q(832),
+ q(0114) => q(400),
+ q(0115) => q(398),
+ q(0116) => q(404),
+ q(0117) => q(296),
+ q(0118) => q(408),
+ q(0119) => q(410),
+ q(0120) => q(414),
+ q(0121) => q(417),
+ q(0122) => q(418),
+ q(0123) => q(428),
+ q(0124) => q(422),
+ q(0125) => q(426),
+ q(0126) => q(430),
+ q(0127) => q(434),
+ q(0128) => q(438),
+ q(0129) => q(440),
+ q(0130) => q(442),
+ q(0131) => q(446),
+ q(0132) => q(807),
+ q(0133) => q(450),
+ q(0134) => q(454),
+ q(0135) => q(458),
+ q(0136) => q(462),
+ q(0137) => q(466),
+ q(0138) => q(470),
+ q(0139) => q(584),
+ q(0140) => q(474),
+ q(0141) => q(478),
+ q(0142) => q(480),
+ q(0143) => q(175),
+ q(0144) => q(484),
+ q(0145) => q(583),
+ q(0146) => q(498),
+ q(0147) => q(492),
+ q(0148) => q(496),
+ q(0149) => q(499),
+ q(0150) => q(500),
+ q(0151) => q(504),
+ q(0152) => q(508),
+ q(0153) => q(104),
+ q(0154) => q(516),
+ q(0155) => q(520),
+ q(0156) => q(524),
+ q(0157) => q(528),
+ q(0158) => q(540),
+ q(0159) => q(554),
+ q(0160) => q(558),
+ q(0161) => q(562),
+ q(0162) => q(566),
+ q(0163) => q(570),
+ q(0164) => q(574),
+ q(0165) => q(580),
+ q(0166) => q(578),
+ q(0167) => q(512),
+ q(0168) => q(586),
+ q(0169) => q(585),
+ q(0170) => q(275),
+ q(0171) => q(591),
+ q(0172) => q(598),
+ q(0173) => q(600),
+ q(0174) => q(604),
+ q(0175) => q(608),
+ q(0176) => q(612),
+ q(0177) => q(616),
+ q(0178) => q(620),
+ q(0179) => q(630),
+ q(0180) => q(634),
+ q(0181) => q(638),
+ q(0182) => q(642),
+ q(0183) => q(643),
+ q(0184) => q(646),
+ q(0185) => q(652),
+ q(0186) => q(654),
+ q(0187) => q(659),
+ q(0188) => q(662),
+ q(0189) => q(663),
+ q(0190) => q(666),
+ q(0191) => q(670),
+ q(0192) => q(882),
+ q(0193) => q(674),
+ q(0194) => q(678),
+ q(0195) => q(682),
+ q(0196) => q(686),
+ q(0197) => q(688),
+ q(0198) => q(690),
+ q(0199) => q(694),
+ q(0200) => q(702),
+ q(0201) => q(534),
+ q(0202) => q(703),
+ q(0203) => q(705),
+ q(0204) => q(090),
+ q(0205) => q(706),
+ q(0206) => q(710),
+ q(0208) => q(728),
+ q(0209) => q(724),
+ q(0210) => q(144),
+ q(0211) => q(729),
+ q(0212) => q(740),
+ q(0213) => q(744),
+ q(0214) => q(748),
+ q(0215) => q(752),
+ q(0216) => q(756),
+ q(0217) => q(760),
+ q(0219) => q(762),
+ q(0220) => q(834),
+ q(0221) => q(764),
+ q(0222) => q(626),
+ q(0223) => q(768),
+ q(0224) => q(772),
+ q(0225) => q(776),
+ q(0226) => q(780),
+ q(0227) => q(788),
+ q(0228) => q(792),
+ q(0229) => q(795),
+ q(0230) => q(796),
+ q(0231) => q(798),
+ q(0232) => q(800),
+ q(0233) => q(804),
+ q(0234) => q(784),
+ q(0235) => q(826),
+ q(0236) => q(840),
+ q(0238) => q(858),
+ q(0239) => q(860),
+ q(0240) => q(548),
+ q(0241) => q(862),
+ q(0242) => q(704),
+ q(0243) => q(092),
+ q(0244) => q(850),
+ q(0245) => q(876),
+ q(0246) => q(732),
+ q(0247) => q(887),
+ q(0248) => q(894),
+ q(0249) => q(716),
+ q(0250) => q(830),
+ q(0251) => q(680),
+ },
+};
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country_Retired.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country_Retired.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Country_Retired.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,702 @@
+package Locale::Codes::Country_Retired;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'deprecate_codes' is run.
+# Generated on: Wed Feb 27 10:06:46 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::Country_Retired - retired country codes for the Locale::Codes::Country module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::Country module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Retired{'country'}{'alpha-2'}{'code'} = {
+ q(an) => q(Netherlands Antilles),
+ q(cs) => q(Serbia and Montenegro),
+ q(fx) => q(France, Metropolitan),
+ q(tp) => q(East Timor),
+ q(yu) => q(Yugoslavia),
+ q(zr) => q(Zaire),
+};
+
+$Locale::Codes::Retired{'country'}{'alpha-3'}{'code'} = {
+ q(ant) => q(Netherlands Antilles),
+ q(ata) => q(Antarctica),
+ q(atf) => q(French Southern and Antarctic Lands),
+ q(bvt) => q(Bouvet Island),
+ q(cck) => q(Cocos (Keeling) Islands),
+ q(cxr) => q(Christmas Island),
+ q(fxx) => q(France, Metropolitan),
+ q(hmd) => q(Heard Island and Mcdonald Islands),
+ q(iot) => q(British Indian Ocean Territory),
+ q(rom) => q(Romania),
+ q(scg) => q(Serbia and Montenegro),
+ q(sgs) => q(South Georgia and the Islands),
+ q(tmp) => q(East Timor),
+ q(twn) => q(Taiwan),
+ q(umi) => q(United States Minor Outlying Islands),
+ q(yug) => q(Yugoslavia),
+ q(zar) => q(Zaire),
+};
+
+$Locale::Codes::Retired{'country'}{'dom'}{'code'} = {
+ q(AC) => q(Ascension Island),
+ q(AD) => q(Andorra),
+ q(AE) => q(United Arab Emirates),
+ q(AF) => q(Afghanistan),
+ q(AG) => q(Antigua and Barbuda),
+ q(AI) => q(Anguilla),
+ q(AL) => q(Albania),
+ q(AM) => q(Armenia),
+ q(AN) => q(Netherlands Antilles),
+ q(AO) => q(Angola),
+ q(AQ) => q(Antarctica),
+ q(AR) => q(Argentina),
+ q(AS) => q(American Samoa),
+ q(AT) => q(Austria),
+ q(AU) => q(Australia),
+ q(AW) => q(Aruba),
+ q(AX) => q(Aland Islands),
+ q(AZ) => q(Azerbaijan),
+ q(BA) => q(Bosnia and Herzegovina),
+ q(BB) => q(Barbados),
+ q(BD) => q(Bangladesh),
+ q(BE) => q(Belgium),
+ q(BF) => q(Burkina Faso),
+ q(BG) => q(Bulgaria),
+ q(BH) => q(Bahrain),
+ q(BI) => q(Burundi),
+ q(BJ) => q(Benin),
+ q(BL) => q(Saint Barthelemy),
+ q(BM) => q(Bermuda),
+ q(BN) => q(Brunei Darussalam),
+ q(BO) => q(Bolivia, Plurinational State of),
+ q(BQ) => q(Bonaire, Sint Eustatius and Saba),
+ q(BR) => q(Brazil),
+ q(BS) => q(Bahamas),
+ q(BT) => q(Bhutan),
+ q(BV) => q(Bouvet Island),
+ q(BW) => q(Botswana),
+ q(BY) => q(Belarus),
+ q(BZ) => q(Belize),
+ q(CA) => q(Canada),
+ q(CC) => q(Cocos (Keeling) Islands),
+ q(CD) => q(Congo, The Democratic Republic of the),
+ q(CF) => q(Central African Republic),
+ q(CG) => q(Congo),
+ q(CH) => q(Switzerland),
+ q(CI) => q(Cote d'Ivoire),
+ q(CK) => q(Cook Islands),
+ q(CL) => q(Chile),
+ q(CM) => q(Cameroon),
+ q(CN) => q(China),
+ q(CO) => q(Colombia),
+ q(CR) => q(Costa Rica),
+ q(CU) => q(Cuba),
+ q(CV) => q(Cape Verde),
+ q(CW) => q(Curacao),
+ q(CX) => q(Christmas Island),
+ q(CY) => q(Cyprus),
+ q(CZ) => q(Czech Republic),
+ q(DE) => q(Germany),
+ q(DJ) => q(Djibouti),
+ q(DK) => q(Denmark),
+ q(DM) => q(Dominica),
+ q(DO) => q(Dominican Republic),
+ q(DZ) => q(Algeria),
+ q(EC) => q(Ecuador),
+ q(EE) => q(Estonia),
+ q(EG) => q(Egypt),
+ q(EH) => q(Western Sahara),
+ q(ER) => q(Eritrea),
+ q(ES) => q(Spain),
+ q(ET) => q(Ethiopia),
+ q(EU) => q(European Union),
+ q(FI) => q(Finland),
+ q(FJ) => q(Fiji),
+ q(FK) => q(Falkland Islands (Malvinas)),
+ q(FM) => q(Micronesia, Federated States of),
+ q(FO) => q(Faroe Islands),
+ q(FR) => q(France),
+ q(FX) => q(France, Metropolitan),
+ q(GA) => q(Gabon),
+ q(GB) => q(United Kingdom),
+ q(GD) => q(Grenada),
+ q(GE) => q(Georgia),
+ q(GF) => q(French Guiana),
+ q(GG) => q(Guernsey),
+ q(GH) => q(Ghana),
+ q(GI) => q(Gibraltar),
+ q(GL) => q(Greenland),
+ q(GM) => q(Gambia),
+ q(GN) => q(Guinea),
+ q(GP) => q(Guadeloupe),
+ q(GQ) => q(Equatorial Guinea),
+ q(GR) => q(Greece),
+ q(GS) => q(South Georgia and the South Sandwich Islands),
+ q(GT) => q(Guatemala),
+ q(GU) => q(Guam),
+ q(GW) => q(Guinea-Bissau),
+ q(GY) => q(Guyana),
+ q(HK) => q(Hong Kong),
+ q(HM) => q(Heard Island and Mcdonald Islands),
+ q(HN) => q(Honduras),
+ q(HR) => q(Croatia),
+ q(HT) => q(Haiti),
+ q(HU) => q(Hungary),
+ q(ID) => q(Indonesia),
+ q(IE) => q(Ireland),
+ q(IL) => q(Israel),
+ q(IM) => q(Isle of Man),
+ q(IN) => q(India),
+ q(IO) => q(British Indian Ocean Territory),
+ q(IQ) => q(Iraq),
+ q(IR) => q(Iran, Islamic Republic of),
+ q(IS) => q(Iceland),
+ q(IT) => q(Italy),
+ q(JE) => q(Jersey),
+ q(JM) => q(Jamaica),
+ q(JO) => q(Jordan),
+ q(JP) => q(Japan),
+ q(KE) => q(Kenya),
+ q(KG) => q(Kyrgyzstan),
+ q(KH) => q(Cambodia),
+ q(KI) => q(Kiribati),
+ q(KM) => q(Comoros),
+ q(KN) => q(Saint Kitts and Nevis),
+ q(KP) => q(Korea, Democratic People's Republic of),
+ q(KR) => q(Korea, Republic of),
+ q(KW) => q(Kuwait),
+ q(KY) => q(Cayman Islands),
+ q(KZ) => q(Kazakhstan),
+ q(LA) => q(Lao People's Democratic Republic),
+ q(LB) => q(Lebanon),
+ q(LC) => q(Saint Lucia),
+ q(LI) => q(Liechtenstein),
+ q(LK) => q(Sri Lanka),
+ q(LR) => q(Liberia),
+ q(LS) => q(Lesotho),
+ q(LT) => q(Lithuania),
+ q(LU) => q(Luxembourg),
+ q(LV) => q(Latvia),
+ q(LY) => q(Libya),
+ q(MA) => q(Morocco),
+ q(MC) => q(Monaco),
+ q(MD) => q(Moldova, Republic of),
+ q(ME) => q(Montenegro),
+ q(MF) => q(Saint Martin (French part)),
+ q(MG) => q(Madagascar),
+ q(MH) => q(Marshall Islands),
+ q(MK) => q(Macedonia, The Former Yugoslav Republic of),
+ q(ML) => q(Mali),
+ q(MM) => q(Myanmar),
+ q(MN) => q(Mongolia),
+ q(MO) => q(Macao),
+ q(MP) => q(Northern Mariana Islands),
+ q(MQ) => q(Martinique),
+ q(MR) => q(Mauritania),
+ q(MS) => q(Montserrat),
+ q(MT) => q(Malta),
+ q(MU) => q(Mauritius),
+ q(MV) => q(Maldives),
+ q(MW) => q(Malawi),
+ q(MX) => q(Mexico),
+ q(MY) => q(Malaysia),
+ q(MZ) => q(Mozambique),
+ q(NA) => q(Namibia),
+ q(NC) => q(New Caledonia),
+ q(NE) => q(Niger),
+ q(NF) => q(Norfolk Island),
+ q(NG) => q(Nigeria),
+ q(NI) => q(Nicaragua),
+ q(NL) => q(Netherlands),
+ q(NO) => q(Norway),
+ q(NP) => q(Nepal),
+ q(NR) => q(Nauru),
+ q(NU) => q(Niue),
+ q(NZ) => q(New Zealand),
+ q(OM) => q(Oman),
+ q(PA) => q(Panama),
+ q(PE) => q(Peru),
+ q(PF) => q(French Polynesia),
+ q(PG) => q(Papua New Guinea),
+ q(PH) => q(Philippines),
+ q(PK) => q(Pakistan),
+ q(PL) => q(Poland),
+ q(PM) => q(Saint Pierre and Miquelon),
+ q(PN) => q(Pitcairn),
+ q(PR) => q(Puerto Rico),
+ q(PS) => q(Palestinian Territory, Occupied),
+ q(PT) => q(Portugal),
+ q(PW) => q(Palau),
+ q(PY) => q(Paraguay),
+ q(QA) => q(Qatar),
+ q(RE) => q(Reunion),
+ q(RO) => q(Romania),
+ q(RS) => q(Serbia),
+ q(RU) => q(Russian Federation),
+ q(RW) => q(Rwanda),
+ q(SA) => q(Saudi Arabia),
+ q(SB) => q(Solomon Islands),
+ q(SC) => q(Seychelles),
+ q(SD) => q(Sudan),
+ q(SE) => q(Sweden),
+ q(SG) => q(Singapore),
+ q(SH) => q(Saint Helena, Ascension and Tristan da Cunha),
+ q(SI) => q(Slovenia),
+ q(SJ) => q(Svalbard and Jan Mayen),
+ q(SK) => q(Slovakia),
+ q(SL) => q(Sierra Leone),
+ q(SM) => q(San Marino),
+ q(SN) => q(Senegal),
+ q(SO) => q(Somalia),
+ q(SR) => q(Suriname),
+ q(SS) => q(South Sudan),
+ q(ST) => q(Sao Tome and Principe),
+ q(SU) => q(Soviet Union),
+ q(SV) => q(El Salvador),
+ q(SX) => q(Sint Maarten (Dutch part)),
+ q(SY) => q(Syrian Arab Republic),
+ q(SZ) => q(Swaziland),
+ q(TC) => q(Turks and Caicos Islands),
+ q(TD) => q(Chad),
+ q(TF) => q(French Southern Territories),
+ q(TG) => q(Togo),
+ q(TH) => q(Thailand),
+ q(TJ) => q(Tajikistan),
+ q(TK) => q(Tokelau),
+ q(TL) => q(Timor-Leste),
+ q(TM) => q(Turkmenistan),
+ q(TN) => q(Tunisia),
+ q(TO) => q(Tonga),
+ q(TP) => q(Portuguese Timor),
+ q(TR) => q(Turkey),
+ q(TT) => q(Trinidad and Tobago),
+ q(TV) => q(Tuvalu),
+ q(TW) => q(Taiwan, Province of China),
+ q(TZ) => q(Tanzania, United Republic of),
+ q(UA) => q(Ukraine),
+ q(UG) => q(Uganda),
+ q(UK) => q(United Kingdom),
+ q(UM) => q(United States Minor Outlying Islands),
+ q(US) => q(United States),
+ q(UY) => q(Uruguay),
+ q(UZ) => q(Uzbekistan),
+ q(VA) => q(Holy See (Vatican City State)),
+ q(VC) => q(Saint Vincent and the Grenadines),
+ q(VE) => q(Venezuela, Bolivarian Republic of),
+ q(VG) => q(Virgin Islands, British),
+ q(VI) => q(Virgin Islands, U.S.),
+ q(VN) => q(Viet Nam),
+ q(VU) => q(Vanuatu),
+ q(WF) => q(Wallis and Futuna),
+ q(WS) => q(Samoa),
+ q(YE) => q(Yemen),
+ q(YT) => q(Mayotte),
+ q(YU) => q(Yugoslavia ),
+ q(ZA) => q(South Africa),
+ q(ZM) => q(Zambia),
+ q(ZW) => q(Zimbabwe),
+};
+
+$Locale::Codes::Retired{'country'}{'fips-10'}{'code'} = {
+ q(KV) => q(Kosovo),
+ q(MJ) => q(Montenegro),
+ q(NN) => q(Sint Maarten),
+ q(NT) => q(Netherlands Antilles),
+ q(RI) => q(Serbia),
+ q(RN) => q(Saint Martin),
+ q(TB) => q(Saint Barthelemy),
+ q(UC) => q(Curacao),
+ q(YI) => q(Serbia and Montenegro),
+};
+
+$Locale::Codes::Retired{'country'}{'numeric'}{'code'} = {
+ q(010) => q(Antarctica),
+ q(074) => q(Bouvet Island),
+ q(086) => q(British Indian Ocean Territory),
+ q(158) => q(Taiwan),
+ q(162) => q(Christmas Island),
+ q(166) => q(Cocos (Keeling) Islands),
+ q(239) => q(South Georgia and the Islands),
+ q(249) => q(France, Metropolitan),
+ q(260) => q(French Southern and Antarctic Lands),
+ q(334) => q(Heard Island and Mcdonald Islands),
+ q(530) => q(Netherlands Antilles),
+ q(581) => q(United States Minor Outlying Islands),
+ q(736) => q(Sudan),
+ q(891) => q(Serbia and Montenegro),
+};
+
+$Locale::Codes::Retired{'country'}{'alpha-2'}{'name'} = {
+ q(bolivia) => [ q(bo), q(Bolivia) ],
+ q(bosnia and herzegowina) => [ q(ba), q(Bosnia and Herzegowina) ],
+ q(east timor) => [ q(tl), q(East Timor) ],
+ q(france, metropolitan) => [ q(fx), q(France, Metropolitan) ],
+ q(heard and mc donald islands) => [ q(hm), q(Heard and Mc Donald Islands) ],
+ q(iran (islamic republic of)) => [ q(ir), q(Iran (Islamic Republic of)) ],
+ q(kazakstan) => [ q(kz), q(Kazakstan) ],
+ q(libyan arab jamahiriya) => [ q(ly), q(Libyan Arab Jamahiriya) ],
+ q(macau) => [ q(mo), q(Macau) ],
+ q(micronesia (federated states of)) => [ q(fm), q(Micronesia (Federated States of)) ],
+ q(netherlands antilles) => [ q(an), q(Netherlands Antilles) ],
+ q(saint helena) => [ q(sh), q(Saint Helena) ],
+ q(saint martin) => [ q(mf), q(Saint Martin) ],
+ q(serbia and montenegro) => [ q(cs), q(Serbia and Montenegro) ],
+ q(st. helena) => [ q(sh), q(St. Helena) ],
+ q(st. pierre and miquelon) => [ q(pm), q(St. Pierre and Miquelon) ],
+ q(svalbard and jan mayen islands) => [ q(sj), q(Svalbard and Jan Mayen Islands) ],
+ q(vatican city state (holy see)) => [ q(va), q(Vatican City State (Holy See)) ],
+ q(venezuela) => [ q(ve), q(Venezuela) ],
+ q(vietnam) => [ q(vn), q(Vietnam) ],
+ q(virgin islands (british)) => [ q(vg), q(Virgin Islands (British)) ],
+ q(virgin islands (u.s.)) => [ q(vi), q(Virgin Islands (U.S.)) ],
+ q(wallis and futuna islands) => [ q(wf), q(Wallis and Futuna Islands) ],
+ q(yugoslavia) => [ q(yu), q(Yugoslavia) ],
+ q(zaire) => [ q(zr), q(Zaire) ],
+};
+
+$Locale::Codes::Retired{'country'}{'alpha-3'}{'name'} = {
+ q(antarctica) => [ q(ata), q(Antarctica) ],
+ q(bolivia) => [ q(bol), q(Bolivia) ],
+ q(bouvet island) => [ q(bvt), q(Bouvet Island) ],
+ q(british indian ocean territory) => [ q(iot), q(British Indian Ocean Territory) ],
+ q(christmas island) => [ q(cxr), q(Christmas Island) ],
+ q(cocos (keeling) islands) => [ q(cck), q(Cocos (Keeling) Islands) ],
+ q(congo, the democratic republic of the) => [ q(cod), q(Congo, The Democratic Republic of the) ],
+ q(east timor) => [ q(tls), q(East Timor) ],
+ q(faroe islands) => [ q(fro), q(Faroe Islands) ],
+ q(france, metropolitan) => [ q(fxx), q(France, Metropolitan) ],
+ q(french southern and antarctic lands) => [ q(atf), q(French Southern and Antarctic Lands) ],
+ q(french southern territories) => [ q(atf), q(French Southern Territories) ],
+ q(heard island and mcdonald islands) => [ q(hmd), q(Heard Island and Mcdonald Islands) ],
+ q(holy see (vatican city state)) => [ q(vat), q(Holy See (Vatican City State)) ],
+ q(hong kong) => [ q(hkg), q(Hong Kong) ],
+ q(hong kong special administrative region of china) => [ q(hkg), q(Hong Kong Special Administrative Region of China) ],
+ q(iran, islamic republic of) => [ q(irn), q(Iran, Islamic Republic of) ],
+ q(kazakstan) => [ q(kaz), q(Kazakstan) ],
+ q(korea, democratic people's republic of) => [ q(prk), q(Korea, Democratic People's Republic of) ],
+ q(korea, republic of) => [ q(kor), q(Korea, Republic of) ],
+ q(libyan arab jamahiriya) => [ q(lby), q(Libyan Arab Jamahiriya) ],
+ q(macao) => [ q(mac), q(Macao) ],
+ q(macao special administrative region of china) => [ q(mac), q(Macao Special Administrative Region of China) ],
+ q(macau) => [ q(mac), q(Macau) ],
+ q(macedonia, the former yugoslav republic of) => [ q(mkd), q(Macedonia, the Former Yugoslav Republic of) ],
+ q(micronesia, federated states of) => [ q(fsm), q(Micronesia, Federated States of) ],
+ q(moldova, republic of) => [ q(mda), q(Moldova, Republic of) ],
+ q(netherlands antilles) => [ q(ant), q(Netherlands Antilles) ],
+ q(palestinian territory, occupied) => [ q(pse), q(Palestinian Territory, Occupied) ],
+ q(serbia and montenegro) => [ q(scg), q(Serbia and Montenegro) ],
+ q(south georgia and the islands) => [ q(sgs), q(South Georgia and the Islands) ],
+ q(south georgia and the south sandwich islands) => [ q(sgs), q(South Georgia and the South Sandwich Islands) ],
+ q(svalbard and jan mayen) => [ q(sjm), q(Svalbard and Jan Mayen) ],
+ q(taiwan) => [ q(twn), q(Taiwan) ],
+ q(taiwan, province of china) => [ q(twn), q(Taiwan, Province of China) ],
+ q(tanzania, united republic of) => [ q(tza), q(Tanzania, United Republic of) ],
+ q(united kingdom) => [ q(gbr), q(United Kingdom) ],
+ q(united states) => [ q(usa), q(United States) ],
+ q(united states minor outlying islands) => [ q(umi), q(United States Minor Outlying Islands) ],
+ q(venezuela) => [ q(ven), q(Venezuela) ],
+ q(vietnam) => [ q(vnm), q(Vietnam) ],
+ q(virgin islands, british) => [ q(vgb), q(Virgin Islands, British) ],
+ q(virgin islands, u.s.) => [ q(vir), q(Virgin Islands, U.S.) ],
+ q(wallis and futuna) => [ q(wlf), q(Wallis and Futuna) ],
+ q(yugoslavia) => [ q(yug), q(Yugoslavia) ],
+ q(zaire) => [ q(zar), q(Zaire) ],
+};
+
+$Locale::Codes::Retired{'country'}{'dom'}{'name'} = {
+ q(bonaire, saint eustatius and saba) => [ q(BQ), q(Bonaire, Saint Eustatius and Saba) ],
+ q(bonaire, sint eustatius and saba) => [ q(BQ), q(Bonaire, Sint Eustatius and Saba) ],
+ q(france, metropolitan) => [ q(FX), q(France, Metropolitan) ],
+ q(libyan arab jamahiriya) => [ q(LY), q(Libyan Arab Jamahiriya) ],
+ q(portuguese timor) => [ q(TP), q(Portuguese Timor) ],
+ q(portuguese timor ) => [ q(TP), q(Portuguese Timor ) ],
+ q(saint helena, ascension and tristan da cunha) => [ q(SH), q(Saint Helena, Ascension and Tristan da Cunha) ],
+ q(saint martin) => [ q(MF), q(Saint Martin) ],
+ q(soviet union) => [ q(SU), q(Soviet Union) ],
+ q(soviet union ) => [ q(SU), q(Soviet Union ) ],
+ q(taiwan) => [ q(TW), q(Taiwan) ],
+ q(yugoslavia ) => [ q(YU), q(Yugoslavia ) ],
+};
+
+$Locale::Codes::Retired{'country'}{'fips-10'}{'name'} = {
+ q(arab republic of egypt) => [ q(EG), q(Arab Republic of Egypt) ],
+ q(argentine republic) => [ q(AR), q(Argentine Republic) ],
+ q(bailiwick of guernsey) => [ q(GK), q(Bailiwick of Guernsey) ],
+ q(bailiwick of jersey) => [ q(JE), q(Bailiwick of Jersey) ],
+ q(bolivarian republic of venezuela) => [ q(VE), q(Bolivarian Republic of Venezuela) ],
+ q(british virgin islands) => [ q(VI), q(British Virgin Islands) ],
+ q(co-operative republic of guyana) => [ q(GY), q(Co-operative Republic of Guyana) ],
+ q(commonwealth of australia) => [ q(AS), q(Commonwealth of Australia) ],
+ q(commonwealth of dominica) => [ q(DO), q(Commonwealth of Dominica) ],
+ q(commonwealth of puerto rico) => [ q(RQ), q(Commonwealth of Puerto Rico) ],
+ q(commonwealth of the bahamas) => [ q(BF), q(Commonwealth of the Bahamas) ],
+ q(commonwealth of the northern mariana islands) => [ q(CQ), q(Commonwealth of the Northern Mariana Islands) ],
+ q(coral sea islands territory) => [ q(CR), q(Coral Sea Islands Territory) ],
+ q(curacao) => [ q(UC), q(Curacao) ],
+ q(democratic republic of sao tome and principe) => [ q(TP), q(Democratic Republic of Sao Tome and Principe) ],
+ q(democratic socialist republic of sri lanka) => [ q(CE), q(Democratic Socialist Republic of Sri Lanka) ],
+ q(department of guadeloupe) => [ q(GP), q(Department of Guadeloupe) ],
+ q(department of guiana) => [ q(FG), q(Department of Guiana) ],
+ q(department of martinique) => [ q(MB), q(Department of Martinique) ],
+ q(department of reunion) => [ q(RE), q(Department of Reunion) ],
+ q(east timor) => [ q(TT), q(East Timor) ],
+ q(federal democratic republic of ethiopia) => [ q(ET), q(Federal Democratic Republic of Ethiopia) ],
+ q(federal islamic republic of the comoros) => [ q(CN), q(Federal Islamic Republic of the Comoros) ],
+ q(federal republic of germany) => [ q(GM), q(Federal Republic of Germany) ],
+ q(federal republic of nigeria) => [ q(NI), q(Federal Republic of Nigeria) ],
+ q(federated states of micronesia) => [ q(FM), q(Federated States of Micronesia) ],
+ q(federation of saint kitts and nevis) => [ q(SC), q(Federation of Saint Kitts and Nevis) ],
+ q(federative republic of brazil) => [ q(BR), q(Federative Republic of Brazil) ],
+ q(french republic) => [ q(FR), q(French Republic) ],
+ q(gabonese republic) => [ q(GB), q(Gabonese Republic) ],
+ q(grand duchy of luxembourg) => [ q(LU), q(Grand Duchy of Luxembourg) ],
+ q(great socialist people's libyan arab jamahiriya) => [ q(LY), q(Great Socialist People's Libyan Arab Jamahiriya) ],
+ q(hashemite kingdom of jordan) => [ q(JO), q(Hashemite Kingdom of Jordan) ],
+ q(heard island and mcdonald islands) => [ q(HM), q(Heard Island and Mcdonald Islands) ],
+ q(hellenic republic) => [ q(GR), q(Hellenic Republic) ],
+ q(hong kong s.a.r.) => [ q(HK), q(Hong Kong S.A.R.) ],
+ q(hong kong special administrative region) => [ q(HK), q(Hong Kong Special Administrative Region) ],
+ q(independent state of papua new guinea) => [ q(PP), q(Independent State of Papua New Guinea) ],
+ q(independent state of samoa) => [ q(WS), q(Independent State of Samoa) ],
+ q(islamic republic of iran) => [ q(IR), q(Islamic Republic of Iran) ],
+ q(islamic republic of mauritania) => [ q(MR), q(Islamic Republic of Mauritania) ],
+ q(islamic republic of pakistan) => [ q(PK), q(Islamic Republic of Pakistan) ],
+ q(islamic state of afghanistan) => [ q(AF), q(Islamic State of Afghanistan) ],
+ q(italian republic) => [ q(IT), q(Italian Republic) ],
+ q(kingdom of belgium) => [ q(BE), q(Kingdom of Belgium) ],
+ q(kingdom of bhutan) => [ q(BT), q(Kingdom of Bhutan) ],
+ q(kingdom of cambodia) => [ q(CB), q(Kingdom of Cambodia) ],
+ q(kingdom of denmark) => [ q(DA), q(Kingdom of Denmark) ],
+ q(kingdom of morocco) => [ q(MO), q(Kingdom of Morocco) ],
+ q(kingdom of nepal) => [ q(NP), q(Kingdom of Nepal) ],
+ q(kingdom of norway) => [ q(NO), q(Kingdom of Norway) ],
+ q(kingdom of saudi arabia) => [ q(SA), q(Kingdom of Saudi Arabia) ],
+ q(kingdom of spain) => [ q(SP), q(Kingdom of Spain) ],
+ q(kingdom of swaziland) => [ q(WZ), q(Kingdom of Swaziland) ],
+ q(kingdom of sweden) => [ q(SW), q(Kingdom of Sweden) ],
+ q(kingdom of thailand) => [ q(TH), q(Kingdom of Thailand) ],
+ q(kingdom of the netherlands) => [ q(NL), q(Kingdom of the Netherlands) ],
+ q(kingdom of tonga) => [ q(TN), q(Kingdom of Tonga) ],
+ q(kosovo) => [ q(KV), q(Kosovo) ],
+ q(kyrgyz republic) => [ q(KG), q(Kyrgyz Republic) ],
+ q(lebanese republic) => [ q(LE), q(Lebanese Republic) ],
+ q(macau s.a.r) => [ q(MC), q(Macau S.A.R) ],
+ q(macau special administrative region) => [ q(MC), q(Macau Special Administrative Region) ],
+ q(montenegro) => [ q(MJ), q(Montenegro) ],
+ q(negara brunei darussalam) => [ q(BX), q(Negara Brunei Darussalam) ],
+ q(netherlands antilles) => [ q(NT), q(Netherlands Antilles) ],
+ q(oriental republic of uruguay) => [ q(UY), q(Oriental Republic of Uruguay) ],
+ q(people's democratic republic of algeria) => [ q(AG), q(People's Democratic Republic of Algeria) ],
+ q(people's republic of bangladesh) => [ q(BG), q(People's Republic of Bangladesh) ],
+ q(people's republic of china) => [ q(CH), q(People's Republic of China) ],
+ q(pitcairn, henderson, ducie and oeno islands) => [ q(PC), q(Pitcairn, Henderson, Ducie and Oeno Islands) ],
+ q(portuguese republic) => [ q(PO), q(Portuguese Republic) ],
+ q(principality of andorra) => [ q(AN), q(Principality of Andorra) ],
+ q(principality of liechtenstein) => [ q(LS), q(Principality of Liechtenstein) ],
+ q(principality of monaco) => [ q(MN), q(Principality of Monaco) ],
+ q(republic of albania) => [ q(AL), q(Republic of Albania) ],
+ q(republic of angola) => [ q(AO), q(Republic of Angola) ],
+ q(republic of armenia) => [ q(AM), q(Republic of Armenia) ],
+ q(republic of austria) => [ q(AU), q(Republic of Austria) ],
+ q(republic of azerbaijan) => [ q(AJ), q(Republic of Azerbaijan) ],
+ q(republic of belarus) => [ q(BO), q(Republic of Belarus) ],
+ q(republic of benin) => [ q(BN), q(Republic of Benin) ],
+ q(republic of bolivia) => [ q(BL), q(Republic of Bolivia) ],
+ q(republic of botswana) => [ q(BC), q(Republic of Botswana) ],
+ q(republic of burundi) => [ q(BY), q(Republic of Burundi) ],
+ q(republic of cameroon) => [ q(CM), q(Republic of Cameroon) ],
+ q(republic of cape verde) => [ q(CV), q(Republic of Cape Verde) ],
+ q(republic of chad) => [ q(CD), q(Republic of Chad) ],
+ q(republic of chile) => [ q(CI), q(Republic of Chile) ],
+ q(republic of colombia) => [ q(CO), q(Republic of Colombia) ],
+ q(republic of costa rica) => [ q(CS), q(Republic of Costa Rica) ],
+ q(republic of cote d'ivoire) => [ q(IV), q(Republic of Cote D'Ivoire) ],
+ q(republic of croatia) => [ q(HR), q(Republic of Croatia) ],
+ q(republic of cuba) => [ q(CU), q(Republic of Cuba) ],
+ q(republic of cyprus) => [ q(CY), q(Republic of Cyprus) ],
+ q(republic of djibouti) => [ q(DJ), q(Republic of Djibouti) ],
+ q(republic of ecuador) => [ q(EC), q(Republic of Ecuador) ],
+ q(republic of el salvador) => [ q(ES), q(Republic of El Salvador) ],
+ q(republic of equatorial guinea) => [ q(EK), q(Republic of Equatorial Guinea) ],
+ q(republic of estonia) => [ q(EN), q(Republic of Estonia) ],
+ q(republic of finland) => [ q(FI), q(Republic of Finland) ],
+ q(republic of ghana) => [ q(GH), q(Republic of Ghana) ],
+ q(republic of guatemala) => [ q(GT), q(Republic of Guatemala) ],
+ q(republic of guinea) => [ q(GV), q(Republic of Guinea) ],
+ q(republic of guinea-bissau) => [ q(PU), q(Republic of Guinea-Bissau) ],
+ q(republic of haiti) => [ q(HA), q(Republic of Haiti) ],
+ q(republic of honduras) => [ q(HO), q(Republic of Honduras) ],
+ q(republic of hungary) => [ q(HU), q(Republic of Hungary) ],
+ q(republic of iceland) => [ q(IC), q(Republic of Iceland) ],
+ q(republic of india) => [ q(IN), q(Republic of India) ],
+ q(republic of indonesia) => [ q(ID), q(Republic of Indonesia) ],
+ q(republic of iraq) => [ q(IZ), q(Republic of Iraq) ],
+ q(republic of kazakhstan) => [ q(KZ), q(Republic of Kazakhstan) ],
+ q(republic of kenya) => [ q(KE), q(Republic of Kenya) ],
+ q(republic of kiribati) => [ q(KR), q(Republic of Kiribati) ],
+ q(republic of latvia) => [ q(LG), q(Republic of Latvia) ],
+ q(republic of lesotho) => [ q(LT), q(Republic of Lesotho) ],
+ q(republic of liberia) => [ q(LI), q(Republic of Liberia) ],
+ q(republic of lithuania) => [ q(LH), q(Republic of Lithuania) ],
+ q(republic of macedonia) => [ q(MK), q(Republic of Macedonia) ],
+ q(republic of madagascar) => [ q(MA), q(Republic of Madagascar) ],
+ q(republic of malawi) => [ q(MI), q(Republic of Malawi) ],
+ q(republic of maldives) => [ q(MV), q(Republic of Maldives) ],
+ q(republic of mali) => [ q(ML), q(Republic of Mali) ],
+ q(republic of malta) => [ q(MT), q(Republic of Malta) ],
+ q(republic of mauritius) => [ q(MP), q(Republic of Mauritius) ],
+ q(republic of mozambique) => [ q(MZ), q(Republic of Mozambique) ],
+ q(republic of namibia) => [ q(WA), q(Republic of Namibia) ],
+ q(republic of nauru) => [ q(NR), q(Republic of Nauru) ],
+ q(republic of nicaragua) => [ q(NU), q(Republic of Nicaragua) ],
+ q(republic of niger) => [ q(NG), q(Republic of Niger) ],
+ q(republic of palau) => [ q(PS), q(Republic of Palau) ],
+ q(republic of panama) => [ q(PM), q(Republic of Panama) ],
+ q(republic of paraguay) => [ q(PA), q(Republic of Paraguay) ],
+ q(republic of peru) => [ q(PE), q(Republic of Peru) ],
+ q(republic of poland) => [ q(PL), q(Republic of Poland) ],
+ q(republic of san marino) => [ q(SM), q(Republic of San Marino) ],
+ q(republic of senegal) => [ q(SG), q(Republic of Senegal) ],
+ q(republic of seychelles) => [ q(SE), q(Republic of Seychelles) ],
+ q(republic of sierra leone) => [ q(SL), q(Republic of Sierra Leone) ],
+ q(republic of singapore) => [ q(SN), q(Republic of Singapore) ],
+ q(republic of slovenia) => [ q(SI), q(Republic of Slovenia) ],
+ q(republic of south africa) => [ q(SF), q(Republic of South Africa) ],
+ q(republic of suriname) => [ q(NS), q(Republic of Suriname) ],
+ q(republic of tajikistan) => [ q(TI), q(Republic of Tajikistan) ],
+ q(republic of the congo) => [ q(CF), q(Republic of the Congo) ],
+ q(republic of the fiji islands) => [ q(FJ), q(Republic of the Fiji Islands) ],
+ q(republic of the gambia) => [ q(GA), q(Republic of the Gambia) ],
+ q(republic of the marshall islands) => [ q(RM), q(Republic of the Marshall Islands) ],
+ q(republic of the philippines) => [ q(RP), q(Republic of the Philippines) ],
+ q(republic of the sudan) => [ q(SU), q(Republic of the Sudan) ],
+ q(republic of trinidad and tobago) => [ q(TD), q(Republic of Trinidad and Tobago) ],
+ q(republic of tunisia) => [ q(TS), q(Republic of Tunisia) ],
+ q(republic of turkey) => [ q(TU), q(Republic of Turkey) ],
+ q(republic of uzbekistan) => [ q(UZ), q(Republic of Uzbekistan) ],
+ q(republic of vanuatu) => [ q(NH), q(Republic of Vanuatu) ],
+ q(republic of yemen) => [ q(YM), q(Republic of Yemen) ],
+ q(republic of zambia) => [ q(ZA), q(Republic of Zambia) ],
+ q(republic of zimbabwe) => [ q(ZI), q(Republic of Zimbabwe) ],
+ q(rwandese republic) => [ q(RW), q(Rwandese Republic) ],
+ q(saint barthelemy) => [ q(TB), q(Saint Barthelemy) ],
+ q(saint helena) => [ q(SH), q(Saint Helena) ],
+ q(saint martin) => [ q(RN), q(Saint Martin) ],
+ q(serbia) => [ q(RI), q(Serbia) ],
+ q(serbia and montenegro) => [ q(YI), q(Serbia and Montenegro) ],
+ q(sint maarten) => [ q(NN), q(Sint Maarten) ],
+ q(slovak republic) => [ q(LO), q(Slovak Republic) ],
+ q(socialist republic of vietnam) => [ q(VM), q(Socialist Republic of Vietnam) ],
+ q(south georgia and the south sandwich islands) => [ q(SX), q(South Georgia and the South Sandwich Islands) ],
+ q(state of bahrain) => [ q(BA), q(State of Bahrain) ],
+ q(state of eritrea) => [ q(ER), q(State of Eritrea) ],
+ q(state of israel) => [ q(IS), q(State of Israel) ],
+ q(state of kuwait) => [ q(KU), q(State of Kuwait) ],
+ q(state of qatar) => [ q(QA), q(State of Qatar) ],
+ q(state of the vatican city) => [ q(VT), q(State of the Vatican City) ],
+ q(sultanate of oman) => [ q(MU), q(Sultanate of Oman) ],
+ q(swiss confederation) => [ q(SZ), q(Swiss Confederation) ],
+ q(territorial collectivity of mayotte) => [ q(MF), q(Territorial Collectivity of Mayotte) ],
+ q(territorial collectivity of saint pierre and miquelon) => [ q(SB), q(Territorial Collectivity of Saint Pierre and Miquelon) ],
+ q(territory of american samoa) => [ q(AQ), q(Territory of American Samoa) ],
+ q(territory of ashmore and cartier islands) => [ q(AT), q(Territory of Ashmore and Cartier Islands) ],
+ q(territory of christmas island) => [ q(KT), q(Territory of Christmas Island) ],
+ q(territory of cocos (keeling) islands) => [ q(CK), q(Territory of Cocos (Keeling) Islands) ],
+ q(territory of french polynesia) => [ q(FP), q(Territory of French Polynesia) ],
+ q(territory of guam) => [ q(GQ), q(Territory of Guam) ],
+ q(territory of heard island and mcdonald islands) => [ q(HM), q(Territory of Heard Island and McDonald Islands) ],
+ q(territory of new caledonia and dependencies) => [ q(NC), q(Territory of New Caledonia and Dependencies) ],
+ q(territory of norfolk island) => [ q(NF), q(Territory of Norfolk Island) ],
+ q(territory of the french southern and antarctic lands) => [ q(FS), q(Territory of the French Southern and Antarctic Lands) ],
+ q(territory of the wallis and futuna islands) => [ q(WF), q(Territory of the Wallis and Futuna Islands) ],
+ q(togolese republic) => [ q(TO), q(Togolese Republic) ],
+ q(union of burma) => [ q(BM), q(Union of Burma) ],
+ q(united mexican states) => [ q(MX), q(United Mexican States) ],
+ q(virgin islands) => [ q(VQ), q(Virgin Islands) ],
+ q(virgin islands of the united states) => [ q(VQ), q(Virgin Islands of the United States) ],
+ q(wake atoll) => [ q(WQ), q(Wake Atoll) ],
+};
+
+$Locale::Codes::Retired{'country'}{'numeric'}{'name'} = {
+ q(antarctica) => [ q(010), q(Antarctica) ],
+ q(bolivia) => [ q(068), q(Bolivia) ],
+ q(bouvet island) => [ q(074), q(Bouvet Island) ],
+ q(british indian ocean territory) => [ q(086), q(British Indian Ocean Territory) ],
+ q(christmas island) => [ q(162), q(Christmas Island) ],
+ q(cocos (keeling) islands) => [ q(166), q(Cocos (Keeling) Islands) ],
+ q(congo, the democratic republic of the) => [ q(180), q(Congo, The Democratic Republic of the) ],
+ q(east timor) => [ q(626), q(East Timor) ],
+ q(faroe islands) => [ q(234), q(Faroe Islands) ],
+ q(france, metropolitan) => [ q(249), q(France, Metropolitan) ],
+ q(french southern and antarctic lands) => [ q(260), q(French Southern and Antarctic Lands) ],
+ q(french southern territories) => [ q(260), q(French Southern Territories) ],
+ q(heard island and mcdonald islands) => [ q(334), q(Heard Island and Mcdonald Islands) ],
+ q(holy see (vatican city state)) => [ q(336), q(Holy See (Vatican City State)) ],
+ q(hong kong) => [ q(344), q(Hong Kong) ],
+ q(hong kong special administrative region of china) => [ q(344), q(Hong Kong Special Administrative Region of China) ],
+ q(iran, islamic republic of) => [ q(364), q(Iran, Islamic Republic of) ],
+ q(kazakstan) => [ q(398), q(Kazakstan) ],
+ q(korea, democratic people's republic of) => [ q(408), q(Korea, Democratic People's Republic of) ],
+ q(korea, republic of) => [ q(410), q(Korea, Republic of) ],
+ q(libyan arab jamahiriya) => [ q(434), q(Libyan Arab Jamahiriya) ],
+ q(macao) => [ q(446), q(Macao) ],
+ q(macao special administrative region of china) => [ q(446), q(Macao Special Administrative Region of China) ],
+ q(macau) => [ q(446), q(Macau) ],
+ q(macedonia, the former yugoslav republic of) => [ q(807), q(Macedonia, the Former Yugoslav Republic of) ],
+ q(micronesia, federated states of) => [ q(583), q(Micronesia, Federated States of) ],
+ q(moldova, republic of) => [ q(498), q(Moldova, Republic of) ],
+ q(netherlands antilles) => [ q(530), q(Netherlands Antilles) ],
+ q(palestinian territory, occupied) => [ q(275), q(Palestinian Territory, Occupied) ],
+ q(serbia and montenegro) => [ q(891), q(Serbia and Montenegro) ],
+ q(south georgia and the islands) => [ q(239), q(South Georgia and the Islands) ],
+ q(south georgia and the south sandwich islands) => [ q(239), q(South Georgia and the South Sandwich Islands) ],
+ q(svalbard and jan mayen) => [ q(744), q(Svalbard and Jan Mayen) ],
+ q(taiwan) => [ q(158), q(Taiwan) ],
+ q(taiwan, province of china) => [ q(158), q(Taiwan, Province of China) ],
+ q(tanzania, united republic of) => [ q(834), q(Tanzania, United Republic of) ],
+ q(united kingdom) => [ q(826), q(United Kingdom) ],
+ q(united states) => [ q(840), q(United States) ],
+ q(united states minor outlying islands) => [ q(581), q(United States Minor Outlying Islands) ],
+ q(venezuela) => [ q(862), q(Venezuela) ],
+ q(vietnam) => [ q(704), q(Vietnam) ],
+ q(virgin islands, british) => [ q(092), q(Virgin Islands, British) ],
+ q(virgin islands, u.s.) => [ q(850), q(Virgin Islands, U.S.) ],
+ q(wallis and futuna) => [ q(876), q(Wallis and Futuna) ],
+ q(yugoslavia) => [ q(891), q(Yugoslavia) ],
+ q(zaire) => [ q(180), q(Zaire) ],
+};
+
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,127 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::Currency - standard codes for currency identification
+
+=head1 SYNOPSIS
+
+ use Locale::Codes::Currency;
+
+ $curr = code2currency('usd'); # $curr gets 'US Dollar'
+ $code = currency2code('Euro'); # $code gets 'eur'
+
+ @codes = all_currency_codes();
+ @names = all_currency_names();
+
+
+=head1 DESCRIPTION
+
+The C<Locale::Codes::Currency> module provides access to standard codes used
+for identifying currencies and funds, such as those defined in ISO 4217.
+
+Most of the routines take an optional additional argument which
+specifies the code set to use. If not specified, the default ISO
+4217 three-letter codes will be used.
+
+=head1 SUPPORTED CODE SETS
+
+There are several different code sets you can use for identifying
+currencies. A code set may be specified using either a name, or a
+constant that is automatically exported by this module.
+
+For example, the two are equivalent:
+
+ $curr = code2currency('usd','alpha');
+ $curr = code2currency('usd',LOCALE_CURR_ALPHA);
+
+The codesets currently supported are:
+
+=over 4
+
+=item B<alpha, LOCALE_CURR_ALPHA>
+
+This is a set of three-letter (uppercase) codes from ISO 4217 such
+as EUR for Euro.
+
+Two of the codes specified by the standard (XTS which is reserved
+for testing purposes and XXX which is for transactions where no
+currency is involved) are omitted.
+
+This is the default code set.
+
+=item B<num, LOCALE_CURR_NUMERIC>
+
+This is the set of three-digit numeric codes from ISO 4217.
+
+=back
+
+=head1 ROUTINES
+
+=over 4
+
+=item B<code2currency ( CODE [,CODESET] )>
+
+=item B<currency2code ( NAME [,CODESET] )>
+
+=item B<currency_code2code ( CODE ,CODESET ,CODESET2 )>
+
+=item B<all_currency_codes ( [CODESET] )>
+
+=item B<all_currency_names ( [CODESET] )>
+
+=item B<Locale::Codes::Currency::rename_currency ( CODE ,NEW_NAME [,CODESET] )>
+
+=item B<Locale::Codes::Currency::add_currency ( CODE ,NAME [,CODESET] )>
+
+=item B<Locale::Codes::Currency::delete_currency ( CODE [,CODESET] )>
+
+=item B<Locale::Codes::Currency::add_currency_alias ( NAME ,NEW_NAME )>
+
+=item B<Locale::Codes::Currency::delete_currency_alias ( NAME )>
+
+=item B<Locale::Codes::Currency::rename_currency_code ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::Currency::add_currency_code_alias ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::Currency::delete_currency_code_alias ( CODE [,CODESET] )>
+
+These routines are all documented in the Locale::Codes::API man page.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item B<Locale::Codes>
+
+The Locale-Codes distribution.
+
+=item B<Locale::Codes::API>
+
+The list of functions supported by this module.
+
+=item B<http://www.iso.org/iso/support/currency_codes_list-1.htm>
+
+The ISO 4217 data.
+
+=back
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001 Michael Hennecke
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency_Codes.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency_Codes.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency_Codes.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3108 @@
+package Locale::Codes::Currency_Codes;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'get_codes' is run.
+# Generated on: Wed Feb 27 10:04:26 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::Currency_Codes - currency codes for the Locale::Codes::Currency module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::Currency module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Data{'currency'}{'id'} = '0180';
+
+$Locale::Codes::Data{'currency'}{'id2names'} = {
+ q(0001) => [
+ q(Afghani),
+ ],
+ q(0002) => [
+ q(Euro),
+ ],
+ q(0003) => [
+ q(Lek),
+ ],
+ q(0004) => [
+ q(Algerian Dinar),
+ ],
+ q(0005) => [
+ q(US Dollar),
+ ],
+ q(0006) => [
+ q(Kwanza),
+ ],
+ q(0007) => [
+ q(East Caribbean Dollar),
+ ],
+ q(0008) => [
+ q(Argentine Peso),
+ ],
+ q(0009) => [
+ q(Armenian Dram),
+ ],
+ q(0010) => [
+ q(Aruban Florin),
+ ],
+ q(0011) => [
+ q(Australian Dollar),
+ ],
+ q(0012) => [
+ q(Azerbaijanian Manat),
+ ],
+ q(0013) => [
+ q(Bahamian Dollar),
+ ],
+ q(0014) => [
+ q(Bahraini Dinar),
+ ],
+ q(0015) => [
+ q(Taka),
+ ],
+ q(0016) => [
+ q(Barbados Dollar),
+ ],
+ q(0017) => [
+ q(Belarussian Ruble),
+ ],
+ q(0018) => [
+ q(Belize Dollar),
+ ],
+ q(0019) => [
+ q(CFA Franc BCEAO),
+ ],
+ q(0020) => [
+ q(Bermudian Dollar),
+ ],
+ q(0021) => [
+ q(Ngultrum),
+ ],
+ q(0022) => [
+ q(Indian Rupee),
+ ],
+ q(0023) => [
+ q(Boliviano),
+ ],
+ q(0024) => [
+ q(Mvdol),
+ ],
+ q(0025) => [
+ q(Convertible Mark),
+ ],
+ q(0026) => [
+ q(Pula),
+ ],
+ q(0027) => [
+ q(Norwegian Krone),
+ ],
+ q(0028) => [
+ q(Brazilian Real),
+ ],
+ q(0029) => [
+ q(Brunei Dollar),
+ ],
+ q(0030) => [
+ q(Bulgarian Lev),
+ ],
+ q(0031) => [
+ q(Burundi Franc),
+ ],
+ q(0032) => [
+ q(Riel),
+ ],
+ q(0033) => [
+ q(CFA Franc BEAC),
+ ],
+ q(0034) => [
+ q(Canadian Dollar),
+ ],
+ q(0035) => [
+ q(Cape Verde Escudo),
+ ],
+ q(0036) => [
+ q(Cayman Islands Dollar),
+ ],
+ q(0037) => [
+ q(Unidades de fomento),
+ ],
+ q(0038) => [
+ q(Chilean Peso),
+ ],
+ q(0039) => [
+ q(Yuan Renminbi),
+ ],
+ q(0040) => [
+ q(Colombian Peso),
+ ],
+ q(0041) => [
+ q(Unidad de Valor Real),
+ ],
+ q(0042) => [
+ q(Comoro Franc),
+ ],
+ q(0043) => [
+ q(Congolese Franc),
+ ],
+ q(0044) => [
+ q(New Zealand Dollar),
+ ],
+ q(0045) => [
+ q(Costa Rican Colon),
+ ],
+ q(0046) => [
+ q(Croatian Kuna),
+ ],
+ q(0047) => [
+ q(Peso Convertible),
+ ],
+ q(0048) => [
+ q(Cuban Peso),
+ ],
+ q(0049) => [
+ q(Netherlands Antillean Guilder),
+ ],
+ q(0050) => [
+ q(Czech Koruna),
+ ],
+ q(0051) => [
+ q(Danish Krone),
+ ],
+ q(0052) => [
+ q(Djibouti Franc),
+ ],
+ q(0053) => [
+ q(Dominican Peso),
+ ],
+ q(0054) => [
+ q(Egyptian Pound),
+ ],
+ q(0055) => [
+ q(El Salvador Colon),
+ ],
+ q(0056) => [
+ q(Nakfa),
+ ],
+ q(0057) => [
+ q(Ethiopian Birr),
+ ],
+ q(0058) => [
+ q(Falkland Islands Pound),
+ ],
+ q(0059) => [
+ q(Fiji Dollar),
+ ],
+ q(0060) => [
+ q(CFP Franc),
+ ],
+ q(0061) => [
+ q(Dalasi),
+ ],
+ q(0062) => [
+ q(Lari),
+ ],
+ q(0063) => [
+ q(Ghana Cedi),
+ ],
+ q(0064) => [
+ q(Gibraltar Pound),
+ ],
+ q(0065) => [
+ q(Quetzal),
+ ],
+ q(0066) => [
+ q(Pound Sterling),
+ ],
+ q(0067) => [
+ q(Guinea Franc),
+ ],
+ q(0068) => [
+ q(Guyana Dollar),
+ ],
+ q(0069) => [
+ q(Gourde),
+ ],
+ q(0070) => [
+ q(Lempira),
+ ],
+ q(0071) => [
+ q(Hong Kong Dollar),
+ ],
+ q(0072) => [
+ q(Forint),
+ ],
+ q(0073) => [
+ q(Iceland Krona),
+ ],
+ q(0074) => [
+ q(Rupiah),
+ ],
+ q(0075) => [
+ q(SDR (Special Drawing Right)),
+ ],
+ q(0076) => [
+ q(Iranian Rial),
+ ],
+ q(0077) => [
+ q(Iraqi Dinar),
+ ],
+ q(0078) => [
+ q(New Israeli Sheqel),
+ ],
+ q(0079) => [
+ q(Jamaican Dollar),
+ ],
+ q(0080) => [
+ q(Yen),
+ ],
+ q(0081) => [
+ q(Jordanian Dinar),
+ ],
+ q(0082) => [
+ q(Tenge),
+ ],
+ q(0083) => [
+ q(Kenyan Shilling),
+ ],
+ q(0084) => [
+ q(North Korean Won),
+ ],
+ q(0085) => [
+ q(Won),
+ ],
+ q(0086) => [
+ q(Kuwaiti Dinar),
+ ],
+ q(0087) => [
+ q(Som),
+ ],
+ q(0088) => [
+ q(Kip),
+ ],
+ q(0089) => [
+ q(Latvian Lats),
+ ],
+ q(0090) => [
+ q(Lebanese Pound),
+ ],
+ q(0091) => [
+ q(Loti),
+ ],
+ q(0092) => [
+ q(Rand),
+ ],
+ q(0093) => [
+ q(Liberian Dollar),
+ ],
+ q(0094) => [
+ q(Libyan Dinar),
+ ],
+ q(0095) => [
+ q(Swiss Franc),
+ ],
+ q(0096) => [
+ q(Lithuanian Litas),
+ ],
+ q(0097) => [
+ q(Pataca),
+ ],
+ q(0098) => [
+ q(Denar),
+ ],
+ q(0099) => [
+ q(Malagasy Ariary),
+ ],
+ q(0100) => [
+ q(Kwacha),
+ ],
+ q(0101) => [
+ q(Malaysian Ringgit),
+ ],
+ q(0102) => [
+ q(Rufiyaa),
+ ],
+ q(0103) => [
+ q(Ouguiya),
+ ],
+ q(0104) => [
+ q(Mauritius Rupee),
+ ],
+ q(0105) => [
+ q(ADB Unit of Account),
+ ],
+ q(0106) => [
+ q(Mexican Peso),
+ ],
+ q(0107) => [
+ q(Mexican Unidad de Inversion (UDI)),
+ ],
+ q(0108) => [
+ q(Moldovan Leu),
+ ],
+ q(0109) => [
+ q(Tugrik),
+ ],
+ q(0110) => [
+ q(Moroccan Dirham),
+ ],
+ q(0111) => [
+ q(Mozambique Metical),
+ ],
+ q(0112) => [
+ q(Kyat),
+ ],
+ q(0113) => [
+ q(Namibia Dollar),
+ ],
+ q(0114) => [
+ q(Nepalese Rupee),
+ ],
+ q(0115) => [
+ q(Cordoba Oro),
+ ],
+ q(0116) => [
+ q(Naira),
+ ],
+ q(0117) => [
+ q(Rial Omani),
+ ],
+ q(0118) => [
+ q(Pakistan Rupee),
+ ],
+ q(0119) => [
+ q(Balboa),
+ ],
+ q(0120) => [
+ q(Kina),
+ ],
+ q(0121) => [
+ q(Guarani),
+ ],
+ q(0122) => [
+ q(Nuevo Sol),
+ ],
+ q(0123) => [
+ q(Philippine Peso),
+ ],
+ q(0124) => [
+ q(Zloty),
+ ],
+ q(0125) => [
+ q(Qatari Rial),
+ ],
+ q(0126) => [
+ q(New Romanian Leu),
+ ],
+ q(0127) => [
+ q(Russian Ruble),
+ ],
+ q(0128) => [
+ q(Rwanda Franc),
+ ],
+ q(0129) => [
+ q(Saint Helena Pound),
+ ],
+ q(0130) => [
+ q(Tala),
+ ],
+ q(0131) => [
+ q(Dobra),
+ ],
+ q(0132) => [
+ q(Saudi Riyal),
+ ],
+ q(0133) => [
+ q(Serbian Dinar),
+ ],
+ q(0134) => [
+ q(Seychelles Rupee),
+ ],
+ q(0135) => [
+ q(Leone),
+ ],
+ q(0136) => [
+ q(Singapore Dollar),
+ ],
+ q(0137) => [
+ q(Sucre),
+ ],
+ q(0138) => [
+ q(Solomon Islands Dollar),
+ ],
+ q(0139) => [
+ q(Somali Shilling),
+ ],
+ q(0140) => [
+ q(South Sudanese Pound),
+ ],
+ q(0141) => [
+ q(Sri Lanka Rupee),
+ ],
+ q(0142) => [
+ q(Sudanese Pound),
+ ],
+ q(0143) => [
+ q(Surinam Dollar),
+ ],
+ q(0144) => [
+ q(Lilangeni),
+ ],
+ q(0145) => [
+ q(Swedish Krona),
+ ],
+ q(0146) => [
+ q(WIR Euro),
+ ],
+ q(0147) => [
+ q(WIR Franc),
+ ],
+ q(0148) => [
+ q(Syrian Pound),
+ ],
+ q(0149) => [
+ q(New Taiwan Dollar),
+ ],
+ q(0150) => [
+ q(Somoni),
+ ],
+ q(0151) => [
+ q(Tanzanian Shilling),
+ ],
+ q(0152) => [
+ q(Baht),
+ ],
+ q(0153) => [
+ q(Pa'anga),
+ ],
+ q(0154) => [
+ q(Trinidad and Tobago Dollar),
+ ],
+ q(0155) => [
+ q(Tunisian Dinar),
+ ],
+ q(0156) => [
+ q(Turkish Lira),
+ ],
+ q(0157) => [
+ q(Turkmenistan New Manat),
+ ],
+ q(0158) => [
+ q(Uganda Shilling),
+ ],
+ q(0159) => [
+ q(Hryvnia),
+ ],
+ q(0160) => [
+ q(UAE Dirham),
+ ],
+ q(0161) => [
+ q(US Dollar (Next day)),
+ ],
+ q(0162) => [
+ q(US Dollar (Same day)),
+ ],
+ q(0163) => [
+ q(Uruguay Peso en Unidades Indexadas (URUIURUI)),
+ ],
+ q(0164) => [
+ q(Peso Uruguayo),
+ ],
+ q(0165) => [
+ q(Uzbekistan Sum),
+ ],
+ q(0166) => [
+ q(Vatu),
+ ],
+ q(0167) => [
+ q(Bolivar),
+ ],
+ q(0168) => [
+ q(Dong),
+ ],
+ q(0169) => [
+ q(Yemeni Rial),
+ ],
+ q(0170) => [
+ q(Zambian Kwacha),
+ ],
+ q(0171) => [
+ q(Zimbabwe Dollar),
+ ],
+ q(0172) => [
+ q(Bond Markets Unit European Composite Unit (EURCO)),
+ ],
+ q(0173) => [
+ q(Bond Markets Unit European Monetary Unit (E.M.U.-6)),
+ ],
+ q(0174) => [
+ q(Bond Markets Unit European Unit of Account 9 (E.U.A.-9)),
+ ],
+ q(0175) => [
+ q(Bond Markets Unit European Unit of Account 17 (E.U.A.-17)),
+ ],
+ q(0176) => [
+ q(Gold),
+ ],
+ q(0177) => [
+ q(Palladium),
+ ],
+ q(0178) => [
+ q(Platinum),
+ ],
+ q(0179) => [
+ q(Silver),
+ ],
+};
+
+$Locale::Codes::Data{'currency'}{'alias2id'} = {
+ q(adb unit of account) => [
+ q(0105),
+ q(0),
+ ],
+ q(afghani) => [
+ q(0001),
+ q(0),
+ ],
+ q(algerian dinar) => [
+ q(0004),
+ q(0),
+ ],
+ q(argentine peso) => [
+ q(0008),
+ q(0),
+ ],
+ q(armenian dram) => [
+ q(0009),
+ q(0),
+ ],
+ q(aruban florin) => [
+ q(0010),
+ q(0),
+ ],
+ q(australian dollar) => [
+ q(0011),
+ q(0),
+ ],
+ q(azerbaijanian manat) => [
+ q(0012),
+ q(0),
+ ],
+ q(bahamian dollar) => [
+ q(0013),
+ q(0),
+ ],
+ q(bahraini dinar) => [
+ q(0014),
+ q(0),
+ ],
+ q(baht) => [
+ q(0152),
+ q(0),
+ ],
+ q(balboa) => [
+ q(0119),
+ q(0),
+ ],
+ q(barbados dollar) => [
+ q(0016),
+ q(0),
+ ],
+ q(belarussian ruble) => [
+ q(0017),
+ q(0),
+ ],
+ q(belize dollar) => [
+ q(0018),
+ q(0),
+ ],
+ q(bermudian dollar) => [
+ q(0020),
+ q(0),
+ ],
+ q(bolivar) => [
+ q(0167),
+ q(0),
+ ],
+ q(boliviano) => [
+ q(0023),
+ q(0),
+ ],
+ q(bond markets unit european composite unit (eurco)) => [
+ q(0172),
+ q(0),
+ ],
+ q(bond markets unit european monetary unit (e.m.u.-6)) => [
+ q(0173),
+ q(0),
+ ],
+ q(bond markets unit european unit of account 17 (e.u.a.-17)) => [
+ q(0175),
+ q(0),
+ ],
+ q(bond markets unit european unit of account 9 (e.u.a.-9)) => [
+ q(0174),
+ q(0),
+ ],
+ q(brazilian real) => [
+ q(0028),
+ q(0),
+ ],
+ q(brunei dollar) => [
+ q(0029),
+ q(0),
+ ],
+ q(bulgarian lev) => [
+ q(0030),
+ q(0),
+ ],
+ q(burundi franc) => [
+ q(0031),
+ q(0),
+ ],
+ q(canadian dollar) => [
+ q(0034),
+ q(0),
+ ],
+ q(cape verde escudo) => [
+ q(0035),
+ q(0),
+ ],
+ q(cayman islands dollar) => [
+ q(0036),
+ q(0),
+ ],
+ q(cfa franc bceao) => [
+ q(0019),
+ q(0),
+ ],
+ q(cfa franc beac) => [
+ q(0033),
+ q(0),
+ ],
+ q(cfp franc) => [
+ q(0060),
+ q(0),
+ ],
+ q(chilean peso) => [
+ q(0038),
+ q(0),
+ ],
+ q(colombian peso) => [
+ q(0040),
+ q(0),
+ ],
+ q(comoro franc) => [
+ q(0042),
+ q(0),
+ ],
+ q(congolese franc) => [
+ q(0043),
+ q(0),
+ ],
+ q(convertible mark) => [
+ q(0025),
+ q(0),
+ ],
+ q(cordoba oro) => [
+ q(0115),
+ q(0),
+ ],
+ q(costa rican colon) => [
+ q(0045),
+ q(0),
+ ],
+ q(croatian kuna) => [
+ q(0046),
+ q(0),
+ ],
+ q(cuban peso) => [
+ q(0048),
+ q(0),
+ ],
+ q(czech koruna) => [
+ q(0050),
+ q(0),
+ ],
+ q(dalasi) => [
+ q(0061),
+ q(0),
+ ],
+ q(danish krone) => [
+ q(0051),
+ q(0),
+ ],
+ q(denar) => [
+ q(0098),
+ q(0),
+ ],
+ q(djibouti franc) => [
+ q(0052),
+ q(0),
+ ],
+ q(dobra) => [
+ q(0131),
+ q(0),
+ ],
+ q(dominican peso) => [
+ q(0053),
+ q(0),
+ ],
+ q(dong) => [
+ q(0168),
+ q(0),
+ ],
+ q(east caribbean dollar) => [
+ q(0007),
+ q(0),
+ ],
+ q(egyptian pound) => [
+ q(0054),
+ q(0),
+ ],
+ q(el salvador colon) => [
+ q(0055),
+ q(0),
+ ],
+ q(ethiopian birr) => [
+ q(0057),
+ q(0),
+ ],
+ q(euro) => [
+ q(0002),
+ q(0),
+ ],
+ q(falkland islands pound) => [
+ q(0058),
+ q(0),
+ ],
+ q(fiji dollar) => [
+ q(0059),
+ q(0),
+ ],
+ q(forint) => [
+ q(0072),
+ q(0),
+ ],
+ q(ghana cedi) => [
+ q(0063),
+ q(0),
+ ],
+ q(gibraltar pound) => [
+ q(0064),
+ q(0),
+ ],
+ q(gold) => [
+ q(0176),
+ q(0),
+ ],
+ q(gourde) => [
+ q(0069),
+ q(0),
+ ],
+ q(guarani) => [
+ q(0121),
+ q(0),
+ ],
+ q(guinea franc) => [
+ q(0067),
+ q(0),
+ ],
+ q(guyana dollar) => [
+ q(0068),
+ q(0),
+ ],
+ q(hong kong dollar) => [
+ q(0071),
+ q(0),
+ ],
+ q(hryvnia) => [
+ q(0159),
+ q(0),
+ ],
+ q(iceland krona) => [
+ q(0073),
+ q(0),
+ ],
+ q(indian rupee) => [
+ q(0022),
+ q(0),
+ ],
+ q(iranian rial) => [
+ q(0076),
+ q(0),
+ ],
+ q(iraqi dinar) => [
+ q(0077),
+ q(0),
+ ],
+ q(jamaican dollar) => [
+ q(0079),
+ q(0),
+ ],
+ q(jordanian dinar) => [
+ q(0081),
+ q(0),
+ ],
+ q(kenyan shilling) => [
+ q(0083),
+ q(0),
+ ],
+ q(kina) => [
+ q(0120),
+ q(0),
+ ],
+ q(kip) => [
+ q(0088),
+ q(0),
+ ],
+ q(kuwaiti dinar) => [
+ q(0086),
+ q(0),
+ ],
+ q(kwacha) => [
+ q(0100),
+ q(0),
+ ],
+ q(kwanza) => [
+ q(0006),
+ q(0),
+ ],
+ q(kyat) => [
+ q(0112),
+ q(0),
+ ],
+ q(lari) => [
+ q(0062),
+ q(0),
+ ],
+ q(latvian lats) => [
+ q(0089),
+ q(0),
+ ],
+ q(lebanese pound) => [
+ q(0090),
+ q(0),
+ ],
+ q(lek) => [
+ q(0003),
+ q(0),
+ ],
+ q(lempira) => [
+ q(0070),
+ q(0),
+ ],
+ q(leone) => [
+ q(0135),
+ q(0),
+ ],
+ q(liberian dollar) => [
+ q(0093),
+ q(0),
+ ],
+ q(libyan dinar) => [
+ q(0094),
+ q(0),
+ ],
+ q(lilangeni) => [
+ q(0144),
+ q(0),
+ ],
+ q(lithuanian litas) => [
+ q(0096),
+ q(0),
+ ],
+ q(loti) => [
+ q(0091),
+ q(0),
+ ],
+ q(malagasy ariary) => [
+ q(0099),
+ q(0),
+ ],
+ q(malaysian ringgit) => [
+ q(0101),
+ q(0),
+ ],
+ q(mauritius rupee) => [
+ q(0104),
+ q(0),
+ ],
+ q(mexican peso) => [
+ q(0106),
+ q(0),
+ ],
+ q(mexican unidad de inversion (udi)) => [
+ q(0107),
+ q(0),
+ ],
+ q(moldovan leu) => [
+ q(0108),
+ q(0),
+ ],
+ q(moroccan dirham) => [
+ q(0110),
+ q(0),
+ ],
+ q(mozambique metical) => [
+ q(0111),
+ q(0),
+ ],
+ q(mvdol) => [
+ q(0024),
+ q(0),
+ ],
+ q(naira) => [
+ q(0116),
+ q(0),
+ ],
+ q(nakfa) => [
+ q(0056),
+ q(0),
+ ],
+ q(namibia dollar) => [
+ q(0113),
+ q(0),
+ ],
+ q(nepalese rupee) => [
+ q(0114),
+ q(0),
+ ],
+ q(netherlands antillean guilder) => [
+ q(0049),
+ q(0),
+ ],
+ q(new israeli sheqel) => [
+ q(0078),
+ q(0),
+ ],
+ q(new romanian leu) => [
+ q(0126),
+ q(0),
+ ],
+ q(new taiwan dollar) => [
+ q(0149),
+ q(0),
+ ],
+ q(new zealand dollar) => [
+ q(0044),
+ q(0),
+ ],
+ q(ngultrum) => [
+ q(0021),
+ q(0),
+ ],
+ q(north korean won) => [
+ q(0084),
+ q(0),
+ ],
+ q(norwegian krone) => [
+ q(0027),
+ q(0),
+ ],
+ q(nuevo sol) => [
+ q(0122),
+ q(0),
+ ],
+ q(ouguiya) => [
+ q(0103),
+ q(0),
+ ],
+ q(pa'anga) => [
+ q(0153),
+ q(0),
+ ],
+ q(pakistan rupee) => [
+ q(0118),
+ q(0),
+ ],
+ q(palladium) => [
+ q(0177),
+ q(0),
+ ],
+ q(pataca) => [
+ q(0097),
+ q(0),
+ ],
+ q(peso convertible) => [
+ q(0047),
+ q(0),
+ ],
+ q(peso uruguayo) => [
+ q(0164),
+ q(0),
+ ],
+ q(philippine peso) => [
+ q(0123),
+ q(0),
+ ],
+ q(platinum) => [
+ q(0178),
+ q(0),
+ ],
+ q(pound sterling) => [
+ q(0066),
+ q(0),
+ ],
+ q(pula) => [
+ q(0026),
+ q(0),
+ ],
+ q(qatari rial) => [
+ q(0125),
+ q(0),
+ ],
+ q(quetzal) => [
+ q(0065),
+ q(0),
+ ],
+ q(rand) => [
+ q(0092),
+ q(0),
+ ],
+ q(rial omani) => [
+ q(0117),
+ q(0),
+ ],
+ q(riel) => [
+ q(0032),
+ q(0),
+ ],
+ q(rufiyaa) => [
+ q(0102),
+ q(0),
+ ],
+ q(rupiah) => [
+ q(0074),
+ q(0),
+ ],
+ q(russian ruble) => [
+ q(0127),
+ q(0),
+ ],
+ q(rwanda franc) => [
+ q(0128),
+ q(0),
+ ],
+ q(saint helena pound) => [
+ q(0129),
+ q(0),
+ ],
+ q(saudi riyal) => [
+ q(0132),
+ q(0),
+ ],
+ q(sdr (special drawing right)) => [
+ q(0075),
+ q(0),
+ ],
+ q(serbian dinar) => [
+ q(0133),
+ q(0),
+ ],
+ q(seychelles rupee) => [
+ q(0134),
+ q(0),
+ ],
+ q(silver) => [
+ q(0179),
+ q(0),
+ ],
+ q(singapore dollar) => [
+ q(0136),
+ q(0),
+ ],
+ q(solomon islands dollar) => [
+ q(0138),
+ q(0),
+ ],
+ q(som) => [
+ q(0087),
+ q(0),
+ ],
+ q(somali shilling) => [
+ q(0139),
+ q(0),
+ ],
+ q(somoni) => [
+ q(0150),
+ q(0),
+ ],
+ q(south sudanese pound) => [
+ q(0140),
+ q(0),
+ ],
+ q(sri lanka rupee) => [
+ q(0141),
+ q(0),
+ ],
+ q(sucre) => [
+ q(0137),
+ q(0),
+ ],
+ q(sudanese pound) => [
+ q(0142),
+ q(0),
+ ],
+ q(surinam dollar) => [
+ q(0143),
+ q(0),
+ ],
+ q(swedish krona) => [
+ q(0145),
+ q(0),
+ ],
+ q(swiss franc) => [
+ q(0095),
+ q(0),
+ ],
+ q(syrian pound) => [
+ q(0148),
+ q(0),
+ ],
+ q(taka) => [
+ q(0015),
+ q(0),
+ ],
+ q(tala) => [
+ q(0130),
+ q(0),
+ ],
+ q(tanzanian shilling) => [
+ q(0151),
+ q(0),
+ ],
+ q(tenge) => [
+ q(0082),
+ q(0),
+ ],
+ q(trinidad and tobago dollar) => [
+ q(0154),
+ q(0),
+ ],
+ q(tugrik) => [
+ q(0109),
+ q(0),
+ ],
+ q(tunisian dinar) => [
+ q(0155),
+ q(0),
+ ],
+ q(turkish lira) => [
+ q(0156),
+ q(0),
+ ],
+ q(turkmenistan new manat) => [
+ q(0157),
+ q(0),
+ ],
+ q(uae dirham) => [
+ q(0160),
+ q(0),
+ ],
+ q(uganda shilling) => [
+ q(0158),
+ q(0),
+ ],
+ q(unidad de valor real) => [
+ q(0041),
+ q(0),
+ ],
+ q(unidades de fomento) => [
+ q(0037),
+ q(0),
+ ],
+ q(uruguay peso en unidades indexadas (uruiurui)) => [
+ q(0163),
+ q(0),
+ ],
+ q(us dollar) => [
+ q(0005),
+ q(0),
+ ],
+ q(us dollar (next day)) => [
+ q(0161),
+ q(0),
+ ],
+ q(us dollar (same day)) => [
+ q(0162),
+ q(0),
+ ],
+ q(uzbekistan sum) => [
+ q(0165),
+ q(0),
+ ],
+ q(vatu) => [
+ q(0166),
+ q(0),
+ ],
+ q(wir euro) => [
+ q(0146),
+ q(0),
+ ],
+ q(wir franc) => [
+ q(0147),
+ q(0),
+ ],
+ q(won) => [
+ q(0085),
+ q(0),
+ ],
+ q(yemeni rial) => [
+ q(0169),
+ q(0),
+ ],
+ q(yen) => [
+ q(0080),
+ q(0),
+ ],
+ q(yuan renminbi) => [
+ q(0039),
+ q(0),
+ ],
+ q(zambian kwacha) => [
+ q(0170),
+ q(0),
+ ],
+ q(zimbabwe dollar) => [
+ q(0171),
+ q(0),
+ ],
+ q(zloty) => [
+ q(0124),
+ q(0),
+ ],
+};
+
+$Locale::Codes::Data{'currency'}{'code2id'} = {
+ q(alpha) => {
+ q(AED) => [
+ q(0160),
+ q(0),
+ ],
+ q(AFN) => [
+ q(0001),
+ q(0),
+ ],
+ q(ALL) => [
+ q(0003),
+ q(0),
+ ],
+ q(AMD) => [
+ q(0009),
+ q(0),
+ ],
+ q(ANG) => [
+ q(0049),
+ q(0),
+ ],
+ q(AOA) => [
+ q(0006),
+ q(0),
+ ],
+ q(ARS) => [
+ q(0008),
+ q(0),
+ ],
+ q(AUD) => [
+ q(0011),
+ q(0),
+ ],
+ q(AWG) => [
+ q(0010),
+ q(0),
+ ],
+ q(AZN) => [
+ q(0012),
+ q(0),
+ ],
+ q(BAM) => [
+ q(0025),
+ q(0),
+ ],
+ q(BBD) => [
+ q(0016),
+ q(0),
+ ],
+ q(BDT) => [
+ q(0015),
+ q(0),
+ ],
+ q(BGN) => [
+ q(0030),
+ q(0),
+ ],
+ q(BHD) => [
+ q(0014),
+ q(0),
+ ],
+ q(BIF) => [
+ q(0031),
+ q(0),
+ ],
+ q(BMD) => [
+ q(0020),
+ q(0),
+ ],
+ q(BND) => [
+ q(0029),
+ q(0),
+ ],
+ q(BOB) => [
+ q(0023),
+ q(0),
+ ],
+ q(BOV) => [
+ q(0024),
+ q(0),
+ ],
+ q(BRL) => [
+ q(0028),
+ q(0),
+ ],
+ q(BSD) => [
+ q(0013),
+ q(0),
+ ],
+ q(BTN) => [
+ q(0021),
+ q(0),
+ ],
+ q(BWP) => [
+ q(0026),
+ q(0),
+ ],
+ q(BYR) => [
+ q(0017),
+ q(0),
+ ],
+ q(BZD) => [
+ q(0018),
+ q(0),
+ ],
+ q(CAD) => [
+ q(0034),
+ q(0),
+ ],
+ q(CDF) => [
+ q(0043),
+ q(0),
+ ],
+ q(CHE) => [
+ q(0146),
+ q(0),
+ ],
+ q(CHF) => [
+ q(0095),
+ q(0),
+ ],
+ q(CHW) => [
+ q(0147),
+ q(0),
+ ],
+ q(CLF) => [
+ q(0037),
+ q(0),
+ ],
+ q(CLP) => [
+ q(0038),
+ q(0),
+ ],
+ q(CNY) => [
+ q(0039),
+ q(0),
+ ],
+ q(COP) => [
+ q(0040),
+ q(0),
+ ],
+ q(COU) => [
+ q(0041),
+ q(0),
+ ],
+ q(CRC) => [
+ q(0045),
+ q(0),
+ ],
+ q(CUC) => [
+ q(0047),
+ q(0),
+ ],
+ q(CUP) => [
+ q(0048),
+ q(0),
+ ],
+ q(CVE) => [
+ q(0035),
+ q(0),
+ ],
+ q(CZK) => [
+ q(0050),
+ q(0),
+ ],
+ q(DJF) => [
+ q(0052),
+ q(0),
+ ],
+ q(DKK) => [
+ q(0051),
+ q(0),
+ ],
+ q(DOP) => [
+ q(0053),
+ q(0),
+ ],
+ q(DZD) => [
+ q(0004),
+ q(0),
+ ],
+ q(EGP) => [
+ q(0054),
+ q(0),
+ ],
+ q(ERN) => [
+ q(0056),
+ q(0),
+ ],
+ q(ETB) => [
+ q(0057),
+ q(0),
+ ],
+ q(EUR) => [
+ q(0002),
+ q(0),
+ ],
+ q(FJD) => [
+ q(0059),
+ q(0),
+ ],
+ q(FKP) => [
+ q(0058),
+ q(0),
+ ],
+ q(GBP) => [
+ q(0066),
+ q(0),
+ ],
+ q(GEL) => [
+ q(0062),
+ q(0),
+ ],
+ q(GHS) => [
+ q(0063),
+ q(0),
+ ],
+ q(GIP) => [
+ q(0064),
+ q(0),
+ ],
+ q(GMD) => [
+ q(0061),
+ q(0),
+ ],
+ q(GNF) => [
+ q(0067),
+ q(0),
+ ],
+ q(GTQ) => [
+ q(0065),
+ q(0),
+ ],
+ q(GYD) => [
+ q(0068),
+ q(0),
+ ],
+ q(HKD) => [
+ q(0071),
+ q(0),
+ ],
+ q(HNL) => [
+ q(0070),
+ q(0),
+ ],
+ q(HRK) => [
+ q(0046),
+ q(0),
+ ],
+ q(HTG) => [
+ q(0069),
+ q(0),
+ ],
+ q(HUF) => [
+ q(0072),
+ q(0),
+ ],
+ q(IDR) => [
+ q(0074),
+ q(0),
+ ],
+ q(ILS) => [
+ q(0078),
+ q(0),
+ ],
+ q(INR) => [
+ q(0022),
+ q(0),
+ ],
+ q(IQD) => [
+ q(0077),
+ q(0),
+ ],
+ q(IRR) => [
+ q(0076),
+ q(0),
+ ],
+ q(ISK) => [
+ q(0073),
+ q(0),
+ ],
+ q(JMD) => [
+ q(0079),
+ q(0),
+ ],
+ q(JOD) => [
+ q(0081),
+ q(0),
+ ],
+ q(JPY) => [
+ q(0080),
+ q(0),
+ ],
+ q(KES) => [
+ q(0083),
+ q(0),
+ ],
+ q(KGS) => [
+ q(0087),
+ q(0),
+ ],
+ q(KHR) => [
+ q(0032),
+ q(0),
+ ],
+ q(KMF) => [
+ q(0042),
+ q(0),
+ ],
+ q(KPW) => [
+ q(0084),
+ q(0),
+ ],
+ q(KRW) => [
+ q(0085),
+ q(0),
+ ],
+ q(KWD) => [
+ q(0086),
+ q(0),
+ ],
+ q(KYD) => [
+ q(0036),
+ q(0),
+ ],
+ q(KZT) => [
+ q(0082),
+ q(0),
+ ],
+ q(LAK) => [
+ q(0088),
+ q(0),
+ ],
+ q(LBP) => [
+ q(0090),
+ q(0),
+ ],
+ q(LKR) => [
+ q(0141),
+ q(0),
+ ],
+ q(LRD) => [
+ q(0093),
+ q(0),
+ ],
+ q(LSL) => [
+ q(0091),
+ q(0),
+ ],
+ q(LTL) => [
+ q(0096),
+ q(0),
+ ],
+ q(LVL) => [
+ q(0089),
+ q(0),
+ ],
+ q(LYD) => [
+ q(0094),
+ q(0),
+ ],
+ q(MAD) => [
+ q(0110),
+ q(0),
+ ],
+ q(MDL) => [
+ q(0108),
+ q(0),
+ ],
+ q(MGA) => [
+ q(0099),
+ q(0),
+ ],
+ q(MKD) => [
+ q(0098),
+ q(0),
+ ],
+ q(MMK) => [
+ q(0112),
+ q(0),
+ ],
+ q(MNT) => [
+ q(0109),
+ q(0),
+ ],
+ q(MOP) => [
+ q(0097),
+ q(0),
+ ],
+ q(MRO) => [
+ q(0103),
+ q(0),
+ ],
+ q(MUR) => [
+ q(0104),
+ q(0),
+ ],
+ q(MVR) => [
+ q(0102),
+ q(0),
+ ],
+ q(MWK) => [
+ q(0100),
+ q(0),
+ ],
+ q(MXN) => [
+ q(0106),
+ q(0),
+ ],
+ q(MXV) => [
+ q(0107),
+ q(0),
+ ],
+ q(MYR) => [
+ q(0101),
+ q(0),
+ ],
+ q(MZN) => [
+ q(0111),
+ q(0),
+ ],
+ q(NAD) => [
+ q(0113),
+ q(0),
+ ],
+ q(NGN) => [
+ q(0116),
+ q(0),
+ ],
+ q(NIO) => [
+ q(0115),
+ q(0),
+ ],
+ q(NOK) => [
+ q(0027),
+ q(0),
+ ],
+ q(NPR) => [
+ q(0114),
+ q(0),
+ ],
+ q(NZD) => [
+ q(0044),
+ q(0),
+ ],
+ q(OMR) => [
+ q(0117),
+ q(0),
+ ],
+ q(PAB) => [
+ q(0119),
+ q(0),
+ ],
+ q(PEN) => [
+ q(0122),
+ q(0),
+ ],
+ q(PGK) => [
+ q(0120),
+ q(0),
+ ],
+ q(PHP) => [
+ q(0123),
+ q(0),
+ ],
+ q(PKR) => [
+ q(0118),
+ q(0),
+ ],
+ q(PLN) => [
+ q(0124),
+ q(0),
+ ],
+ q(PYG) => [
+ q(0121),
+ q(0),
+ ],
+ q(QAR) => [
+ q(0125),
+ q(0),
+ ],
+ q(RON) => [
+ q(0126),
+ q(0),
+ ],
+ q(RSD) => [
+ q(0133),
+ q(0),
+ ],
+ q(RUB) => [
+ q(0127),
+ q(0),
+ ],
+ q(RWF) => [
+ q(0128),
+ q(0),
+ ],
+ q(SAR) => [
+ q(0132),
+ q(0),
+ ],
+ q(SBD) => [
+ q(0138),
+ q(0),
+ ],
+ q(SCR) => [
+ q(0134),
+ q(0),
+ ],
+ q(SDG) => [
+ q(0142),
+ q(0),
+ ],
+ q(SEK) => [
+ q(0145),
+ q(0),
+ ],
+ q(SGD) => [
+ q(0136),
+ q(0),
+ ],
+ q(SHP) => [
+ q(0129),
+ q(0),
+ ],
+ q(SLL) => [
+ q(0135),
+ q(0),
+ ],
+ q(SOS) => [
+ q(0139),
+ q(0),
+ ],
+ q(SRD) => [
+ q(0143),
+ q(0),
+ ],
+ q(SSP) => [
+ q(0140),
+ q(0),
+ ],
+ q(STD) => [
+ q(0131),
+ q(0),
+ ],
+ q(SVC) => [
+ q(0055),
+ q(0),
+ ],
+ q(SYP) => [
+ q(0148),
+ q(0),
+ ],
+ q(SZL) => [
+ q(0144),
+ q(0),
+ ],
+ q(THB) => [
+ q(0152),
+ q(0),
+ ],
+ q(TJS) => [
+ q(0150),
+ q(0),
+ ],
+ q(TMT) => [
+ q(0157),
+ q(0),
+ ],
+ q(TND) => [
+ q(0155),
+ q(0),
+ ],
+ q(TOP) => [
+ q(0153),
+ q(0),
+ ],
+ q(TRY) => [
+ q(0156),
+ q(0),
+ ],
+ q(TTD) => [
+ q(0154),
+ q(0),
+ ],
+ q(TWD) => [
+ q(0149),
+ q(0),
+ ],
+ q(TZS) => [
+ q(0151),
+ q(0),
+ ],
+ q(UAH) => [
+ q(0159),
+ q(0),
+ ],
+ q(UGX) => [
+ q(0158),
+ q(0),
+ ],
+ q(USD) => [
+ q(0005),
+ q(0),
+ ],
+ q(USN) => [
+ q(0161),
+ q(0),
+ ],
+ q(USS) => [
+ q(0162),
+ q(0),
+ ],
+ q(UYI) => [
+ q(0163),
+ q(0),
+ ],
+ q(UYU) => [
+ q(0164),
+ q(0),
+ ],
+ q(UZS) => [
+ q(0165),
+ q(0),
+ ],
+ q(VEF) => [
+ q(0167),
+ q(0),
+ ],
+ q(VND) => [
+ q(0168),
+ q(0),
+ ],
+ q(VUV) => [
+ q(0166),
+ q(0),
+ ],
+ q(WST) => [
+ q(0130),
+ q(0),
+ ],
+ q(XAF) => [
+ q(0033),
+ q(0),
+ ],
+ q(XAG) => [
+ q(0179),
+ q(0),
+ ],
+ q(XAU) => [
+ q(0176),
+ q(0),
+ ],
+ q(XBA) => [
+ q(0172),
+ q(0),
+ ],
+ q(XBB) => [
+ q(0173),
+ q(0),
+ ],
+ q(XBC) => [
+ q(0174),
+ q(0),
+ ],
+ q(XBD) => [
+ q(0175),
+ q(0),
+ ],
+ q(XCD) => [
+ q(0007),
+ q(0),
+ ],
+ q(XDR) => [
+ q(0075),
+ q(0),
+ ],
+ q(XOF) => [
+ q(0019),
+ q(0),
+ ],
+ q(XPD) => [
+ q(0177),
+ q(0),
+ ],
+ q(XPF) => [
+ q(0060),
+ q(0),
+ ],
+ q(XPT) => [
+ q(0178),
+ q(0),
+ ],
+ q(XSU) => [
+ q(0137),
+ q(0),
+ ],
+ q(XUA) => [
+ q(0105),
+ q(0),
+ ],
+ q(YER) => [
+ q(0169),
+ q(0),
+ ],
+ q(ZAR) => [
+ q(0092),
+ q(0),
+ ],
+ q(ZMW) => [
+ q(0170),
+ q(0),
+ ],
+ q(ZWL) => [
+ q(0171),
+ q(0),
+ ],
+ },
+ q(num) => {
+ q(008) => [
+ q(0003),
+ q(0),
+ ],
+ q(012) => [
+ q(0004),
+ q(0),
+ ],
+ q(032) => [
+ q(0008),
+ q(0),
+ ],
+ q(036) => [
+ q(0011),
+ q(0),
+ ],
+ q(044) => [
+ q(0013),
+ q(0),
+ ],
+ q(048) => [
+ q(0014),
+ q(0),
+ ],
+ q(050) => [
+ q(0015),
+ q(0),
+ ],
+ q(051) => [
+ q(0009),
+ q(0),
+ ],
+ q(052) => [
+ q(0016),
+ q(0),
+ ],
+ q(060) => [
+ q(0020),
+ q(0),
+ ],
+ q(064) => [
+ q(0021),
+ q(0),
+ ],
+ q(068) => [
+ q(0023),
+ q(0),
+ ],
+ q(072) => [
+ q(0026),
+ q(0),
+ ],
+ q(084) => [
+ q(0018),
+ q(0),
+ ],
+ q(090) => [
+ q(0138),
+ q(0),
+ ],
+ q(096) => [
+ q(0029),
+ q(0),
+ ],
+ q(104) => [
+ q(0112),
+ q(0),
+ ],
+ q(108) => [
+ q(0031),
+ q(0),
+ ],
+ q(116) => [
+ q(0032),
+ q(0),
+ ],
+ q(124) => [
+ q(0034),
+ q(0),
+ ],
+ q(132) => [
+ q(0035),
+ q(0),
+ ],
+ q(136) => [
+ q(0036),
+ q(0),
+ ],
+ q(144) => [
+ q(0141),
+ q(0),
+ ],
+ q(152) => [
+ q(0038),
+ q(0),
+ ],
+ q(156) => [
+ q(0039),
+ q(0),
+ ],
+ q(170) => [
+ q(0040),
+ q(0),
+ ],
+ q(174) => [
+ q(0042),
+ q(0),
+ ],
+ q(188) => [
+ q(0045),
+ q(0),
+ ],
+ q(191) => [
+ q(0046),
+ q(0),
+ ],
+ q(192) => [
+ q(0048),
+ q(0),
+ ],
+ q(203) => [
+ q(0050),
+ q(0),
+ ],
+ q(208) => [
+ q(0051),
+ q(0),
+ ],
+ q(214) => [
+ q(0053),
+ q(0),
+ ],
+ q(222) => [
+ q(0055),
+ q(0),
+ ],
+ q(230) => [
+ q(0057),
+ q(0),
+ ],
+ q(232) => [
+ q(0056),
+ q(0),
+ ],
+ q(238) => [
+ q(0058),
+ q(0),
+ ],
+ q(242) => [
+ q(0059),
+ q(0),
+ ],
+ q(262) => [
+ q(0052),
+ q(0),
+ ],
+ q(270) => [
+ q(0061),
+ q(0),
+ ],
+ q(292) => [
+ q(0064),
+ q(0),
+ ],
+ q(320) => [
+ q(0065),
+ q(0),
+ ],
+ q(324) => [
+ q(0067),
+ q(0),
+ ],
+ q(328) => [
+ q(0068),
+ q(0),
+ ],
+ q(332) => [
+ q(0069),
+ q(0),
+ ],
+ q(340) => [
+ q(0070),
+ q(0),
+ ],
+ q(344) => [
+ q(0071),
+ q(0),
+ ],
+ q(348) => [
+ q(0072),
+ q(0),
+ ],
+ q(352) => [
+ q(0073),
+ q(0),
+ ],
+ q(356) => [
+ q(0022),
+ q(0),
+ ],
+ q(360) => [
+ q(0074),
+ q(0),
+ ],
+ q(364) => [
+ q(0076),
+ q(0),
+ ],
+ q(368) => [
+ q(0077),
+ q(0),
+ ],
+ q(376) => [
+ q(0078),
+ q(0),
+ ],
+ q(388) => [
+ q(0079),
+ q(0),
+ ],
+ q(392) => [
+ q(0080),
+ q(0),
+ ],
+ q(398) => [
+ q(0082),
+ q(0),
+ ],
+ q(400) => [
+ q(0081),
+ q(0),
+ ],
+ q(404) => [
+ q(0083),
+ q(0),
+ ],
+ q(408) => [
+ q(0084),
+ q(0),
+ ],
+ q(410) => [
+ q(0085),
+ q(0),
+ ],
+ q(414) => [
+ q(0086),
+ q(0),
+ ],
+ q(417) => [
+ q(0087),
+ q(0),
+ ],
+ q(418) => [
+ q(0088),
+ q(0),
+ ],
+ q(422) => [
+ q(0090),
+ q(0),
+ ],
+ q(426) => [
+ q(0091),
+ q(0),
+ ],
+ q(428) => [
+ q(0089),
+ q(0),
+ ],
+ q(430) => [
+ q(0093),
+ q(0),
+ ],
+ q(434) => [
+ q(0094),
+ q(0),
+ ],
+ q(440) => [
+ q(0096),
+ q(0),
+ ],
+ q(446) => [
+ q(0097),
+ q(0),
+ ],
+ q(454) => [
+ q(0100),
+ q(0),
+ ],
+ q(458) => [
+ q(0101),
+ q(0),
+ ],
+ q(462) => [
+ q(0102),
+ q(0),
+ ],
+ q(478) => [
+ q(0103),
+ q(0),
+ ],
+ q(480) => [
+ q(0104),
+ q(0),
+ ],
+ q(484) => [
+ q(0106),
+ q(0),
+ ],
+ q(496) => [
+ q(0109),
+ q(0),
+ ],
+ q(498) => [
+ q(0108),
+ q(0),
+ ],
+ q(504) => [
+ q(0110),
+ q(0),
+ ],
+ q(512) => [
+ q(0117),
+ q(0),
+ ],
+ q(516) => [
+ q(0113),
+ q(0),
+ ],
+ q(524) => [
+ q(0114),
+ q(0),
+ ],
+ q(532) => [
+ q(0049),
+ q(0),
+ ],
+ q(533) => [
+ q(0010),
+ q(0),
+ ],
+ q(548) => [
+ q(0166),
+ q(0),
+ ],
+ q(554) => [
+ q(0044),
+ q(0),
+ ],
+ q(558) => [
+ q(0115),
+ q(0),
+ ],
+ q(566) => [
+ q(0116),
+ q(0),
+ ],
+ q(578) => [
+ q(0027),
+ q(0),
+ ],
+ q(586) => [
+ q(0118),
+ q(0),
+ ],
+ q(590) => [
+ q(0119),
+ q(0),
+ ],
+ q(598) => [
+ q(0120),
+ q(0),
+ ],
+ q(600) => [
+ q(0121),
+ q(0),
+ ],
+ q(604) => [
+ q(0122),
+ q(0),
+ ],
+ q(608) => [
+ q(0123),
+ q(0),
+ ],
+ q(634) => [
+ q(0125),
+ q(0),
+ ],
+ q(643) => [
+ q(0127),
+ q(0),
+ ],
+ q(646) => [
+ q(0128),
+ q(0),
+ ],
+ q(654) => [
+ q(0129),
+ q(0),
+ ],
+ q(678) => [
+ q(0131),
+ q(0),
+ ],
+ q(682) => [
+ q(0132),
+ q(0),
+ ],
+ q(690) => [
+ q(0134),
+ q(0),
+ ],
+ q(694) => [
+ q(0135),
+ q(0),
+ ],
+ q(702) => [
+ q(0136),
+ q(0),
+ ],
+ q(704) => [
+ q(0168),
+ q(0),
+ ],
+ q(706) => [
+ q(0139),
+ q(0),
+ ],
+ q(710) => [
+ q(0092),
+ q(0),
+ ],
+ q(728) => [
+ q(0140),
+ q(0),
+ ],
+ q(748) => [
+ q(0144),
+ q(0),
+ ],
+ q(752) => [
+ q(0145),
+ q(0),
+ ],
+ q(756) => [
+ q(0095),
+ q(0),
+ ],
+ q(760) => [
+ q(0148),
+ q(0),
+ ],
+ q(764) => [
+ q(0152),
+ q(0),
+ ],
+ q(776) => [
+ q(0153),
+ q(0),
+ ],
+ q(780) => [
+ q(0154),
+ q(0),
+ ],
+ q(784) => [
+ q(0160),
+ q(0),
+ ],
+ q(788) => [
+ q(0155),
+ q(0),
+ ],
+ q(800) => [
+ q(0158),
+ q(0),
+ ],
+ q(807) => [
+ q(0098),
+ q(0),
+ ],
+ q(818) => [
+ q(0054),
+ q(0),
+ ],
+ q(826) => [
+ q(0066),
+ q(0),
+ ],
+ q(834) => [
+ q(0151),
+ q(0),
+ ],
+ q(840) => [
+ q(0005),
+ q(0),
+ ],
+ q(858) => [
+ q(0164),
+ q(0),
+ ],
+ q(860) => [
+ q(0165),
+ q(0),
+ ],
+ q(882) => [
+ q(0130),
+ q(0),
+ ],
+ q(886) => [
+ q(0169),
+ q(0),
+ ],
+ q(901) => [
+ q(0149),
+ q(0),
+ ],
+ q(931) => [
+ q(0047),
+ q(0),
+ ],
+ q(932) => [
+ q(0171),
+ q(0),
+ ],
+ q(934) => [
+ q(0157),
+ q(0),
+ ],
+ q(936) => [
+ q(0063),
+ q(0),
+ ],
+ q(937) => [
+ q(0167),
+ q(0),
+ ],
+ q(938) => [
+ q(0142),
+ q(0),
+ ],
+ q(940) => [
+ q(0163),
+ q(0),
+ ],
+ q(941) => [
+ q(0133),
+ q(0),
+ ],
+ q(943) => [
+ q(0111),
+ q(0),
+ ],
+ q(944) => [
+ q(0012),
+ q(0),
+ ],
+ q(946) => [
+ q(0126),
+ q(0),
+ ],
+ q(947) => [
+ q(0146),
+ q(0),
+ ],
+ q(948) => [
+ q(0147),
+ q(0),
+ ],
+ q(949) => [
+ q(0156),
+ q(0),
+ ],
+ q(950) => [
+ q(0033),
+ q(0),
+ ],
+ q(951) => [
+ q(0007),
+ q(0),
+ ],
+ q(952) => [
+ q(0019),
+ q(0),
+ ],
+ q(953) => [
+ q(0060),
+ q(0),
+ ],
+ q(955) => [
+ q(0172),
+ q(0),
+ ],
+ q(956) => [
+ q(0173),
+ q(0),
+ ],
+ q(957) => [
+ q(0174),
+ q(0),
+ ],
+ q(958) => [
+ q(0175),
+ q(0),
+ ],
+ q(959) => [
+ q(0176),
+ q(0),
+ ],
+ q(960) => [
+ q(0075),
+ q(0),
+ ],
+ q(961) => [
+ q(0179),
+ q(0),
+ ],
+ q(962) => [
+ q(0178),
+ q(0),
+ ],
+ q(964) => [
+ q(0177),
+ q(0),
+ ],
+ q(965) => [
+ q(0105),
+ q(0),
+ ],
+ q(967) => [
+ q(0170),
+ q(0),
+ ],
+ q(968) => [
+ q(0143),
+ q(0),
+ ],
+ q(969) => [
+ q(0099),
+ q(0),
+ ],
+ q(970) => [
+ q(0041),
+ q(0),
+ ],
+ q(971) => [
+ q(0001),
+ q(0),
+ ],
+ q(972) => [
+ q(0150),
+ q(0),
+ ],
+ q(973) => [
+ q(0006),
+ q(0),
+ ],
+ q(974) => [
+ q(0017),
+ q(0),
+ ],
+ q(975) => [
+ q(0030),
+ q(0),
+ ],
+ q(976) => [
+ q(0043),
+ q(0),
+ ],
+ q(977) => [
+ q(0025),
+ q(0),
+ ],
+ q(978) => [
+ q(0002),
+ q(0),
+ ],
+ q(979) => [
+ q(0107),
+ q(0),
+ ],
+ q(980) => [
+ q(0159),
+ q(0),
+ ],
+ q(981) => [
+ q(0062),
+ q(0),
+ ],
+ q(984) => [
+ q(0024),
+ q(0),
+ ],
+ q(985) => [
+ q(0124),
+ q(0),
+ ],
+ q(986) => [
+ q(0028),
+ q(0),
+ ],
+ q(990) => [
+ q(0037),
+ q(0),
+ ],
+ q(994) => [
+ q(0137),
+ q(0),
+ ],
+ q(997) => [
+ q(0161),
+ q(0),
+ ],
+ q(998) => [
+ q(0162),
+ q(0),
+ ],
+ },
+};
+
+$Locale::Codes::Data{'currency'}{'id2code'} = {
+ q(alpha) => {
+ q(0001) => q(AFN),
+ q(0002) => q(EUR),
+ q(0003) => q(ALL),
+ q(0004) => q(DZD),
+ q(0005) => q(USD),
+ q(0006) => q(AOA),
+ q(0007) => q(XCD),
+ q(0008) => q(ARS),
+ q(0009) => q(AMD),
+ q(0010) => q(AWG),
+ q(0011) => q(AUD),
+ q(0012) => q(AZN),
+ q(0013) => q(BSD),
+ q(0014) => q(BHD),
+ q(0015) => q(BDT),
+ q(0016) => q(BBD),
+ q(0017) => q(BYR),
+ q(0018) => q(BZD),
+ q(0019) => q(XOF),
+ q(0020) => q(BMD),
+ q(0021) => q(BTN),
+ q(0022) => q(INR),
+ q(0023) => q(BOB),
+ q(0024) => q(BOV),
+ q(0025) => q(BAM),
+ q(0026) => q(BWP),
+ q(0027) => q(NOK),
+ q(0028) => q(BRL),
+ q(0029) => q(BND),
+ q(0030) => q(BGN),
+ q(0031) => q(BIF),
+ q(0032) => q(KHR),
+ q(0033) => q(XAF),
+ q(0034) => q(CAD),
+ q(0035) => q(CVE),
+ q(0036) => q(KYD),
+ q(0037) => q(CLF),
+ q(0038) => q(CLP),
+ q(0039) => q(CNY),
+ q(0040) => q(COP),
+ q(0041) => q(COU),
+ q(0042) => q(KMF),
+ q(0043) => q(CDF),
+ q(0044) => q(NZD),
+ q(0045) => q(CRC),
+ q(0046) => q(HRK),
+ q(0047) => q(CUC),
+ q(0048) => q(CUP),
+ q(0049) => q(ANG),
+ q(0050) => q(CZK),
+ q(0051) => q(DKK),
+ q(0052) => q(DJF),
+ q(0053) => q(DOP),
+ q(0054) => q(EGP),
+ q(0055) => q(SVC),
+ q(0056) => q(ERN),
+ q(0057) => q(ETB),
+ q(0058) => q(FKP),
+ q(0059) => q(FJD),
+ q(0060) => q(XPF),
+ q(0061) => q(GMD),
+ q(0062) => q(GEL),
+ q(0063) => q(GHS),
+ q(0064) => q(GIP),
+ q(0065) => q(GTQ),
+ q(0066) => q(GBP),
+ q(0067) => q(GNF),
+ q(0068) => q(GYD),
+ q(0069) => q(HTG),
+ q(0070) => q(HNL),
+ q(0071) => q(HKD),
+ q(0072) => q(HUF),
+ q(0073) => q(ISK),
+ q(0074) => q(IDR),
+ q(0075) => q(XDR),
+ q(0076) => q(IRR),
+ q(0077) => q(IQD),
+ q(0078) => q(ILS),
+ q(0079) => q(JMD),
+ q(0080) => q(JPY),
+ q(0081) => q(JOD),
+ q(0082) => q(KZT),
+ q(0083) => q(KES),
+ q(0084) => q(KPW),
+ q(0085) => q(KRW),
+ q(0086) => q(KWD),
+ q(0087) => q(KGS),
+ q(0088) => q(LAK),
+ q(0089) => q(LVL),
+ q(0090) => q(LBP),
+ q(0091) => q(LSL),
+ q(0092) => q(ZAR),
+ q(0093) => q(LRD),
+ q(0094) => q(LYD),
+ q(0095) => q(CHF),
+ q(0096) => q(LTL),
+ q(0097) => q(MOP),
+ q(0098) => q(MKD),
+ q(0099) => q(MGA),
+ q(0100) => q(MWK),
+ q(0101) => q(MYR),
+ q(0102) => q(MVR),
+ q(0103) => q(MRO),
+ q(0104) => q(MUR),
+ q(0105) => q(XUA),
+ q(0106) => q(MXN),
+ q(0107) => q(MXV),
+ q(0108) => q(MDL),
+ q(0109) => q(MNT),
+ q(0110) => q(MAD),
+ q(0111) => q(MZN),
+ q(0112) => q(MMK),
+ q(0113) => q(NAD),
+ q(0114) => q(NPR),
+ q(0115) => q(NIO),
+ q(0116) => q(NGN),
+ q(0117) => q(OMR),
+ q(0118) => q(PKR),
+ q(0119) => q(PAB),
+ q(0120) => q(PGK),
+ q(0121) => q(PYG),
+ q(0122) => q(PEN),
+ q(0123) => q(PHP),
+ q(0124) => q(PLN),
+ q(0125) => q(QAR),
+ q(0126) => q(RON),
+ q(0127) => q(RUB),
+ q(0128) => q(RWF),
+ q(0129) => q(SHP),
+ q(0130) => q(WST),
+ q(0131) => q(STD),
+ q(0132) => q(SAR),
+ q(0133) => q(RSD),
+ q(0134) => q(SCR),
+ q(0135) => q(SLL),
+ q(0136) => q(SGD),
+ q(0137) => q(XSU),
+ q(0138) => q(SBD),
+ q(0139) => q(SOS),
+ q(0140) => q(SSP),
+ q(0141) => q(LKR),
+ q(0142) => q(SDG),
+ q(0143) => q(SRD),
+ q(0144) => q(SZL),
+ q(0145) => q(SEK),
+ q(0146) => q(CHE),
+ q(0147) => q(CHW),
+ q(0148) => q(SYP),
+ q(0149) => q(TWD),
+ q(0150) => q(TJS),
+ q(0151) => q(TZS),
+ q(0152) => q(THB),
+ q(0153) => q(TOP),
+ q(0154) => q(TTD),
+ q(0155) => q(TND),
+ q(0156) => q(TRY),
+ q(0157) => q(TMT),
+ q(0158) => q(UGX),
+ q(0159) => q(UAH),
+ q(0160) => q(AED),
+ q(0161) => q(USN),
+ q(0162) => q(USS),
+ q(0163) => q(UYI),
+ q(0164) => q(UYU),
+ q(0165) => q(UZS),
+ q(0166) => q(VUV),
+ q(0167) => q(VEF),
+ q(0168) => q(VND),
+ q(0169) => q(YER),
+ q(0170) => q(ZMW),
+ q(0171) => q(ZWL),
+ q(0172) => q(XBA),
+ q(0173) => q(XBB),
+ q(0174) => q(XBC),
+ q(0175) => q(XBD),
+ q(0176) => q(XAU),
+ q(0177) => q(XPD),
+ q(0178) => q(XPT),
+ q(0179) => q(XAG),
+ },
+ q(num) => {
+ q(0001) => q(971),
+ q(0002) => q(978),
+ q(0003) => q(008),
+ q(0004) => q(012),
+ q(0005) => q(840),
+ q(0006) => q(973),
+ q(0007) => q(951),
+ q(0008) => q(032),
+ q(0009) => q(051),
+ q(0010) => q(533),
+ q(0011) => q(036),
+ q(0012) => q(944),
+ q(0013) => q(044),
+ q(0014) => q(048),
+ q(0015) => q(050),
+ q(0016) => q(052),
+ q(0017) => q(974),
+ q(0018) => q(084),
+ q(0019) => q(952),
+ q(0020) => q(060),
+ q(0021) => q(064),
+ q(0022) => q(356),
+ q(0023) => q(068),
+ q(0024) => q(984),
+ q(0025) => q(977),
+ q(0026) => q(072),
+ q(0027) => q(578),
+ q(0028) => q(986),
+ q(0029) => q(096),
+ q(0030) => q(975),
+ q(0031) => q(108),
+ q(0032) => q(116),
+ q(0033) => q(950),
+ q(0034) => q(124),
+ q(0035) => q(132),
+ q(0036) => q(136),
+ q(0037) => q(990),
+ q(0038) => q(152),
+ q(0039) => q(156),
+ q(0040) => q(170),
+ q(0041) => q(970),
+ q(0042) => q(174),
+ q(0043) => q(976),
+ q(0044) => q(554),
+ q(0045) => q(188),
+ q(0046) => q(191),
+ q(0047) => q(931),
+ q(0048) => q(192),
+ q(0049) => q(532),
+ q(0050) => q(203),
+ q(0051) => q(208),
+ q(0052) => q(262),
+ q(0053) => q(214),
+ q(0054) => q(818),
+ q(0055) => q(222),
+ q(0056) => q(232),
+ q(0057) => q(230),
+ q(0058) => q(238),
+ q(0059) => q(242),
+ q(0060) => q(953),
+ q(0061) => q(270),
+ q(0062) => q(981),
+ q(0063) => q(936),
+ q(0064) => q(292),
+ q(0065) => q(320),
+ q(0066) => q(826),
+ q(0067) => q(324),
+ q(0068) => q(328),
+ q(0069) => q(332),
+ q(0070) => q(340),
+ q(0071) => q(344),
+ q(0072) => q(348),
+ q(0073) => q(352),
+ q(0074) => q(360),
+ q(0075) => q(960),
+ q(0076) => q(364),
+ q(0077) => q(368),
+ q(0078) => q(376),
+ q(0079) => q(388),
+ q(0080) => q(392),
+ q(0081) => q(400),
+ q(0082) => q(398),
+ q(0083) => q(404),
+ q(0084) => q(408),
+ q(0085) => q(410),
+ q(0086) => q(414),
+ q(0087) => q(417),
+ q(0088) => q(418),
+ q(0089) => q(428),
+ q(0090) => q(422),
+ q(0091) => q(426),
+ q(0092) => q(710),
+ q(0093) => q(430),
+ q(0094) => q(434),
+ q(0095) => q(756),
+ q(0096) => q(440),
+ q(0097) => q(446),
+ q(0098) => q(807),
+ q(0099) => q(969),
+ q(0100) => q(454),
+ q(0101) => q(458),
+ q(0102) => q(462),
+ q(0103) => q(478),
+ q(0104) => q(480),
+ q(0105) => q(965),
+ q(0106) => q(484),
+ q(0107) => q(979),
+ q(0108) => q(498),
+ q(0109) => q(496),
+ q(0110) => q(504),
+ q(0111) => q(943),
+ q(0112) => q(104),
+ q(0113) => q(516),
+ q(0114) => q(524),
+ q(0115) => q(558),
+ q(0116) => q(566),
+ q(0117) => q(512),
+ q(0118) => q(586),
+ q(0119) => q(590),
+ q(0120) => q(598),
+ q(0121) => q(600),
+ q(0122) => q(604),
+ q(0123) => q(608),
+ q(0124) => q(985),
+ q(0125) => q(634),
+ q(0126) => q(946),
+ q(0127) => q(643),
+ q(0128) => q(646),
+ q(0129) => q(654),
+ q(0130) => q(882),
+ q(0131) => q(678),
+ q(0132) => q(682),
+ q(0133) => q(941),
+ q(0134) => q(690),
+ q(0135) => q(694),
+ q(0136) => q(702),
+ q(0137) => q(994),
+ q(0138) => q(090),
+ q(0139) => q(706),
+ q(0140) => q(728),
+ q(0141) => q(144),
+ q(0142) => q(938),
+ q(0143) => q(968),
+ q(0144) => q(748),
+ q(0145) => q(752),
+ q(0146) => q(947),
+ q(0147) => q(948),
+ q(0148) => q(760),
+ q(0149) => q(901),
+ q(0150) => q(972),
+ q(0151) => q(834),
+ q(0152) => q(764),
+ q(0153) => q(776),
+ q(0154) => q(780),
+ q(0155) => q(788),
+ q(0156) => q(949),
+ q(0157) => q(934),
+ q(0158) => q(800),
+ q(0159) => q(980),
+ q(0160) => q(784),
+ q(0161) => q(997),
+ q(0162) => q(998),
+ q(0163) => q(940),
+ q(0164) => q(858),
+ q(0165) => q(860),
+ q(0166) => q(548),
+ q(0167) => q(937),
+ q(0168) => q(704),
+ q(0169) => q(886),
+ q(0170) => q(967),
+ q(0171) => q(932),
+ q(0172) => q(955),
+ q(0173) => q(956),
+ q(0174) => q(957),
+ q(0175) => q(958),
+ q(0176) => q(959),
+ q(0177) => q(964),
+ q(0178) => q(962),
+ q(0179) => q(961),
+ },
+};
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency_Retired.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency_Retired.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Currency_Retired.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,175 @@
+package Locale::Codes::Currency_Retired;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'deprecate_codes' is run.
+# Generated on: Wed Feb 27 10:06:46 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::Currency_Retired - retired currency codes for the Locale::Codes::Currency module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::Currency module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Retired{'currency'}{'alpha'}{'code'} = {
+ q(ADP) => q(Andorran Peseta),
+ q(AFA) => q(Afghani),
+ q(AON) => q(New Kwanza),
+ q(AOR) => q(Kwanza Reajustado),
+ q(ATS) => q(Schilling),
+ q(AZM) => q(Azerbaijanian Manat),
+ q(BEF) => q(Belgian Franc),
+ q(BGL) => q(Lev),
+ q(BYB) => q(Belarussian Ruble),
+ q(CYP) => q(Cyprus Pound),
+ q(DEM) => q(German Mark),
+ q(ECS) => q(Sucre),
+ q(ECV) => q(Unidad de Valor Constante (UVC)),
+ q(EEK) => q(Kroon),
+ q(ESP) => q(Spanish Peseta),
+ q(FIM) => q(Markka),
+ q(FRF) => q(French Franc),
+ q(GHC) => q(Cedi),
+ q(GRD) => q(Drachma),
+ q(GWP) => q(Guinea-Bissau Peso),
+ q(IEP) => q(Irish Pound),
+ q(ITL) => q(Italian Lira),
+ q(LUF) => q(Luxembourg Franc),
+ q(MGF) => q(Malagasy Franc),
+ q(MTL) => q(Maltese Lira),
+ q(MZM) => q(Metical),
+ q(NLG) => q(Netherlands Guilder),
+ q(PTE) => q(Portuguese Escudo),
+ q(ROL) => q(Leu),
+ q(RUR) => q(Russian Ruble),
+ q(SDD) => q(Sudanese Dinar),
+ q(SIT) => q(Tolar),
+ q(SKK) => q(Slovak Koruna),
+ q(SRG) => q(Surinam Guilder),
+ q(TJR) => q(Tajik Ruble),
+ q(TMM) => q(Manat),
+ q(TPE) => q(Timor Escudo),
+ q(TRL) => q(Turkish Lira),
+ q(UAK) => q(Karbovanets),
+ q(VEB) => q(Bolivar),
+ q(XB5) => q(European Unit of Account 17),
+ q(XEU) => q(ECU (until 1998-12-31)),
+ q(XFO) => q(Gold-Franc),
+ q(XFU) => q(UIC-Franc),
+ q(YUM) => q(New Dinar),
+ q(ZAL) => q(Financial Rand),
+ q(ZRN) => q(New Zaire),
+ q(ZWD) => q(Zimbabwe Dollar),
+};
+
+$Locale::Codes::Retired{'currency'}{'num'}{'code'} = {
+};
+
+$Locale::Codes::Retired{'currency'}{'alpha'}{'name'} = {
+ q(andorran peseta) => [ q(ADP), q(Andorran Peseta) ],
+ q(aruban guilder) => [ q(AWG), q(Aruban Guilder) ],
+ q(belgian franc) => [ q(BEF), q(Belgian Franc) ],
+ q(bermudian dollar (customarily known as bermuda dollar)) => [ q(BMD), q(Bermudian Dollar (customarily known as Bermuda Dollar)) ],
+ q(bolivar) => [ q(VEB), q(Bolivar) ],
+ q(bolivar fuerte) => [ q(VEF), q(Bolivar Fuerte) ],
+ q(bond markets units european composite unit (eurco)) => [ q(XBA), q(Bond Markets Units European Composite Unit (EURCO)) ],
+ q(candian dollar) => [ q(CAD), q(Candian Dollar) ],
+ q(cedi) => [ q(GHS), q(Cedi) ],
+ q(convertible marks) => [ q(BAM), q(Convertible Marks) ],
+ q(cyprus pound) => [ q(CYP), q(Cyprus Pound) ],
+ q(dinar) => [ q(BHD), q(Dinar) ],
+ q(drachma) => [ q(GRD), q(Drachma) ],
+ q(ecu (until 1998-12-31)) => [ q(XEU), q(ECU (until 1998-12-31)) ],
+ q(european composite unit) => [ q(XBA), q(European Composite Unit) ],
+ q(european monetary unit) => [ q(XBB), q(European Monetary Unit) ],
+ q(european monetary unit (e.m.u.-6)) => [ q(XBB), q(European Monetary Unit (E.M.U.-6)) ],
+ q(european unit of account 17) => [ q(XB5), q(European Unit of Account 17) ],
+ q(european unit of account 17(e.u.a.-17)) => [ q(XBD), q(European Unit of Account 17(E.U.A.-17)) ],
+ q(european unit of account 9) => [ q(XBC), q(European Unit of Account 9) ],
+ q(european unit of account 9(e.u.a.-9)) => [ q(XBC), q(European Unit of Account 9(E.U.A.-9)) ],
+ q(financial rand) => [ q(ZAL), q(Financial Rand) ],
+ q(franc congolais) => [ q(CDF), q(Franc Congolais) ],
+ q(french franc) => [ q(FRF), q(French Franc) ],
+ q(german mark) => [ q(DEM), q(German Mark) ],
+ q(gold-franc) => [ q(XFO), q(Gold-Franc) ],
+ q(guinea-bissau peso) => [ q(GWP), q(Guinea-Bissau Peso) ],
+ q(irish pound) => [ q(IEP), q(Irish Pound) ],
+ q(italian lira) => [ q(ITL), q(Italian Lira) ],
+ q(karbovanets) => [ q(UAK), q(Karbovanets) ],
+ q(kroon) => [ q(EEK), q(Kroon) ],
+ q(kuna) => [ q(HRK), q(Kuna) ],
+ q(kwanza reajustado) => [ q(AOR), q(Kwanza Reajustado) ],
+ q(leu) => [ q(RON), q(Leu) ],
+ q(lev) => [ q(BGL), q(Lev) ],
+ q(luxembourg franc) => [ q(LUF), q(Luxembourg Franc) ],
+ q(malagasy franc) => [ q(MGF), q(Malagasy Franc) ],
+ q(maltese lira) => [ q(MTL), q(Maltese Lira) ],
+ q(manat) => [ q(TMT), q(Manat) ],
+ q(markka) => [ q(FIM), q(Markka) ],
+ q(metical) => [ q(MZN), q(Metical) ],
+ q(mexican nuevo peso) => [ q(MXN), q(Mexican Nuevo Peso) ],
+ q(netherlands antillian guilder) => [ q(ANG), q(Netherlands Antillian Guilder) ],
+ q(netherlands guilder) => [ q(NLG), q(Netherlands Guilder) ],
+ q(new dinar) => [ q(YUM), q(New Dinar) ],
+ q(new kwanza) => [ q(AON), q(New Kwanza) ],
+ q(new leu) => [ q(RON), q(New Leu) ],
+ q(new manat) => [ q(TMT), q(New Manat) ],
+ q(new zaire) => [ q(ZRN), q(New Zaire) ],
+ q(portuguese escudo) => [ q(PTE), q(Portuguese Escudo) ],
+ q(schilling) => [ q(ATS), q(Schilling) ],
+ q(sdr) => [ q(XDR), q(SDR) ],
+ q(shekel) => [ q(ILS), q(Shekel) ],
+ q(slovak koruna) => [ q(SKK), q(Slovak Koruna) ],
+ q(spanish peseta) => [ q(ESP), q(Spanish Peseta) ],
+ q(st. helena pound) => [ q(SHP), q(St. Helena Pound) ],
+ q(sudanese dinar) => [ q(SDD), q(Sudanese Dinar) ],
+ q(surinam guilder) => [ q(SRG), q(Surinam Guilder) ],
+ q(tajik ruble) => [ q(TJR), q(Tajik Ruble) ],
+ q(timor escudo) => [ q(TPE), q(Timor Escudo) ],
+ q(tolar) => [ q(SIT), q(Tolar) ],
+ q(tunisian dollar) => [ q(TND), q(Tunisian Dollar) ],
+ q(uic-franc) => [ q(XFU), q(UIC-Franc) ],
+ q(unidad de valor constante (uvc)) => [ q(ECV), q(Unidad de Valor Constante (UVC)) ],
+ q(unidades de formento) => [ q(CLF), q(Unidades de Formento) ],
+ q(uruguay peso en unidades indexadas) => [ q(UYI), q(Uruguay Peso en Unidades Indexadas) ],
+};
+
+$Locale::Codes::Retired{'currency'}{'num'}{'name'} = {
+ q(bolivar fuerte) => [ q(937), q(Bolivar Fuerte) ],
+ q(cedi) => [ q(936), q(Cedi) ],
+ q(leu) => [ q(946), q(Leu) ],
+ q(metical) => [ q(943), q(Metical) ],
+ q(new manat) => [ q(934), q(New Manat) ],
+};
+
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,95 @@
+package Locale::Codes::LangExt;
+# Copyright (c) 2011-2013 Sullivan Beck
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+require 5.006;
+use warnings;
+
+require Exporter;
+use Carp;
+use Locale::Codes;
+use Locale::Codes::Constants;
+use Locale::Codes::LangExt_Codes;
+use Locale::Codes::LangExt_Retired;
+
+#=======================================================================
+# Public Global Variables
+#=======================================================================
+
+our($VERSION, at ISA, at EXPORT, at EXPORT_OK);
+
+$VERSION='3.25';
+ at ISA = qw(Exporter);
+ at EXPORT = qw(code2langext
+ langext2code
+ all_langext_codes
+ all_langext_names
+ langext_code2code
+ LOCALE_LANGEXT_ALPHA
+ );
+
+sub code2langext {
+ return Locale::Codes::_code2name('langext', at _);
+}
+
+sub langext2code {
+ return Locale::Codes::_name2code('langext', at _);
+}
+
+sub langext_code2code {
+ return Locale::Codes::_code2code('langext', at _);
+}
+
+sub all_langext_codes {
+ return Locale::Codes::_all_codes('langext', at _);
+}
+
+sub all_langext_names {
+ return Locale::Codes::_all_names('langext', at _);
+}
+
+sub rename_langext {
+ return Locale::Codes::_rename('langext', at _);
+}
+
+sub add_langext {
+ return Locale::Codes::_add_code('langext', at _);
+}
+
+sub delete_langext {
+ return Locale::Codes::_delete_code('langext', at _);
+}
+
+sub add_langext_alias {
+ return Locale::Codes::_add_alias('langext', at _);
+}
+
+sub delete_langext_alias {
+ return Locale::Codes::_delete_alias('langext', at _);
+}
+
+sub rename_langext_code {
+ return Locale::Codes::_rename_code('langext', at _);
+}
+
+sub add_langext_code_alias {
+ return Locale::Codes::_add_code_alias('langext', at _);
+}
+
+sub delete_langext_code_alias {
+ return Locale::Codes::_delete_code_alias('langext', at _);
+}
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,116 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangExt - standard codes for language extension identification
+
+=head1 SYNOPSIS
+
+ use Locale::Codes::LangExt;
+
+ $lext = code2langext('acm'); # $lext gets 'Mesopotamian Arabic'
+ $code = langext2code('Mesopotamian Arabic'); # $code gets 'acm'
+
+ @codes = all_langext_codes();
+ @names = all_langext_names();
+
+=head1 DESCRIPTION
+
+The C<Locale::Codes::LangExt> module provides access to standard codes
+used for identifying language extensions, such as those as defined in
+the IANA language registry.
+
+Most of the routines take an optional additional argument which
+specifies the code set to use. If not specified, the default IANA
+language registry codes will be used.
+
+=head1 SUPPORTED CODE SETS
+
+There are several different code sets you can use for identifying
+language extensions. A code set may be specified using either a name, or a
+constant that is automatically exported by this module.
+
+For example, the two are equivalent:
+
+ $lext = code2langext('acm','alpha');
+ $lext = code2langext('acm',LOCALE_LANGEXT_ALPHA);
+
+The codesets currently supported are:
+
+=over 4
+
+=item B<alpha>
+
+This is the set of three-letter (lowercase) codes from the IANA
+language registry, such as 'acm' for Mesopotamian Arabic.
+
+This is the default code set.
+
+=back
+
+=head1 ROUTINES
+
+=over 4
+
+=item B<code2langext ( CODE [,CODESET] )>
+
+=item B<langext2code ( NAME [,CODESET] )>
+
+=item B<langext_code2code ( CODE ,CODESET ,CODESET2 )>
+
+=item B<all_langext_codes ( [CODESET] )>
+
+=item B<all_langext_names ( [CODESET] )>
+
+=item B<Locale::Codes::LangExt::rename_langext ( CODE ,NEW_NAME [,CODESET] )>
+
+=item B<Locale::Codes::LangExt::add_langext ( CODE ,NAME [,CODESET] )>
+
+=item B<Locale::Codes::LangExt::delete_langext ( CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangExt::add_langext_alias ( NAME ,NEW_NAME )>
+
+=item B<Locale::Codes::LangExt::delete_langext_alias ( NAME )>
+
+=item B<Locale::Codes::LangExt::rename_langext_code ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangExt::add_langext_code_alias ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangExt::delete_langext_code_alias ( CODE [,CODESET] )>
+
+These routines are all documented in the Locale::Codes::API man page.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item B<Locale::Codes>
+
+The Locale-Codes distribution.
+
+=item B<Locale::Codes::API>
+
+The list of functions supported by this module.
+
+=item B<http://www.iana.org/assignments/language-subtag-registry>
+
+The IANA language subtag registry.
+
+=back
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2011-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt_Codes.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt_Codes.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt_Codes.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2850 @@
+package Locale::Codes::LangExt_Codes;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'get_codes' is run.
+# Generated on: Wed Feb 27 10:04:32 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangExt_Codes - langext codes for the Locale::Codes::LangExt module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::LangExt module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Data{'langext'}{'id'} = '0228';
+
+$Locale::Codes::Data{'langext'}{'id2names'} = {
+ q(0001) => [
+ q(Algerian Saharan Arabic),
+ ],
+ q(0002) => [
+ q(Tajiki Arabic),
+ ],
+ q(0003) => [
+ q(Baharna Arabic),
+ ],
+ q(0004) => [
+ q(Mesopotamian Arabic),
+ ],
+ q(0005) => [
+ q(Ta'izzi-Adeni Arabic),
+ ],
+ q(0006) => [
+ q(Hijazi Arabic),
+ ],
+ q(0007) => [
+ q(Omani Arabic),
+ ],
+ q(0008) => [
+ q(Cypriot Arabic),
+ ],
+ q(0009) => [
+ q(Dhofari Arabic),
+ ],
+ q(0010) => [
+ q(Adamorobe Sign Language),
+ ],
+ q(0011) => [
+ q(Tunisian Arabic),
+ ],
+ q(0012) => [
+ q(Saidi Arabic),
+ ],
+ q(0013) => [
+ q(Argentine Sign Language),
+ ],
+ q(0014) => [
+ q(Armenian Sign Language),
+ ],
+ q(0015) => [
+ q(Gulf Arabic),
+ ],
+ q(0016) => [
+ q(Afghan Sign Language),
+ ],
+ q(0017) => [
+ q(South Levantine Arabic),
+ ],
+ q(0018) => [
+ q(North Levantine Arabic),
+ ],
+ q(0019) => [
+ q(Sudanese Arabic),
+ ],
+ q(0020) => [
+ q(Standard Arabic),
+ ],
+ q(0021) => [
+ q(Algerian Arabic),
+ ],
+ q(0022) => [
+ q(Najdi Arabic),
+ ],
+ q(0023) => [
+ q(Moroccan Arabic),
+ ],
+ q(0024) => [
+ q(Egyptian Arabic),
+ ],
+ q(0025) => [
+ q(American Sign Language),
+ ],
+ q(0026) => [
+ q(Australian Sign Language),
+ ],
+ q(0027) => [
+ q(Algerian Sign Language),
+ ],
+ q(0028) => [
+ q(Austrian Sign Language),
+ ],
+ q(0029) => [
+ q(Australian Aborigines Sign Language),
+ ],
+ q(0030) => [
+ q(Uzbeki Arabic),
+ ],
+ q(0031) => [
+ q(Eastern Egyptian Bedawi Arabic),
+ ],
+ q(0032) => [
+ q(Hadrami Arabic),
+ ],
+ q(0033) => [
+ q(Libyan Arabic),
+ ],
+ q(0034) => [
+ q(Sanaani Arabic),
+ ],
+ q(0035) => [
+ q(North Mesopotamian Arabic),
+ ],
+ q(0036) => [
+ q(Babalia Creole Arabic),
+ ],
+ q(0037) => [
+ q(British Sign Language),
+ ],
+ q(0038) => [
+ q(Ban Khor Sign Language),
+ ],
+ q(0039) => [
+ q(Banjar),
+ ],
+ q(0040) => [
+ q(Bamako Sign Language),
+ ],
+ q(0041) => [
+ q(Bulgarian Sign Language),
+ ],
+ q(0042) => [
+ q(Bengkala Sign Language),
+ ],
+ q(0043) => [
+ q(Bacanese Malay),
+ ],
+ q(0044) => [
+ q(Berau Malay),
+ ],
+ q(0045) => [
+ q(Bolivian Sign Language),
+ ],
+ q(0046) => [
+ q(Bukit Malay),
+ ],
+ q(0047) => [
+ q(Brazilian Sign Language),
+ ],
+ q(0048) => [
+ q(Min Dong Chinese),
+ ],
+ q(0049) => [
+ q(Chadian Sign Language),
+ ],
+ q(0050) => [
+ q(Jinyu Chinese),
+ ],
+ q(0051) => [
+ q(Mandarin Chinese),
+ ],
+ q(0052) => [
+ q(Cocos Islands Malay),
+ ],
+ q(0053) => [
+ q(Pu-Xian Chinese),
+ ],
+ q(0054) => [
+ q(Catalan Sign Language),
+ q(Lengua de senas catalana),
+ q(Llengua de Signes Catalana),
+ ],
+ q(0055) => [
+ q(Chiangmai Sign Language),
+ ],
+ q(0056) => [
+ q(Czech Sign Language),
+ ],
+ q(0057) => [
+ q(Cuba Sign Language),
+ ],
+ q(0058) => [
+ q(Chilean Sign Language),
+ ],
+ q(0059) => [
+ q(Chinese Sign Language),
+ ],
+ q(0060) => [
+ q(Colombian Sign Language),
+ ],
+ q(0061) => [
+ q(Croatia Sign Language),
+ ],
+ q(0062) => [
+ q(Costa Rican Sign Language),
+ ],
+ q(0063) => [
+ q(Huizhou Chinese),
+ ],
+ q(0064) => [
+ q(Min Zhong Chinese),
+ ],
+ q(0065) => [
+ q(Dominican Sign Language),
+ ],
+ q(0066) => [
+ q(Dutch Sign Language),
+ ],
+ q(0067) => [
+ q(Danish Sign Language),
+ ],
+ q(0068) => [
+ q(Duano),
+ ],
+ q(0069) => [
+ q(Ecuadorian Sign Language),
+ ],
+ q(0070) => [
+ q(Egypt Sign Language),
+ ],
+ q(0071) => [
+ q(Salvadoran Sign Language),
+ ],
+ q(0072) => [
+ q(Estonian Sign Language),
+ ],
+ q(0073) => [
+ q(Ethiopian Sign Language),
+ ],
+ q(0074) => [
+ q(Quebec Sign Language),
+ ],
+ q(0075) => [
+ q(Finnish Sign Language),
+ ],
+ q(0076) => [
+ q(French Sign Language),
+ ],
+ q(0077) => [
+ q(Finland-Swedish Sign Language),
+ q(finlandssvenskt teckensprak),
+ q(suomenruotsalainen viittomakieli),
+ ],
+ q(0078) => [
+ q(Gan Chinese),
+ ],
+ q(0079) => [
+ q(Ghandruk Sign Language),
+ ],
+ q(0080) => [
+ q(Goan Konkani),
+ ],
+ q(0081) => [
+ q(Ghanaian Sign Language),
+ ],
+ q(0082) => [
+ q(German Sign Language),
+ ],
+ q(0083) => [
+ q(Guatemalan Sign Language),
+ ],
+ q(0084) => [
+ q(Greek Sign Language),
+ ],
+ q(0085) => [
+ q(Guinean Sign Language),
+ ],
+ q(0086) => [
+ q(Hanoi Sign Language),
+ ],
+ q(0087) => [
+ q(Haiphong Sign Language),
+ ],
+ q(0088) => [
+ q(Hakka Chinese),
+ ],
+ q(0089) => [
+ q(Honduras Sign Language),
+ ],
+ q(0090) => [
+ q(Haji),
+ ],
+ q(0091) => [
+ q(Hong Kong Sign Language),
+ q(Heung Kong Sau Yue),
+ ],
+ q(0092) => [
+ q(Ho Chi Minh City Sign Language),
+ ],
+ q(0093) => [
+ q(Hawai'i Pidgin Sign Language),
+ ],
+ q(0094) => [
+ q(Hungarian Sign Language),
+ ],
+ q(0095) => [
+ q(Hausa Sign Language),
+ ],
+ q(0096) => [
+ q(Xiang Chinese),
+ ],
+ q(0097) => [
+ q(Icelandic Sign Language),
+ ],
+ q(0098) => [
+ q(International Sign),
+ ],
+ q(0099) => [
+ q(Indonesian Sign Language),
+ ],
+ q(0100) => [
+ q(Indian Sign Language),
+ ],
+ q(0101) => [
+ q(Italian Sign Language),
+ ],
+ q(0102) => [
+ q(Irish Sign Language),
+ ],
+ q(0103) => [
+ q(Israeli Sign Language),
+ ],
+ q(0104) => [
+ q(Jakun),
+ ],
+ q(0105) => [
+ q(Jambi Malay),
+ ],
+ q(0106) => [
+ q(Jamaican Country Sign Language),
+ ],
+ q(0107) => [
+ q(Jhankot Sign Language),
+ ],
+ q(0108) => [
+ q(Jamaican Sign Language),
+ ],
+ q(0109) => [
+ q(Jordanian Sign Language),
+ ],
+ q(0110) => [
+ q(Japanese Sign Language),
+ ],
+ q(0111) => [
+ q(Jumla Sign Language),
+ ],
+ q(0112) => [
+ q(Selangor Sign Language),
+ ],
+ q(0113) => [
+ q(Konkani (individual language)),
+ ],
+ q(0114) => [
+ q(Kubu),
+ ],
+ q(0115) => [
+ q(Korean Sign Language),
+ ],
+ q(0116) => [
+ q(Kerinci),
+ ],
+ q(0117) => [
+ q(Brunei),
+ ],
+ q(0118) => [
+ q(Libyan Sign Language),
+ ],
+ q(0119) => [
+ q(Loncong),
+ ],
+ q(0120) => [
+ q(Lubu),
+ ],
+ q(0121) => [
+ q(Col),
+ ],
+ q(0122) => [
+ q(Lithuanian Sign Language),
+ ],
+ q(0123) => [
+ q(Lyons Sign Language),
+ ],
+ q(0124) => [
+ q(Latvian Sign Language),
+ ],
+ q(0125) => [
+ q(Laos Sign Language),
+ ],
+ q(0126) => [
+ q(Panamanian Sign Language),
+ q(Lengua de Senas Panamenas),
+ ],
+ q(0127) => [
+ q(Trinidad and Tobago Sign Language),
+ ],
+ q(0128) => [
+ q(Mauritian Sign Language),
+ ],
+ q(0129) => [
+ q(Latgalian),
+ ],
+ q(0130) => [
+ q(Standard Latvian),
+ ],
+ q(0131) => [
+ q(Literary Chinese),
+ ],
+ q(0132) => [
+ q(North Moluccan Malay),
+ ],
+ q(0133) => [
+ q(Maltese Sign Language),
+ ],
+ q(0134) => [
+ q(Kedah Malay),
+ ],
+ q(0135) => [
+ q(Pattani Malay),
+ ],
+ q(0136) => [
+ q(Bangka),
+ ],
+ q(0137) => [
+ q(Mexican Sign Language),
+ ],
+ q(0138) => [
+ q(Minangkabau),
+ ],
+ q(0139) => [
+ q(Min Bei Chinese),
+ ],
+ q(0140) => [
+ q(Kota Bangun Kutai Malay),
+ ],
+ q(0141) => [
+ q(Martha's Vineyard Sign Language),
+ ],
+ q(0142) => [
+ q(Yucatec Maya Sign Language),
+ ],
+ q(0143) => [
+ q(Sabah Malay),
+ ],
+ q(0144) => [
+ q(Mongolian Sign Language),
+ ],
+ q(0145) => [
+ q(Musi),
+ ],
+ q(0146) => [
+ q(Madagascar Sign Language),
+ ],
+ q(0147) => [
+ q(Monastic Sign Language),
+ ],
+ q(0148) => [
+ q(Mozambican Sign Language),
+ ],
+ q(0149) => [
+ q(Min Nan Chinese),
+ ],
+ q(0150) => [
+ q(Namibian Sign Language),
+ ],
+ q(0151) => [
+ q(Nicaraguan Sign Language),
+ ],
+ q(0152) => [
+ q(Nigerian Sign Language),
+ ],
+ q(0153) => [
+ q(Norwegian Sign Language),
+ ],
+ q(0154) => [
+ q(Nepalese Sign Language),
+ ],
+ q(0155) => [
+ q(Maritime Sign Language),
+ ],
+ q(0156) => [
+ q(New Zealand Sign Language),
+ ],
+ q(0157) => [
+ q(Old Kentish Sign Language),
+ ],
+ q(0158) => [
+ q(Orang Kanaq),
+ ],
+ q(0159) => [
+ q(Orang Seletar),
+ ],
+ q(0160) => [
+ q(Pekal),
+ ],
+ q(0161) => [
+ q(Sudanese Creole Arabic),
+ ],
+ q(0162) => [
+ q(Pakistan Sign Language),
+ ],
+ q(0163) => [
+ q(Peruvian Sign Language),
+ ],
+ q(0164) => [
+ q(Providencia Sign Language),
+ ],
+ q(0165) => [
+ q(Persian Sign Language),
+ ],
+ q(0166) => [
+ q(Plains Indian Sign Language),
+ ],
+ q(0167) => [
+ q(Central Malay),
+ ],
+ q(0168) => [
+ q(Penang Sign Language),
+ ],
+ q(0169) => [
+ q(Puerto Rican Sign Language),
+ ],
+ q(0170) => [
+ q(Polish Sign Language),
+ ],
+ q(0171) => [
+ q(Philippine Sign Language),
+ ],
+ q(0172) => [
+ q(Portuguese Sign Language),
+ ],
+ q(0173) => [
+ q(Paraguayan Sign Language),
+ q(Lengua de Senas del Paraguay),
+ ],
+ q(0174) => [
+ q(Romanian Sign Language),
+ ],
+ q(0175) => [
+ q(Rennellese Sign Language),
+ ],
+ q(0176) => [
+ q(Russian Sign Language),
+ ],
+ q(0177) => [
+ q(Saudi Arabian Sign Language),
+ ],
+ q(0178) => [
+ q(Langue des signes de Belgique Francophone),
+ q(French Belgian Sign Language),
+ ],
+ q(0179) => [
+ q(South African Sign Language),
+ ],
+ q(0180) => [
+ q(Swiss-German Sign Language),
+ ],
+ q(0181) => [
+ q(Sierra Leone Sign Language),
+ ],
+ q(0182) => [
+ q(Chadian Arabic),
+ ],
+ q(0183) => [
+ q(Swiss-Italian Sign Language),
+ ],
+ q(0184) => [
+ q(Singapore Sign Language),
+ ],
+ q(0185) => [
+ q(Albanian Sign Language),
+ ],
+ q(0186) => [
+ q(Sri Lankan Sign Language),
+ ],
+ q(0187) => [
+ q(Shihhi Arabic),
+ ],
+ q(0188) => [
+ q(Spanish Sign Language),
+ ],
+ q(0189) => [
+ q(Swiss-French Sign Language),
+ ],
+ q(0190) => [
+ q(Slovakian Sign Language),
+ ],
+ q(0191) => [
+ q(Congo Swahili),
+ ],
+ q(0192) => [
+ q(Swahili (individual language)),
+ q(Kiswahili),
+ ],
+ q(0193) => [
+ q(Swedish Sign Language),
+ ],
+ q(0194) => [
+ q(Al-Sayyid Bedouin Sign Language),
+ ],
+ q(0195) => [
+ q(Temuan),
+ ],
+ q(0196) => [
+ q(Tunisian Sign Language),
+ ],
+ q(0197) => [
+ q(Turkish Sign Language),
+ q(Turk Isaret Dili),
+ ],
+ q(0198) => [
+ q(Thai Sign Language),
+ ],
+ q(0199) => [
+ q(Taiwan Sign Language),
+ ],
+ q(0200) => [
+ q(Tebul Sign Language),
+ ],
+ q(0201) => [
+ q(Tanzanian Sign Language),
+ ],
+ q(0202) => [
+ q(Ugandan Sign Language),
+ ],
+ q(0203) => [
+ q(Uruguayan Sign Language),
+ ],
+ q(0204) => [
+ q(Ukrainian Sign Language),
+ ],
+ q(0205) => [
+ q(Urubu-Kaapor Sign Language),
+ q(Kaapor Sign Language),
+ ],
+ q(0206) => [
+ q(Urak Lawoi'),
+ ],
+ q(0207) => [
+ q(Northern Uzbek),
+ ],
+ q(0208) => [
+ q(Southern Uzbek),
+ ],
+ q(0209) => [
+ q(Vlaamse Gebarentaal),
+ q(Flemish Sign Language),
+ ],
+ q(0210) => [
+ q(Kaur),
+ ],
+ q(0211) => [
+ q(Tenggarong Kutai Malay),
+ ],
+ q(0212) => [
+ q(Moldova Sign Language),
+ ],
+ q(0213) => [
+ q(Venezuelan Sign Language),
+ ],
+ q(0214) => [
+ q(Valencian Sign Language),
+ q(Llengua de signes valenciana),
+ ],
+ q(0215) => [
+ q(Wu Chinese),
+ ],
+ q(0216) => [
+ q(Kenyan Sign Language),
+ ],
+ q(0217) => [
+ q(Malaysian Sign Language),
+ ],
+ q(0218) => [
+ q(Manado Malay),
+ ],
+ q(0219) => [
+ q(Moroccan Sign Language),
+ ],
+ q(0220) => [
+ q(Yiddish Sign Language),
+ ],
+ q(0221) => [
+ q(Yugoslavian Sign Language),
+ ],
+ q(0222) => [
+ q(Yue Chinese),
+ ],
+ q(0223) => [
+ q(Zimbabwe Sign Language),
+ ],
+ q(0224) => [
+ q(Malay (individual language)),
+ ],
+ q(0225) => [
+ q(Negeri Sembilan Malay),
+ ],
+ q(0226) => [
+ q(Zambian Sign Language),
+ ],
+ q(0227) => [
+ q(Standard Malay),
+ ],
+};
+
+$Locale::Codes::Data{'langext'}{'alias2id'} = {
+ q(adamorobe sign language) => [
+ q(0010),
+ q(0),
+ ],
+ q(afghan sign language) => [
+ q(0016),
+ q(0),
+ ],
+ q(al-sayyid bedouin sign language) => [
+ q(0194),
+ q(0),
+ ],
+ q(albanian sign language) => [
+ q(0185),
+ q(0),
+ ],
+ q(algerian arabic) => [
+ q(0021),
+ q(0),
+ ],
+ q(algerian saharan arabic) => [
+ q(0001),
+ q(0),
+ ],
+ q(algerian sign language) => [
+ q(0027),
+ q(0),
+ ],
+ q(american sign language) => [
+ q(0025),
+ q(0),
+ ],
+ q(argentine sign language) => [
+ q(0013),
+ q(0),
+ ],
+ q(armenian sign language) => [
+ q(0014),
+ q(0),
+ ],
+ q(australian aborigines sign language) => [
+ q(0029),
+ q(0),
+ ],
+ q(australian sign language) => [
+ q(0026),
+ q(0),
+ ],
+ q(austrian sign language) => [
+ q(0028),
+ q(0),
+ ],
+ q(babalia creole arabic) => [
+ q(0036),
+ q(0),
+ ],
+ q(bacanese malay) => [
+ q(0043),
+ q(0),
+ ],
+ q(baharna arabic) => [
+ q(0003),
+ q(0),
+ ],
+ q(bamako sign language) => [
+ q(0040),
+ q(0),
+ ],
+ q(ban khor sign language) => [
+ q(0038),
+ q(0),
+ ],
+ q(bangka) => [
+ q(0136),
+ q(0),
+ ],
+ q(banjar) => [
+ q(0039),
+ q(0),
+ ],
+ q(bengkala sign language) => [
+ q(0042),
+ q(0),
+ ],
+ q(berau malay) => [
+ q(0044),
+ q(0),
+ ],
+ q(bolivian sign language) => [
+ q(0045),
+ q(0),
+ ],
+ q(brazilian sign language) => [
+ q(0047),
+ q(0),
+ ],
+ q(british sign language) => [
+ q(0037),
+ q(0),
+ ],
+ q(brunei) => [
+ q(0117),
+ q(0),
+ ],
+ q(bukit malay) => [
+ q(0046),
+ q(0),
+ ],
+ q(bulgarian sign language) => [
+ q(0041),
+ q(0),
+ ],
+ q(catalan sign language) => [
+ q(0054),
+ q(0),
+ ],
+ q(central malay) => [
+ q(0167),
+ q(0),
+ ],
+ q(chadian arabic) => [
+ q(0182),
+ q(0),
+ ],
+ q(chadian sign language) => [
+ q(0049),
+ q(0),
+ ],
+ q(chiangmai sign language) => [
+ q(0055),
+ q(0),
+ ],
+ q(chilean sign language) => [
+ q(0058),
+ q(0),
+ ],
+ q(chinese sign language) => [
+ q(0059),
+ q(0),
+ ],
+ q(cocos islands malay) => [
+ q(0052),
+ q(0),
+ ],
+ q(col) => [
+ q(0121),
+ q(0),
+ ],
+ q(colombian sign language) => [
+ q(0060),
+ q(0),
+ ],
+ q(congo swahili) => [
+ q(0191),
+ q(0),
+ ],
+ q(costa rican sign language) => [
+ q(0062),
+ q(0),
+ ],
+ q(croatia sign language) => [
+ q(0061),
+ q(0),
+ ],
+ q(cuba sign language) => [
+ q(0057),
+ q(0),
+ ],
+ q(cypriot arabic) => [
+ q(0008),
+ q(0),
+ ],
+ q(czech sign language) => [
+ q(0056),
+ q(0),
+ ],
+ q(danish sign language) => [
+ q(0067),
+ q(0),
+ ],
+ q(dhofari arabic) => [
+ q(0009),
+ q(0),
+ ],
+ q(dominican sign language) => [
+ q(0065),
+ q(0),
+ ],
+ q(duano) => [
+ q(0068),
+ q(0),
+ ],
+ q(dutch sign language) => [
+ q(0066),
+ q(0),
+ ],
+ q(eastern egyptian bedawi arabic) => [
+ q(0031),
+ q(0),
+ ],
+ q(ecuadorian sign language) => [
+ q(0069),
+ q(0),
+ ],
+ q(egypt sign language) => [
+ q(0070),
+ q(0),
+ ],
+ q(egyptian arabic) => [
+ q(0024),
+ q(0),
+ ],
+ q(estonian sign language) => [
+ q(0072),
+ q(0),
+ ],
+ q(ethiopian sign language) => [
+ q(0073),
+ q(0),
+ ],
+ q(finland-swedish sign language) => [
+ q(0077),
+ q(0),
+ ],
+ q(finlandssvenskt teckensprak) => [
+ q(0077),
+ q(0),
+ ],
+ q(finnish sign language) => [
+ q(0075),
+ q(0),
+ ],
+ q(flemish sign language) => [
+ q(0209),
+ q(0),
+ ],
+ q(french belgian sign language) => [
+ q(0178),
+ q(0),
+ ],
+ q(french sign language) => [
+ q(0076),
+ q(0),
+ ],
+ q(gan chinese) => [
+ q(0078),
+ q(0),
+ ],
+ q(german sign language) => [
+ q(0082),
+ q(0),
+ ],
+ q(ghanaian sign language) => [
+ q(0081),
+ q(0),
+ ],
+ q(ghandruk sign language) => [
+ q(0079),
+ q(0),
+ ],
+ q(goan konkani) => [
+ q(0080),
+ q(0),
+ ],
+ q(greek sign language) => [
+ q(0084),
+ q(0),
+ ],
+ q(guatemalan sign language) => [
+ q(0083),
+ q(0),
+ ],
+ q(guinean sign language) => [
+ q(0085),
+ q(0),
+ ],
+ q(gulf arabic) => [
+ q(0015),
+ q(0),
+ ],
+ q(hadrami arabic) => [
+ q(0032),
+ q(0),
+ ],
+ q(haiphong sign language) => [
+ q(0087),
+ q(0),
+ ],
+ q(haji) => [
+ q(0090),
+ q(0),
+ ],
+ q(hakka chinese) => [
+ q(0088),
+ q(0),
+ ],
+ q(hanoi sign language) => [
+ q(0086),
+ q(0),
+ ],
+ q(hausa sign language) => [
+ q(0095),
+ q(0),
+ ],
+ q(hawai'i pidgin sign language) => [
+ q(0093),
+ q(0),
+ ],
+ q(heung kong sau yue) => [
+ q(0091),
+ q(0),
+ ],
+ q(hijazi arabic) => [
+ q(0006),
+ q(0),
+ ],
+ q(ho chi minh city sign language) => [
+ q(0092),
+ q(0),
+ ],
+ q(honduras sign language) => [
+ q(0089),
+ q(0),
+ ],
+ q(hong kong sign language) => [
+ q(0091),
+ q(0),
+ ],
+ q(huizhou chinese) => [
+ q(0063),
+ q(0),
+ ],
+ q(hungarian sign language) => [
+ q(0094),
+ q(0),
+ ],
+ q(icelandic sign language) => [
+ q(0097),
+ q(0),
+ ],
+ q(indian sign language) => [
+ q(0100),
+ q(0),
+ ],
+ q(indonesian sign language) => [
+ q(0099),
+ q(0),
+ ],
+ q(international sign) => [
+ q(0098),
+ q(0),
+ ],
+ q(irish sign language) => [
+ q(0102),
+ q(0),
+ ],
+ q(israeli sign language) => [
+ q(0103),
+ q(0),
+ ],
+ q(italian sign language) => [
+ q(0101),
+ q(0),
+ ],
+ q(jakun) => [
+ q(0104),
+ q(0),
+ ],
+ q(jamaican country sign language) => [
+ q(0106),
+ q(0),
+ ],
+ q(jamaican sign language) => [
+ q(0108),
+ q(0),
+ ],
+ q(jambi malay) => [
+ q(0105),
+ q(0),
+ ],
+ q(japanese sign language) => [
+ q(0110),
+ q(0),
+ ],
+ q(jhankot sign language) => [
+ q(0107),
+ q(0),
+ ],
+ q(jinyu chinese) => [
+ q(0050),
+ q(0),
+ ],
+ q(jordanian sign language) => [
+ q(0109),
+ q(0),
+ ],
+ q(jumla sign language) => [
+ q(0111),
+ q(0),
+ ],
+ q(kaapor sign language) => [
+ q(0205),
+ q(0),
+ ],
+ q(kaur) => [
+ q(0210),
+ q(0),
+ ],
+ q(kedah malay) => [
+ q(0134),
+ q(0),
+ ],
+ q(kenyan sign language) => [
+ q(0216),
+ q(0),
+ ],
+ q(kerinci) => [
+ q(0116),
+ q(0),
+ ],
+ q(kiswahili) => [
+ q(0192),
+ q(0),
+ ],
+ q(konkani (individual language)) => [
+ q(0113),
+ q(0),
+ ],
+ q(korean sign language) => [
+ q(0115),
+ q(0),
+ ],
+ q(kota bangun kutai malay) => [
+ q(0140),
+ q(0),
+ ],
+ q(kubu) => [
+ q(0114),
+ q(0),
+ ],
+ q(langue des signes de belgique francophone) => [
+ q(0178),
+ q(0),
+ ],
+ q(laos sign language) => [
+ q(0125),
+ q(0),
+ ],
+ q(latgalian) => [
+ q(0129),
+ q(0),
+ ],
+ q(latvian sign language) => [
+ q(0124),
+ q(0),
+ ],
+ q(lengua de senas catalana) => [
+ q(0054),
+ q(0),
+ ],
+ q(lengua de senas del paraguay) => [
+ q(0173),
+ q(0),
+ ],
+ q(lengua de senas panamenas) => [
+ q(0126),
+ q(0),
+ ],
+ q(libyan arabic) => [
+ q(0033),
+ q(0),
+ ],
+ q(libyan sign language) => [
+ q(0118),
+ q(0),
+ ],
+ q(literary chinese) => [
+ q(0131),
+ q(0),
+ ],
+ q(lithuanian sign language) => [
+ q(0122),
+ q(0),
+ ],
+ q(llengua de signes catalana) => [
+ q(0054),
+ q(0),
+ ],
+ q(llengua de signes valenciana) => [
+ q(0214),
+ q(0),
+ ],
+ q(loncong) => [
+ q(0119),
+ q(0),
+ ],
+ q(lubu) => [
+ q(0120),
+ q(0),
+ ],
+ q(lyons sign language) => [
+ q(0123),
+ q(0),
+ ],
+ q(madagascar sign language) => [
+ q(0146),
+ q(0),
+ ],
+ q(malay (individual language)) => [
+ q(0224),
+ q(0),
+ ],
+ q(malaysian sign language) => [
+ q(0217),
+ q(0),
+ ],
+ q(maltese sign language) => [
+ q(0133),
+ q(0),
+ ],
+ q(manado malay) => [
+ q(0218),
+ q(0),
+ ],
+ q(mandarin chinese) => [
+ q(0051),
+ q(0),
+ ],
+ q(maritime sign language) => [
+ q(0155),
+ q(0),
+ ],
+ q(martha's vineyard sign language) => [
+ q(0141),
+ q(0),
+ ],
+ q(mauritian sign language) => [
+ q(0128),
+ q(0),
+ ],
+ q(mesopotamian arabic) => [
+ q(0004),
+ q(0),
+ ],
+ q(mexican sign language) => [
+ q(0137),
+ q(0),
+ ],
+ q(min bei chinese) => [
+ q(0139),
+ q(0),
+ ],
+ q(min dong chinese) => [
+ q(0048),
+ q(0),
+ ],
+ q(min nan chinese) => [
+ q(0149),
+ q(0),
+ ],
+ q(min zhong chinese) => [
+ q(0064),
+ q(0),
+ ],
+ q(minangkabau) => [
+ q(0138),
+ q(0),
+ ],
+ q(moldova sign language) => [
+ q(0212),
+ q(0),
+ ],
+ q(monastic sign language) => [
+ q(0147),
+ q(0),
+ ],
+ q(mongolian sign language) => [
+ q(0144),
+ q(0),
+ ],
+ q(moroccan arabic) => [
+ q(0023),
+ q(0),
+ ],
+ q(moroccan sign language) => [
+ q(0219),
+ q(0),
+ ],
+ q(mozambican sign language) => [
+ q(0148),
+ q(0),
+ ],
+ q(musi) => [
+ q(0145),
+ q(0),
+ ],
+ q(najdi arabic) => [
+ q(0022),
+ q(0),
+ ],
+ q(namibian sign language) => [
+ q(0150),
+ q(0),
+ ],
+ q(negeri sembilan malay) => [
+ q(0225),
+ q(0),
+ ],
+ q(nepalese sign language) => [
+ q(0154),
+ q(0),
+ ],
+ q(new zealand sign language) => [
+ q(0156),
+ q(0),
+ ],
+ q(nicaraguan sign language) => [
+ q(0151),
+ q(0),
+ ],
+ q(nigerian sign language) => [
+ q(0152),
+ q(0),
+ ],
+ q(north levantine arabic) => [
+ q(0018),
+ q(0),
+ ],
+ q(north mesopotamian arabic) => [
+ q(0035),
+ q(0),
+ ],
+ q(north moluccan malay) => [
+ q(0132),
+ q(0),
+ ],
+ q(northern uzbek) => [
+ q(0207),
+ q(0),
+ ],
+ q(norwegian sign language) => [
+ q(0153),
+ q(0),
+ ],
+ q(old kentish sign language) => [
+ q(0157),
+ q(0),
+ ],
+ q(omani arabic) => [
+ q(0007),
+ q(0),
+ ],
+ q(orang kanaq) => [
+ q(0158),
+ q(0),
+ ],
+ q(orang seletar) => [
+ q(0159),
+ q(0),
+ ],
+ q(pakistan sign language) => [
+ q(0162),
+ q(0),
+ ],
+ q(panamanian sign language) => [
+ q(0126),
+ q(0),
+ ],
+ q(paraguayan sign language) => [
+ q(0173),
+ q(0),
+ ],
+ q(pattani malay) => [
+ q(0135),
+ q(0),
+ ],
+ q(pekal) => [
+ q(0160),
+ q(0),
+ ],
+ q(penang sign language) => [
+ q(0168),
+ q(0),
+ ],
+ q(persian sign language) => [
+ q(0165),
+ q(0),
+ ],
+ q(peruvian sign language) => [
+ q(0163),
+ q(0),
+ ],
+ q(philippine sign language) => [
+ q(0171),
+ q(0),
+ ],
+ q(plains indian sign language) => [
+ q(0166),
+ q(0),
+ ],
+ q(polish sign language) => [
+ q(0170),
+ q(0),
+ ],
+ q(portuguese sign language) => [
+ q(0172),
+ q(0),
+ ],
+ q(providencia sign language) => [
+ q(0164),
+ q(0),
+ ],
+ q(pu-xian chinese) => [
+ q(0053),
+ q(0),
+ ],
+ q(puerto rican sign language) => [
+ q(0169),
+ q(0),
+ ],
+ q(quebec sign language) => [
+ q(0074),
+ q(0),
+ ],
+ q(rennellese sign language) => [
+ q(0175),
+ q(0),
+ ],
+ q(romanian sign language) => [
+ q(0174),
+ q(0),
+ ],
+ q(russian sign language) => [
+ q(0176),
+ q(0),
+ ],
+ q(sabah malay) => [
+ q(0143),
+ q(0),
+ ],
+ q(saidi arabic) => [
+ q(0012),
+ q(0),
+ ],
+ q(salvadoran sign language) => [
+ q(0071),
+ q(0),
+ ],
+ q(sanaani arabic) => [
+ q(0034),
+ q(0),
+ ],
+ q(saudi arabian sign language) => [
+ q(0177),
+ q(0),
+ ],
+ q(selangor sign language) => [
+ q(0112),
+ q(0),
+ ],
+ q(shihhi arabic) => [
+ q(0187),
+ q(0),
+ ],
+ q(sierra leone sign language) => [
+ q(0181),
+ q(0),
+ ],
+ q(singapore sign language) => [
+ q(0184),
+ q(0),
+ ],
+ q(slovakian sign language) => [
+ q(0190),
+ q(0),
+ ],
+ q(south african sign language) => [
+ q(0179),
+ q(0),
+ ],
+ q(south levantine arabic) => [
+ q(0017),
+ q(0),
+ ],
+ q(southern uzbek) => [
+ q(0208),
+ q(0),
+ ],
+ q(spanish sign language) => [
+ q(0188),
+ q(0),
+ ],
+ q(sri lankan sign language) => [
+ q(0186),
+ q(0),
+ ],
+ q(standard arabic) => [
+ q(0020),
+ q(0),
+ ],
+ q(standard latvian) => [
+ q(0130),
+ q(0),
+ ],
+ q(standard malay) => [
+ q(0227),
+ q(0),
+ ],
+ q(sudanese arabic) => [
+ q(0019),
+ q(0),
+ ],
+ q(sudanese creole arabic) => [
+ q(0161),
+ q(0),
+ ],
+ q(suomenruotsalainen viittomakieli) => [
+ q(0077),
+ q(0),
+ ],
+ q(swahili (individual language)) => [
+ q(0192),
+ q(0),
+ ],
+ q(swedish sign language) => [
+ q(0193),
+ q(0),
+ ],
+ q(swiss-french sign language) => [
+ q(0189),
+ q(0),
+ ],
+ q(swiss-german sign language) => [
+ q(0180),
+ q(0),
+ ],
+ q(swiss-italian sign language) => [
+ q(0183),
+ q(0),
+ ],
+ q(ta'izzi-adeni arabic) => [
+ q(0005),
+ q(0),
+ ],
+ q(taiwan sign language) => [
+ q(0199),
+ q(0),
+ ],
+ q(tajiki arabic) => [
+ q(0002),
+ q(0),
+ ],
+ q(tanzanian sign language) => [
+ q(0201),
+ q(0),
+ ],
+ q(tebul sign language) => [
+ q(0200),
+ q(0),
+ ],
+ q(temuan) => [
+ q(0195),
+ q(0),
+ ],
+ q(tenggarong kutai malay) => [
+ q(0211),
+ q(0),
+ ],
+ q(thai sign language) => [
+ q(0198),
+ q(0),
+ ],
+ q(trinidad and tobago sign language) => [
+ q(0127),
+ q(0),
+ ],
+ q(tunisian arabic) => [
+ q(0011),
+ q(0),
+ ],
+ q(tunisian sign language) => [
+ q(0196),
+ q(0),
+ ],
+ q(turk isaret dili) => [
+ q(0197),
+ q(0),
+ ],
+ q(turkish sign language) => [
+ q(0197),
+ q(0),
+ ],
+ q(ugandan sign language) => [
+ q(0202),
+ q(0),
+ ],
+ q(ukrainian sign language) => [
+ q(0204),
+ q(0),
+ ],
+ q(urak lawoi') => [
+ q(0206),
+ q(0),
+ ],
+ q(urubu-kaapor sign language) => [
+ q(0205),
+ q(0),
+ ],
+ q(uruguayan sign language) => [
+ q(0203),
+ q(0),
+ ],
+ q(uzbeki arabic) => [
+ q(0030),
+ q(0),
+ ],
+ q(valencian sign language) => [
+ q(0214),
+ q(0),
+ ],
+ q(venezuelan sign language) => [
+ q(0213),
+ q(0),
+ ],
+ q(vlaamse gebarentaal) => [
+ q(0209),
+ q(0),
+ ],
+ q(wu chinese) => [
+ q(0215),
+ q(0),
+ ],
+ q(xiang chinese) => [
+ q(0096),
+ q(0),
+ ],
+ q(yiddish sign language) => [
+ q(0220),
+ q(0),
+ ],
+ q(yucatec maya sign language) => [
+ q(0142),
+ q(0),
+ ],
+ q(yue chinese) => [
+ q(0222),
+ q(0),
+ ],
+ q(yugoslavian sign language) => [
+ q(0221),
+ q(0),
+ ],
+ q(zambian sign language) => [
+ q(0226),
+ q(0),
+ ],
+ q(zimbabwe sign language) => [
+ q(0223),
+ q(0),
+ ],
+};
+
+$Locale::Codes::Data{'langext'}{'code2id'} = {
+ q(alpha) => {
+ q(aao) => [
+ q(0001),
+ q(0),
+ ],
+ q(abh) => [
+ q(0002),
+ q(0),
+ ],
+ q(abv) => [
+ q(0003),
+ q(0),
+ ],
+ q(acm) => [
+ q(0004),
+ q(0),
+ ],
+ q(acq) => [
+ q(0005),
+ q(0),
+ ],
+ q(acw) => [
+ q(0006),
+ q(0),
+ ],
+ q(acx) => [
+ q(0007),
+ q(0),
+ ],
+ q(acy) => [
+ q(0008),
+ q(0),
+ ],
+ q(adf) => [
+ q(0009),
+ q(0),
+ ],
+ q(ads) => [
+ q(0010),
+ q(0),
+ ],
+ q(aeb) => [
+ q(0011),
+ q(0),
+ ],
+ q(aec) => [
+ q(0012),
+ q(0),
+ ],
+ q(aed) => [
+ q(0013),
+ q(0),
+ ],
+ q(aen) => [
+ q(0014),
+ q(0),
+ ],
+ q(afb) => [
+ q(0015),
+ q(0),
+ ],
+ q(afg) => [
+ q(0016),
+ q(0),
+ ],
+ q(ajp) => [
+ q(0017),
+ q(0),
+ ],
+ q(apc) => [
+ q(0018),
+ q(0),
+ ],
+ q(apd) => [
+ q(0019),
+ q(0),
+ ],
+ q(arb) => [
+ q(0020),
+ q(0),
+ ],
+ q(arq) => [
+ q(0021),
+ q(0),
+ ],
+ q(ars) => [
+ q(0022),
+ q(0),
+ ],
+ q(ary) => [
+ q(0023),
+ q(0),
+ ],
+ q(arz) => [
+ q(0024),
+ q(0),
+ ],
+ q(ase) => [
+ q(0025),
+ q(0),
+ ],
+ q(asf) => [
+ q(0026),
+ q(0),
+ ],
+ q(asp) => [
+ q(0027),
+ q(0),
+ ],
+ q(asq) => [
+ q(0028),
+ q(0),
+ ],
+ q(asw) => [
+ q(0029),
+ q(0),
+ ],
+ q(auz) => [
+ q(0030),
+ q(0),
+ ],
+ q(avl) => [
+ q(0031),
+ q(0),
+ ],
+ q(ayh) => [
+ q(0032),
+ q(0),
+ ],
+ q(ayl) => [
+ q(0033),
+ q(0),
+ ],
+ q(ayn) => [
+ q(0034),
+ q(0),
+ ],
+ q(ayp) => [
+ q(0035),
+ q(0),
+ ],
+ q(bbz) => [
+ q(0036),
+ q(0),
+ ],
+ q(bfi) => [
+ q(0037),
+ q(0),
+ ],
+ q(bfk) => [
+ q(0038),
+ q(0),
+ ],
+ q(bjn) => [
+ q(0039),
+ q(0),
+ ],
+ q(bog) => [
+ q(0040),
+ q(0),
+ ],
+ q(bqn) => [
+ q(0041),
+ q(0),
+ ],
+ q(bqy) => [
+ q(0042),
+ q(0),
+ ],
+ q(btj) => [
+ q(0043),
+ q(0),
+ ],
+ q(bve) => [
+ q(0044),
+ q(0),
+ ],
+ q(bvl) => [
+ q(0045),
+ q(0),
+ ],
+ q(bvu) => [
+ q(0046),
+ q(0),
+ ],
+ q(bzs) => [
+ q(0047),
+ q(0),
+ ],
+ q(cdo) => [
+ q(0048),
+ q(0),
+ ],
+ q(cds) => [
+ q(0049),
+ q(0),
+ ],
+ q(cjy) => [
+ q(0050),
+ q(0),
+ ],
+ q(cmn) => [
+ q(0051),
+ q(0),
+ ],
+ q(coa) => [
+ q(0052),
+ q(0),
+ ],
+ q(cpx) => [
+ q(0053),
+ q(0),
+ ],
+ q(csc) => [
+ q(0054),
+ q(0),
+ ],
+ q(csd) => [
+ q(0055),
+ q(0),
+ ],
+ q(cse) => [
+ q(0056),
+ q(0),
+ ],
+ q(csf) => [
+ q(0057),
+ q(0),
+ ],
+ q(csg) => [
+ q(0058),
+ q(0),
+ ],
+ q(csl) => [
+ q(0059),
+ q(0),
+ ],
+ q(csn) => [
+ q(0060),
+ q(0),
+ ],
+ q(csq) => [
+ q(0061),
+ q(0),
+ ],
+ q(csr) => [
+ q(0062),
+ q(0),
+ ],
+ q(czh) => [
+ q(0063),
+ q(0),
+ ],
+ q(czo) => [
+ q(0064),
+ q(0),
+ ],
+ q(doq) => [
+ q(0065),
+ q(0),
+ ],
+ q(dse) => [
+ q(0066),
+ q(0),
+ ],
+ q(dsl) => [
+ q(0067),
+ q(0),
+ ],
+ q(dup) => [
+ q(0068),
+ q(0),
+ ],
+ q(ecs) => [
+ q(0069),
+ q(0),
+ ],
+ q(esl) => [
+ q(0070),
+ q(0),
+ ],
+ q(esn) => [
+ q(0071),
+ q(0),
+ ],
+ q(eso) => [
+ q(0072),
+ q(0),
+ ],
+ q(eth) => [
+ q(0073),
+ q(0),
+ ],
+ q(fcs) => [
+ q(0074),
+ q(0),
+ ],
+ q(fse) => [
+ q(0075),
+ q(0),
+ ],
+ q(fsl) => [
+ q(0076),
+ q(0),
+ ],
+ q(fss) => [
+ q(0077),
+ q(0),
+ ],
+ q(gan) => [
+ q(0078),
+ q(0),
+ ],
+ q(gds) => [
+ q(0079),
+ q(0),
+ ],
+ q(gom) => [
+ q(0080),
+ q(0),
+ ],
+ q(gse) => [
+ q(0081),
+ q(0),
+ ],
+ q(gsg) => [
+ q(0082),
+ q(0),
+ ],
+ q(gsm) => [
+ q(0083),
+ q(0),
+ ],
+ q(gss) => [
+ q(0084),
+ q(0),
+ ],
+ q(gus) => [
+ q(0085),
+ q(0),
+ ],
+ q(hab) => [
+ q(0086),
+ q(0),
+ ],
+ q(haf) => [
+ q(0087),
+ q(0),
+ ],
+ q(hak) => [
+ q(0088),
+ q(0),
+ ],
+ q(hds) => [
+ q(0089),
+ q(0),
+ ],
+ q(hji) => [
+ q(0090),
+ q(0),
+ ],
+ q(hks) => [
+ q(0091),
+ q(0),
+ ],
+ q(hos) => [
+ q(0092),
+ q(0),
+ ],
+ q(hps) => [
+ q(0093),
+ q(0),
+ ],
+ q(hsh) => [
+ q(0094),
+ q(0),
+ ],
+ q(hsl) => [
+ q(0095),
+ q(0),
+ ],
+ q(hsn) => [
+ q(0096),
+ q(0),
+ ],
+ q(icl) => [
+ q(0097),
+ q(0),
+ ],
+ q(ils) => [
+ q(0098),
+ q(0),
+ ],
+ q(inl) => [
+ q(0099),
+ q(0),
+ ],
+ q(ins) => [
+ q(0100),
+ q(0),
+ ],
+ q(ise) => [
+ q(0101),
+ q(0),
+ ],
+ q(isg) => [
+ q(0102),
+ q(0),
+ ],
+ q(isr) => [
+ q(0103),
+ q(0),
+ ],
+ q(jak) => [
+ q(0104),
+ q(0),
+ ],
+ q(jax) => [
+ q(0105),
+ q(0),
+ ],
+ q(jcs) => [
+ q(0106),
+ q(0),
+ ],
+ q(jhs) => [
+ q(0107),
+ q(0),
+ ],
+ q(jls) => [
+ q(0108),
+ q(0),
+ ],
+ q(jos) => [
+ q(0109),
+ q(0),
+ ],
+ q(jsl) => [
+ q(0110),
+ q(0),
+ ],
+ q(jus) => [
+ q(0111),
+ q(0),
+ ],
+ q(kgi) => [
+ q(0112),
+ q(0),
+ ],
+ q(knn) => [
+ q(0113),
+ q(0),
+ ],
+ q(kvb) => [
+ q(0114),
+ q(0),
+ ],
+ q(kvk) => [
+ q(0115),
+ q(0),
+ ],
+ q(kvr) => [
+ q(0116),
+ q(0),
+ ],
+ q(kxd) => [
+ q(0117),
+ q(0),
+ ],
+ q(lbs) => [
+ q(0118),
+ q(0),
+ ],
+ q(lce) => [
+ q(0119),
+ q(0),
+ ],
+ q(lcf) => [
+ q(0120),
+ q(0),
+ ],
+ q(liw) => [
+ q(0121),
+ q(0),
+ ],
+ q(lls) => [
+ q(0122),
+ q(0),
+ ],
+ q(lsg) => [
+ q(0123),
+ q(0),
+ ],
+ q(lsl) => [
+ q(0124),
+ q(0),
+ ],
+ q(lso) => [
+ q(0125),
+ q(0),
+ ],
+ q(lsp) => [
+ q(0126),
+ q(0),
+ ],
+ q(lst) => [
+ q(0127),
+ q(0),
+ ],
+ q(lsy) => [
+ q(0128),
+ q(0),
+ ],
+ q(ltg) => [
+ q(0129),
+ q(0),
+ ],
+ q(lvs) => [
+ q(0130),
+ q(0),
+ ],
+ q(lzh) => [
+ q(0131),
+ q(0),
+ ],
+ q(max) => [
+ q(0132),
+ q(0),
+ ],
+ q(mdl) => [
+ q(0133),
+ q(0),
+ ],
+ q(meo) => [
+ q(0134),
+ q(0),
+ ],
+ q(mfa) => [
+ q(0135),
+ q(0),
+ ],
+ q(mfb) => [
+ q(0136),
+ q(0),
+ ],
+ q(mfs) => [
+ q(0137),
+ q(0),
+ ],
+ q(min) => [
+ q(0138),
+ q(0),
+ ],
+ q(mnp) => [
+ q(0139),
+ q(0),
+ ],
+ q(mqg) => [
+ q(0140),
+ q(0),
+ ],
+ q(mre) => [
+ q(0141),
+ q(0),
+ ],
+ q(msd) => [
+ q(0142),
+ q(0),
+ ],
+ q(msi) => [
+ q(0143),
+ q(0),
+ ],
+ q(msr) => [
+ q(0144),
+ q(0),
+ ],
+ q(mui) => [
+ q(0145),
+ q(0),
+ ],
+ q(mzc) => [
+ q(0146),
+ q(0),
+ ],
+ q(mzg) => [
+ q(0147),
+ q(0),
+ ],
+ q(mzy) => [
+ q(0148),
+ q(0),
+ ],
+ q(nan) => [
+ q(0149),
+ q(0),
+ ],
+ q(nbs) => [
+ q(0150),
+ q(0),
+ ],
+ q(ncs) => [
+ q(0151),
+ q(0),
+ ],
+ q(nsi) => [
+ q(0152),
+ q(0),
+ ],
+ q(nsl) => [
+ q(0153),
+ q(0),
+ ],
+ q(nsp) => [
+ q(0154),
+ q(0),
+ ],
+ q(nsr) => [
+ q(0155),
+ q(0),
+ ],
+ q(nzs) => [
+ q(0156),
+ q(0),
+ ],
+ q(okl) => [
+ q(0157),
+ q(0),
+ ],
+ q(orn) => [
+ q(0158),
+ q(0),
+ ],
+ q(ors) => [
+ q(0159),
+ q(0),
+ ],
+ q(pel) => [
+ q(0160),
+ q(0),
+ ],
+ q(pga) => [
+ q(0161),
+ q(0),
+ ],
+ q(pks) => [
+ q(0162),
+ q(0),
+ ],
+ q(prl) => [
+ q(0163),
+ q(0),
+ ],
+ q(prz) => [
+ q(0164),
+ q(0),
+ ],
+ q(psc) => [
+ q(0165),
+ q(0),
+ ],
+ q(psd) => [
+ q(0166),
+ q(0),
+ ],
+ q(pse) => [
+ q(0167),
+ q(0),
+ ],
+ q(psg) => [
+ q(0168),
+ q(0),
+ ],
+ q(psl) => [
+ q(0169),
+ q(0),
+ ],
+ q(pso) => [
+ q(0170),
+ q(0),
+ ],
+ q(psp) => [
+ q(0171),
+ q(0),
+ ],
+ q(psr) => [
+ q(0172),
+ q(0),
+ ],
+ q(pys) => [
+ q(0173),
+ q(0),
+ ],
+ q(rms) => [
+ q(0174),
+ q(0),
+ ],
+ q(rsi) => [
+ q(0175),
+ q(0),
+ ],
+ q(rsl) => [
+ q(0176),
+ q(0),
+ ],
+ q(sdl) => [
+ q(0177),
+ q(0),
+ ],
+ q(sfb) => [
+ q(0178),
+ q(0),
+ ],
+ q(sfs) => [
+ q(0179),
+ q(0),
+ ],
+ q(sgg) => [
+ q(0180),
+ q(0),
+ ],
+ q(sgx) => [
+ q(0181),
+ q(0),
+ ],
+ q(shu) => [
+ q(0182),
+ q(0),
+ ],
+ q(slf) => [
+ q(0183),
+ q(0),
+ ],
+ q(sls) => [
+ q(0184),
+ q(0),
+ ],
+ q(sqk) => [
+ q(0185),
+ q(0),
+ ],
+ q(sqs) => [
+ q(0186),
+ q(0),
+ ],
+ q(ssh) => [
+ q(0187),
+ q(0),
+ ],
+ q(ssp) => [
+ q(0188),
+ q(0),
+ ],
+ q(ssr) => [
+ q(0189),
+ q(0),
+ ],
+ q(svk) => [
+ q(0190),
+ q(0),
+ ],
+ q(swc) => [
+ q(0191),
+ q(0),
+ ],
+ q(swh) => [
+ q(0192),
+ q(0),
+ ],
+ q(swl) => [
+ q(0193),
+ q(0),
+ ],
+ q(syy) => [
+ q(0194),
+ q(0),
+ ],
+ q(tmw) => [
+ q(0195),
+ q(0),
+ ],
+ q(tse) => [
+ q(0196),
+ q(0),
+ ],
+ q(tsm) => [
+ q(0197),
+ q(0),
+ ],
+ q(tsq) => [
+ q(0198),
+ q(0),
+ ],
+ q(tss) => [
+ q(0199),
+ q(0),
+ ],
+ q(tsy) => [
+ q(0200),
+ q(0),
+ ],
+ q(tza) => [
+ q(0201),
+ q(0),
+ ],
+ q(ugn) => [
+ q(0202),
+ q(0),
+ ],
+ q(ugy) => [
+ q(0203),
+ q(0),
+ ],
+ q(ukl) => [
+ q(0204),
+ q(0),
+ ],
+ q(uks) => [
+ q(0205),
+ q(0),
+ ],
+ q(urk) => [
+ q(0206),
+ q(0),
+ ],
+ q(uzn) => [
+ q(0207),
+ q(0),
+ ],
+ q(uzs) => [
+ q(0208),
+ q(0),
+ ],
+ q(vgt) => [
+ q(0209),
+ q(0),
+ ],
+ q(vkk) => [
+ q(0210),
+ q(0),
+ ],
+ q(vkt) => [
+ q(0211),
+ q(0),
+ ],
+ q(vsi) => [
+ q(0212),
+ q(0),
+ ],
+ q(vsl) => [
+ q(0213),
+ q(0),
+ ],
+ q(vsv) => [
+ q(0214),
+ q(0),
+ ],
+ q(wuu) => [
+ q(0215),
+ q(0),
+ ],
+ q(xki) => [
+ q(0216),
+ q(0),
+ ],
+ q(xml) => [
+ q(0217),
+ q(0),
+ ],
+ q(xmm) => [
+ q(0218),
+ q(0),
+ ],
+ q(xms) => [
+ q(0219),
+ q(0),
+ ],
+ q(yds) => [
+ q(0220),
+ q(0),
+ ],
+ q(ysl) => [
+ q(0221),
+ q(0),
+ ],
+ q(yue) => [
+ q(0222),
+ q(0),
+ ],
+ q(zib) => [
+ q(0223),
+ q(0),
+ ],
+ q(zlm) => [
+ q(0224),
+ q(0),
+ ],
+ q(zmi) => [
+ q(0225),
+ q(0),
+ ],
+ q(zsl) => [
+ q(0226),
+ q(0),
+ ],
+ q(zsm) => [
+ q(0227),
+ q(0),
+ ],
+ },
+};
+
+$Locale::Codes::Data{'langext'}{'id2code'} = {
+ q(alpha) => {
+ q(0001) => q(aao),
+ q(0002) => q(abh),
+ q(0003) => q(abv),
+ q(0004) => q(acm),
+ q(0005) => q(acq),
+ q(0006) => q(acw),
+ q(0007) => q(acx),
+ q(0008) => q(acy),
+ q(0009) => q(adf),
+ q(0010) => q(ads),
+ q(0011) => q(aeb),
+ q(0012) => q(aec),
+ q(0013) => q(aed),
+ q(0014) => q(aen),
+ q(0015) => q(afb),
+ q(0016) => q(afg),
+ q(0017) => q(ajp),
+ q(0018) => q(apc),
+ q(0019) => q(apd),
+ q(0020) => q(arb),
+ q(0021) => q(arq),
+ q(0022) => q(ars),
+ q(0023) => q(ary),
+ q(0024) => q(arz),
+ q(0025) => q(ase),
+ q(0026) => q(asf),
+ q(0027) => q(asp),
+ q(0028) => q(asq),
+ q(0029) => q(asw),
+ q(0030) => q(auz),
+ q(0031) => q(avl),
+ q(0032) => q(ayh),
+ q(0033) => q(ayl),
+ q(0034) => q(ayn),
+ q(0035) => q(ayp),
+ q(0036) => q(bbz),
+ q(0037) => q(bfi),
+ q(0038) => q(bfk),
+ q(0039) => q(bjn),
+ q(0040) => q(bog),
+ q(0041) => q(bqn),
+ q(0042) => q(bqy),
+ q(0043) => q(btj),
+ q(0044) => q(bve),
+ q(0045) => q(bvl),
+ q(0046) => q(bvu),
+ q(0047) => q(bzs),
+ q(0048) => q(cdo),
+ q(0049) => q(cds),
+ q(0050) => q(cjy),
+ q(0051) => q(cmn),
+ q(0052) => q(coa),
+ q(0053) => q(cpx),
+ q(0054) => q(csc),
+ q(0055) => q(csd),
+ q(0056) => q(cse),
+ q(0057) => q(csf),
+ q(0058) => q(csg),
+ q(0059) => q(csl),
+ q(0060) => q(csn),
+ q(0061) => q(csq),
+ q(0062) => q(csr),
+ q(0063) => q(czh),
+ q(0064) => q(czo),
+ q(0065) => q(doq),
+ q(0066) => q(dse),
+ q(0067) => q(dsl),
+ q(0068) => q(dup),
+ q(0069) => q(ecs),
+ q(0070) => q(esl),
+ q(0071) => q(esn),
+ q(0072) => q(eso),
+ q(0073) => q(eth),
+ q(0074) => q(fcs),
+ q(0075) => q(fse),
+ q(0076) => q(fsl),
+ q(0077) => q(fss),
+ q(0078) => q(gan),
+ q(0079) => q(gds),
+ q(0080) => q(gom),
+ q(0081) => q(gse),
+ q(0082) => q(gsg),
+ q(0083) => q(gsm),
+ q(0084) => q(gss),
+ q(0085) => q(gus),
+ q(0086) => q(hab),
+ q(0087) => q(haf),
+ q(0088) => q(hak),
+ q(0089) => q(hds),
+ q(0090) => q(hji),
+ q(0091) => q(hks),
+ q(0092) => q(hos),
+ q(0093) => q(hps),
+ q(0094) => q(hsh),
+ q(0095) => q(hsl),
+ q(0096) => q(hsn),
+ q(0097) => q(icl),
+ q(0098) => q(ils),
+ q(0099) => q(inl),
+ q(0100) => q(ins),
+ q(0101) => q(ise),
+ q(0102) => q(isg),
+ q(0103) => q(isr),
+ q(0104) => q(jak),
+ q(0105) => q(jax),
+ q(0106) => q(jcs),
+ q(0107) => q(jhs),
+ q(0108) => q(jls),
+ q(0109) => q(jos),
+ q(0110) => q(jsl),
+ q(0111) => q(jus),
+ q(0112) => q(kgi),
+ q(0113) => q(knn),
+ q(0114) => q(kvb),
+ q(0115) => q(kvk),
+ q(0116) => q(kvr),
+ q(0117) => q(kxd),
+ q(0118) => q(lbs),
+ q(0119) => q(lce),
+ q(0120) => q(lcf),
+ q(0121) => q(liw),
+ q(0122) => q(lls),
+ q(0123) => q(lsg),
+ q(0124) => q(lsl),
+ q(0125) => q(lso),
+ q(0126) => q(lsp),
+ q(0127) => q(lst),
+ q(0128) => q(lsy),
+ q(0129) => q(ltg),
+ q(0130) => q(lvs),
+ q(0131) => q(lzh),
+ q(0132) => q(max),
+ q(0133) => q(mdl),
+ q(0134) => q(meo),
+ q(0135) => q(mfa),
+ q(0136) => q(mfb),
+ q(0137) => q(mfs),
+ q(0138) => q(min),
+ q(0139) => q(mnp),
+ q(0140) => q(mqg),
+ q(0141) => q(mre),
+ q(0142) => q(msd),
+ q(0143) => q(msi),
+ q(0144) => q(msr),
+ q(0145) => q(mui),
+ q(0146) => q(mzc),
+ q(0147) => q(mzg),
+ q(0148) => q(mzy),
+ q(0149) => q(nan),
+ q(0150) => q(nbs),
+ q(0151) => q(ncs),
+ q(0152) => q(nsi),
+ q(0153) => q(nsl),
+ q(0154) => q(nsp),
+ q(0155) => q(nsr),
+ q(0156) => q(nzs),
+ q(0157) => q(okl),
+ q(0158) => q(orn),
+ q(0159) => q(ors),
+ q(0160) => q(pel),
+ q(0161) => q(pga),
+ q(0162) => q(pks),
+ q(0163) => q(prl),
+ q(0164) => q(prz),
+ q(0165) => q(psc),
+ q(0166) => q(psd),
+ q(0167) => q(pse),
+ q(0168) => q(psg),
+ q(0169) => q(psl),
+ q(0170) => q(pso),
+ q(0171) => q(psp),
+ q(0172) => q(psr),
+ q(0173) => q(pys),
+ q(0174) => q(rms),
+ q(0175) => q(rsi),
+ q(0176) => q(rsl),
+ q(0177) => q(sdl),
+ q(0178) => q(sfb),
+ q(0179) => q(sfs),
+ q(0180) => q(sgg),
+ q(0181) => q(sgx),
+ q(0182) => q(shu),
+ q(0183) => q(slf),
+ q(0184) => q(sls),
+ q(0185) => q(sqk),
+ q(0186) => q(sqs),
+ q(0187) => q(ssh),
+ q(0188) => q(ssp),
+ q(0189) => q(ssr),
+ q(0190) => q(svk),
+ q(0191) => q(swc),
+ q(0192) => q(swh),
+ q(0193) => q(swl),
+ q(0194) => q(syy),
+ q(0195) => q(tmw),
+ q(0196) => q(tse),
+ q(0197) => q(tsm),
+ q(0198) => q(tsq),
+ q(0199) => q(tss),
+ q(0200) => q(tsy),
+ q(0201) => q(tza),
+ q(0202) => q(ugn),
+ q(0203) => q(ugy),
+ q(0204) => q(ukl),
+ q(0205) => q(uks),
+ q(0206) => q(urk),
+ q(0207) => q(uzn),
+ q(0208) => q(uzs),
+ q(0209) => q(vgt),
+ q(0210) => q(vkk),
+ q(0211) => q(vkt),
+ q(0212) => q(vsi),
+ q(0213) => q(vsl),
+ q(0214) => q(vsv),
+ q(0215) => q(wuu),
+ q(0216) => q(xki),
+ q(0217) => q(xml),
+ q(0218) => q(xmm),
+ q(0219) => q(xms),
+ q(0220) => q(yds),
+ q(0221) => q(ysl),
+ q(0222) => q(yue),
+ q(0223) => q(zib),
+ q(0224) => q(zlm),
+ q(0225) => q(zmi),
+ q(0226) => q(zsl),
+ q(0227) => q(zsm),
+ },
+};
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt_Retired.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt_Retired.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangExt_Retired.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,50 @@
+package Locale::Codes::LangExt_Retired;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'deprecate_codes' is run.
+# Generated on: Wed Feb 27 10:06:46 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangExt_Retired - retired langext codes for the Locale::Codes::LangExt module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::LangExt module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Retired{'langext'}{'alpha'}{'code'} = {
+};
+
+$Locale::Codes::Retired{'langext'}{'alpha'}{'name'} = {
+};
+
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,95 @@
+package Locale::Codes::LangFam;
+# Copyright (c) 2011-2013 Sullivan Beck
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+require 5.006;
+use warnings;
+
+require Exporter;
+use Carp;
+use Locale::Codes;
+use Locale::Codes::Constants;
+use Locale::Codes::LangFam_Codes;
+use Locale::Codes::LangFam_Retired;
+
+#=======================================================================
+# Public Global Variables
+#=======================================================================
+
+our($VERSION, at ISA, at EXPORT, at EXPORT_OK);
+
+$VERSION='3.25';
+ at ISA = qw(Exporter);
+ at EXPORT = qw(code2langfam
+ langfam2code
+ all_langfam_codes
+ all_langfam_names
+ langfam_code2code
+ LOCALE_LANGFAM_ALPHA
+ );
+
+sub code2langfam {
+ return Locale::Codes::_code2name('langfam', at _);
+}
+
+sub langfam2code {
+ return Locale::Codes::_name2code('langfam', at _);
+}
+
+sub langfam_code2code {
+ return Locale::Codes::_code2code('langfam', at _);
+}
+
+sub all_langfam_codes {
+ return Locale::Codes::_all_codes('langfam', at _);
+}
+
+sub all_langfam_names {
+ return Locale::Codes::_all_names('langfam', at _);
+}
+
+sub rename_langfam {
+ return Locale::Codes::_rename('langfam', at _);
+}
+
+sub add_langfam {
+ return Locale::Codes::_add_code('langfam', at _);
+}
+
+sub delete_langfam {
+ return Locale::Codes::_delete_code('langfam', at _);
+}
+
+sub add_langfam_alias {
+ return Locale::Codes::_add_alias('langfam', at _);
+}
+
+sub delete_langfam_alias {
+ return Locale::Codes::_delete_alias('langfam', at _);
+}
+
+sub rename_langfam_code {
+ return Locale::Codes::_rename_code('langfam', at _);
+}
+
+sub add_langfam_code_alias {
+ return Locale::Codes::_add_code_alias('langfam', at _);
+}
+
+sub delete_langfam_code_alias {
+ return Locale::Codes::_delete_code_alias('langfam', at _);
+}
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,116 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangFam - standard codes for language extension identification
+
+=head1 SYNOPSIS
+
+ use Locale::Codes::LangFam;
+
+ $lext = code2langfam('apa'); # $lext gets 'Apache languages'
+ $code = langfam2code('Apache languages'); # $code gets 'apa'
+
+ @codes = all_langfam_codes();
+ @names = all_langfam_names();
+
+=head1 DESCRIPTION
+
+The C<Locale::Codes::LangFam> module provides access to standard codes
+used for identifying language families, such as those as defined in
+ISO 639-5.
+
+Most of the routines take an optional additional argument which
+specifies the code set to use. If not specified, the default ISO 639-5
+language family codes will be used.
+
+=head1 SUPPORTED CODE SETS
+
+There are several different code sets you can use for identifying
+language families. A code set may be specified using either a name, or a
+constant that is automatically exported by this module.
+
+For example, the two are equivalent:
+
+ $lext = code2langfam('apa','alpha');
+ $lext = code2langfam('apa',LOCALE_LANGFAM_ALPHA);
+
+The codesets currently supported are:
+
+=over 4
+
+=item B<alpha>
+
+This is the set of three-letter (lowercase) codes from ISO 639-5
+such as 'apa' for Apache languages.
+
+This is the default code set.
+
+=back
+
+=head1 ROUTINES
+
+=over 4
+
+=item B<code2langfam ( CODE [,CODESET] )>
+
+=item B<langfam2code ( NAME [,CODESET] )>
+
+=item B<langfam_code2code ( CODE ,CODESET ,CODESET2 )>
+
+=item B<all_langfam_codes ( [CODESET] )>
+
+=item B<all_langfam_names ( [CODESET] )>
+
+=item B<Locale::Codes::LangFam::rename_langfam ( CODE ,NEW_NAME [,CODESET] )>
+
+=item B<Locale::Codes::LangFam::add_langfam ( CODE ,NAME [,CODESET] )>
+
+=item B<Locale::Codes::LangFam::delete_langfam ( CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangFam::add_langfam_alias ( NAME ,NEW_NAME )>
+
+=item B<Locale::Codes::LangFam::delete_langfam_alias ( NAME )>
+
+=item B<Locale::Codes::LangFam::rename_langfam_code ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangFam::add_langfam_code_alias ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangFam::delete_langfam_code_alias ( CODE [,CODESET] )>
+
+These routines are all documented in the Locale::Codes::API man page.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item B<Locale::Codes>
+
+The Locale-Codes distribution.
+
+=item B<Locale::Codes::API>
+
+The list of functions supported by this module.
+
+=item B<http://www.loc.gov/standards/iso639-5/id.php>
+
+ISO 639-5 .
+
+=back
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2011-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam_Codes.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam_Codes.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam_Codes.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1441 @@
+package Locale::Codes::LangFam_Codes;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'get_codes' is run.
+# Generated on: Wed Feb 27 10:04:35 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangFam_Codes - langfam codes for the Locale::Codes::LangFam module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::LangFam module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Data{'langfam'}{'id'} = '0116';
+
+$Locale::Codes::Data{'langfam'}{'id2names'} = {
+ q(0001) => [
+ q(Austro-Asiatic languages),
+ ],
+ q(0002) => [
+ q(Afro-Asiatic languages),
+ ],
+ q(0003) => [
+ q(Algonquian languages),
+ ],
+ q(0004) => [
+ q(Atlantic-Congo languages),
+ ],
+ q(0005) => [
+ q(Apache languages),
+ ],
+ q(0006) => [
+ q(Alacalufan languages),
+ ],
+ q(0007) => [
+ q(Algic languages),
+ ],
+ q(0008) => [
+ q(Artificial languages),
+ ],
+ q(0009) => [
+ q(Athapascan languages),
+ ],
+ q(0010) => [
+ q(Arauan languages),
+ ],
+ q(0011) => [
+ q(Australian languages),
+ ],
+ q(0012) => [
+ q(Arawakan languages),
+ ],
+ q(0013) => [
+ q(Uto-Aztecan languages),
+ ],
+ q(0014) => [
+ q(Banda languages),
+ ],
+ q(0015) => [
+ q(Bamileke languages),
+ ],
+ q(0016) => [
+ q(Baltic languages),
+ ],
+ q(0017) => [
+ q(Berber languages),
+ ],
+ q(0018) => [
+ q(Bihari languages),
+ ],
+ q(0019) => [
+ q(Bantu languages),
+ ],
+ q(0020) => [
+ q(Batak languages),
+ ],
+ q(0021) => [
+ q(Central American Indian languages),
+ ],
+ q(0022) => [
+ q(Caucasian languages),
+ ],
+ q(0023) => [
+ q(Chibchan languages),
+ ],
+ q(0024) => [
+ q(North Caucasian languages),
+ ],
+ q(0025) => [
+ q(South Caucasian languages),
+ ],
+ q(0026) => [
+ q(Chadic languages),
+ ],
+ q(0027) => [
+ q(Caddoan languages),
+ ],
+ q(0028) => [
+ q(Celtic languages),
+ ],
+ q(0029) => [
+ q(Chamic languages),
+ ],
+ q(0030) => [
+ q(Creoles and pidgins, English-based),
+ ],
+ q(0031) => [
+ q(Creoles and pidgins, French-based),
+ ],
+ q(0032) => [
+ q(Creoles and pidgins, Portuguese-based),
+ ],
+ q(0033) => [
+ q(Creoles and pidgins),
+ ],
+ q(0034) => [
+ q(Central Sudanic languages),
+ ],
+ q(0035) => [
+ q(Cushitic languages),
+ ],
+ q(0036) => [
+ q(Land Dayak languages),
+ ],
+ q(0037) => [
+ q(Mande languages),
+ ],
+ q(0038) => [
+ q(Dravidian languages),
+ ],
+ q(0039) => [
+ q(Egyptian languages),
+ ],
+ q(0040) => [
+ q(Eskimo-Aleut languages),
+ ],
+ q(0041) => [
+ q(Basque (family)),
+ ],
+ q(0042) => [
+ q(Finno-Ugrian languages),
+ ],
+ q(0043) => [
+ q(Formosan languages),
+ ],
+ q(0044) => [
+ q(Germanic languages),
+ ],
+ q(0045) => [
+ q(East Germanic languages),
+ ],
+ q(0046) => [
+ q(North Germanic languages),
+ ],
+ q(0047) => [
+ q(West Germanic languages),
+ ],
+ q(0048) => [
+ q(Greek languages),
+ ],
+ q(0049) => [
+ q(Hmong-Mien languages),
+ ],
+ q(0050) => [
+ q(Hokan languages),
+ ],
+ q(0051) => [
+ q(Armenian (family)),
+ ],
+ q(0052) => [
+ q(Indo-Iranian languages),
+ ],
+ q(0053) => [
+ q(Ijo languages),
+ ],
+ q(0054) => [
+ q(Indic languages),
+ ],
+ q(0055) => [
+ q(Indo-European languages),
+ ],
+ q(0056) => [
+ q(Iranian languages),
+ ],
+ q(0057) => [
+ q(Iroquoian languages),
+ ],
+ q(0058) => [
+ q(Italic languages),
+ ],
+ q(0059) => [
+ q(Japanese (family)),
+ ],
+ q(0060) => [
+ q(Karen languages),
+ ],
+ q(0061) => [
+ q(Kordofanian languages),
+ ],
+ q(0062) => [
+ q(Khoisan languages),
+ ],
+ q(0063) => [
+ q(Kru languages),
+ ],
+ q(0064) => [
+ q(Austronesian languages),
+ ],
+ q(0065) => [
+ q(Mon-Khmer languages),
+ ],
+ q(0066) => [
+ q(Manobo languages),
+ ],
+ q(0067) => [
+ q(Munda languages),
+ ],
+ q(0068) => [
+ q(Mayan languages),
+ ],
+ q(0069) => [
+ q(Nahuatl languages),
+ ],
+ q(0070) => [
+ q(North American Indian languages),
+ ],
+ q(0071) => [
+ q(Trans-New Guinea languages),
+ ],
+ q(0072) => [
+ q(Niger-Kordofanian languages),
+ ],
+ q(0073) => [
+ q(Nubian languages),
+ ],
+ q(0074) => [
+ q(Oto-Manguean languages),
+ ],
+ q(0075) => [
+ q(Omotic languages),
+ ],
+ q(0076) => [
+ q(Otomian languages),
+ ],
+ q(0077) => [
+ q(Papuan languages),
+ ],
+ q(0078) => [
+ q(Philippine languages),
+ ],
+ q(0079) => [
+ q(Central Malayo-Polynesian languages),
+ ],
+ q(0080) => [
+ q(Malayo-Polynesian languages),
+ ],
+ q(0081) => [
+ q(Eastern Malayo-Polynesian languages),
+ ],
+ q(0082) => [
+ q(Western Malayo-Polynesian languages),
+ ],
+ q(0083) => [
+ q(Prakrit languages),
+ ],
+ q(0084) => [
+ q(Quechuan (family)),
+ ],
+ q(0085) => [
+ q(Romance languages),
+ ],
+ q(0086) => [
+ q(South American Indian languages),
+ ],
+ q(0087) => [
+ q(Salishan languages),
+ ],
+ q(0088) => [
+ q(Eastern Sudanic languages),
+ ],
+ q(0089) => [
+ q(Semitic languages),
+ ],
+ q(0090) => [
+ q(sign languages),
+ ],
+ q(0091) => [
+ q(Siouan languages),
+ ],
+ q(0092) => [
+ q(Sino-Tibetan languages),
+ ],
+ q(0093) => [
+ q(Slavic languages),
+ ],
+ q(0094) => [
+ q(Sami languages),
+ ],
+ q(0095) => [
+ q(Songhai languages),
+ ],
+ q(0096) => [
+ q(Albanian languages),
+ ],
+ q(0097) => [
+ q(Nilo-Saharan languages),
+ ],
+ q(0098) => [
+ q(Samoyedic languages),
+ ],
+ q(0099) => [
+ q(Tai languages),
+ ],
+ q(0100) => [
+ q(Tibeto-Burman languages),
+ ],
+ q(0101) => [
+ q(Turkic languages),
+ ],
+ q(0102) => [
+ q(Tupi languages),
+ ],
+ q(0103) => [
+ q(Altaic languages),
+ ],
+ q(0104) => [
+ q(Tungus languages),
+ ],
+ q(0105) => [
+ q(Uralic languages),
+ ],
+ q(0106) => [
+ q(Wakashan languages),
+ ],
+ q(0107) => [
+ q(Sorbian languages),
+ ],
+ q(0108) => [
+ q(Mongolian languages),
+ ],
+ q(0109) => [
+ q(Na-Dene languages),
+ ],
+ q(0110) => [
+ q(Yupik languages),
+ ],
+ q(0111) => [
+ q(Chinese (family)),
+ ],
+ q(0112) => [
+ q(East Slavic languages),
+ ],
+ q(0113) => [
+ q(South Slavic languages),
+ ],
+ q(0114) => [
+ q(West Slavic languages),
+ ],
+ q(0115) => [
+ q(Zande languages),
+ ],
+};
+
+$Locale::Codes::Data{'langfam'}{'alias2id'} = {
+ q(afro-asiatic languages) => [
+ q(0002),
+ q(0),
+ ],
+ q(alacalufan languages) => [
+ q(0006),
+ q(0),
+ ],
+ q(albanian languages) => [
+ q(0096),
+ q(0),
+ ],
+ q(algic languages) => [
+ q(0007),
+ q(0),
+ ],
+ q(algonquian languages) => [
+ q(0003),
+ q(0),
+ ],
+ q(altaic languages) => [
+ q(0103),
+ q(0),
+ ],
+ q(apache languages) => [
+ q(0005),
+ q(0),
+ ],
+ q(arauan languages) => [
+ q(0010),
+ q(0),
+ ],
+ q(arawakan languages) => [
+ q(0012),
+ q(0),
+ ],
+ q(armenian (family)) => [
+ q(0051),
+ q(0),
+ ],
+ q(artificial languages) => [
+ q(0008),
+ q(0),
+ ],
+ q(athapascan languages) => [
+ q(0009),
+ q(0),
+ ],
+ q(atlantic-congo languages) => [
+ q(0004),
+ q(0),
+ ],
+ q(australian languages) => [
+ q(0011),
+ q(0),
+ ],
+ q(austro-asiatic languages) => [
+ q(0001),
+ q(0),
+ ],
+ q(austronesian languages) => [
+ q(0064),
+ q(0),
+ ],
+ q(baltic languages) => [
+ q(0016),
+ q(0),
+ ],
+ q(bamileke languages) => [
+ q(0015),
+ q(0),
+ ],
+ q(banda languages) => [
+ q(0014),
+ q(0),
+ ],
+ q(bantu languages) => [
+ q(0019),
+ q(0),
+ ],
+ q(basque (family)) => [
+ q(0041),
+ q(0),
+ ],
+ q(batak languages) => [
+ q(0020),
+ q(0),
+ ],
+ q(berber languages) => [
+ q(0017),
+ q(0),
+ ],
+ q(bihari languages) => [
+ q(0018),
+ q(0),
+ ],
+ q(caddoan languages) => [
+ q(0027),
+ q(0),
+ ],
+ q(caucasian languages) => [
+ q(0022),
+ q(0),
+ ],
+ q(celtic languages) => [
+ q(0028),
+ q(0),
+ ],
+ q(central american indian languages) => [
+ q(0021),
+ q(0),
+ ],
+ q(central malayo-polynesian languages) => [
+ q(0079),
+ q(0),
+ ],
+ q(central sudanic languages) => [
+ q(0034),
+ q(0),
+ ],
+ q(chadic languages) => [
+ q(0026),
+ q(0),
+ ],
+ q(chamic languages) => [
+ q(0029),
+ q(0),
+ ],
+ q(chibchan languages) => [
+ q(0023),
+ q(0),
+ ],
+ q(chinese (family)) => [
+ q(0111),
+ q(0),
+ ],
+ q(creoles and pidgins) => [
+ q(0033),
+ q(0),
+ ],
+ q(creoles and pidgins, english-based) => [
+ q(0030),
+ q(0),
+ ],
+ q(creoles and pidgins, french-based) => [
+ q(0031),
+ q(0),
+ ],
+ q(creoles and pidgins, portuguese-based) => [
+ q(0032),
+ q(0),
+ ],
+ q(cushitic languages) => [
+ q(0035),
+ q(0),
+ ],
+ q(dravidian languages) => [
+ q(0038),
+ q(0),
+ ],
+ q(east germanic languages) => [
+ q(0045),
+ q(0),
+ ],
+ q(east slavic languages) => [
+ q(0112),
+ q(0),
+ ],
+ q(eastern malayo-polynesian languages) => [
+ q(0081),
+ q(0),
+ ],
+ q(eastern sudanic languages) => [
+ q(0088),
+ q(0),
+ ],
+ q(egyptian languages) => [
+ q(0039),
+ q(0),
+ ],
+ q(eskimo-aleut languages) => [
+ q(0040),
+ q(0),
+ ],
+ q(finno-ugrian languages) => [
+ q(0042),
+ q(0),
+ ],
+ q(formosan languages) => [
+ q(0043),
+ q(0),
+ ],
+ q(germanic languages) => [
+ q(0044),
+ q(0),
+ ],
+ q(greek languages) => [
+ q(0048),
+ q(0),
+ ],
+ q(hmong-mien languages) => [
+ q(0049),
+ q(0),
+ ],
+ q(hokan languages) => [
+ q(0050),
+ q(0),
+ ],
+ q(ijo languages) => [
+ q(0053),
+ q(0),
+ ],
+ q(indic languages) => [
+ q(0054),
+ q(0),
+ ],
+ q(indo-european languages) => [
+ q(0055),
+ q(0),
+ ],
+ q(indo-iranian languages) => [
+ q(0052),
+ q(0),
+ ],
+ q(iranian languages) => [
+ q(0056),
+ q(0),
+ ],
+ q(iroquoian languages) => [
+ q(0057),
+ q(0),
+ ],
+ q(italic languages) => [
+ q(0058),
+ q(0),
+ ],
+ q(japanese (family)) => [
+ q(0059),
+ q(0),
+ ],
+ q(karen languages) => [
+ q(0060),
+ q(0),
+ ],
+ q(khoisan languages) => [
+ q(0062),
+ q(0),
+ ],
+ q(kordofanian languages) => [
+ q(0061),
+ q(0),
+ ],
+ q(kru languages) => [
+ q(0063),
+ q(0),
+ ],
+ q(land dayak languages) => [
+ q(0036),
+ q(0),
+ ],
+ q(malayo-polynesian languages) => [
+ q(0080),
+ q(0),
+ ],
+ q(mande languages) => [
+ q(0037),
+ q(0),
+ ],
+ q(manobo languages) => [
+ q(0066),
+ q(0),
+ ],
+ q(mayan languages) => [
+ q(0068),
+ q(0),
+ ],
+ q(mon-khmer languages) => [
+ q(0065),
+ q(0),
+ ],
+ q(mongolian languages) => [
+ q(0108),
+ q(0),
+ ],
+ q(munda languages) => [
+ q(0067),
+ q(0),
+ ],
+ q(na-dene languages) => [
+ q(0109),
+ q(0),
+ ],
+ q(nahuatl languages) => [
+ q(0069),
+ q(0),
+ ],
+ q(niger-kordofanian languages) => [
+ q(0072),
+ q(0),
+ ],
+ q(nilo-saharan languages) => [
+ q(0097),
+ q(0),
+ ],
+ q(north american indian languages) => [
+ q(0070),
+ q(0),
+ ],
+ q(north caucasian languages) => [
+ q(0024),
+ q(0),
+ ],
+ q(north germanic languages) => [
+ q(0046),
+ q(0),
+ ],
+ q(nubian languages) => [
+ q(0073),
+ q(0),
+ ],
+ q(omotic languages) => [
+ q(0075),
+ q(0),
+ ],
+ q(oto-manguean languages) => [
+ q(0074),
+ q(0),
+ ],
+ q(otomian languages) => [
+ q(0076),
+ q(0),
+ ],
+ q(papuan languages) => [
+ q(0077),
+ q(0),
+ ],
+ q(philippine languages) => [
+ q(0078),
+ q(0),
+ ],
+ q(prakrit languages) => [
+ q(0083),
+ q(0),
+ ],
+ q(quechuan (family)) => [
+ q(0084),
+ q(0),
+ ],
+ q(romance languages) => [
+ q(0085),
+ q(0),
+ ],
+ q(salishan languages) => [
+ q(0087),
+ q(0),
+ ],
+ q(sami languages) => [
+ q(0094),
+ q(0),
+ ],
+ q(samoyedic languages) => [
+ q(0098),
+ q(0),
+ ],
+ q(semitic languages) => [
+ q(0089),
+ q(0),
+ ],
+ q(sign languages) => [
+ q(0090),
+ q(0),
+ ],
+ q(sino-tibetan languages) => [
+ q(0092),
+ q(0),
+ ],
+ q(siouan languages) => [
+ q(0091),
+ q(0),
+ ],
+ q(slavic languages) => [
+ q(0093),
+ q(0),
+ ],
+ q(songhai languages) => [
+ q(0095),
+ q(0),
+ ],
+ q(sorbian languages) => [
+ q(0107),
+ q(0),
+ ],
+ q(south american indian languages) => [
+ q(0086),
+ q(0),
+ ],
+ q(south caucasian languages) => [
+ q(0025),
+ q(0),
+ ],
+ q(south slavic languages) => [
+ q(0113),
+ q(0),
+ ],
+ q(tai languages) => [
+ q(0099),
+ q(0),
+ ],
+ q(tibeto-burman languages) => [
+ q(0100),
+ q(0),
+ ],
+ q(trans-new guinea languages) => [
+ q(0071),
+ q(0),
+ ],
+ q(tungus languages) => [
+ q(0104),
+ q(0),
+ ],
+ q(tupi languages) => [
+ q(0102),
+ q(0),
+ ],
+ q(turkic languages) => [
+ q(0101),
+ q(0),
+ ],
+ q(uralic languages) => [
+ q(0105),
+ q(0),
+ ],
+ q(uto-aztecan languages) => [
+ q(0013),
+ q(0),
+ ],
+ q(wakashan languages) => [
+ q(0106),
+ q(0),
+ ],
+ q(west germanic languages) => [
+ q(0047),
+ q(0),
+ ],
+ q(west slavic languages) => [
+ q(0114),
+ q(0),
+ ],
+ q(western malayo-polynesian languages) => [
+ q(0082),
+ q(0),
+ ],
+ q(yupik languages) => [
+ q(0110),
+ q(0),
+ ],
+ q(zande languages) => [
+ q(0115),
+ q(0),
+ ],
+};
+
+$Locale::Codes::Data{'langfam'}{'code2id'} = {
+ q(alpha) => {
+ q(aav) => [
+ q(0001),
+ q(0),
+ ],
+ q(afa) => [
+ q(0002),
+ q(0),
+ ],
+ q(alg) => [
+ q(0003),
+ q(0),
+ ],
+ q(alv) => [
+ q(0004),
+ q(0),
+ ],
+ q(apa) => [
+ q(0005),
+ q(0),
+ ],
+ q(aqa) => [
+ q(0006),
+ q(0),
+ ],
+ q(aql) => [
+ q(0007),
+ q(0),
+ ],
+ q(art) => [
+ q(0008),
+ q(0),
+ ],
+ q(ath) => [
+ q(0009),
+ q(0),
+ ],
+ q(auf) => [
+ q(0010),
+ q(0),
+ ],
+ q(aus) => [
+ q(0011),
+ q(0),
+ ],
+ q(awd) => [
+ q(0012),
+ q(0),
+ ],
+ q(azc) => [
+ q(0013),
+ q(0),
+ ],
+ q(bad) => [
+ q(0014),
+ q(0),
+ ],
+ q(bai) => [
+ q(0015),
+ q(0),
+ ],
+ q(bat) => [
+ q(0016),
+ q(0),
+ ],
+ q(ber) => [
+ q(0017),
+ q(0),
+ ],
+ q(bih) => [
+ q(0018),
+ q(0),
+ ],
+ q(bnt) => [
+ q(0019),
+ q(0),
+ ],
+ q(btk) => [
+ q(0020),
+ q(0),
+ ],
+ q(cai) => [
+ q(0021),
+ q(0),
+ ],
+ q(cau) => [
+ q(0022),
+ q(0),
+ ],
+ q(cba) => [
+ q(0023),
+ q(0),
+ ],
+ q(ccn) => [
+ q(0024),
+ q(0),
+ ],
+ q(ccs) => [
+ q(0025),
+ q(0),
+ ],
+ q(cdc) => [
+ q(0026),
+ q(0),
+ ],
+ q(cdd) => [
+ q(0027),
+ q(0),
+ ],
+ q(cel) => [
+ q(0028),
+ q(0),
+ ],
+ q(cmc) => [
+ q(0029),
+ q(0),
+ ],
+ q(cpe) => [
+ q(0030),
+ q(0),
+ ],
+ q(cpf) => [
+ q(0031),
+ q(0),
+ ],
+ q(cpp) => [
+ q(0032),
+ q(0),
+ ],
+ q(crp) => [
+ q(0033),
+ q(0),
+ ],
+ q(csu) => [
+ q(0034),
+ q(0),
+ ],
+ q(cus) => [
+ q(0035),
+ q(0),
+ ],
+ q(day) => [
+ q(0036),
+ q(0),
+ ],
+ q(dmn) => [
+ q(0037),
+ q(0),
+ ],
+ q(dra) => [
+ q(0038),
+ q(0),
+ ],
+ q(egx) => [
+ q(0039),
+ q(0),
+ ],
+ q(esx) => [
+ q(0040),
+ q(0),
+ ],
+ q(euq) => [
+ q(0041),
+ q(0),
+ ],
+ q(fiu) => [
+ q(0042),
+ q(0),
+ ],
+ q(fox) => [
+ q(0043),
+ q(0),
+ ],
+ q(gem) => [
+ q(0044),
+ q(0),
+ ],
+ q(gme) => [
+ q(0045),
+ q(0),
+ ],
+ q(gmq) => [
+ q(0046),
+ q(0),
+ ],
+ q(gmw) => [
+ q(0047),
+ q(0),
+ ],
+ q(grk) => [
+ q(0048),
+ q(0),
+ ],
+ q(hmx) => [
+ q(0049),
+ q(0),
+ ],
+ q(hok) => [
+ q(0050),
+ q(0),
+ ],
+ q(hyx) => [
+ q(0051),
+ q(0),
+ ],
+ q(iir) => [
+ q(0052),
+ q(0),
+ ],
+ q(ijo) => [
+ q(0053),
+ q(0),
+ ],
+ q(inc) => [
+ q(0054),
+ q(0),
+ ],
+ q(ine) => [
+ q(0055),
+ q(0),
+ ],
+ q(ira) => [
+ q(0056),
+ q(0),
+ ],
+ q(iro) => [
+ q(0057),
+ q(0),
+ ],
+ q(itc) => [
+ q(0058),
+ q(0),
+ ],
+ q(jpx) => [
+ q(0059),
+ q(0),
+ ],
+ q(kar) => [
+ q(0060),
+ q(0),
+ ],
+ q(kdo) => [
+ q(0061),
+ q(0),
+ ],
+ q(khi) => [
+ q(0062),
+ q(0),
+ ],
+ q(kro) => [
+ q(0063),
+ q(0),
+ ],
+ q(map) => [
+ q(0064),
+ q(0),
+ ],
+ q(mkh) => [
+ q(0065),
+ q(0),
+ ],
+ q(mno) => [
+ q(0066),
+ q(0),
+ ],
+ q(mun) => [
+ q(0067),
+ q(0),
+ ],
+ q(myn) => [
+ q(0068),
+ q(0),
+ ],
+ q(nah) => [
+ q(0069),
+ q(0),
+ ],
+ q(nai) => [
+ q(0070),
+ q(0),
+ ],
+ q(ngf) => [
+ q(0071),
+ q(0),
+ ],
+ q(nic) => [
+ q(0072),
+ q(0),
+ ],
+ q(nub) => [
+ q(0073),
+ q(0),
+ ],
+ q(omq) => [
+ q(0074),
+ q(0),
+ ],
+ q(omv) => [
+ q(0075),
+ q(0),
+ ],
+ q(oto) => [
+ q(0076),
+ q(0),
+ ],
+ q(paa) => [
+ q(0077),
+ q(0),
+ ],
+ q(phi) => [
+ q(0078),
+ q(0),
+ ],
+ q(plf) => [
+ q(0079),
+ q(0),
+ ],
+ q(poz) => [
+ q(0080),
+ q(0),
+ ],
+ q(pqe) => [
+ q(0081),
+ q(0),
+ ],
+ q(pqw) => [
+ q(0082),
+ q(0),
+ ],
+ q(pra) => [
+ q(0083),
+ q(0),
+ ],
+ q(qwe) => [
+ q(0084),
+ q(0),
+ ],
+ q(roa) => [
+ q(0085),
+ q(0),
+ ],
+ q(sai) => [
+ q(0086),
+ q(0),
+ ],
+ q(sal) => [
+ q(0087),
+ q(0),
+ ],
+ q(sdv) => [
+ q(0088),
+ q(0),
+ ],
+ q(sem) => [
+ q(0089),
+ q(0),
+ ],
+ q(sgn) => [
+ q(0090),
+ q(0),
+ ],
+ q(sio) => [
+ q(0091),
+ q(0),
+ ],
+ q(sit) => [
+ q(0092),
+ q(0),
+ ],
+ q(sla) => [
+ q(0093),
+ q(0),
+ ],
+ q(smi) => [
+ q(0094),
+ q(0),
+ ],
+ q(son) => [
+ q(0095),
+ q(0),
+ ],
+ q(sqj) => [
+ q(0096),
+ q(0),
+ ],
+ q(ssa) => [
+ q(0097),
+ q(0),
+ ],
+ q(syd) => [
+ q(0098),
+ q(0),
+ ],
+ q(tai) => [
+ q(0099),
+ q(0),
+ ],
+ q(tbq) => [
+ q(0100),
+ q(0),
+ ],
+ q(trk) => [
+ q(0101),
+ q(0),
+ ],
+ q(tup) => [
+ q(0102),
+ q(0),
+ ],
+ q(tut) => [
+ q(0103),
+ q(0),
+ ],
+ q(tuw) => [
+ q(0104),
+ q(0),
+ ],
+ q(urj) => [
+ q(0105),
+ q(0),
+ ],
+ q(wak) => [
+ q(0106),
+ q(0),
+ ],
+ q(wen) => [
+ q(0107),
+ q(0),
+ ],
+ q(xgn) => [
+ q(0108),
+ q(0),
+ ],
+ q(xnd) => [
+ q(0109),
+ q(0),
+ ],
+ q(ypk) => [
+ q(0110),
+ q(0),
+ ],
+ q(zhx) => [
+ q(0111),
+ q(0),
+ ],
+ q(zle) => [
+ q(0112),
+ q(0),
+ ],
+ q(zls) => [
+ q(0113),
+ q(0),
+ ],
+ q(zlw) => [
+ q(0114),
+ q(0),
+ ],
+ q(znd) => [
+ q(0115),
+ q(0),
+ ],
+ },
+};
+
+$Locale::Codes::Data{'langfam'}{'id2code'} = {
+ q(alpha) => {
+ q(0001) => q(aav),
+ q(0002) => q(afa),
+ q(0003) => q(alg),
+ q(0004) => q(alv),
+ q(0005) => q(apa),
+ q(0006) => q(aqa),
+ q(0007) => q(aql),
+ q(0008) => q(art),
+ q(0009) => q(ath),
+ q(0010) => q(auf),
+ q(0011) => q(aus),
+ q(0012) => q(awd),
+ q(0013) => q(azc),
+ q(0014) => q(bad),
+ q(0015) => q(bai),
+ q(0016) => q(bat),
+ q(0017) => q(ber),
+ q(0018) => q(bih),
+ q(0019) => q(bnt),
+ q(0020) => q(btk),
+ q(0021) => q(cai),
+ q(0022) => q(cau),
+ q(0023) => q(cba),
+ q(0024) => q(ccn),
+ q(0025) => q(ccs),
+ q(0026) => q(cdc),
+ q(0027) => q(cdd),
+ q(0028) => q(cel),
+ q(0029) => q(cmc),
+ q(0030) => q(cpe),
+ q(0031) => q(cpf),
+ q(0032) => q(cpp),
+ q(0033) => q(crp),
+ q(0034) => q(csu),
+ q(0035) => q(cus),
+ q(0036) => q(day),
+ q(0037) => q(dmn),
+ q(0038) => q(dra),
+ q(0039) => q(egx),
+ q(0040) => q(esx),
+ q(0041) => q(euq),
+ q(0042) => q(fiu),
+ q(0043) => q(fox),
+ q(0044) => q(gem),
+ q(0045) => q(gme),
+ q(0046) => q(gmq),
+ q(0047) => q(gmw),
+ q(0048) => q(grk),
+ q(0049) => q(hmx),
+ q(0050) => q(hok),
+ q(0051) => q(hyx),
+ q(0052) => q(iir),
+ q(0053) => q(ijo),
+ q(0054) => q(inc),
+ q(0055) => q(ine),
+ q(0056) => q(ira),
+ q(0057) => q(iro),
+ q(0058) => q(itc),
+ q(0059) => q(jpx),
+ q(0060) => q(kar),
+ q(0061) => q(kdo),
+ q(0062) => q(khi),
+ q(0063) => q(kro),
+ q(0064) => q(map),
+ q(0065) => q(mkh),
+ q(0066) => q(mno),
+ q(0067) => q(mun),
+ q(0068) => q(myn),
+ q(0069) => q(nah),
+ q(0070) => q(nai),
+ q(0071) => q(ngf),
+ q(0072) => q(nic),
+ q(0073) => q(nub),
+ q(0074) => q(omq),
+ q(0075) => q(omv),
+ q(0076) => q(oto),
+ q(0077) => q(paa),
+ q(0078) => q(phi),
+ q(0079) => q(plf),
+ q(0080) => q(poz),
+ q(0081) => q(pqe),
+ q(0082) => q(pqw),
+ q(0083) => q(pra),
+ q(0084) => q(qwe),
+ q(0085) => q(roa),
+ q(0086) => q(sai),
+ q(0087) => q(sal),
+ q(0088) => q(sdv),
+ q(0089) => q(sem),
+ q(0090) => q(sgn),
+ q(0091) => q(sio),
+ q(0092) => q(sit),
+ q(0093) => q(sla),
+ q(0094) => q(smi),
+ q(0095) => q(son),
+ q(0096) => q(sqj),
+ q(0097) => q(ssa),
+ q(0098) => q(syd),
+ q(0099) => q(tai),
+ q(0100) => q(tbq),
+ q(0101) => q(trk),
+ q(0102) => q(tup),
+ q(0103) => q(tut),
+ q(0104) => q(tuw),
+ q(0105) => q(urj),
+ q(0106) => q(wak),
+ q(0107) => q(wen),
+ q(0108) => q(xgn),
+ q(0109) => q(xnd),
+ q(0110) => q(ypk),
+ q(0111) => q(zhx),
+ q(0112) => q(zle),
+ q(0113) => q(zls),
+ q(0114) => q(zlw),
+ q(0115) => q(znd),
+ },
+};
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam_Retired.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam_Retired.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangFam_Retired.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
+package Locale::Codes::LangFam_Retired;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'deprecate_codes' is run.
+# Generated on: Tue Sep 27 15:40:31 EDT 2011
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangFam_Retired - retired langfam codes for the Locale::Codes::LangFam module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::LangFam module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+use warnings;
+require 5.002;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Retired{'langfam'}{'alpha'}{'code'} = {
+};
+
+$Locale::Codes::Retired{'langfam'}{'alpha'}{'name'} = {
+};
+
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,96 @@
+package Locale::Codes::LangVar;
+# Copyright (c) 2011-2013 Sullivan Beck
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+require 5.006;
+use warnings;
+
+require Exporter;
+use Carp;
+use Locale::Codes;
+use Locale::Codes::Constants;
+use Locale::Codes::LangVar_Codes;
+use Locale::Codes::LangVar_Retired;
+
+#=======================================================================
+# Public Global Variables
+#=======================================================================
+
+our($VERSION, at ISA, at EXPORT, at EXPORT_OK);
+
+$VERSION='3.25';
+ at ISA = qw(Exporter);
+ at EXPORT = qw(code2langvar
+ langvar2code
+ all_langvar_codes
+ all_langvar_names
+ langvar_code2code
+ LOCALE_LANGVAR_ALPHA
+ );
+
+sub code2langvar {
+ return Locale::Codes::_code2name('langvar', at _);
+}
+
+sub langvar2code {
+ return Locale::Codes::_name2code('langvar', at _);
+}
+
+sub langvar_code2code {
+
+ return Locale::Codes::_code2code('langvar', at _);
+}
+
+sub all_langvar_codes {
+ return Locale::Codes::_all_codes('langvar', at _);
+}
+
+sub all_langvar_names {
+ return Locale::Codes::_all_names('langvar', at _);
+}
+
+sub rename_langvar {
+ return Locale::Codes::_rename('langvar', at _);
+}
+
+sub add_langvar {
+ return Locale::Codes::_add_code('langvar', at _);
+}
+
+sub delete_langvar {
+ return Locale::Codes::_delete_code('langvar', at _);
+}
+
+sub add_langvar_alias {
+ return Locale::Codes::_add_alias('langvar', at _);
+}
+
+sub delete_langvar_alias {
+ return Locale::Codes::_delete_alias('langvar', at _);
+}
+
+sub rename_langvar_code {
+ return Locale::Codes::_rename_code('langvar', at _);
+}
+
+sub add_langvar_code_alias {
+ return Locale::Codes::_add_code_alias('langvar', at _);
+}
+
+sub delete_langvar_code_alias {
+ return Locale::Codes::_delete_code_alias('langvar', at _);
+}
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,118 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangVar - standard codes for language variation identification
+
+=head1 SYNOPSIS
+
+ use Locale::Codes::LangVar;
+
+ $lvar = code2langvar('acm'); # $lvar gets 'Mesopotamian Arabic'
+ $code = langvar2code('Mesopotamian Arabic'); # $code gets 'acm'
+
+ @codes = all_langvar_codes();
+ @names = all_langvar_names();
+
+=head1 DESCRIPTION
+
+The C<Locale::Codes::LangVar> module provides access to standard codes
+used for identifying language variations, such as those as defined in
+the IANA language registry.
+
+Most of the routines take an optional additional argument which
+specifies the code set to use. If not specified, the default IANA
+language registry codes will be used.
+
+=head1 SUPPORTED CODE SETS
+
+There are several different code sets you can use for identifying
+language variations. A code set may be specified using either a name, or a
+constant that is automatically exported by this module.
+
+For example, the two are equivalent:
+
+ $lvar = code2langvar('en','alpha-2');
+ $lvar = code2langvar('en',LOCALE_CODE_ALPHA_2);
+
+The codesets currently supported are:
+
+=over 4
+
+=item B<alpha>
+
+This is the set of alphanumeric codes from the IANA
+language registry, such as 'arevela' for Eastern Armenian.
+
+This code set is identified with the symbol C<LOCALE_LANGVAR_ALPHA>.
+
+This is the default code set.
+
+=back
+
+=head1 ROUTINES
+
+=over 4
+
+=item B<code2langvar ( CODE [,CODESET] )>
+
+=item B<langvar2code ( NAME [,CODESET] )>
+
+=item B<langvar_code2code ( CODE ,CODESET ,CODESET2 )>
+
+=item B<all_langvar_codes ( [CODESET] )>
+
+=item B<all_langvar_names ( [CODESET] )>
+
+=item B<Locale::Codes::LangVar::rename_langvar ( CODE ,NEW_NAME [,CODESET] )>
+
+=item B<Locale::Codes::LangVar::add_langvar ( CODE ,NAME [,CODESET] )>
+
+=item B<Locale::Codes::LangVar::delete_langvar ( CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangVar::add_langvar_alias ( NAME ,NEW_NAME )>
+
+=item B<Locale::Codes::LangVar::delete_langvar_alias ( NAME )>
+
+=item B<Locale::Codes::LangVar::rename_langvar_code ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangVar::add_langvar_code_alias ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::LangVar::delete_langvar_code_alias ( CODE [,CODESET] )>
+
+These routines are all documented in the Locale::Codes::API man page.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item B<Locale::Codes>
+
+The Locale-Codes distribution.
+
+=item B<Locale::Codes::API>
+
+The list of functions supported by this module.
+
+=item B<http://www.iana.org/assignments/language-subtag-registry>
+
+The IANA language subtag registry.
+
+=back
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2011-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar_Codes.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar_Codes.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar_Codes.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,882 @@
+package Locale::Codes::LangVar_Codes;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'get_codes' is run.
+# Generated on: Wed Feb 27 10:04:34 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangVar_Codes - langvar codes for the Locale::Codes::LangVar module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::LangVar module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Data{'langvar'}{'id'} = '0061';
+
+$Locale::Codes::Data{'langvar'}{'id2names'} = {
+ q(0001) => [
+ q(Late Middle French (to 1606)),
+ ],
+ q(0002) => [
+ q(Early Modern French),
+ ],
+ q(0003) => [
+ q(Traditional German orthography),
+ ],
+ q(0004) => [
+ q("Academic" ("governmental") variant of Belarusian as),
+ q("Academic" ("governmental") variant of Belarusian as),
+ ],
+ q(0005) => [
+ q(Standardized Resian orthography),
+ ],
+ q(0006) => [
+ q(German orthography of 1996),
+ ],
+ q(0007) => [
+ q(ALA-LC Romanization, 1997 edition),
+ ],
+ q(0008) => [
+ q(Aluku dialect),
+ q(Boni dialect),
+ ],
+ q(0009) => [
+ q(Eastern Armenian),
+ ],
+ q(0010) => [
+ q(Western Armenian),
+ ],
+ q(0011) => [
+ q(Unified Turkic Latin Alphabet (Historical)),
+ ],
+ q(0012) => [
+ q(Buddhist Hybrid Sanskrit),
+ ],
+ q(0013) => [
+ q(Biscayan dialect of Basque),
+ ],
+ q(0014) => [
+ q(The San Giorgio dialect of Resian),
+ q(The Bila dialect of Resian),
+ ],
+ q(0015) => [
+ q(Slovene in Bohorič alphabet),
+ ],
+ q(0016) => [
+ q(Boontling),
+ ],
+ q(0017) => [
+ q(Slovene in Dajnko alphabet),
+ ],
+ q(0018) => [
+ q(Early Modern English (1500-1700)),
+ ],
+ q(0019) => [
+ q(International Phonetic Alphabet),
+ ],
+ q(0020) => [
+ q(Uralic Phonetic Alphabet),
+ ],
+ q(0021) => [
+ q(X-SAMPA transcription),
+ ],
+ q(0022) => [
+ q(Hepburn romanization),
+ ],
+ q(0023) => [
+ q(Norwegian in Hognorsk (High Norwegian) orthography),
+ ],
+ q(0024) => [
+ q(Epic Sanskrit),
+ ],
+ q(0025) => [
+ q(Jauer dialect of Romansh),
+ ],
+ q(0026) => [
+ q(Jyutping Cantonese Romanization),
+ ],
+ q(0027) => [
+ q(Common Cornish orthography of Revived Cornish),
+ ],
+ q(0028) => [
+ q(Standard Cornish orthography of Revived Cornish),
+ q(Kernowek Standard),
+ ],
+ q(0029) => [
+ q(Classical Sanskrit),
+ ],
+ q(0030) => [
+ q(The Lipovaz dialect of Resian),
+ q(The Lipovec dialect of Resian),
+ ],
+ q(0031) => [
+ q(Post-1917 Russian orthography),
+ ],
+ q(0032) => [
+ q(Slovene in Metelko alphabet),
+ ],
+ q(0033) => [
+ q(Monotonic Greek),
+ ],
+ q(0034) => [
+ q(Ndyuka dialect),
+ q(Aukan dialect),
+ ],
+ q(0035) => [
+ q(Natisone dialect),
+ q(Nadiza dialect),
+ ],
+ q(0036) => [
+ q(The Gniva dialect of Resian),
+ q(The Njiva dialect of Resian),
+ ],
+ q(0037) => [
+ q(Volapuk nulik),
+ q(Volapuk perevidol),
+ q(Volapuk nuladik),
+ q(de Jong's Volapuk),
+ q(New Volapuk),
+ q(Revised Volapuk),
+ q(Modern Volapuk),
+ ],
+ q(0038) => [
+ q(The Oseacco dialect of Resian),
+ q(The Osojane dialect of Resian),
+ ],
+ q(0039) => [
+ q(Pamaka dialect),
+ ],
+ q(0040) => [
+ q(Petrine orthography),
+ ],
+ q(0041) => [
+ q(Pinyin romanization),
+ ],
+ q(0042) => [
+ q(Polytonic Greek),
+ ],
+ q(0043) => [
+ q(Puter idiom of Romansh),
+ ],
+ q(0044) => [
+ q(Volapuk rigik),
+ q(Schleyer's Volapuk),
+ q(Original Volapuk),
+ q(Classic Volapuk),
+ ],
+ q(0045) => [
+ q(Resian),
+ q(Resianic),
+ q(Rezijan),
+ ],
+ q(0046) => [
+ q(Rumantsch Grischun),
+ ],
+ q(0047) => [
+ q(Scottish Standard English),
+ ],
+ q(0048) => [
+ q(Scouse),
+ ],
+ q(0049) => [
+ q(The Stolvizza dialect of Resian),
+ q(The Solbica dialect of Resian),
+ ],
+ q(0050) => [
+ q(Surmiran idiom of Romansh),
+ ],
+ q(0051) => [
+ q(Sursilvan idiom of Romansh),
+ ],
+ q(0052) => [
+ q(Sutsilvan idiom of Romansh),
+ ],
+ q(0053) => [
+ q(Belarusian in Taraskievica orthography),
+ ],
+ q(0054) => [
+ q(Unified Cornish orthography of Revived Cornish),
+ ],
+ q(0055) => [
+ q(Unified Cornish Revised orthography of Revived Cornish),
+ ],
+ q(0056) => [
+ q(Ulster dialect of Scots),
+ ],
+ q(0057) => [
+ q(Vedic Sanskrit),
+ ],
+ q(0058) => [
+ q(Valencian),
+ ],
+ q(0059) => [
+ q(Vallader idiom of Romansh),
+ ],
+ q(0060) => [
+ q(Wade-Giles romanization),
+ ],
+};
+
+$Locale::Codes::Data{'langvar'}{'alias2id'} = {
+ q("academic" ("governmental") variant of belarusian as) => [
+ q(0004),
+ q(0),
+ ],
+ q(ala-lc romanization, 1997 edition) => [
+ q(0007),
+ q(0),
+ ],
+ q(aluku dialect) => [
+ q(0008),
+ q(0),
+ ],
+ q(aukan dialect) => [
+ q(0034),
+ q(0),
+ ],
+ q(belarusian in taraskievica orthography) => [
+ q(0053),
+ q(0),
+ ],
+ q(biscayan dialect of basque) => [
+ q(0013),
+ q(0),
+ ],
+ q(boni dialect) => [
+ q(0008),
+ q(0),
+ ],
+ q(boontling) => [
+ q(0016),
+ q(0),
+ ],
+ q(buddhist hybrid sanskrit) => [
+ q(0012),
+ q(0),
+ ],
+ q(classic volapuk) => [
+ q(0044),
+ q(0),
+ ],
+ q(classical sanskrit) => [
+ q(0029),
+ q(0),
+ ],
+ q(common cornish orthography of revived cornish) => [
+ q(0027),
+ q(0),
+ ],
+ q(de jong's volapuk) => [
+ q(0037),
+ q(0),
+ ],
+ q(early modern english (1500-1700)) => [
+ q(0018),
+ q(0),
+ ],
+ q(early modern french) => [
+ q(0002),
+ q(0),
+ ],
+ q(eastern armenian) => [
+ q(0009),
+ q(0),
+ ],
+ q(epic sanskrit) => [
+ q(0024),
+ q(0),
+ ],
+ q(german orthography of 1996) => [
+ q(0006),
+ q(0),
+ ],
+ q(hepburn romanization) => [
+ q(0022),
+ q(0),
+ ],
+ q(international phonetic alphabet) => [
+ q(0019),
+ q(0),
+ ],
+ q(jauer dialect of romansh) => [
+ q(0025),
+ q(0),
+ ],
+ q(jyutping cantonese romanization) => [
+ q(0026),
+ q(0),
+ ],
+ q(kernowek standard) => [
+ q(0028),
+ q(0),
+ ],
+ q(late middle french (to 1606)) => [
+ q(0001),
+ q(0),
+ ],
+ q(modern volapuk) => [
+ q(0037),
+ q(0),
+ ],
+ q(monotonic greek) => [
+ q(0033),
+ q(0),
+ ],
+ q(nadiza dialect) => [
+ q(0035),
+ q(0),
+ ],
+ q(natisone dialect) => [
+ q(0035),
+ q(0),
+ ],
+ q(ndyuka dialect) => [
+ q(0034),
+ q(0),
+ ],
+ q(new volapuk) => [
+ q(0037),
+ q(0),
+ ],
+ q(norwegian in hognorsk (high norwegian) orthography) => [
+ q(0023),
+ q(0),
+ ],
+ q(original volapuk) => [
+ q(0044),
+ q(0),
+ ],
+ q(pamaka dialect) => [
+ q(0039),
+ q(0),
+ ],
+ q(petrine orthography) => [
+ q(0040),
+ q(0),
+ ],
+ q(pinyin romanization) => [
+ q(0041),
+ q(0),
+ ],
+ q(polytonic greek) => [
+ q(0042),
+ q(0),
+ ],
+ q(post-1917 russian orthography) => [
+ q(0031),
+ q(0),
+ ],
+ q(puter idiom of romansh) => [
+ q(0043),
+ q(0),
+ ],
+ q(resian) => [
+ q(0045),
+ q(0),
+ ],
+ q(resianic) => [
+ q(0045),
+ q(0),
+ ],
+ q(revised volapuk) => [
+ q(0037),
+ q(0),
+ ],
+ q(rezijan) => [
+ q(0045),
+ q(0),
+ ],
+ q(rumantsch grischun) => [
+ q(0046),
+ q(0),
+ ],
+ q(schleyer's volapuk) => [
+ q(0044),
+ q(0),
+ ],
+ q(scottish standard english) => [
+ q(0047),
+ q(0),
+ ],
+ q(scouse) => [
+ q(0048),
+ q(0),
+ ],
+ q(slovene in bohorič alphabet) => [
+ q(0015),
+ q(0),
+ ],
+ q(slovene in dajnko alphabet) => [
+ q(0017),
+ q(0),
+ ],
+ q(slovene in metelko alphabet) => [
+ q(0032),
+ q(0),
+ ],
+ q(standard cornish orthography of revived cornish) => [
+ q(0028),
+ q(0),
+ ],
+ q(standardized resian orthography) => [
+ q(0005),
+ q(0),
+ ],
+ q(surmiran idiom of romansh) => [
+ q(0050),
+ q(0),
+ ],
+ q(sursilvan idiom of romansh) => [
+ q(0051),
+ q(0),
+ ],
+ q(sutsilvan idiom of romansh) => [
+ q(0052),
+ q(0),
+ ],
+ q(the bila dialect of resian) => [
+ q(0014),
+ q(0),
+ ],
+ q(the gniva dialect of resian) => [
+ q(0036),
+ q(0),
+ ],
+ q(the lipovaz dialect of resian) => [
+ q(0030),
+ q(0),
+ ],
+ q(the lipovec dialect of resian) => [
+ q(0030),
+ q(0),
+ ],
+ q(the njiva dialect of resian) => [
+ q(0036),
+ q(0),
+ ],
+ q(the oseacco dialect of resian) => [
+ q(0038),
+ q(0),
+ ],
+ q(the osojane dialect of resian) => [
+ q(0038),
+ q(0),
+ ],
+ q(the san giorgio dialect of resian) => [
+ q(0014),
+ q(0),
+ ],
+ q(the solbica dialect of resian) => [
+ q(0049),
+ q(0),
+ ],
+ q(the stolvizza dialect of resian) => [
+ q(0049),
+ q(0),
+ ],
+ q(traditional german orthography) => [
+ q(0003),
+ q(0),
+ ],
+ q(ulster dialect of scots) => [
+ q(0056),
+ q(0),
+ ],
+ q(unified cornish orthography of revived cornish) => [
+ q(0054),
+ q(0),
+ ],
+ q(unified cornish revised orthography of revived cornish) => [
+ q(0055),
+ q(0),
+ ],
+ q(unified turkic latin alphabet (historical)) => [
+ q(0011),
+ q(0),
+ ],
+ q(uralic phonetic alphabet) => [
+ q(0020),
+ q(0),
+ ],
+ q(valencian) => [
+ q(0058),
+ q(0),
+ ],
+ q(vallader idiom of romansh) => [
+ q(0059),
+ q(0),
+ ],
+ q(vedic sanskrit) => [
+ q(0057),
+ q(0),
+ ],
+ q(volapuk nuladik) => [
+ q(0037),
+ q(0),
+ ],
+ q(volapuk nulik) => [
+ q(0037),
+ q(0),
+ ],
+ q(volapuk perevidol) => [
+ q(0037),
+ q(0),
+ ],
+ q(volapuk rigik) => [
+ q(0044),
+ q(0),
+ ],
+ q(wade-giles romanization) => [
+ q(0060),
+ q(0),
+ ],
+ q(western armenian) => [
+ q(0010),
+ q(0),
+ ],
+ q(x-sampa transcription) => [
+ q(0021),
+ q(0),
+ ],
+};
+
+$Locale::Codes::Data{'langvar'}{'code2id'} = {
+ q(alpha) => {
+ q(1606nict) => [
+ q(0001),
+ q(0),
+ ],
+ q(1694acad) => [
+ q(0002),
+ q(0),
+ ],
+ q(1901) => [
+ q(0003),
+ q(0),
+ ],
+ q(1959acad) => [
+ q(0004),
+ q(0),
+ ],
+ q(1994) => [
+ q(0005),
+ q(0),
+ ],
+ q(1996) => [
+ q(0006),
+ q(0),
+ ],
+ q(alalc97) => [
+ q(0007),
+ q(0),
+ ],
+ q(aluku) => [
+ q(0008),
+ q(0),
+ ],
+ q(arevela) => [
+ q(0009),
+ q(0),
+ ],
+ q(arevmda) => [
+ q(0010),
+ q(0),
+ ],
+ q(baku1926) => [
+ q(0011),
+ q(0),
+ ],
+ q(bauddha) => [
+ q(0012),
+ q(0),
+ ],
+ q(biscayan) => [
+ q(0013),
+ q(0),
+ ],
+ q(biske) => [
+ q(0014),
+ q(0),
+ ],
+ q(bohoric) => [
+ q(0015),
+ q(0),
+ ],
+ q(boont) => [
+ q(0016),
+ q(0),
+ ],
+ q(dajnko) => [
+ q(0017),
+ q(0),
+ ],
+ q(emodeng) => [
+ q(0018),
+ q(0),
+ ],
+ q(fonipa) => [
+ q(0019),
+ q(0),
+ ],
+ q(fonupa) => [
+ q(0020),
+ q(0),
+ ],
+ q(fonxsamp) => [
+ q(0021),
+ q(0),
+ ],
+ q(hepburn) => [
+ q(0022),
+ q(0),
+ ],
+ q(hognorsk) => [
+ q(0023),
+ q(0),
+ ],
+ q(itihasa) => [
+ q(0024),
+ q(0),
+ ],
+ q(jauer) => [
+ q(0025),
+ q(0),
+ ],
+ q(jyutping) => [
+ q(0026),
+ q(0),
+ ],
+ q(kkcor) => [
+ q(0027),
+ q(0),
+ ],
+ q(kscor) => [
+ q(0028),
+ q(0),
+ ],
+ q(laukika) => [
+ q(0029),
+ q(0),
+ ],
+ q(lipaw) => [
+ q(0030),
+ q(0),
+ ],
+ q(luna1918) => [
+ q(0031),
+ q(0),
+ ],
+ q(metelko) => [
+ q(0032),
+ q(0),
+ ],
+ q(monoton) => [
+ q(0033),
+ q(0),
+ ],
+ q(ndyuka) => [
+ q(0034),
+ q(0),
+ ],
+ q(nedis) => [
+ q(0035),
+ q(0),
+ ],
+ q(njiva) => [
+ q(0036),
+ q(0),
+ ],
+ q(nulik) => [
+ q(0037),
+ q(0),
+ ],
+ q(osojs) => [
+ q(0038),
+ q(0),
+ ],
+ q(pamaka) => [
+ q(0039),
+ q(0),
+ ],
+ q(petr1708) => [
+ q(0040),
+ q(0),
+ ],
+ q(pinyin) => [
+ q(0041),
+ q(0),
+ ],
+ q(polyton) => [
+ q(0042),
+ q(0),
+ ],
+ q(puter) => [
+ q(0043),
+ q(0),
+ ],
+ q(rigik) => [
+ q(0044),
+ q(0),
+ ],
+ q(rozaj) => [
+ q(0045),
+ q(0),
+ ],
+ q(rumgr) => [
+ q(0046),
+ q(0),
+ ],
+ q(scotland) => [
+ q(0047),
+ q(0),
+ ],
+ q(scouse) => [
+ q(0048),
+ q(0),
+ ],
+ q(solba) => [
+ q(0049),
+ q(0),
+ ],
+ q(surmiran) => [
+ q(0050),
+ q(0),
+ ],
+ q(sursilv) => [
+ q(0051),
+ q(0),
+ ],
+ q(sutsilv) => [
+ q(0052),
+ q(0),
+ ],
+ q(tarask) => [
+ q(0053),
+ q(0),
+ ],
+ q(uccor) => [
+ q(0054),
+ q(0),
+ ],
+ q(ucrcor) => [
+ q(0055),
+ q(0),
+ ],
+ q(ulster) => [
+ q(0056),
+ q(0),
+ ],
+ q(vaidika) => [
+ q(0057),
+ q(0),
+ ],
+ q(valencia) => [
+ q(0058),
+ q(0),
+ ],
+ q(vallader) => [
+ q(0059),
+ q(0),
+ ],
+ q(wadegile) => [
+ q(0060),
+ q(0),
+ ],
+ },
+};
+
+$Locale::Codes::Data{'langvar'}{'id2code'} = {
+ q(alpha) => {
+ q(0001) => q(1606nict),
+ q(0002) => q(1694acad),
+ q(0003) => q(1901),
+ q(0004) => q(1959acad),
+ q(0005) => q(1994),
+ q(0006) => q(1996),
+ q(0007) => q(alalc97),
+ q(0008) => q(aluku),
+ q(0009) => q(arevela),
+ q(0010) => q(arevmda),
+ q(0011) => q(baku1926),
+ q(0012) => q(bauddha),
+ q(0013) => q(biscayan),
+ q(0014) => q(biske),
+ q(0015) => q(bohoric),
+ q(0016) => q(boont),
+ q(0017) => q(dajnko),
+ q(0018) => q(emodeng),
+ q(0019) => q(fonipa),
+ q(0020) => q(fonupa),
+ q(0021) => q(fonxsamp),
+ q(0022) => q(hepburn),
+ q(0023) => q(hognorsk),
+ q(0024) => q(itihasa),
+ q(0025) => q(jauer),
+ q(0026) => q(jyutping),
+ q(0027) => q(kkcor),
+ q(0028) => q(kscor),
+ q(0029) => q(laukika),
+ q(0030) => q(lipaw),
+ q(0031) => q(luna1918),
+ q(0032) => q(metelko),
+ q(0033) => q(monoton),
+ q(0034) => q(ndyuka),
+ q(0035) => q(nedis),
+ q(0036) => q(njiva),
+ q(0037) => q(nulik),
+ q(0038) => q(osojs),
+ q(0039) => q(pamaka),
+ q(0040) => q(petr1708),
+ q(0041) => q(pinyin),
+ q(0042) => q(polyton),
+ q(0043) => q(puter),
+ q(0044) => q(rigik),
+ q(0045) => q(rozaj),
+ q(0046) => q(rumgr),
+ q(0047) => q(scotland),
+ q(0048) => q(scouse),
+ q(0049) => q(solba),
+ q(0050) => q(surmiran),
+ q(0051) => q(sursilv),
+ q(0052) => q(sutsilv),
+ q(0053) => q(tarask),
+ q(0054) => q(uccor),
+ q(0055) => q(ucrcor),
+ q(0056) => q(ulster),
+ q(0057) => q(vaidika),
+ q(0058) => q(valencia),
+ q(0059) => q(vallader),
+ q(0060) => q(wadegile),
+ },
+};
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar_Retired.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar_Retired.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/LangVar_Retired.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,50 @@
+package Locale::Codes::LangVar_Retired;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'deprecate_codes' is run.
+# Generated on: Wed Feb 27 10:06:46 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::LangVar_Retired - retired langvar codes for the Locale::Codes::LangVar module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::LangVar module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Retired{'langvar'}{'alpha'}{'code'} = {
+};
+
+$Locale::Codes::Retired{'langvar'}{'alpha'}{'name'} = {
+};
+
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,137 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::Language - standard codes for language identification
+
+=head1 SYNOPSIS
+
+ use Locale::Codes::Language;
+
+ $lang = code2language('en'); # $lang gets 'English'
+ $code = language2code('French'); # $code gets 'fr'
+
+ @codes = all_language_codes();
+ @names = all_language_names();
+
+=head1 DESCRIPTION
+
+The C<Locale::Codes::Language> module provides access to standard codes used
+for identifying languages, such as those as defined in ISO 639.
+
+Most of the routines take an optional additional argument which
+specifies the code set to use. If not specified, the default ISO
+639 two-letter codes will be used.
+
+=head1 SUPPORTED CODE SETS
+
+There are several different code sets you can use for identifying
+languages. A code set may be specified using either a name, or a
+constant that is automatically exported by this module.
+
+For example, the two are equivalent:
+
+ $lang = code2language('en','alpha-2');
+ $lang = code2language('en',LOCALE_CODE_ALPHA_2);
+
+The codesets currently supported are:
+
+=over 4
+
+=item B<alpha-2, LOCALE_LANG_ALPHA_2>
+
+This is the set of two-letter (lowercase) codes from ISO 639-1, such
+as 'he' for Hebrew. It also includes additions to this set included
+in the IANA language registry.
+
+This is the default code set.
+
+=item B<alpha-3, LOCALE_LANG_ALPHA_3>
+
+This is the set of three-letter (lowercase) bibliographic codes from
+ISO 639-2 and 639-5, such as 'heb' for Hebrew. It also includes
+additions to this set included in the IANA language registry.
+
+=item B<term, LOCALE_LANG_TERM>
+
+This is the set of three-letter (lowercase) terminologic codes from
+ISO 639.
+
+=back
+
+=head1 ROUTINES
+
+=over 4
+
+=item B<code2language ( CODE [,CODESET] )>
+
+=item B<language2code ( NAME [,CODESET] )>
+
+=item B<language_code2code ( CODE ,CODESET ,CODESET2 )>
+
+=item B<all_language_codes ( [CODESET] )>
+
+=item B<all_language_names ( [CODESET] )>
+
+=item B<Locale::Codes::Language::rename_language ( CODE ,NEW_NAME [,CODESET] )>
+
+=item B<Locale::Codes::Language::add_language ( CODE ,NAME [,CODESET] )>
+
+=item B<Locale::Codes::Language::delete_language ( CODE [,CODESET] )>
+
+=item B<Locale::Codes::Language::add_language_alias ( NAME ,NEW_NAME )>
+
+=item B<Locale::Codes::Language::delete_language_alias ( NAME )>
+
+=item B<Locale::Codes::Language::rename_language_code ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::Language::add_language_code_alias ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::Language::delete_language_code_alias ( CODE [,CODESET] )>
+
+These routines are all documented in the Locale::Codes::API man page.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item B<Locale::Codes>
+
+The Locale-Codes distribution.
+
+=item B<Locale::Codes::API>
+
+The list of functions supported by this module.
+
+=item B<http://www.loc.gov/standards/iso639-2/>
+
+Source of the ISO 639-2 codes.
+
+=item B<http://www.loc.gov/standards/iso639-5/>
+
+Source of the ISO 639-5 codes.
+
+=item B<http://www.iana.org/assignments/language-subtag-registry>
+
+The IANA language subtag registry.
+
+=back
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,97190 @@
+package Locale::Codes::Language_Codes;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'get_codes' is run.
+# Generated on: Wed Feb 27 10:04:21 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::Language_Codes - language codes for the Locale::Codes::Language module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::Language module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Data{'language'}{'id'} = '7887';
+
+$Locale::Codes::Data{'language'}{'id2names'} = {
+ q(0001) => [
+ q(Afar),
+ ],
+ q(0002) => [
+ q(Abkhazian),
+ ],
+ q(0003) => [
+ q(Achinese),
+ ],
+ q(0004) => [
+ q(Acoli),
+ ],
+ q(0005) => [
+ q(Adangme),
+ ],
+ q(0006) => [
+ q(Adyghe),
+ q(Adygei),
+ ],
+ q(0007) => [
+ q(Afro-Asiatic languages),
+ ],
+ q(0008) => [
+ q(Afrihili),
+ ],
+ q(0009) => [
+ q(Afrikaans),
+ ],
+ q(0010) => [
+ q(Ainu),
+ q(Ainu (Japan)),
+ ],
+ q(0011) => [
+ q(Akan),
+ ],
+ q(0012) => [
+ q(Akkadian),
+ ],
+ q(0013) => [
+ q(Albanian),
+ ],
+ q(0014) => [
+ q(Aleut),
+ ],
+ q(0015) => [
+ q(Algonquian languages),
+ ],
+ q(0016) => [
+ q(Southern Altai),
+ ],
+ q(0017) => [
+ q(Amharic),
+ ],
+ q(0018) => [
+ q(English, Old (ca.450-1100)),
+ q(Old English (ca. 450-1100)),
+ ],
+ q(0019) => [
+ q(Angika),
+ ],
+ q(0020) => [
+ q(Apache languages),
+ ],
+ q(0021) => [
+ q(Arabic),
+ ],
+ q(0022) => [
+ q(Official Aramaic (700-300 BCE)),
+ q(Imperial Aramaic (700-300 BCE)),
+ ],
+ q(0023) => [
+ q(Aragonese),
+ ],
+ q(0024) => [
+ q(Armenian),
+ ],
+ q(0025) => [
+ q(Mapudungun),
+ q(Mapuche),
+ ],
+ q(0026) => [
+ q(Arapaho),
+ ],
+ q(0027) => [
+ q(Artificial languages),
+ ],
+ q(0028) => [
+ q(Arawak),
+ ],
+ q(0029) => [
+ q(Assamese),
+ ],
+ q(0030) => [
+ q(Asturian),
+ q(Bable),
+ q(Leonese),
+ q(Asturleonese),
+ ],
+ q(0031) => [
+ q(Athapascan languages),
+ ],
+ q(0032) => [
+ q(Australian languages),
+ ],
+ q(0033) => [
+ q(Avaric),
+ ],
+ q(0034) => [
+ q(Avestan),
+ ],
+ q(0035) => [
+ q(Awadhi),
+ ],
+ q(0036) => [
+ q(Aymara),
+ ],
+ q(0037) => [
+ q(Azerbaijani),
+ ],
+ q(0038) => [
+ q(Banda languages),
+ ],
+ q(0039) => [
+ q(Bamileke languages),
+ ],
+ q(0040) => [
+ q(Bashkir),
+ ],
+ q(0041) => [
+ q(Baluchi),
+ ],
+ q(0042) => [
+ q(Bambara),
+ ],
+ q(0043) => [
+ q(Balinese),
+ ],
+ q(0044) => [
+ q(Basque),
+ ],
+ q(0045) => [
+ q(Basa),
+ q(Basa (Cameroon)),
+ ],
+ q(0046) => [
+ q(Baltic languages),
+ ],
+ q(0047) => [
+ q(Beja),
+ q(Bedawiyet),
+ ],
+ q(0048) => [
+ q(Belarusian),
+ ],
+ q(0049) => [
+ q(Bemba),
+ q(Bemba (Zambia)),
+ ],
+ q(0050) => [
+ q(Bengali),
+ ],
+ q(0051) => [
+ q(Berber languages),
+ ],
+ q(0052) => [
+ q(Bhojpuri),
+ ],
+ q(0053) => [
+ q(Bihari languages),
+ ],
+ q(0054) => [
+ q(Bikol),
+ ],
+ q(0055) => [
+ q(Bini),
+ q(Edo),
+ ],
+ q(0056) => [
+ q(Bislama),
+ ],
+ q(0057) => [
+ q(Siksika),
+ ],
+ q(0058) => [
+ q(Bantu (Other)),
+ q(Bantu languages),
+ ],
+ q(0059) => [
+ q(Bosnian),
+ ],
+ q(0060) => [
+ q(Braj),
+ ],
+ q(0061) => [
+ q(Breton),
+ ],
+ q(0062) => [
+ q(Batak languages),
+ ],
+ q(0063) => [
+ q(Buriat),
+ ],
+ q(0064) => [
+ q(Buginese),
+ ],
+ q(0065) => [
+ q(Bulgarian),
+ ],
+ q(0066) => [
+ q(Burmese),
+ ],
+ q(0067) => [
+ q(Blin),
+ q(Bilin),
+ ],
+ q(0068) => [
+ q(Caddo),
+ ],
+ q(0069) => [
+ q(Central American Indian languages),
+ ],
+ q(0070) => [
+ q(Galibi Carib),
+ ],
+ q(0071) => [
+ q(Catalan),
+ q(Valencian),
+ ],
+ q(0072) => [
+ q(Caucasian languages),
+ ],
+ q(0073) => [
+ q(Cebuano),
+ ],
+ q(0074) => [
+ q(Celtic languages),
+ ],
+ q(0075) => [
+ q(Chamorro),
+ ],
+ q(0076) => [
+ q(Chibcha),
+ ],
+ q(0077) => [
+ q(Chechen),
+ ],
+ q(0078) => [
+ q(Chagatai),
+ ],
+ q(0079) => [
+ q(Chinese),
+ ],
+ q(0080) => [
+ q(Chuukese),
+ ],
+ q(0081) => [
+ q(Mari),
+ q(Mari (Russia)),
+ ],
+ q(0082) => [
+ q(Chinook jargon),
+ ],
+ q(0083) => [
+ q(Choctaw),
+ ],
+ q(0084) => [
+ q(Chipewyan),
+ q(Dene Suline),
+ ],
+ q(0085) => [
+ q(Cherokee),
+ ],
+ q(0086) => [
+ q(Church Slavic),
+ q(Old Slavonic),
+ q(Church Slavonic),
+ q(Old Bulgarian),
+ q(Old Church Slavonic),
+ ],
+ q(0087) => [
+ q(Chuvash),
+ ],
+ q(0088) => [
+ q(Cheyenne),
+ ],
+ q(0089) => [
+ q(Chamic languages),
+ ],
+ q(0090) => [
+ q(Coptic),
+ ],
+ q(0091) => [
+ q(Cornish),
+ ],
+ q(0092) => [
+ q(Corsican),
+ ],
+ q(0093) => [
+ q(Creoles and pidgins, English based),
+ q(Creoles and pidgins, English-based),
+ q(English-based creoles and pidgins),
+ ],
+ q(0094) => [
+ q(Creoles and pidgins, French-based ),
+ q(Creoles and pidgins, French-based),
+ q(French-based creoles and pidgins),
+ ],
+ q(0095) => [
+ q(Creoles and pidgins, Portuguese-based ),
+ q(Creoles and pidgins, Portuguese-based),
+ q(Portuguese-based creoles and pidgins),
+ ],
+ q(0096) => [
+ q(Cree),
+ ],
+ q(0097) => [
+ q(Crimean Tatar),
+ q(Crimean Turkish),
+ ],
+ q(0098) => [
+ q(Creoles and pidgins ),
+ q(Creoles and pidgins),
+ ],
+ q(0099) => [
+ q(Kashubian),
+ ],
+ q(0100) => [
+ q(Cushitic languages),
+ ],
+ q(0101) => [
+ q(Czech),
+ ],
+ q(0102) => [
+ q(Dakota),
+ ],
+ q(0103) => [
+ q(Danish),
+ ],
+ q(0104) => [
+ q(Dargwa),
+ ],
+ q(0105) => [
+ q(Land Dayak languages),
+ ],
+ q(0106) => [
+ q(Delaware),
+ ],
+ q(0107) => [
+ q(Slave (Athapascan)),
+ ],
+ q(0108) => [
+ q(Dogrib),
+ ],
+ q(0109) => [
+ q(Dinka),
+ ],
+ q(0110) => [
+ q(Divehi),
+ q(Dhivehi),
+ q(Maldivian),
+ ],
+ q(0111) => [
+ q(Dogri),
+ q(Dogri (macrolanguage)),
+ ],
+ q(0112) => [
+ q(Dravidian languages),
+ ],
+ q(0113) => [
+ q(Lower Sorbian),
+ ],
+ q(0114) => [
+ q(Duala),
+ ],
+ q(0115) => [
+ q(Dutch, Middle (ca.1050-1350)),
+ q(Middle Dutch (ca. 1050-1350)),
+ ],
+ q(0116) => [
+ q(Dutch),
+ q(Flemish),
+ ],
+ q(0117) => [
+ q(Dyula),
+ ],
+ q(0118) => [
+ q(Dzongkha),
+ ],
+ q(0119) => [
+ q(Efik),
+ ],
+ q(0120) => [
+ q(Egyptian (Ancient)),
+ ],
+ q(0121) => [
+ q(Ekajuk),
+ ],
+ q(0122) => [
+ q(Elamite),
+ ],
+ q(0123) => [
+ q(English),
+ ],
+ q(0124) => [
+ q(English, Middle (1100-1500)),
+ q(Middle English (1100-1500)),
+ ],
+ q(0125) => [
+ q(Esperanto),
+ ],
+ q(0126) => [
+ q(Estonian),
+ ],
+ q(0127) => [
+ q(Ewe),
+ ],
+ q(0128) => [
+ q(Ewondo),
+ ],
+ q(0129) => [
+ q(Fang),
+ q(Fang (Equatorial Guinea)),
+ ],
+ q(0130) => [
+ q(Faroese),
+ ],
+ q(0131) => [
+ q(Fanti),
+ ],
+ q(0132) => [
+ q(Fijian),
+ ],
+ q(0133) => [
+ q(Filipino),
+ q(Pilipino),
+ ],
+ q(0134) => [
+ q(Finnish),
+ ],
+ q(0135) => [
+ q(Finno-Ugrian languages),
+ ],
+ q(0136) => [
+ q(Fon),
+ ],
+ q(0137) => [
+ q(French),
+ ],
+ q(0138) => [
+ q(French, Middle (ca.1400-1600)),
+ q(Middle French (ca. 1400-1600)),
+ ],
+ q(0139) => [
+ q(French, Old (842-ca.1400)),
+ q(Old French (842-ca. 1400)),
+ ],
+ q(0140) => [
+ q(Northern Frisian),
+ ],
+ q(0141) => [
+ q(Eastern Frisian),
+ ],
+ q(0142) => [
+ q(Western Frisian),
+ ],
+ q(0143) => [
+ q(Fulah),
+ ],
+ q(0144) => [
+ q(Friulian),
+ ],
+ q(0145) => [
+ q(Ga),
+ ],
+ q(0146) => [
+ q(Gayo),
+ ],
+ q(0147) => [
+ q(Gbaya),
+ q(Gbaya (Central African Republic)),
+ ],
+ q(0148) => [
+ q(Germanic languages),
+ ],
+ q(0149) => [
+ q(Georgian),
+ ],
+ q(0150) => [
+ q(German),
+ ],
+ q(0151) => [
+ q(Geez),
+ ],
+ q(0152) => [
+ q(Gilbertese),
+ ],
+ q(0153) => [
+ q(Gaelic),
+ q(Scottish Gaelic),
+ ],
+ q(0154) => [
+ q(Irish),
+ ],
+ q(0155) => [
+ q(Galician),
+ ],
+ q(0156) => [
+ q(Manx),
+ ],
+ q(0157) => [
+ q(German, Middle High (ca.1050-1500)),
+ q(Middle High German (ca. 1050-1500)),
+ ],
+ q(0158) => [
+ q(German, Old High (ca.750-1050)),
+ q(Old High German (ca. 750-1050)),
+ ],
+ q(0159) => [
+ q(Gondi),
+ ],
+ q(0160) => [
+ q(Gorontalo),
+ ],
+ q(0161) => [
+ q(Gothic),
+ ],
+ q(0162) => [
+ q(Grebo),
+ ],
+ q(0163) => [
+ q(Greek, Ancient (to 1453)),
+ q(Ancient Greek (to 1453)),
+ ],
+ q(0164) => [
+ q(Greek, Modern (1453-)),
+ q(Modern Greek (1453-)),
+ q(Greek),
+ ],
+ q(0165) => [
+ q(Guarani),
+ ],
+ q(0166) => [
+ q(Swiss German),
+ q(Alemannic),
+ q(Alsatian),
+ ],
+ q(0167) => [
+ q(Gujarati),
+ ],
+ q(0168) => [
+ q(Gwich'in),
+ ],
+ q(0169) => [
+ q(Haida),
+ ],
+ q(0170) => [
+ q(Haitian),
+ q(Haitian Creole),
+ ],
+ q(0171) => [
+ q(Hausa),
+ ],
+ q(0172) => [
+ q(Hawaiian),
+ ],
+ q(0173) => [
+ q(Hebrew),
+ ],
+ q(0174) => [
+ q(Herero),
+ ],
+ q(0175) => [
+ q(Hiligaynon),
+ ],
+ q(0176) => [
+ q(Himachali languages),
+ q(Western Pahari languages),
+ ],
+ q(0177) => [
+ q(Hindi),
+ ],
+ q(0178) => [
+ q(Hittite),
+ ],
+ q(0179) => [
+ q(Hmong),
+ q(Mong),
+ ],
+ q(0180) => [
+ q(Hiri Motu),
+ ],
+ q(0181) => [
+ q(Croatian),
+ ],
+ q(0182) => [
+ q(Upper Sorbian),
+ ],
+ q(0183) => [
+ q(Hungarian),
+ ],
+ q(0184) => [
+ q(Hupa),
+ ],
+ q(0185) => [
+ q(Iban),
+ ],
+ q(0186) => [
+ q(Igbo),
+ ],
+ q(0187) => [
+ q(Icelandic),
+ ],
+ q(0188) => [
+ q(Ido),
+ ],
+ q(0189) => [
+ q(Sichuan Yi),
+ q(Nuosu),
+ ],
+ q(0190) => [
+ q(Ijo languages),
+ ],
+ q(0191) => [
+ q(Inuktitut),
+ ],
+ q(0192) => [
+ q(Interlingue),
+ q(Occidental),
+ ],
+ q(0193) => [
+ q(Iloko),
+ ],
+ q(0194) => [
+ q(Interlingua (International Auxiliary Language Association)),
+ ],
+ q(0195) => [
+ q(Indic languages),
+ ],
+ q(0196) => [
+ q(Indonesian),
+ ],
+ q(0197) => [
+ q(Indo-European languages),
+ ],
+ q(0198) => [
+ q(Ingush),
+ ],
+ q(0199) => [
+ q(Inupiaq),
+ ],
+ q(0200) => [
+ q(Iranian languages),
+ ],
+ q(0201) => [
+ q(Iroquoian languages),
+ ],
+ q(0202) => [
+ q(Italian),
+ ],
+ q(0203) => [
+ q(Javanese),
+ ],
+ q(0204) => [
+ q(Lojban),
+ ],
+ q(0205) => [
+ q(Japanese),
+ ],
+ q(0206) => [
+ q(Judeo-Persian),
+ ],
+ q(0207) => [
+ q(Judeo-Arabic),
+ ],
+ q(0208) => [
+ q(Kara-Kalpak),
+ ],
+ q(0209) => [
+ q(Kabyle),
+ ],
+ q(0210) => [
+ q(Kachin),
+ q(Jingpho),
+ ],
+ q(0211) => [
+ q(Kalaallisut),
+ q(Greenlandic),
+ ],
+ q(0212) => [
+ q(Kamba),
+ q(Kamba (Kenya)),
+ ],
+ q(0213) => [
+ q(Kannada),
+ ],
+ q(0214) => [
+ q(Karen languages),
+ ],
+ q(0215) => [
+ q(Kashmiri),
+ ],
+ q(0216) => [
+ q(Kanuri),
+ ],
+ q(0217) => [
+ q(Kawi),
+ ],
+ q(0218) => [
+ q(Kazakh),
+ ],
+ q(0219) => [
+ q(Kabardian),
+ ],
+ q(0220) => [
+ q(Khasi),
+ ],
+ q(0221) => [
+ q(Khoisan languages),
+ ],
+ q(0222) => [
+ q(Central Khmer),
+ ],
+ q(0223) => [
+ q(Khotanese),
+ q(Sakan),
+ ],
+ q(0224) => [
+ q(Kikuyu),
+ q(Gikuyu),
+ ],
+ q(0225) => [
+ q(Kinyarwanda),
+ ],
+ q(0226) => [
+ q(Kirghiz),
+ q(Kyrgyz),
+ ],
+ q(0227) => [
+ q(Kimbundu),
+ ],
+ q(0228) => [
+ q(Konkani),
+ q(Konkani (macrolanguage)),
+ ],
+ q(0229) => [
+ q(Komi),
+ ],
+ q(0230) => [
+ q(Kongo),
+ ],
+ q(0231) => [
+ q(Korean),
+ ],
+ q(0232) => [
+ q(Kosraean),
+ ],
+ q(0233) => [
+ q(Kpelle),
+ ],
+ q(0234) => [
+ q(Karachay-Balkar),
+ ],
+ q(0235) => [
+ q(Karelian),
+ ],
+ q(0236) => [
+ q(Kru languages),
+ ],
+ q(0237) => [
+ q(Kurukh),
+ ],
+ q(0238) => [
+ q(Kuanyama),
+ q(Kwanyama),
+ ],
+ q(0239) => [
+ q(Kumyk),
+ ],
+ q(0240) => [
+ q(Kurdish),
+ ],
+ q(0241) => [
+ q(Kutenai),
+ ],
+ q(0242) => [
+ q(Ladino),
+ ],
+ q(0243) => [
+ q(Lahnda),
+ ],
+ q(0244) => [
+ q(Lamba),
+ ],
+ q(0245) => [
+ q(Lao),
+ ],
+ q(0246) => [
+ q(Latin),
+ ],
+ q(0247) => [
+ q(Latvian),
+ ],
+ q(0248) => [
+ q(Lezghian),
+ ],
+ q(0249) => [
+ q(Limburgan),
+ q(Limburger),
+ q(Limburgish),
+ ],
+ q(0250) => [
+ q(Lingala),
+ ],
+ q(0251) => [
+ q(Lithuanian),
+ ],
+ q(0252) => [
+ q(Mongo),
+ ],
+ q(0253) => [
+ q(Lozi),
+ ],
+ q(0254) => [
+ q(Luxembourgish),
+ q(Letzeburgesch),
+ ],
+ q(0255) => [
+ q(Luba-Lulua),
+ ],
+ q(0256) => [
+ q(Luba-Katanga),
+ ],
+ q(0257) => [
+ q(Ganda),
+ ],
+ q(0258) => [
+ q(Luiseno),
+ ],
+ q(0259) => [
+ q(Lunda),
+ ],
+ q(0260) => [
+ q(Luo (Kenya and Tanzania)),
+ q(Dholuo),
+ ],
+ q(0261) => [
+ q(Lushai),
+ ],
+ q(0262) => [
+ q(Macedonian),
+ ],
+ q(0263) => [
+ q(Madurese),
+ ],
+ q(0264) => [
+ q(Magahi),
+ ],
+ q(0265) => [
+ q(Marshallese),
+ ],
+ q(0266) => [
+ q(Maithili),
+ ],
+ q(0267) => [
+ q(Makasar),
+ ],
+ q(0268) => [
+ q(Malayalam),
+ ],
+ q(0269) => [
+ q(Mandingo),
+ ],
+ q(0270) => [
+ q(Maori),
+ ],
+ q(0271) => [
+ q(Austronesian languages),
+ ],
+ q(0272) => [
+ q(Marathi),
+ ],
+ q(0273) => [
+ q(Masai),
+ ],
+ q(0274) => [
+ q(Malay),
+ q(Malay (macrolanguage)),
+ ],
+ q(0275) => [
+ q(Moksha),
+ ],
+ q(0276) => [
+ q(Mandar),
+ ],
+ q(0277) => [
+ q(Mende),
+ q(Mende (Sierra Leone)),
+ ],
+ q(0278) => [
+ q(Irish, Middle (900-1200)),
+ q(Middle Irish (900-1200)),
+ ],
+ q(0279) => [
+ q(Mi'kmaq),
+ q(Micmac),
+ ],
+ q(0280) => [
+ q(Minangkabau),
+ ],
+ q(0281) => [
+ q(Uncoded languages),
+ ],
+ q(0282) => [
+ q(Mon-Khmer languages),
+ ],
+ q(0283) => [
+ q(Malagasy),
+ ],
+ q(0284) => [
+ q(Maltese),
+ ],
+ q(0285) => [
+ q(Manchu),
+ ],
+ q(0286) => [
+ q(Manipuri),
+ ],
+ q(0287) => [
+ q(Manobo languages),
+ ],
+ q(0288) => [
+ q(Mohawk),
+ ],
+ q(0289) => [
+ q(Mongolian),
+ ],
+ q(0290) => [
+ q(Mossi),
+ ],
+ q(0291) => [
+ q(Multiple languages),
+ ],
+ q(0292) => [
+ q(Munda languages),
+ ],
+ q(0293) => [
+ q(Creek),
+ ],
+ q(0294) => [
+ q(Mirandese),
+ ],
+ q(0295) => [
+ q(Marwari),
+ ],
+ q(0296) => [
+ q(Mayan languages),
+ ],
+ q(0297) => [
+ q(Erzya),
+ ],
+ q(0298) => [
+ q(Nahuatl languages),
+ ],
+ q(0299) => [
+ q(North American Indian languages),
+ ],
+ q(0300) => [
+ q(Neapolitan),
+ ],
+ q(0301) => [
+ q(Nauru),
+ ],
+ q(0302) => [
+ q(Navajo),
+ q(Navaho),
+ ],
+ q(0303) => [
+ q(Ndebele, South),
+ q(South Ndebele),
+ ],
+ q(0304) => [
+ q(Ndebele, North),
+ q(North Ndebele),
+ ],
+ q(0305) => [
+ q(Ndonga),
+ ],
+ q(0306) => [
+ q(Low German),
+ q(Low Saxon),
+ q(German, Low),
+ q(Saxon, Low),
+ ],
+ q(0307) => [
+ q(Nepali),
+ q(Nepali (macrolanguage)),
+ ],
+ q(0308) => [
+ q(Nepal Bhasa),
+ q(Newari),
+ ],
+ q(0309) => [
+ q(Nias),
+ ],
+ q(0310) => [
+ q(Niger-Kordofanian languages),
+ ],
+ q(0311) => [
+ q(Niuean),
+ ],
+ q(0312) => [
+ q(Norwegian Nynorsk),
+ q(Nynorsk, Norwegian),
+ ],
+ q(0313) => [
+ q(Bokmal, Norwegian),
+ q(Norwegian Bokmal),
+ ],
+ q(0314) => [
+ q(Nogai),
+ ],
+ q(0315) => [
+ q(Norse, Old),
+ q(Old Norse),
+ ],
+ q(0316) => [
+ q(Norwegian),
+ ],
+ q(0317) => [
+ q(N'Ko),
+ ],
+ q(0318) => [
+ q(Pedi),
+ q(Sepedi),
+ q(Northern Sotho),
+ ],
+ q(0319) => [
+ q(Nubian languages),
+ ],
+ q(0320) => [
+ q(Classical Newari),
+ q(Old Newari),
+ q(Classical Nepal Bhasa),
+ ],
+ q(0321) => [
+ q(Chichewa),
+ q(Chewa),
+ q(Nyanja),
+ ],
+ q(0322) => [
+ q(Nyamwezi),
+ ],
+ q(0323) => [
+ q(Nyankole),
+ ],
+ q(0324) => [
+ q(Nyoro),
+ ],
+ q(0325) => [
+ q(Nzima),
+ ],
+ q(0326) => [
+ q(Occitan (post 1500)),
+ q(Provencal),
+ ],
+ q(0327) => [
+ q(Ojibwa),
+ ],
+ q(0328) => [
+ q(Oriya),
+ q(Oriya (macrolanguage)),
+ ],
+ q(0329) => [
+ q(Oromo),
+ ],
+ q(0330) => [
+ q(Osage),
+ ],
+ q(0331) => [
+ q(Ossetian),
+ q(Ossetic),
+ ],
+ q(0332) => [
+ q(Turkish, Ottoman (1500-1928)),
+ q(Ottoman Turkish (1500-1928)),
+ ],
+ q(0333) => [
+ q(Otomian languages),
+ ],
+ q(0334) => [
+ q(Papuan languages),
+ ],
+ q(0335) => [
+ q(Pangasinan),
+ ],
+ q(0336) => [
+ q(Pahlavi),
+ ],
+ q(0337) => [
+ q(Pampanga),
+ q(Kapampangan),
+ ],
+ q(0338) => [
+ q(Panjabi),
+ q(Punjabi),
+ ],
+ q(0339) => [
+ q(Papiamento),
+ ],
+ q(0340) => [
+ q(Palauan),
+ ],
+ q(0341) => [
+ q(Persian, Old (ca.600-400 B.C.)),
+ q(Old Persian (ca. 600-400 B.C.)),
+ ],
+ q(0342) => [
+ q(Persian),
+ ],
+ q(0343) => [
+ q(Philippine languages),
+ ],
+ q(0344) => [
+ q(Phoenician),
+ ],
+ q(0345) => [
+ q(Pali),
+ ],
+ q(0346) => [
+ q(Polish),
+ ],
+ q(0347) => [
+ q(Pohnpeian),
+ ],
+ q(0348) => [
+ q(Portuguese),
+ ],
+ q(0349) => [
+ q(Prakrit languages),
+ ],
+ q(0350) => [
+ q(Provencal, Old (to 1500)),
+ q(Old Provencal (to 1500)),
+ q(Old Occitan (to 1500)),
+ ],
+ q(0351) => [
+ q(Pushto),
+ q(Pashto),
+ ],
+ q(0352) => [
+ q(Reserved for local use),
+ ],
+ q(0353) => [
+ q(Quechua),
+ ],
+ q(0354) => [
+ q(Rajasthani),
+ ],
+ q(0355) => [
+ q(Rapanui),
+ ],
+ q(0356) => [
+ q(Rarotongan),
+ q(Cook Islands Maori),
+ ],
+ q(0357) => [
+ q(Romance languages),
+ ],
+ q(0358) => [
+ q(Romansh),
+ ],
+ q(0359) => [
+ q(Romany),
+ ],
+ q(0360) => [
+ q(Romanian),
+ q(Moldavian),
+ q(Moldovan),
+ ],
+ q(0361) => [
+ q(Rundi),
+ ],
+ q(0362) => [
+ q(Aromanian),
+ q(Arumanian),
+ q(Macedo-Romanian),
+ ],
+ q(0363) => [
+ q(Russian),
+ ],
+ q(0364) => [
+ q(Sandawe),
+ ],
+ q(0365) => [
+ q(Sango),
+ ],
+ q(0366) => [
+ q(Yakut),
+ ],
+ q(0367) => [
+ q(South American Indian (Other)),
+ q(South American Indian languages),
+ ],
+ q(0368) => [
+ q(Salishan languages),
+ ],
+ q(0369) => [
+ q(Samaritan Aramaic),
+ ],
+ q(0370) => [
+ q(Sanskrit),
+ ],
+ q(0371) => [
+ q(Sasak),
+ ],
+ q(0372) => [
+ q(Santali),
+ ],
+ q(0373) => [
+ q(Sicilian),
+ ],
+ q(0374) => [
+ q(Scots),
+ ],
+ q(0375) => [
+ q(Selkup),
+ ],
+ q(0376) => [
+ q(Semitic languages),
+ ],
+ q(0377) => [
+ q(Irish, Old (to 900)),
+ q(Old Irish (to 900)),
+ ],
+ q(0378) => [
+ q(Sign Languages),
+ ],
+ q(0379) => [
+ q(Shan),
+ ],
+ q(0380) => [
+ q(Sidamo),
+ ],
+ q(0381) => [
+ q(Sinhala),
+ q(Sinhalese),
+ ],
+ q(0382) => [
+ q(Siouan languages),
+ ],
+ q(0383) => [
+ q(Sino-Tibetan languages),
+ ],
+ q(0384) => [
+ q(Slavic languages),
+ ],
+ q(0385) => [
+ q(Slovak),
+ ],
+ q(0386) => [
+ q(Slovenian),
+ ],
+ q(0387) => [
+ q(Southern Sami),
+ ],
+ q(0388) => [
+ q(Northern Sami),
+ ],
+ q(0389) => [
+ q(Sami languages),
+ ],
+ q(0390) => [
+ q(Lule Sami),
+ ],
+ q(0391) => [
+ q(Inari Sami),
+ ],
+ q(0392) => [
+ q(Samoan),
+ ],
+ q(0393) => [
+ q(Skolt Sami),
+ ],
+ q(0394) => [
+ q(Shona),
+ ],
+ q(0395) => [
+ q(Sindhi),
+ ],
+ q(0396) => [
+ q(Soninke),
+ ],
+ q(0397) => [
+ q(Sogdian),
+ ],
+ q(0398) => [
+ q(Somali),
+ ],
+ q(0399) => [
+ q(Songhai languages),
+ ],
+ q(0400) => [
+ q(Sotho, Southern),
+ q(Southern Sotho),
+ ],
+ q(0401) => [
+ q(Spanish),
+ q(Castilian),
+ ],
+ q(0402) => [
+ q(Sardinian),
+ ],
+ q(0403) => [
+ q(Sranan Tongo),
+ ],
+ q(0404) => [
+ q(Serbian),
+ ],
+ q(0405) => [
+ q(Serer),
+ ],
+ q(0406) => [
+ q(Nilo-Saharan languages),
+ ],
+ q(0407) => [
+ q(Swati),
+ ],
+ q(0408) => [
+ q(Sukuma),
+ ],
+ q(0409) => [
+ q(Sundanese),
+ ],
+ q(0410) => [
+ q(Susu),
+ ],
+ q(0411) => [
+ q(Sumerian),
+ ],
+ q(0412) => [
+ q(Swahili),
+ q(Swahili (macrolanguage)),
+ ],
+ q(0413) => [
+ q(Swedish),
+ ],
+ q(0414) => [
+ q(Classical Syriac),
+ ],
+ q(0415) => [
+ q(Syriac),
+ ],
+ q(0416) => [
+ q(Tahitian),
+ ],
+ q(0417) => [
+ q(Tai languages),
+ ],
+ q(0418) => [
+ q(Tamil),
+ ],
+ q(0419) => [
+ q(Tatar),
+ ],
+ q(0420) => [
+ q(Telugu),
+ ],
+ q(0421) => [
+ q(Timne),
+ ],
+ q(0422) => [
+ q(Tereno),
+ ],
+ q(0423) => [
+ q(Tetum),
+ ],
+ q(0424) => [
+ q(Tajik),
+ ],
+ q(0425) => [
+ q(Tagalog),
+ ],
+ q(0426) => [
+ q(Thai),
+ ],
+ q(0427) => [
+ q(Tibetan),
+ ],
+ q(0428) => [
+ q(Tigre),
+ ],
+ q(0429) => [
+ q(Tigrinya),
+ ],
+ q(0430) => [
+ q(Tiv),
+ ],
+ q(0431) => [
+ q(Tokelau),
+ ],
+ q(0432) => [
+ q(Klingon),
+ q(tlhIngan-Hol),
+ ],
+ q(0433) => [
+ q(Tlingit),
+ ],
+ q(0434) => [
+ q(Tamashek),
+ ],
+ q(0435) => [
+ q(Tonga (Nyasa)),
+ ],
+ q(0436) => [
+ q(Tonga (Tonga Islands)),
+ q(Tonga),
+ ],
+ q(0437) => [
+ q(Tok Pisin),
+ ],
+ q(0438) => [
+ q(Tsimshian),
+ ],
+ q(0439) => [
+ q(Tswana),
+ ],
+ q(0440) => [
+ q(Tsonga),
+ ],
+ q(0441) => [
+ q(Turkmen),
+ ],
+ q(0442) => [
+ q(Tumbuka),
+ ],
+ q(0443) => [
+ q(Tupi languages),
+ ],
+ q(0444) => [
+ q(Turkish),
+ ],
+ q(0445) => [
+ q(Altaic languages),
+ ],
+ q(0446) => [
+ q(Tuvalu),
+ ],
+ q(0447) => [
+ q(Twi),
+ ],
+ q(0448) => [
+ q(Tuvinian),
+ ],
+ q(0449) => [
+ q(Udmurt),
+ ],
+ q(0450) => [
+ q(Ugaritic),
+ ],
+ q(0451) => [
+ q(Uighur),
+ q(Uyghur),
+ ],
+ q(0452) => [
+ q(Ukrainian),
+ ],
+ q(0453) => [
+ q(Umbundu),
+ ],
+ q(0454) => [
+ q(Undetermined),
+ ],
+ q(0455) => [
+ q(Urdu),
+ ],
+ q(0456) => [
+ q(Uzbek),
+ ],
+ q(0457) => [
+ q(Vai),
+ ],
+ q(0458) => [
+ q(Venda),
+ ],
+ q(0459) => [
+ q(Vietnamese),
+ ],
+ q(0460) => [
+ q(Volapuk),
+ ],
+ q(0461) => [
+ q(Votic),
+ ],
+ q(0462) => [
+ q(Wakashan languages),
+ ],
+ q(0463) => [
+ q(Walamo),
+ q(Wolaytta),
+ q(Wolaitta),
+ ],
+ q(0464) => [
+ q(Waray),
+ q(Waray (Philippines)),
+ ],
+ q(0465) => [
+ q(Washo),
+ ],
+ q(0466) => [
+ q(Welsh),
+ ],
+ q(0467) => [
+ q(Sorbian languages),
+ ],
+ q(0468) => [
+ q(Walloon),
+ ],
+ q(0469) => [
+ q(Wolof),
+ ],
+ q(0470) => [
+ q(Kalmyk),
+ q(Oirat),
+ ],
+ q(0471) => [
+ q(Xhosa),
+ ],
+ q(0472) => [
+ q(Yao),
+ ],
+ q(0473) => [
+ q(Yapese),
+ ],
+ q(0474) => [
+ q(Yiddish),
+ ],
+ q(0475) => [
+ q(Yoruba),
+ ],
+ q(0476) => [
+ q(Yupik languages),
+ ],
+ q(0477) => [
+ q(Zapotec),
+ ],
+ q(0478) => [
+ q(Blissymbols),
+ q(Blissymbolics),
+ q(Bliss),
+ ],
+ q(0479) => [
+ q(Zenaga),
+ ],
+ q(0480) => [
+ q(Standard Moroccan Tamazight),
+ ],
+ q(0481) => [
+ q(Zhuang),
+ q(Chuang),
+ ],
+ q(0482) => [
+ q(Zande languages),
+ ],
+ q(0483) => [
+ q(Zulu),
+ ],
+ q(0484) => [
+ q(Zuni),
+ ],
+ q(0485) => [
+ q(No linguistic content),
+ q(Not applicable),
+ ],
+ q(0486) => [
+ q(Zaza),
+ q(Dimili),
+ q(Dimli),
+ q(Kirdki),
+ q(Kirmanjki),
+ q(Zazaki),
+ q(Dimli (macrolanguage)),
+ q(Kirmanjki (macrolanguage)),
+ ],
+ q(0487) => [
+ q(Austro-Asiatic languages),
+ ],
+ q(0488) => [
+ q(Atlantic-Congo languages),
+ ],
+ q(0489) => [
+ q(Alacalufan languages),
+ ],
+ q(0490) => [
+ q(Algic languages),
+ ],
+ q(0491) => [
+ q(Arauan languages),
+ ],
+ q(0492) => [
+ q(Arawakan languages),
+ ],
+ q(0493) => [
+ q(Uto-Aztecan languages),
+ ],
+ q(0494) => [
+ q(Chibchan languages),
+ ],
+ q(0495) => [
+ q(North Caucasian languages),
+ ],
+ q(0496) => [
+ q(South Caucasian languages),
+ ],
+ q(0497) => [
+ q(Chadic languages),
+ ],
+ q(0498) => [
+ q(Caddoan languages),
+ ],
+ q(0499) => [
+ q(Central Sudanic languages),
+ ],
+ q(0500) => [
+ q(Mande languages),
+ ],
+ q(0501) => [
+ q(Egyptian languages),
+ ],
+ q(0502) => [
+ q(Eskimo-Aleut languages),
+ ],
+ q(0503) => [
+ q(Basque (family)),
+ ],
+ q(0504) => [
+ q(Formosan languages),
+ ],
+ q(0505) => [
+ q(East Germanic languages),
+ ],
+ q(0506) => [
+ q(North Germanic languages),
+ ],
+ q(0507) => [
+ q(West Germanic languages),
+ ],
+ q(0508) => [
+ q(Greek languages),
+ ],
+ q(0509) => [
+ q(Hmong-Mien languages),
+ ],
+ q(0510) => [
+ q(Hokan languages),
+ ],
+ q(0511) => [
+ q(Armenian (family)),
+ ],
+ q(0512) => [
+ q(Indo-Iranian languages),
+ ],
+ q(0513) => [
+ q(Italic languages),
+ ],
+ q(0514) => [
+ q(Japanese (family)),
+ ],
+ q(0515) => [
+ q(Kordofanian languages),
+ ],
+ q(0516) => [
+ q(Trans-New Guinea languages),
+ ],
+ q(0517) => [
+ q(Oto-Manguean languages),
+ ],
+ q(0518) => [
+ q(Omotic languages),
+ ],
+ q(0519) => [
+ q(Central Malayo-Polynesian languages),
+ ],
+ q(0520) => [
+ q(Malayo-Polynesian languages),
+ ],
+ q(0521) => [
+ q(Eastern Malayo-Polynesian languages),
+ ],
+ q(0522) => [
+ q(Western Malayo-Polynesian languages),
+ ],
+ q(0523) => [
+ q(Quechuan (family)),
+ ],
+ q(0524) => [
+ q(Eastern Sudanic languages),
+ ],
+ q(0525) => [
+ q(Albanian languages),
+ ],
+ q(0526) => [
+ q(Samoyedic languages),
+ ],
+ q(0527) => [
+ q(Tibeto-Burman languages),
+ ],
+ q(0528) => [
+ q(Turkic languages),
+ ],
+ q(0529) => [
+ q(Tungus languages),
+ ],
+ q(0530) => [
+ q(Uralic languages),
+ ],
+ q(0531) => [
+ q(Mongolian languages),
+ ],
+ q(0532) => [
+ q(Na-Dene languages),
+ ],
+ q(0533) => [
+ q(Chinese (family)),
+ ],
+ q(0534) => [
+ q(East Slavic languages),
+ ],
+ q(0535) => [
+ q(South Slavic languages),
+ ],
+ q(0536) => [
+ q(West Slavic languages),
+ ],
+ q(0537) => [
+ q(Serbo-Croatian),
+ ],
+ q(0538) => [
+ q(Ghotuo),
+ ],
+ q(0539) => [
+ q(Alumu-Tesu),
+ ],
+ q(0540) => [
+ q(Ari),
+ ],
+ q(0541) => [
+ q(Amal),
+ ],
+ q(0542) => [
+ q(Arbereshe Albanian),
+ ],
+ q(0543) => [
+ q(Aranadan),
+ ],
+ q(0544) => [
+ q(Ambrak),
+ ],
+ q(0545) => [
+ q(Abu' Arapesh),
+ ],
+ q(0546) => [
+ q(Arifama-Miniafia),
+ ],
+ q(0547) => [
+ q(Ankave),
+ ],
+ q(0548) => [
+ q(Afade),
+ ],
+ q(0549) => [
+ q(Aramanik),
+ ],
+ q(0550) => [
+ q(Anambe),
+ ],
+ q(0551) => [
+ q(Algerian Saharan Arabic),
+ ],
+ q(0552) => [
+ q(Para Arara),
+ ],
+ q(0553) => [
+ q(Eastern Abnaki),
+ ],
+ q(0554) => [
+ q(Aasax),
+ ],
+ q(0555) => [
+ q(Arvanitika Albanian),
+ ],
+ q(0556) => [
+ q(Abau),
+ ],
+ q(0557) => [
+ q(Solong),
+ ],
+ q(0558) => [
+ q(Mandobo Atas),
+ ],
+ q(0559) => [
+ q(Amarasi),
+ ],
+ q(0560) => [
+ q(Abe),
+ ],
+ q(0561) => [
+ q(Bankon),
+ ],
+ q(0562) => [
+ q(Ambala Ayta),
+ ],
+ q(0563) => [
+ q(Manide),
+ ],
+ q(0564) => [
+ q(Western Abnaki),
+ ],
+ q(0565) => [
+ q(Abai Sungai),
+ ],
+ q(0566) => [
+ q(Abaga),
+ ],
+ q(0567) => [
+ q(Tajiki Arabic),
+ ],
+ q(0568) => [
+ q(Abidji),
+ ],
+ q(0569) => [
+ q(Aka-Bea),
+ ],
+ q(0570) => [
+ q(Lampung Nyo),
+ ],
+ q(0571) => [
+ q(Abanyom),
+ ],
+ q(0572) => [
+ q(Abua),
+ ],
+ q(0573) => [
+ q(Abon),
+ ],
+ q(0574) => [
+ q(Abellen Ayta),
+ ],
+ q(0575) => [
+ q(Abaza),
+ ],
+ q(0576) => [
+ q(Abron),
+ ],
+ q(0577) => [
+ q(Ambonese Malay),
+ ],
+ q(0578) => [
+ q(Ambulas),
+ ],
+ q(0579) => [
+ q(Abure),
+ ],
+ q(0580) => [
+ q(Baharna Arabic),
+ ],
+ q(0581) => [
+ q(Pal),
+ ],
+ q(0582) => [
+ q(Inabaknon),
+ ],
+ q(0583) => [
+ q(Aneme Wake),
+ ],
+ q(0584) => [
+ q(Abui),
+ ],
+ q(0585) => [
+ q(Achagua),
+ ],
+ q(0586) => [
+ q(Anca),
+ ],
+ q(0587) => [
+ q(Gikyode),
+ ],
+ q(0588) => [
+ q(Saint Lucian Creole French),
+ ],
+ q(0589) => [
+ q(Aka-Cari),
+ ],
+ q(0590) => [
+ q(Aka-Kora),
+ ],
+ q(0591) => [
+ q(Akar-Bale),
+ ],
+ q(0592) => [
+ q(Mesopotamian Arabic),
+ ],
+ q(0593) => [
+ q(Achang),
+ ],
+ q(0594) => [
+ q(Eastern Acipa),
+ ],
+ q(0595) => [
+ q(Ta'izzi-Adeni Arabic),
+ ],
+ q(0596) => [
+ q(Achi),
+ ],
+ q(0597) => [
+ q(Acroa),
+ ],
+ q(0598) => [
+ q(Achterhoeks),
+ ],
+ q(0599) => [
+ q(Achuar-Shiwiar),
+ ],
+ q(0600) => [
+ q(Achumawi),
+ ],
+ q(0601) => [
+ q(Hijazi Arabic),
+ ],
+ q(0602) => [
+ q(Omani Arabic),
+ ],
+ q(0603) => [
+ q(Cypriot Arabic),
+ ],
+ q(0604) => [
+ q(Acheron),
+ ],
+ q(0605) => [
+ q(Adabe),
+ ],
+ q(0606) => [
+ q(Dzodinka),
+ ],
+ q(0607) => [
+ q(Adele),
+ ],
+ q(0608) => [
+ q(Dhofari Arabic),
+ ],
+ q(0609) => [
+ q(Andegerebinha),
+ ],
+ q(0610) => [
+ q(Adhola),
+ ],
+ q(0611) => [
+ q(Adi),
+ ],
+ q(0612) => [
+ q(Adioukrou),
+ ],
+ q(0613) => [
+ q(Galo),
+ ],
+ q(0614) => [
+ q(Adang),
+ ],
+ q(0615) => [
+ q(Abu),
+ ],
+ q(0616) => [
+ q(Adap),
+ ],
+ q(0617) => [
+ q(Adangbe),
+ ],
+ q(0618) => [
+ q(Adonara),
+ ],
+ q(0619) => [
+ q(Adamorobe Sign Language),
+ ],
+ q(0620) => [
+ q(Adnyamathanha),
+ ],
+ q(0621) => [
+ q(Aduge),
+ ],
+ q(0622) => [
+ q(Amundava),
+ ],
+ q(0623) => [
+ q(Amdo Tibetan),
+ ],
+ q(0624) => [
+ q(Adzera),
+ ],
+ q(0625) => [
+ q(Areba),
+ ],
+ q(0626) => [
+ q(Tunisian Arabic),
+ ],
+ q(0627) => [
+ q(Saidi Arabic),
+ ],
+ q(0628) => [
+ q(Argentine Sign Language),
+ ],
+ q(0629) => [
+ q(Northeast Pashayi),
+ ],
+ q(0630) => [
+ q(Haeke),
+ ],
+ q(0631) => [
+ q(Ambele),
+ ],
+ q(0632) => [
+ q(Arem),
+ ],
+ q(0633) => [
+ q(Armenian Sign Language),
+ ],
+ q(0634) => [
+ q(Aer),
+ ],
+ q(0635) => [
+ q(Eastern Arrernte),
+ ],
+ q(0636) => [
+ q(Alsea),
+ ],
+ q(0637) => [
+ q(Akeu),
+ ],
+ q(0638) => [
+ q(Ambakich),
+ ],
+ q(0639) => [
+ q(Amele),
+ ],
+ q(0640) => [
+ q(Aeka),
+ ],
+ q(0641) => [
+ q(Gulf Arabic),
+ ],
+ q(0642) => [
+ q(Andai),
+ ],
+ q(0643) => [
+ q(Putukwam),
+ ],
+ q(0644) => [
+ q(Afghan Sign Language),
+ ],
+ q(0645) => [
+ q(Akrukay),
+ ],
+ q(0646) => [
+ q(Nanubae),
+ ],
+ q(0647) => [
+ q(Defaka),
+ ],
+ q(0648) => [
+ q(Eloyi),
+ ],
+ q(0649) => [
+ q(Tapei),
+ ],
+ q(0650) => [
+ q(Afro-Seminole Creole),
+ ],
+ q(0651) => [
+ q(Afitti),
+ ],
+ q(0652) => [
+ q(Awutu),
+ ],
+ q(0653) => [
+ q(Obokuitai),
+ ],
+ q(0654) => [
+ q(Aguano),
+ ],
+ q(0655) => [
+ q(Legbo),
+ ],
+ q(0656) => [
+ q(Agatu),
+ ],
+ q(0657) => [
+ q(Agarabi),
+ ],
+ q(0658) => [
+ q(Angal),
+ ],
+ q(0659) => [
+ q(Arguni),
+ ],
+ q(0660) => [
+ q(Angor),
+ ],
+ q(0661) => [
+ q(Ngelima),
+ ],
+ q(0662) => [
+ q(Agariya),
+ ],
+ q(0663) => [
+ q(Argobba),
+ ],
+ q(0664) => [
+ q(Isarog Agta),
+ ],
+ q(0665) => [
+ q(Fembe),
+ ],
+ q(0666) => [
+ q(Angaataha),
+ ],
+ q(0667) => [
+ q(Agutaynen),
+ ],
+ q(0668) => [
+ q(Tainae),
+ ],
+ q(0669) => [
+ q(Aghem),
+ ],
+ q(0670) => [
+ q(Aguaruna),
+ ],
+ q(0671) => [
+ q(Esimbi),
+ ],
+ q(0672) => [
+ q(Central Cagayan Agta),
+ ],
+ q(0673) => [
+ q(Aguacateco),
+ ],
+ q(0674) => [
+ q(Remontado Dumagat),
+ ],
+ q(0675) => [
+ q(Kahua),
+ ],
+ q(0676) => [
+ q(Aghul),
+ ],
+ q(0677) => [
+ q(Southern Alta),
+ ],
+ q(0678) => [
+ q(Mt. Iriga Agta),
+ ],
+ q(0679) => [
+ q(Ahanta),
+ ],
+ q(0680) => [
+ q(Axamb),
+ ],
+ q(0681) => [
+ q(Qimant),
+ ],
+ q(0682) => [
+ q(Aghu),
+ ],
+ q(0683) => [
+ q(Tiagbamrin Aizi),
+ ],
+ q(0684) => [
+ q(Akha),
+ ],
+ q(0685) => [
+ q(Igo),
+ ],
+ q(0686) => [
+ q(Mobumrin Aizi),
+ ],
+ q(0687) => [
+ q(Ahan),
+ ],
+ q(0688) => [
+ q(Ahom),
+ ],
+ q(0689) => [
+ q(Aproumu Aizi),
+ ],
+ q(0690) => [
+ q(Ahirani),
+ ],
+ q(0691) => [
+ q(Ashe),
+ ],
+ q(0692) => [
+ q(Ahtena),
+ ],
+ q(0693) => [
+ q(Arosi),
+ ],
+ q(0694) => [
+ q(Ainu (China)),
+ ],
+ q(0695) => [
+ q(Ainbai),
+ ],
+ q(0696) => [
+ q(Alngith),
+ ],
+ q(0697) => [
+ q(Amara),
+ ],
+ q(0698) => [
+ q(Agi),
+ ],
+ q(0699) => [
+ q(Antigua and Barbuda Creole English),
+ ],
+ q(0700) => [
+ q(Ai-Cham),
+ ],
+ q(0701) => [
+ q(Assyrian Neo-Aramaic),
+ ],
+ q(0702) => [
+ q(Lishanid Noshan),
+ ],
+ q(0703) => [
+ q(Ake),
+ ],
+ q(0704) => [
+ q(Aimele),
+ ],
+ q(0705) => [
+ q(Aimol),
+ ],
+ q(0706) => [
+ q(Aiton),
+ ],
+ q(0707) => [
+ q(Burumakok),
+ ],
+ q(0708) => [
+ q(Aimaq),
+ ],
+ q(0709) => [
+ q(Airoran),
+ ],
+ q(0710) => [
+ q(Nataoran Amis),
+ ],
+ q(0711) => [
+ q(Arikem),
+ ],
+ q(0712) => [
+ q(Aari),
+ ],
+ q(0713) => [
+ q(Aighon),
+ ],
+ q(0714) => [
+ q(Ali),
+ ],
+ q(0715) => [
+ q(Aja (Sudan)),
+ ],
+ q(0716) => [
+ q(Aja (Benin)),
+ ],
+ q(0717) => [
+ q(Ajie),
+ ],
+ q(0718) => [
+ q(Andajin),
+ ],
+ q(0719) => [
+ q(South Levantine Arabic),
+ ],
+ q(0720) => [
+ q(Judeo-Tunisian Arabic),
+ ],
+ q(0721) => [
+ q(Judeo-Moroccan Arabic),
+ ],
+ q(0722) => [
+ q(Ajawa),
+ ],
+ q(0723) => [
+ q(Amri Karbi),
+ ],
+ q(0724) => [
+ q(Batak Angkola),
+ ],
+ q(0725) => [
+ q(Mpur),
+ ],
+ q(0726) => [
+ q(Ukpet-Ehom),
+ ],
+ q(0727) => [
+ q(Akawaio),
+ ],
+ q(0728) => [
+ q(Akpa),
+ ],
+ q(0729) => [
+ q(Anakalangu),
+ ],
+ q(0730) => [
+ q(Angal Heneng),
+ ],
+ q(0731) => [
+ q(Aiome),
+ ],
+ q(0732) => [
+ q(Aka-Jeru),
+ ],
+ q(0733) => [
+ q(Aklanon),
+ ],
+ q(0734) => [
+ q(Aka-Bo),
+ ],
+ q(0735) => [
+ q(Akurio),
+ ],
+ q(0736) => [
+ q(Siwu),
+ ],
+ q(0737) => [
+ q(Ak),
+ ],
+ q(0738) => [
+ q(Araki),
+ ],
+ q(0739) => [
+ q(Akaselem),
+ ],
+ q(0740) => [
+ q(Akolet),
+ ],
+ q(0741) => [
+ q(Akum),
+ ],
+ q(0742) => [
+ q(Akhvakh),
+ ],
+ q(0743) => [
+ q(Akwa),
+ ],
+ q(0744) => [
+ q(Aka-Kede),
+ ],
+ q(0745) => [
+ q(Aka-Kol),
+ ],
+ q(0746) => [
+ q(Alabama),
+ ],
+ q(0747) => [
+ q(Alago),
+ ],
+ q(0748) => [
+ q(Qawasqar),
+ ],
+ q(0749) => [
+ q(Alladian),
+ ],
+ q(0750) => [
+ q(Alege),
+ ],
+ q(0751) => [
+ q(Alawa),
+ ],
+ q(0752) => [
+ q(Amaimon),
+ ],
+ q(0753) => [
+ q(Alangan),
+ ],
+ q(0754) => [
+ q(Alak),
+ ],
+ q(0755) => [
+ q(Allar),
+ ],
+ q(0756) => [
+ q(Amblong),
+ ],
+ q(0757) => [
+ q(Gheg Albanian),
+ ],
+ q(0758) => [
+ q(Larike-Wakasihu),
+ ],
+ q(0759) => [
+ q(Alune),
+ ],
+ q(0760) => [
+ q(Algonquin),
+ ],
+ q(0761) => [
+ q(Alutor),
+ ],
+ q(0762) => [
+ q(Tosk Albanian),
+ ],
+ q(0763) => [
+ q('Are'are),
+ ],
+ q(0764) => [
+ q(Alaba-K'abeena),
+ q(Wanbasana),
+ ],
+ q(0765) => [
+ q(Amol),
+ ],
+ q(0766) => [
+ q(Alyawarr),
+ ],
+ q(0767) => [
+ q(Alur),
+ ],
+ q(0768) => [
+ q(Amanaye),
+ ],
+ q(0769) => [
+ q(Ambo),
+ ],
+ q(0770) => [
+ q(Amahuaca),
+ ],
+ q(0771) => [
+ q(Yanesha'),
+ ],
+ q(0772) => [
+ q(Hamer-Banna),
+ ],
+ q(0773) => [
+ q(Amurdak),
+ ],
+ q(0774) => [
+ q(Amis),
+ ],
+ q(0775) => [
+ q(Amdang),
+ ],
+ q(0776) => [
+ q(Ambai),
+ ],
+ q(0777) => [
+ q(War-Jaintia),
+ ],
+ q(0778) => [
+ q(Ama (Papua New Guinea)),
+ ],
+ q(0779) => [
+ q(Amanab),
+ ],
+ q(0780) => [
+ q(Amo),
+ ],
+ q(0781) => [
+ q(Alamblak),
+ ],
+ q(0782) => [
+ q(Amahai),
+ ],
+ q(0783) => [
+ q(Amarakaeri),
+ ],
+ q(0784) => [
+ q(Southern Amami-Oshima),
+ ],
+ q(0785) => [
+ q(Amto),
+ ],
+ q(0786) => [
+ q(Guerrero Amuzgo),
+ ],
+ q(0787) => [
+ q(Ambelau),
+ ],
+ q(0788) => [
+ q(Western Neo-Aramaic),
+ ],
+ q(0789) => [
+ q(Anmatyerre),
+ ],
+ q(0790) => [
+ q(Ami),
+ ],
+ q(0791) => [
+ q(Atampaya),
+ ],
+ q(0792) => [
+ q(Andaqui),
+ ],
+ q(0793) => [
+ q(Andoa),
+ ],
+ q(0794) => [
+ q(Ngas),
+ ],
+ q(0795) => [
+ q(Ansus),
+ ],
+ q(0796) => [
+ q(Xaracuu),
+ ],
+ q(0797) => [
+ q(Animere),
+ ],
+ q(0798) => [
+ q(Nend),
+ ],
+ q(0799) => [
+ q(Andi),
+ ],
+ q(0800) => [
+ q(Anor),
+ ],
+ q(0801) => [
+ q(Goemai),
+ ],
+ q(0802) => [
+ q(Anu-Hkongso Chin),
+ ],
+ q(0803) => [
+ q(Anal),
+ ],
+ q(0804) => [
+ q(Obolo),
+ ],
+ q(0805) => [
+ q(Andoque),
+ ],
+ q(0806) => [
+ q(Jarawa (India)),
+ ],
+ q(0807) => [
+ q(Andh),
+ ],
+ q(0808) => [
+ q(Anserma),
+ ],
+ q(0809) => [
+ q(Antakarinya),
+ ],
+ q(0810) => [
+ q(Anuak),
+ ],
+ q(0811) => [
+ q(Denya),
+ ],
+ q(0812) => [
+ q(Anaang),
+ ],
+ q(0813) => [
+ q(Andra-Hus),
+ ],
+ q(0814) => [
+ q(Anyin),
+ ],
+ q(0815) => [
+ q(Anem),
+ ],
+ q(0816) => [
+ q(Angolar),
+ ],
+ q(0817) => [
+ q(Abom),
+ ],
+ q(0818) => [
+ q(Pemon),
+ ],
+ q(0819) => [
+ q(Andarum),
+ ],
+ q(0820) => [
+ q(Angal Enen),
+ ],
+ q(0821) => [
+ q(Bragat),
+ ],
+ q(0822) => [
+ q(Angoram),
+ ],
+ q(0823) => [
+ q(Arma),
+ ],
+ q(0824) => [
+ q(Anindilyakwa),
+ ],
+ q(0825) => [
+ q(Mufian),
+ ],
+ q(0826) => [
+ q(Arho),
+ ],
+ q(0827) => [
+ q(Alor),
+ ],
+ q(0828) => [
+ q(Omie),
+ ],
+ q(0829) => [
+ q(Bumbita Arapesh),
+ ],
+ q(0830) => [
+ q(Aore),
+ ],
+ q(0831) => [
+ q(Taikat),
+ ],
+ q(0832) => [
+ q(A'tong),
+ ],
+ q(0833) => [
+ q(A'ou),
+ ],
+ q(0834) => [
+ q(Atorada),
+ ],
+ q(0835) => [
+ q(Uab Meto),
+ ],
+ q(0836) => [
+ q(Sa'a),
+ ],
+ q(0837) => [
+ q(North Levantine Arabic),
+ ],
+ q(0838) => [
+ q(Sudanese Arabic),
+ ],
+ q(0839) => [
+ q(Bukiyip),
+ ],
+ q(0840) => [
+ q(Pahanan Agta),
+ ],
+ q(0841) => [
+ q(Ampanang),
+ ],
+ q(0842) => [
+ q(Athpariya),
+ ],
+ q(0843) => [
+ q(Apiaka),
+ ],
+ q(0844) => [
+ q(Jicarilla Apache),
+ ],
+ q(0845) => [
+ q(Kiowa Apache),
+ ],
+ q(0846) => [
+ q(Lipan Apache),
+ ],
+ q(0847) => [
+ q(Mescalero-Chiricahua Apache),
+ ],
+ q(0848) => [
+ q(Apinaye),
+ ],
+ q(0849) => [
+ q(Ambul),
+ ],
+ q(0850) => [
+ q(Apma),
+ ],
+ q(0851) => [
+ q(A-Pucikwar),
+ ],
+ q(0852) => [
+ q(Arop-Lokep),
+ ],
+ q(0853) => [
+ q(Arop-Sissano),
+ ],
+ q(0854) => [
+ q(Apatani),
+ ],
+ q(0855) => [
+ q(Apurina),
+ ],
+ q(0856) => [
+ q(Alapmunte),
+ ],
+ q(0857) => [
+ q(Western Apache),
+ ],
+ q(0858) => [
+ q(Aputai),
+ ],
+ q(0859) => [
+ q(Apalai),
+ ],
+ q(0860) => [
+ q(Safeyoka),
+ ],
+ q(0861) => [
+ q(Archi),
+ ],
+ q(0862) => [
+ q(Ampari Dogon),
+ ],
+ q(0863) => [
+ q(Arigidi),
+ ],
+ q(0864) => [
+ q(Atohwaim),
+ ],
+ q(0865) => [
+ q(Northern Alta),
+ ],
+ q(0866) => [
+ q(Atakapa),
+ ],
+ q(0867) => [
+ q(Arha),
+ ],
+ q(0868) => [
+ q(Akuntsu),
+ ],
+ q(0869) => [
+ q(Standard Arabic),
+ ],
+ q(0870) => [
+ q(Arabana),
+ ],
+ q(0871) => [
+ q(Western Arrarnta),
+ ],
+ q(0872) => [
+ q(Arhuaco),
+ ],
+ q(0873) => [
+ q(Arikara),
+ ],
+ q(0874) => [
+ q(Arapaso),
+ ],
+ q(0875) => [
+ q(Arikapu),
+ ],
+ q(0876) => [
+ q(Arabela),
+ ],
+ q(0877) => [
+ q(Araona),
+ ],
+ q(0878) => [
+ q(Algerian Arabic),
+ ],
+ q(0879) => [
+ q(Karo (Brazil)),
+ ],
+ q(0880) => [
+ q(Najdi Arabic),
+ ],
+ q(0881) => [
+ q(Arua (Amazonas State)),
+ q(Arawa),
+ ],
+ q(0882) => [
+ q(Arbore),
+ ],
+ q(0883) => [
+ q(Arua (Rodonia State)),
+ ],
+ q(0884) => [
+ q(Moroccan Arabic),
+ ],
+ q(0885) => [
+ q(Egyptian Arabic),
+ ],
+ q(0886) => [
+ q(Asu (Tanzania)),
+ ],
+ q(0887) => [
+ q(Assiniboine),
+ ],
+ q(0888) => [
+ q(Casuarina Coast Asmat),
+ ],
+ q(0889) => [
+ q(Asas),
+ ],
+ q(0890) => [
+ q(American Sign Language),
+ ],
+ q(0891) => [
+ q(Australian Sign Language),
+ ],
+ q(0892) => [
+ q(Cishingini),
+ ],
+ q(0893) => [
+ q(Abishira),
+ ],
+ q(0894) => [
+ q(Buruwai),
+ ],
+ q(0895) => [
+ q(Nsari),
+ ],
+ q(0896) => [
+ q(Ashkun),
+ ],
+ q(0897) => [
+ q(Asilulu),
+ ],
+ q(0898) => [
+ q(Xingu Asurini),
+ ],
+ q(0899) => [
+ q(Dano),
+ ],
+ q(0900) => [
+ q(Algerian Sign Language),
+ ],
+ q(0901) => [
+ q(Austrian Sign Language),
+ ],
+ q(0902) => [
+ q(Asuri),
+ ],
+ q(0903) => [
+ q(Ipulo),
+ ],
+ q(0904) => [
+ q(Tocantins Asurini),
+ ],
+ q(0905) => [
+ q(Asoa),
+ ],
+ q(0906) => [
+ q(Australian Aborigines Sign Language),
+ ],
+ q(0907) => [
+ q(Muratayak),
+ ],
+ q(0908) => [
+ q(Yaosakor Asmat),
+ ],
+ q(0909) => [
+ q(As),
+ ],
+ q(0910) => [
+ q(Pele-Ata),
+ ],
+ q(0911) => [
+ q(Zaiwa),
+ ],
+ q(0912) => [
+ q(Atsahuaca),
+ ],
+ q(0913) => [
+ q(Ata Manobo),
+ ],
+ q(0914) => [
+ q(Atemble),
+ ],
+ q(0915) => [
+ q(Ivbie North-Okpela-Arhe),
+ ],
+ q(0916) => [
+ q(Attie),
+ ],
+ q(0917) => [
+ q(Atikamekw),
+ ],
+ q(0918) => [
+ q(Ati),
+ ],
+ q(0919) => [
+ q(Mt. Iraya Agta),
+ ],
+ q(0920) => [
+ q(Ata),
+ ],
+ q(0921) => [
+ q(Ashtiani),
+ ],
+ q(0922) => [
+ q(Atong),
+ ],
+ q(0923) => [
+ q(Pudtol Atta),
+ ],
+ q(0924) => [
+ q(Aralle-Tabulahan),
+ ],
+ q(0925) => [
+ q(Waimiri-Atroari),
+ ],
+ q(0926) => [
+ q(Gros Ventre),
+ ],
+ q(0927) => [
+ q(Pamplona Atta),
+ ],
+ q(0928) => [
+ q(Reel),
+ ],
+ q(0929) => [
+ q(Northern Altai),
+ ],
+ q(0930) => [
+ q(Atsugewi),
+ ],
+ q(0931) => [
+ q(Arutani),
+ ],
+ q(0932) => [
+ q(Aneityum),
+ ],
+ q(0933) => [
+ q(Arta),
+ ],
+ q(0934) => [
+ q(Asumboa),
+ ],
+ q(0935) => [
+ q(Alugu),
+ ],
+ q(0936) => [
+ q(Waorani),
+ ],
+ q(0937) => [
+ q(Anuta),
+ ],
+ q(0938) => [
+ q(=/Kx'au//'ein),
+ ],
+ q(0939) => [
+ q(Aguna),
+ ],
+ q(0940) => [
+ q(Aushi),
+ ],
+ q(0941) => [
+ q(Anuki),
+ ],
+ q(0942) => [
+ q(Awjilah),
+ ],
+ q(0943) => [
+ q(Heyo),
+ ],
+ q(0944) => [
+ q(Aulua),
+ ],
+ q(0945) => [
+ q(Asu (Nigeria)),
+ ],
+ q(0946) => [
+ q(Molmo One),
+ ],
+ q(0947) => [
+ q(Auyokawa),
+ ],
+ q(0948) => [
+ q(Makayam),
+ ],
+ q(0949) => [
+ q(Anus),
+ q(Korur),
+ ],
+ q(0950) => [
+ q(Aruek),
+ ],
+ q(0951) => [
+ q(Austral),
+ ],
+ q(0952) => [
+ q(Auye),
+ ],
+ q(0953) => [
+ q(Awyi),
+ ],
+ q(0954) => [
+ q(Aura),
+ ],
+ q(0955) => [
+ q(Awiyaana),
+ ],
+ q(0956) => [
+ q(Uzbeki Arabic),
+ ],
+ q(0957) => [
+ q(Avau),
+ ],
+ q(0958) => [
+ q(Alviri-Vidari),
+ ],
+ q(0959) => [
+ q(Avikam),
+ ],
+ q(0960) => [
+ q(Kotava),
+ ],
+ q(0961) => [
+ q(Eastern Egyptian Bedawi Arabic),
+ ],
+ q(0962) => [
+ q(Angkamuthi),
+ ],
+ q(0963) => [
+ q(Avatime),
+ ],
+ q(0964) => [
+ q(Agavotaguerra),
+ ],
+ q(0965) => [
+ q(Aushiri),
+ ],
+ q(0966) => [
+ q(Au),
+ ],
+ q(0967) => [
+ q(Avokaya),
+ ],
+ q(0968) => [
+ q(Ava-Canoeiro),
+ ],
+ q(0969) => [
+ q(Awa (Papua New Guinea)),
+ ],
+ q(0970) => [
+ q(Cicipu),
+ ],
+ q(0971) => [
+ q(Aweti),
+ ],
+ q(0972) => [
+ q(Anguthimri),
+ ],
+ q(0973) => [
+ q(Awbono),
+ ],
+ q(0974) => [
+ q(Aekyom),
+ ],
+ q(0975) => [
+ q(Awabakal),
+ ],
+ q(0976) => [
+ q(Arawum),
+ ],
+ q(0977) => [
+ q(Awngi),
+ ],
+ q(0978) => [
+ q(Awak),
+ ],
+ q(0979) => [
+ q(Awera),
+ ],
+ q(0980) => [
+ q(South Awyu),
+ ],
+ q(0981) => [
+ q(Arawete),
+ ],
+ q(0982) => [
+ q(Central Awyu),
+ ],
+ q(0983) => [
+ q(Jair Awyu),
+ ],
+ q(0984) => [
+ q(Awun),
+ ],
+ q(0985) => [
+ q(Awara),
+ ],
+ q(0986) => [
+ q(Edera Awyu),
+ ],
+ q(0987) => [
+ q(Abipon),
+ ],
+ q(0988) => [
+ q(Ayerrerenge),
+ ],
+ q(0989) => [
+ q(Mato Grosso Arara),
+ ],
+ q(0990) => [
+ q(Yaka (Central African Republic)),
+ ],
+ q(0991) => [
+ q(Middle Armenian),
+ ],
+ q(0992) => [
+ q(Xaragure),
+ ],
+ q(0993) => [
+ q(Awar),
+ ],
+ q(0994) => [
+ q(Ayizo Gbe),
+ ],
+ q(0995) => [
+ q(Southern Aymara),
+ ],
+ q(0996) => [
+ q(Ayabadhu),
+ ],
+ q(0997) => [
+ q(Ayere),
+ ],
+ q(0998) => [
+ q(Ginyanga),
+ ],
+ q(0999) => [
+ q(Hadrami Arabic),
+ ],
+ q(1000) => [
+ q(Leyigha),
+ ],
+ q(1001) => [
+ q(Akuku),
+ ],
+ q(1002) => [
+ q(Libyan Arabic),
+ ],
+ q(1003) => [
+ q(Sanaani Arabic),
+ ],
+ q(1004) => [
+ q(Ayoreo),
+ ],
+ q(1005) => [
+ q(North Mesopotamian Arabic),
+ ],
+ q(1006) => [
+ q(Ayi (Papua New Guinea)),
+ ],
+ q(1007) => [
+ q(Central Aymara),
+ ],
+ q(1008) => [
+ q(Sorsogon Ayta),
+ ],
+ q(1009) => [
+ q(Magbukun Ayta),
+ ],
+ q(1010) => [
+ q(Ayu),
+ ],
+ q(1011) => [
+ q(Tayabas Ayta),
+ ],
+ q(1012) => [
+ q(Mai Brat),
+ ],
+ q(1013) => [
+ q(Azha),
+ ],
+ q(1014) => [
+ q(South Azerbaijani),
+ ],
+ q(1015) => [
+ q(Eastern Durango Nahuatl),
+ ],
+ q(1016) => [
+ q(San Pedro Amuzgos Amuzgo),
+ ],
+ q(1017) => [
+ q(North Azerbaijani),
+ ],
+ q(1018) => [
+ q(Ipalapa Amuzgo),
+ ],
+ q(1019) => [
+ q(Western Durango Nahuatl),
+ ],
+ q(1020) => [
+ q(Awing),
+ ],
+ q(1021) => [
+ q(Faire Atta),
+ ],
+ q(1022) => [
+ q(Highland Puebla Nahuatl),
+ ],
+ q(1023) => [
+ q(Babatana),
+ ],
+ q(1024) => [
+ q(Bainouk-Gunyuno),
+ ],
+ q(1025) => [
+ q(Badui),
+ ],
+ q(1026) => [
+ q(Bare),
+ ],
+ q(1027) => [
+ q(Nubaca),
+ ],
+ q(1028) => [
+ q(Tuki),
+ ],
+ q(1029) => [
+ q(Bahamas Creole English),
+ ],
+ q(1030) => [
+ q(Barakai),
+ ],
+ q(1031) => [
+ q(Waimaha),
+ ],
+ q(1032) => [
+ q(Bantawa),
+ ],
+ q(1033) => [
+ q(Bavarian),
+ ],
+ q(1034) => [
+ q(Bada (Nigeria)),
+ ],
+ q(1035) => [
+ q(Vengo),
+ ],
+ q(1036) => [
+ q(Bambili-Bambui),
+ ],
+ q(1037) => [
+ q(Bamun),
+ ],
+ q(1038) => [
+ q(Batuley),
+ ],
+ q(1039) => [
+ q(Baatonum),
+ ],
+ q(1040) => [
+ q(Barai),
+ ],
+ q(1041) => [
+ q(Batak Toba),
+ ],
+ q(1042) => [
+ q(Bau),
+ ],
+ q(1043) => [
+ q(Bangba),
+ ],
+ q(1044) => [
+ q(Baibai),
+ ],
+ q(1045) => [
+ q(Barama),
+ ],
+ q(1046) => [
+ q(Bugan),
+ ],
+ q(1047) => [
+ q(Barombi),
+ ],
+ q(1048) => [
+ q(Ghomala'),
+ ],
+ q(1049) => [
+ q(Babanki),
+ ],
+ q(1050) => [
+ q(Bats),
+ ],
+ q(1051) => [
+ q(Babango),
+ ],
+ q(1052) => [
+ q(Uneapa),
+ ],
+ q(1053) => [
+ q(Northern Bobo Madare),
+ q(Konabere),
+ ],
+ q(1054) => [
+ q(West Central Banda),
+ ],
+ q(1055) => [
+ q(Bamali),
+ ],
+ q(1056) => [
+ q(Girawa),
+ ],
+ q(1057) => [
+ q(Bakpinka),
+ ],
+ q(1058) => [
+ q(Mburku),
+ ],
+ q(1059) => [
+ q(Kulung (Nigeria)),
+ ],
+ q(1060) => [
+ q(Karnai),
+ ],
+ q(1061) => [
+ q(Baba),
+ ],
+ q(1062) => [
+ q(Bubia),
+ ],
+ q(1063) => [
+ q(Befang),
+ ],
+ q(1064) => [
+ q(Babalia Creole Arabic),
+ ],
+ q(1065) => [
+ q(Central Bai),
+ ],
+ q(1066) => [
+ q(Bainouk-Samik),
+ ],
+ q(1067) => [
+ q(Southern Balochi),
+ ],
+ q(1068) => [
+ q(North Babar),
+ ],
+ q(1069) => [
+ q(Bamenyam),
+ ],
+ q(1070) => [
+ q(Bamu),
+ ],
+ q(1071) => [
+ q(Baga Binari),
+ ],
+ q(1072) => [
+ q(Bariai),
+ ],
+ q(1073) => [
+ q(Baoule),
+ ],
+ q(1074) => [
+ q(Bardi),
+ ],
+ q(1075) => [
+ q(Bunaba),
+ ],
+ q(1076) => [
+ q(Central Bikol),
+ ],
+ q(1077) => [
+ q(Bannoni),
+ ],
+ q(1078) => [
+ q(Bali (Nigeria)),
+ ],
+ q(1079) => [
+ q(Kaluli),
+ ],
+ q(1080) => [
+ q(Bali (Democratic Republic of Congo)),
+ ],
+ q(1081) => [
+ q(Bench),
+ ],
+ q(1082) => [
+ q(Babine),
+ ],
+ q(1083) => [
+ q(Kohumono),
+ ],
+ q(1084) => [
+ q(Bendi),
+ ],
+ q(1085) => [
+ q(Awad Bing),
+ ],
+ q(1086) => [
+ q(Shoo-Minda-Nye),
+ ],
+ q(1087) => [
+ q(Bana),
+ ],
+ q(1088) => [
+ q(Bacama),
+ ],
+ q(1089) => [
+ q(Bainouk-Gunyaamolo),
+ ],
+ q(1090) => [
+ q(Bayot),
+ ],
+ q(1091) => [
+ q(Basap),
+ ],
+ q(1092) => [
+ q(Embera-Baudo),
+ ],
+ q(1093) => [
+ q(Bunama),
+ ],
+ q(1094) => [
+ q(Bade),
+ ],
+ q(1095) => [
+ q(Biage),
+ ],
+ q(1096) => [
+ q(Bonggi),
+ ],
+ q(1097) => [
+ q(Baka (Sudan)),
+ ],
+ q(1098) => [
+ q(Burun),
+ ],
+ q(1099) => [
+ q(Bai),
+ ],
+ q(1100) => [
+ q(Budukh),
+ ],
+ q(1101) => [
+ q(Indonesian Bajau),
+ ],
+ q(1102) => [
+ q(Buduma),
+ ],
+ q(1103) => [
+ q(Baldemu),
+ ],
+ q(1104) => [
+ q(Morom),
+ ],
+ q(1105) => [
+ q(Bende),
+ ],
+ q(1106) => [
+ q(Bahnar),
+ ],
+ q(1107) => [
+ q(West Coast Bajau),
+ ],
+ q(1108) => [
+ q(Burunge),
+ ],
+ q(1109) => [
+ q(Bokoto),
+ ],
+ q(1110) => [
+ q(Oroko),
+ ],
+ q(1111) => [
+ q(Bodo Parja),
+ ],
+ q(1112) => [
+ q(Baham),
+ ],
+ q(1113) => [
+ q(Budong-Budong),
+ ],
+ q(1114) => [
+ q(Bandjalang),
+ ],
+ q(1115) => [
+ q(Badeshi),
+ ],
+ q(1116) => [
+ q(Beaver),
+ ],
+ q(1117) => [
+ q(Bebele),
+ ],
+ q(1118) => [
+ q(Iceve-Maci),
+ ],
+ q(1119) => [
+ q(Bedoanas),
+ ],
+ q(1120) => [
+ q(Byangsi),
+ ],
+ q(1121) => [
+ q(Benabena),
+ ],
+ q(1122) => [
+ q(Belait),
+ ],
+ q(1123) => [
+ q(Biali),
+ ],
+ q(1124) => [
+ q(Bekati'),
+ ],
+ q(1125) => [
+ q(Bebeli),
+ ],
+ q(1126) => [
+ q(Beami),
+ ],
+ q(1127) => [
+ q(Besoa),
+ ],
+ q(1128) => [
+ q(Beembe),
+ ],
+ q(1129) => [
+ q(Besme),
+ ],
+ q(1130) => [
+ q(Guiberoua Bete),
+ ],
+ q(1131) => [
+ q(Blagar),
+ ],
+ q(1132) => [
+ q(Daloa Bete),
+ ],
+ q(1133) => [
+ q(Betawi),
+ ],
+ q(1134) => [
+ q(Jur Modo),
+ ],
+ q(1135) => [
+ q(Beli (Papua New Guinea)),
+ ],
+ q(1136) => [
+ q(Bena (Tanzania)),
+ ],
+ q(1137) => [
+ q(Bari),
+ ],
+ q(1138) => [
+ q(Pauri Bareli),
+ ],
+ q(1139) => [
+ q(Northern Bai),
+ ],
+ q(1140) => [
+ q(Bafut),
+ ],
+ q(1141) => [
+ q(Betaf),
+ q(Tena),
+ ],
+ q(1142) => [
+ q(Bofi),
+ ],
+ q(1143) => [
+ q(Busang Kayan),
+ ],
+ q(1144) => [
+ q(Blafe),
+ ],
+ q(1145) => [
+ q(British Sign Language),
+ ],
+ q(1146) => [
+ q(Bafanji),
+ ],
+ q(1147) => [
+ q(Ban Khor Sign Language),
+ ],
+ q(1148) => [
+ q(Banda-Ndele),
+ ],
+ q(1149) => [
+ q(Mmen),
+ ],
+ q(1150) => [
+ q(Bunak),
+ ],
+ q(1151) => [
+ q(Malba Birifor),
+ ],
+ q(1152) => [
+ q(Beba),
+ ],
+ q(1153) => [
+ q(Badaga),
+ ],
+ q(1154) => [
+ q(Bazigar),
+ ],
+ q(1155) => [
+ q(Southern Bai),
+ ],
+ q(1156) => [
+ q(Balti),
+ ],
+ q(1157) => [
+ q(Gahri),
+ ],
+ q(1158) => [
+ q(Bondo),
+ ],
+ q(1159) => [
+ q(Bantayanon),
+ ],
+ q(1160) => [
+ q(Bagheli),
+ ],
+ q(1161) => [
+ q(Mahasu Pahari),
+ ],
+ q(1162) => [
+ q(Gwamhi-Wuri),
+ ],
+ q(1163) => [
+ q(Bobongko),
+ ],
+ q(1164) => [
+ q(Haryanvi),
+ ],
+ q(1165) => [
+ q(Rathwi Bareli),
+ ],
+ q(1166) => [
+ q(Bauria),
+ ],
+ q(1167) => [
+ q(Bangandu),
+ ],
+ q(1168) => [
+ q(Bugun),
+ ],
+ q(1169) => [
+ q(Giangan),
+ ],
+ q(1170) => [
+ q(Bangolan),
+ ],
+ q(1171) => [
+ q(Bit),
+ q(Buxinhua),
+ ],
+ q(1172) => [
+ q(Bo (Laos)),
+ ],
+ q(1173) => [
+ q(Baga Mboteni),
+ ],
+ q(1174) => [
+ q(Western Balochi),
+ ],
+ q(1175) => [
+ q(Baga Koga),
+ ],
+ q(1176) => [
+ q(Eastern Balochi),
+ ],
+ q(1177) => [
+ q(Bagri),
+ ],
+ q(1178) => [
+ q(Bawm Chin),
+ ],
+ q(1179) => [
+ q(Tagabawa),
+ ],
+ q(1180) => [
+ q(Bughotu),
+ ],
+ q(1181) => [
+ q(Mbongno),
+ ],
+ q(1182) => [
+ q(Warkay-Bipim),
+ ],
+ q(1183) => [
+ q(Bhatri),
+ ],
+ q(1184) => [
+ q(Balkan Gagauz Turkish),
+ ],
+ q(1185) => [
+ q(Benggoi),
+ ],
+ q(1186) => [
+ q(Banggai),
+ ],
+ q(1187) => [
+ q(Bharia),
+ ],
+ q(1188) => [
+ q(Bhili),
+ ],
+ q(1189) => [
+ q(Biga),
+ ],
+ q(1190) => [
+ q(Bhadrawahi),
+ ],
+ q(1191) => [
+ q(Bhaya),
+ ],
+ q(1192) => [
+ q(Odiai),
+ ],
+ q(1193) => [
+ q(Binandere),
+ ],
+ q(1194) => [
+ q(Bukharic),
+ ],
+ q(1195) => [
+ q(Bhilali),
+ ],
+ q(1196) => [
+ q(Bahing),
+ ],
+ q(1197) => [
+ q(Bimin),
+ ],
+ q(1198) => [
+ q(Bathari),
+ ],
+ q(1199) => [
+ q(Bohtan Neo-Aramaic),
+ ],
+ q(1200) => [
+ q(Bima),
+ ],
+ q(1201) => [
+ q(Tukang Besi South),
+ ],
+ q(1202) => [
+ q(Bara Malagasy),
+ ],
+ q(1203) => [
+ q(Buwal),
+ ],
+ q(1204) => [
+ q(Bhattiyali),
+ ],
+ q(1205) => [
+ q(Bhunjia),
+ ],
+ q(1206) => [
+ q(Bahau),
+ ],
+ q(1207) => [
+ q(Biak),
+ ],
+ q(1208) => [
+ q(Bhalay),
+ ],
+ q(1209) => [
+ q(Bhele),
+ ],
+ q(1210) => [
+ q(Bada (Indonesia)),
+ ],
+ q(1211) => [
+ q(Badimaya),
+ ],
+ q(1212) => [
+ q(Bissa),
+ q(Bisa),
+ ],
+ q(1213) => [
+ q(Bikaru),
+ ],
+ q(1214) => [
+ q(Bidiyo),
+ ],
+ q(1215) => [
+ q(Bepour),
+ ],
+ q(1216) => [
+ q(Biafada),
+ ],
+ q(1217) => [
+ q(Biangai),
+ ],
+ q(1218) => [
+ q(Vaghat-Ya-Bijim-Legeri),
+ ],
+ q(1219) => [
+ q(Bile),
+ ],
+ q(1220) => [
+ q(Bimoba),
+ ],
+ q(1221) => [
+ q(Nai),
+ ],
+ q(1222) => [
+ q(Bila),
+ ],
+ q(1223) => [
+ q(Bipi),
+ ],
+ q(1224) => [
+ q(Bisorio),
+ ],
+ q(1225) => [
+ q(Berinomo),
+ ],
+ q(1226) => [
+ q(Biete),
+ ],
+ q(1227) => [
+ q(Southern Birifor),
+ ],
+ q(1228) => [
+ q(Kol (Cameroon)),
+ ],
+ q(1229) => [
+ q(Bijori),
+ ],
+ q(1230) => [
+ q(Birhor),
+ ],
+ q(1231) => [
+ q(Baloi),
+ ],
+ q(1232) => [
+ q(Budza),
+ ],
+ q(1233) => [
+ q(Banggarla),
+ ],
+ q(1234) => [
+ q(Bariji),
+ ],
+ q(1235) => [
+ q(Biao-Jiao Mien),
+ ],
+ q(1236) => [
+ q(Barzani Jewish Neo-Aramaic),
+ ],
+ q(1237) => [
+ q(Bidyogo),
+ ],
+ q(1238) => [
+ q(Bahinemo),
+ ],
+ q(1239) => [
+ q(Burji),
+ ],
+ q(1240) => [
+ q(Kanauji),
+ ],
+ q(1241) => [
+ q(Barok),
+ ],
+ q(1242) => [
+ q(Bulu (Papua New Guinea)),
+ ],
+ q(1243) => [
+ q(Bajelani),
+ ],
+ q(1244) => [
+ q(Banjar),
+ ],
+ q(1245) => [
+ q(Mid-Southern Banda),
+ ],
+ q(1246) => [
+ q(Binumarien),
+ ],
+ q(1247) => [
+ q(Bajan),
+ ],
+ q(1248) => [
+ q(Balanta-Ganja),
+ ],
+ q(1249) => [
+ q(Busuu),
+ ],
+ q(1250) => [
+ q(Bedjond),
+ ],
+ q(1251) => [
+ q(Bakwe),
+ ],
+ q(1252) => [
+ q(Banao Itneg),
+ ],
+ q(1253) => [
+ q(Bayali),
+ ],
+ q(1254) => [
+ q(Baruga),
+ ],
+ q(1255) => [
+ q(Kyak),
+ ],
+ q(1256) => [
+ q(Baka (Cameroon)),
+ ],
+ q(1257) => [
+ q(Binukid),
+ q(Talaandig),
+ ],
+ q(1258) => [
+ q(Beeke),
+ ],
+ q(1259) => [
+ q(Buraka),
+ ],
+ q(1260) => [
+ q(Bakoko),
+ ],
+ q(1261) => [
+ q(Baki),
+ ],
+ q(1262) => [
+ q(Pande),
+ ],
+ q(1263) => [
+ q(Brokskat),
+ ],
+ q(1264) => [
+ q(Berik),
+ ],
+ q(1265) => [
+ q(Kom (Cameroon)),
+ ],
+ q(1266) => [
+ q(Bukitan),
+ ],
+ q(1267) => [
+ q(Kwa'),
+ ],
+ q(1268) => [
+ q(Boko (Democratic Republic of Congo)),
+ ],
+ q(1269) => [
+ q(Bakairi),
+ ],
+ q(1270) => [
+ q(Bakumpai),
+ ],
+ q(1271) => [
+ q(Northern Sorsoganon),
+ ],
+ q(1272) => [
+ q(Boloki),
+ ],
+ q(1273) => [
+ q(Buhid),
+ ],
+ q(1274) => [
+ q(Bekwarra),
+ ],
+ q(1275) => [
+ q(Bekwel),
+ ],
+ q(1276) => [
+ q(Baikeno),
+ ],
+ q(1277) => [
+ q(Bokyi),
+ ],
+ q(1278) => [
+ q(Bungku),
+ ],
+ q(1279) => [
+ q(Bilua),
+ ],
+ q(1280) => [
+ q(Bella Coola),
+ ],
+ q(1281) => [
+ q(Bolango),
+ ],
+ q(1282) => [
+ q(Balanta-Kentohe),
+ ],
+ q(1283) => [
+ q(Buol),
+ ],
+ q(1284) => [
+ q(Balau),
+ ],
+ q(1285) => [
+ q(Kuwaa),
+ ],
+ q(1286) => [
+ q(Bolia),
+ ],
+ q(1287) => [
+ q(Bolongan),
+ ],
+ q(1288) => [
+ q(Pa'o Karen),
+ q(Pa'O),
+ ],
+ q(1289) => [
+ q(Biloxi),
+ ],
+ q(1290) => [
+ q(Beli (Sudan)),
+ ],
+ q(1291) => [
+ q(Southern Catanduanes Bikol),
+ ],
+ q(1292) => [
+ q(Anii),
+ ],
+ q(1293) => [
+ q(Blablanga),
+ ],
+ q(1294) => [
+ q(Baluan-Pam),
+ ],
+ q(1295) => [
+ q(Blang),
+ ],
+ q(1296) => [
+ q(Balaesang),
+ ],
+ q(1297) => [
+ q(Tai Dam),
+ ],
+ q(1298) => [
+ q(Bolo),
+ ],
+ q(1299) => [
+ q(Balangao),
+ ],
+ q(1300) => [
+ q(Mag-Indi Ayta),
+ ],
+ q(1301) => [
+ q(Notre),
+ ],
+ q(1302) => [
+ q(Balantak),
+ ],
+ q(1303) => [
+ q(Lame),
+ ],
+ q(1304) => [
+ q(Bembe),
+ ],
+ q(1305) => [
+ q(Biem),
+ ],
+ q(1306) => [
+ q(Baga Manduri),
+ ],
+ q(1307) => [
+ q(Limassa),
+ ],
+ q(1308) => [
+ q(Bom),
+ ],
+ q(1309) => [
+ q(Bamwe),
+ ],
+ q(1310) => [
+ q(Kein),
+ ],
+ q(1311) => [
+ q(Bagirmi),
+ ],
+ q(1312) => [
+ q(Bote-Majhi),
+ ],
+ q(1313) => [
+ q(Ghayavi),
+ ],
+ q(1314) => [
+ q(Bomboli),
+ ],
+ q(1315) => [
+ q(Northern Betsimisaraka Malagasy),
+ ],
+ q(1316) => [
+ q(Bina (Papua New Guinea)),
+ ],
+ q(1317) => [
+ q(Bambalang),
+ ],
+ q(1318) => [
+ q(Bulgebi),
+ ],
+ q(1319) => [
+ q(Bomu),
+ ],
+ q(1320) => [
+ q(Muinane),
+ ],
+ q(1321) => [
+ q(Bilma Kanuri),
+ ],
+ q(1322) => [
+ q(Biao Mon),
+ ],
+ q(1323) => [
+ q(Somba-Siawari),
+ ],
+ q(1324) => [
+ q(Bum),
+ ],
+ q(1325) => [
+ q(Bomwali),
+ ],
+ q(1326) => [
+ q(Baimak),
+ ],
+ q(1327) => [
+ q(Bemba (Democratic Republic of Congo)),
+ ],
+ q(1328) => [
+ q(Baramu),
+ ],
+ q(1329) => [
+ q(Bonerate),
+ ],
+ q(1330) => [
+ q(Bookan),
+ ],
+ q(1331) => [
+ q(Bontok),
+ ],
+ q(1332) => [
+ q(Banda (Indonesia)),
+ ],
+ q(1333) => [
+ q(Bintauna),
+ ],
+ q(1334) => [
+ q(Masiwang),
+ ],
+ q(1335) => [
+ q(Benga),
+ ],
+ q(1336) => [
+ q(Bangi),
+ ],
+ q(1337) => [
+ q(Eastern Tawbuid),
+ ],
+ q(1338) => [
+ q(Bierebo),
+ ],
+ q(1339) => [
+ q(Boon),
+ ],
+ q(1340) => [
+ q(Batanga),
+ ],
+ q(1341) => [
+ q(Bunun),
+ ],
+ q(1342) => [
+ q(Bantoanon),
+ ],
+ q(1343) => [
+ q(Bola),
+ ],
+ q(1344) => [
+ q(Bantik),
+ ],
+ q(1345) => [
+ q(Butmas-Tur),
+ ],
+ q(1346) => [
+ q(Bundeli),
+ ],
+ q(1347) => [
+ q(Bentong),
+ ],
+ q(1348) => [
+ q(Bonerif),
+ q(Beneraf),
+ q(Edwas),
+ ],
+ q(1349) => [
+ q(Bisis),
+ ],
+ q(1350) => [
+ q(Bangubangu),
+ ],
+ q(1351) => [
+ q(Bintulu),
+ ],
+ q(1352) => [
+ q(Beezen),
+ ],
+ q(1353) => [
+ q(Bora),
+ ],
+ q(1354) => [
+ q(Aweer),
+ ],
+ q(1355) => [
+ q(Mundabli),
+ ],
+ q(1356) => [
+ q(Bolon),
+ ],
+ q(1357) => [
+ q(Bamako Sign Language),
+ ],
+ q(1358) => [
+ q(Boma),
+ ],
+ q(1359) => [
+ q(Barbareno),
+ ],
+ q(1360) => [
+ q(Anjam),
+ ],
+ q(1361) => [
+ q(Bonjo),
+ ],
+ q(1362) => [
+ q(Bole),
+ ],
+ q(1363) => [
+ q(Berom),
+ ],
+ q(1364) => [
+ q(Bine),
+ ],
+ q(1365) => [
+ q(Tiemacewe Bozo),
+ ],
+ q(1366) => [
+ q(Bonkiman),
+ ],
+ q(1367) => [
+ q(Bogaya),
+ ],
+ q(1368) => [
+ q(Bororo),
+ ],
+ q(1369) => [
+ q(Bongo),
+ ],
+ q(1370) => [
+ q(Bondei),
+ ],
+ q(1371) => [
+ q(Tuwuli),
+ ],
+ q(1372) => [
+ q(Rema),
+ ],
+ q(1373) => [
+ q(Buamu),
+ ],
+ q(1374) => [
+ q(Bodo (Central African Republic)),
+ ],
+ q(1375) => [
+ q(Tieyaxo Bozo),
+ ],
+ q(1376) => [
+ q(Dakaka),
+ ],
+ q(1377) => [
+ q(Barbacoas),
+ ],
+ q(1378) => [
+ q(Banda-Banda),
+ ],
+ q(1379) => [
+ q(Bonggo),
+ ],
+ q(1380) => [
+ q(Botlikh),
+ ],
+ q(1381) => [
+ q(Bagupi),
+ ],
+ q(1382) => [
+ q(Binji),
+ ],
+ q(1383) => [
+ q(Orowe),
+ ],
+ q(1384) => [
+ q(Broome Pearling Lugger Pidgin),
+ ],
+ q(1385) => [
+ q(Biyom),
+ ],
+ q(1386) => [
+ q(Dzao Min),
+ ],
+ q(1387) => [
+ q(Anasi),
+ ],
+ q(1388) => [
+ q(Kaure),
+ ],
+ q(1389) => [
+ q(Banda Malay),
+ ],
+ q(1390) => [
+ q(Koronadal Blaan),
+ ],
+ q(1391) => [
+ q(Sarangani Blaan),
+ ],
+ q(1392) => [
+ q(Barrow Point),
+ ],
+ q(1393) => [
+ q(Bongu),
+ ],
+ q(1394) => [
+ q(Bian Marind),
+ ],
+ q(1395) => [
+ q(Bo (Papua New Guinea)),
+ ],
+ q(1396) => [
+ q(Palya Bareli),
+ ],
+ q(1397) => [
+ q(Bishnupriya),
+ ],
+ q(1398) => [
+ q(Bilba),
+ ],
+ q(1399) => [
+ q(Tchumbuli),
+ ],
+ q(1400) => [
+ q(Bagusa),
+ ],
+ q(1401) => [
+ q(Boko (Benin)),
+ ],
+ q(1402) => [
+ q(Bung),
+ ],
+ q(1403) => [
+ q(Baga Kaloum),
+ ],
+ q(1404) => [
+ q(Bago-Kusuntu),
+ ],
+ q(1405) => [
+ q(Baima),
+ ],
+ q(1406) => [
+ q(Bakhtiari),
+ ],
+ q(1407) => [
+ q(Bandial),
+ ],
+ q(1408) => [
+ q(Banda-Mbres),
+ ],
+ q(1409) => [
+ q(Bilakura),
+ ],
+ q(1410) => [
+ q(Wumboko),
+ ],
+ q(1411) => [
+ q(Bulgarian Sign Language),
+ ],
+ q(1412) => [
+ q(Balo),
+ ],
+ q(1413) => [
+ q(Busa),
+ ],
+ q(1414) => [
+ q(Biritai),
+ ],
+ q(1415) => [
+ q(Burusu),
+ ],
+ q(1416) => [
+ q(Bosngun),
+ ],
+ q(1417) => [
+ q(Bamukumbit),
+ ],
+ q(1418) => [
+ q(Boguru),
+ ],
+ q(1419) => [
+ q(Koro Wachi),
+ q(Begbere-Ejar),
+ ],
+ q(1420) => [
+ q(Buru (Nigeria)),
+ ],
+ q(1421) => [
+ q(Baangi),
+ ],
+ q(1422) => [
+ q(Bengkala Sign Language),
+ ],
+ q(1423) => [
+ q(Bakaka),
+ ],
+ q(1424) => [
+ q(Lave),
+ ],
+ q(1425) => [
+ q(Berbice Creole Dutch),
+ ],
+ q(1426) => [
+ q(Baraamu),
+ ],
+ q(1427) => [
+ q(Bera),
+ ],
+ q(1428) => [
+ q(Baure),
+ ],
+ q(1429) => [
+ q(Brahui),
+ ],
+ q(1430) => [
+ q(Mokpwe),
+ ],
+ q(1431) => [
+ q(Bieria),
+ ],
+ q(1432) => [
+ q(Birked),
+ ],
+ q(1433) => [
+ q(Birwa),
+ ],
+ q(1434) => [
+ q(Barambu),
+ ],
+ q(1435) => [
+ q(Boruca),
+ ],
+ q(1436) => [
+ q(Brokkat),
+ ],
+ q(1437) => [
+ q(Barapasi),
+ ],
+ q(1438) => [
+ q(Breri),
+ ],
+ q(1439) => [
+ q(Birao),
+ ],
+ q(1440) => [
+ q(Baras),
+ ],
+ q(1441) => [
+ q(Bitare),
+ ],
+ q(1442) => [
+ q(Eastern Bru),
+ ],
+ q(1443) => [
+ q(Western Bru),
+ ],
+ q(1444) => [
+ q(Bellari),
+ ],
+ q(1445) => [
+ q(Bodo (India)),
+ ],
+ q(1446) => [
+ q(Burui),
+ ],
+ q(1447) => [
+ q(Bilbil),
+ ],
+ q(1448) => [
+ q(Abinomn),
+ ],
+ q(1449) => [
+ q(Brunei Bisaya),
+ ],
+ q(1450) => [
+ q(Bassari),
+ q(Oniyan),
+ ],
+ q(1451) => [
+ q(Wushi),
+ ],
+ q(1452) => [
+ q(Bauchi),
+ ],
+ q(1453) => [
+ q(Bashkardi),
+ ],
+ q(1454) => [
+ q(Kati),
+ ],
+ q(1455) => [
+ q(Bassossi),
+ ],
+ q(1456) => [
+ q(Bangwinji),
+ ],
+ q(1457) => [
+ q(Burushaski),
+ ],
+ q(1458) => [
+ q(Basa-Gumna),
+ ],
+ q(1459) => [
+ q(Busami),
+ ],
+ q(1460) => [
+ q(Barasana-Eduria),
+ ],
+ q(1461) => [
+ q(Buso),
+ ],
+ q(1462) => [
+ q(Baga Sitemu),
+ ],
+ q(1463) => [
+ q(Bassa),
+ ],
+ q(1464) => [
+ q(Bassa-Kontagora),
+ ],
+ q(1465) => [
+ q(Akoose),
+ ],
+ q(1466) => [
+ q(Basketo),
+ ],
+ q(1467) => [
+ q(Bahonsuai),
+ ],
+ q(1468) => [
+ q(Baga Sobane),
+ ],
+ q(1469) => [
+ q(Baiso),
+ ],
+ q(1470) => [
+ q(Yangkam),
+ ],
+ q(1471) => [
+ q(Sabah Bisaya),
+ ],
+ q(1472) => [
+ q(Bata),
+ ],
+ q(1473) => [
+ q(Bati (Cameroon)),
+ ],
+ q(1474) => [
+ q(Batak Dairi),
+ ],
+ q(1475) => [
+ q(Gamo-Ningi),
+ ],
+ q(1476) => [
+ q(Birgit),
+ ],
+ q(1477) => [
+ q(Gagnoa Bete),
+ ],
+ q(1478) => [
+ q(Biatah Bidayuh),
+ ],
+ q(1479) => [
+ q(Burate),
+ ],
+ q(1480) => [
+ q(Bacanese Malay),
+ ],
+ q(1481) => [
+ q(Bhatola),
+ ],
+ q(1482) => [
+ q(Batak Mandailing),
+ ],
+ q(1483) => [
+ q(Ratagnon),
+ ],
+ q(1484) => [
+ q(Rinconada Bikol),
+ ],
+ q(1485) => [
+ q(Budibud),
+ ],
+ q(1486) => [
+ q(Batek),
+ ],
+ q(1487) => [
+ q(Baetora),
+ ],
+ q(1488) => [
+ q(Batak Simalungun),
+ ],
+ q(1489) => [
+ q(Bete-Bendi),
+ ],
+ q(1490) => [
+ q(Batu),
+ ],
+ q(1491) => [
+ q(Bateri),
+ ],
+ q(1492) => [
+ q(Butuanon),
+ ],
+ q(1493) => [
+ q(Batak Karo),
+ ],
+ q(1494) => [
+ q(Bobot),
+ ],
+ q(1495) => [
+ q(Batak Alas-Kluet),
+ ],
+ q(1496) => [
+ q(Bua),
+ ],
+ q(1497) => [
+ q(Bushi),
+ ],
+ q(1498) => [
+ q(Ntcham),
+ ],
+ q(1499) => [
+ q(Beothuk),
+ ],
+ q(1500) => [
+ q(Bushoong),
+ ],
+ q(1501) => [
+ q(Younuo Bunu),
+ ],
+ q(1502) => [
+ q(Bongili),
+ ],
+ q(1503) => [
+ q(Basa-Gurmana),
+ ],
+ q(1504) => [
+ q(Bugawac),
+ ],
+ q(1505) => [
+ q(Bulu (Cameroon)),
+ ],
+ q(1506) => [
+ q(Sherbro),
+ ],
+ q(1507) => [
+ q(Terei),
+ ],
+ q(1508) => [
+ q(Busoa),
+ ],
+ q(1509) => [
+ q(Brem),
+ ],
+ q(1510) => [
+ q(Bokobaru),
+ ],
+ q(1511) => [
+ q(Bungain),
+ ],
+ q(1512) => [
+ q(Budu),
+ ],
+ q(1513) => [
+ q(Bun),
+ ],
+ q(1514) => [
+ q(Bubi),
+ ],
+ q(1515) => [
+ q(Boghom),
+ ],
+ q(1516) => [
+ q(Bullom So),
+ ],
+ q(1517) => [
+ q(Bukwen),
+ ],
+ q(1518) => [
+ q(Barein),
+ ],
+ q(1519) => [
+ q(Bube),
+ ],
+ q(1520) => [
+ q(Baelelea),
+ ],
+ q(1521) => [
+ q(Baeggu),
+ ],
+ q(1522) => [
+ q(Berau Malay),
+ ],
+ q(1523) => [
+ q(Boor),
+ ],
+ q(1524) => [
+ q(Bonkeng),
+ ],
+ q(1525) => [
+ q(Bure),
+ ],
+ q(1526) => [
+ q(Belanda Viri),
+ ],
+ q(1527) => [
+ q(Baan),
+ ],
+ q(1528) => [
+ q(Bukat),
+ ],
+ q(1529) => [
+ q(Bolivian Sign Language),
+ ],
+ q(1530) => [
+ q(Bamunka),
+ ],
+ q(1531) => [
+ q(Buna),
+ ],
+ q(1532) => [
+ q(Bolgo),
+ ],
+ q(1533) => [
+ q(Birri),
+ ],
+ q(1534) => [
+ q(Burarra),
+ ],
+ q(1535) => [
+ q(Bati (Indonesia)),
+ ],
+ q(1536) => [
+ q(Bukit Malay),
+ ],
+ q(1537) => [
+ q(Baniva),
+ ],
+ q(1538) => [
+ q(Boga),
+ ],
+ q(1539) => [
+ q(Dibole),
+ ],
+ q(1540) => [
+ q(Baybayanon),
+ ],
+ q(1541) => [
+ q(Bauzi),
+ ],
+ q(1542) => [
+ q(Bwatoo),
+ ],
+ q(1543) => [
+ q(Namosi-Naitasiri-Serua),
+ ],
+ q(1544) => [
+ q(Bwile),
+ ],
+ q(1545) => [
+ q(Bwaidoka),
+ ],
+ q(1546) => [
+ q(Bwe Karen),
+ ],
+ q(1547) => [
+ q(Boselewa),
+ ],
+ q(1548) => [
+ q(Barwe),
+ ],
+ q(1549) => [
+ q(Bishuo),
+ ],
+ q(1550) => [
+ q(Baniwa),
+ ],
+ q(1551) => [
+ q(Laa Laa Bwamu),
+ ],
+ q(1552) => [
+ q(Bauwaki),
+ ],
+ q(1553) => [
+ q(Bwela),
+ ],
+ q(1554) => [
+ q(Biwat),
+ ],
+ q(1555) => [
+ q(Wunai Bunu),
+ ],
+ q(1556) => [
+ q(Boro (Ethiopia)),
+ q(Borna (Ethiopia)),
+ ],
+ q(1557) => [
+ q(Mandobo Bawah),
+ ],
+ q(1558) => [
+ q(Southern Bobo Madare),
+ ],
+ q(1559) => [
+ q(Bura-Pabir),
+ ],
+ q(1560) => [
+ q(Bomboma),
+ ],
+ q(1561) => [
+ q(Bafaw-Balong),
+ ],
+ q(1562) => [
+ q(Buli (Ghana)),
+ ],
+ q(1563) => [
+ q(Bwa),
+ ],
+ q(1564) => [
+ q(Bu-Nao Bunu),
+ ],
+ q(1565) => [
+ q(Cwi Bwamu),
+ ],
+ q(1566) => [
+ q(Bwisi),
+ ],
+ q(1567) => [
+ q(Bauro),
+ ],
+ q(1568) => [
+ q(Belanda Bor),
+ ],
+ q(1569) => [
+ q(Molengue),
+ ],
+ q(1570) => [
+ q(Pela),
+ ],
+ q(1571) => [
+ q(Birale),
+ ],
+ q(1572) => [
+ q(Bilur),
+ ],
+ q(1573) => [
+ q(Bangala),
+ ],
+ q(1574) => [
+ q(Buhutu),
+ ],
+ q(1575) => [
+ q(Pirlatapa),
+ ],
+ q(1576) => [
+ q(Bayungu),
+ ],
+ q(1577) => [
+ q(Bukusu),
+ q(Lubukusu),
+ ],
+ q(1578) => [
+ q(Jalkunan),
+ ],
+ q(1579) => [
+ q(Mongolia Buriat),
+ ],
+ q(1580) => [
+ q(Burduna),
+ ],
+ q(1581) => [
+ q(Barikanchi),
+ ],
+ q(1582) => [
+ q(Bebil),
+ ],
+ q(1583) => [
+ q(Beele),
+ ],
+ q(1584) => [
+ q(Russia Buriat),
+ ],
+ q(1585) => [
+ q(Busam),
+ ],
+ q(1586) => [
+ q(China Buriat),
+ ],
+ q(1587) => [
+ q(Berakou),
+ ],
+ q(1588) => [
+ q(Bankagooma),
+ ],
+ q(1589) => [
+ q(Borna (Democratic Republic of Congo)),
+ ],
+ q(1590) => [
+ q(Binahari),
+ ],
+ q(1591) => [
+ q(Batak),
+ ],
+ q(1592) => [
+ q(Bikya),
+ ],
+ q(1593) => [
+ q(Ubaghara),
+ ],
+ q(1594) => [
+ q(Benyadu'),
+ ],
+ q(1595) => [
+ q(Pouye),
+ ],
+ q(1596) => [
+ q(Bete),
+ ],
+ q(1597) => [
+ q(Baygo),
+ ],
+ q(1598) => [
+ q(Bhujel),
+ ],
+ q(1599) => [
+ q(Buyu),
+ ],
+ q(1600) => [
+ q(Bina (Nigeria)),
+ ],
+ q(1601) => [
+ q(Biao),
+ ],
+ q(1602) => [
+ q(Bayono),
+ ],
+ q(1603) => [
+ q(Bidyara),
+ ],
+ q(1604) => [
+ q(Biyo),
+ ],
+ q(1605) => [
+ q(Bumaji),
+ ],
+ q(1606) => [
+ q(Basay),
+ ],
+ q(1607) => [
+ q(Baruya),
+ q(Yipma),
+ ],
+ q(1608) => [
+ q(Burak),
+ ],
+ q(1609) => [
+ q(Berti),
+ ],
+ q(1610) => [
+ q(Medumba),
+ ],
+ q(1611) => [
+ q(Belhariya),
+ ],
+ q(1612) => [
+ q(Qaqet),
+ ],
+ q(1613) => [
+ q(Buya),
+ ],
+ q(1614) => [
+ q(Banaro),
+ ],
+ q(1615) => [
+ q(Bandi),
+ ],
+ q(1616) => [
+ q(Andio),
+ ],
+ q(1617) => [
+ q(Southern Betsimisaraka Malagasy),
+ ],
+ q(1618) => [
+ q(Bribri),
+ ],
+ q(1619) => [
+ q(Jenaama Bozo),
+ ],
+ q(1620) => [
+ q(Boikin),
+ ],
+ q(1621) => [
+ q(Babuza),
+ ],
+ q(1622) => [
+ q(Mapos Buang),
+ ],
+ q(1623) => [
+ q(Bisu),
+ ],
+ q(1624) => [
+ q(Belize Kriol English),
+ ],
+ q(1625) => [
+ q(Nicaragua Creole English),
+ ],
+ q(1626) => [
+ q(Boano (Sulawesi)),
+ ],
+ q(1627) => [
+ q(Bolondo),
+ ],
+ q(1628) => [
+ q(Boano (Maluku)),
+ ],
+ q(1629) => [
+ q(Bozaba),
+ ],
+ q(1630) => [
+ q(Kemberano),
+ ],
+ q(1631) => [
+ q(Buli (Indonesia)),
+ ],
+ q(1632) => [
+ q(Biri),
+ ],
+ q(1633) => [
+ q(Brazilian Sign Language),
+ ],
+ q(1634) => [
+ q(Brithenig),
+ ],
+ q(1635) => [
+ q(Burmeso),
+ ],
+ q(1636) => [
+ q(Bebe),
+ ],
+ q(1637) => [
+ q(Basa (Nigeria)),
+ ],
+ q(1638) => [
+ q(Kelengazxo Bozo),
+ ],
+ q(1639) => [
+ q(Obanliku),
+ ],
+ q(1640) => [
+ q(Evant),
+ ],
+ q(1641) => [
+ q(Chorti),
+ ],
+ q(1642) => [
+ q(Garifuna),
+ ],
+ q(1643) => [
+ q(Chuj),
+ ],
+ q(1644) => [
+ q(Lehar),
+ q(Laalaa),
+ ],
+ q(1645) => [
+ q(Southern Carrier),
+ ],
+ q(1646) => [
+ q(Nivacle),
+ ],
+ q(1647) => [
+ q(Cahuarano),
+ ],
+ q(1648) => [
+ q(Chane),
+ ],
+ q(1649) => [
+ q(Kaqchikel),
+ q(Cakchiquel),
+ ],
+ q(1650) => [
+ q(Carolinian),
+ ],
+ q(1651) => [
+ q(Cemuhi),
+ ],
+ q(1652) => [
+ q(Chambri),
+ ],
+ q(1653) => [
+ q(Chacobo),
+ ],
+ q(1654) => [
+ q(Chipaya),
+ ],
+ q(1655) => [
+ q(Car Nicobarese),
+ ],
+ q(1656) => [
+ q(Tsimane),
+ ],
+ q(1657) => [
+ q(Cavinena),
+ ],
+ q(1658) => [
+ q(Callawalla),
+ ],
+ q(1659) => [
+ q(Chiquitano),
+ ],
+ q(1660) => [
+ q(Cayuga),
+ ],
+ q(1661) => [
+ q(Canichana),
+ ],
+ q(1662) => [
+ q(Cabiyari),
+ ],
+ q(1663) => [
+ q(Carapana),
+ ],
+ q(1664) => [
+ q(Carijona),
+ ],
+ q(1665) => [
+ q(Chipiajes),
+ ],
+ q(1666) => [
+ q(Chimila),
+ ],
+ q(1667) => [
+ q(Cagua),
+ ],
+ q(1668) => [
+ q(Chachi),
+ ],
+ q(1669) => [
+ q(Ede Cabe),
+ ],
+ q(1670) => [
+ q(Chavacano),
+ ],
+ q(1671) => [
+ q(Bualkhaw Chin),
+ ],
+ q(1672) => [
+ q(Nyahkur),
+ ],
+ q(1673) => [
+ q(Izora),
+ ],
+ q(1674) => [
+ q(Cashibo-Cacataibo),
+ ],
+ q(1675) => [
+ q(Cashinahua),
+ ],
+ q(1676) => [
+ q(Chayahuita),
+ ],
+ q(1677) => [
+ q(Candoshi-Shapra),
+ ],
+ q(1678) => [
+ q(Cacua),
+ ],
+ q(1679) => [
+ q(Kinabalian),
+ ],
+ q(1680) => [
+ q(Carabayo),
+ ],
+ q(1681) => [
+ q(Cauca),
+ ],
+ q(1682) => [
+ q(Chamicuro),
+ ],
+ q(1683) => [
+ q(Cafundo Creole),
+ ],
+ q(1684) => [
+ q(Chopi),
+ ],
+ q(1685) => [
+ q(Samba Daka),
+ ],
+ q(1686) => [
+ q(Atsam),
+ ],
+ q(1687) => [
+ q(Kasanga),
+ ],
+ q(1688) => [
+ q(Cutchi-Swahili),
+ ],
+ q(1689) => [
+ q(Malaccan Creole Malay),
+ ],
+ q(1690) => [
+ q(Comaltepec Chinantec),
+ ],
+ q(1691) => [
+ q(Chakma),
+ ],
+ q(1692) => [
+ q(Cacaopera),
+ ],
+ q(1693) => [
+ q(Choni),
+ ],
+ q(1694) => [
+ q(Chenchu),
+ ],
+ q(1695) => [
+ q(Chiru),
+ ],
+ q(1696) => [
+ q(Chamari),
+ ],
+ q(1697) => [
+ q(Chambeali),
+ ],
+ q(1698) => [
+ q(Chodri),
+ ],
+ q(1699) => [
+ q(Churahi),
+ ],
+ q(1700) => [
+ q(Chepang),
+ ],
+ q(1701) => [
+ q(Chaudangsi),
+ ],
+ q(1702) => [
+ q(Min Dong Chinese),
+ ],
+ q(1703) => [
+ q(Cinda-Regi-Tiyal),
+ ],
+ q(1704) => [
+ q(Chadian Sign Language),
+ ],
+ q(1705) => [
+ q(Chadong),
+ ],
+ q(1706) => [
+ q(Koda),
+ ],
+ q(1707) => [
+ q(Lower Chehalis),
+ ],
+ q(1708) => [
+ q(Chamacoco),
+ ],
+ q(1709) => [
+ q(Eastern Khumi Chin),
+ ],
+ q(1710) => [
+ q(Cen),
+ ],
+ q(1711) => [
+ q(Centuum),
+ ],
+ q(1712) => [
+ q(Dijim-Bwilim),
+ ],
+ q(1713) => [
+ q(Cara),
+ ],
+ q(1714) => [
+ q(Como Karim),
+ ],
+ q(1715) => [
+ q(Falam Chin),
+ ],
+ q(1716) => [
+ q(Changriwa),
+ ],
+ q(1717) => [
+ q(Kagayanen),
+ ],
+ q(1718) => [
+ q(Chiga),
+ ],
+ q(1719) => [
+ q(Chocangacakha),
+ ],
+ q(1720) => [
+ q(Catawba),
+ ],
+ q(1721) => [
+ q(Highland Oaxaca Chontal),
+ ],
+ q(1722) => [
+ q(Tabasco Chontal),
+ ],
+ q(1723) => [
+ q(Chinook),
+ ],
+ q(1724) => [
+ q(Ojitlan Chinantec),
+ ],
+ q(1725) => [
+ q(Cahuilla),
+ ],
+ q(1726) => [
+ q(Quiotepec Chinantec),
+ ],
+ q(1727) => [
+ q(Cholon),
+ ],
+ q(1728) => [
+ q(Chuwabu),
+ ],
+ q(1729) => [
+ q(Chantyal),
+ ],
+ q(1730) => [
+ q(Ozumacin Chinantec),
+ ],
+ q(1731) => [
+ q(Cia-Cia),
+ ],
+ q(1732) => [
+ q(Ci Gbe),
+ ],
+ q(1733) => [
+ q(Chickasaw),
+ ],
+ q(1734) => [
+ q(Chimariko),
+ ],
+ q(1735) => [
+ q(Cineni),
+ ],
+ q(1736) => [
+ q(Chinali),
+ ],
+ q(1737) => [
+ q(Chitkuli Kinnauri),
+ ],
+ q(1738) => [
+ q(Cimbrian),
+ ],
+ q(1739) => [
+ q(Cinta Larga),
+ ],
+ q(1740) => [
+ q(Chiapanec),
+ ],
+ q(1741) => [
+ q(Tiri),
+ ],
+ q(1742) => [
+ q(Chippewa),
+ ],
+ q(1743) => [
+ q(Chaima),
+ ],
+ q(1744) => [
+ q(Western Cham),
+ ],
+ q(1745) => [
+ q(Chru),
+ ],
+ q(1746) => [
+ q(Upper Chehalis),
+ ],
+ q(1747) => [
+ q(Chamalal),
+ ],
+ q(1748) => [
+ q(Chokwe),
+ ],
+ q(1749) => [
+ q(Eastern Cham),
+ ],
+ q(1750) => [
+ q(Chenapian),
+ ],
+ q(1751) => [
+ q(Asheninka Pajonal),
+ ],
+ q(1752) => [
+ q(Cabecar),
+ ],
+ q(1753) => [
+ q(Shor),
+ ],
+ q(1754) => [
+ q(Chuave),
+ ],
+ q(1755) => [
+ q(Jinyu Chinese),
+ ],
+ q(1756) => [
+ q(Central Kurdish),
+ ],
+ q(1757) => [
+ q(Chak),
+ ],
+ q(1758) => [
+ q(Cibak),
+ ],
+ q(1759) => [
+ q(Anufo),
+ ],
+ q(1760) => [
+ q(Kajakse),
+ ],
+ q(1761) => [
+ q(Kairak),
+ ],
+ q(1762) => [
+ q(Tayo),
+ ],
+ q(1763) => [
+ q(Chukot),
+ ],
+ q(1764) => [
+ q(Koasati),
+ ],
+ q(1765) => [
+ q(Kavalan),
+ ],
+ q(1766) => [
+ q(Caka),
+ ],
+ q(1767) => [
+ q(Cakfem-Mushere),
+ ],
+ q(1768) => [
+ q(Cakchiquel-Quiche Mixed Language),
+ ],
+ q(1769) => [
+ q(Ron),
+ ],
+ q(1770) => [
+ q(Chilcotin),
+ ],
+ q(1771) => [
+ q(Chaldean Neo-Aramaic),
+ ],
+ q(1772) => [
+ q(Lealao Chinantec),
+ ],
+ q(1773) => [
+ q(Chilisso),
+ ],
+ q(1774) => [
+ q(Chakali),
+ ],
+ q(1775) => [
+ q(Laitu Chin),
+ ],
+ q(1776) => [
+ q(Idu-Mishmi),
+ ],
+ q(1777) => [
+ q(Chala),
+ ],
+ q(1778) => [
+ q(Clallam),
+ ],
+ q(1779) => [
+ q(Lowland Oaxaca Chontal),
+ ],
+ q(1780) => [
+ q(Lautu Chin),
+ ],
+ q(1781) => [
+ q(Caluyanun),
+ ],
+ q(1782) => [
+ q(Chulym),
+ ],
+ q(1783) => [
+ q(Eastern Highland Chatino),
+ ],
+ q(1784) => [
+ q(Maa),
+ ],
+ q(1785) => [
+ q(Cerma),
+ ],
+ q(1786) => [
+ q(Classical Mongolian),
+ ],
+ q(1787) => [
+ q(Embera-Chami),
+ ],
+ q(1788) => [
+ q(Campalagian),
+ ],
+ q(1789) => [
+ q(Michigamea),
+ ],
+ q(1790) => [
+ q(Mandarin Chinese),
+ ],
+ q(1791) => [
+ q(Central Mnong),
+ ],
+ q(1792) => [
+ q(Mro-Khimi Chin),
+ ],
+ q(1793) => [
+ q(Messapic),
+ ],
+ q(1794) => [
+ q(Camtho),
+ ],
+ q(1795) => [
+ q(Changthang),
+ ],
+ q(1796) => [
+ q(Chinbon Chin),
+ ],
+ q(1797) => [
+ q(Coong),
+ ],
+ q(1798) => [
+ q(Northern Qiang),
+ ],
+ q(1799) => [
+ q(Haka Chin),
+ ],
+ q(1800) => [
+ q(Ashaninka),
+ ],
+ q(1801) => [
+ q(Khumi Chin),
+ ],
+ q(1802) => [
+ q(Lalana Chinantec),
+ ],
+ q(1803) => [
+ q(Con),
+ ],
+ q(1804) => [
+ q(Central Asmat),
+ ],
+ q(1805) => [
+ q(Tepetotutla Chinantec),
+ ],
+ q(1806) => [
+ q(Chenoua),
+ ],
+ q(1807) => [
+ q(Ngawn Chin),
+ ],
+ q(1808) => [
+ q(Middle Cornish),
+ ],
+ q(1809) => [
+ q(Cocos Islands Malay),
+ ],
+ q(1810) => [
+ q(Chicomuceltec),
+ ],
+ q(1811) => [
+ q(Cocopa),
+ ],
+ q(1812) => [
+ q(Cocama-Cocamilla),
+ ],
+ q(1813) => [
+ q(Koreguaje),
+ ],
+ q(1814) => [
+ q(Colorado),
+ ],
+ q(1815) => [
+ q(Chong),
+ ],
+ q(1816) => [
+ q(Chonyi-Dzihana-Kauma),
+ q(Chichonyi-Chidzihana-Chikauma),
+ ],
+ q(1817) => [
+ q(Cochimi),
+ ],
+ q(1818) => [
+ q(Santa Teresa Cora),
+ ],
+ q(1819) => [
+ q(Columbia-Wenatchi),
+ ],
+ q(1820) => [
+ q(Comanche),
+ ],
+ q(1821) => [
+ q(Cofan),
+ ],
+ q(1822) => [
+ q(Comox),
+ ],
+ q(1823) => [
+ q(Coquille),
+ ],
+ q(1824) => [
+ q(Caquinte),
+ ],
+ q(1825) => [
+ q(Wamey),
+ ],
+ q(1826) => [
+ q(Cao Miao),
+ ],
+ q(1827) => [
+ q(Cowlitz),
+ ],
+ q(1828) => [
+ q(Nanti),
+ ],
+ q(1829) => [
+ q(Coyaima),
+ ],
+ q(1830) => [
+ q(Chochotec),
+ ],
+ q(1831) => [
+ q(Palantla Chinantec),
+ ],
+ q(1832) => [
+ q(Ucayali-Yurua Asheninka),
+ ],
+ q(1833) => [
+ q(Ajyininka Apurucayali),
+ ],
+ q(1834) => [
+ q(Cappadocian Greek),
+ ],
+ q(1835) => [
+ q(Chinese Pidgin English),
+ ],
+ q(1836) => [
+ q(Cherepon),
+ ],
+ q(1837) => [
+ q(Capiznon),
+ ],
+ q(1838) => [
+ q(Pichis Asheninka),
+ ],
+ q(1839) => [
+ q(Pu-Xian Chinese),
+ ],
+ q(1840) => [
+ q(South Ucayali Asheninka),
+ ],
+ q(1841) => [
+ q(Chuanqiandian Cluster Miao),
+ ],
+ q(1842) => [
+ q(Chilean Quechua),
+ ],
+ q(1843) => [
+ q(Chara),
+ ],
+ q(1844) => [
+ q(Island Carib),
+ ],
+ q(1845) => [
+ q(Lonwolwol),
+ ],
+ q(1846) => [
+ q(Coeur d'Alene),
+ ],
+ q(1847) => [
+ q(Caramanta),
+ ],
+ q(1848) => [
+ q(Michif),
+ ],
+ q(1849) => [
+ q(Saotomense),
+ ],
+ q(1850) => [
+ q(Southern East Cree),
+ ],
+ q(1851) => [
+ q(Plains Cree),
+ ],
+ q(1852) => [
+ q(Northern East Cree),
+ ],
+ q(1853) => [
+ q(Moose Cree),
+ ],
+ q(1854) => [
+ q(El Nayar Cora),
+ ],
+ q(1855) => [
+ q(Crow),
+ ],
+ q(1856) => [
+ q(Iyo'wujwa Chorote),
+ ],
+ q(1857) => [
+ q(Carolina Algonquian),
+ ],
+ q(1858) => [
+ q(Seselwa Creole French),
+ ],
+ q(1859) => [
+ q(Iyojwa'ja Chorote),
+ ],
+ q(1860) => [
+ q(Chaura),
+ ],
+ q(1861) => [
+ q(Chrau),
+ ],
+ q(1862) => [
+ q(Carrier),
+ ],
+ q(1863) => [
+ q(Cori),
+ ],
+ q(1864) => [
+ q(Cruzeno),
+ ],
+ q(1865) => [
+ q(Chiltepec Chinantec),
+ ],
+ q(1866) => [
+ q(Catalan Sign Language),
+ q(Lengua de senas catalana),
+ q(Llengua de Signes Catalana),
+ ],
+ q(1867) => [
+ q(Chiangmai Sign Language),
+ ],
+ q(1868) => [
+ q(Czech Sign Language),
+ ],
+ q(1869) => [
+ q(Cuba Sign Language),
+ ],
+ q(1870) => [
+ q(Chilean Sign Language),
+ ],
+ q(1871) => [
+ q(Asho Chin),
+ ],
+ q(1872) => [
+ q(Coast Miwok),
+ ],
+ q(1873) => [
+ q(Jola-Kasa),
+ ],
+ q(1874) => [
+ q(Chinese Sign Language),
+ ],
+ q(1875) => [
+ q(Central Sierra Miwok),
+ ],
+ q(1876) => [
+ q(Colombian Sign Language),
+ ],
+ q(1877) => [
+ q(Sochiapam Chinantec),
+ q(Sochiapan Chinantec),
+ ],
+ q(1878) => [
+ q(Croatia Sign Language),
+ ],
+ q(1879) => [
+ q(Costa Rican Sign Language),
+ ],
+ q(1880) => [
+ q(Southern Ohlone),
+ ],
+ q(1881) => [
+ q(Northern Ohlone),
+ ],
+ q(1882) => [
+ q(Sumtu Chin),
+ ],
+ q(1883) => [
+ q(Swampy Cree),
+ ],
+ q(1884) => [
+ q(Siyin Chin),
+ ],
+ q(1885) => [
+ q(Coos),
+ ],
+ q(1886) => [
+ q(Tataltepec Chatino),
+ ],
+ q(1887) => [
+ q(Chetco),
+ ],
+ q(1888) => [
+ q(Tedim Chin),
+ ],
+ q(1889) => [
+ q(Tepinapa Chinantec),
+ ],
+ q(1890) => [
+ q(Chittagonian),
+ ],
+ q(1891) => [
+ q(Thaiphum Chin),
+ ],
+ q(1892) => [
+ q(Tlacoatzintepec Chinantec),
+ ],
+ q(1893) => [
+ q(Chitimacha),
+ ],
+ q(1894) => [
+ q(Chhintange),
+ ],
+ q(1895) => [
+ q(Embera-Catio),
+ ],
+ q(1896) => [
+ q(Western Highland Chatino),
+ ],
+ q(1897) => [
+ q(Northern Catanduanes Bikol),
+ ],
+ q(1898) => [
+ q(Wayanad Chetti),
+ ],
+ q(1899) => [
+ q(Chol),
+ ],
+ q(1900) => [
+ q(Zacatepec Chatino),
+ ],
+ q(1901) => [
+ q(Cua),
+ ],
+ q(1902) => [
+ q(Cubeo),
+ ],
+ q(1903) => [
+ q(Usila Chinantec),
+ ],
+ q(1904) => [
+ q(Cung),
+ ],
+ q(1905) => [
+ q(Chuka),
+ q(Gichuka),
+ ],
+ q(1906) => [
+ q(Cuiba),
+ ],
+ q(1907) => [
+ q(Mashco Piro),
+ ],
+ q(1908) => [
+ q(San Blas Kuna),
+ ],
+ q(1909) => [
+ q(Culina),
+ q(Kulina),
+ ],
+ q(1910) => [
+ q(Cumeral),
+ ],
+ q(1911) => [
+ q(Cumanagoto),
+ ],
+ q(1912) => [
+ q(Cupeno),
+ ],
+ q(1913) => [
+ q(Cun),
+ ],
+ q(1914) => [
+ q(Chhulung),
+ ],
+ q(1915) => [
+ q(Teutila Cuicatec),
+ ],
+ q(1916) => [
+ q(Tai Ya),
+ ],
+ q(1917) => [
+ q(Cuvok),
+ ],
+ q(1918) => [
+ q(Chukwa),
+ ],
+ q(1919) => [
+ q(Tepeuxila Cuicatec),
+ ],
+ q(1920) => [
+ q(Chug),
+ ],
+ q(1921) => [
+ q(Valle Nacional Chinantec),
+ ],
+ q(1922) => [
+ q(Kabwa),
+ ],
+ q(1923) => [
+ q(Maindo),
+ ],
+ q(1924) => [
+ q(Woods Cree),
+ ],
+ q(1925) => [
+ q(Kwere),
+ ],
+ q(1926) => [
+ q(Chewong),
+ q(Cheq Wong),
+ ],
+ q(1927) => [
+ q(Kuwaataay),
+ ],
+ q(1928) => [
+ q(Nopala Chatino),
+ ],
+ q(1929) => [
+ q(Cayubaba),
+ ],
+ q(1930) => [
+ q(Cuyonon),
+ ],
+ q(1931) => [
+ q(Huizhou Chinese),
+ ],
+ q(1932) => [
+ q(Knaanic),
+ ],
+ q(1933) => [
+ q(Zenzontepec Chatino),
+ ],
+ q(1934) => [
+ q(Min Zhong Chinese),
+ ],
+ q(1935) => [
+ q(Zotung Chin),
+ ],
+ q(1936) => [
+ q(Dangaleat),
+ ],
+ q(1937) => [
+ q(Dambi),
+ ],
+ q(1938) => [
+ q(Marik),
+ ],
+ q(1939) => [
+ q(Duupa),
+ ],
+ q(1940) => [
+ q(Dan),
+ ],
+ q(1941) => [
+ q(Dagbani),
+ ],
+ q(1942) => [
+ q(Gwahatike),
+ ],
+ q(1943) => [
+ q(Day),
+ ],
+ q(1944) => [
+ q(Dar Fur Daju),
+ ],
+ q(1945) => [
+ q(Dahalo),
+ ],
+ q(1946) => [
+ q(Damakawa),
+ ],
+ q(1947) => [
+ q(Daai Chin),
+ ],
+ q(1948) => [
+ q(Dandami Maria),
+ ],
+ q(1949) => [
+ q(Daho-Doo),
+ ],
+ q(1950) => [
+ q(Dar Sila Daju),
+ ],
+ q(1951) => [
+ q(Taita),
+ q(Dawida),
+ ],
+ q(1952) => [
+ q(Davawenyo),
+ ],
+ q(1953) => [
+ q(Dayi),
+ ],
+ q(1954) => [
+ q(Dao),
+ ],
+ q(1955) => [
+ q(Bangi Me),
+ ],
+ q(1956) => [
+ q(Deno),
+ ],
+ q(1957) => [
+ q(Dadiya),
+ ],
+ q(1958) => [
+ q(Dabe),
+ ],
+ q(1959) => [
+ q(Edopi),
+ ],
+ q(1960) => [
+ q(Dogul Dom Dogon),
+ ],
+ q(1961) => [
+ q(Doka),
+ ],
+ q(1962) => [
+ q(Ida'an),
+ ],
+ q(1963) => [
+ q(Dyirbal),
+ ],
+ q(1964) => [
+ q(Duguri),
+ ],
+ q(1965) => [
+ q(Duriankere),
+ ],
+ q(1966) => [
+ q(Dulbu),
+ ],
+ q(1967) => [
+ q(Duwai),
+ ],
+ q(1968) => [
+ q(Daba),
+ ],
+ q(1969) => [
+ q(Dabarre),
+ ],
+ q(1970) => [
+ q(Ben Tey Dogon),
+ ],
+ q(1971) => [
+ q(Bondum Dom Dogon),
+ ],
+ q(1972) => [
+ q(Dungu),
+ ],
+ q(1973) => [
+ q(Bankan Tey Dogon),
+ ],
+ q(1974) => [
+ q(Dibiyaso),
+ ],
+ q(1975) => [
+ q(Deccan),
+ ],
+ q(1976) => [
+ q(Negerhollands),
+ ],
+ q(1977) => [
+ q(Dadi Dadi),
+ ],
+ q(1978) => [
+ q(Dongotono),
+ ],
+ q(1979) => [
+ q(Doondo),
+ ],
+ q(1980) => [
+ q(Fataluku),
+ ],
+ q(1981) => [
+ q(West Goodenough),
+ ],
+ q(1982) => [
+ q(Jaru),
+ ],
+ q(1983) => [
+ q(Dendi (Benin)),
+ ],
+ q(1984) => [
+ q(Dido),
+ ],
+ q(1985) => [
+ q(Dhudhuroa),
+ ],
+ q(1986) => [
+ q(Donno So Dogon),
+ ],
+ q(1987) => [
+ q(Dawera-Daweloor),
+ ],
+ q(1988) => [
+ q(Dagik),
+ ],
+ q(1989) => [
+ q(Dedua),
+ ],
+ q(1990) => [
+ q(Dewoin),
+ ],
+ q(1991) => [
+ q(Dezfuli),
+ ],
+ q(1992) => [
+ q(Degema),
+ ],
+ q(1993) => [
+ q(Dehwari),
+ ],
+ q(1994) => [
+ q(Demisa),
+ ],
+ q(1995) => [
+ q(Dek),
+ ],
+ q(1996) => [
+ q(Dem),
+ ],
+ q(1997) => [
+ q(Pidgin Delaware),
+ ],
+ q(1998) => [
+ q(Dendi (Central African Republic)),
+ ],
+ q(1999) => [
+ q(Deori),
+ ],
+ q(2000) => [
+ q(Desano),
+ ],
+ q(2001) => [
+ q(Domung),
+ ],
+ q(2002) => [
+ q(Dengese),
+ ],
+ q(2003) => [
+ q(Southern Dagaare),
+ ],
+ q(2004) => [
+ q(Bunoge Dogon),
+ ],
+ q(2005) => [
+ q(Casiguran Dumagat Agta),
+ ],
+ q(2006) => [
+ q(Dagaari Dioula),
+ ],
+ q(2007) => [
+ q(Degenan),
+ ],
+ q(2008) => [
+ q(Doga),
+ ],
+ q(2009) => [
+ q(Dghwede),
+ ],
+ q(2010) => [
+ q(Northern Dagara),
+ ],
+ q(2011) => [
+ q(Dagba),
+ ],
+ q(2012) => [
+ q(Andaandi),
+ q(Dongolawi),
+ ],
+ q(2013) => [
+ q(Dagoman),
+ ],
+ q(2014) => [
+ q(Dogri (individual language)),
+ ],
+ q(2015) => [
+ q(Dogoso),
+ ],
+ q(2016) => [
+ q(Ndrag'ngith),
+ ],
+ q(2017) => [
+ q(Degaru),
+ ],
+ q(2018) => [
+ q(Daungwurrung),
+ ],
+ q(2019) => [
+ q(Doghoro),
+ ],
+ q(2020) => [
+ q(Daga),
+ ],
+ q(2021) => [
+ q(Dhundari),
+ ],
+ q(2022) => [
+ q(Dhangu),
+ ],
+ q(2023) => [
+ q(Dhimal),
+ ],
+ q(2024) => [
+ q(Dhalandji),
+ ],
+ q(2025) => [
+ q(Zemba),
+ ],
+ q(2026) => [
+ q(Dhanki),
+ ],
+ q(2027) => [
+ q(Dhodia),
+ ],
+ q(2028) => [
+ q(Dhargari),
+ ],
+ q(2029) => [
+ q(Dhaiso),
+ ],
+ q(2030) => [
+ q(Dhurga),
+ ],
+ q(2031) => [
+ q(Dehu),
+ ],
+ q(2032) => [
+ q(Dhanwar (Nepal)),
+ ],
+ q(2033) => [
+ q(Dia),
+ ],
+ q(2034) => [
+ q(South Central Dinka),
+ ],
+ q(2035) => [
+ q(Lakota Dida),
+ ],
+ q(2036) => [
+ q(Didinga),
+ ],
+ q(2037) => [
+ q(Dieri),
+ ],
+ q(2038) => [
+ q(Digo),
+ q(Chidigo),
+ ],
+ q(2039) => [
+ q(Kumiai),
+ ],
+ q(2040) => [
+ q(Dimbong),
+ ],
+ q(2041) => [
+ q(Dai),
+ ],
+ q(2042) => [
+ q(Southwestern Dinka),
+ ],
+ q(2043) => [
+ q(Dilling),
+ ],
+ q(2044) => [
+ q(Dime),
+ ],
+ q(2045) => [
+ q(Dibo),
+ ],
+ q(2046) => [
+ q(Northeastern Dinka),
+ ],
+ q(2047) => [
+ q(Dimli (individual language)),
+ ],
+ q(2048) => [
+ q(Dirim),
+ ],
+ q(2049) => [
+ q(Dimasa),
+ ],
+ q(2050) => [
+ q(Dirari),
+ ],
+ q(2051) => [
+ q(Diriku),
+ ],
+ q(2052) => [
+ q(Northwestern Dinka),
+ ],
+ q(2053) => [
+ q(Dixon Reef),
+ ],
+ q(2054) => [
+ q(Diuwe),
+ ],
+ q(2055) => [
+ q(Ding),
+ ],
+ q(2056) => [
+ q(Djadjawurrung),
+ ],
+ q(2057) => [
+ q(Djinba),
+ ],
+ q(2058) => [
+ q(Dar Daju Daju),
+ ],
+ q(2059) => [
+ q(Djamindjung),
+ ],
+ q(2060) => [
+ q(Zarma),
+ ],
+ q(2061) => [
+ q(Djangun),
+ ],
+ q(2062) => [
+ q(Djinang),
+ ],
+ q(2063) => [
+ q(Djeebbana),
+ ],
+ q(2064) => [
+ q(Eastern Maroon Creole),
+ q(Businenge Tongo),
+ q(Nenge),
+ ],
+ q(2065) => [
+ q(Djiwarli),
+ ],
+ q(2066) => [
+ q(Jamsay Dogon),
+ ],
+ q(2067) => [
+ q(Djauan),
+ ],
+ q(2068) => [
+ q(Jangkang),
+ ],
+ q(2069) => [
+ q(Djambarrpuyngu),
+ ],
+ q(2070) => [
+ q(Kapriman),
+ ],
+ q(2071) => [
+ q(Djawi),
+ ],
+ q(2072) => [
+ q(Dakpakha),
+ ],
+ q(2073) => [
+ q(Dakka),
+ ],
+ q(2074) => [
+ q(Kuijau),
+ ],
+ q(2075) => [
+ q(Southeastern Dinka),
+ ],
+ q(2076) => [
+ q(Mazagway),
+ ],
+ q(2077) => [
+ q(Dolgan),
+ ],
+ q(2078) => [
+ q(Dalmatian),
+ ],
+ q(2079) => [
+ q(Darlong),
+ ],
+ q(2080) => [
+ q(Duma),
+ ],
+ q(2081) => [
+ q(Mombo Dogon),
+ ],
+ q(2082) => [
+ q(Dimir),
+ ],
+ q(2083) => [
+ q(Madhi Madhi),
+ ],
+ q(2084) => [
+ q(Dugwor),
+ ],
+ q(2085) => [
+ q(Upper Kinabatangan),
+ ],
+ q(2086) => [
+ q(Domaaki),
+ ],
+ q(2087) => [
+ q(Dameli),
+ ],
+ q(2088) => [
+ q(Dama),
+ ],
+ q(2089) => [
+ q(Kemedzung),
+ ],
+ q(2090) => [
+ q(East Damar),
+ ],
+ q(2091) => [
+ q(Dampelas),
+ ],
+ q(2092) => [
+ q(Dubu),
+ q(Tebi),
+ ],
+ q(2093) => [
+ q(Dumpas),
+ ],
+ q(2094) => [
+ q(Dema),
+ ],
+ q(2095) => [
+ q(Demta),
+ q(Sowari),
+ ],
+ q(2096) => [
+ q(Upper Grand Valley Dani),
+ ],
+ q(2097) => [
+ q(Daonda),
+ ],
+ q(2098) => [
+ q(Ndendeule),
+ ],
+ q(2099) => [
+ q(Dungan),
+ ],
+ q(2100) => [
+ q(Lower Grand Valley Dani),
+ ],
+ q(2101) => [
+ q(Dengka),
+ ],
+ q(2102) => [
+ q(Dzuungoo),
+ ],
+ q(2103) => [
+ q(Danaru),
+ ],
+ q(2104) => [
+ q(Mid Grand Valley Dani),
+ ],
+ q(2105) => [
+ q(Danau),
+ ],
+ q(2106) => [
+ q(Danu),
+ ],
+ q(2107) => [
+ q(Western Dani),
+ ],
+ q(2108) => [
+ q(Deni),
+ ],
+ q(2109) => [
+ q(Dom),
+ ],
+ q(2110) => [
+ q(Dobu),
+ ],
+ q(2111) => [
+ q(Northern Dong),
+ ],
+ q(2112) => [
+ q(Doe),
+ ],
+ q(2113) => [
+ q(Domu),
+ ],
+ q(2114) => [
+ q(Dong),
+ ],
+ q(2115) => [
+ q(Dondo),
+ ],
+ q(2116) => [
+ q(Doso),
+ ],
+ q(2117) => [
+ q(Toura (Papua New Guinea)),
+ ],
+ q(2118) => [
+ q(Dongo),
+ ],
+ q(2119) => [
+ q(Lukpa),
+ ],
+ q(2120) => [
+ q(Dominican Sign Language),
+ ],
+ q(2121) => [
+ q(Dori'o),
+ ],
+ q(2122) => [
+ q(Dogose),
+ ],
+ q(2123) => [
+ q(Dass),
+ ],
+ q(2124) => [
+ q(Dombe),
+ ],
+ q(2125) => [
+ q(Doyayo),
+ ],
+ q(2126) => [
+ q(Bussa),
+ ],
+ q(2127) => [
+ q(Dompo),
+ ],
+ q(2128) => [
+ q(Dorze),
+ ],
+ q(2129) => [
+ q(Papar),
+ ],
+ q(2130) => [
+ q(Dair),
+ ],
+ q(2131) => [
+ q(Minderico),
+ ],
+ q(2132) => [
+ q(Darmiya),
+ ],
+ q(2133) => [
+ q(Dolpo),
+ ],
+ q(2134) => [
+ q(Rungus),
+ ],
+ q(2135) => [
+ q(C'lela),
+ ],
+ q(2136) => [
+ q(Paakantyi),
+ ],
+ q(2137) => [
+ q(West Damar),
+ ],
+ q(2138) => [
+ q(Daro-Matu Melanau),
+ ],
+ q(2139) => [
+ q(Dura),
+ ],
+ q(2140) => [
+ q(Dororo),
+ ],
+ q(2141) => [
+ q(Gedeo),
+ ],
+ q(2142) => [
+ q(Drents),
+ ],
+ q(2143) => [
+ q(Rukai),
+ ],
+ q(2144) => [
+ q(Darai),
+ ],
+ q(2145) => [
+ q(Dutch Sign Language),
+ ],
+ q(2146) => [
+ q(Daasanach),
+ ],
+ q(2147) => [
+ q(Disa),
+ ],
+ q(2148) => [
+ q(Danish Sign Language),
+ ],
+ q(2149) => [
+ q(Dusner),
+ ],
+ q(2150) => [
+ q(Desiya),
+ ],
+ q(2151) => [
+ q(Tadaksahak),
+ ],
+ q(2152) => [
+ q(Daur),
+ ],
+ q(2153) => [
+ q(Labuk-Kinabatangan Kadazan),
+ ],
+ q(2154) => [
+ q(Ditidaht),
+ ],
+ q(2155) => [
+ q(Adithinngithigh),
+ ],
+ q(2156) => [
+ q(Ana Tinga Dogon),
+ ],
+ q(2157) => [
+ q(Tene Kan Dogon),
+ ],
+ q(2158) => [
+ q(Tomo Kan Dogon),
+ ],
+ q(2159) => [
+ q(Tommo So Dogon),
+ ],
+ q(2160) => [
+ q(Central Dusun),
+ ],
+ q(2161) => [
+ q(Lotud),
+ ],
+ q(2162) => [
+ q(Toro So Dogon),
+ ],
+ q(2163) => [
+ q(Toro Tegu Dogon),
+ ],
+ q(2164) => [
+ q(Tebul Ure Dogon),
+ ],
+ q(2165) => [
+ q(Dotyali),
+ ],
+ q(2166) => [
+ q(Dubli),
+ ],
+ q(2167) => [
+ q(Duna),
+ ],
+ q(2168) => [
+ q(Hun-Saare),
+ ],
+ q(2169) => [
+ q(Umiray Dumaget Agta),
+ ],
+ q(2170) => [
+ q(Dumbea),
+ ],
+ q(2171) => [
+ q(Duruma),
+ q(Chiduruma),
+ ],
+ q(2172) => [
+ q(Dungra Bhil),
+ ],
+ q(2173) => [
+ q(Dumun),
+ ],
+ q(2174) => [
+ q(Dhuwal),
+ ],
+ q(2175) => [
+ q(Uyajitaya),
+ ],
+ q(2176) => [
+ q(Alabat Island Agta),
+ ],
+ q(2177) => [
+ q(Dusun Deyah),
+ ],
+ q(2178) => [
+ q(Dupaninan Agta),
+ ],
+ q(2179) => [
+ q(Duano),
+ ],
+ q(2180) => [
+ q(Dusun Malang),
+ ],
+ q(2181) => [
+ q(Dii),
+ ],
+ q(2182) => [
+ q(Dumi),
+ ],
+ q(2183) => [
+ q(Drung),
+ ],
+ q(2184) => [
+ q(Duvle),
+ ],
+ q(2185) => [
+ q(Dusun Witu),
+ ],
+ q(2186) => [
+ q(Duungooma),
+ ],
+ q(2187) => [
+ q(Dicamay Agta),
+ ],
+ q(2188) => [
+ q(Duli),
+ ],
+ q(2189) => [
+ q(Duau),
+ ],
+ q(2190) => [
+ q(Diri),
+ ],
+ q(2191) => [
+ q(Dawro),
+ ],
+ q(2192) => [
+ q(Dutton World Speedwords),
+ ],
+ q(2193) => [
+ q(Dawawa),
+ ],
+ q(2194) => [
+ q(Dyan),
+ ],
+ q(2195) => [
+ q(Dyaberdyaber),
+ ],
+ q(2196) => [
+ q(Dyugun),
+ ],
+ q(2197) => [
+ q(Villa Viciosa Agta),
+ ],
+ q(2198) => [
+ q(Djimini Senoufo),
+ ],
+ q(2199) => [
+ q(Yanda Dom Dogon),
+ ],
+ q(2200) => [
+ q(Dyangadi),
+ ],
+ q(2201) => [
+ q(Jola-Fonyi),
+ ],
+ q(2202) => [
+ q(Dyaabugay),
+ ],
+ q(2203) => [
+ q(Tunzu),
+ ],
+ q(2204) => [
+ q(Daza),
+ ],
+ q(2205) => [
+ q(Dazaga),
+ ],
+ q(2206) => [
+ q(Dzalakha),
+ ],
+ q(2207) => [
+ q(Dzando),
+ ],
+ q(2208) => [
+ q(Ebughu),
+ ],
+ q(2209) => [
+ q(Eastern Bontok),
+ ],
+ q(2210) => [
+ q(Teke-Ebo),
+ ],
+ q(2211) => [
+ q(Ebrie),
+ ],
+ q(2212) => [
+ q(Embu),
+ q(Kiembu),
+ ],
+ q(2213) => [
+ q(Eteocretan),
+ ],
+ q(2214) => [
+ q(Ecuadorian Sign Language),
+ ],
+ q(2215) => [
+ q(Eteocypriot),
+ ],
+ q(2216) => [
+ q(E),
+ ],
+ q(2217) => [
+ q(Efai),
+ ],
+ q(2218) => [
+ q(Efe),
+ ],
+ q(2219) => [
+ q(Ega),
+ ],
+ q(2220) => [
+ q(Emilian),
+ ],
+ q(2221) => [
+ q(Eggon),
+ ],
+ q(2222) => [
+ q(Ehueun),
+ ],
+ q(2223) => [
+ q(Eipomek),
+ ],
+ q(2224) => [
+ q(Eitiep),
+ ],
+ q(2225) => [
+ q(Askopan),
+ ],
+ q(2226) => [
+ q(Ejamat),
+ ],
+ q(2227) => [
+ q(Ekit),
+ ],
+ q(2228) => [
+ q(Ekari),
+ ],
+ q(2229) => [
+ q(Eki),
+ ],
+ q(2230) => [
+ q(Standard Estonian),
+ ],
+ q(2231) => [
+ q(Kol (Bangladesh)),
+ q(Kol),
+ ],
+ q(2232) => [
+ q(Elip),
+ ],
+ q(2233) => [
+ q(Koti),
+ ],
+ q(2234) => [
+ q(Ekpeye),
+ ],
+ q(2235) => [
+ q(Yace),
+ ],
+ q(2236) => [
+ q(Eastern Kayah),
+ ],
+ q(2237) => [
+ q(Elepi),
+ ],
+ q(2238) => [
+ q(El Hugeirat),
+ ],
+ q(2239) => [
+ q(Nding),
+ ],
+ q(2240) => [
+ q(Elkei),
+ ],
+ q(2241) => [
+ q(Eleme),
+ ],
+ q(2242) => [
+ q(El Molo),
+ ],
+ q(2243) => [
+ q(Elu),
+ ],
+ q(2244) => [
+ q(Emai-Iuleha-Ora),
+ ],
+ q(2245) => [
+ q(Embaloh),
+ ],
+ q(2246) => [
+ q(Emerillon),
+ ],
+ q(2247) => [
+ q(Eastern Meohang),
+ ],
+ q(2248) => [
+ q(Mussau-Emira),
+ ],
+ q(2249) => [
+ q(Eastern Maninkakan),
+ ],
+ q(2250) => [
+ q(Mamulique),
+ ],
+ q(2251) => [
+ q(Eman),
+ ],
+ q(2252) => [
+ q(Emok),
+ ],
+ q(2253) => [
+ q(Northern Embera),
+ ],
+ q(2254) => [
+ q(Pacific Gulf Yupik),
+ ],
+ q(2255) => [
+ q(Eastern Muria),
+ ],
+ q(2256) => [
+ q(Emplawas),
+ ],
+ q(2257) => [
+ q(Erromintxela),
+ ],
+ q(2258) => [
+ q(Epigraphic Mayan),
+ ],
+ q(2259) => [
+ q(Apali),
+ ],
+ q(2260) => [
+ q(Markweeta),
+ ],
+ q(2261) => [
+ q(En),
+ ],
+ q(2262) => [
+ q(Ende),
+ ],
+ q(2263) => [
+ q(Forest Enets),
+ ],
+ q(2264) => [
+ q(Tundra Enets),
+ ],
+ q(2265) => [
+ q(Engenni),
+ ],
+ q(2266) => [
+ q(Enggano),
+ ],
+ q(2267) => [
+ q(Enga),
+ ],
+ q(2268) => [
+ q(Emumu),
+ q(Emem),
+ ],
+ q(2269) => [
+ q(Enu),
+ ],
+ q(2270) => [
+ q(Enwan (Edu State)),
+ ],
+ q(2271) => [
+ q(Enwan (Akwa Ibom State)),
+ ],
+ q(2272) => [
+ q(Beti (Cote d'Ivoire)),
+ ],
+ q(2273) => [
+ q(Epie),
+ ],
+ q(2274) => [
+ q(Eravallan),
+ ],
+ q(2275) => [
+ q(Sie),
+ ],
+ q(2276) => [
+ q(Eruwa),
+ ],
+ q(2277) => [
+ q(Ogea),
+ ],
+ q(2278) => [
+ q(South Efate),
+ ],
+ q(2279) => [
+ q(Horpa),
+ ],
+ q(2280) => [
+ q(Erre),
+ ],
+ q(2281) => [
+ q(Ersu),
+ ],
+ q(2282) => [
+ q(Eritai),
+ ],
+ q(2283) => [
+ q(Erokwanas),
+ ],
+ q(2284) => [
+ q(Ese Ejja),
+ ],
+ q(2285) => [
+ q(Eshtehardi),
+ ],
+ q(2286) => [
+ q(North Alaskan Inupiatun),
+ ],
+ q(2287) => [
+ q(Northwest Alaska Inupiatun),
+ ],
+ q(2288) => [
+ q(Egypt Sign Language),
+ ],
+ q(2289) => [
+ q(Esuma),
+ ],
+ q(2290) => [
+ q(Salvadoran Sign Language),
+ ],
+ q(2291) => [
+ q(Estonian Sign Language),
+ ],
+ q(2292) => [
+ q(Esselen),
+ ],
+ q(2293) => [
+ q(Central Siberian Yupik),
+ ],
+ q(2294) => [
+ q(Central Yupik),
+ ],
+ q(2295) => [
+ q(Etebi),
+ ],
+ q(2296) => [
+ q(Etchemin),
+ ],
+ q(2297) => [
+ q(Ethiopian Sign Language),
+ ],
+ q(2298) => [
+ q(Eton (Vanuatu)),
+ ],
+ q(2299) => [
+ q(Eton (Cameroon)),
+ ],
+ q(2300) => [
+ q(Edolo),
+ ],
+ q(2301) => [
+ q(Yekhee),
+ ],
+ q(2302) => [
+ q(Etruscan),
+ ],
+ q(2303) => [
+ q(Ejagham),
+ ],
+ q(2304) => [
+ q(Eten),
+ ],
+ q(2305) => [
+ q(Semimi),
+ ],
+ q(2306) => [
+ q(Even),
+ ],
+ q(2307) => [
+ q(Uvbie),
+ ],
+ q(2308) => [
+ q(Evenki),
+ ],
+ q(2309) => [
+ q(Extremaduran),
+ ],
+ q(2310) => [
+ q(Eyak),
+ ],
+ q(2311) => [
+ q(Keiyo),
+ ],
+ q(2312) => [
+ q(Uzekwe),
+ ],
+ q(2313) => [
+ q(Fasu),
+ ],
+ q(2314) => [
+ q(Fa D'ambu),
+ ],
+ q(2315) => [
+ q(Wagi),
+ ],
+ q(2316) => [
+ q(Fagani),
+ ],
+ q(2317) => [
+ q(Finongan),
+ ],
+ q(2318) => [
+ q(Baissa Fali),
+ ],
+ q(2319) => [
+ q(Faiwol),
+ ],
+ q(2320) => [
+ q(Faita),
+ ],
+ q(2321) => [
+ q(Fang (Cameroon)),
+ ],
+ q(2322) => [
+ q(South Fali),
+ ],
+ q(2323) => [
+ q(Fam),
+ ],
+ q(2324) => [
+ q(Palor),
+ ],
+ q(2325) => [
+ q(Fataleka),
+ ],
+ q(2326) => [
+ q(Fayu),
+ ],
+ q(2327) => [
+ q(Fala),
+ ],
+ q(2328) => [
+ q(Southwestern Fars),
+ ],
+ q(2329) => [
+ q(Northwestern Fars),
+ ],
+ q(2330) => [
+ q(West Albay Bikol),
+ ],
+ q(2331) => [
+ q(Quebec Sign Language),
+ ],
+ q(2332) => [
+ q(Feroge),
+ ],
+ q(2333) => [
+ q(Foia Foia),
+ ],
+ q(2334) => [
+ q(Maasina Fulfulde),
+ ],
+ q(2335) => [
+ q(Fongoro),
+ ],
+ q(2336) => [
+ q(Nobiin),
+ ],
+ q(2337) => [
+ q(Fyer),
+ ],
+ q(2338) => [
+ q(Fipa),
+ ],
+ q(2339) => [
+ q(Firan),
+ ],
+ q(2340) => [
+ q(Tornedalen Finnish),
+ ],
+ q(2341) => [
+ q(Fiwaga),
+ ],
+ q(2342) => [
+ q(Kirya-Konzel),
+ ],
+ q(2343) => [
+ q(Kven Finnish),
+ ],
+ q(2344) => [
+ q(Kalispel-Pend d'Oreille),
+ ],
+ q(2345) => [
+ q(Foau),
+ ],
+ q(2346) => [
+ q(Fali),
+ ],
+ q(2347) => [
+ q(North Fali),
+ ],
+ q(2348) => [
+ q(Flinders Island),
+ ],
+ q(2349) => [
+ q(Fuliiru),
+ ],
+ q(2350) => [
+ q(Tsotsitaal),
+ ],
+ q(2351) => [
+ q(Fe'fe'),
+ ],
+ q(2352) => [
+ q(Far Western Muria),
+ ],
+ q(2353) => [
+ q(Fanagalo),
+ ],
+ q(2354) => [
+ q(Fania),
+ ],
+ q(2355) => [
+ q(Foodo),
+ ],
+ q(2356) => [
+ q(Foi),
+ ],
+ q(2357) => [
+ q(Foma),
+ ],
+ q(2358) => [
+ q(Fore),
+ ],
+ q(2359) => [
+ q(Siraya),
+ ],
+ q(2360) => [
+ q(Fernando Po Creole English),
+ ],
+ q(2361) => [
+ q(Fas),
+ ],
+ q(2362) => [
+ q(Cajun French),
+ ],
+ q(2363) => [
+ q(Fordata),
+ ],
+ q(2364) => [
+ q(Frankish),
+ ],
+ q(2365) => [
+ q(Arpitan),
+ q(Francoprovencal),
+ ],
+ q(2366) => [
+ q(Forak),
+ ],
+ q(2367) => [
+ q(Fortsenal),
+ ],
+ q(2368) => [
+ q(Finnish Sign Language),
+ ],
+ q(2369) => [
+ q(French Sign Language),
+ ],
+ q(2370) => [
+ q(Finland-Swedish Sign Language),
+ q(finlandssvenskt teckensprak),
+ q(suomenruotsalainen viittomakieli),
+ ],
+ q(2371) => [
+ q(Adamawa Fulfulde),
+ ],
+ q(2372) => [
+ q(Pulaar),
+ ],
+ q(2373) => [
+ q(East Futuna),
+ ],
+ q(2374) => [
+ q(Borgu Fulfulde),
+ ],
+ q(2375) => [
+ q(Pular),
+ ],
+ q(2376) => [
+ q(Western Niger Fulfulde),
+ ],
+ q(2377) => [
+ q(Bagirmi Fulfulde),
+ ],
+ q(2378) => [
+ q(Ko),
+ ],
+ q(2379) => [
+ q(Fum),
+ ],
+ q(2380) => [
+ q(Fulnio),
+ ],
+ q(2381) => [
+ q(Central-Eastern Niger Fulfulde),
+ ],
+ q(2382) => [
+ q(Futuna-Aniwa),
+ ],
+ q(2383) => [
+ q(Furu),
+ ],
+ q(2384) => [
+ q(Nigerian Fulfulde),
+ ],
+ q(2385) => [
+ q(Fuyug),
+ ],
+ q(2386) => [
+ q(Fur),
+ ],
+ q(2387) => [
+ q(Fwai),
+ ],
+ q(2388) => [
+ q(Fwe),
+ ],
+ q(2389) => [
+ q(Gabri),
+ ],
+ q(2390) => [
+ q(Mixed Great Andamanese),
+ ],
+ q(2391) => [
+ q(Gaddang),
+ ],
+ q(2392) => [
+ q(Guarequena),
+ ],
+ q(2393) => [
+ q(Gende),
+ ],
+ q(2394) => [
+ q(Gagauz),
+ ],
+ q(2395) => [
+ q(Alekano),
+ ],
+ q(2396) => [
+ q(Borei),
+ ],
+ q(2397) => [
+ q(Gadsup),
+ ],
+ q(2398) => [
+ q(Gamkonora),
+ ],
+ q(2399) => [
+ q(Galoli),
+ ],
+ q(2400) => [
+ q(Kandawo),
+ ],
+ q(2401) => [
+ q(Gan Chinese),
+ ],
+ q(2402) => [
+ q(Gants),
+ ],
+ q(2403) => [
+ q(Gal),
+ ],
+ q(2404) => [
+ q(Gata'),
+ ],
+ q(2405) => [
+ q(Galeya),
+ ],
+ q(2406) => [
+ q(Adiwasi Garasia),
+ ],
+ q(2407) => [
+ q(Kenati),
+ ],
+ q(2408) => [
+ q(Mudhili Gadaba),
+ ],
+ q(2409) => [
+ q(Nobonob),
+ ],
+ q(2410) => [
+ q(Borana-Arsi-Guji Oromo),
+ ],
+ q(2411) => [
+ q(West Central Oromo),
+ ],
+ q(2412) => [
+ q(Kaytetye),
+ ],
+ q(2413) => [
+ q(Karadjeri),
+ ],
+ q(2414) => [
+ q(Niksek),
+ ],
+ q(2415) => [
+ q(Gaikundi),
+ ],
+ q(2416) => [
+ q(Gbanziri),
+ ],
+ q(2417) => [
+ q(Defi Gbe),
+ ],
+ q(2418) => [
+ q(Galela),
+ ],
+ q(2419) => [
+ q(Bodo Gadaba),
+ ],
+ q(2420) => [
+ q(Gaddi),
+ ],
+ q(2421) => [
+ q(Gamit),
+ ],
+ q(2422) => [
+ q(Garhwali),
+ ],
+ q(2423) => [
+ q(Mo'da),
+ ],
+ q(2424) => [
+ q(Northern Grebo),
+ ],
+ q(2425) => [
+ q(Gbaya-Bossangoa),
+ ],
+ q(2426) => [
+ q(Gbaya-Bozoum),
+ ],
+ q(2427) => [
+ q(Gbagyi),
+ ],
+ q(2428) => [
+ q(Gbesi Gbe),
+ ],
+ q(2429) => [
+ q(Gagadu),
+ ],
+ q(2430) => [
+ q(Gbanu),
+ ],
+ q(2431) => [
+ q(Eastern Xwla Gbe),
+ ],
+ q(2432) => [
+ q(Gbari),
+ ],
+ q(2433) => [
+ q(Zoroastrian Dari),
+ ],
+ q(2434) => [
+ q(Mali),
+ ],
+ q(2435) => [
+ q(Ganggalida),
+ ],
+ q(2436) => [
+ q(Galice),
+ ],
+ q(2437) => [
+ q(Guadeloupean Creole French),
+ ],
+ q(2438) => [
+ q(Grenadian Creole English),
+ ],
+ q(2439) => [
+ q(Gaina),
+ ],
+ q(2440) => [
+ q(Guianese Creole French),
+ ],
+ q(2441) => [
+ q(Colonia Tovar German),
+ ],
+ q(2442) => [
+ q(Gade Lohar),
+ ],
+ q(2443) => [
+ q(Pottangi Ollar Gadaba),
+ ],
+ q(2444) => [
+ q(Gugu Badhun),
+ ],
+ q(2445) => [
+ q(Gedaged),
+ ],
+ q(2446) => [
+ q(Gude),
+ ],
+ q(2447) => [
+ q(Guduf-Gava),
+ ],
+ q(2448) => [
+ q(Ga'dang),
+ ],
+ q(2449) => [
+ q(Gadjerawang),
+ ],
+ q(2450) => [
+ q(Gundi),
+ ],
+ q(2451) => [
+ q(Gurdjar),
+ ],
+ q(2452) => [
+ q(Gadang),
+ ],
+ q(2453) => [
+ q(Dirasha),
+ ],
+ q(2454) => [
+ q(Laal),
+ ],
+ q(2455) => [
+ q(Umanakaina),
+ ],
+ q(2456) => [
+ q(Ghodoberi),
+ ],
+ q(2457) => [
+ q(Mehri),
+ ],
+ q(2458) => [
+ q(Wipi),
+ ],
+ q(2459) => [
+ q(Ghandruk Sign Language),
+ ],
+ q(2460) => [
+ q(Gudu),
+ ],
+ q(2461) => [
+ q(Godwari),
+ ],
+ q(2462) => [
+ q(Geruma),
+ ],
+ q(2463) => [
+ q(Kire),
+ ],
+ q(2464) => [
+ q(Gboloo Grebo),
+ ],
+ q(2465) => [
+ q(Gade),
+ ],
+ q(2466) => [
+ q(Gengle),
+ ],
+ q(2467) => [
+ q(Hutterite German),
+ q(Hutterisch),
+ ],
+ q(2468) => [
+ q(Gebe),
+ ],
+ q(2469) => [
+ q(Gen),
+ ],
+ q(2470) => [
+ q(Yiwom),
+ ],
+ q(2471) => [
+ q(ut-Ma'in),
+ ],
+ q(2472) => [
+ q(Geme),
+ ],
+ q(2473) => [
+ q(Geser-Gorom),
+ ],
+ q(2474) => [
+ q(Gera),
+ ],
+ q(2475) => [
+ q(Garre),
+ ],
+ q(2476) => [
+ q(Enya),
+ ],
+ q(2477) => [
+ q(Patpatar),
+ ],
+ q(2478) => [
+ q(Gafat),
+ ],
+ q(2479) => [
+ q(Mangetti Dune !Xung),
+ ],
+ q(2480) => [
+ q(Gao),
+ ],
+ q(2481) => [
+ q(Gbii),
+ ],
+ q(2482) => [
+ q(Gugadj),
+ ],
+ q(2483) => [
+ q(Guragone),
+ ],
+ q(2484) => [
+ q(Gurgula),
+ ],
+ q(2485) => [
+ q(Kungarakany),
+ ],
+ q(2486) => [
+ q(Ganglau),
+ ],
+ q(2487) => [
+ q(Eastern Gurung),
+ ],
+ q(2488) => [
+ q(Southern Gondi),
+ ],
+ q(2489) => [
+ q(Aghu Tharnggalu),
+ ],
+ q(2490) => [
+ q(Gitua),
+ ],
+ q(2491) => [
+ q(Gagu),
+ ],
+ q(2492) => [
+ q(Gogodala),
+ ],
+ q(2493) => [
+ q(Ghadames),
+ ],
+ q(2494) => [
+ q(Hiberno-Scottish Gaelic),
+ ],
+ q(2495) => [
+ q(Southern Ghale),
+ ],
+ q(2496) => [
+ q(Northern Ghale),
+ ],
+ q(2497) => [
+ q(Geko Karen),
+ ],
+ q(2498) => [
+ q(Ghulfan),
+ ],
+ q(2499) => [
+ q(Ghanongga),
+ ],
+ q(2500) => [
+ q(Ghomara),
+ ],
+ q(2501) => [
+ q(Ghera),
+ ],
+ q(2502) => [
+ q(Guhu-Samane),
+ ],
+ q(2503) => [
+ q(Kuke),
+ q(Kutang Ghale),
+ ],
+ q(2504) => [
+ q(Kitja),
+ ],
+ q(2505) => [
+ q(Gibanawa),
+ ],
+ q(2506) => [
+ q(Gail),
+ ],
+ q(2507) => [
+ q(Gidar),
+ ],
+ q(2508) => [
+ q(Goaria),
+ ],
+ q(2509) => [
+ q(Gimi (Eastern Highlands)),
+ ],
+ q(2510) => [
+ q(Hinukh),
+ ],
+ q(2511) => [
+ q(Gimi (West New Britain)),
+ ],
+ q(2512) => [
+ q(Green Gelao),
+ ],
+ q(2513) => [
+ q(Red Gelao),
+ ],
+ q(2514) => [
+ q(North Giziga),
+ ],
+ q(2515) => [
+ q(Gitxsan),
+ ],
+ q(2516) => [
+ q(Mulao),
+ ],
+ q(2517) => [
+ q(White Gelao),
+ ],
+ q(2518) => [
+ q(Gilima),
+ ],
+ q(2519) => [
+ q(Giyug),
+ ],
+ q(2520) => [
+ q(South Giziga),
+ ],
+ q(2521) => [
+ q(Geji),
+ ],
+ q(2522) => [
+ q(Kachi Koli),
+ ],
+ q(2523) => [
+ q(Gonja),
+ ],
+ q(2524) => [
+ q(Gujari),
+ ],
+ q(2525) => [
+ q(Guya),
+ ],
+ q(2526) => [
+ q(Ndai),
+ ],
+ q(2527) => [
+ q(Gokana),
+ ],
+ q(2528) => [
+ q(Kok-Nar),
+ ],
+ q(2529) => [
+ q(Guinea Kpelle),
+ ],
+ q(2530) => [
+ q(Bon Gula),
+ ],
+ q(2531) => [
+ q(Nanai),
+ ],
+ q(2532) => [
+ q(Northwest Pashayi),
+ ],
+ q(2533) => [
+ q(Guliguli),
+ ],
+ q(2534) => [
+ q(Gula Iro),
+ ],
+ q(2535) => [
+ q(Gilaki),
+ ],
+ q(2536) => [
+ q(Galambu),
+ ],
+ q(2537) => [
+ q(Glaro-Twabo),
+ ],
+ q(2538) => [
+ q(Gula (Chad)),
+ ],
+ q(2539) => [
+ q(Glavda),
+ ],
+ q(2540) => [
+ q(Gule),
+ ],
+ q(2541) => [
+ q(Gambera),
+ ],
+ q(2542) => [
+ q(Gula'alaa),
+ ],
+ q(2543) => [
+ q(Maghdi),
+ ],
+ q(2544) => [
+ q(Middle Low German),
+ ],
+ q(2545) => [
+ q(Gbaya-Mbodomo),
+ ],
+ q(2546) => [
+ q(Gimnime),
+ ],
+ q(2547) => [
+ q(Gumalu),
+ ],
+ q(2548) => [
+ q(Gamo),
+ ],
+ q(2549) => [
+ q(Magoma),
+ ],
+ q(2550) => [
+ q(Mycenaean Greek),
+ ],
+ q(2551) => [
+ q(Kaansa),
+ ],
+ q(2552) => [
+ q(Gangte),
+ ],
+ q(2553) => [
+ q(Guanche),
+ ],
+ q(2554) => [
+ q(Zulgo-Gemzek),
+ ],
+ q(2555) => [
+ q(Ganang),
+ ],
+ q(2556) => [
+ q(Ngangam),
+ ],
+ q(2557) => [
+ q(Lere),
+ ],
+ q(2558) => [
+ q(Gooniyandi),
+ ],
+ q(2559) => [
+ q(//Gana),
+ ],
+ q(2560) => [
+ q(Gangulu),
+ ],
+ q(2561) => [
+ q(Ginuman),
+ ],
+ q(2562) => [
+ q(Gumatj),
+ ],
+ q(2563) => [
+ q(Northern Gondi),
+ ],
+ q(2564) => [
+ q(Gana),
+ ],
+ q(2565) => [
+ q(Gureng Gureng),
+ ],
+ q(2566) => [
+ q(Guntai),
+ ],
+ q(2567) => [
+ q(Gnau),
+ ],
+ q(2568) => [
+ q(Western Bolivian Guarani),
+ ],
+ q(2569) => [
+ q(Ganzi),
+ ],
+ q(2570) => [
+ q(Guro),
+ ],
+ q(2571) => [
+ q(Playero),
+ ],
+ q(2572) => [
+ q(Gorakor),
+ ],
+ q(2573) => [
+ q(Godie),
+ ],
+ q(2574) => [
+ q(Gongduk),
+ ],
+ q(2575) => [
+ q(Gofa),
+ ],
+ q(2576) => [
+ q(Gogo),
+ ],
+ q(2577) => [
+ q(Gobasi),
+ ],
+ q(2578) => [
+ q(Gowlan),
+ ],
+ q(2579) => [
+ q(Gowli),
+ ],
+ q(2580) => [
+ q(Gola),
+ ],
+ q(2581) => [
+ q(Goan Konkani),
+ ],
+ q(2582) => [
+ q(Gone Dau),
+ ],
+ q(2583) => [
+ q(Yeretuar),
+ ],
+ q(2584) => [
+ q(Gorap),
+ ],
+ q(2585) => [
+ q(Gronings),
+ ],
+ q(2586) => [
+ q(Gavar),
+ ],
+ q(2587) => [
+ q(Gorowa),
+ ],
+ q(2588) => [
+ q(Gobu),
+ ],
+ q(2589) => [
+ q(Goundo),
+ ],
+ q(2590) => [
+ q(Gozarkhani),
+ ],
+ q(2591) => [
+ q(Gupa-Abawa),
+ ],
+ q(2592) => [
+ q(Ghanaian Pidgin English),
+ ],
+ q(2593) => [
+ q(Taiap),
+ ],
+ q(2594) => [
+ q(Ga'anda),
+ ],
+ q(2595) => [
+ q(Guiqiong),
+ ],
+ q(2596) => [
+ q(Guana (Brazil)),
+ ],
+ q(2597) => [
+ q(Gor),
+ ],
+ q(2598) => [
+ q(Qau),
+ ],
+ q(2599) => [
+ q(Rajput Garasia),
+ ],
+ q(2600) => [
+ q(Guruntum-Mbaaru),
+ ],
+ q(2601) => [
+ q(Madi),
+ ],
+ q(2602) => [
+ q(Gbiri-Niragu),
+ ],
+ q(2603) => [
+ q(Ghari),
+ ],
+ q(2604) => [
+ q(Southern Grebo),
+ ],
+ q(2605) => [
+ q(Kota Marudu Talantang),
+ ],
+ q(2606) => [
+ q(Groma),
+ ],
+ q(2607) => [
+ q(Gorovu),
+ ],
+ q(2608) => [
+ q(Taznatit),
+ ],
+ q(2609) => [
+ q(Gresi),
+ ],
+ q(2610) => [
+ q(Garo),
+ ],
+ q(2611) => [
+ q(Kistane),
+ ],
+ q(2612) => [
+ q(Central Grebo),
+ ],
+ q(2613) => [
+ q(Gweda),
+ ],
+ q(2614) => [
+ q(Guriaso),
+ ],
+ q(2615) => [
+ q(Barclayville Grebo),
+ ],
+ q(2616) => [
+ q(Guramalum),
+ ],
+ q(2617) => [
+ q(Ghanaian Sign Language),
+ ],
+ q(2618) => [
+ q(German Sign Language),
+ ],
+ q(2619) => [
+ q(Gusilay),
+ ],
+ q(2620) => [
+ q(Guatemalan Sign Language),
+ ],
+ q(2621) => [
+ q(Gusan),
+ ],
+ q(2622) => [
+ q(Southwest Gbaya),
+ ],
+ q(2623) => [
+ q(Wasembo),
+ ],
+ q(2624) => [
+ q(Greek Sign Language),
+ ],
+ q(2625) => [
+ q(Guato),
+ ],
+ q(2626) => [
+ q(Gbati-ri),
+ ],
+ q(2627) => [
+ q(Shiki),
+ ],
+ q(2628) => [
+ q(Guajajara),
+ ],
+ q(2629) => [
+ q(Wayuu),
+ ],
+ q(2630) => [
+ q(Yocoboue Dida),
+ ],
+ q(2631) => [
+ q(Gurinji),
+ ],
+ q(2632) => [
+ q(Gupapuyngu),
+ ],
+ q(2633) => [
+ q(Paraguayan Guarani),
+ ],
+ q(2634) => [
+ q(Guahibo),
+ ],
+ q(2635) => [
+ q(Eastern Bolivian Guarani),
+ ],
+ q(2636) => [
+ q(Gumuz),
+ ],
+ q(2637) => [
+ q(Sea Island Creole English),
+ ],
+ q(2638) => [
+ q(Guambiano),
+ ],
+ q(2639) => [
+ q(Mbya Guarani),
+ ],
+ q(2640) => [
+ q(Guayabero),
+ ],
+ q(2641) => [
+ q(Gunwinggu),
+ ],
+ q(2642) => [
+ q(Ache),
+ ],
+ q(2643) => [
+ q(Farefare),
+ ],
+ q(2644) => [
+ q(Guinean Sign Language),
+ ],
+ q(2645) => [
+ q(Maleku Jaika),
+ ],
+ q(2646) => [
+ q(Yanomamo),
+ ],
+ q(2647) => [
+ q(Gey),
+ ],
+ q(2648) => [
+ q(Gun),
+ ],
+ q(2649) => [
+ q(Gourmanchema),
+ ],
+ q(2650) => [
+ q(Gusii),
+ q(Ekegusii),
+ ],
+ q(2651) => [
+ q(Guana (Paraguay)),
+ ],
+ q(2652) => [
+ q(Guanano),
+ ],
+ q(2653) => [
+ q(Duwet),
+ ],
+ q(2654) => [
+ q(Golin),
+ ],
+ q(2655) => [
+ q(Guaja),
+ ],
+ q(2656) => [
+ q(Gulay),
+ ],
+ q(2657) => [
+ q(Gurmana),
+ ],
+ q(2658) => [
+ q(Kuku-Yalanji),
+ ],
+ q(2659) => [
+ q(Gaviao Do Jiparana),
+ ],
+ q(2660) => [
+ q(Para Gaviao),
+ ],
+ q(2661) => [
+ q(Western Gurung),
+ ],
+ q(2662) => [
+ q(Gumawana),
+ ],
+ q(2663) => [
+ q(Guyani),
+ ],
+ q(2664) => [
+ q(Mbato),
+ ],
+ q(2665) => [
+ q(Gwa),
+ ],
+ q(2666) => [
+ q(Kalami),
+ ],
+ q(2667) => [
+ q(Gawwada),
+ ],
+ q(2668) => [
+ q(Gweno),
+ ],
+ q(2669) => [
+ q(Gowro),
+ ],
+ q(2670) => [
+ q(Moo),
+ ],
+ q(2671) => [
+ q(/Gwi),
+ ],
+ q(2672) => [
+ q(Awngthim),
+ ],
+ q(2673) => [
+ q(Gwandara),
+ ],
+ q(2674) => [
+ q(Gwere),
+ ],
+ q(2675) => [
+ q(Gawar-Bati),
+ ],
+ q(2676) => [
+ q(Guwamu),
+ ],
+ q(2677) => [
+ q(Kwini),
+ ],
+ q(2678) => [
+ q(Gua),
+ ],
+ q(2679) => [
+ q(We Southern),
+ ],
+ q(2680) => [
+ q(Northwest Gbaya),
+ ],
+ q(2681) => [
+ q(Garus),
+ ],
+ q(2682) => [
+ q(Kayardild),
+ ],
+ q(2683) => [
+ q(Gyem),
+ ],
+ q(2684) => [
+ q(Gungabula),
+ ],
+ q(2685) => [
+ q(Gbayi),
+ ],
+ q(2686) => [
+ q(Gyele),
+ ],
+ q(2687) => [
+ q(Gayil),
+ ],
+ q(2688) => [
+ q(Ngabere),
+ ],
+ q(2689) => [
+ q(Guyanese Creole English),
+ ],
+ q(2690) => [
+ q(Guarayu),
+ ],
+ q(2691) => [
+ q(Gunya),
+ ],
+ q(2692) => [
+ q(Ganza),
+ ],
+ q(2693) => [
+ q(Gazi),
+ ],
+ q(2694) => [
+ q(Gane),
+ ],
+ q(2695) => [
+ q(Han),
+ ],
+ q(2696) => [
+ q(Hanoi Sign Language),
+ ],
+ q(2697) => [
+ q(Gurani),
+ ],
+ q(2698) => [
+ q(Hatam),
+ ],
+ q(2699) => [
+ q(Eastern Oromo),
+ ],
+ q(2700) => [
+ q(Haiphong Sign Language),
+ ],
+ q(2701) => [
+ q(Hanga),
+ ],
+ q(2702) => [
+ q(Hahon),
+ ],
+ q(2703) => [
+ q(Hajong),
+ ],
+ q(2704) => [
+ q(Hakka Chinese),
+ ],
+ q(2705) => [
+ q(Halang),
+ ],
+ q(2706) => [
+ q(Hewa),
+ ],
+ q(2707) => [
+ q(Hangaza),
+ ],
+ q(2708) => [
+ q(Hako),
+ ],
+ q(2709) => [
+ q(Hupla),
+ ],
+ q(2710) => [
+ q(Ha),
+ ],
+ q(2711) => [
+ q(Harari),
+ ],
+ q(2712) => [
+ q(Haisla),
+ ],
+ q(2713) => [
+ q(Havu),
+ ],
+ q(2714) => [
+ q(Southern Haida),
+ ],
+ q(2715) => [
+ q(Haya),
+ ],
+ q(2716) => [
+ q(Hazaragi),
+ ],
+ q(2717) => [
+ q(Hamba),
+ ],
+ q(2718) => [
+ q(Huba),
+ ],
+ q(2719) => [
+ q(Heiban),
+ ],
+ q(2720) => [
+ q(Ancient Hebrew),
+ ],
+ q(2721) => [
+ q(Habu),
+ ],
+ q(2722) => [
+ q(Andaman Creole Hindi),
+ ],
+ q(2723) => [
+ q(Huichol),
+ ],
+ q(2724) => [
+ q(Northern Haida),
+ ],
+ q(2725) => [
+ q(Honduras Sign Language),
+ ],
+ q(2726) => [
+ q(Hadiyya),
+ ],
+ q(2727) => [
+ q(Northern Qiandong Miao),
+ ],
+ q(2728) => [
+ q(Herde),
+ ],
+ q(2729) => [
+ q(Helong),
+ ],
+ q(2730) => [
+ q(Hehe),
+ ],
+ q(2731) => [
+ q(Heiltsuk),
+ ],
+ q(2732) => [
+ q(Hemba),
+ ],
+ q(2733) => [
+ q(Hai//om),
+ ],
+ q(2734) => [
+ q(Haigwai),
+ ],
+ q(2735) => [
+ q(Hoia Hoia),
+ ],
+ q(2736) => [
+ q(Kerak),
+ ],
+ q(2737) => [
+ q(Hoyahoya),
+ ],
+ q(2738) => [
+ q(Lamang),
+ ],
+ q(2739) => [
+ q(Hibito),
+ ],
+ q(2740) => [
+ q(Hidatsa),
+ ],
+ q(2741) => [
+ q(Fiji Hindi),
+ ],
+ q(2742) => [
+ q(Kamwe),
+ ],
+ q(2743) => [
+ q(Pamosu),
+ ],
+ q(2744) => [
+ q(Hinduri),
+ ],
+ q(2745) => [
+ q(Hijuk),
+ ],
+ q(2746) => [
+ q(Seit-Kaitetu),
+ ],
+ q(2747) => [
+ q(Tsoa),
+ ],
+ q(2748) => [
+ q(Himarima),
+ ],
+ q(2749) => [
+ q(Hiw),
+ ],
+ q(2750) => [
+ q(Hixkaryana),
+ ],
+ q(2751) => [
+ q(Haji),
+ ],
+ q(2752) => [
+ q(Kahe),
+ ],
+ q(2753) => [
+ q(Hunde),
+ ],
+ q(2754) => [
+ q(Hunjara-Kaina Ke),
+ ],
+ q(2755) => [
+ q(Hong Kong Sign Language),
+ q(Heung Kong Sau Yue),
+ ],
+ q(2756) => [
+ q(Halia),
+ ],
+ q(2757) => [
+ q(Halbi),
+ ],
+ q(2758) => [
+ q(Halang Doan),
+ ],
+ q(2759) => [
+ q(Hlersu),
+ ],
+ q(2760) => [
+ q(Matu Chin),
+ ],
+ q(2761) => [
+ q(Hieroglyphic Luwian),
+ ],
+ q(2762) => [
+ q(Southern Mashan Hmong),
+ q(Southern Mashan Miao),
+ ],
+ q(2763) => [
+ q(Humburi Senni Songhay),
+ ],
+ q(2764) => [
+ q(Central Huishui Hmong),
+ q(Central Huishui Miao),
+ ],
+ q(2765) => [
+ q(Large Flowery Miao),
+ q(A-hmaos),
+ q(Da-Hua Miao),
+ ],
+ q(2766) => [
+ q(Eastern Huishui Hmong),
+ q(Eastern Huishui Miao),
+ ],
+ q(2767) => [
+ q(Hmong Don),
+ ],
+ q(2768) => [
+ q(Southwestern Guiyang Hmong),
+ ],
+ q(2769) => [
+ q(Southwestern Huishui Hmong),
+ q(Southwestern Huishui Miao),
+ ],
+ q(2770) => [
+ q(Northern Huishui Hmong),
+ q(Northern Huishui Miao),
+ ],
+ q(2771) => [
+ q(Ge),
+ q(Gejia),
+ ],
+ q(2772) => [
+ q(Maek),
+ ],
+ q(2773) => [
+ q(Luopohe Hmong),
+ q(Luopohe Miao),
+ ],
+ q(2774) => [
+ q(Central Mashan Hmong),
+ q(Central Mashan Miao),
+ ],
+ q(2775) => [
+ q(Northern Mashan Hmong),
+ q(Northern Mashan Miao),
+ ],
+ q(2776) => [
+ q(Eastern Qiandong Miao),
+ ],
+ q(2777) => [
+ q(Hmar),
+ ],
+ q(2778) => [
+ q(Southern Qiandong Miao),
+ ],
+ q(2779) => [
+ q(Hamtai),
+ ],
+ q(2780) => [
+ q(Hamap),
+ ],
+ q(2781) => [
+ q(Hmong Do),
+ ],
+ q(2782) => [
+ q(Western Mashan Hmong),
+ q(Western Mashan Miao),
+ ],
+ q(2783) => [
+ q(Southern Guiyang Hmong),
+ q(Southern Guiyang Miao),
+ ],
+ q(2784) => [
+ q(Hmong Shua),
+ q(Sinicized Miao),
+ ],
+ q(2785) => [
+ q(Mina (Cameroon)),
+ ],
+ q(2786) => [
+ q(Southern Hindko),
+ ],
+ q(2787) => [
+ q(Chhattisgarhi),
+ ],
+ q(2788) => [
+ q(//Ani),
+ ],
+ q(2789) => [
+ q(Hani),
+ ],
+ q(2790) => [
+ q(Hmong Njua),
+ q(Mong Leng),
+ q(Mong Njua),
+ ],
+ q(2791) => [
+ q(Hanunoo),
+ ],
+ q(2792) => [
+ q(Northern Hindko),
+ ],
+ q(2793) => [
+ q(Caribbean Hindustani),
+ ],
+ q(2794) => [
+ q(Hung),
+ ],
+ q(2795) => [
+ q(Hoava),
+ ],
+ q(2796) => [
+ q(Mari (Madang Province)),
+ ],
+ q(2797) => [
+ q(Ho),
+ ],
+ q(2798) => [
+ q(Holma),
+ ],
+ q(2799) => [
+ q(Horom),
+ ],
+ q(2800) => [
+ q(Hobyot),
+ ],
+ q(2801) => [
+ q(Holikachuk),
+ ],
+ q(2802) => [
+ q(Hadothi),
+ q(Haroti),
+ ],
+ q(2803) => [
+ q(Holu),
+ ],
+ q(2804) => [
+ q(Homa),
+ ],
+ q(2805) => [
+ q(Holoholo),
+ ],
+ q(2806) => [
+ q(Hopi),
+ ],
+ q(2807) => [
+ q(Horo),
+ ],
+ q(2808) => [
+ q(Ho Chi Minh City Sign Language),
+ ],
+ q(2809) => [
+ q(Hote),
+ q(Male),
+ ],
+ q(2810) => [
+ q(Hovongan),
+ ],
+ q(2811) => [
+ q(Honi),
+ ],
+ q(2812) => [
+ q(Holiya),
+ ],
+ q(2813) => [
+ q(Hozo),
+ ],
+ q(2814) => [
+ q(Hpon),
+ ],
+ q(2815) => [
+ q(Hawai'i Pidgin Sign Language),
+ ],
+ q(2816) => [
+ q(Hrangkhol),
+ ],
+ q(2817) => [
+ q(Hre),
+ ],
+ q(2818) => [
+ q(Haruku),
+ ],
+ q(2819) => [
+ q(Horned Miao),
+ ],
+ q(2820) => [
+ q(Haroi),
+ ],
+ q(2821) => [
+ q(Hertevin),
+ ],
+ q(2822) => [
+ q(Hruso),
+ ],
+ q(2823) => [
+ q(Hunsrik),
+ ],
+ q(2824) => [
+ q(Harzani),
+ ],
+ q(2825) => [
+ q(Hungarian Sign Language),
+ ],
+ q(2826) => [
+ q(Hausa Sign Language),
+ ],
+ q(2827) => [
+ q(Xiang Chinese),
+ ],
+ q(2828) => [
+ q(Harsusi),
+ ],
+ q(2829) => [
+ q(Hoti),
+ ],
+ q(2830) => [
+ q(Minica Huitoto),
+ ],
+ q(2831) => [
+ q(Hadza),
+ ],
+ q(2832) => [
+ q(Hitu),
+ ],
+ q(2833) => [
+ q(Middle Hittite),
+ ],
+ q(2834) => [
+ q(Huambisa),
+ ],
+ q(2835) => [
+ q(=/Hua),
+ ],
+ q(2836) => [
+ q(Huaulu),
+ ],
+ q(2837) => [
+ q(San Francisco Del Mar Huave),
+ ],
+ q(2838) => [
+ q(Humene),
+ ],
+ q(2839) => [
+ q(Huachipaeri),
+ ],
+ q(2840) => [
+ q(Huilliche),
+ ],
+ q(2841) => [
+ q(Huli),
+ ],
+ q(2842) => [
+ q(Northern Guiyang Hmong),
+ q(Northern Guiyang Miao),
+ ],
+ q(2843) => [
+ q(Hulung),
+ ],
+ q(2844) => [
+ q(Hula),
+ ],
+ q(2845) => [
+ q(Hungana),
+ ],
+ q(2846) => [
+ q(Hu),
+ ],
+ q(2847) => [
+ q(Tsat),
+ ],
+ q(2848) => [
+ q(Halkomelem),
+ ],
+ q(2849) => [
+ q(Huastec),
+ ],
+ q(2850) => [
+ q(Humla),
+ ],
+ q(2851) => [
+ q(Murui Huitoto),
+ ],
+ q(2852) => [
+ q(San Mateo Del Mar Huave),
+ ],
+ q(2853) => [
+ q(Hukumina),
+ ],
+ q(2854) => [
+ q(Nupode Huitoto),
+ ],
+ q(2855) => [
+ q(Hulaula),
+ ],
+ q(2856) => [
+ q(Hunzib),
+ ],
+ q(2857) => [
+ q(Haitian Vodoun Culture Language),
+ ],
+ q(2858) => [
+ q(San Dionisio Del Mar Huave),
+ ],
+ q(2859) => [
+ q(Haveke),
+ ],
+ q(2860) => [
+ q(Sabu),
+ ],
+ q(2861) => [
+ q(Santa Maria Del Mar Huave),
+ ],
+ q(2862) => [
+ q(Wane),
+ ],
+ q(2863) => [
+ q(Hawai'i Creole English),
+ ],
+ q(2864) => [
+ q(Hwana),
+ ],
+ q(2865) => [
+ q(Hya),
+ ],
+ q(2866) => [
+ q(Iaai),
+ ],
+ q(2867) => [
+ q(Iatmul),
+ ],
+ q(2868) => [
+ q(Iapama),
+ ],
+ q(2869) => [
+ q(Purari),
+ ],
+ q(2870) => [
+ q(Ibibio),
+ ],
+ q(2871) => [
+ q(Iwaidja),
+ ],
+ q(2872) => [
+ q(Akpes),
+ ],
+ q(2873) => [
+ q(Ibanag),
+ ],
+ q(2874) => [
+ q(Ibaloi),
+ ],
+ q(2875) => [
+ q(Agoi),
+ ],
+ q(2876) => [
+ q(Ibino),
+ ],
+ q(2877) => [
+ q(Ibuoro),
+ ],
+ q(2878) => [
+ q(Ibu),
+ ],
+ q(2879) => [
+ q(Ibani),
+ ],
+ q(2880) => [
+ q(Ede Ica),
+ ],
+ q(2881) => [
+ q(Etkywan),
+ ],
+ q(2882) => [
+ q(Icelandic Sign Language),
+ ],
+ q(2883) => [
+ q(Islander Creole English),
+ ],
+ q(2884) => [
+ q(Idakho-Isukha-Tiriki),
+ q(Luidakho-Luisukha-Lutirichi),
+ ],
+ q(2885) => [
+ q(Indo-Portuguese),
+ ],
+ q(2886) => [
+ q(Idon),
+ ],
+ q(2887) => [
+ q(Ede Idaca),
+ ],
+ q(2888) => [
+ q(Idere),
+ ],
+ q(2889) => [
+ q(Idi),
+ ],
+ q(2890) => [
+ q(Indri),
+ ],
+ q(2891) => [
+ q(Idesa),
+ ],
+ q(2892) => [
+ q(Idate),
+ ],
+ q(2893) => [
+ q(Idoma),
+ ],
+ q(2894) => [
+ q(Amganad Ifugao),
+ ],
+ q(2895) => [
+ q(Batad Ifugao),
+ q(Ayangan Ifugao),
+ ],
+ q(2896) => [
+ q(Ife),
+ ],
+ q(2897) => [
+ q(Ifo),
+ ],
+ q(2898) => [
+ q(Tuwali Ifugao),
+ ],
+ q(2899) => [
+ q(Teke-Fuumu),
+ ],
+ q(2900) => [
+ q(Mayoyao Ifugao),
+ ],
+ q(2901) => [
+ q(Keley-I Kallahan),
+ ],
+ q(2902) => [
+ q(Ebira),
+ ],
+ q(2903) => [
+ q(Igede),
+ ],
+ q(2904) => [
+ q(Igana),
+ ],
+ q(2905) => [
+ q(Igala),
+ ],
+ q(2906) => [
+ q(Kanggape),
+ ],
+ q(2907) => [
+ q(Ignaciano),
+ ],
+ q(2908) => [
+ q(Isebe),
+ ],
+ q(2909) => [
+ q(Interglossa),
+ ],
+ q(2910) => [
+ q(Igwe),
+ ],
+ q(2911) => [
+ q(Iha Based Pidgin),
+ ],
+ q(2912) => [
+ q(Ihievbe),
+ ],
+ q(2913) => [
+ q(Iha),
+ ],
+ q(2914) => [
+ q(Bidhawal),
+ ],
+ q(2915) => [
+ q(Izon),
+ ],
+ q(2916) => [
+ q(Biseni),
+ ],
+ q(2917) => [
+ q(Ede Ije),
+ ],
+ q(2918) => [
+ q(Kalabari),
+ ],
+ q(2919) => [
+ q(Southeast Ijo),
+ ],
+ q(2920) => [
+ q(Eastern Canadian Inuktitut),
+ ],
+ q(2921) => [
+ q(Iko),
+ ],
+ q(2922) => [
+ q(Ika),
+ ],
+ q(2923) => [
+ q(Ikulu),
+ ],
+ q(2924) => [
+ q(Olulumo-Ikom),
+ ],
+ q(2925) => [
+ q(Ikpeshi),
+ ],
+ q(2926) => [
+ q(Inuinnaqtun),
+ q(Western Canadian Inuktitut),
+ ],
+ q(2927) => [
+ q(Iku-Gora-Ankwa),
+ ],
+ q(2928) => [
+ q(Ikwere),
+ ],
+ q(2929) => [
+ q(Ik),
+ ],
+ q(2930) => [
+ q(Ikizu),
+ ],
+ q(2931) => [
+ q(Ile Ape),
+ ],
+ q(2932) => [
+ q(Ila),
+ ],
+ q(2933) => [
+ q(Garig-Ilgar),
+ ],
+ q(2934) => [
+ q(Ili Turki),
+ ],
+ q(2935) => [
+ q(Ilongot),
+ ],
+ q(2936) => [
+ q(Iranun),
+ ],
+ q(2937) => [
+ q(International Sign),
+ ],
+ q(2938) => [
+ q(Ili'uun),
+ ],
+ q(2939) => [
+ q(Ilue),
+ ],
+ q(2940) => [
+ q(Talur),
+ ],
+ q(2941) => [
+ q(Mala Malasar),
+ ],
+ q(2942) => [
+ q(Imeraguen),
+ ],
+ q(2943) => [
+ q(Anamgura),
+ ],
+ q(2944) => [
+ q(Miluk),
+ ],
+ q(2945) => [
+ q(Imonda),
+ ],
+ q(2946) => [
+ q(Imbongu),
+ ],
+ q(2947) => [
+ q(Imroing),
+ ],
+ q(2948) => [
+ q(Marsian),
+ ],
+ q(2949) => [
+ q(Milyan),
+ ],
+ q(2950) => [
+ q(Inga),
+ ],
+ q(2951) => [
+ q(Degexit'an),
+ ],
+ q(2952) => [
+ q(Jungle Inga),
+ ],
+ q(2953) => [
+ q(Indonesian Sign Language),
+ ],
+ q(2954) => [
+ q(Minaean),
+ ],
+ q(2955) => [
+ q(Isinai),
+ ],
+ q(2956) => [
+ q(Inoke-Yate),
+ ],
+ q(2957) => [
+ q(Inapari),
+ ],
+ q(2958) => [
+ q(Indian Sign Language),
+ ],
+ q(2959) => [
+ q(Intha),
+ ],
+ q(2960) => [
+ q(Ineseno),
+ ],
+ q(2961) => [
+ q(Inor),
+ ],
+ q(2962) => [
+ q(Tuma-Irumu),
+ ],
+ q(2963) => [
+ q(Iowa-Oto),
+ ],
+ q(2964) => [
+ q(Ipili),
+ ],
+ q(2965) => [
+ q(Ipiko),
+ ],
+ q(2966) => [
+ q(Iquito),
+ ],
+ q(2967) => [
+ q(Iresim),
+ ],
+ q(2968) => [
+ q(Irarutu),
+ ],
+ q(2969) => [
+ q(Irigwe),
+ ],
+ q(2970) => [
+ q(Iraqw),
+ ],
+ q(2971) => [
+ q(Irantxe),
+ ],
+ q(2972) => [
+ q(Ir),
+ ],
+ q(2973) => [
+ q(Irula),
+ ],
+ q(2974) => [
+ q(Kamberau),
+ ],
+ q(2975) => [
+ q(Iraya),
+ ],
+ q(2976) => [
+ q(Isabi),
+ ],
+ q(2977) => [
+ q(Isconahua),
+ ],
+ q(2978) => [
+ q(Isnag),
+ ],
+ q(2979) => [
+ q(Italian Sign Language),
+ ],
+ q(2980) => [
+ q(Irish Sign Language),
+ ],
+ q(2981) => [
+ q(Esan),
+ ],
+ q(2982) => [
+ q(Nkem-Nkum),
+ ],
+ q(2983) => [
+ q(Ishkashimi),
+ ],
+ q(2984) => [
+ q(Masimasi),
+ ],
+ q(2985) => [
+ q(Isanzu),
+ ],
+ q(2986) => [
+ q(Isoko),
+ ],
+ q(2987) => [
+ q(Israeli Sign Language),
+ ],
+ q(2988) => [
+ q(Istriot),
+ ],
+ q(2989) => [
+ q(Isu (Menchum Division)),
+ ],
+ q(2990) => [
+ q(Binongan Itneg),
+ ],
+ q(2991) => [
+ q(Itene),
+ ],
+ q(2992) => [
+ q(Inlaod Itneg),
+ ],
+ q(2993) => [
+ q(Judeo-Italian),
+ ],
+ q(2994) => [
+ q(Itelmen),
+ ],
+ q(2995) => [
+ q(Itu Mbon Uzo),
+ ],
+ q(2996) => [
+ q(Itonama),
+ ],
+ q(2997) => [
+ q(Iteri),
+ ],
+ q(2998) => [
+ q(Isekiri),
+ ],
+ q(2999) => [
+ q(Maeng Itneg),
+ ],
+ q(3000) => [
+ q(Itawit),
+ ],
+ q(3001) => [
+ q(Ito),
+ ],
+ q(3002) => [
+ q(Itik),
+ ],
+ q(3003) => [
+ q(Moyadan Itneg),
+ ],
+ q(3004) => [
+ q(Itza),
+ ],
+ q(3005) => [
+ q(Iu Mien),
+ ],
+ q(3006) => [
+ q(Ibatan),
+ ],
+ q(3007) => [
+ q(Ivatan),
+ ],
+ q(3008) => [
+ q(I-Wak),
+ ],
+ q(3009) => [
+ q(Iwam),
+ ],
+ q(3010) => [
+ q(Iwur),
+ ],
+ q(3011) => [
+ q(Sepik Iwam),
+ ],
+ q(3012) => [
+ q(Ixcatec),
+ ],
+ q(3013) => [
+ q(Ixil),
+ ],
+ q(3014) => [
+ q(Iyayu),
+ ],
+ q(3015) => [
+ q(Mesaka),
+ ],
+ q(3016) => [
+ q(Yaka (Congo)),
+ ],
+ q(3017) => [
+ q(Ingrian),
+ ],
+ q(3018) => [
+ q(Izi-Ezaa-Ikwo-Mgbo),
+ ],
+ q(3019) => [
+ q(Izere),
+ ],
+ q(3020) => [
+ q(Jamamadi),
+ ],
+ q(3021) => [
+ q(Hyam),
+ ],
+ q(3022) => [
+ q(Popti'),
+ q(Jakalteko),
+ ],
+ q(3023) => [
+ q(Jahanka),
+ ],
+ q(3024) => [
+ q(Yabem),
+ ],
+ q(3025) => [
+ q(Jara),
+ ],
+ q(3026) => [
+ q(Jah Hut),
+ ],
+ q(3027) => [
+ q(Zazao),
+ ],
+ q(3028) => [
+ q(Jakun),
+ ],
+ q(3029) => [
+ q(Yalahatan),
+ ],
+ q(3030) => [
+ q(Jamaican Creole English),
+ ],
+ q(3031) => [
+ q(Jandai),
+ ],
+ q(3032) => [
+ q(Yanyuwa),
+ ],
+ q(3033) => [
+ q(Yaqay),
+ ],
+ q(3034) => [
+ q(New Caledonian Javanese),
+ ],
+ q(3035) => [
+ q(Jakati),
+ ],
+ q(3036) => [
+ q(Yaur),
+ ],
+ q(3037) => [
+ q(Jambi Malay),
+ ],
+ q(3038) => [
+ q(Yan-nhangu),
+ ],
+ q(3039) => [
+ q(Jawe),
+ ],
+ q(3040) => [
+ q(Judeo-Berber),
+ ],
+ q(3041) => [
+ q(Arandai),
+ ],
+ q(3042) => [
+ q(Barikewa),
+ ],
+ q(3043) => [
+ q(Nafusi),
+ ],
+ q(3044) => [
+ q(Jofotek-Bromnya),
+ ],
+ q(3045) => [
+ q(Jabuti),
+ ],
+ q(3046) => [
+ q(Jukun Takum),
+ ],
+ q(3047) => [
+ q(Yawijibaya),
+ ],
+ q(3048) => [
+ q(Jamaican Country Sign Language),
+ ],
+ q(3049) => [
+ q(Krymchak),
+ ],
+ q(3050) => [
+ q(Jad),
+ ],
+ q(3051) => [
+ q(Jadgali),
+ ],
+ q(3052) => [
+ q(Judeo-Tat),
+ ],
+ q(3053) => [
+ q(Jebero),
+ ],
+ q(3054) => [
+ q(Jerung),
+ ],
+ q(3055) => [
+ q(Jeng),
+ ],
+ q(3056) => [
+ q(Jeh),
+ ],
+ q(3057) => [
+ q(Yei),
+ ],
+ q(3058) => [
+ q(Jeri Kuo),
+ ],
+ q(3059) => [
+ q(Yelmek),
+ ],
+ q(3060) => [
+ q(Dza),
+ ],
+ q(3061) => [
+ q(Jere),
+ ],
+ q(3062) => [
+ q(Manem),
+ ],
+ q(3063) => [
+ q(Jonkor Bourmataguil),
+ ],
+ q(3064) => [
+ q(Ngbee),
+ ],
+ q(3065) => [
+ q(Judeo-Georgian),
+ ],
+ q(3066) => [
+ q(Gwak),
+ ],
+ q(3067) => [
+ q(Ngomba),
+ ],
+ q(3068) => [
+ q(Jehai),
+ ],
+ q(3069) => [
+ q(Jhankot Sign Language),
+ ],
+ q(3070) => [
+ q(Jina),
+ ],
+ q(3071) => [
+ q(Jibu),
+ ],
+ q(3072) => [
+ q(Tol),
+ ],
+ q(3073) => [
+ q(Bu),
+ ],
+ q(3074) => [
+ q(Jilbe),
+ ],
+ q(3075) => [
+ q(Djingili),
+ ],
+ q(3076) => [
+ q(sTodsde),
+ q(Shangzhai),
+ ],
+ q(3077) => [
+ q(Jiiddu),
+ ],
+ q(3078) => [
+ q(Jilim),
+ ],
+ q(3079) => [
+ q(Jimi (Cameroon)),
+ ],
+ q(3080) => [
+ q(Jiamao),
+ ],
+ q(3081) => [
+ q(Guanyinqiao),
+ q(Lavrung),
+ ],
+ q(3082) => [
+ q(Jita),
+ ],
+ q(3083) => [
+ q(Youle Jinuo),
+ ],
+ q(3084) => [
+ q(Shuar),
+ ],
+ q(3085) => [
+ q(Buyuan Jinuo),
+ ],
+ q(3086) => [
+ q(Bankal),
+ ],
+ q(3087) => [
+ q(Mobwa Karen),
+ ],
+ q(3088) => [
+ q(Kubo),
+ ],
+ q(3089) => [
+ q(Paku Karen),
+ ],
+ q(3090) => [
+ q(Koro (India)),
+ ],
+ q(3091) => [
+ q(Labir),
+ ],
+ q(3092) => [
+ q(Ngile),
+ ],
+ q(3093) => [
+ q(Jamaican Sign Language),
+ ],
+ q(3094) => [
+ q(Dima),
+ ],
+ q(3095) => [
+ q(Zumbun),
+ ],
+ q(3096) => [
+ q(Machame),
+ ],
+ q(3097) => [
+ q(Yamdena),
+ ],
+ q(3098) => [
+ q(Jimi (Nigeria)),
+ ],
+ q(3099) => [
+ q(Jumli),
+ ],
+ q(3100) => [
+ q(Makuri Naga),
+ ],
+ q(3101) => [
+ q(Kamara),
+ ],
+ q(3102) => [
+ q(Mashi (Nigeria)),
+ ],
+ q(3103) => [
+ q(Mouwase),
+ ],
+ q(3104) => [
+ q(Western Juxtlahuaca Mixtec),
+ ],
+ q(3105) => [
+ q(Jangshung),
+ ],
+ q(3106) => [
+ q(Jandavra),
+ ],
+ q(3107) => [
+ q(Yangman),
+ ],
+ q(3108) => [
+ q(Janji),
+ ],
+ q(3109) => [
+ q(Yemsa),
+ ],
+ q(3110) => [
+ q(Rawat),
+ ],
+ q(3111) => [
+ q(Jaunsari),
+ ],
+ q(3112) => [
+ q(Joba),
+ ],
+ q(3113) => [
+ q(Wojenaka),
+ ],
+ q(3114) => [
+ q(Jora),
+ ],
+ q(3115) => [
+ q(Jordanian Sign Language),
+ ],
+ q(3116) => [
+ q(Jowulu),
+ ],
+ q(3117) => [
+ q(Jewish Palestinian Aramaic),
+ ],
+ q(3118) => [
+ q(Jaqaru),
+ ],
+ q(3119) => [
+ q(Jarai),
+ ],
+ q(3120) => [
+ q(Jiru),
+ ],
+ q(3121) => [
+ q(Jorto),
+ ],
+ q(3122) => [
+ q(Japreria),
+ ],
+ q(3123) => [
+ q(Japanese Sign Language),
+ ],
+ q(3124) => [
+ q(Juma),
+ ],
+ q(3125) => [
+ q(Wannu),
+ ],
+ q(3126) => [
+ q(Jurchen),
+ ],
+ q(3127) => [
+ q(Worodougou),
+ ],
+ q(3128) => [
+ q(Hone),
+ ],
+ q(3129) => [
+ q(Ngadjuri),
+ ],
+ q(3130) => [
+ q(Wapan),
+ ],
+ q(3131) => [
+ q(Jirel),
+ ],
+ q(3132) => [
+ q(Jumjum),
+ ],
+ q(3133) => [
+ q(Juang),
+ ],
+ q(3134) => [
+ q(Jiba),
+ ],
+ q(3135) => [
+ q(Hupde),
+ ],
+ q(3136) => [
+ q(Juruna),
+ ],
+ q(3137) => [
+ q(Jumla Sign Language),
+ ],
+ q(3138) => [
+ q(Jutish),
+ ],
+ q(3139) => [
+ q(Ju),
+ ],
+ q(3140) => [
+ q(Wapha),
+ ],
+ q(3141) => [
+ q(Juray),
+ ],
+ q(3142) => [
+ q(Javindo),
+ ],
+ q(3143) => [
+ q(Caribbean Javanese),
+ ],
+ q(3144) => [
+ q(Jwira-Pepesa),
+ ],
+ q(3145) => [
+ q(Jiarong),
+ ],
+ q(3146) => [
+ q(Judeo-Yemeni Arabic),
+ ],
+ q(3147) => [
+ q(Jaya),
+ ],
+ q(3148) => [
+ q(Adara),
+ ],
+ q(3149) => [
+ q(Ketangalan),
+ ],
+ q(3150) => [
+ q(Katso),
+ ],
+ q(3151) => [
+ q(Kajaman),
+ ],
+ q(3152) => [
+ q(Kara (Central African Republic)),
+ ],
+ q(3153) => [
+ q(Karekare),
+ ],
+ q(3154) => [
+ q(Jju),
+ ],
+ q(3155) => [
+ q(Kayapa Kallahan),
+ ],
+ q(3156) => [
+ q(Xaasongaxango),
+ ],
+ q(3157) => [
+ q(Bezhta),
+ ],
+ q(3158) => [
+ q(Capanahua),
+ ],
+ q(3159) => [
+ q(Katukina),
+ ],
+ q(3160) => [
+ q(Kao),
+ ],
+ q(3161) => [
+ q(Kamayura),
+ ],
+ q(3162) => [
+ q(Kalarko),
+ ],
+ q(3163) => [
+ q(Kaxuiana),
+ ],
+ q(3164) => [
+ q(Kadiweu),
+ ],
+ q(3165) => [
+ q(Kanju),
+ ],
+ q(3166) => [
+ q(Kakauhua),
+ ],
+ q(3167) => [
+ q(Khamba),
+ ],
+ q(3168) => [
+ q(Camsa),
+ ],
+ q(3169) => [
+ q(Kaptiau),
+ ],
+ q(3170) => [
+ q(Kari),
+ ],
+ q(3171) => [
+ q(Grass Koiari),
+ ],
+ q(3172) => [
+ q(Kanembu),
+ ],
+ q(3173) => [
+ q(Iwal),
+ ],
+ q(3174) => [
+ q(Kare (Central African Republic)),
+ ],
+ q(3175) => [
+ q(Keliko),
+ ],
+ q(3176) => [
+ q(Kabiye),
+ ],
+ q(3177) => [
+ q(Kamano),
+ ],
+ q(3178) => [
+ q(Kafa),
+ ],
+ q(3179) => [
+ q(Kande),
+ ],
+ q(3180) => [
+ q(Abadi),
+ ],
+ q(3181) => [
+ q(Kabutra),
+ ],
+ q(3182) => [
+ q(Dera (Indonesia)),
+ ],
+ q(3183) => [
+ q(Kaiep),
+ ],
+ q(3184) => [
+ q(Ap Ma),
+ ],
+ q(3185) => [
+ q(Manga Kanuri),
+ ],
+ q(3186) => [
+ q(Duhwa),
+ ],
+ q(3187) => [
+ q(Khanty),
+ ],
+ q(3188) => [
+ q(Kawacha),
+ ],
+ q(3189) => [
+ q(Lubila),
+ ],
+ q(3190) => [
+ q(Ngkalmpw Kanum),
+ ],
+ q(3191) => [
+ q(Kaivi),
+ ],
+ q(3192) => [
+ q(Ukaan),
+ ],
+ q(3193) => [
+ q(Tyap),
+ ],
+ q(3194) => [
+ q(Vono),
+ ],
+ q(3195) => [
+ q(Kamantan),
+ ],
+ q(3196) => [
+ q(Kobiana),
+ ],
+ q(3197) => [
+ q(Kalanga),
+ ],
+ q(3198) => [
+ q(Kela (Papua New Guinea)),
+ q(Kala),
+ ],
+ q(3199) => [
+ q(Gula (Central African Republic)),
+ ],
+ q(3200) => [
+ q(Nubi),
+ ],
+ q(3201) => [
+ q(Kinalakna),
+ ],
+ q(3202) => [
+ q(Kanga),
+ ],
+ q(3203) => [
+ q(Kamo),
+ ],
+ q(3204) => [
+ q(Katla),
+ ],
+ q(3205) => [
+ q(Koenoem),
+ ],
+ q(3206) => [
+ q(Kaian),
+ ],
+ q(3207) => [
+ q(Kami (Tanzania)),
+ ],
+ q(3208) => [
+ q(Kete),
+ ],
+ q(3209) => [
+ q(Kabwari),
+ ],
+ q(3210) => [
+ q(Kachama-Ganjule),
+ ],
+ q(3211) => [
+ q(Korandje),
+ ],
+ q(3212) => [
+ q(Konongo),
+ ],
+ q(3213) => [
+ q(Worimi),
+ ],
+ q(3214) => [
+ q(Kutu),
+ ],
+ q(3215) => [
+ q(Yankunytjatjara),
+ ],
+ q(3216) => [
+ q(Makonde),
+ ],
+ q(3217) => [
+ q(Mamusi),
+ ],
+ q(3218) => [
+ q(Seba),
+ ],
+ q(3219) => [
+ q(Tem),
+ ],
+ q(3220) => [
+ q(Kumam),
+ ],
+ q(3221) => [
+ q(Karamojong),
+ ],
+ q(3222) => [
+ q(Numee),
+ ],
+ q(3223) => [
+ q(Tsikimba),
+ ],
+ q(3224) => [
+ q(Kagoma),
+ ],
+ q(3225) => [
+ q(Kunda),
+ ],
+ q(3226) => [
+ q(Kaningdon-Nindem),
+ ],
+ q(3227) => [
+ q(Koch),
+ ],
+ q(3228) => [
+ q(Karaim),
+ ],
+ q(3229) => [
+ q(Kuy),
+ ],
+ q(3230) => [
+ q(Kadaru),
+ ],
+ q(3231) => [
+ q(Koneraw),
+ ],
+ q(3232) => [
+ q(Kam),
+ ],
+ q(3233) => [
+ q(Keder),
+ q(Keijar),
+ ],
+ q(3234) => [
+ q(Kwaja),
+ ],
+ q(3235) => [
+ q(Kabuverdianu),
+ ],
+ q(3236) => [
+ q(Kele),
+ ],
+ q(3237) => [
+ q(Keiga),
+ ],
+ q(3238) => [
+ q(Kerewe),
+ ],
+ q(3239) => [
+ q(Eastern Keres),
+ ],
+ q(3240) => [
+ q(Kpessi),
+ ],
+ q(3241) => [
+ q(Tese),
+ ],
+ q(3242) => [
+ q(Keak),
+ ],
+ q(3243) => [
+ q(Kei),
+ ],
+ q(3244) => [
+ q(Kadar),
+ ],
+ q(3245) => [
+ q(Kekchi),
+ ],
+ q(3246) => [
+ q(Kela (Democratic Republic of Congo)),
+ ],
+ q(3247) => [
+ q(Kemak),
+ ],
+ q(3248) => [
+ q(Kenyang),
+ ],
+ q(3249) => [
+ q(Kakwa),
+ ],
+ q(3250) => [
+ q(Kaikadi),
+ ],
+ q(3251) => [
+ q(Kamar),
+ ],
+ q(3252) => [
+ q(Kera),
+ ],
+ q(3253) => [
+ q(Kugbo),
+ ],
+ q(3254) => [
+ q(Ket),
+ ],
+ q(3255) => [
+ q(Akebu),
+ ],
+ q(3256) => [
+ q(Kanikkaran),
+ ],
+ q(3257) => [
+ q(West Kewa),
+ ],
+ q(3258) => [
+ q(Kukna),
+ ],
+ q(3259) => [
+ q(Kupia),
+ ],
+ q(3260) => [
+ q(Kukele),
+ ],
+ q(3261) => [
+ q(Kodava),
+ ],
+ q(3262) => [
+ q(Northwestern Kolami),
+ ],
+ q(3263) => [
+ q(Konda-Dora),
+ ],
+ q(3264) => [
+ q(Korra Koraga),
+ ],
+ q(3265) => [
+ q(Kota (India)),
+ ],
+ q(3266) => [
+ q(Koya),
+ ],
+ q(3267) => [
+ q(Kudiya),
+ ],
+ q(3268) => [
+ q(Kurichiya),
+ ],
+ q(3269) => [
+ q(Kannada Kurumba),
+ ],
+ q(3270) => [
+ q(Kemiehua),
+ ],
+ q(3271) => [
+ q(Kinnauri),
+ ],
+ q(3272) => [
+ q(Kung),
+ ],
+ q(3273) => [
+ q(Khunsari),
+ ],
+ q(3274) => [
+ q(Kuk),
+ ],
+ q(3275) => [
+ q(Koro (Cote d'Ivoire)),
+ ],
+ q(3276) => [
+ q(Korwa),
+ ],
+ q(3277) => [
+ q(Korku),
+ ],
+ q(3278) => [
+ q(Kachchi),
+ ],
+ q(3279) => [
+ q(Bilaspuri),
+ ],
+ q(3280) => [
+ q(Kanjari),
+ ],
+ q(3281) => [
+ q(Katkari),
+ ],
+ q(3282) => [
+ q(Kurmukar),
+ ],
+ q(3283) => [
+ q(Kharam Naga),
+ ],
+ q(3284) => [
+ q(Kullu Pahari),
+ ],
+ q(3285) => [
+ q(Kumaoni),
+ ],
+ q(3286) => [
+ q(Koromfe),
+ ],
+ q(3287) => [
+ q(Koyaga),
+ ],
+ q(3288) => [
+ q(Kawe),
+ ],
+ q(3289) => [
+ q(Kasseng),
+ ],
+ q(3290) => [
+ q(Kataang),
+ ],
+ q(3291) => [
+ q(Komering),
+ ],
+ q(3292) => [
+ q(Kube),
+ ],
+ q(3293) => [
+ q(Kusunda),
+ ],
+ q(3294) => [
+ q(Selangor Sign Language),
+ ],
+ q(3295) => [
+ q(Gamale Kham),
+ ],
+ q(3296) => [
+ q(Kaiwa),
+ ],
+ q(3297) => [
+ q(Kunggari),
+ ],
+ q(3298) => [
+ q(Karipuna),
+ ],
+ q(3299) => [
+ q(Karingani),
+ ],
+ q(3300) => [
+ q(Krongo),
+ ],
+ q(3301) => [
+ q(Kaingang),
+ ],
+ q(3302) => [
+ q(Kamoro),
+ ],
+ q(3303) => [
+ q(Abun),
+ ],
+ q(3304) => [
+ q(Kumbainggar),
+ ],
+ q(3305) => [
+ q(Somyev),
+ ],
+ q(3306) => [
+ q(Kobol),
+ ],
+ q(3307) => [
+ q(Karas),
+ ],
+ q(3308) => [
+ q(Karon Dori),
+ ],
+ q(3309) => [
+ q(Kamaru),
+ ],
+ q(3310) => [
+ q(Kyerung),
+ ],
+ q(3311) => [
+ q(Lu),
+ ],
+ q(3312) => [
+ q(Tukang Besi North),
+ ],
+ q(3313) => [
+ q(Badi Kanum),
+ ],
+ q(3314) => [
+ q(Korowai),
+ ],
+ q(3315) => [
+ q(Khuen),
+ ],
+ q(3316) => [
+ q(Khams Tibetan),
+ ],
+ q(3317) => [
+ q(Kehu),
+ ],
+ q(3318) => [
+ q(Kuturmi),
+ ],
+ q(3319) => [
+ q(Halh Mongolian),
+ ],
+ q(3320) => [
+ q(Lusi),
+ ],
+ q(3321) => [
+ q(Khandesi),
+ ],
+ q(3322) => [
+ q(Kapori),
+ q(Kapauri),
+ ],
+ q(3323) => [
+ q(Koyra Chiini Songhay),
+ ],
+ q(3324) => [
+ q(Kharia),
+ ],
+ q(3325) => [
+ q(Kasua),
+ ],
+ q(3326) => [
+ q(Khamti),
+ ],
+ q(3327) => [
+ q(Nkhumbi),
+ ],
+ q(3328) => [
+ q(Khvarshi),
+ ],
+ q(3329) => [
+ q(Khowar),
+ ],
+ q(3330) => [
+ q(Kanu),
+ ],
+ q(3331) => [
+ q(Kele (Democratic Republic of Congo)),
+ ],
+ q(3332) => [
+ q(Keapara),
+ ],
+ q(3333) => [
+ q(Kim),
+ ],
+ q(3334) => [
+ q(Koalib),
+ ],
+ q(3335) => [
+ q(Kickapoo),
+ ],
+ q(3336) => [
+ q(Koshin),
+ ],
+ q(3337) => [
+ q(Kibet),
+ ],
+ q(3338) => [
+ q(Eastern Parbate Kham),
+ ],
+ q(3339) => [
+ q(Kimaama),
+ q(Kimaghima),
+ ],
+ q(3340) => [
+ q(Kilmeri),
+ ],
+ q(3341) => [
+ q(Kitsai),
+ ],
+ q(3342) => [
+ q(Kilivila),
+ ],
+ q(3343) => [
+ q(Kariya),
+ ],
+ q(3344) => [
+ q(Karagas),
+ ],
+ q(3345) => [
+ q(Kiowa),
+ ],
+ q(3346) => [
+ q(Sheshi Kham),
+ ],
+ q(3347) => [
+ q(Kosadle),
+ q(Kosare),
+ ],
+ q(3348) => [
+ q(Kis),
+ ],
+ q(3349) => [
+ q(Agob),
+ ],
+ q(3350) => [
+ q(Kirmanjki (individual language)),
+ ],
+ q(3351) => [
+ q(Kimbu),
+ ],
+ q(3352) => [
+ q(Northeast Kiwai),
+ ],
+ q(3353) => [
+ q(Khiamniungan Naga),
+ ],
+ q(3354) => [
+ q(Kirikiri),
+ ],
+ q(3355) => [
+ q(Kisi),
+ ],
+ q(3356) => [
+ q(Mlap),
+ ],
+ q(3357) => [
+ q(Q'anjob'al),
+ q(Kanjobal),
+ ],
+ q(3358) => [
+ q(Coastal Konjo),
+ ],
+ q(3359) => [
+ q(Southern Kiwai),
+ ],
+ q(3360) => [
+ q(Kisar),
+ ],
+ q(3361) => [
+ q(Khalaj),
+ ],
+ q(3362) => [
+ q(Khmu),
+ ],
+ q(3363) => [
+ q(Khakas),
+ ],
+ q(3364) => [
+ q(Zabana),
+ ],
+ q(3365) => [
+ q(Khinalugh),
+ ],
+ q(3366) => [
+ q(Highland Konjo),
+ ],
+ q(3367) => [
+ q(Western Parbate Kham),
+ ],
+ q(3368) => [
+ q(Khang),
+ ],
+ q(3369) => [
+ q(Kunjen),
+ ],
+ q(3370) => [
+ q(Harijan Kinnauri),
+ ],
+ q(3371) => [
+ q(Pwo Eastern Karen),
+ ],
+ q(3372) => [
+ q(Western Keres),
+ ],
+ q(3373) => [
+ q(Kurudu),
+ ],
+ q(3374) => [
+ q(East Kewa),
+ ],
+ q(3375) => [
+ q(Phrae Pwo Karen),
+ ],
+ q(3376) => [
+ q(Kashaya),
+ ],
+ q(3377) => [
+ q(Ramopa),
+ ],
+ q(3378) => [
+ q(Erave),
+ ],
+ q(3379) => [
+ q(Bumthangkha),
+ ],
+ q(3380) => [
+ q(Kakanda),
+ ],
+ q(3381) => [
+ q(Kwerisa),
+ ],
+ q(3382) => [
+ q(Odoodee),
+ ],
+ q(3383) => [
+ q(Kinuku),
+ ],
+ q(3384) => [
+ q(Kakabe),
+ ],
+ q(3385) => [
+ q(Kalaktang Monpa),
+ ],
+ q(3386) => [
+ q(Mabaka Valley Kalinga),
+ ],
+ q(3387) => [
+ q(Khun),
+ ],
+ q(3388) => [
+ q(Kagulu),
+ ],
+ q(3389) => [
+ q(Kako),
+ ],
+ q(3390) => [
+ q(Kokota),
+ ],
+ q(3391) => [
+ q(Kosarek Yale),
+ ],
+ q(3392) => [
+ q(Kiong),
+ ],
+ q(3393) => [
+ q(Kon Keu),
+ ],
+ q(3394) => [
+ q(Karko),
+ ],
+ q(3395) => [
+ q(Gugubera),
+ ],
+ q(3396) => [
+ q(Kaiku),
+ ],
+ q(3397) => [
+ q(Kir-Balar),
+ ],
+ q(3398) => [
+ q(Giiwo),
+ ],
+ q(3399) => [
+ q(Koi),
+ ],
+ q(3400) => [
+ q(Tumi),
+ ],
+ q(3401) => [
+ q(Kangean),
+ ],
+ q(3402) => [
+ q(Teke-Kukuya),
+ ],
+ q(3403) => [
+ q(Kohin),
+ ],
+ q(3404) => [
+ q(Guguyimidjir),
+ ],
+ q(3405) => [
+ q(Kaska),
+ ],
+ q(3406) => [
+ q(Klamath-Modoc),
+ ],
+ q(3407) => [
+ q(Kiliwa),
+ ],
+ q(3408) => [
+ q(Kolbila),
+ ],
+ q(3409) => [
+ q(Gamilaraay),
+ ],
+ q(3410) => [
+ q(Kulung (Nepal)),
+ ],
+ q(3411) => [
+ q(Kendeje),
+ ],
+ q(3412) => [
+ q(Tagakaulo),
+ ],
+ q(3413) => [
+ q(Weliki),
+ ],
+ q(3414) => [
+ q(Kalumpang),
+ ],
+ q(3415) => [
+ q(Turkic Khalaj),
+ ],
+ q(3416) => [
+ q(Kono (Nigeria)),
+ ],
+ q(3417) => [
+ q(Kagan Kalagan),
+ ],
+ q(3418) => [
+ q(Migum),
+ ],
+ q(3419) => [
+ q(Kalenjin),
+ ],
+ q(3420) => [
+ q(Kapya),
+ ],
+ q(3421) => [
+ q(Kamasa),
+ ],
+ q(3422) => [
+ q(Rumu),
+ ],
+ q(3423) => [
+ q(Khaling),
+ ],
+ q(3424) => [
+ q(Kalasha),
+ ],
+ q(3425) => [
+ q(Nukna),
+ ],
+ q(3426) => [
+ q(Klao),
+ ],
+ q(3427) => [
+ q(Maskelynes),
+ ],
+ q(3428) => [
+ q(Lindu),
+ ],
+ q(3429) => [
+ q(Koluwawa),
+ ],
+ q(3430) => [
+ q(Kalao),
+ ],
+ q(3431) => [
+ q(Kabola),
+ ],
+ q(3432) => [
+ q(Konni),
+ ],
+ q(3433) => [
+ q(Southern Dong),
+ ],
+ q(3434) => [
+ q(Majukayang Kalinga),
+ ],
+ q(3435) => [
+ q(Bakole),
+ ],
+ q(3436) => [
+ q(Kare (Papua New Guinea)),
+ ],
+ q(3437) => [
+ q(Kate),
+ ],
+ q(3438) => [
+ q(Kalam),
+ ],
+ q(3439) => [
+ q(Kami (Nigeria)),
+ ],
+ q(3440) => [
+ q(Kumarbhag Paharia),
+ ],
+ q(3441) => [
+ q(Limos Kalinga),
+ ],
+ q(3442) => [
+ q(Tanudan Kalinga),
+ ],
+ q(3443) => [
+ q(Kom (India)),
+ ],
+ q(3444) => [
+ q(Awtuw),
+ ],
+ q(3445) => [
+ q(Kwoma),
+ ],
+ q(3446) => [
+ q(Gimme),
+ ],
+ q(3447) => [
+ q(Kwama),
+ ],
+ q(3448) => [
+ q(Northern Kurdish),
+ ],
+ q(3449) => [
+ q(Kamasau),
+ ],
+ q(3450) => [
+ q(Kemtuik),
+ ],
+ q(3451) => [
+ q(Kanite),
+ ],
+ q(3452) => [
+ q(Karipuna Creole French),
+ ],
+ q(3453) => [
+ q(Komo (Democratic Republic of Congo)),
+ ],
+ q(3454) => [
+ q(Waboda),
+ ],
+ q(3455) => [
+ q(Koma),
+ ],
+ q(3456) => [
+ q(Khorasani Turkish),
+ ],
+ q(3457) => [
+ q(Dera (Nigeria)),
+ ],
+ q(3458) => [
+ q(Lubuagan Kalinga),
+ ],
+ q(3459) => [
+ q(Central Kanuri),
+ ],
+ q(3460) => [
+ q(Konda),
+ ],
+ q(3461) => [
+ q(Kankanaey),
+ ],
+ q(3462) => [
+ q(Mankanya),
+ ],
+ q(3463) => [
+ q(Koongo),
+ ],
+ q(3464) => [
+ q(Kanufi),
+ ],
+ q(3465) => [
+ q(Western Kanjobal),
+ ],
+ q(3466) => [
+ q(Kuranko),
+ ],
+ q(3467) => [
+ q(Keninjal),
+ ],
+ q(3468) => [
+ q(Kanamari),
+ ],
+ q(3469) => [
+ q(Konkani (individual language)),
+ ],
+ q(3470) => [
+ q(Kono (Sierra Leone)),
+ ],
+ q(3471) => [
+ q(Kwanja),
+ ],
+ q(3472) => [
+ q(Kintaq),
+ ],
+ q(3473) => [
+ q(Kaningra),
+ ],
+ q(3474) => [
+ q(Kensiu),
+ ],
+ q(3475) => [
+ q(Panoan Katukina),
+ ],
+ q(3476) => [
+ q(Kono (Guinea)),
+ ],
+ q(3477) => [
+ q(Tabo),
+ ],
+ q(3478) => [
+ q(Kung-Ekoka),
+ ],
+ q(3479) => [
+ q(Kendayan),
+ q(Salako),
+ ],
+ q(3480) => [
+ q(Kanyok),
+ ],
+ q(3481) => [
+ q(Kalamse),
+ ],
+ q(3482) => [
+ q(Konomala),
+ ],
+ q(3483) => [
+ q(Kpati),
+ ],
+ q(3484) => [
+ q(Kodi),
+ ],
+ q(3485) => [
+ q(Kacipo-Balesi),
+ ],
+ q(3486) => [
+ q(Kubi),
+ ],
+ q(3487) => [
+ q(Cogui),
+ q(Kogi),
+ ],
+ q(3488) => [
+ q(Koyo),
+ ],
+ q(3489) => [
+ q(Komi-Permyak),
+ ],
+ q(3490) => [
+ q(Sara Dunjo),
+ ],
+ q(3491) => [
+ q(Kol (Papua New Guinea)),
+ ],
+ q(3492) => [
+ q(Konzo),
+ ],
+ q(3493) => [
+ q(Waube),
+ ],
+ q(3494) => [
+ q(Kota (Gabon)),
+ ],
+ q(3495) => [
+ q(Lagwan),
+ ],
+ q(3496) => [
+ q(Koke),
+ ],
+ q(3497) => [
+ q(Kudu-Camo),
+ ],
+ q(3498) => [
+ q(Kugama),
+ ],
+ q(3499) => [
+ q(Coxima),
+ ],
+ q(3500) => [
+ q(Koyukon),
+ ],
+ q(3501) => [
+ q(Korak),
+ ],
+ q(3502) => [
+ q(Kutto),
+ ],
+ q(3503) => [
+ q(Mullu Kurumba),
+ ],
+ q(3504) => [
+ q(Curripaco),
+ ],
+ q(3505) => [
+ q(Koba),
+ ],
+ q(3506) => [
+ q(Komba),
+ ],
+ q(3507) => [
+ q(Kapingamarangi),
+ ],
+ q(3508) => [
+ q(Kplang),
+ ],
+ q(3509) => [
+ q(Kofei),
+ ],
+ q(3510) => [
+ q(Karaja),
+ ],
+ q(3511) => [
+ q(Kpan),
+ ],
+ q(3512) => [
+ q(Kpala),
+ ],
+ q(3513) => [
+ q(Koho),
+ ],
+ q(3514) => [
+ q(Kepkiriwat),
+ ],
+ q(3515) => [
+ q(Ikposo),
+ ],
+ q(3516) => [
+ q(Korupun-Sela),
+ ],
+ q(3517) => [
+ q(Korafe-Yegha),
+ ],
+ q(3518) => [
+ q(Tehit),
+ ],
+ q(3519) => [
+ q(Karata),
+ ],
+ q(3520) => [
+ q(Kafoa),
+ ],
+ q(3521) => [
+ q(Komi-Zyrian),
+ ],
+ q(3522) => [
+ q(Kobon),
+ ],
+ q(3523) => [
+ q(Mountain Koiali),
+ ],
+ q(3524) => [
+ q(Koryak),
+ ],
+ q(3525) => [
+ q(Kupsabiny),
+ ],
+ q(3526) => [
+ q(Mum),
+ ],
+ q(3527) => [
+ q(Kovai),
+ ],
+ q(3528) => [
+ q(Doromu-Koki),
+ ],
+ q(3529) => [
+ q(Koy Sanjaq Surat),
+ ],
+ q(3530) => [
+ q(Kalagan),
+ ],
+ q(3531) => [
+ q(Kakabai),
+ ],
+ q(3532) => [
+ q(Khe),
+ ],
+ q(3533) => [
+ q(Kisankasa),
+ ],
+ q(3534) => [
+ q(Koitabu),
+ ],
+ q(3535) => [
+ q(Koromira),
+ ],
+ q(3536) => [
+ q(Kotafon Gbe),
+ ],
+ q(3537) => [
+ q(Kyenele),
+ ],
+ q(3538) => [
+ q(Khisa),
+ ],
+ q(3539) => [
+ q(Kaonde),
+ ],
+ q(3540) => [
+ q(Eastern Krahn),
+ ],
+ q(3541) => [
+ q(Kimre),
+ ],
+ q(3542) => [
+ q(Krenak),
+ ],
+ q(3543) => [
+ q(Kimaragang),
+ ],
+ q(3544) => [
+ q(Northern Kissi),
+ ],
+ q(3545) => [
+ q(Klias River Kadazan),
+ ],
+ q(3546) => [
+ q(Seroa),
+ ],
+ q(3547) => [
+ q(Okolod),
+ ],
+ q(3548) => [
+ q(Kandas),
+ ],
+ q(3549) => [
+ q(Mser),
+ ],
+ q(3550) => [
+ q(Koorete),
+ ],
+ q(3551) => [
+ q(Korana),
+ ],
+ q(3552) => [
+ q(Kumhali),
+ ],
+ q(3553) => [
+ q(Karkin),
+ ],
+ q(3554) => [
+ q(Kairui-Midiki),
+ ],
+ q(3555) => [
+ q(Panara),
+ ],
+ q(3556) => [
+ q(Koro (Vanuatu)),
+ ],
+ q(3557) => [
+ q(Kurama),
+ ],
+ q(3558) => [
+ q(Krio),
+ ],
+ q(3559) => [
+ q(Kinaray-A),
+ ],
+ q(3560) => [
+ q(Kerek),
+ ],
+ q(3561) => [
+ q(Krim),
+ ],
+ q(3562) => [
+ q(Sapo),
+ ],
+ q(3563) => [
+ q(Korop),
+ ],
+ q(3564) => [
+ q(Kru'ng 2),
+ ],
+ q(3565) => [
+ q(Gbaya (Sudan)),
+ ],
+ q(3566) => [
+ q(Tumari Kanuri),
+ ],
+ q(3567) => [
+ q(Kavet),
+ ],
+ q(3568) => [
+ q(Western Krahn),
+ ],
+ q(3569) => [
+ q(Karon),
+ ],
+ q(3570) => [
+ q(Kryts),
+ ],
+ q(3571) => [
+ q(Sota Kanum),
+ ],
+ q(3572) => [
+ q(Shuwa-Zamani),
+ ],
+ q(3573) => [
+ q(Shambala),
+ ],
+ q(3574) => [
+ q(Southern Kalinga),
+ ],
+ q(3575) => [
+ q(Kuanua),
+ ],
+ q(3576) => [
+ q(Kuni),
+ ],
+ q(3577) => [
+ q(Bafia),
+ ],
+ q(3578) => [
+ q(Kusaghe),
+ ],
+ q(3579) => [
+ q(Kolsch),
+ ],
+ q(3580) => [
+ q(Krisa),
+ q(I'saka),
+ ],
+ q(3581) => [
+ q(Uare),
+ ],
+ q(3582) => [
+ q(Kansa),
+ ],
+ q(3583) => [
+ q(Kumalu),
+ ],
+ q(3584) => [
+ q(Kumba),
+ ],
+ q(3585) => [
+ q(Kasiguranin),
+ ],
+ q(3586) => [
+ q(Kofa),
+ ],
+ q(3587) => [
+ q(Kaba),
+ ],
+ q(3588) => [
+ q(Kwaami),
+ ],
+ q(3589) => [
+ q(Borong),
+ ],
+ q(3590) => [
+ q(Southern Kisi),
+ ],
+ q(3591) => [
+ q(Winye),
+ ],
+ q(3592) => [
+ q(Khamyang),
+ ],
+ q(3593) => [
+ q(Kusu),
+ ],
+ q(3594) => [
+ q(S'gaw Karen),
+ ],
+ q(3595) => [
+ q(Kedang),
+ ],
+ q(3596) => [
+ q(Kharia Thar),
+ ],
+ q(3597) => [
+ q(Kodaku),
+ ],
+ q(3598) => [
+ q(Katua),
+ ],
+ q(3599) => [
+ q(Kambaata),
+ ],
+ q(3600) => [
+ q(Kholok),
+ ],
+ q(3601) => [
+ q(Kokata),
+ ],
+ q(3602) => [
+ q(Nubri),
+ ],
+ q(3603) => [
+ q(Kwami),
+ ],
+ q(3604) => [
+ q(Kalkutung),
+ ],
+ q(3605) => [
+ q(Karanga),
+ ],
+ q(3606) => [
+ q(North Muyu),
+ ],
+ q(3607) => [
+ q(Plapo Krumen),
+ ],
+ q(3608) => [
+ q(Kaniet),
+ ],
+ q(3609) => [
+ q(Koroshi),
+ ],
+ q(3610) => [
+ q(Kurti),
+ ],
+ q(3611) => [
+ q(Karitiana),
+ ],
+ q(3612) => [
+ q(Kuot),
+ ],
+ q(3613) => [
+ q(Kaduo),
+ ],
+ q(3614) => [
+ q(Katabaga),
+ ],
+ q(3615) => [
+ q(Kota Marudu Tinagas),
+ ],
+ q(3616) => [
+ q(South Muyu),
+ ],
+ q(3617) => [
+ q(Ketum),
+ ],
+ q(3618) => [
+ q(Kituba (Democratic Republic of Congo)),
+ ],
+ q(3619) => [
+ q(Eastern Katu),
+ ],
+ q(3620) => [
+ q(Kato),
+ ],
+ q(3621) => [
+ q(Kaxarari),
+ ],
+ q(3622) => [
+ q(Kango (Bas-Uele District)),
+ ],
+ q(3623) => [
+ q(Ju/'hoan),
+ ],
+ q(3624) => [
+ q(Kutep),
+ ],
+ q(3625) => [
+ q(Kwinsu),
+ ],
+ q(3626) => [
+ q('Auhelawa),
+ ],
+ q(3627) => [
+ q(Kuman),
+ ],
+ q(3628) => [
+ q(Western Katu),
+ ],
+ q(3629) => [
+ q(Kupa),
+ ],
+ q(3630) => [
+ q(Kushi),
+ ],
+ q(3631) => [
+ q(Kuikuro-Kalapalo),
+ ],
+ q(3632) => [
+ q(Kuria),
+ ],
+ q(3633) => [
+ q(Kepo'),
+ ],
+ q(3634) => [
+ q(Kulere),
+ ],
+ q(3635) => [
+ q(Kunama),
+ ],
+ q(3636) => [
+ q(Kumukio),
+ ],
+ q(3637) => [
+ q(Kunimaipa),
+ ],
+ q(3638) => [
+ q(Kusaal),
+ ],
+ q(3639) => [
+ q(Upper Kuskokwim),
+ ],
+ q(3640) => [
+ q(Kur),
+ ],
+ q(3641) => [
+ q(Kpagua),
+ ],
+ q(3642) => [
+ q(Kukatja),
+ ],
+ q(3643) => [
+ q(Kuuku-Ya'u),
+ ],
+ q(3644) => [
+ q(Kunza),
+ ],
+ q(3645) => [
+ q(Bagvalal),
+ ],
+ q(3646) => [
+ q(Kubu),
+ ],
+ q(3647) => [
+ q(Kove),
+ ],
+ q(3648) => [
+ q(Kui (Indonesia)),
+ ],
+ q(3649) => [
+ q(Kalabakan),
+ ],
+ q(3650) => [
+ q(Kabalai),
+ ],
+ q(3651) => [
+ q(Kuni-Boazi),
+ ],
+ q(3652) => [
+ q(Komodo),
+ ],
+ q(3653) => [
+ q(Kwang),
+ ],
+ q(3654) => [
+ q(Psikye),
+ ],
+ q(3655) => [
+ q(Korean Sign Language),
+ ],
+ q(3656) => [
+ q(Kayaw),
+ ],
+ q(3657) => [
+ q(Kendem),
+ ],
+ q(3658) => [
+ q(Border Kuna),
+ ],
+ q(3659) => [
+ q(Dobel),
+ ],
+ q(3660) => [
+ q(Kompane),
+ ],
+ q(3661) => [
+ q(Geba Karen),
+ ],
+ q(3662) => [
+ q(Kerinci),
+ ],
+ q(3663) => [
+ q(Kunggara),
+ ],
+ q(3664) => [
+ q(Lahta Karen),
+ q(Lahta),
+ ],
+ q(3665) => [
+ q(Yinbaw Karen),
+ ],
+ q(3666) => [
+ q(Kola),
+ ],
+ q(3667) => [
+ q(Wersing),
+ ],
+ q(3668) => [
+ q(Parkari Koli),
+ ],
+ q(3669) => [
+ q(Yintale Karen),
+ q(Yintale),
+ ],
+ q(3670) => [
+ q(Tsakwambo),
+ q(Tsaukambo),
+ ],
+ q(3671) => [
+ q(Daw),
+ ],
+ q(3672) => [
+ q(Kwa),
+ ],
+ q(3673) => [
+ q(Likwala),
+ ],
+ q(3674) => [
+ q(Kwaio),
+ ],
+ q(3675) => [
+ q(Kwerba),
+ ],
+ q(3676) => [
+ q(Kwara'ae),
+ ],
+ q(3677) => [
+ q(Sara Kaba Deme),
+ ],
+ q(3678) => [
+ q(Kowiai),
+ ],
+ q(3679) => [
+ q(Awa-Cuaiquer),
+ ],
+ q(3680) => [
+ q(Kwanga),
+ ],
+ q(3681) => [
+ q(Kwakiutl),
+ ],
+ q(3682) => [
+ q(Kofyar),
+ ],
+ q(3683) => [
+ q(Kwambi),
+ ],
+ q(3684) => [
+ q(Kwangali),
+ ],
+ q(3685) => [
+ q(Kwomtari),
+ ],
+ q(3686) => [
+ q(Kodia),
+ ],
+ q(3687) => [
+ q(Kwak),
+ ],
+ q(3688) => [
+ q(Kwer),
+ ],
+ q(3689) => [
+ q(Kwese),
+ ],
+ q(3690) => [
+ q(Kwesten),
+ ],
+ q(3691) => [
+ q(Kwakum),
+ ],
+ q(3692) => [
+ q(Sara Kaba Naa),
+ ],
+ q(3693) => [
+ q(Kwinti),
+ ],
+ q(3694) => [
+ q(Khirwar),
+ ],
+ q(3695) => [
+ q(San Salvador Kongo),
+ ],
+ q(3696) => [
+ q(Kwadi),
+ ],
+ q(3697) => [
+ q(Kairiru),
+ ],
+ q(3698) => [
+ q(Krobu),
+ ],
+ q(3699) => [
+ q(Konso),
+ q(Khonso),
+ ],
+ q(3700) => [
+ q(Brunei),
+ ],
+ q(3701) => [
+ q(Kakihum),
+ ],
+ q(3702) => [
+ q(Manumanaw Karen),
+ q(Manumanaw),
+ ],
+ q(3703) => [
+ q(Karo (Ethiopia)),
+ ],
+ q(3704) => [
+ q(Keningau Murut),
+ ],
+ q(3705) => [
+ q(Kulfa),
+ ],
+ q(3706) => [
+ q(Zayein Karen),
+ ],
+ q(3707) => [
+ q(Nepali Kurux),
+ ],
+ q(3708) => [
+ q(Northern Khmer),
+ ],
+ q(3709) => [
+ q(Kanowit-Tanjong Melanau),
+ ],
+ q(3710) => [
+ q(Kanoe),
+ ],
+ q(3711) => [
+ q(Wadiyara Koli),
+ ],
+ q(3712) => [
+ q(Smarky Kanum),
+ ],
+ q(3713) => [
+ q(Koro (Papua New Guinea)),
+ ],
+ q(3714) => [
+ q(Kangjia),
+ ],
+ q(3715) => [
+ q(Koiwat),
+ ],
+ q(3716) => [
+ q(Kui (India)),
+ ],
+ q(3717) => [
+ q(Kuvi),
+ ],
+ q(3718) => [
+ q(Konai),
+ ],
+ q(3719) => [
+ q(Likuba),
+ ],
+ q(3720) => [
+ q(Kayong),
+ ],
+ q(3721) => [
+ q(Kerewo),
+ ],
+ q(3722) => [
+ q(Kwaya),
+ ],
+ q(3723) => [
+ q(Butbut Kalinga),
+ ],
+ q(3724) => [
+ q(Kyaka),
+ ],
+ q(3725) => [
+ q(Karey),
+ ],
+ q(3726) => [
+ q(Krache),
+ ],
+ q(3727) => [
+ q(Kouya),
+ ],
+ q(3728) => [
+ q(Keyagana),
+ ],
+ q(3729) => [
+ q(Karok),
+ ],
+ q(3730) => [
+ q(Kiput),
+ ],
+ q(3731) => [
+ q(Karao),
+ ],
+ q(3732) => [
+ q(Kamayo),
+ ],
+ q(3733) => [
+ q(Kalapuya),
+ ],
+ q(3734) => [
+ q(Kpatili),
+ ],
+ q(3735) => [
+ q(Northern Binukidnon),
+ ],
+ q(3736) => [
+ q(Kelon),
+ ],
+ q(3737) => [
+ q(Kang),
+ ],
+ q(3738) => [
+ q(Kenga),
+ ],
+ q(3739) => [
+ q(Kuruaya),
+ ],
+ q(3740) => [
+ q(Baram Kayan),
+ ],
+ q(3741) => [
+ q(Kayagar),
+ ],
+ q(3742) => [
+ q(Western Kayah),
+ ],
+ q(3743) => [
+ q(Kayort),
+ ],
+ q(3744) => [
+ q(Kudmali),
+ ],
+ q(3745) => [
+ q(Rapoisi),
+ ],
+ q(3746) => [
+ q(Kambaira),
+ ],
+ q(3747) => [
+ q(Kayabi),
+ ],
+ q(3748) => [
+ q(Western Karaboro),
+ ],
+ q(3749) => [
+ q(Kaibobo),
+ ],
+ q(3750) => [
+ q(Bondoukou Kulango),
+ ],
+ q(3751) => [
+ q(Kadai),
+ ],
+ q(3752) => [
+ q(Kosena),
+ ],
+ q(3753) => [
+ q(Da'a Kaili),
+ ],
+ q(3754) => [
+ q(Kikai),
+ ],
+ q(3755) => [
+ q(Kelabit),
+ ],
+ q(3756) => [
+ q(Coastal Kadazan),
+ ],
+ q(3757) => [
+ q(Kazukuru),
+ ],
+ q(3758) => [
+ q(Kayeli),
+ ],
+ q(3759) => [
+ q(Kais),
+ ],
+ q(3760) => [
+ q(Kokola),
+ ],
+ q(3761) => [
+ q(Kaningi),
+ ],
+ q(3762) => [
+ q(Kaidipang),
+ ],
+ q(3763) => [
+ q(Kaike),
+ ],
+ q(3764) => [
+ q(Karang),
+ ],
+ q(3765) => [
+ q(Sugut Dusun),
+ ],
+ q(3766) => [
+ q(Tambunan Dusun),
+ ],
+ q(3767) => [
+ q(Kayupulau),
+ ],
+ q(3768) => [
+ q(Komyandaret),
+ ],
+ q(3769) => [
+ q(Kariri-Xoco),
+ ],
+ q(3770) => [
+ q(Kamarian),
+ ],
+ q(3771) => [
+ q(Kango (Tshopo District)),
+ ],
+ q(3772) => [
+ q(Kalabra),
+ ],
+ q(3773) => [
+ q(Southern Subanen),
+ ],
+ q(3774) => [
+ q(Linear A),
+ ],
+ q(3775) => [
+ q(Lacandon),
+ ],
+ q(3776) => [
+ q(Pattani),
+ ],
+ q(3777) => [
+ q(Lafofa),
+ ],
+ q(3778) => [
+ q(Langi),
+ ],
+ q(3779) => [
+ q(Lambya),
+ ],
+ q(3780) => [
+ q(Lango (Uganda)),
+ ],
+ q(3781) => [
+ q(Laka (Nigeria)),
+ ],
+ q(3782) => [
+ q(Lalia),
+ ],
+ q(3783) => [
+ q(Laru),
+ ],
+ q(3784) => [
+ q(Laka (Chad)),
+ ],
+ q(3785) => [
+ q(Qabiao),
+ ],
+ q(3786) => [
+ q(Larteh),
+ ],
+ q(3787) => [
+ q(Lama (Togo)),
+ ],
+ q(3788) => [
+ q(Laba),
+ ],
+ q(3789) => [
+ q(Lauje),
+ ],
+ q(3790) => [
+ q(Tiwa),
+ ],
+ q(3791) => [
+ q(Lama (Myanmar)),
+ ],
+ q(3792) => [
+ q(Aribwatsa),
+ ],
+ q(3793) => [
+ q(Lui),
+ ],
+ q(3794) => [
+ q(Label),
+ ],
+ q(3795) => [
+ q(Lakkia),
+ ],
+ q(3796) => [
+ q(Lak),
+ ],
+ q(3797) => [
+ q(Tinani),
+ ],
+ q(3798) => [
+ q(Laopang),
+ ],
+ q(3799) => [
+ q(La'bi),
+ ],
+ q(3800) => [
+ q(Ladakhi),
+ ],
+ q(3801) => [
+ q(Central Bontok),
+ ],
+ q(3802) => [
+ q(Libon Bikol),
+ ],
+ q(3803) => [
+ q(Lodhi),
+ ],
+ q(3804) => [
+ q(Lamet),
+ ],
+ q(3805) => [
+ q(Laven),
+ ],
+ q(3806) => [
+ q(Wampar),
+ ],
+ q(3807) => [
+ q(Lohorung),
+ ],
+ q(3808) => [
+ q(Libyan Sign Language),
+ ],
+ q(3809) => [
+ q(Lachi),
+ ],
+ q(3810) => [
+ q(Labu),
+ ],
+ q(3811) => [
+ q(Lavatbura-Lamusong),
+ ],
+ q(3812) => [
+ q(Tolaki),
+ ],
+ q(3813) => [
+ q(Lawangan),
+ ],
+ q(3814) => [
+ q(Lamu-Lamu),
+ ],
+ q(3815) => [
+ q(Lardil),
+ ],
+ q(3816) => [
+ q(Legenyem),
+ ],
+ q(3817) => [
+ q(Lola),
+ ],
+ q(3818) => [
+ q(Loncong),
+ ],
+ q(3819) => [
+ q(Lubu),
+ ],
+ q(3820) => [
+ q(Luchazi),
+ ],
+ q(3821) => [
+ q(Lisela),
+ ],
+ q(3822) => [
+ q(Tungag),
+ ],
+ q(3823) => [
+ q(Western Lawa),
+ ],
+ q(3824) => [
+ q(Lisabata-Nuniali),
+ ],
+ q(3825) => [
+ q(Duya),
+ ],
+ q(3826) => [
+ q(Luri),
+ ],
+ q(3827) => [
+ q(Lenyima),
+ ],
+ q(3828) => [
+ q(Lamja-Dengsa-Tola),
+ ],
+ q(3829) => [
+ q(Laari),
+ ],
+ q(3830) => [
+ q(Lemoro),
+ ],
+ q(3831) => [
+ q(Leelau),
+ ],
+ q(3832) => [
+ q(Kaan),
+ ],
+ q(3833) => [
+ q(Landoma),
+ ],
+ q(3834) => [
+ q(Laadan),
+ ],
+ q(3835) => [
+ q(Loo),
+ ],
+ q(3836) => [
+ q(Tso),
+ ],
+ q(3837) => [
+ q(Lufu),
+ ],
+ q(3838) => [
+ q(Lega-Shabunda),
+ ],
+ q(3839) => [
+ q(Lala-Bisa),
+ ],
+ q(3840) => [
+ q(Leco),
+ ],
+ q(3841) => [
+ q(Lendu),
+ ],
+ q(3842) => [
+ q(Lyele),
+ ],
+ q(3843) => [
+ q(Lelemi),
+ ],
+ q(3844) => [
+ q(Lengua),
+ ],
+ q(3845) => [
+ q(Lenje),
+ ],
+ q(3846) => [
+ q(Lemio),
+ ],
+ q(3847) => [
+ q(Lengola),
+ ],
+ q(3848) => [
+ q(Leipon),
+ ],
+ q(3849) => [
+ q(Lele (Democratic Republic of Congo)),
+ ],
+ q(3850) => [
+ q(Nomaande),
+ ],
+ q(3851) => [
+ q(Lenca),
+ ],
+ q(3852) => [
+ q(Leti (Cameroon)),
+ ],
+ q(3853) => [
+ q(Lepcha),
+ ],
+ q(3854) => [
+ q(Lembena),
+ ],
+ q(3855) => [
+ q(Lenkau),
+ ],
+ q(3856) => [
+ q(Lese),
+ ],
+ q(3857) => [
+ q(Lesing-Gelimi),
+ q(Amio-Gelimi),
+ ],
+ q(3858) => [
+ q(Kara (Papua New Guinea)),
+ ],
+ q(3859) => [
+ q(Lamma),
+ ],
+ q(3860) => [
+ q(Ledo Kaili),
+ ],
+ q(3861) => [
+ q(Luang),
+ ],
+ q(3862) => [
+ q(Lemolang),
+ ],
+ q(3863) => [
+ q(Lefa),
+ ],
+ q(3864) => [
+ q(Lingua Franca Nova),
+ ],
+ q(3865) => [
+ q(Lungga),
+ ],
+ q(3866) => [
+ q(Laghu),
+ ],
+ q(3867) => [
+ q(Lugbara),
+ ],
+ q(3868) => [
+ q(Laghuu),
+ ],
+ q(3869) => [
+ q(Lengilu),
+ ],
+ q(3870) => [
+ q(Lingarak),
+ q(Neverver),
+ ],
+ q(3871) => [
+ q(Wala),
+ ],
+ q(3872) => [
+ q(Lega-Mwenga),
+ ],
+ q(3873) => [
+ q(Opuuo),
+ ],
+ q(3874) => [
+ q(Logba),
+ ],
+ q(3875) => [
+ q(Lengo),
+ ],
+ q(3876) => [
+ q(Pahi),
+ ],
+ q(3877) => [
+ q(Longgu),
+ ],
+ q(3878) => [
+ q(Ligenza),
+ ],
+ q(3879) => [
+ q(Laha (Viet Nam)),
+ ],
+ q(3880) => [
+ q(Laha (Indonesia)),
+ ],
+ q(3881) => [
+ q(Lahu Shi),
+ ],
+ q(3882) => [
+ q(Lahul Lohar),
+ ],
+ q(3883) => [
+ q(Lhomi),
+ ],
+ q(3884) => [
+ q(Lahanan),
+ ],
+ q(3885) => [
+ q(Lhokpu),
+ ],
+ q(3886) => [
+ q(Mlahso),
+ ],
+ q(3887) => [
+ q(Lo-Toga),
+ ],
+ q(3888) => [
+ q(Lahu),
+ ],
+ q(3889) => [
+ q(West-Central Limba),
+ ],
+ q(3890) => [
+ q(Likum),
+ ],
+ q(3891) => [
+ q(Hlai),
+ ],
+ q(3892) => [
+ q(Nyindrou),
+ ],
+ q(3893) => [
+ q(Likila),
+ ],
+ q(3894) => [
+ q(Limbu),
+ ],
+ q(3895) => [
+ q(Ligbi),
+ ],
+ q(3896) => [
+ q(Lihir),
+ ],
+ q(3897) => [
+ q(Lingkhim),
+ ],
+ q(3898) => [
+ q(Ligurian),
+ ],
+ q(3899) => [
+ q(Lika),
+ ],
+ q(3900) => [
+ q(Lillooet),
+ ],
+ q(3901) => [
+ q(Liki),
+ ],
+ q(3902) => [
+ q(Sekpele),
+ ],
+ q(3903) => [
+ q(Libido),
+ ],
+ q(3904) => [
+ q(Liberian English),
+ ],
+ q(3905) => [
+ q(Lisu),
+ ],
+ q(3906) => [
+ q(Logorik),
+ ],
+ q(3907) => [
+ q(Liv),
+ ],
+ q(3908) => [
+ q(Col),
+ ],
+ q(3909) => [
+ q(Liabuku),
+ ],
+ q(3910) => [
+ q(Banda-Bambari),
+ ],
+ q(3911) => [
+ q(Libinza),
+ ],
+ q(3912) => [
+ q(Rampi),
+ ],
+ q(3913) => [
+ q(Laiyolo),
+ ],
+ q(3914) => [
+ q(Li'o),
+ ],
+ q(3915) => [
+ q(Lampung Api),
+ ],
+ q(3916) => [
+ q(Lakalei),
+ ],
+ q(3917) => [
+ q(Kabras),
+ q(Lukabaras),
+ ],
+ q(3918) => [
+ q(Kucong),
+ ],
+ q(3919) => [
+ q(Lakonde),
+ ],
+ q(3920) => [
+ q(Kenyi),
+ ],
+ q(3921) => [
+ q(Lakha),
+ ],
+ q(3922) => [
+ q(Laki),
+ ],
+ q(3923) => [
+ q(Remun),
+ ],
+ q(3924) => [
+ q(Laeko-Libuat),
+ ],
+ q(3925) => [
+ q(Lakon),
+ q(Vure),
+ ],
+ q(3926) => [
+ q(Khayo),
+ q(Olukhayo),
+ ],
+ q(3927) => [
+ q(Pari),
+ ],
+ q(3928) => [
+ q(Kisa),
+ q(Olushisa),
+ ],
+ q(3929) => [
+ q(Lakota),
+ ],
+ q(3930) => [
+ q(Lokoya),
+ ],
+ q(3931) => [
+ q(Lala-Roba),
+ ],
+ q(3932) => [
+ q(Lolo),
+ ],
+ q(3933) => [
+ q(Lele (Guinea)),
+ ],
+ q(3934) => [
+ q(Ladin),
+ ],
+ q(3935) => [
+ q(Lele (Papua New Guinea)),
+ ],
+ q(3936) => [
+ q(Hermit),
+ ],
+ q(3937) => [
+ q(Lole),
+ ],
+ q(3938) => [
+ q(Lamu),
+ ],
+ q(3939) => [
+ q(Teke-Laali),
+ ],
+ q(3940) => [
+ q(Ladji Ladji),
+ ],
+ q(3941) => [
+ q(Lelak),
+ ],
+ q(3942) => [
+ q(Lilau),
+ ],
+ q(3943) => [
+ q(Lasalimu),
+ ],
+ q(3944) => [
+ q(Lele (Chad)),
+ ],
+ q(3945) => [
+ q(Khlor),
+ ],
+ q(3946) => [
+ q(North Efate),
+ ],
+ q(3947) => [
+ q(Lolak),
+ ],
+ q(3948) => [
+ q(Lithuanian Sign Language),
+ ],
+ q(3949) => [
+ q(Lau),
+ ],
+ q(3950) => [
+ q(Lauan),
+ ],
+ q(3951) => [
+ q(East Limba),
+ ],
+ q(3952) => [
+ q(Merei),
+ ],
+ q(3953) => [
+ q(Limilngan),
+ ],
+ q(3954) => [
+ q(Lumun),
+ ],
+ q(3955) => [
+ q(Peve),
+ ],
+ q(3956) => [
+ q(South Lembata),
+ ],
+ q(3957) => [
+ q(Lamogai),
+ ],
+ q(3958) => [
+ q(Lambichhong),
+ ],
+ q(3959) => [
+ q(Lombi),
+ ],
+ q(3960) => [
+ q(West Lembata),
+ ],
+ q(3961) => [
+ q(Lamkang),
+ ],
+ q(3962) => [
+ q(Hano),
+ ],
+ q(3963) => [
+ q(Lamam),
+ ],
+ q(3964) => [
+ q(Lambadi),
+ ],
+ q(3965) => [
+ q(Lombard),
+ ],
+ q(3966) => [
+ q(Limbum),
+ ],
+ q(3967) => [
+ q(Lamatuka),
+ ],
+ q(3968) => [
+ q(Lamalera),
+ ],
+ q(3969) => [
+ q(Lamenu),
+ ],
+ q(3970) => [
+ q(Lomaiviti),
+ ],
+ q(3971) => [
+ q(Lake Miwok),
+ ],
+ q(3972) => [
+ q(Laimbue),
+ ],
+ q(3973) => [
+ q(Lamboya),
+ ],
+ q(3974) => [
+ q(Lumbee),
+ ],
+ q(3975) => [
+ q(Langbashe),
+ ],
+ q(3976) => [
+ q(Mbalanhu),
+ ],
+ q(3977) => [
+ q(Lundayeh),
+ q(Lun Bawang),
+ ],
+ q(3978) => [
+ q(Langobardic),
+ ],
+ q(3979) => [
+ q(Lanoh),
+ ],
+ q(3980) => [
+ q(Daantanai'),
+ ],
+ q(3981) => [
+ q(Leningitij),
+ ],
+ q(3982) => [
+ q(South Central Banda),
+ ],
+ q(3983) => [
+ q(Langam),
+ ],
+ q(3984) => [
+ q(Lorediakarkar),
+ ],
+ q(3985) => [
+ q(Lango (Sudan)),
+ ],
+ q(3986) => [
+ q(Lamnso'),
+ ],
+ q(3987) => [
+ q(Longuda),
+ ],
+ q(3988) => [
+ q(Lonzo),
+ ],
+ q(3989) => [
+ q(Loloda),
+ ],
+ q(3990) => [
+ q(Lobi),
+ ],
+ q(3991) => [
+ q(Inonhan),
+ ],
+ q(3992) => [
+ q(Saluan),
+ ],
+ q(3993) => [
+ q(Logol),
+ ],
+ q(3994) => [
+ q(Logo),
+ ],
+ q(3995) => [
+ q(Narim),
+ ],
+ q(3996) => [
+ q(Loma (Cote d'Ivoire)),
+ ],
+ q(3997) => [
+ q(Lou),
+ ],
+ q(3998) => [
+ q(Loko),
+ ],
+ q(3999) => [
+ q(Loma (Liberia)),
+ ],
+ q(4000) => [
+ q(Malawi Lomwe),
+ ],
+ q(4001) => [
+ q(Lombo),
+ ],
+ q(4002) => [
+ q(Lopa),
+ ],
+ q(4003) => [
+ q(Lobala),
+ ],
+ q(4004) => [
+ q(Teen),
+ ],
+ q(4005) => [
+ q(Loniu),
+ ],
+ q(4006) => [
+ q(Otuho),
+ ],
+ q(4007) => [
+ q(Louisiana Creole French),
+ ],
+ q(4008) => [
+ q(Lopi),
+ ],
+ q(4009) => [
+ q(Tampias Lobu),
+ ],
+ q(4010) => [
+ q(Loun),
+ ],
+ q(4011) => [
+ q(Loke),
+ ],
+ q(4012) => [
+ q(Lelepa),
+ ],
+ q(4013) => [
+ q(Lepki),
+ ],
+ q(4014) => [
+ q(Long Phuri Naga),
+ ],
+ q(4015) => [
+ q(Lipo),
+ ],
+ q(4016) => [
+ q(Lopit),
+ ],
+ q(4017) => [
+ q(Rara Bakati'),
+ ],
+ q(4018) => [
+ q(Northern Luri),
+ ],
+ q(4019) => [
+ q(Laurentian),
+ ],
+ q(4020) => [
+ q(Laragia),
+ ],
+ q(4021) => [
+ q(Marachi),
+ q(Olumarachi),
+ ],
+ q(4022) => [
+ q(Loarki),
+ ],
+ q(4023) => [
+ q(Lari),
+ ],
+ q(4024) => [
+ q(Marama),
+ q(Olumarama),
+ ],
+ q(4025) => [
+ q(Lorang),
+ ],
+ q(4026) => [
+ q(Laro),
+ ],
+ q(4027) => [
+ q(Southern Yamphu),
+ ],
+ q(4028) => [
+ q(Larantuka Malay),
+ ],
+ q(4029) => [
+ q(Larevat),
+ ],
+ q(4030) => [
+ q(Lemerig),
+ ],
+ q(4031) => [
+ q(Lasgerdi),
+ ],
+ q(4032) => [
+ q(Lishana Deni),
+ ],
+ q(4033) => [
+ q(Lusengo),
+ ],
+ q(4034) => [
+ q(Lyons Sign Language),
+ ],
+ q(4035) => [
+ q(Lish),
+ ],
+ q(4036) => [
+ q(Lashi),
+ ],
+ q(4037) => [
+ q(Latvian Sign Language),
+ ],
+ q(4038) => [
+ q(Saamia),
+ q(Olusamia),
+ ],
+ q(4039) => [
+ q(Laos Sign Language),
+ ],
+ q(4040) => [
+ q(Panamanian Sign Language),
+ q(Lengua de Senas Panamenas),
+ ],
+ q(4041) => [
+ q(Aruop),
+ ],
+ q(4042) => [
+ q(Lasi),
+ ],
+ q(4043) => [
+ q(Trinidad and Tobago Sign Language),
+ ],
+ q(4044) => [
+ q(Mauritian Sign Language),
+ ],
+ q(4045) => [
+ q(Late Middle Chinese),
+ ],
+ q(4046) => [
+ q(Latgalian),
+ ],
+ q(4047) => [
+ q(Leti (Indonesia)),
+ ],
+ q(4048) => [
+ q(Latunde),
+ ],
+ q(4049) => [
+ q(Tsotso),
+ q(Olutsotso),
+ ],
+ q(4050) => [
+ q(Tachoni),
+ q(Lutachoni),
+ ],
+ q(4051) => [
+ q(Latu),
+ ],
+ q(4052) => [
+ q(Aringa),
+ ],
+ q(4053) => [
+ q(Ludian),
+ ],
+ q(4054) => [
+ q(Luvale),
+ ],
+ q(4055) => [
+ q(Laua),
+ ],
+ q(4056) => [
+ q(Luna),
+ ],
+ q(4057) => [
+ q(Lunanakha),
+ ],
+ q(4058) => [
+ q(Olu'bo),
+ ],
+ q(4059) => [
+ q(Luimbi),
+ ],
+ q(4060) => [
+ q(Lumbu),
+ ],
+ q(4061) => [
+ q(Lucumi),
+ ],
+ q(4062) => [
+ q(Laura),
+ ],
+ q(4063) => [
+ q(Lushootseed),
+ ],
+ q(4064) => [
+ q(Lumba-Yakkha),
+ ],
+ q(4065) => [
+ q(Luwati),
+ ],
+ q(4066) => [
+ q(Luo (Cameroon)),
+ ],
+ q(4067) => [
+ q(Luyia),
+ q(Oluluyia),
+ ],
+ q(4068) => [
+ q(Southern Luri),
+ ],
+ q(4069) => [
+ q(Maku'a),
+ ],
+ q(4070) => [
+ q(Lavukaleve),
+ ],
+ q(4071) => [
+ q(Standard Latvian),
+ ],
+ q(4072) => [
+ q(Levuka),
+ ],
+ q(4073) => [
+ q(Lwalu),
+ ],
+ q(4074) => [
+ q(Lewo Eleng),
+ ],
+ q(4075) => [
+ q(Wanga),
+ q(Oluwanga),
+ ],
+ q(4076) => [
+ q(White Lachi),
+ ],
+ q(4077) => [
+ q(Eastern Lawa),
+ ],
+ q(4078) => [
+ q(Laomian),
+ ],
+ q(4079) => [
+ q(Luwo),
+ ],
+ q(4080) => [
+ q(Lewotobi),
+ ],
+ q(4081) => [
+ q(Lewo),
+ ],
+ q(4082) => [
+ q(Layakha),
+ ],
+ q(4083) => [
+ q(Lyngngam),
+ ],
+ q(4084) => [
+ q(Luyana),
+ ],
+ q(4085) => [
+ q(Literary Chinese),
+ ],
+ q(4086) => [
+ q(Litzlitz),
+ ],
+ q(4087) => [
+ q(Leinong Naga),
+ ],
+ q(4088) => [
+ q(Laz),
+ ],
+ q(4089) => [
+ q(San Jeronimo Tecoatl Mazatec),
+ ],
+ q(4090) => [
+ q(Yutanduchi Mixtec),
+ ],
+ q(4091) => [
+ q(Bo-Rukul),
+ ],
+ q(4092) => [
+ q(Mafa),
+ ],
+ q(4093) => [
+ q(Jalapa De Diaz Mazatec),
+ ],
+ q(4094) => [
+ q(Mam),
+ ],
+ q(4095) => [
+ q(Chiquihuitlan Mazatec),
+ ],
+ q(4096) => [
+ q(San Francisco Matlatzinca),
+ ],
+ q(4097) => [
+ q(Huautla Mazatec),
+ ],
+ q(4098) => [
+ q(Satere-Mawe),
+ ],
+ q(4099) => [
+ q(Mampruli),
+ ],
+ q(4100) => [
+ q(North Moluccan Malay),
+ ],
+ q(4101) => [
+ q(Central Mazahua),
+ ],
+ q(4102) => [
+ q(Higaonon),
+ ],
+ q(4103) => [
+ q(Western Bukidnon Manobo),
+ ],
+ q(4104) => [
+ q(Macushi),
+ ],
+ q(4105) => [
+ q(Dibabawon Manobo),
+ ],
+ q(4106) => [
+ q(Molale),
+ ],
+ q(4107) => [
+ q(Baba Malay),
+ ],
+ q(4108) => [
+ q(Mangseng),
+ ],
+ q(4109) => [
+ q(Ilianen Manobo),
+ ],
+ q(4110) => [
+ q(Nadeb),
+ ],
+ q(4111) => [
+ q(Malol),
+ ],
+ q(4112) => [
+ q(Maxakali),
+ ],
+ q(4113) => [
+ q(Ombamba),
+ ],
+ q(4114) => [
+ q(Macaguan),
+ ],
+ q(4115) => [
+ q(Mbo (Cameroon)),
+ ],
+ q(4116) => [
+ q(Malayo),
+ ],
+ q(4117) => [
+ q(Maisin),
+ ],
+ q(4118) => [
+ q(Nukak Maku),
+ ],
+ q(4119) => [
+ q(Sarangani Manobo),
+ ],
+ q(4120) => [
+ q(Matigsalug Manobo),
+ ],
+ q(4121) => [
+ q(Mbula-Bwazza),
+ ],
+ q(4122) => [
+ q(Mbulungish),
+ ],
+ q(4123) => [
+ q(Maring),
+ ],
+ q(4124) => [
+ q(Mari (East Sepik Province)),
+ ],
+ q(4125) => [
+ q(Memoni),
+ ],
+ q(4126) => [
+ q(Amoltepec Mixtec),
+ ],
+ q(4127) => [
+ q(Maca),
+ ],
+ q(4128) => [
+ q(Machiguenga),
+ ],
+ q(4129) => [
+ q(Bitur),
+ ],
+ q(4130) => [
+ q(Sharanahua),
+ ],
+ q(4131) => [
+ q(Itundujia Mixtec),
+ ],
+ q(4132) => [
+ q(Matses),
+ ],
+ q(4133) => [
+ q(Mapoyo),
+ ],
+ q(4134) => [
+ q(Maquiritari),
+ ],
+ q(4135) => [
+ q(Mese),
+ ],
+ q(4136) => [
+ q(Mvanip),
+ ],
+ q(4137) => [
+ q(Mbunda),
+ ],
+ q(4138) => [
+ q(Macaguaje),
+ ],
+ q(4139) => [
+ q(Malaccan Creole Portuguese),
+ ],
+ q(4140) => [
+ q(Masana),
+ ],
+ q(4141) => [
+ q(Coatlan Mixe),
+ ],
+ q(4142) => [
+ q(Makaa),
+ ],
+ q(4143) => [
+ q(Ese),
+ ],
+ q(4144) => [
+ q(Menya),
+ ],
+ q(4145) => [
+ q(Mambai),
+ ],
+ q(4146) => [
+ q(Mengisa),
+ ],
+ q(4147) => [
+ q(Cameroon Mambila),
+ ],
+ q(4148) => [
+ q(Minanibai),
+ ],
+ q(4149) => [
+ q(Mawa (Chad)),
+ ],
+ q(4150) => [
+ q(Mpiemo),
+ ],
+ q(4151) => [
+ q(South Watut),
+ ],
+ q(4152) => [
+ q(Mawan),
+ ],
+ q(4153) => [
+ q(Mada (Nigeria)),
+ ],
+ q(4154) => [
+ q(Morigi),
+ ],
+ q(4155) => [
+ q(Male (Papua New Guinea)),
+ ],
+ q(4156) => [
+ q(Mbum),
+ ],
+ q(4157) => [
+ q(Maba (Chad)),
+ ],
+ q(4158) => [
+ q(Massalat),
+ ],
+ q(4159) => [
+ q(Maguindanaon),
+ ],
+ q(4160) => [
+ q(Mamvu),
+ ],
+ q(4161) => [
+ q(Mangbetu),
+ ],
+ q(4162) => [
+ q(Mangbutu),
+ ],
+ q(4163) => [
+ q(Maltese Sign Language),
+ ],
+ q(4164) => [
+ q(Mayogo),
+ ],
+ q(4165) => [
+ q(Mbati),
+ ],
+ q(4166) => [
+ q(Mbala),
+ ],
+ q(4167) => [
+ q(Mbole),
+ ],
+ q(4168) => [
+ q(Maria (Papua New Guinea)),
+ ],
+ q(4169) => [
+ q(Mbere),
+ ],
+ q(4170) => [
+ q(Mboko),
+ ],
+ q(4171) => [
+ q(Santa Lucia Monteverde Mixtec),
+ ],
+ q(4172) => [
+ q(Mbosi),
+ ],
+ q(4173) => [
+ q(Dizin),
+ ],
+ q(4174) => [
+ q(Male (Ethiopia)),
+ ],
+ q(4175) => [
+ q(Surui Do Para),
+ ],
+ q(4176) => [
+ q(Menka),
+ ],
+ q(4177) => [
+ q(Ikobi),
+ ],
+ q(4178) => [
+ q(Mara),
+ ],
+ q(4179) => [
+ q(Melpa),
+ ],
+ q(4180) => [
+ q(Mengen),
+ ],
+ q(4181) => [
+ q(Megam),
+ ],
+ q(4182) => [
+ q(Mea),
+ ],
+ q(4183) => [
+ q(Southwestern Tlaxiaco Mixtec),
+ ],
+ q(4184) => [
+ q(Midob),
+ ],
+ q(4185) => [
+ q(Meyah),
+ ],
+ q(4186) => [
+ q(Mekeo),
+ ],
+ q(4187) => [
+ q(Central Melanau),
+ ],
+ q(4188) => [
+ q(Mangala),
+ ],
+ q(4189) => [
+ q(Kedah Malay),
+ ],
+ q(4190) => [
+ q(Miriwung),
+ ],
+ q(4191) => [
+ q(Merey),
+ ],
+ q(4192) => [
+ q(Meru),
+ ],
+ q(4193) => [
+ q(Masmaje),
+ ],
+ q(4194) => [
+ q(Mato),
+ ],
+ q(4195) => [
+ q(Motu),
+ ],
+ q(4196) => [
+ q(Mann),
+ ],
+ q(4197) => [
+ q(Maaka),
+ ],
+ q(4198) => [
+ q(Hassaniyya),
+ ],
+ q(4199) => [
+ q(Menominee),
+ ],
+ q(4200) => [
+ q(Pattani Malay),
+ ],
+ q(4201) => [
+ q(Bangka),
+ ],
+ q(4202) => [
+ q(Mba),
+ ],
+ q(4203) => [
+ q(Mendankwe-Nkwen),
+ ],
+ q(4204) => [
+ q(Morisyen),
+ ],
+ q(4205) => [
+ q(Naki),
+ ],
+ q(4206) => [
+ q(Mixifore),
+ ],
+ q(4207) => [
+ q(Matal),
+ ],
+ q(4208) => [
+ q(Wandala),
+ ],
+ q(4209) => [
+ q(Mefele),
+ ],
+ q(4210) => [
+ q(North Mofu),
+ ],
+ q(4211) => [
+ q(Putai),
+ ],
+ q(4212) => [
+ q(Marghi South),
+ ],
+ q(4213) => [
+ q(Cross River Mbembe),
+ ],
+ q(4214) => [
+ q(Mbe),
+ ],
+ q(4215) => [
+ q(Makassar Malay),
+ ],
+ q(4216) => [
+ q(Moba),
+ ],
+ q(4217) => [
+ q(Marithiel),
+ ],
+ q(4218) => [
+ q(Mexican Sign Language),
+ ],
+ q(4219) => [
+ q(Mokerang),
+ ],
+ q(4220) => [
+ q(Mbwela),
+ ],
+ q(4221) => [
+ q(Mandjak),
+ ],
+ q(4222) => [
+ q(Mulaha),
+ ],
+ q(4223) => [
+ q(Melo),
+ ],
+ q(4224) => [
+ q(Mayo),
+ ],
+ q(4225) => [
+ q(Mabaan),
+ ],
+ q(4226) => [
+ q(Mararit),
+ ],
+ q(4227) => [
+ q(Morokodo),
+ ],
+ q(4228) => [
+ q(Moru),
+ ],
+ q(4229) => [
+ q(Mango),
+ ],
+ q(4230) => [
+ q(Maklew),
+ ],
+ q(4231) => [
+ q(Mpumpong),
+ ],
+ q(4232) => [
+ q(Makhuwa-Meetto),
+ ],
+ q(4233) => [
+ q(Lijili),
+ ],
+ q(4234) => [
+ q(Abureni),
+ ],
+ q(4235) => [
+ q(Mawes),
+ ],
+ q(4236) => [
+ q(Maleu-Kilenge),
+ ],
+ q(4237) => [
+ q(Mambae),
+ ],
+ q(4238) => [
+ q(Mbangi),
+ ],
+ q(4239) => [
+ q(Meta'),
+ ],
+ q(4240) => [
+ q(Eastern Magar),
+ ],
+ q(4241) => [
+ q(Malila),
+ ],
+ q(4242) => [
+ q(Mambwe-Lungu),
+ ],
+ q(4243) => [
+ q(Manda (Tanzania)),
+ ],
+ q(4244) => [
+ q(Mongol),
+ ],
+ q(4245) => [
+ q(Mailu),
+ ],
+ q(4246) => [
+ q(Matengo),
+ ],
+ q(4247) => [
+ q(Matumbi),
+ ],
+ q(4248) => [
+ q(Mbunga),
+ ],
+ q(4249) => [
+ q(Mbugwe),
+ ],
+ q(4250) => [
+ q(Manda (India)),
+ ],
+ q(4251) => [
+ q(Mahongwe),
+ ],
+ q(4252) => [
+ q(Mocho),
+ ],
+ q(4253) => [
+ q(Mbugu),
+ ],
+ q(4254) => [
+ q(Besisi),
+ q(Mah Meri),
+ ],
+ q(4255) => [
+ q(Mamaa),
+ ],
+ q(4256) => [
+ q(Margu),
+ ],
+ q(4257) => [
+ q(Maskoy Pidgin),
+ ],
+ q(4258) => [
+ q(Ma'di),
+ ],
+ q(4259) => [
+ q(Mogholi),
+ ],
+ q(4260) => [
+ q(Mungaka),
+ ],
+ q(4261) => [
+ q(Mauwake),
+ ],
+ q(4262) => [
+ q(Makhuwa-Moniga),
+ ],
+ q(4263) => [
+ q(Mocheno),
+ ],
+ q(4264) => [
+ q(Mashi (Zambia)),
+ ],
+ q(4265) => [
+ q(Balinese Malay),
+ ],
+ q(4266) => [
+ q(Mandan),
+ ],
+ q(4267) => [
+ q(Eastern Mari),
+ ],
+ q(4268) => [
+ q(Buru (Indonesia)),
+ ],
+ q(4269) => [
+ q(Mandahuaca),
+ ],
+ q(4270) => [
+ q(Digaro-Mishmi),
+ q(Darang Deng),
+ ],
+ q(4271) => [
+ q(Mbukushu),
+ ],
+ q(4272) => [
+ q(Maru),
+ q(Lhaovo),
+ ],
+ q(4273) => [
+ q(Ma'anyan),
+ ],
+ q(4274) => [
+ q(Mor (Mor Islands)),
+ ],
+ q(4275) => [
+ q(Miami),
+ ],
+ q(4276) => [
+ q(Atatlahuca Mixtec),
+ ],
+ q(4277) => [
+ q(Mandaic),
+ ],
+ q(4278) => [
+ q(Ocotepec Mixtec),
+ ],
+ q(4279) => [
+ q(Mofu-Gudur),
+ ],
+ q(4280) => [
+ q(San Miguel El Grande Mixtec),
+ ],
+ q(4281) => [
+ q(Chayuco Mixtec),
+ ],
+ q(4282) => [
+ q(Chigmecatitlan Mixtec),
+ ],
+ q(4283) => [
+ q(Abar),
+ ],
+ q(4284) => [
+ q(Mikasuki),
+ ],
+ q(4285) => [
+ q(Penoles Mixtec),
+ ],
+ q(4286) => [
+ q(Alacatlatzala Mixtec),
+ ],
+ q(4287) => [
+ q(Pinotepa Nacional Mixtec),
+ ],
+ q(4288) => [
+ q(Apasco-Apoala Mixtec),
+ ],
+ q(4289) => [
+ q(Miskito),
+ ],
+ q(4290) => [
+ q(Isthmus Mixe),
+ ],
+ q(4291) => [
+ q(Southern Puebla Mixtec),
+ ],
+ q(4292) => [
+ q(Cacaloxtepec Mixtec),
+ ],
+ q(4293) => [
+ q(Akoye),
+ ],
+ q(4294) => [
+ q(Mixtepec Mixtec),
+ ],
+ q(4295) => [
+ q(Ayutla Mixtec),
+ ],
+ q(4296) => [
+ q(Coatzospan Mixtec),
+ ],
+ q(4297) => [
+ q(San Juan Colorado Mixtec),
+ ],
+ q(4298) => [
+ q(Northwest Maidu),
+ ],
+ q(4299) => [
+ q(Muskum),
+ ],
+ q(4300) => [
+ q(Tu),
+ ],
+ q(4301) => [
+ q(Mwera (Nyasa)),
+ ],
+ q(4302) => [
+ q(Kim Mun),
+ ],
+ q(4303) => [
+ q(Mawak),
+ ],
+ q(4304) => [
+ q(Matukar),
+ ],
+ q(4305) => [
+ q(Mandeali),
+ ],
+ q(4306) => [
+ q(Medebur),
+ ],
+ q(4307) => [
+ q(Ma (Papua New Guinea)),
+ ],
+ q(4308) => [
+ q(Malankuravan),
+ ],
+ q(4309) => [
+ q(Malapandaram),
+ ],
+ q(4310) => [
+ q(Malaryan),
+ ],
+ q(4311) => [
+ q(Malavedan),
+ ],
+ q(4312) => [
+ q(Miship),
+ ],
+ q(4313) => [
+ q(Sauria Paharia),
+ ],
+ q(4314) => [
+ q(Manna-Dora),
+ ],
+ q(4315) => [
+ q(Mannan),
+ ],
+ q(4316) => [
+ q(Karbi),
+ ],
+ q(4317) => [
+ q(Mahali),
+ ],
+ q(4318) => [
+ q(Mahican),
+ ],
+ q(4319) => [
+ q(Majhi),
+ ],
+ q(4320) => [
+ q(Mbre),
+ ],
+ q(4321) => [
+ q(Mal Paharia),
+ ],
+ q(4322) => [
+ q(Siliput),
+ ],
+ q(4323) => [
+ q(Mawchi),
+ ],
+ q(4324) => [
+ q(Miya),
+ ],
+ q(4325) => [
+ q(Mak (China)),
+ ],
+ q(4326) => [
+ q(Dhatki),
+ ],
+ q(4327) => [
+ q(Mokilese),
+ ],
+ q(4328) => [
+ q(Byep),
+ ],
+ q(4329) => [
+ q(Mokole),
+ ],
+ q(4330) => [
+ q(Moklen),
+ ],
+ q(4331) => [
+ q(Kupang Malay),
+ ],
+ q(4332) => [
+ q(Mingang Doso),
+ ],
+ q(4333) => [
+ q(Moikodi),
+ ],
+ q(4334) => [
+ q(Bay Miwok),
+ ],
+ q(4335) => [
+ q(Malas),
+ ],
+ q(4336) => [
+ q(Silacayoapan Mixtec),
+ ],
+ q(4337) => [
+ q(Vamale),
+ ],
+ q(4338) => [
+ q(Konyanka Maninka),
+ ],
+ q(4339) => [
+ q(Mafea),
+ ],
+ q(4340) => [
+ q(Kituba (Congo)),
+ ],
+ q(4341) => [
+ q(Kinamiging Manobo),
+ ],
+ q(4342) => [
+ q(East Makian),
+ ],
+ q(4343) => [
+ q(Makasae),
+ ],
+ q(4344) => [
+ q(Malo),
+ ],
+ q(4345) => [
+ q(Mbule),
+ ],
+ q(4346) => [
+ q(Cao Lan),
+ ],
+ q(4347) => [
+ q(Malakhel),
+ ],
+ q(4348) => [
+ q(Manambu),
+ ],
+ q(4349) => [
+ q(Mal),
+ ],
+ q(4350) => [
+ q(Mape),
+ ],
+ q(4351) => [
+ q(Malimpung),
+ ],
+ q(4352) => [
+ q(Miltu),
+ ],
+ q(4353) => [
+ q(Ilwana),
+ q(Kiwilwana),
+ ],
+ q(4354) => [
+ q(Malua Bay),
+ ],
+ q(4355) => [
+ q(Mulam),
+ ],
+ q(4356) => [
+ q(Malango),
+ ],
+ q(4357) => [
+ q(Mlomp),
+ ],
+ q(4358) => [
+ q(Bargam),
+ ],
+ q(4359) => [
+ q(Western Maninkakan),
+ ],
+ q(4360) => [
+ q(Vame),
+ ],
+ q(4361) => [
+ q(Masalit),
+ ],
+ q(4362) => [
+ q(To'abaita),
+ ],
+ q(4363) => [
+ q(Motlav),
+ q(Mwotlap),
+ ],
+ q(4364) => [
+ q(Moloko),
+ ],
+ q(4365) => [
+ q(Malfaxal),
+ q(Naha'ai),
+ ],
+ q(4366) => [
+ q(Malaynon),
+ ],
+ q(4367) => [
+ q(Mama),
+ ],
+ q(4368) => [
+ q(Momina),
+ ],
+ q(4369) => [
+ q(Michoacan Mazahua),
+ ],
+ q(4370) => [
+ q(Maonan),
+ ],
+ q(4371) => [
+ q(Mae),
+ ],
+ q(4372) => [
+ q(Mundat),
+ ],
+ q(4373) => [
+ q(North Ambrym),
+ ],
+ q(4374) => [
+ q(Mehinaku),
+ ],
+ q(4375) => [
+ q(Musar),
+ ],
+ q(4376) => [
+ q(Majhwar),
+ ],
+ q(4377) => [
+ q(Mukha-Dora),
+ ],
+ q(4378) => [
+ q(Man Met),
+ ],
+ q(4379) => [
+ q(Maii),
+ ],
+ q(4380) => [
+ q(Mamanwa),
+ ],
+ q(4381) => [
+ q(Mangga Buang),
+ ],
+ q(4382) => [
+ q(Siawi),
+ ],
+ q(4383) => [
+ q(Musak),
+ ],
+ q(4384) => [
+ q(Western Xiangxi Miao),
+ ],
+ q(4385) => [
+ q(Malalamai),
+ ],
+ q(4386) => [
+ q(Mmaala),
+ ],
+ q(4387) => [
+ q(Miriti),
+ ],
+ q(4388) => [
+ q(Emae),
+ ],
+ q(4389) => [
+ q(Madak),
+ ],
+ q(4390) => [
+ q(Migaama),
+ ],
+ q(4391) => [
+ q(Mabaale),
+ ],
+ q(4392) => [
+ q(Mbula),
+ ],
+ q(4393) => [
+ q(Muna),
+ ],
+ q(4394) => [
+ q(Monde),
+ ],
+ q(4395) => [
+ q(Naba),
+ ],
+ q(4396) => [
+ q(Mundani),
+ ],
+ q(4397) => [
+ q(Eastern Mnong),
+ ],
+ q(4398) => [
+ q(Mono (Democratic Republic of Congo)),
+ ],
+ q(4399) => [
+ q(Munji),
+ ],
+ q(4400) => [
+ q(Mandinka),
+ ],
+ q(4401) => [
+ q(Tiale),
+ ],
+ q(4402) => [
+ q(Mapena),
+ ],
+ q(4403) => [
+ q(Southern Mnong),
+ ],
+ q(4404) => [
+ q(Min Bei Chinese),
+ ],
+ q(4405) => [
+ q(Minriq),
+ ],
+ q(4406) => [
+ q(Mono (USA)),
+ ],
+ q(4407) => [
+ q(Mansi),
+ ],
+ q(4408) => [
+ q(Maykulan),
+ ],
+ q(4409) => [
+ q(Mer),
+ ],
+ q(4410) => [
+ q(Rennell-Bellona),
+ ],
+ q(4411) => [
+ q(Mon),
+ ],
+ q(4412) => [
+ q(Manikion),
+ ],
+ q(4413) => [
+ q(Manyawa),
+ ],
+ q(4414) => [
+ q(Moni),
+ ],
+ q(4415) => [
+ q(Mwan),
+ ],
+ q(4416) => [
+ q(Mocovi),
+ ],
+ q(4417) => [
+ q(Mobilian),
+ ],
+ q(4418) => [
+ q(Montagnais),
+ ],
+ q(4419) => [
+ q(Mongondow),
+ ],
+ q(4420) => [
+ q(Mboi),
+ ],
+ q(4421) => [
+ q(Monzombo),
+ ],
+ q(4422) => [
+ q(Morori),
+ ],
+ q(4423) => [
+ q(Mangue),
+ ],
+ q(4424) => [
+ q(Monom),
+ ],
+ q(4425) => [
+ q(Mopan Maya),
+ ],
+ q(4426) => [
+ q(Mor (Bomberai Peninsula)),
+ ],
+ q(4427) => [
+ q(Moro),
+ ],
+ q(4428) => [
+ q(Mogum),
+ ],
+ q(4429) => [
+ q(Mohave),
+ ],
+ q(4430) => [
+ q(Moi (Congo)),
+ ],
+ q(4431) => [
+ q(Molima),
+ ],
+ q(4432) => [
+ q(Shekkacho),
+ ],
+ q(4433) => [
+ q(Mukulu),
+ q(Gergiko),
+ ],
+ q(4434) => [
+ q(Mpoto),
+ ],
+ q(4435) => [
+ q(Mullukmulluk),
+ ],
+ q(4436) => [
+ q(Mangarayi),
+ ],
+ q(4437) => [
+ q(Machinere),
+ ],
+ q(4438) => [
+ q(Majang),
+ ],
+ q(4439) => [
+ q(Marba),
+ ],
+ q(4440) => [
+ q(Maung),
+ ],
+ q(4441) => [
+ q(Mpade),
+ ],
+ q(4442) => [
+ q(Martu Wangka),
+ ],
+ q(4443) => [
+ q(Mbara (Chad)),
+ ],
+ q(4444) => [
+ q(Middle Watut),
+ ],
+ q(4445) => [
+ q(Yosondua Mixtec),
+ ],
+ q(4446) => [
+ q(Mindiri),
+ ],
+ q(4447) => [
+ q(Miu),
+ ],
+ q(4448) => [
+ q(Migabac),
+ ],
+ q(4449) => [
+ q(Matis),
+ ],
+ q(4450) => [
+ q(Vangunu),
+ ],
+ q(4451) => [
+ q(Dadibi),
+ ],
+ q(4452) => [
+ q(Mian),
+ ],
+ q(4453) => [
+ q(Makurap),
+ ],
+ q(4454) => [
+ q(Mungkip),
+ ],
+ q(4455) => [
+ q(Mapidian),
+ ],
+ q(4456) => [
+ q(Misima-Panaeati),
+ ],
+ q(4457) => [
+ q(Mapia),
+ ],
+ q(4458) => [
+ q(Mpi),
+ ],
+ q(4459) => [
+ q(Maba (Indonesia)),
+ ],
+ q(4460) => [
+ q(Mbuko),
+ ],
+ q(4461) => [
+ q(Mangole),
+ ],
+ q(4462) => [
+ q(Matepi),
+ ],
+ q(4463) => [
+ q(Momuna),
+ ],
+ q(4464) => [
+ q(Kota Bangun Kutai Malay),
+ ],
+ q(4465) => [
+ q(Tlazoyaltepec Mixtec),
+ ],
+ q(4466) => [
+ q(Mariri),
+ ],
+ q(4467) => [
+ q(Mamasa),
+ ],
+ q(4468) => [
+ q(Rajah Kabunsuwan Manobo),
+ ],
+ q(4469) => [
+ q(Mbelime),
+ ],
+ q(4470) => [
+ q(South Marquesan),
+ ],
+ q(4471) => [
+ q(Moronene),
+ ],
+ q(4472) => [
+ q(Modole),
+ ],
+ q(4473) => [
+ q(Manipa),
+ ],
+ q(4474) => [
+ q(Minokok),
+ ],
+ q(4475) => [
+ q(Mander),
+ ],
+ q(4476) => [
+ q(West Makian),
+ ],
+ q(4477) => [
+ q(Mok),
+ ],
+ q(4478) => [
+ q(Mandari),
+ ],
+ q(4479) => [
+ q(Mosimo),
+ ],
+ q(4480) => [
+ q(Murupi),
+ ],
+ q(4481) => [
+ q(Mamuju),
+ ],
+ q(4482) => [
+ q(Manggarai),
+ ],
+ q(4483) => [
+ q(Pano),
+ ],
+ q(4484) => [
+ q(Mlabri),
+ ],
+ q(4485) => [
+ q(Marino),
+ ],
+ q(4486) => [
+ q(Maricopa),
+ ],
+ q(4487) => [
+ q(Western Magar),
+ ],
+ q(4488) => [
+ q(Martha's Vineyard Sign Language),
+ ],
+ q(4489) => [
+ q(Elseng),
+ ],
+ q(4490) => [
+ q(Mising),
+ ],
+ q(4491) => [
+ q(Mara Chin),
+ ],
+ q(4492) => [
+ q(Western Mari),
+ ],
+ q(4493) => [
+ q(Hmwaveke),
+ ],
+ q(4494) => [
+ q(Mortlockese),
+ ],
+ q(4495) => [
+ q(Merlav),
+ q(Mwerlap),
+ ],
+ q(4496) => [
+ q(Cheke Holo),
+ ],
+ q(4497) => [
+ q(Mru),
+ ],
+ q(4498) => [
+ q(Morouas),
+ ],
+ q(4499) => [
+ q(North Marquesan),
+ ],
+ q(4500) => [
+ q(Maria (India)),
+ ],
+ q(4501) => [
+ q(Maragus),
+ ],
+ q(4502) => [
+ q(Marghi Central),
+ ],
+ q(4503) => [
+ q(Mono (Cameroon)),
+ ],
+ q(4504) => [
+ q(Mangareva),
+ ],
+ q(4505) => [
+ q(Maranao),
+ ],
+ q(4506) => [
+ q(Maremgi),
+ q(Dineor),
+ ],
+ q(4507) => [
+ q(Mandaya),
+ ],
+ q(4508) => [
+ q(Marind),
+ ],
+ q(4509) => [
+ q(Masbatenyo),
+ ],
+ q(4510) => [
+ q(Sankaran Maninka),
+ ],
+ q(4511) => [
+ q(Yucatec Maya Sign Language),
+ ],
+ q(4512) => [
+ q(Musey),
+ ],
+ q(4513) => [
+ q(Mekwei),
+ ],
+ q(4514) => [
+ q(Moraid),
+ ],
+ q(4515) => [
+ q(Masikoro Malagasy),
+ ],
+ q(4516) => [
+ q(Sabah Malay),
+ ],
+ q(4517) => [
+ q(Ma (Democratic Republic of Congo)),
+ ],
+ q(4518) => [
+ q(Mansaka),
+ ],
+ q(4519) => [
+ q(Molof),
+ q(Poule),
+ ],
+ q(4520) => [
+ q(Agusan Manobo),
+ ],
+ q(4521) => [
+ q(Vures),
+ ],
+ q(4522) => [
+ q(Mombum),
+ ],
+ q(4523) => [
+ q(Maritsaua),
+ ],
+ q(4524) => [
+ q(Caac),
+ ],
+ q(4525) => [
+ q(Mongolian Sign Language),
+ ],
+ q(4526) => [
+ q(West Masela),
+ ],
+ q(4527) => [
+ q(Musom),
+ ],
+ q(4528) => [
+ q(Maslam),
+ ],
+ q(4529) => [
+ q(Mansoanka),
+ ],
+ q(4530) => [
+ q(Moresada),
+ ],
+ q(4531) => [
+ q(Aruamu),
+ ],
+ q(4532) => [
+ q(Momare),
+ ],
+ q(4533) => [
+ q(Cotabato Manobo),
+ ],
+ q(4534) => [
+ q(Anyin Morofo),
+ ],
+ q(4535) => [
+ q(Munit),
+ ],
+ q(4536) => [
+ q(Mualang),
+ ],
+ q(4537) => [
+ q(Mono (Solomon Islands)),
+ ],
+ q(4538) => [
+ q(Murik (Papua New Guinea)),
+ ],
+ q(4539) => [
+ q(Una),
+ ],
+ q(4540) => [
+ q(Munggui),
+ ],
+ q(4541) => [
+ q(Maiwa (Papua New Guinea)),
+ ],
+ q(4542) => [
+ q(Moskona),
+ ],
+ q(4543) => [
+ q(Mbe'),
+ ],
+ q(4544) => [
+ q(Montol),
+ ],
+ q(4545) => [
+ q(Mator),
+ ],
+ q(4546) => [
+ q(Matagalpa),
+ ],
+ q(4547) => [
+ q(Totontepec Mixe),
+ ],
+ q(4548) => [
+ q(Wichi Lhamtes Nocten),
+ ],
+ q(4549) => [
+ q(Muong),
+ ],
+ q(4550) => [
+ q(Mewari),
+ ],
+ q(4551) => [
+ q(Yora),
+ ],
+ q(4552) => [
+ q(Mota),
+ ],
+ q(4553) => [
+ q(Tututepec Mixtec),
+ ],
+ q(4554) => [
+ q(Asaro'o),
+ ],
+ q(4555) => [
+ q(Southern Binukidnon),
+ ],
+ q(4556) => [
+ q(Tidaa Mixtec),
+ ],
+ q(4557) => [
+ q(Nabi),
+ ],
+ q(4558) => [
+ q(Mundang),
+ ],
+ q(4559) => [
+ q(Mubi),
+ ],
+ q(4560) => [
+ q(Mbu'),
+ ],
+ q(4561) => [
+ q(Mednyj Aleut),
+ ],
+ q(4562) => [
+ q(Media Lengua),
+ ],
+ q(4563) => [
+ q(Musgu),
+ ],
+ q(4564) => [
+ q(Mundu),
+ ],
+ q(4565) => [
+ q(Musi),
+ ],
+ q(4566) => [
+ q(Mabire),
+ ],
+ q(4567) => [
+ q(Mugom),
+ ],
+ q(4568) => [
+ q(Maiwala),
+ ],
+ q(4569) => [
+ q(Nyong),
+ ],
+ q(4570) => [
+ q(Malvi),
+ ],
+ q(4571) => [
+ q(Eastern Xiangxi Miao),
+ ],
+ q(4572) => [
+ q(Murle),
+ ],
+ q(4573) => [
+ q(Western Muria),
+ ],
+ q(4574) => [
+ q(Yaaku),
+ ],
+ q(4575) => [
+ q(Muthuvan),
+ ],
+ q(4576) => [
+ q(Bo-Ung),
+ ],
+ q(4577) => [
+ q(Muyang),
+ ],
+ q(4578) => [
+ q(Mursi),
+ ],
+ q(4579) => [
+ q(Manam),
+ ],
+ q(4580) => [
+ q(Mattole),
+ ],
+ q(4581) => [
+ q(Mamboru),
+ ],
+ q(4582) => [
+ q(Marwari (Pakistan)),
+ ],
+ q(4583) => [
+ q(Peripheral Mongolian),
+ ],
+ q(4584) => [
+ q(Yucuane Mixtec),
+ ],
+ q(4585) => [
+ q(Mulgi),
+ ],
+ q(4586) => [
+ q(Miyako),
+ ],
+ q(4587) => [
+ q(Mekmek),
+ ],
+ q(4588) => [
+ q(Mbara (Australia)),
+ ],
+ q(4589) => [
+ q(Muya),
+ ],
+ q(4590) => [
+ q(Minaveha),
+ ],
+ q(4591) => [
+ q(Marovo),
+ ],
+ q(4592) => [
+ q(Duri),
+ ],
+ q(4593) => [
+ q(Moere),
+ ],
+ q(4594) => [
+ q(Marau),
+ ],
+ q(4595) => [
+ q(Massep),
+ ],
+ q(4596) => [
+ q(Mpotovoro),
+ ],
+ q(4597) => [
+ q(Marfa),
+ ],
+ q(4598) => [
+ q(Tagal Murut),
+ ],
+ q(4599) => [
+ q(Machinga),
+ ],
+ q(4600) => [
+ q(Meoswar),
+ ],
+ q(4601) => [
+ q(Indus Kohistani),
+ ],
+ q(4602) => [
+ q(Mesqan),
+ ],
+ q(4603) => [
+ q(Mwatebu),
+ ],
+ q(4604) => [
+ q(Juwal),
+ ],
+ q(4605) => [
+ q(Are),
+ ],
+ q(4606) => [
+ q(Mudbura),
+ ],
+ q(4607) => [
+ q(Mwera (Chimwera)),
+ ],
+ q(4608) => [
+ q(Murrinh-Patha),
+ ],
+ q(4609) => [
+ q(Aiklep),
+ ],
+ q(4610) => [
+ q(Mouk-Aria),
+ ],
+ q(4611) => [
+ q(Labo),
+ q(Ninde),
+ ],
+ q(4612) => [
+ q(Maligo),
+ ],
+ q(4613) => [
+ q(Kita Maninkakan),
+ ],
+ q(4614) => [
+ q(Sar),
+ ],
+ q(4615) => [
+ q(Nyamwanga),
+ ],
+ q(4616) => [
+ q(Central Maewo),
+ ],
+ q(4617) => [
+ q(Kala Lagaw Ya),
+ ],
+ q(4618) => [
+ q(Mun Chin),
+ ],
+ q(4619) => [
+ q(Mwimbi-Muthambi),
+ ],
+ q(4620) => [
+ q(Moken),
+ ],
+ q(4621) => [
+ q(Mittu),
+ ],
+ q(4622) => [
+ q(Mentawai),
+ ],
+ q(4623) => [
+ q(Hmong Daw),
+ ],
+ q(4624) => [
+ q(Mediak),
+ ],
+ q(4625) => [
+ q(Mosiro),
+ ],
+ q(4626) => [
+ q(Moingi),
+ ],
+ q(4627) => [
+ q(Northwest Oaxaca Mixtec),
+ ],
+ q(4628) => [
+ q(Tezoatlan Mixtec),
+ ],
+ q(4629) => [
+ q(Manyika),
+ ],
+ q(4630) => [
+ q(Modang),
+ ],
+ q(4631) => [
+ q(Mele-Fila),
+ ],
+ q(4632) => [
+ q(Malgbe),
+ ],
+ q(4633) => [
+ q(Mbangala),
+ ],
+ q(4634) => [
+ q(Mvuba),
+ ],
+ q(4635) => [
+ q(Mozarabic),
+ ],
+ q(4636) => [
+ q(Miju-Mishmi),
+ q(Geman Deng),
+ ],
+ q(4637) => [
+ q(Monumbo),
+ ],
+ q(4638) => [
+ q(Maxi Gbe),
+ ],
+ q(4639) => [
+ q(Meramera),
+ ],
+ q(4640) => [
+ q(Moi (Indonesia)),
+ ],
+ q(4641) => [
+ q(Mbowe),
+ ],
+ q(4642) => [
+ q(Tlahuitoltepec Mixe),
+ ],
+ q(4643) => [
+ q(Juquila Mixe),
+ ],
+ q(4644) => [
+ q(Murik (Malaysia)),
+ ],
+ q(4645) => [
+ q(Huitepec Mixtec),
+ ],
+ q(4646) => [
+ q(Jamiltepec Mixtec),
+ ],
+ q(4647) => [
+ q(Mada (Cameroon)),
+ ],
+ q(4648) => [
+ q(Metlatonoc Mixtec),
+ ],
+ q(4649) => [
+ q(Namo),
+ ],
+ q(4650) => [
+ q(Mahou),
+ q(Mawukakan),
+ ],
+ q(4651) => [
+ q(Southeastern Nochixtlan Mixtec),
+ ],
+ q(4652) => [
+ q(Central Masela),
+ ],
+ q(4653) => [
+ q(Mbay),
+ ],
+ q(4654) => [
+ q(Mayeka),
+ ],
+ q(4655) => [
+ q(Maramba),
+ ],
+ q(4656) => [
+ q(Myene),
+ ],
+ q(4657) => [
+ q(Bambassi),
+ ],
+ q(4658) => [
+ q(Manta),
+ ],
+ q(4659) => [
+ q(Makah),
+ ],
+ q(4660) => [
+ q(Mina (India)),
+ ],
+ q(4661) => [
+ q(Mangayat),
+ ],
+ q(4662) => [
+ q(Mamara Senoufo),
+ ],
+ q(4663) => [
+ q(Moma),
+ ],
+ q(4664) => [
+ q(Me'en),
+ ],
+ q(4665) => [
+ q(Anfillo),
+ ],
+ q(4666) => [
+ q(Piraha),
+ ],
+ q(4667) => [
+ q(Forest Maninka),
+ ],
+ q(4668) => [
+ q(Muniche),
+ ],
+ q(4669) => [
+ q(Mesmes),
+ ],
+ q(4670) => [
+ q(Munduruku),
+ ],
+ q(4671) => [
+ q(Muyuw),
+ ],
+ q(4672) => [
+ q(Masaaba),
+ ],
+ q(4673) => [
+ q(Macuna),
+ ],
+ q(4674) => [
+ q(Classical Mandaic),
+ ],
+ q(4675) => [
+ q(Santa Maria Zacatepec Mixtec),
+ ],
+ q(4676) => [
+ q(Tumzabt),
+ ],
+ q(4677) => [
+ q(Madagascar Sign Language),
+ ],
+ q(4678) => [
+ q(Malimba),
+ ],
+ q(4679) => [
+ q(Morawa),
+ ],
+ q(4680) => [
+ q(Monastic Sign Language),
+ ],
+ q(4681) => [
+ q(Wichi Lhamtes Guisnay),
+ ],
+ q(4682) => [
+ q(Ixcatlan Mazatec),
+ ],
+ q(4683) => [
+ q(Manya),
+ ],
+ q(4684) => [
+ q(Nigeria Mambila),
+ ],
+ q(4685) => [
+ q(Mazatlan Mixe),
+ ],
+ q(4686) => [
+ q(Mumuye),
+ ],
+ q(4687) => [
+ q(Mazanderani),
+ ],
+ q(4688) => [
+ q(Matipuhy),
+ ],
+ q(4689) => [
+ q(Movima),
+ ],
+ q(4690) => [
+ q(Mori Atas),
+ ],
+ q(4691) => [
+ q(Marubo),
+ ],
+ q(4692) => [
+ q(Macanese),
+ ],
+ q(4693) => [
+ q(Mintil),
+ ],
+ q(4694) => [
+ q(Inapang),
+ ],
+ q(4695) => [
+ q(Manza),
+ ],
+ q(4696) => [
+ q(Deg),
+ ],
+ q(4697) => [
+ q(Mawayana),
+ ],
+ q(4698) => [
+ q(Mozambican Sign Language),
+ ],
+ q(4699) => [
+ q(Maiadomu),
+ ],
+ q(4700) => [
+ q(Namla),
+ ],
+ q(4701) => [
+ q(Southern Nambikuara),
+ ],
+ q(4702) => [
+ q(Narak),
+ ],
+ q(4703) => [
+ q(Nijadali),
+ ],
+ q(4704) => [
+ q(Naka'ela),
+ ],
+ q(4705) => [
+ q(Nabak),
+ ],
+ q(4706) => [
+ q(Naga Pidgin),
+ ],
+ q(4707) => [
+ q(Nalu),
+ ],
+ q(4708) => [
+ q(Nakanai),
+ ],
+ q(4709) => [
+ q(Nalik),
+ ],
+ q(4710) => [
+ q(Ngan'gityemerri),
+ ],
+ q(4711) => [
+ q(Min Nan Chinese),
+ ],
+ q(4712) => [
+ q(Naaba),
+ ],
+ q(4713) => [
+ q(Nama (Namibia)),
+ ],
+ q(4714) => [
+ q(Iguta),
+ ],
+ q(4715) => [
+ q(Naasioi),
+ ],
+ q(4716) => [
+ q(Hungworo),
+ ],
+ q(4717) => [
+ q(Nawuri),
+ ],
+ q(4718) => [
+ q(Nakwi),
+ ],
+ q(4719) => [
+ q(Narrinyeri),
+ ],
+ q(4720) => [
+ q(Coatepec Nahuatl),
+ ],
+ q(4721) => [
+ q(Nyemba),
+ ],
+ q(4722) => [
+ q(Ndoe),
+ ],
+ q(4723) => [
+ q(Chang Naga),
+ ],
+ q(4724) => [
+ q(Ngbinda),
+ ],
+ q(4725) => [
+ q(Konyak Naga),
+ ],
+ q(4726) => [
+ q(Nagarchal),
+ ],
+ q(4727) => [
+ q(Ngamo),
+ ],
+ q(4728) => [
+ q(Mao Naga),
+ ],
+ q(4729) => [
+ q(Ngarinman),
+ ],
+ q(4730) => [
+ q(Nake),
+ ],
+ q(4731) => [
+ q(Ngbaka Ma'bo),
+ ],
+ q(4732) => [
+ q(Kuri),
+ ],
+ q(4733) => [
+ q(Nkukoli),
+ ],
+ q(4734) => [
+ q(Nnam),
+ ],
+ q(4735) => [
+ q(Nggem),
+ ],
+ q(4736) => [
+ q(Numana-Nunku-Gbantu-Numbu),
+ ],
+ q(4737) => [
+ q(Namibian Sign Language),
+ ],
+ q(4738) => [
+ q(Na),
+ ],
+ q(4739) => [
+ q(Rongmei Naga),
+ ],
+ q(4740) => [
+ q(Ngamambo),
+ ],
+ q(4741) => [
+ q(Southern Ngbandi),
+ ],
+ q(4742) => [
+ q(Ngura),
+ ],
+ q(4743) => [
+ q(Ningera),
+ ],
+ q(4744) => [
+ q(Iyo),
+ ],
+ q(4745) => [
+ q(Central Nicobarese),
+ ],
+ q(4746) => [
+ q(Ponam),
+ ],
+ q(4747) => [
+ q(Nachering),
+ ],
+ q(4748) => [
+ q(Yale),
+ ],
+ q(4749) => [
+ q(Notsi),
+ ],
+ q(4750) => [
+ q(Nisga'a),
+ ],
+ q(4751) => [
+ q(Central Huasteca Nahuatl),
+ ],
+ q(4752) => [
+ q(Classical Nahuatl),
+ ],
+ q(4753) => [
+ q(Northern Puebla Nahuatl),
+ ],
+ q(4754) => [
+ q(Nakara),
+ ],
+ q(4755) => [
+ q(Michoacan Nahuatl),
+ ],
+ q(4756) => [
+ q(Nambo),
+ ],
+ q(4757) => [
+ q(Nauna),
+ ],
+ q(4758) => [
+ q(Sibe),
+ ],
+ q(4759) => [
+ q(Ndaktup),
+ ],
+ q(4760) => [
+ q(Ncane),
+ ],
+ q(4761) => [
+ q(Nicaraguan Sign Language),
+ ],
+ q(4762) => [
+ q(Chothe Naga),
+ ],
+ q(4763) => [
+ q(Chumburung),
+ ],
+ q(4764) => [
+ q(Central Puebla Nahuatl),
+ ],
+ q(4765) => [
+ q(Natchez),
+ ],
+ q(4766) => [
+ q(Ndasa),
+ ],
+ q(4767) => [
+ q(Kenswei Nsei),
+ ],
+ q(4768) => [
+ q(Ndau),
+ ],
+ q(4769) => [
+ q(Nde-Nsele-Nta),
+ ],
+ q(4770) => [
+ q(Nadruvian),
+ ],
+ q(4771) => [
+ q(Ndengereko),
+ ],
+ q(4772) => [
+ q(Ndali),
+ ],
+ q(4773) => [
+ q(Samba Leko),
+ ],
+ q(4774) => [
+ q(Ndamba),
+ ],
+ q(4775) => [
+ q(Ndaka),
+ ],
+ q(4776) => [
+ q(Ndolo),
+ ],
+ q(4777) => [
+ q(Ndam),
+ ],
+ q(4778) => [
+ q(Ngundi),
+ ],
+ q(4779) => [
+ q(Ndo),
+ ],
+ q(4780) => [
+ q(Ndombe),
+ ],
+ q(4781) => [
+ q(Ndoola),
+ ],
+ q(4782) => [
+ q(Ndunga),
+ ],
+ q(4783) => [
+ q(Dugun),
+ ],
+ q(4784) => [
+ q(Ndut),
+ ],
+ q(4785) => [
+ q(Ndobo),
+ ],
+ q(4786) => [
+ q(Nduga),
+ ],
+ q(4787) => [
+ q(Lutos),
+ ],
+ q(4788) => [
+ q(Ndogo),
+ ],
+ q(4789) => [
+ q(Eastern Ngad'a),
+ ],
+ q(4790) => [
+ q(Toura (Cote d'Ivoire)),
+ ],
+ q(4791) => [
+ q(Nedebang),
+ ],
+ q(4792) => [
+ q(Nde-Gbite),
+ ],
+ q(4793) => [
+ q(Nelemwa-Nixumwak),
+ ],
+ q(4794) => [
+ q(Nefamese),
+ ],
+ q(4795) => [
+ q(Negidal),
+ ],
+ q(4796) => [
+ q(Nyenkha),
+ ],
+ q(4797) => [
+ q(Neo-Hittite),
+ ],
+ q(4798) => [
+ q(Neko),
+ ],
+ q(4799) => [
+ q(Neku),
+ ],
+ q(4800) => [
+ q(Nemi),
+ ],
+ q(4801) => [
+ q(Nengone),
+ ],
+ q(4802) => [
+ q(Na-Meo),
+ ],
+ q(4803) => [
+ q(North Central Mixe),
+ ],
+ q(4804) => [
+ q(Yahadian),
+ ],
+ q(4805) => [
+ q(Bhoti Kinnauri),
+ ],
+ q(4806) => [
+ q(Nete),
+ ],
+ q(4807) => [
+ q(Neo),
+ ],
+ q(4808) => [
+ q(Nyaheun),
+ ],
+ q(4809) => [
+ q(Neme),
+ ],
+ q(4810) => [
+ q(Neyo),
+ ],
+ q(4811) => [
+ q(Nez Perce),
+ ],
+ q(4812) => [
+ q(Dhao),
+ ],
+ q(4813) => [
+ q(Ahwai),
+ ],
+ q(4814) => [
+ q(Ayiwo),
+ q(Aiwoo),
+ ],
+ q(4815) => [
+ q(Nafaanra),
+ ],
+ q(4816) => [
+ q(Mfumte),
+ ],
+ q(4817) => [
+ q(Ngbaka),
+ ],
+ q(4818) => [
+ q(Northern Ngbandi),
+ ],
+ q(4819) => [
+ q(Ngombe (Democratic Republic of Congo)),
+ ],
+ q(4820) => [
+ q(Ngando (Central African Republic)),
+ ],
+ q(4821) => [
+ q(Ngemba),
+ ],
+ q(4822) => [
+ q(Ngbaka Manza),
+ ],
+ q(4823) => [
+ q(N/u),
+ ],
+ q(4824) => [
+ q(Ngizim),
+ ],
+ q(4825) => [
+ q(Ngie),
+ ],
+ q(4826) => [
+ q(Ngalkbun),
+ ],
+ q(4827) => [
+ q(Lomwe),
+ ],
+ q(4828) => [
+ q(Ngatik Men's Creole),
+ ],
+ q(4829) => [
+ q(Ngwo),
+ ],
+ q(4830) => [
+ q(Ngoni),
+ ],
+ q(4831) => [
+ q(Ngulu),
+ ],
+ q(4832) => [
+ q(Ngurimi),
+ q(Ngoreme),
+ ],
+ q(4833) => [
+ q(Engdewu),
+ ],
+ q(4834) => [
+ q(Gvoko),
+ ],
+ q(4835) => [
+ q(Ngeq),
+ ],
+ q(4836) => [
+ q(Guerrero Nahuatl),
+ ],
+ q(4837) => [
+ q(Nagumi),
+ ],
+ q(4838) => [
+ q(Ngwaba),
+ ],
+ q(4839) => [
+ q(Nggwahyi),
+ ],
+ q(4840) => [
+ q(Tibea),
+ ],
+ q(4841) => [
+ q(Ngungwel),
+ ],
+ q(4842) => [
+ q(Nhanda),
+ ],
+ q(4843) => [
+ q(Beng),
+ ],
+ q(4844) => [
+ q(Tabasco Nahuatl),
+ ],
+ q(4845) => [
+ q(Chiripa),
+ q(Ava Guarani),
+ ],
+ q(4846) => [
+ q(Eastern Huasteca Nahuatl),
+ ],
+ q(4847) => [
+ q(Nhuwala),
+ ],
+ q(4848) => [
+ q(Tetelcingo Nahuatl),
+ ],
+ q(4849) => [
+ q(Nahari),
+ ],
+ q(4850) => [
+ q(Zacatlan-Ahuacatlan-Tepetzintla Nahuatl),
+ ],
+ q(4851) => [
+ q(Isthmus-Cosoleacaque Nahuatl),
+ ],
+ q(4852) => [
+ q(Morelos Nahuatl),
+ ],
+ q(4853) => [
+ q(Central Nahuatl),
+ ],
+ q(4854) => [
+ q(Takuu),
+ ],
+ q(4855) => [
+ q(Isthmus-Pajapan Nahuatl),
+ ],
+ q(4856) => [
+ q(Huaxcaleca Nahuatl),
+ ],
+ q(4857) => [
+ q(Naro),
+ ],
+ q(4858) => [
+ q(Ometepec Nahuatl),
+ ],
+ q(4859) => [
+ q(Noone),
+ ],
+ q(4860) => [
+ q(Temascaltepec Nahuatl),
+ ],
+ q(4861) => [
+ q(Western Huasteca Nahuatl),
+ ],
+ q(4862) => [
+ q(Isthmus-Mecayapan Nahuatl),
+ ],
+ q(4863) => [
+ q(Northern Oaxaca Nahuatl),
+ ],
+ q(4864) => [
+ q(Santa Maria La Alta Nahuatl),
+ ],
+ q(4865) => [
+ q(Nakame),
+ ],
+ q(4866) => [
+ q(Ngandi),
+ ],
+ q(4867) => [
+ q(Niellim),
+ ],
+ q(4868) => [
+ q(Nek),
+ ],
+ q(4869) => [
+ q(Ngalakan),
+ ],
+ q(4870) => [
+ q(Nyiha (Tanzania)),
+ ],
+ q(4871) => [
+ q(Nii),
+ ],
+ q(4872) => [
+ q(Ngaju),
+ ],
+ q(4873) => [
+ q(Southern Nicobarese),
+ ],
+ q(4874) => [
+ q(Nila),
+ ],
+ q(4875) => [
+ q(Nilamba),
+ ],
+ q(4876) => [
+ q(Ninzo),
+ ],
+ q(4877) => [
+ q(Nganasan),
+ ],
+ q(4878) => [
+ q(Nandi),
+ ],
+ q(4879) => [
+ q(Nimboran),
+ ],
+ q(4880) => [
+ q(Nimi),
+ ],
+ q(4881) => [
+ q(Southeastern Kolami),
+ ],
+ q(4882) => [
+ q(Gilyak),
+ ],
+ q(4883) => [
+ q(Nimo),
+ ],
+ q(4884) => [
+ q(Hema),
+ ],
+ q(4885) => [
+ q(Ngiti),
+ ],
+ q(4886) => [
+ q(Ningil),
+ ],
+ q(4887) => [
+ q(Nzanyi),
+ ],
+ q(4888) => [
+ q(Nocte Naga),
+ ],
+ q(4889) => [
+ q(Ndonde Hamba),
+ ],
+ q(4890) => [
+ q(Lotha Naga),
+ ],
+ q(4891) => [
+ q(Gudanji),
+ ],
+ q(4892) => [
+ q(Njen),
+ ],
+ q(4893) => [
+ q(Njalgulgule),
+ ],
+ q(4894) => [
+ q(Angami Naga),
+ ],
+ q(4895) => [
+ q(Liangmai Naga),
+ ],
+ q(4896) => [
+ q(Ao Naga),
+ ],
+ q(4897) => [
+ q(Njerep),
+ ],
+ q(4898) => [
+ q(Nisa),
+ ],
+ q(4899) => [
+ q(Ndyuka-Trio Pidgin),
+ ],
+ q(4900) => [
+ q(Ngadjunmaya),
+ ],
+ q(4901) => [
+ q(Kunyi),
+ ],
+ q(4902) => [
+ q(Njyem),
+ ],
+ q(4903) => [
+ q(Nyishi),
+ ],
+ q(4904) => [
+ q(Nkoya),
+ ],
+ q(4905) => [
+ q(Khoibu Naga),
+ ],
+ q(4906) => [
+ q(Nkongho),
+ ],
+ q(4907) => [
+ q(Koireng),
+ ],
+ q(4908) => [
+ q(Duke),
+ ],
+ q(4909) => [
+ q(Inpui Naga),
+ ],
+ q(4910) => [
+ q(Nekgini),
+ ],
+ q(4911) => [
+ q(Khezha Naga),
+ ],
+ q(4912) => [
+ q(Thangal Naga),
+ ],
+ q(4913) => [
+ q(Nakai),
+ ],
+ q(4914) => [
+ q(Nokuku),
+ ],
+ q(4915) => [
+ q(Namat),
+ ],
+ q(4916) => [
+ q(Nkangala),
+ ],
+ q(4917) => [
+ q(Nkonya),
+ ],
+ q(4918) => [
+ q(Niuatoputapu),
+ ],
+ q(4919) => [
+ q(Nkami),
+ ],
+ q(4920) => [
+ q(Nukuoro),
+ ],
+ q(4921) => [
+ q(North Asmat),
+ ],
+ q(4922) => [
+ q(Nyika (Tanzania)),
+ ],
+ q(4923) => [
+ q(Bouna Kulango),
+ ],
+ q(4924) => [
+ q(Nyika (Malawi and Zambia)),
+ ],
+ q(4925) => [
+ q(Nkutu),
+ ],
+ q(4926) => [
+ q(Nkoroo),
+ ],
+ q(4927) => [
+ q(Nkari),
+ ],
+ q(4928) => [
+ q(Ngombale),
+ ],
+ q(4929) => [
+ q(Nalca),
+ ],
+ q(4930) => [
+ q(East Nyala),
+ ],
+ q(4931) => [
+ q(Gela),
+ ],
+ q(4932) => [
+ q(Grangali),
+ ],
+ q(4933) => [
+ q(Nyali),
+ ],
+ q(4934) => [
+ q(Ninia Yali),
+ ],
+ q(4935) => [
+ q(Nihali),
+ ],
+ q(4936) => [
+ q(Ngul),
+ ],
+ q(4937) => [
+ q(Ngarla),
+ ],
+ q(4938) => [
+ q(Nchumbulu),
+ ],
+ q(4939) => [
+ q(Orizaba Nahuatl),
+ ],
+ q(4940) => [
+ q(Nahali),
+ ],
+ q(4941) => [
+ q(Nyamal),
+ ],
+ q(4942) => [
+ q(Nalogo),
+ ],
+ q(4943) => [
+ q(Maram Naga),
+ ],
+ q(4944) => [
+ q(Big Nambas),
+ q(V'enen Taut),
+ ],
+ q(4945) => [
+ q(Ngam),
+ ],
+ q(4946) => [
+ q(Ndumu),
+ ],
+ q(4947) => [
+ q(Mzieme Naga),
+ ],
+ q(4948) => [
+ q(Tangkhul Naga (India)),
+ ],
+ q(4949) => [
+ q(Kwasio),
+ ],
+ q(4950) => [
+ q(Monsang Naga),
+ ],
+ q(4951) => [
+ q(Nyam),
+ ],
+ q(4952) => [
+ q(Ngombe (Central African Republic)),
+ ],
+ q(4953) => [
+ q(Namakura),
+ ],
+ q(4954) => [
+ q(Ndemli),
+ ],
+ q(4955) => [
+ q(Manangba),
+ ],
+ q(4956) => [
+ q(!Xoo),
+ ],
+ q(4957) => [
+ q(Moyon Naga),
+ ],
+ q(4958) => [
+ q(Nimanbur),
+ ],
+ q(4959) => [
+ q(Nambya),
+ ],
+ q(4960) => [
+ q(Nimbari),
+ ],
+ q(4961) => [
+ q(Letemboi),
+ ],
+ q(4962) => [
+ q(Namonuito),
+ ],
+ q(4963) => [
+ q(Northeast Maidu),
+ ],
+ q(4964) => [
+ q(Ngamini),
+ ],
+ q(4965) => [
+ q(Nimoa),
+ ],
+ q(4966) => [
+ q(Nama (Papua New Guinea)),
+ ],
+ q(4967) => [
+ q(Namuyi),
+ ],
+ q(4968) => [
+ q(Nawdm),
+ ],
+ q(4969) => [
+ q(Nyangumarta),
+ ],
+ q(4970) => [
+ q(Nande),
+ ],
+ q(4971) => [
+ q(Nancere),
+ ],
+ q(4972) => [
+ q(West Ambae),
+ ],
+ q(4973) => [
+ q(Ngandyera),
+ ],
+ q(4974) => [
+ q(Ngaing),
+ ],
+ q(4975) => [
+ q(Maring Naga),
+ ],
+ q(4976) => [
+ q(Ngiemboon),
+ ],
+ q(4977) => [
+ q(North Nuaulu),
+ ],
+ q(4978) => [
+ q(Nyangatom),
+ ],
+ q(4979) => [
+ q(Nankina),
+ ],
+ q(4980) => [
+ q(Northern Rengma Naga),
+ ],
+ q(4981) => [
+ q(Namia),
+ ],
+ q(4982) => [
+ q(Ngete),
+ ],
+ q(4983) => [
+ q(Wancho Naga),
+ ],
+ q(4984) => [
+ q(Ngindo),
+ ],
+ q(4985) => [
+ q(Narungga),
+ ],
+ q(4986) => [
+ q(Ningye),
+ ],
+ q(4987) => [
+ q(Nanticoke),
+ ],
+ q(4988) => [
+ q(Dwang),
+ ],
+ q(4989) => [
+ q(Nugunu (Australia)),
+ ],
+ q(4990) => [
+ q(Southern Nuni),
+ ],
+ q(4991) => [
+ q(Ngong),
+ ],
+ q(4992) => [
+ q(Nyangga),
+ ],
+ q(4993) => [
+ q(Nda'nda'),
+ ],
+ q(4994) => [
+ q(Woun Meu),
+ ],
+ q(4995) => [
+ q(Nuk),
+ ],
+ q(4996) => [
+ q(Northern Thai),
+ ],
+ q(4997) => [
+ q(Nimadi),
+ ],
+ q(4998) => [
+ q(Nomane),
+ ],
+ q(4999) => [
+ q(Nomu),
+ ],
+ q(5000) => [
+ q(Noiri),
+ ],
+ q(5001) => [
+ q(Nonuya),
+ ],
+ q(5002) => [
+ q(Nooksack),
+ ],
+ q(5003) => [
+ q(Nocaman),
+ ],
+ q(5004) => [
+ q(Numanggang),
+ ],
+ q(5005) => [
+ q(Ngongo),
+ ],
+ q(5006) => [
+ q(Eastern Nisu),
+ ],
+ q(5007) => [
+ q(Nomatsiguenga),
+ ],
+ q(5008) => [
+ q(Ewage-Notu),
+ ],
+ q(5009) => [
+ q(Novial),
+ ],
+ q(5010) => [
+ q(Nyambo),
+ ],
+ q(5011) => [
+ q(Noy),
+ ],
+ q(5012) => [
+ q(Nayi),
+ ],
+ q(5013) => [
+ q(Nar Phu),
+ ],
+ q(5014) => [
+ q(Nupbikha),
+ ],
+ q(5015) => [
+ q(Ponyo-Gongwang Naga),
+ ],
+ q(5016) => [
+ q(Phom Naga),
+ ],
+ q(5017) => [
+ q(Nepali (individual language)),
+ ],
+ q(5018) => [
+ q(Southeastern Puebla Nahuatl),
+ ],
+ q(5019) => [
+ q(Mondropolon),
+ ],
+ q(5020) => [
+ q(Pochuri Naga),
+ ],
+ q(5021) => [
+ q(Nipsan),
+ ],
+ q(5022) => [
+ q(Puimei Naga),
+ ],
+ q(5023) => [
+ q(Napu),
+ ],
+ q(5024) => [
+ q(Southern Nago),
+ ],
+ q(5025) => [
+ q(Kura Ede Nago),
+ ],
+ q(5026) => [
+ q(Ndom),
+ ],
+ q(5027) => [
+ q(Nen),
+ ],
+ q(5028) => [
+ q(Akyaung Ari Naga),
+ ],
+ q(5029) => [
+ q(Ngom),
+ ],
+ q(5030) => [
+ q(Nara),
+ ],
+ q(5031) => [
+ q(Noric),
+ ],
+ q(5032) => [
+ q(Southern Rengma Naga),
+ ],
+ q(5033) => [
+ q(Narango),
+ ],
+ q(5034) => [
+ q(Chokri Naga),
+ ],
+ q(5035) => [
+ q(Ngarluma),
+ ],
+ q(5036) => [
+ q(Narom),
+ ],
+ q(5037) => [
+ q(Norn),
+ ],
+ q(5038) => [
+ q(North Picene),
+ ],
+ q(5039) => [
+ q(Norra),
+ ],
+ q(5040) => [
+ q(Northern Kalapuya),
+ ],
+ q(5041) => [
+ q(Narua),
+ ],
+ q(5042) => [
+ q(Ngurmbur),
+ ],
+ q(5043) => [
+ q(Lala),
+ ],
+ q(5044) => [
+ q(Sangtam Naga),
+ ],
+ q(5045) => [
+ q(Nshi),
+ ],
+ q(5046) => [
+ q(Southern Nisu),
+ ],
+ q(5047) => [
+ q(Nsenga),
+ ],
+ q(5048) => [
+ q(Northwestern Nisu),
+ ],
+ q(5049) => [
+ q(Ngasa),
+ ],
+ q(5050) => [
+ q(Ngoshie),
+ ],
+ q(5051) => [
+ q(Nigerian Sign Language),
+ ],
+ q(5052) => [
+ q(Naskapi),
+ ],
+ q(5053) => [
+ q(Norwegian Sign Language),
+ ],
+ q(5054) => [
+ q(Sumi Naga),
+ ],
+ q(5055) => [
+ q(Nehan),
+ ],
+ q(5056) => [
+ q(Nepalese Sign Language),
+ ],
+ q(5057) => [
+ q(Northern Sierra Miwok),
+ ],
+ q(5058) => [
+ q(Maritime Sign Language),
+ ],
+ q(5059) => [
+ q(Nali),
+ ],
+ q(5060) => [
+ q(Tase Naga),
+ ],
+ q(5061) => [
+ q(Sierra Negra Nahuatl),
+ ],
+ q(5062) => [
+ q(Southwestern Nisu),
+ ],
+ q(5063) => [
+ q(Navut),
+ ],
+ q(5064) => [
+ q(Nsongo),
+ ],
+ q(5065) => [
+ q(Nasal),
+ ],
+ q(5066) => [
+ q(Nisenan),
+ ],
+ q(5067) => [
+ q(Nathembo),
+ ],
+ q(5068) => [
+ q(Natioro),
+ ],
+ q(5069) => [
+ q(Ngaanyatjarra),
+ ],
+ q(5070) => [
+ q(Ikoma-Nata-Isenye),
+ ],
+ q(5071) => [
+ q(Nateni),
+ ],
+ q(5072) => [
+ q(Ntomba),
+ ],
+ q(5073) => [
+ q(Northern Tepehuan),
+ ],
+ q(5074) => [
+ q(Delo),
+ ],
+ q(5075) => [
+ q(Natagaimas),
+ ],
+ q(5076) => [
+ q(Natugu),
+ ],
+ q(5077) => [
+ q(Nottoway),
+ ],
+ q(5078) => [
+ q(Tangkhul Naga (Myanmar)),
+ ],
+ q(5079) => [
+ q(Mantsi),
+ ],
+ q(5080) => [
+ q(Natanzi),
+ ],
+ q(5081) => [
+ q(Yuaga),
+ ],
+ q(5082) => [
+ q(Nukuini),
+ ],
+ q(5083) => [
+ q(Ngala),
+ ],
+ q(5084) => [
+ q(Ngundu),
+ ],
+ q(5085) => [
+ q(Nusu),
+ ],
+ q(5086) => [
+ q(Nungali),
+ ],
+ q(5087) => [
+ q(Ndunda),
+ ],
+ q(5088) => [
+ q(Ngumbi),
+ ],
+ q(5089) => [
+ q(Nyole),
+ ],
+ q(5090) => [
+ q(Nuu-chah-nulth),
+ q(Nuuchahnulth),
+ ],
+ q(5091) => [
+ q(Nusa Laut),
+ ],
+ q(5092) => [
+ q(Niuafo'ou),
+ ],
+ q(5093) => [
+ q(Anong),
+ ],
+ q(5094) => [
+ q(Nguon),
+ ],
+ q(5095) => [
+ q(Nupe-Nupe-Tako),
+ ],
+ q(5096) => [
+ q(Nukumanu),
+ ],
+ q(5097) => [
+ q(Nukuria),
+ ],
+ q(5098) => [
+ q(Nuer),
+ ],
+ q(5099) => [
+ q(Nung (Viet Nam)),
+ ],
+ q(5100) => [
+ q(Ngbundu),
+ ],
+ q(5101) => [
+ q(Northern Nuni),
+ ],
+ q(5102) => [
+ q(Nguluwan),
+ ],
+ q(5103) => [
+ q(Mehek),
+ ],
+ q(5104) => [
+ q(Nunggubuyu),
+ ],
+ q(5105) => [
+ q(Tlamacazapa Nahuatl),
+ ],
+ q(5106) => [
+ q(Nasarian),
+ ],
+ q(5107) => [
+ q(Namiae),
+ ],
+ q(5108) => [
+ q(Nyokon),
+ ],
+ q(5109) => [
+ q(Nawathinehena),
+ ],
+ q(5110) => [
+ q(Nyabwa),
+ ],
+ q(5111) => [
+ q(Ngwe),
+ ],
+ q(5112) => [
+ q(Ngayawung),
+ ],
+ q(5113) => [
+ q(Southwest Tanna),
+ ],
+ q(5114) => [
+ q(Nyamusa-Molo),
+ ],
+ q(5115) => [
+ q(Nauo),
+ ],
+ q(5116) => [
+ q(Nawaru),
+ ],
+ q(5117) => [
+ q(Middle Newar),
+ ],
+ q(5118) => [
+ q(Nottoway-Meherrin),
+ ],
+ q(5119) => [
+ q(Nauete),
+ ],
+ q(5120) => [
+ q(Ngando (Democratic Republic of Congo)),
+ ],
+ q(5121) => [
+ q(Nage),
+ ],
+ q(5122) => [
+ q(Ngad'a),
+ ],
+ q(5123) => [
+ q(Nindi),
+ ],
+ q(5124) => [
+ q(Koki Naga),
+ ],
+ q(5125) => [
+ q(South Nuaulu),
+ ],
+ q(5126) => [
+ q(Numidian),
+ ],
+ q(5127) => [
+ q(Ngawun),
+ ],
+ q(5128) => [
+ q(Naxi),
+ ],
+ q(5129) => [
+ q(Ninggerum),
+ ],
+ q(5130) => [
+ q(Narau),
+ ],
+ q(5131) => [
+ q(Nafri),
+ ],
+ q(5132) => [
+ q(Nyangbo),
+ ],
+ q(5133) => [
+ q(Nyanga-li),
+ ],
+ q(5134) => [
+ q(Nyore),
+ q(Olunyole),
+ ],
+ q(5135) => [
+ q(Nyengo),
+ ],
+ q(5136) => [
+ q(Giryama),
+ q(Kigiryama),
+ ],
+ q(5137) => [
+ q(Nyindu),
+ ],
+ q(5138) => [
+ q(Nyigina),
+ ],
+ q(5139) => [
+ q(Ama (Sudan)),
+ ],
+ q(5140) => [
+ q(Nyanga),
+ ],
+ q(5141) => [
+ q(Nyaneka),
+ ],
+ q(5142) => [
+ q(Nyeu),
+ ],
+ q(5143) => [
+ q(Nyang'i),
+ ],
+ q(5144) => [
+ q(Nayini),
+ ],
+ q(5145) => [
+ q(Nyiha (Malawi)),
+ ],
+ q(5146) => [
+ q(Nyunga),
+ ],
+ q(5147) => [
+ q(Nyawaygi),
+ ],
+ q(5148) => [
+ q(Nyungwe),
+ ],
+ q(5149) => [
+ q(Nyulnyul),
+ ],
+ q(5150) => [
+ q(Nyaw),
+ ],
+ q(5151) => [
+ q(Nganyaywana),
+ ],
+ q(5152) => [
+ q(Nyakyusa-Ngonde),
+ ],
+ q(5153) => [
+ q(Tigon Mbembe),
+ ],
+ q(5154) => [
+ q(Njebi),
+ ],
+ q(5155) => [
+ q(Nzakara),
+ ],
+ q(5156) => [
+ q(Zeme Naga),
+ ],
+ q(5157) => [
+ q(New Zealand Sign Language),
+ ],
+ q(5158) => [
+ q(Teke-Nzikou),
+ ],
+ q(5159) => [
+ q(Nzakambay),
+ ],
+ q(5160) => [
+ q(Nanga Dama Dogon),
+ ],
+ q(5161) => [
+ q(Orok),
+ ],
+ q(5162) => [
+ q(Oroch),
+ ],
+ q(5163) => [
+ q(Old Aramaic (up to 700 BCE)),
+ q(Ancient Aramaic (up to 700 BCE)),
+ ],
+ q(5164) => [
+ q(Old Avar),
+ ],
+ q(5165) => [
+ q(Obispeno),
+ ],
+ q(5166) => [
+ q(Southern Bontok),
+ ],
+ q(5167) => [
+ q(Oblo),
+ ],
+ q(5168) => [
+ q(Moabite),
+ ],
+ q(5169) => [
+ q(Obo Manobo),
+ ],
+ q(5170) => [
+ q(Old Burmese),
+ ],
+ q(5171) => [
+ q(Old Breton),
+ ],
+ q(5172) => [
+ q(Obulom),
+ ],
+ q(5173) => [
+ q(Ocaina),
+ ],
+ q(5174) => [
+ q(Old Chinese),
+ ],
+ q(5175) => [
+ q(Old Cornish),
+ ],
+ q(5176) => [
+ q(Atzingo Matlatzinca),
+ ],
+ q(5177) => [
+ q(Odut),
+ ],
+ q(5178) => [
+ q(Od),
+ ],
+ q(5179) => [
+ q(Old Dutch),
+ ],
+ q(5180) => [
+ q(Odual),
+ ],
+ q(5181) => [
+ q(Ofo),
+ ],
+ q(5182) => [
+ q(Old Frisian),
+ ],
+ q(5183) => [
+ q(Efutop),
+ ],
+ q(5184) => [
+ q(Ogbia),
+ ],
+ q(5185) => [
+ q(Ogbah),
+ ],
+ q(5186) => [
+ q(Old Georgian),
+ ],
+ q(5187) => [
+ q(Ogbogolo),
+ ],
+ q(5188) => [
+ q(Khana),
+ ],
+ q(5189) => [
+ q(Ogbronuagum),
+ ],
+ q(5190) => [
+ q(Old Hittite),
+ ],
+ q(5191) => [
+ q(Old Hungarian),
+ ],
+ q(5192) => [
+ q(Oirata),
+ ],
+ q(5193) => [
+ q(Inebu One),
+ ],
+ q(5194) => [
+ q(Northwestern Ojibwa),
+ ],
+ q(5195) => [
+ q(Central Ojibwa),
+ ],
+ q(5196) => [
+ q(Eastern Ojibwa),
+ ],
+ q(5197) => [
+ q(Old Japanese),
+ ],
+ q(5198) => [
+ q(Severn Ojibwa),
+ ],
+ q(5199) => [
+ q(Ontong Java),
+ ],
+ q(5200) => [
+ q(Western Ojibwa),
+ ],
+ q(5201) => [
+ q(Okanagan),
+ ],
+ q(5202) => [
+ q(Okobo),
+ ],
+ q(5203) => [
+ q(Okodia),
+ ],
+ q(5204) => [
+ q(Okpe (Southwestern Edo)),
+ ],
+ q(5205) => [
+ q(Koko Babangk),
+ ],
+ q(5206) => [
+ q(Koresh-e Rostam),
+ ],
+ q(5207) => [
+ q(Okiek),
+ ],
+ q(5208) => [
+ q(Oko-Juwoi),
+ ],
+ q(5209) => [
+ q(Kwamtim One),
+ ],
+ q(5210) => [
+ q(Old Kentish Sign Language),
+ ],
+ q(5211) => [
+ q(Middle Korean (10th-16th cent.)),
+ ],
+ q(5212) => [
+ q(Oki-No-Erabu),
+ ],
+ q(5213) => [
+ q(Old Korean (3rd-9th cent.)),
+ ],
+ q(5214) => [
+ q(Kirike),
+ ],
+ q(5215) => [
+ q(Oko-Eni-Osayen),
+ ],
+ q(5216) => [
+ q(Oku),
+ ],
+ q(5217) => [
+ q(Orokaiva),
+ ],
+ q(5218) => [
+ q(Okpe (Northwestern Edo)),
+ ],
+ q(5219) => [
+ q(Walungge),
+ ],
+ q(5220) => [
+ q(Mochi),
+ ],
+ q(5221) => [
+ q(Olekha),
+ ],
+ q(5222) => [
+ q(Oloma),
+ ],
+ q(5223) => [
+ q(Livvi),
+ ],
+ q(5224) => [
+ q(Olrat),
+ ],
+ q(5225) => [
+ q(Omaha-Ponca),
+ ],
+ q(5226) => [
+ q(East Ambae),
+ ],
+ q(5227) => [
+ q(Mochica),
+ ],
+ q(5228) => [
+ q(Omejes),
+ ],
+ q(5229) => [
+ q(Omagua),
+ ],
+ q(5230) => [
+ q(Omi),
+ ],
+ q(5231) => [
+ q(Omok),
+ ],
+ q(5232) => [
+ q(Ombo),
+ ],
+ q(5233) => [
+ q(Minoan),
+ ],
+ q(5234) => [
+ q(Utarmbung),
+ ],
+ q(5235) => [
+ q(Old Manipuri),
+ ],
+ q(5236) => [
+ q(Old Marathi),
+ ],
+ q(5237) => [
+ q(Omotik),
+ ],
+ q(5238) => [
+ q(Omurano),
+ ],
+ q(5239) => [
+ q(South Tairora),
+ ],
+ q(5240) => [
+ q(Old Mon),
+ ],
+ q(5241) => [
+ q(Ona),
+ ],
+ q(5242) => [
+ q(Lingao),
+ ],
+ q(5243) => [
+ q(Oneida),
+ ],
+ q(5244) => [
+ q(Olo),
+ ],
+ q(5245) => [
+ q(Onin),
+ ],
+ q(5246) => [
+ q(Onjob),
+ ],
+ q(5247) => [
+ q(Kabore One),
+ ],
+ q(5248) => [
+ q(Onobasulu),
+ ],
+ q(5249) => [
+ q(Onondaga),
+ ],
+ q(5250) => [
+ q(Sartang),
+ ],
+ q(5251) => [
+ q(Northern One),
+ ],
+ q(5252) => [
+ q(Ono),
+ ],
+ q(5253) => [
+ q(Ontenu),
+ ],
+ q(5254) => [
+ q(Unua),
+ ],
+ q(5255) => [
+ q(Old Nubian),
+ ],
+ q(5256) => [
+ q(Onin Based Pidgin),
+ ],
+ q(5257) => [
+ q(Tohono O'odham),
+ ],
+ q(5258) => [
+ q(Ong),
+ ],
+ q(5259) => [
+ q(Onge),
+ ],
+ q(5260) => [
+ q(Oorlams),
+ ],
+ q(5261) => [
+ q(Old Ossetic),
+ ],
+ q(5262) => [
+ q(Okpamheri),
+ ],
+ q(5263) => [
+ q(Kopkaka),
+ ],
+ q(5264) => [
+ q(Oksapmin),
+ ],
+ q(5265) => [
+ q(Opao),
+ ],
+ q(5266) => [
+ q(Opata),
+ ],
+ q(5267) => [
+ q(Ofaye),
+ ],
+ q(5268) => [
+ q(Oroha),
+ ],
+ q(5269) => [
+ q(Orma),
+ ],
+ q(5270) => [
+ q(Orejon),
+ ],
+ q(5271) => [
+ q(Oring),
+ ],
+ q(5272) => [
+ q(Oroqen),
+ ],
+ q(5273) => [
+ q(Orang Kanaq),
+ ],
+ q(5274) => [
+ q(Orokolo),
+ ],
+ q(5275) => [
+ q(Oruma),
+ ],
+ q(5276) => [
+ q(Orang Seletar),
+ ],
+ q(5277) => [
+ q(Adivasi Oriya),
+ ],
+ q(5278) => [
+ q(Ormuri),
+ ],
+ q(5279) => [
+ q(Old Russian),
+ ],
+ q(5280) => [
+ q(Oro Win),
+ ],
+ q(5281) => [
+ q(Oro),
+ ],
+ q(5282) => [
+ q(Oriya (individual language)),
+ ],
+ q(5283) => [
+ q(Ormu),
+ ],
+ q(5284) => [
+ q(Oscan),
+ ],
+ q(5285) => [
+ q(Osing),
+ ],
+ q(5286) => [
+ q(Ososo),
+ ],
+ q(5287) => [
+ q(Old Spanish),
+ ],
+ q(5288) => [
+ q(Osatu),
+ ],
+ q(5289) => [
+ q(Southern One),
+ ],
+ q(5290) => [
+ q(Old Saxon),
+ ],
+ q(5291) => [
+ q(Old Tibetan),
+ ],
+ q(5292) => [
+ q(Ot Danum),
+ ],
+ q(5293) => [
+ q(Mezquital Otomi),
+ ],
+ q(5294) => [
+ q(Oti),
+ ],
+ q(5295) => [
+ q(Old Turkish),
+ ],
+ q(5296) => [
+ q(Tilapa Otomi),
+ ],
+ q(5297) => [
+ q(Eastern Highland Otomi),
+ ],
+ q(5298) => [
+ q(Tenango Otomi),
+ ],
+ q(5299) => [
+ q(Queretaro Otomi),
+ ],
+ q(5300) => [
+ q(Otoro),
+ ],
+ q(5301) => [
+ q(Estado de Mexico Otomi),
+ ],
+ q(5302) => [
+ q(Temoaya Otomi),
+ ],
+ q(5303) => [
+ q(Otuke),
+ ],
+ q(5304) => [
+ q(Ottawa),
+ ],
+ q(5305) => [
+ q(Texcatepec Otomi),
+ ],
+ q(5306) => [
+ q(Old Tamil),
+ ],
+ q(5307) => [
+ q(Ixtenco Otomi),
+ ],
+ q(5308) => [
+ q(Tagargrent),
+ ],
+ q(5309) => [
+ q(Glio-Oubi),
+ ],
+ q(5310) => [
+ q(Oune),
+ ],
+ q(5311) => [
+ q(Old Uighur),
+ ],
+ q(5312) => [
+ q(Ouma),
+ ],
+ q(5313) => [
+ q(!O!ung),
+ ],
+ q(5314) => [
+ q(Owiniga),
+ ],
+ q(5315) => [
+ q(Old Welsh),
+ ],
+ q(5316) => [
+ q(Oy),
+ ],
+ q(5317) => [
+ q(Oyda),
+ ],
+ q(5318) => [
+ q(Wayampi),
+ ],
+ q(5319) => [
+ q(Oya'oya),
+ ],
+ q(5320) => [
+ q(Koonzime),
+ ],
+ q(5321) => [
+ q(Parecis),
+ ],
+ q(5322) => [
+ q(Pacoh),
+ ],
+ q(5323) => [
+ q(Paumari),
+ ],
+ q(5324) => [
+ q(Pagibete),
+ ],
+ q(5325) => [
+ q(Paranawat),
+ ],
+ q(5326) => [
+ q(Tenharim),
+ ],
+ q(5327) => [
+ q(Pe),
+ ],
+ q(5328) => [
+ q(Parakana),
+ ],
+ q(5329) => [
+ q(Northern Paiute),
+ ],
+ q(5330) => [
+ q(Parya),
+ ],
+ q(5331) => [
+ q(Panamint),
+ q(Timbisha),
+ ],
+ q(5332) => [
+ q(Papasena),
+ ],
+ q(5333) => [
+ q(Papitalai),
+ ],
+ q(5334) => [
+ q(Pakaasnovos),
+ ],
+ q(5335) => [
+ q(Pawnee),
+ ],
+ q(5336) => [
+ q(Pankarare),
+ ],
+ q(5337) => [
+ q(Pech),
+ ],
+ q(5338) => [
+ q(Pankararu),
+ ],
+ q(5339) => [
+ q(Paez),
+ ],
+ q(5340) => [
+ q(Patamona),
+ ],
+ q(5341) => [
+ q(Mezontla Popoloca),
+ ],
+ q(5342) => [
+ q(Coyotepec Popoloca),
+ ],
+ q(5343) => [
+ q(Paraujano),
+ ],
+ q(5344) => [
+ q(E'napa Woromaipu),
+ ],
+ q(5345) => [
+ q(Parkwa),
+ ],
+ q(5346) => [
+ q(Mak (Nigeria)),
+ ],
+ q(5347) => [
+ q(Kpasam),
+ ],
+ q(5348) => [
+ q(Papel),
+ ],
+ q(5349) => [
+ q(Badyara),
+ ],
+ q(5350) => [
+ q(Pangwa),
+ ],
+ q(5351) => [
+ q(Central Pame),
+ ],
+ q(5352) => [
+ q(Southern Pashto),
+ ],
+ q(5353) => [
+ q(Northern Pashto),
+ ],
+ q(5354) => [
+ q(Pnar),
+ ],
+ q(5355) => [
+ q(Pyu),
+ ],
+ q(5356) => [
+ q(Santa Ines Ahuatempan Popoloca),
+ ],
+ q(5357) => [
+ q(Pear),
+ ],
+ q(5358) => [
+ q(Bouyei),
+ ],
+ q(5359) => [
+ q(Picard),
+ ],
+ q(5360) => [
+ q(Ruching Palaung),
+ ],
+ q(5361) => [
+ q(Paliyan),
+ ],
+ q(5362) => [
+ q(Paniya),
+ ],
+ q(5363) => [
+ q(Pardhan),
+ ],
+ q(5364) => [
+ q(Duruwa),
+ ],
+ q(5365) => [
+ q(Parenga),
+ ],
+ q(5366) => [
+ q(Paite Chin),
+ ],
+ q(5367) => [
+ q(Pardhi),
+ ],
+ q(5368) => [
+ q(Nigerian Pidgin),
+ ],
+ q(5369) => [
+ q(Piti),
+ ],
+ q(5370) => [
+ q(Pacahuara),
+ ],
+ q(5371) => [
+ q(Panang),
+ ],
+ q(5372) => [
+ q(Pyapun),
+ ],
+ q(5373) => [
+ q(Anam),
+ ],
+ q(5374) => [
+ q(Pennsylvania German),
+ ],
+ q(5375) => [
+ q(Pa Di),
+ ],
+ q(5376) => [
+ q(Podena),
+ q(Fedan),
+ ],
+ q(5377) => [
+ q(Padoe),
+ ],
+ q(5378) => [
+ q(Plautdietsch),
+ ],
+ q(5379) => [
+ q(Kayan),
+ ],
+ q(5380) => [
+ q(Peranakan Indonesian),
+ ],
+ q(5381) => [
+ q(Eastern Pomo),
+ ],
+ q(5382) => [
+ q(Mala (Papua New Guinea)),
+ ],
+ q(5383) => [
+ q(Taje),
+ ],
+ q(5384) => [
+ q(Northeastern Pomo),
+ ],
+ q(5385) => [
+ q(Pengo),
+ ],
+ q(5386) => [
+ q(Bonan),
+ ],
+ q(5387) => [
+ q(Chichimeca-Jonaz),
+ ],
+ q(5388) => [
+ q(Northern Pomo),
+ ],
+ q(5389) => [
+ q(Penchal),
+ ],
+ q(5390) => [
+ q(Pekal),
+ ],
+ q(5391) => [
+ q(Phende),
+ ],
+ q(5392) => [
+ q(Kunja),
+ ],
+ q(5393) => [
+ q(Southern Pomo),
+ ],
+ q(5394) => [
+ q(Iranian Persian),
+ ],
+ q(5395) => [
+ q(Pemono),
+ ],
+ q(5396) => [
+ q(Petats),
+ ],
+ q(5397) => [
+ q(Petjo),
+ ],
+ q(5398) => [
+ q(Eastern Penan),
+ ],
+ q(5399) => [
+ q(Paafang),
+ ],
+ q(5400) => [
+ q(Peere),
+ ],
+ q(5401) => [
+ q(Pfaelzisch),
+ ],
+ q(5402) => [
+ q(Sudanese Creole Arabic),
+ ],
+ q(5403) => [
+ q(Pangwali),
+ ],
+ q(5404) => [
+ q(Pagi),
+ ],
+ q(5405) => [
+ q(Rerep),
+ ],
+ q(5406) => [
+ q(Primitive Irish),
+ ],
+ q(5407) => [
+ q(Paelignian),
+ ],
+ q(5408) => [
+ q(Pangseng),
+ ],
+ q(5409) => [
+ q(Pagu),
+ ],
+ q(5410) => [
+ q(Pa-Hng),
+ ],
+ q(5411) => [
+ q(Phudagi),
+ ],
+ q(5412) => [
+ q(Phuong),
+ ],
+ q(5413) => [
+ q(Phukha),
+ ],
+ q(5414) => [
+ q(Phake),
+ ],
+ q(5415) => [
+ q(Phalura),
+ q(Palula),
+ ],
+ q(5416) => [
+ q(Phimbi),
+ ],
+ q(5417) => [
+ q(Phunoi),
+ ],
+ q(5418) => [
+ q(Phana'),
+ ],
+ q(5419) => [
+ q(Pahari-Potwari),
+ ],
+ q(5420) => [
+ q(Phu Thai),
+ ],
+ q(5421) => [
+ q(Phuan),
+ ],
+ q(5422) => [
+ q(Pahlavani),
+ ],
+ q(5423) => [
+ q(Phangduwali),
+ ],
+ q(5424) => [
+ q(Pima Bajo),
+ ],
+ q(5425) => [
+ q(Yine),
+ ],
+ q(5426) => [
+ q(Pinji),
+ ],
+ q(5427) => [
+ q(Piaroa),
+ ],
+ q(5428) => [
+ q(Piro),
+ ],
+ q(5429) => [
+ q(Pingelapese),
+ ],
+ q(5430) => [
+ q(Pisabo),
+ ],
+ q(5431) => [
+ q(Pitcairn-Norfolk),
+ ],
+ q(5432) => [
+ q(Pini),
+ ],
+ q(5433) => [
+ q(Pijao),
+ ],
+ q(5434) => [
+ q(Yom),
+ ],
+ q(5435) => [
+ q(Powhatan),
+ ],
+ q(5436) => [
+ q(Piame),
+ ],
+ q(5437) => [
+ q(Piapoco),
+ ],
+ q(5438) => [
+ q(Pero),
+ ],
+ q(5439) => [
+ q(Piratapuyo),
+ ],
+ q(5440) => [
+ q(Pijin),
+ ],
+ q(5441) => [
+ q(Pitta Pitta),
+ ],
+ q(5442) => [
+ q(Pintupi-Luritja),
+ ],
+ q(5443) => [
+ q(Pileni),
+ q(Vaeakau-Taumako),
+ ],
+ q(5444) => [
+ q(Pimbwe),
+ ],
+ q(5445) => [
+ q(Piu),
+ ],
+ q(5446) => [
+ q(Piya-Kwonci),
+ ],
+ q(5447) => [
+ q(Pije),
+ ],
+ q(5448) => [
+ q(Pitjantjatjara),
+ ],
+ q(5449) => [
+ q(Ardhamagadhi Prakrit),
+ ],
+ q(5450) => [
+ q(Pokomo),
+ q(Kipfokomo),
+ ],
+ q(5451) => [
+ q(Paekche),
+ ],
+ q(5452) => [
+ q(Pak-Tong),
+ ],
+ q(5453) => [
+ q(Pankhu),
+ ],
+ q(5454) => [
+ q(Pakanha),
+ ],
+ q(5455) => [
+ q(Pokoot),
+ ],
+ q(5456) => [
+ q(Pukapuka),
+ ],
+ q(5457) => [
+ q(Attapady Kurumba),
+ ],
+ q(5458) => [
+ q(Pakistan Sign Language),
+ ],
+ q(5459) => [
+ q(Maleng),
+ ],
+ q(5460) => [
+ q(Paku),
+ ],
+ q(5461) => [
+ q(Miani),
+ ],
+ q(5462) => [
+ q(Polonombauk),
+ ],
+ q(5463) => [
+ q(Central Palawano),
+ ],
+ q(5464) => [
+ q(Polari),
+ ],
+ q(5465) => [
+ q(Palu'e),
+ ],
+ q(5466) => [
+ q(Pilaga),
+ ],
+ q(5467) => [
+ q(Paulohi),
+ ],
+ q(5468) => [
+ q(Polci),
+ ],
+ q(5469) => [
+ q(Kohistani Shina),
+ ],
+ q(5470) => [
+ q(Shwe Palaung),
+ ],
+ q(5471) => [
+ q(Palenquero),
+ ],
+ q(5472) => [
+ q(Oluta Popoluca),
+ ],
+ q(5473) => [
+ q(Palpa),
+ ],
+ q(5474) => [
+ q(Palaic),
+ ],
+ q(5475) => [
+ q(Palaka Senoufo),
+ ],
+ q(5476) => [
+ q(San Marcos Tlalcoyalco Popoloca),
+ ],
+ q(5477) => [
+ q(Plateau Malagasy),
+ ],
+ q(5478) => [
+ q(Palikur),
+ ],
+ q(5479) => [
+ q(Southwest Palawano),
+ ],
+ q(5480) => [
+ q(Brooke's Point Palawano),
+ ],
+ q(5481) => [
+ q(Bolyu),
+ ],
+ q(5482) => [
+ q(Paluan),
+ ],
+ q(5483) => [
+ q(Paama),
+ ],
+ q(5484) => [
+ q(Pambia),
+ ],
+ q(5485) => [
+ q(Palumata),
+ ],
+ q(5486) => [
+ q(Pallanganmiddang),
+ ],
+ q(5487) => [
+ q(Pwaamei),
+ ],
+ q(5488) => [
+ q(Pamona),
+ ],
+ q(5489) => [
+ q(Maharastri Prakrit),
+ ],
+ q(5490) => [
+ q(Northern Pumi),
+ ],
+ q(5491) => [
+ q(Southern Pumi),
+ ],
+ q(5492) => [
+ q(Pamlico),
+ ],
+ q(5493) => [
+ q(Lingua Franca),
+ ],
+ q(5494) => [
+ q(Pomo),
+ ],
+ q(5495) => [
+ q(Pam),
+ ],
+ q(5496) => [
+ q(Pom),
+ ],
+ q(5497) => [
+ q(Northern Pame),
+ ],
+ q(5498) => [
+ q(Paynamar),
+ ],
+ q(5499) => [
+ q(Piemontese),
+ ],
+ q(5500) => [
+ q(Tuamotuan),
+ ],
+ q(5501) => [
+ q(Mirpur Panjabi),
+ ],
+ q(5502) => [
+ q(Plains Miwok),
+ ],
+ q(5503) => [
+ q(Poumei Naga),
+ ],
+ q(5504) => [
+ q(Papuan Malay),
+ ],
+ q(5505) => [
+ q(Southern Pame),
+ ],
+ q(5506) => [
+ q(Punan Bah-Biau),
+ ],
+ q(5507) => [
+ q(Western Panjabi),
+ ],
+ q(5508) => [
+ q(Pannei),
+ ],
+ q(5509) => [
+ q(Western Penan),
+ ],
+ q(5510) => [
+ q(Pongu),
+ ],
+ q(5511) => [
+ q(Penrhyn),
+ ],
+ q(5512) => [
+ q(Aoheng),
+ ],
+ q(5513) => [
+ q(Paunaka),
+ ],
+ q(5514) => [
+ q(Punan Batu 1),
+ ],
+ q(5515) => [
+ q(Pinai-Hagahai),
+ ],
+ q(5516) => [
+ q(Panobo),
+ ],
+ q(5517) => [
+ q(Pancana),
+ ],
+ q(5518) => [
+ q(Pana (Burkina Faso)),
+ ],
+ q(5519) => [
+ q(Panim),
+ ],
+ q(5520) => [
+ q(Ponosakan),
+ ],
+ q(5521) => [
+ q(Pontic),
+ ],
+ q(5522) => [
+ q(Jiongnai Bunu),
+ ],
+ q(5523) => [
+ q(Pinigura),
+ ],
+ q(5524) => [
+ q(Panytyima),
+ ],
+ q(5525) => [
+ q(Phong-Kniang),
+ ],
+ q(5526) => [
+ q(Pinyin),
+ ],
+ q(5527) => [
+ q(Pana (Central African Republic)),
+ ],
+ q(5528) => [
+ q(Poqomam),
+ ],
+ q(5529) => [
+ q(Ponares),
+ ],
+ q(5530) => [
+ q(San Juan Atzingo Popoloca),
+ ],
+ q(5531) => [
+ q(Poke),
+ ],
+ q(5532) => [
+ q(Potiguara),
+ ],
+ q(5533) => [
+ q(Poqomchi'),
+ ],
+ q(5534) => [
+ q(Highland Popoluca),
+ ],
+ q(5535) => [
+ q(Pokanga),
+ ],
+ q(5536) => [
+ q(Southeastern Pomo),
+ ],
+ q(5537) => [
+ q(Central Pomo),
+ ],
+ q(5538) => [
+ q(Pwapwa),
+ ],
+ q(5539) => [
+ q(Texistepec Popoluca),
+ ],
+ q(5540) => [
+ q(Sayula Popoluca),
+ ],
+ q(5541) => [
+ q(Potawatomi),
+ ],
+ q(5542) => [
+ q(Upper Guinea Crioulo),
+ ],
+ q(5543) => [
+ q(San Felipe Otlaltepec Popoloca),
+ ],
+ q(5544) => [
+ q(Polabian),
+ ],
+ q(5545) => [
+ q(Pogolo),
+ ],
+ q(5546) => [
+ q(Pao),
+ ],
+ q(5547) => [
+ q(Papi),
+ ],
+ q(5548) => [
+ q(Paipai),
+ ],
+ q(5549) => [
+ q(Uma),
+ ],
+ q(5550) => [
+ q(Pipil),
+ q(Nicarao),
+ ],
+ q(5551) => [
+ q(Papuma),
+ ],
+ q(5552) => [
+ q(Papapana),
+ ],
+ q(5553) => [
+ q(Folopa),
+ ],
+ q(5554) => [
+ q(Pelende),
+ ],
+ q(5555) => [
+ q(Pei),
+ ],
+ q(5556) => [
+ q(Piru),
+ ],
+ q(5557) => [
+ q(San Luis Temalacayuca Popoloca),
+ ],
+ q(5558) => [
+ q(Pare),
+ ],
+ q(5559) => [
+ q(Papora),
+ ],
+ q(5560) => [
+ q(Pa'a),
+ ],
+ q(5561) => [
+ q(Malecite-Passamaquoddy),
+ ],
+ q(5562) => [
+ q(Lua'),
+ ],
+ q(5563) => [
+ q(Parachi),
+ ],
+ q(5564) => [
+ q(Parsi-Dari),
+ ],
+ q(5565) => [
+ q(Principense),
+ ],
+ q(5566) => [
+ q(Paranan),
+ ],
+ q(5567) => [
+ q(Prussian),
+ ],
+ q(5568) => [
+ q(Porohanon),
+ ],
+ q(5569) => [
+ q(Paici),
+ ],
+ q(5570) => [
+ q(Parauk),
+ ],
+ q(5571) => [
+ q(Peruvian Sign Language),
+ ],
+ q(5572) => [
+ q(Kibiri),
+ ],
+ q(5573) => [
+ q(Prasuni),
+ ],
+ q(5574) => [
+ q(Parsi),
+ ],
+ q(5575) => [
+ q(Asheninka Perene),
+ ],
+ q(5576) => [
+ q(Puri),
+ ],
+ q(5577) => [
+ q(Dari),
+ q(Afghan Persian),
+ ],
+ q(5578) => [
+ q(Phai),
+ ],
+ q(5579) => [
+ q(Puragi),
+ ],
+ q(5580) => [
+ q(Parawen),
+ ],
+ q(5581) => [
+ q(Purik),
+ ],
+ q(5582) => [
+ q(Pray 3),
+ ],
+ q(5583) => [
+ q(Providencia Sign Language),
+ ],
+ q(5584) => [
+ q(Asue Awyu),
+ ],
+ q(5585) => [
+ q(Persian Sign Language),
+ ],
+ q(5586) => [
+ q(Plains Indian Sign Language),
+ ],
+ q(5587) => [
+ q(Central Malay),
+ ],
+ q(5588) => [
+ q(Penang Sign Language),
+ ],
+ q(5589) => [
+ q(Southwest Pashayi),
+ ],
+ q(5590) => [
+ q(Southeast Pashayi),
+ ],
+ q(5591) => [
+ q(Puerto Rican Sign Language),
+ ],
+ q(5592) => [
+ q(Pauserna),
+ ],
+ q(5593) => [
+ q(Panasuan),
+ ],
+ q(5594) => [
+ q(Polish Sign Language),
+ ],
+ q(5595) => [
+ q(Philippine Sign Language),
+ ],
+ q(5596) => [
+ q(Pasi),
+ ],
+ q(5597) => [
+ q(Portuguese Sign Language),
+ ],
+ q(5598) => [
+ q(Kaulong),
+ ],
+ q(5599) => [
+ q(Central Pashto),
+ ],
+ q(5600) => [
+ q(Sauraseni Prakrit),
+ ],
+ q(5601) => [
+ q(Port Sandwich),
+ ],
+ q(5602) => [
+ q(Piscataway),
+ ],
+ q(5603) => [
+ q(Pai Tavytera),
+ ],
+ q(5604) => [
+ q(Pataxo Ha-Ha-Hae),
+ ],
+ q(5605) => [
+ q(Pintiini),
+ ],
+ q(5606) => [
+ q(Patani),
+ ],
+ q(5607) => [
+ q(Zo'e),
+ ],
+ q(5608) => [
+ q(Patep),
+ ],
+ q(5609) => [
+ q(Piamatsina),
+ ],
+ q(5610) => [
+ q(Enrekang),
+ ],
+ q(5611) => [
+ q(Bambam),
+ ],
+ q(5612) => [
+ q(Port Vato),
+ ],
+ q(5613) => [
+ q(Pentlatch),
+ ],
+ q(5614) => [
+ q(Pathiya),
+ ],
+ q(5615) => [
+ q(Western Highland Purepecha),
+ ],
+ q(5616) => [
+ q(Purum),
+ ],
+ q(5617) => [
+ q(Punan Merap),
+ ],
+ q(5618) => [
+ q(Punan Aput),
+ ],
+ q(5619) => [
+ q(Puelche),
+ ],
+ q(5620) => [
+ q(Punan Merah),
+ ],
+ q(5621) => [
+ q(Phuie),
+ ],
+ q(5622) => [
+ q(Puinave),
+ ],
+ q(5623) => [
+ q(Punan Tubu),
+ ],
+ q(5624) => [
+ q(Pu Ko),
+ ],
+ q(5625) => [
+ q(Puma),
+ ],
+ q(5626) => [
+ q(Puoc),
+ ],
+ q(5627) => [
+ q(Pulabu),
+ ],
+ q(5628) => [
+ q(Puquina),
+ ],
+ q(5629) => [
+ q(Purubora),
+ ],
+ q(5630) => [
+ q(Putoh),
+ ],
+ q(5631) => [
+ q(Punu),
+ ],
+ q(5632) => [
+ q(Puluwatese),
+ ],
+ q(5633) => [
+ q(Puare),
+ ],
+ q(5634) => [
+ q(Purisimeno),
+ ],
+ q(5635) => [
+ q(Purum Naga),
+ ],
+ q(5636) => [
+ q(Pawaia),
+ ],
+ q(5637) => [
+ q(Panawa),
+ ],
+ q(5638) => [
+ q(Gapapaiwa),
+ ],
+ q(5639) => [
+ q(Molbog),
+ ],
+ q(5640) => [
+ q(Paiwan),
+ ],
+ q(5641) => [
+ q(Pwo Western Karen),
+ ],
+ q(5642) => [
+ q(Powari),
+ ],
+ q(5643) => [
+ q(Pwo Northern Karen),
+ ],
+ q(5644) => [
+ q(Quetzaltepec Mixe),
+ ],
+ q(5645) => [
+ q(Pye Krumen),
+ ],
+ q(5646) => [
+ q(Fyam),
+ ],
+ q(5647) => [
+ q(Poyanawa),
+ ],
+ q(5648) => [
+ q(Paraguayan Sign Language),
+ q(Lengua de Senas del Paraguay),
+ ],
+ q(5649) => [
+ q(Puyuma),
+ ],
+ q(5650) => [
+ q(Pyu (Myanmar)),
+ ],
+ q(5651) => [
+ q(Pyen),
+ ],
+ q(5652) => [
+ q(Para Naga),
+ ],
+ q(5653) => [
+ q(Quapaw),
+ ],
+ q(5654) => [
+ q(Huallaga Huanuco Quechua),
+ ],
+ q(5655) => [
+ q(K'iche'),
+ q(Quiche),
+ ],
+ q(5656) => [
+ q(Calderon Highland Quichua),
+ ],
+ q(5657) => [
+ q(Lambayeque Quechua),
+ ],
+ q(5658) => [
+ q(Chimborazo Highland Quichua),
+ ],
+ q(5659) => [
+ q(South Bolivian Quechua),
+ ],
+ q(5660) => [
+ q(Quileute),
+ ],
+ q(5661) => [
+ q(Chachapoyas Quechua),
+ ],
+ q(5662) => [
+ q(North Bolivian Quechua),
+ ],
+ q(5663) => [
+ q(Sipacapense),
+ ],
+ q(5664) => [
+ q(Quinault),
+ ],
+ q(5665) => [
+ q(Southern Pastaza Quechua),
+ ],
+ q(5666) => [
+ q(Quinqui),
+ ],
+ q(5667) => [
+ q(Yanahuanca Pasco Quechua),
+ ],
+ q(5668) => [
+ q(Santiago del Estero Quichua),
+ ],
+ q(5669) => [
+ q(Sacapulteco),
+ ],
+ q(5670) => [
+ q(Tena Lowland Quichua),
+ ],
+ q(5671) => [
+ q(Yauyos Quechua),
+ ],
+ q(5672) => [
+ q(Ayacucho Quechua),
+ ],
+ q(5673) => [
+ q(Cusco Quechua),
+ ],
+ q(5674) => [
+ q(Ambo-Pasco Quechua),
+ ],
+ q(5675) => [
+ q(Cajamarca Quechua),
+ ],
+ q(5676) => [
+ q(Eastern Apurimac Quechua),
+ ],
+ q(5677) => [
+ q(Huamalies-Dos de Mayo Huanuco Quechua),
+ ],
+ q(5678) => [
+ q(Imbabura Highland Quichua),
+ ],
+ q(5679) => [
+ q(Loja Highland Quichua),
+ ],
+ q(5680) => [
+ q(Cajatambo North Lima Quechua),
+ ],
+ q(5681) => [
+ q(Margos-Yarowilca-Lauricocha Quechua),
+ ],
+ q(5682) => [
+ q(North Junin Quechua),
+ ],
+ q(5683) => [
+ q(Napo Lowland Quechua),
+ ],
+ q(5684) => [
+ q(Pacaraos Quechua),
+ ],
+ q(5685) => [
+ q(San Martin Quechua),
+ ],
+ q(5686) => [
+ q(Huaylla Wanca Quechua),
+ ],
+ q(5687) => [
+ q(Queyu),
+ ],
+ q(5688) => [
+ q(Northern Pastaza Quichua),
+ ],
+ q(5689) => [
+ q(Corongo Ancash Quechua),
+ ],
+ q(5690) => [
+ q(Classical Quechua),
+ ],
+ q(5691) => [
+ q(Huaylas Ancash Quechua),
+ ],
+ q(5692) => [
+ q(Kuman (Russia)),
+ ],
+ q(5693) => [
+ q(Sihuas Ancash Quechua),
+ ],
+ q(5694) => [
+ q(Kwalhioqua-Tlatskanai),
+ ],
+ q(5695) => [
+ q(Chiquian Ancash Quechua),
+ ],
+ q(5696) => [
+ q(Chincha Quechua),
+ ],
+ q(5697) => [
+ q(Panao Huanuco Quechua),
+ ],
+ q(5698) => [
+ q(Salasaca Highland Quichua),
+ ],
+ q(5699) => [
+ q(Northern Conchucos Ancash Quechua),
+ ],
+ q(5700) => [
+ q(Southern Conchucos Ancash Quechua),
+ ],
+ q(5701) => [
+ q(Puno Quechua),
+ ],
+ q(5702) => [
+ q(Qashqa'i),
+ ],
+ q(5703) => [
+ q(Canar Highland Quichua),
+ ],
+ q(5704) => [
+ q(Southern Qiang),
+ ],
+ q(5705) => [
+ q(Santa Ana de Tusi Pasco Quechua),
+ ],
+ q(5706) => [
+ q(Arequipa-La Union Quechua),
+ ],
+ q(5707) => [
+ q(Jauja Wanca Quechua),
+ ],
+ q(5708) => [
+ q(Quenya),
+ ],
+ q(5709) => [
+ q(Quiripi),
+ ],
+ q(5710) => [
+ q(Dungmali),
+ ],
+ q(5711) => [
+ q(Camling),
+ ],
+ q(5712) => [
+ q(Rasawa),
+ ],
+ q(5713) => [
+ q(Rade),
+ ],
+ q(5714) => [
+ q(Western Meohang),
+ ],
+ q(5715) => [
+ q(Logooli),
+ q(Lulogooli),
+ ],
+ q(5716) => [
+ q(Rabha),
+ ],
+ q(5717) => [
+ q(Ramoaaina),
+ ],
+ q(5718) => [
+ q(Tulu-Bohuai),
+ ],
+ q(5719) => [
+ q(Ralte),
+ ],
+ q(5720) => [
+ q(Canela),
+ ],
+ q(5721) => [
+ q(Riantana),
+ ],
+ q(5722) => [
+ q(Rao),
+ ],
+ q(5723) => [
+ q(Saam),
+ ],
+ q(5724) => [
+ q(Tegali),
+ ],
+ q(5725) => [
+ q(Razajerdi),
+ ],
+ q(5726) => [
+ q(Raute),
+ ],
+ q(5727) => [
+ q(Sampang),
+ ],
+ q(5728) => [
+ q(Rawang),
+ ],
+ q(5729) => [
+ q(Rang),
+ ],
+ q(5730) => [
+ q(Rapa),
+ ],
+ q(5731) => [
+ q(Rahambuu),
+ ],
+ q(5732) => [
+ q(Rumai Palaung),
+ ],
+ q(5733) => [
+ q(Northern Bontok),
+ ],
+ q(5734) => [
+ q(Miraya Bikol),
+ ],
+ q(5735) => [
+ q(Barababaraba),
+ ],
+ q(5736) => [
+ q(Reunion Creole French),
+ ],
+ q(5737) => [
+ q(Rudbari),
+ ],
+ q(5738) => [
+ q(Rerau),
+ ],
+ q(5739) => [
+ q(Rembong),
+ ],
+ q(5740) => [
+ q(Rejang Kayan),
+ ],
+ q(5741) => [
+ q(Kara (Tanzania)),
+ ],
+ q(5742) => [
+ q(Reli),
+ ],
+ q(5743) => [
+ q(Rejang),
+ ],
+ q(5744) => [
+ q(Rendille),
+ ],
+ q(5745) => [
+ q(Remo),
+ ],
+ q(5746) => [
+ q(Rengao),
+ ],
+ q(5747) => [
+ q(Rer Bare),
+ ],
+ q(5748) => [
+ q(Reshe),
+ ],
+ q(5749) => [
+ q(Retta),
+ ],
+ q(5750) => [
+ q(Reyesano),
+ ],
+ q(5751) => [
+ q(Roria),
+ ],
+ q(5752) => [
+ q(Romano-Greek),
+ ],
+ q(5753) => [
+ q(Rangkas),
+ ],
+ q(5754) => [
+ q(Romagnol),
+ ],
+ q(5755) => [
+ q(Resigaro),
+ ],
+ q(5756) => [
+ q(Southern Roglai),
+ ],
+ q(5757) => [
+ q(Ringgou),
+ ],
+ q(5758) => [
+ q(Rohingya),
+ ],
+ q(5759) => [
+ q(Yahang),
+ ],
+ q(5760) => [
+ q(Riang (India)),
+ ],
+ q(5761) => [
+ q(Rien),
+ ],
+ q(5762) => [
+ q(Tarifit),
+ ],
+ q(5763) => [
+ q(Riang (Myanmar)),
+ ],
+ q(5764) => [
+ q(Nyaturu),
+ ],
+ q(5765) => [
+ q(Nungu),
+ ],
+ q(5766) => [
+ q(Ribun),
+ ],
+ q(5767) => [
+ q(Ritarungo),
+ ],
+ q(5768) => [
+ q(Riung),
+ ],
+ q(5769) => [
+ q(Rajong),
+ ],
+ q(5770) => [
+ q(Raji),
+ ],
+ q(5771) => [
+ q(Rajbanshi),
+ ],
+ q(5772) => [
+ q(Kraol),
+ ],
+ q(5773) => [
+ q(Rikbaktsa),
+ ],
+ q(5774) => [
+ q(Rakahanga-Manihiki),
+ ],
+ q(5775) => [
+ q(Rakhine),
+ ],
+ q(5776) => [
+ q(Marka),
+ ],
+ q(5777) => [
+ q(Rangpuri),
+ q(Kamta),
+ ],
+ q(5778) => [
+ q(Rama),
+ ],
+ q(5779) => [
+ q(Rembarunga),
+ ],
+ q(5780) => [
+ q(Carpathian Romani),
+ ],
+ q(5781) => [
+ q(Traveller Danish),
+ ],
+ q(5782) => [
+ q(Angloromani),
+ ],
+ q(5783) => [
+ q(Kalo Finnish Romani),
+ ],
+ q(5784) => [
+ q(Traveller Norwegian),
+ ],
+ q(5785) => [
+ q(Murkim),
+ ],
+ q(5786) => [
+ q(Lomavren),
+ ],
+ q(5787) => [
+ q(Romkun),
+ ],
+ q(5788) => [
+ q(Baltic Romani),
+ ],
+ q(5789) => [
+ q(Roma),
+ ],
+ q(5790) => [
+ q(Balkan Romani),
+ ],
+ q(5791) => [
+ q(Sinte Romani),
+ ],
+ q(5792) => [
+ q(Rempi),
+ ],
+ q(5793) => [
+ q(Calo),
+ ],
+ q(5794) => [
+ q(Romanian Sign Language),
+ ],
+ q(5795) => [
+ q(Domari),
+ ],
+ q(5796) => [
+ q(Tavringer Romani),
+ ],
+ q(5797) => [
+ q(Romanova),
+ ],
+ q(5798) => [
+ q(Welsh Romani),
+ ],
+ q(5799) => [
+ q(Romam),
+ ],
+ q(5800) => [
+ q(Vlax Romani),
+ ],
+ q(5801) => [
+ q(Marma),
+ ],
+ q(5802) => [
+ q(Runa),
+ ],
+ q(5803) => [
+ q(Ruund),
+ ],
+ q(5804) => [
+ q(Ronga),
+ ],
+ q(5805) => [
+ q(Ranglong),
+ ],
+ q(5806) => [
+ q(Roon),
+ ],
+ q(5807) => [
+ q(Rongpo),
+ ],
+ q(5808) => [
+ q(Nari Nari),
+ ],
+ q(5809) => [
+ q(Rungwa),
+ ],
+ q(5810) => [
+ q(Tae'),
+ ],
+ q(5811) => [
+ q(Cacgia Roglai),
+ ],
+ q(5812) => [
+ q(Rogo),
+ ],
+ q(5813) => [
+ q(Ronji),
+ ],
+ q(5814) => [
+ q(Rombo),
+ ],
+ q(5815) => [
+ q(Northern Roglai),
+ ],
+ q(5816) => [
+ q(Romblomanon),
+ ],
+ q(5817) => [
+ q(Rotokas),
+ ],
+ q(5818) => [
+ q(Kriol),
+ ],
+ q(5819) => [
+ q(Rongga),
+ ],
+ q(5820) => [
+ q(Runga),
+ ],
+ q(5821) => [
+ q(Dela-Oenale),
+ ],
+ q(5822) => [
+ q(Repanbitip),
+ ],
+ q(5823) => [
+ q(Rapting),
+ ],
+ q(5824) => [
+ q(Ririo),
+ ],
+ q(5825) => [
+ q(Waima),
+ ],
+ q(5826) => [
+ q(Arritinngithigh),
+ ],
+ q(5827) => [
+ q(Romano-Serbian),
+ ],
+ q(5828) => [
+ q(Rennellese Sign Language),
+ ],
+ q(5829) => [
+ q(Russian Sign Language),
+ ],
+ q(5830) => [
+ q(Rungtu Chin),
+ ],
+ q(5831) => [
+ q(Ratahan),
+ ],
+ q(5832) => [
+ q(Rotuman),
+ ],
+ q(5833) => [
+ q(Rathawi),
+ ],
+ q(5834) => [
+ q(Gungu),
+ ],
+ q(5835) => [
+ q(Ruuli),
+ ],
+ q(5836) => [
+ q(Rusyn),
+ ],
+ q(5837) => [
+ q(Luguru),
+ ],
+ q(5838) => [
+ q(Roviana),
+ ],
+ q(5839) => [
+ q(Ruga),
+ ],
+ q(5840) => [
+ q(Rufiji),
+ ],
+ q(5841) => [
+ q(Che),
+ ],
+ q(5842) => [
+ q(Istro Romanian),
+ ],
+ q(5843) => [
+ q(Megleno Romanian),
+ ],
+ q(5844) => [
+ q(Rutul),
+ ],
+ q(5845) => [
+ q(Lanas Lobu),
+ ],
+ q(5846) => [
+ q(Mala (Nigeria)),
+ ],
+ q(5847) => [
+ q(Ruma),
+ ],
+ q(5848) => [
+ q(Rawo),
+ ],
+ q(5849) => [
+ q(Rwa),
+ ],
+ q(5850) => [
+ q(Amba (Uganda)),
+ ],
+ q(5851) => [
+ q(Rawa),
+ ],
+ q(5852) => [
+ q(Marwari (India)),
+ ],
+ q(5853) => [
+ q(Northern Amami-Oshima),
+ ],
+ q(5854) => [
+ q(Yaeyama),
+ ],
+ q(5855) => [
+ q(Central Okinawan),
+ ],
+ q(5856) => [
+ q(Saba),
+ ],
+ q(5857) => [
+ q(Buglere),
+ ],
+ q(5858) => [
+ q(Meskwaki),
+ ],
+ q(5859) => [
+ q(Sabane),
+ ],
+ q(5860) => [
+ q(Safaliba),
+ ],
+ q(5861) => [
+ q(Sahu),
+ ],
+ q(5862) => [
+ q(Sake),
+ ],
+ q(5863) => [
+ q(Sause),
+ ],
+ q(5864) => [
+ q(Sanapana),
+ ],
+ q(5865) => [
+ q(Samburu),
+ ],
+ q(5866) => [
+ q(Saraveca),
+ ],
+ q(5867) => [
+ q(Saleman),
+ ],
+ q(5868) => [
+ q(Saafi-Saafi),
+ ],
+ q(5869) => [
+ q(Sawi),
+ ],
+ q(5870) => [
+ q(Sa),
+ ],
+ q(5871) => [
+ q(Saya),
+ ],
+ q(5872) => [
+ q(Saurashtra),
+ ],
+ q(5873) => [
+ q(Ngambay),
+ ],
+ q(5874) => [
+ q(Simbo),
+ ],
+ q(5875) => [
+ q(Kele (Papua New Guinea)),
+ ],
+ q(5876) => [
+ q(Southern Samo),
+ ],
+ q(5877) => [
+ q(Saliba),
+ ],
+ q(5878) => [
+ q(Shabo),
+ ],
+ q(5879) => [
+ q(Seget),
+ ],
+ q(5880) => [
+ q(Sori-Harengan),
+ ],
+ q(5881) => [
+ q(Seti),
+ ],
+ q(5882) => [
+ q(Surbakhal),
+ ],
+ q(5883) => [
+ q(Safwa),
+ ],
+ q(5884) => [
+ q(Botolan Sambal),
+ ],
+ q(5885) => [
+ q(Sagala),
+ ],
+ q(5886) => [
+ q(Sindhi Bhil),
+ ],
+ q(5887) => [
+ q(Sabum),
+ ],
+ q(5888) => [
+ q(Sangu (Tanzania)),
+ ],
+ q(5889) => [
+ q(Sileibi),
+ ],
+ q(5890) => [
+ q(Sembakung Murut),
+ ],
+ q(5891) => [
+ q(Subiya),
+ ],
+ q(5892) => [
+ q(Kimki),
+ ],
+ q(5893) => [
+ q(Stod Bhoti),
+ ],
+ q(5894) => [
+ q(Sabine),
+ ],
+ q(5895) => [
+ q(Simba),
+ ],
+ q(5896) => [
+ q(Seberuang),
+ ],
+ q(5897) => [
+ q(Soli),
+ ],
+ q(5898) => [
+ q(Sara Kaba),
+ ],
+ q(5899) => [
+ q(Chut),
+ ],
+ q(5900) => [
+ q(Dongxiang),
+ ],
+ q(5901) => [
+ q(San Miguel Creole French),
+ ],
+ q(5902) => [
+ q(Sanggau),
+ ],
+ q(5903) => [
+ q(Sakachep),
+ ],
+ q(5904) => [
+ q(Sri Lankan Creole Malay),
+ ],
+ q(5905) => [
+ q(Sadri),
+ ],
+ q(5906) => [
+ q(Shina),
+ ],
+ q(5907) => [
+ q(Helambu Sherpa),
+ ],
+ q(5908) => [
+ q(Sa'och),
+ ],
+ q(5909) => [
+ q(North Slavey),
+ ],
+ q(5910) => [
+ q(Shumcho),
+ ],
+ q(5911) => [
+ q(Sheni),
+ ],
+ q(5912) => [
+ q(Sha),
+ ],
+ q(5913) => [
+ q(Sicel),
+ ],
+ q(5914) => [
+ q(Toraja-Sa'dan),
+ ],
+ q(5915) => [
+ q(Shabak),
+ ],
+ q(5916) => [
+ q(Sassarese Sardinian),
+ ],
+ q(5917) => [
+ q(Surubu),
+ ],
+ q(5918) => [
+ q(Sarli),
+ ],
+ q(5919) => [
+ q(Savi),
+ ],
+ q(5920) => [
+ q(Southern Kurdish),
+ ],
+ q(5921) => [
+ q(Suundi),
+ ],
+ q(5922) => [
+ q(Sos Kundi),
+ ],
+ q(5923) => [
+ q(Saudi Arabian Sign Language),
+ ],
+ q(5924) => [
+ q(Semandang),
+ ],
+ q(5925) => [
+ q(Gallurese Sardinian),
+ ],
+ q(5926) => [
+ q(Bukar-Sadung Bidayuh),
+ ],
+ q(5927) => [
+ q(Sherdukpen),
+ ],
+ q(5928) => [
+ q(Oraon Sadri),
+ ],
+ q(5929) => [
+ q(Sened),
+ ],
+ q(5930) => [
+ q(Shuadit),
+ ],
+ q(5931) => [
+ q(Sarudu),
+ ],
+ q(5932) => [
+ q(Sibu Melanau),
+ ],
+ q(5933) => [
+ q(Sallands),
+ ],
+ q(5934) => [
+ q(Semai),
+ ],
+ q(5935) => [
+ q(Shempire Senoufo),
+ ],
+ q(5936) => [
+ q(Sechelt),
+ ],
+ q(5937) => [
+ q(Sedang),
+ ],
+ q(5938) => [
+ q(Seneca),
+ ],
+ q(5939) => [
+ q(Cebaara Senoufo),
+ ],
+ q(5940) => [
+ q(Segeju),
+ ],
+ q(5941) => [
+ q(Sena),
+ ],
+ q(5942) => [
+ q(Seri),
+ ],
+ q(5943) => [
+ q(Sene),
+ ],
+ q(5944) => [
+ q(Sekani),
+ ],
+ q(5945) => [
+ q(Nanerige Senoufo),
+ ],
+ q(5946) => [
+ q(Suarmin),
+ ],
+ q(5947) => [
+ q(Sicite Senoufo),
+ ],
+ q(5948) => [
+ q(Senara Senoufo),
+ ],
+ q(5949) => [
+ q(Serrano),
+ ],
+ q(5950) => [
+ q(Koyraboro Senni Songhai),
+ ],
+ q(5951) => [
+ q(Sentani),
+ ],
+ q(5952) => [
+ q(Serui-Laut),
+ ],
+ q(5953) => [
+ q(Nyarafolo Senoufo),
+ ],
+ q(5954) => [
+ q(Sewa Bay),
+ ],
+ q(5955) => [
+ q(Secoya),
+ ],
+ q(5956) => [
+ q(Senthang Chin),
+ ],
+ q(5957) => [
+ q(Langue des signes de Belgique Francophone),
+ q(French Belgian Sign Language),
+ ],
+ q(5958) => [
+ q(Eastern Subanen),
+ ],
+ q(5959) => [
+ q(Small Flowery Miao),
+ ],
+ q(5960) => [
+ q(South African Sign Language),
+ ],
+ q(5961) => [
+ q(Sehwi),
+ ],
+ q(5962) => [
+ q(Mag-antsi Ayta),
+ ],
+ q(5963) => [
+ q(Kipsigis),
+ ],
+ q(5964) => [
+ q(Surigaonon),
+ ],
+ q(5965) => [
+ q(Segai),
+ ],
+ q(5966) => [
+ q(Swiss-German Sign Language),
+ ],
+ q(5967) => [
+ q(Shughni),
+ ],
+ q(5968) => [
+ q(Suga),
+ ],
+ q(5969) => [
+ q(Surgujia),
+ ],
+ q(5970) => [
+ q(Sangkong),
+ ],
+ q(5971) => [
+ q(Singa),
+ ],
+ q(5972) => [
+ q(Songa),
+ ],
+ q(5973) => [
+ q(Singpho),
+ ],
+ q(5974) => [
+ q(Sangisari),
+ ],
+ q(5975) => [
+ q(Samogitian),
+ ],
+ q(5976) => [
+ q(Brokpake),
+ ],
+ q(5977) => [
+ q(Salas),
+ ],
+ q(5978) => [
+ q(Sebat Bet Gurage),
+ ],
+ q(5979) => [
+ q(Sierra Leone Sign Language),
+ ],
+ q(5980) => [
+ q(Sanglechi),
+ ],
+ q(5981) => [
+ q(Sursurunga),
+ ],
+ q(5982) => [
+ q(Shall-Zwall),
+ ],
+ q(5983) => [
+ q(Ninam),
+ ],
+ q(5984) => [
+ q(Sonde),
+ ],
+ q(5985) => [
+ q(Kundal Shahi),
+ ],
+ q(5986) => [
+ q(Sheko),
+ ],
+ q(5987) => [
+ q(Shua),
+ ],
+ q(5988) => [
+ q(Shoshoni),
+ ],
+ q(5989) => [
+ q(Tachelhit),
+ ],
+ q(5990) => [
+ q(Shatt),
+ ],
+ q(5991) => [
+ q(Shilluk),
+ ],
+ q(5992) => [
+ q(Shendu),
+ ],
+ q(5993) => [
+ q(Shahrudi),
+ ],
+ q(5994) => [
+ q(Shanga),
+ ],
+ q(5995) => [
+ q(Shipibo-Conibo),
+ ],
+ q(5996) => [
+ q(Sala),
+ ],
+ q(5997) => [
+ q(Shi),
+ ],
+ q(5998) => [
+ q(Shuswap),
+ ],
+ q(5999) => [
+ q(Shasta),
+ ],
+ q(6000) => [
+ q(Chadian Arabic),
+ ],
+ q(6001) => [
+ q(Shehri),
+ ],
+ q(6002) => [
+ q(Shwai),
+ ],
+ q(6003) => [
+ q(She),
+ ],
+ q(6004) => [
+ q(Tachawit),
+ ],
+ q(6005) => [
+ q(Syenara Senoufo),
+ ],
+ q(6006) => [
+ q(Akkala Sami),
+ ],
+ q(6007) => [
+ q(Sebop),
+ ],
+ q(6008) => [
+ q(Simaa),
+ ],
+ q(6009) => [
+ q(Siamou),
+ ],
+ q(6010) => [
+ q(Paasaal),
+ ],
+ q(6011) => [
+ q(Zire),
+ ],
+ q(6012) => [
+ q(Shom Peng),
+ ],
+ q(6013) => [
+ q(Numbami),
+ ],
+ q(6014) => [
+ q(Sikiana),
+ ],
+ q(6015) => [
+ q(Tumulung Sisaala),
+ ],
+ q(6016) => [
+ q(Mende (Papua New Guinea)),
+ ],
+ q(6017) => [
+ q(Sikkimese),
+ ],
+ q(6018) => [
+ q(Sonia),
+ ],
+ q(6019) => [
+ q(Siri),
+ ],
+ q(6020) => [
+ q(Siuslaw),
+ ],
+ q(6021) => [
+ q(Sinagen),
+ ],
+ q(6022) => [
+ q(Sumariup),
+ ],
+ q(6023) => [
+ q(Siwai),
+ ],
+ q(6024) => [
+ q(Sumau),
+ ],
+ q(6025) => [
+ q(Sivandi),
+ ],
+ q(6026) => [
+ q(Siwi),
+ ],
+ q(6027) => [
+ q(Epena),
+ ],
+ q(6028) => [
+ q(Sajau Basap),
+ ],
+ q(6029) => [
+ q(Kildin Sami),
+ ],
+ q(6030) => [
+ q(Pite Sami),
+ ],
+ q(6031) => [
+ q(Assangori),
+ ],
+ q(6032) => [
+ q(Kemi Sami),
+ ],
+ q(6033) => [
+ q(Sajalong),
+ q(Miji),
+ ],
+ q(6034) => [
+ q(Mapun),
+ ],
+ q(6035) => [
+ q(Sindarin),
+ ],
+ q(6036) => [
+ q(Xibe),
+ ],
+ q(6037) => [
+ q(Surjapuri),
+ ],
+ q(6038) => [
+ q(Siar-Lak),
+ ],
+ q(6039) => [
+ q(Senhaja De Srair),
+ ],
+ q(6040) => [
+ q(Ter Sami),
+ ],
+ q(6041) => [
+ q(Ume Sami),
+ ],
+ q(6042) => [
+ q(Shawnee),
+ ],
+ q(6043) => [
+ q(Skagit),
+ ],
+ q(6044) => [
+ q(Saek),
+ ],
+ q(6045) => [
+ q(Ma Manda),
+ ],
+ q(6046) => [
+ q(Southern Sierra Miwok),
+ ],
+ q(6047) => [
+ q(Seke (Vanuatu)),
+ ],
+ q(6048) => [
+ q(Sakirabia),
+ ],
+ q(6049) => [
+ q(Sakalava Malagasy),
+ ],
+ q(6050) => [
+ q(Sikule),
+ ],
+ q(6051) => [
+ q(Sika),
+ ],
+ q(6052) => [
+ q(Seke (Nepal)),
+ ],
+ q(6053) => [
+ q(Sok),
+ ],
+ q(6054) => [
+ q(Kutong),
+ ],
+ q(6055) => [
+ q(Kolibugan Subanon),
+ ],
+ q(6056) => [
+ q(Seko Tengah),
+ ],
+ q(6057) => [
+ q(Sekapan),
+ ],
+ q(6058) => [
+ q(Sininkere),
+ ],
+ q(6059) => [
+ q(Seraiki),
+ ],
+ q(6060) => [
+ q(Maia),
+ ],
+ q(6061) => [
+ q(Sakata),
+ ],
+ q(6062) => [
+ q(Sakao),
+ ],
+ q(6063) => [
+ q(Skou),
+ ],
+ q(6064) => [
+ q(Skepi Creole Dutch),
+ ],
+ q(6065) => [
+ q(Seko Padang),
+ ],
+ q(6066) => [
+ q(Sikaiana),
+ ],
+ q(6067) => [
+ q(Sekar),
+ ],
+ q(6068) => [
+ q(Sissala),
+ ],
+ q(6069) => [
+ q(Sholaga),
+ ],
+ q(6070) => [
+ q(Swiss-Italian Sign Language),
+ ],
+ q(6071) => [
+ q(Selungai Murut),
+ ],
+ q(6072) => [
+ q(Southern Puget Sound Salish),
+ ],
+ q(6073) => [
+ q(Lower Silesian),
+ ],
+ q(6074) => [
+ q(Saluma),
+ ],
+ q(6075) => [
+ q(Salt-Yui),
+ ],
+ q(6076) => [
+ q(Pangutaran Sama),
+ ],
+ q(6077) => [
+ q(Salinan),
+ ],
+ q(6078) => [
+ q(Lamaholot),
+ ],
+ q(6079) => [
+ q(Salchuq),
+ ],
+ q(6080) => [
+ q(Salar),
+ ],
+ q(6081) => [
+ q(Singapore Sign Language),
+ ],
+ q(6082) => [
+ q(Sila),
+ ],
+ q(6083) => [
+ q(Selaru),
+ ],
+ q(6084) => [
+ q(Sialum),
+ ],
+ q(6085) => [
+ q(Salampasu),
+ ],
+ q(6086) => [
+ q(Selayar),
+ ],
+ q(6087) => [
+ q(Ma'ya),
+ ],
+ q(6088) => [
+ q(Simbari),
+ ],
+ q(6089) => [
+ q(Som),
+ ],
+ q(6090) => [
+ q(Sama),
+ ],
+ q(6091) => [
+ q(Auwe),
+ ],
+ q(6092) => [
+ q(Simbali),
+ ],
+ q(6093) => [
+ q(Samei),
+ ],
+ q(6094) => [
+ q(Bolinao),
+ ],
+ q(6095) => [
+ q(Central Sama),
+ ],
+ q(6096) => [
+ q(Musasa),
+ ],
+ q(6097) => [
+ q(Samaritan),
+ ],
+ q(6098) => [
+ q(Samo),
+ ],
+ q(6099) => [
+ q(Simeulue),
+ ],
+ q(6100) => [
+ q(Simte),
+ ],
+ q(6101) => [
+ q(Somray),
+ ],
+ q(6102) => [
+ q(Samvedi),
+ ],
+ q(6103) => [
+ q(Sumbawa),
+ ],
+ q(6104) => [
+ q(Samba),
+ ],
+ q(6105) => [
+ q(Semnani),
+ ],
+ q(6106) => [
+ q(Simeku),
+ ],
+ q(6107) => [
+ q(Sebuyau),
+ ],
+ q(6108) => [
+ q(Sinaugoro),
+ ],
+ q(6109) => [
+ q(Bau Bidayuh),
+ ],
+ q(6110) => [
+ q(Noon),
+ ],
+ q(6111) => [
+ q(Sanga (Democratic Republic of Congo)),
+ ],
+ q(6112) => [
+ q(Shinabo),
+ ],
+ q(6113) => [
+ q(Sensi),
+ ],
+ q(6114) => [
+ q(Riverain Sango),
+ ],
+ q(6115) => [
+ q(Sangil),
+ ],
+ q(6116) => [
+ q(Southern Ma'di),
+ ],
+ q(6117) => [
+ q(Siona),
+ ],
+ q(6118) => [
+ q(Snohomish),
+ ],
+ q(6119) => [
+ q(Siane),
+ ],
+ q(6120) => [
+ q(Sangu (Gabon)),
+ ],
+ q(6121) => [
+ q(Sihan),
+ ],
+ q(6122) => [
+ q(South West Bay),
+ q(Nahavaq),
+ ],
+ q(6123) => [
+ q(Senggi),
+ q(Viid),
+ ],
+ q(6124) => [
+ q(Sa'ban),
+ ],
+ q(6125) => [
+ q(Selee),
+ ],
+ q(6126) => [
+ q(Sam),
+ ],
+ q(6127) => [
+ q(Saniyo-Hiyewe),
+ ],
+ q(6128) => [
+ q(Sinsauru),
+ ],
+ q(6129) => [
+ q(Thai Song),
+ ],
+ q(6130) => [
+ q(Sobei),
+ ],
+ q(6131) => [
+ q(So (Democratic Republic of Congo)),
+ ],
+ q(6132) => [
+ q(Songoora),
+ ],
+ q(6133) => [
+ q(Songomeno),
+ ],
+ q(6134) => [
+ q(Aka),
+ ],
+ q(6135) => [
+ q(Sonha),
+ ],
+ q(6136) => [
+ q(Soi),
+ ],
+ q(6137) => [
+ q(Sokoro),
+ ],
+ q(6138) => [
+ q(Solos),
+ ],
+ q(6139) => [
+ q(Songo),
+ ],
+ q(6140) => [
+ q(Songe),
+ ],
+ q(6141) => [
+ q(Kanasi),
+ ],
+ q(6142) => [
+ q(Somrai),
+ ],
+ q(6143) => [
+ q(Seeku),
+ ],
+ q(6144) => [
+ q(Southern Thai),
+ ],
+ q(6145) => [
+ q(Sonsorol),
+ ],
+ q(6146) => [
+ q(Sowanda),
+ ],
+ q(6147) => [
+ q(Swo),
+ ],
+ q(6148) => [
+ q(Miyobe),
+ ],
+ q(6149) => [
+ q(Temi),
+ ],
+ q(6150) => [
+ q(Sepa (Indonesia)),
+ ],
+ q(6151) => [
+ q(Sape),
+ ],
+ q(6152) => [
+ q(Saep),
+ ],
+ q(6153) => [
+ q(Sepa (Papua New Guinea)),
+ ],
+ q(6154) => [
+ q(Sian),
+ ],
+ q(6155) => [
+ q(Saponi),
+ ],
+ q(6156) => [
+ q(Sengo),
+ ],
+ q(6157) => [
+ q(Selepet),
+ ],
+ q(6158) => [
+ q(Akukem),
+ ],
+ q(6159) => [
+ q(Spokane),
+ ],
+ q(6160) => [
+ q(Supyire Senoufo),
+ ],
+ q(6161) => [
+ q(Loreto-Ucayali Spanish),
+ ],
+ q(6162) => [
+ q(Saparua),
+ ],
+ q(6163) => [
+ q(Saposa),
+ ],
+ q(6164) => [
+ q(Spiti Bhoti),
+ ],
+ q(6165) => [
+ q(Sapuan),
+ ],
+ q(6166) => [
+ q(Sambalpuri),
+ q(Kosli),
+ ],
+ q(6167) => [
+ q(South Picene),
+ ],
+ q(6168) => [
+ q(Sabaot),
+ ],
+ q(6169) => [
+ q(Shama-Sambuga),
+ ],
+ q(6170) => [
+ q(Shau),
+ ],
+ q(6171) => [
+ q(Albanian Sign Language),
+ ],
+ q(6172) => [
+ q(Suma),
+ ],
+ q(6173) => [
+ q(Susquehannock),
+ ],
+ q(6174) => [
+ q(Sorkhei),
+ ],
+ q(6175) => [
+ q(Sou),
+ ],
+ q(6176) => [
+ q(Siculo Arabic),
+ ],
+ q(6177) => [
+ q(Sri Lankan Sign Language),
+ ],
+ q(6178) => [
+ q(Soqotri),
+ ],
+ q(6179) => [
+ q(Squamish),
+ ],
+ q(6180) => [
+ q(Saruga),
+ ],
+ q(6181) => [
+ q(Sora),
+ ],
+ q(6182) => [
+ q(Logudorese Sardinian),
+ ],
+ q(6183) => [
+ q(Sara),
+ ],
+ q(6184) => [
+ q(Nafi),
+ ],
+ q(6185) => [
+ q(Sulod),
+ ],
+ q(6186) => [
+ q(Sarikoli),
+ ],
+ q(6187) => [
+ q(Siriano),
+ ],
+ q(6188) => [
+ q(Serudung Murut),
+ ],
+ q(6189) => [
+ q(Isirawa),
+ ],
+ q(6190) => [
+ q(Saramaccan),
+ ],
+ q(6191) => [
+ q(Campidanese Sardinian),
+ ],
+ q(6192) => [
+ q(Siriono),
+ ],
+ q(6193) => [
+ q(Sarsi),
+ ],
+ q(6194) => [
+ q(Sauri),
+ ],
+ q(6195) => [
+ q(Surui),
+ ],
+ q(6196) => [
+ q(Southern Sorsoganon),
+ ],
+ q(6197) => [
+ q(Serua),
+ ],
+ q(6198) => [
+ q(Sirmauri),
+ ],
+ q(6199) => [
+ q(Sera),
+ ],
+ q(6200) => [
+ q(Shahmirzadi),
+ ],
+ q(6201) => [
+ q(Southern Sama),
+ ],
+ q(6202) => [
+ q(Suba-Simbiti),
+ ],
+ q(6203) => [
+ q(Siroi),
+ ],
+ q(6204) => [
+ q(Balangingi),
+ q(Bangingih Sama),
+ ],
+ q(6205) => [
+ q(Thao),
+ ],
+ q(6206) => [
+ q(Seimat),
+ ],
+ q(6207) => [
+ q(Shihhi Arabic),
+ ],
+ q(6208) => [
+ q(Sansi),
+ ],
+ q(6209) => [
+ q(Sausi),
+ ],
+ q(6210) => [
+ q(Sunam),
+ ],
+ q(6211) => [
+ q(Western Sisaala),
+ ],
+ q(6212) => [
+ q(Semnam),
+ ],
+ q(6213) => [
+ q(Waata),
+ ],
+ q(6214) => [
+ q(Sissano),
+ ],
+ q(6215) => [
+ q(Spanish Sign Language),
+ ],
+ q(6216) => [
+ q(So'a),
+ ],
+ q(6217) => [
+ q(Swiss-French Sign Language),
+ ],
+ q(6218) => [
+ q(So),
+ ],
+ q(6219) => [
+ q(Sinasina),
+ ],
+ q(6220) => [
+ q(Susuami),
+ ],
+ q(6221) => [
+ q(Shark Bay),
+ ],
+ q(6222) => [
+ q(Samberigi),
+ ],
+ q(6223) => [
+ q(Saho),
+ ],
+ q(6224) => [
+ q(Sengseng),
+ ],
+ q(6225) => [
+ q(Settla),
+ ],
+ q(6226) => [
+ q(Northern Subanen),
+ ],
+ q(6227) => [
+ q(Sentinel),
+ ],
+ q(6228) => [
+ q(Liana-Seti),
+ ],
+ q(6229) => [
+ q(Seta),
+ ],
+ q(6230) => [
+ q(Trieng),
+ ],
+ q(6231) => [
+ q(Shelta),
+ ],
+ q(6232) => [
+ q(Bulo Stieng),
+ ],
+ q(6233) => [
+ q(Matya Samo),
+ ],
+ q(6234) => [
+ q(Arammba),
+ ],
+ q(6235) => [
+ q(Stellingwerfs),
+ ],
+ q(6236) => [
+ q(Setaman),
+ ],
+ q(6237) => [
+ q(Owa),
+ ],
+ q(6238) => [
+ q(Stoney),
+ ],
+ q(6239) => [
+ q(Southeastern Tepehuan),
+ ],
+ q(6240) => [
+ q(Saterfriesisch),
+ ],
+ q(6241) => [
+ q(Straits Salish),
+ ],
+ q(6242) => [
+ q(Shumashti),
+ ],
+ q(6243) => [
+ q(Budeh Stieng),
+ ],
+ q(6244) => [
+ q(Samtao),
+ ],
+ q(6245) => [
+ q(Silt'e),
+ ],
+ q(6246) => [
+ q(Satawalese),
+ ],
+ q(6247) => [
+ q(Sulka),
+ ],
+ q(6248) => [
+ q(Suku),
+ ],
+ q(6249) => [
+ q(Western Subanon),
+ ],
+ q(6250) => [
+ q(Suena),
+ ],
+ q(6251) => [
+ q(Suganga),
+ ],
+ q(6252) => [
+ q(Suki),
+ ],
+ q(6253) => [
+ q(Shubi),
+ ],
+ q(6254) => [
+ q(Suri),
+ ],
+ q(6255) => [
+ q(Mwaghavul),
+ ],
+ q(6256) => [
+ q(Subtiaba),
+ ],
+ q(6257) => [
+ q(Puroik),
+ ],
+ q(6258) => [
+ q(Sumbwa),
+ ],
+ q(6259) => [
+ q(Suya),
+ ],
+ q(6260) => [
+ q(Sunwar),
+ ],
+ q(6261) => [
+ q(Svan),
+ ],
+ q(6262) => [
+ q(Ulau-Suain),
+ ],
+ q(6263) => [
+ q(Vincentian Creole English),
+ ],
+ q(6264) => [
+ q(Serili),
+ ],
+ q(6265) => [
+ q(Slovakian Sign Language),
+ ],
+ q(6266) => [
+ q(Savara),
+ ],
+ q(6267) => [
+ q(Savosavo),
+ ],
+ q(6268) => [
+ q(Skalvian),
+ ],
+ q(6269) => [
+ q(Maore Comorian),
+ ],
+ q(6270) => [
+ q(Congo Swahili),
+ ],
+ q(6271) => [
+ q(Sere),
+ ],
+ q(6272) => [
+ q(Swabian),
+ ],
+ q(6273) => [
+ q(Swahili (individual language)),
+ q(Kiswahili),
+ ],
+ q(6274) => [
+ q(Sui),
+ ],
+ q(6275) => [
+ q(Sira),
+ ],
+ q(6276) => [
+ q(Malawi Sena),
+ ],
+ q(6277) => [
+ q(Swedish Sign Language),
+ ],
+ q(6278) => [
+ q(Samosa),
+ ],
+ q(6279) => [
+ q(Sawknah),
+ ],
+ q(6280) => [
+ q(Shanenawa),
+ ],
+ q(6281) => [
+ q(Suau),
+ ],
+ q(6282) => [
+ q(Sharwa),
+ ],
+ q(6283) => [
+ q(Saweru),
+ ],
+ q(6284) => [
+ q(Seluwasan),
+ ],
+ q(6285) => [
+ q(Sawila),
+ ],
+ q(6286) => [
+ q(Suwawa),
+ ],
+ q(6287) => [
+ q(Shekhawati),
+ ],
+ q(6288) => [
+ q(Sowa),
+ ],
+ q(6289) => [
+ q(Suruaha),
+ ],
+ q(6290) => [
+ q(Sarua),
+ ],
+ q(6291) => [
+ q(Suba),
+ ],
+ q(6292) => [
+ q(Sicanian),
+ ],
+ q(6293) => [
+ q(Sighu),
+ ],
+ q(6294) => [
+ q(Shixing),
+ ],
+ q(6295) => [
+ q(Southern Kalapuya),
+ ],
+ q(6296) => [
+ q(Selian),
+ ],
+ q(6297) => [
+ q(Samre),
+ ],
+ q(6298) => [
+ q(Sangir),
+ ],
+ q(6299) => [
+ q(Sorothaptic),
+ ],
+ q(6300) => [
+ q(Saaroa),
+ ],
+ q(6301) => [
+ q(Sasaru),
+ ],
+ q(6302) => [
+ q(Upper Saxon),
+ ],
+ q(6303) => [
+ q(Saxwe Gbe),
+ ],
+ q(6304) => [
+ q(Siang),
+ ],
+ q(6305) => [
+ q(Central Subanen),
+ ],
+ q(6306) => [
+ q(Seki),
+ ],
+ q(6307) => [
+ q(Sukur),
+ ],
+ q(6308) => [
+ q(Sylheti),
+ ],
+ q(6309) => [
+ q(Maya Samo),
+ ],
+ q(6310) => [
+ q(Senaya),
+ ],
+ q(6311) => [
+ q(Suoy),
+ ],
+ q(6312) => [
+ q(Sinyar),
+ ],
+ q(6313) => [
+ q(Kagate),
+ ],
+ q(6314) => [
+ q(Al-Sayyid Bedouin Sign Language),
+ ],
+ q(6315) => [
+ q(Semelai),
+ ],
+ q(6316) => [
+ q(Ngalum),
+ ],
+ q(6317) => [
+ q(Semaq Beri),
+ ],
+ q(6318) => [
+ q(Seru),
+ ],
+ q(6319) => [
+ q(Seze),
+ ],
+ q(6320) => [
+ q(Sengele),
+ ],
+ q(6321) => [
+ q(Silesian),
+ ],
+ q(6322) => [
+ q(Sula),
+ ],
+ q(6323) => [
+ q(Suabo),
+ ],
+ q(6324) => [
+ q(Isu (Fako Division)),
+ ],
+ q(6325) => [
+ q(Sawai),
+ ],
+ q(6326) => [
+ q(Lower Tanana),
+ ],
+ q(6327) => [
+ q(Tabassaran),
+ ],
+ q(6328) => [
+ q(Lowland Tarahumara),
+ ],
+ q(6329) => [
+ q(Tause),
+ ],
+ q(6330) => [
+ q(Tariana),
+ ],
+ q(6331) => [
+ q(Tapirape),
+ ],
+ q(6332) => [
+ q(Tagoi),
+ ],
+ q(6333) => [
+ q(Eastern Tamang),
+ ],
+ q(6334) => [
+ q(Tala),
+ ],
+ q(6335) => [
+ q(Tal),
+ ],
+ q(6336) => [
+ q(Tangale),
+ ],
+ q(6337) => [
+ q(Yami),
+ ],
+ q(6338) => [
+ q(Taabwa),
+ ],
+ q(6339) => [
+ q(Tamasheq),
+ ],
+ q(6340) => [
+ q(Central Tarahumara),
+ ],
+ q(6341) => [
+ q(Tay Boi),
+ ],
+ q(6342) => [
+ q(Upper Tanana),
+ ],
+ q(6343) => [
+ q(Tatuyo),
+ ],
+ q(6344) => [
+ q(Tai),
+ ],
+ q(6345) => [
+ q(Tamki),
+ ],
+ q(6346) => [
+ q(Atayal),
+ ],
+ q(6347) => [
+ q(Tocho),
+ ],
+ q(6348) => [
+ q(Aikana),
+ ],
+ q(6349) => [
+ q(Tapeba),
+ ],
+ q(6350) => [
+ q(Takia),
+ ],
+ q(6351) => [
+ q(Kaki Ae),
+ ],
+ q(6352) => [
+ q(Tanimbili),
+ ],
+ q(6353) => [
+ q(Mandara),
+ ],
+ q(6354) => [
+ q(North Tairora),
+ ],
+ q(6355) => [
+ q(Thurawal),
+ ],
+ q(6356) => [
+ q(Gaam),
+ ],
+ q(6357) => [
+ q(Tiang),
+ ],
+ q(6358) => [
+ q(Calamian Tagbanwa),
+ ],
+ q(6359) => [
+ q(Tboli),
+ ],
+ q(6360) => [
+ q(Tagbu),
+ ],
+ q(6361) => [
+ q(Barro Negro Tunebo),
+ ],
+ q(6362) => [
+ q(Tawala),
+ ],
+ q(6363) => [
+ q(Taworta),
+ q(Diebroud),
+ ],
+ q(6364) => [
+ q(Tumtum),
+ ],
+ q(6365) => [
+ q(Tanguat),
+ ],
+ q(6366) => [
+ q(Tembo (Kitembo)),
+ ],
+ q(6367) => [
+ q(Tubar),
+ ],
+ q(6368) => [
+ q(Tobo),
+ ],
+ q(6369) => [
+ q(Tagbanwa),
+ ],
+ q(6370) => [
+ q(Kapin),
+ ],
+ q(6371) => [
+ q(Tabaru),
+ ],
+ q(6372) => [
+ q(Ditammari),
+ ],
+ q(6373) => [
+ q(Ticuna),
+ ],
+ q(6374) => [
+ q(Tanacross),
+ ],
+ q(6375) => [
+ q(Datooga),
+ ],
+ q(6376) => [
+ q(Tafi),
+ ],
+ q(6377) => [
+ q(Southern Tutchone),
+ ],
+ q(6378) => [
+ q(Malinaltepec Me'phaa),
+ q(Malinaltepec Tlapanec),
+ ],
+ q(6379) => [
+ q(Tamagario),
+ ],
+ q(6380) => [
+ q(Turks And Caicos Creole English),
+ ],
+ q(6381) => [
+ q(Wara),
+ ],
+ q(6382) => [
+ q(Tchitchege),
+ ],
+ q(6383) => [
+ q(Taman (Myanmar)),
+ ],
+ q(6384) => [
+ q(Tanahmerah),
+ ],
+ q(6385) => [
+ q(Tichurong),
+ ],
+ q(6386) => [
+ q(Taungyo),
+ ],
+ q(6387) => [
+ q(Tawr Chin),
+ ],
+ q(6388) => [
+ q(Kaiy),
+ ],
+ q(6389) => [
+ q(Torres Strait Creole),
+ ],
+ q(6390) => [
+ q(T'en),
+ ],
+ q(6391) => [
+ q(Southeastern Tarahumara),
+ ],
+ q(6392) => [
+ q(Tecpatlan Totonac),
+ ],
+ q(6393) => [
+ q(Toda),
+ ],
+ q(6394) => [
+ q(Tulu),
+ ],
+ q(6395) => [
+ q(Thado Chin),
+ ],
+ q(6396) => [
+ q(Tagdal),
+ ],
+ q(6397) => [
+ q(Panchpargania),
+ ],
+ q(6398) => [
+ q(Embera-Tado),
+ ],
+ q(6399) => [
+ q(Tai Nua),
+ ],
+ q(6400) => [
+ q(Tiranige Diga Dogon),
+ ],
+ q(6401) => [
+ q(Talieng),
+ ],
+ q(6402) => [
+ q(Western Tamang),
+ ],
+ q(6403) => [
+ q(Thulung),
+ ],
+ q(6404) => [
+ q(Tomadino),
+ ],
+ q(6405) => [
+ q(Tajio),
+ ],
+ q(6406) => [
+ q(Tambas),
+ ],
+ q(6407) => [
+ q(Sur),
+ ],
+ q(6408) => [
+ q(Tondano),
+ ],
+ q(6409) => [
+ q(Teme),
+ ],
+ q(6410) => [
+ q(Tita),
+ ],
+ q(6411) => [
+ q(Todrah),
+ ],
+ q(6412) => [
+ q(Doutai),
+ ],
+ q(6413) => [
+ q(Tetun Dili),
+ ],
+ q(6414) => [
+ q(Tempasuk Dusun),
+ ],
+ q(6415) => [
+ q(Toro),
+ ],
+ q(6416) => [
+ q(Tandroy-Mahafaly Malagasy),
+ ],
+ q(6417) => [
+ q(Tadyawan),
+ ],
+ q(6418) => [
+ q(Temiar),
+ ],
+ q(6419) => [
+ q(Tetete),
+ ],
+ q(6420) => [
+ q(Terik),
+ ],
+ q(6421) => [
+ q(Tepo Krumen),
+ ],
+ q(6422) => [
+ q(Huehuetla Tepehua),
+ ],
+ q(6423) => [
+ q(Teressa),
+ ],
+ q(6424) => [
+ q(Teke-Tege),
+ ],
+ q(6425) => [
+ q(Tehuelche),
+ ],
+ q(6426) => [
+ q(Torricelli),
+ ],
+ q(6427) => [
+ q(Ibali Teke),
+ ],
+ q(6428) => [
+ q(Tama (Colombia)),
+ ],
+ q(6429) => [
+ q(Teso),
+ ],
+ q(6430) => [
+ q(Tepecano),
+ ],
+ q(6431) => [
+ q(Temein),
+ ],
+ q(6432) => [
+ q(Tengger),
+ ],
+ q(6433) => [
+ q(Soo),
+ ],
+ q(6434) => [
+ q(Teor),
+ ],
+ q(6435) => [
+ q(Tewa (USA)),
+ ],
+ q(6436) => [
+ q(Tennet),
+ ],
+ q(6437) => [
+ q(Tulishi),
+ ],
+ q(6438) => [
+ q(Tofin Gbe),
+ ],
+ q(6439) => [
+ q(Tanaina),
+ ],
+ q(6440) => [
+ q(Tefaro),
+ ],
+ q(6441) => [
+ q(Teribe),
+ ],
+ q(6442) => [
+ q(Ternate),
+ ],
+ q(6443) => [
+ q(Sagalla),
+ ],
+ q(6444) => [
+ q(Tobilung),
+ ],
+ q(6445) => [
+ q(Tigak),
+ ],
+ q(6446) => [
+ q(Ciwogai),
+ ],
+ q(6447) => [
+ q(Eastern Gorkha Tamang),
+ ],
+ q(6448) => [
+ q(Chalikha),
+ ],
+ q(6449) => [
+ q(Tangga),
+ ],
+ q(6450) => [
+ q(Tobagonian Creole English),
+ ],
+ q(6451) => [
+ q(Lawunuia),
+ ],
+ q(6452) => [
+ q(Tagin),
+ ],
+ q(6453) => [
+ q(Tandaganon),
+ ],
+ q(6454) => [
+ q(Sudest),
+ ],
+ q(6455) => [
+ q(Tangoa),
+ ],
+ q(6456) => [
+ q(Tring),
+ ],
+ q(6457) => [
+ q(Tareng),
+ ],
+ q(6458) => [
+ q(Nume),
+ ],
+ q(6459) => [
+ q(Central Tagbanwa),
+ ],
+ q(6460) => [
+ q(Tanggu),
+ ],
+ q(6461) => [
+ q(Tingui-Boto),
+ ],
+ q(6462) => [
+ q(Tagwana Senoufo),
+ ],
+ q(6463) => [
+ q(Tagish),
+ ],
+ q(6464) => [
+ q(Togoyo),
+ ],
+ q(6465) => [
+ q(Tagalaka),
+ ],
+ q(6466) => [
+ q(Tai Hang Tong),
+ ],
+ q(6467) => [
+ q(Thayore),
+ ],
+ q(6468) => [
+ q(Chitwania Tharu),
+ ],
+ q(6469) => [
+ q(Thangmi),
+ ],
+ q(6470) => [
+ q(Northern Tarahumara),
+ ],
+ q(6471) => [
+ q(Tai Long),
+ ],
+ q(6472) => [
+ q(Tharaka),
+ q(Kitharaka),
+ ],
+ q(6473) => [
+ q(Dangaura Tharu),
+ ],
+ q(6474) => [
+ q(Aheu),
+ ],
+ q(6475) => [
+ q(Thachanadan),
+ ],
+ q(6476) => [
+ q(Thompson),
+ ],
+ q(6477) => [
+ q(Kochila Tharu),
+ ],
+ q(6478) => [
+ q(Rana Tharu),
+ ],
+ q(6479) => [
+ q(Thakali),
+ ],
+ q(6480) => [
+ q(Tahltan),
+ ],
+ q(6481) => [
+ q(Thuri),
+ ],
+ q(6482) => [
+ q(Tahaggart Tamahaq),
+ ],
+ q(6483) => [
+ q(Thudam),
+ ],
+ q(6484) => [
+ q(The),
+ ],
+ q(6485) => [
+ q(Tha),
+ ],
+ q(6486) => [
+ q(Tayart Tamajeq),
+ ],
+ q(6487) => [
+ q(Tidikelt Tamazight),
+ ],
+ q(6488) => [
+ q(Tira),
+ ],
+ q(6489) => [
+ q(Tidong),
+ ],
+ q(6490) => [
+ q(Tifal),
+ ],
+ q(6491) => [
+ q(Timugon Murut),
+ ],
+ q(6492) => [
+ q(Tiene),
+ ],
+ q(6493) => [
+ q(Tilung),
+ ],
+ q(6494) => [
+ q(Tikar),
+ ],
+ q(6495) => [
+ q(Tillamook),
+ ],
+ q(6496) => [
+ q(Timbe),
+ ],
+ q(6497) => [
+ q(Tindi),
+ ],
+ q(6498) => [
+ q(Teop),
+ ],
+ q(6499) => [
+ q(Trimuris),
+ ],
+ q(6500) => [
+ q(Tiefo),
+ ],
+ q(6501) => [
+ q(Masadiit Itneg),
+ ],
+ q(6502) => [
+ q(Tinigua),
+ ],
+ q(6503) => [
+ q(Adasen),
+ ],
+ q(6504) => [
+ q(Tiwi),
+ ],
+ q(6505) => [
+ q(Southern Tiwa),
+ ],
+ q(6506) => [
+ q(Tiruray),
+ ],
+ q(6507) => [
+ q(Tai Hongjin),
+ ],
+ q(6508) => [
+ q(Tajuasohn),
+ ],
+ q(6509) => [
+ q(Tunjung),
+ ],
+ q(6510) => [
+ q(Northern Tujia),
+ ],
+ q(6511) => [
+ q(Tai Laing),
+ ],
+ q(6512) => [
+ q(Timucua),
+ ],
+ q(6513) => [
+ q(Tonjon),
+ ],
+ q(6514) => [
+ q(Temacine Tamazight),
+ ],
+ q(6515) => [
+ q(Southern Tujia),
+ ],
+ q(6516) => [
+ q(Tjurruru),
+ ],
+ q(6517) => [
+ q(Truka),
+ ],
+ q(6518) => [
+ q(Buksa),
+ ],
+ q(6519) => [
+ q(Tukudede),
+ ],
+ q(6520) => [
+ q(Takwane),
+ ],
+ q(6521) => [
+ q(Tukumanfed),
+ ],
+ q(6522) => [
+ q(Tesaka Malagasy),
+ ],
+ q(6523) => [
+ q(Takelma),
+ ],
+ q(6524) => [
+ q(Toku-No-Shima),
+ ],
+ q(6525) => [
+ q(Tikopia),
+ ],
+ q(6526) => [
+ q(Tee),
+ ],
+ q(6527) => [
+ q(Tsakhur),
+ ],
+ q(6528) => [
+ q(Takestani),
+ ],
+ q(6529) => [
+ q(Kathoriya Tharu),
+ ],
+ q(6530) => [
+ q(Upper Necaxa Totonac),
+ ],
+ q(6531) => [
+ q(Teanu),
+ ],
+ q(6532) => [
+ q(Tangko),
+ ],
+ q(6533) => [
+ q(Takua),
+ ],
+ q(6534) => [
+ q(Southwestern Tepehuan),
+ ],
+ q(6535) => [
+ q(Tobelo),
+ ],
+ q(6536) => [
+ q(Yecuatla Totonac),
+ ],
+ q(6537) => [
+ q(Talaud),
+ ],
+ q(6538) => [
+ q(Telefol),
+ ],
+ q(6539) => [
+ q(Tofanma),
+ ],
+ q(6540) => [
+ q(Talinga-Bwisi),
+ ],
+ q(6541) => [
+ q(Taloki),
+ ],
+ q(6542) => [
+ q(Tetela),
+ ],
+ q(6543) => [
+ q(Tolomako),
+ ],
+ q(6544) => [
+ q(Talondo'),
+ ],
+ q(6545) => [
+ q(Talodi),
+ ],
+ q(6546) => [
+ q(Filomena Mata-Coahuitlan Totonac),
+ ],
+ q(6547) => [
+ q(Tai Loi),
+ ],
+ q(6548) => [
+ q(Talise),
+ ],
+ q(6549) => [
+ q(Tambotalo),
+ ],
+ q(6550) => [
+ q(Teluti),
+ ],
+ q(6551) => [
+ q(Tulehu),
+ ],
+ q(6552) => [
+ q(Taliabu),
+ ],
+ q(6553) => [
+ q(Khehek),
+ ],
+ q(6554) => [
+ q(Talysh),
+ ],
+ q(6555) => [
+ q(Tama (Chad)),
+ ],
+ q(6556) => [
+ q(Katbol),
+ q(Avava),
+ ],
+ q(6557) => [
+ q(Tumak),
+ ],
+ q(6558) => [
+ q(Haruai),
+ ],
+ q(6559) => [
+ q(Tremembe),
+ ],
+ q(6560) => [
+ q(Toba-Maskoy),
+ ],
+ q(6561) => [
+ q(Ternateno),
+ ],
+ q(6562) => [
+ q(Tutuba),
+ ],
+ q(6563) => [
+ q(Samarokena),
+ ],
+ q(6564) => [
+ q(Northwestern Tamang),
+ ],
+ q(6565) => [
+ q(Tamnim Citak),
+ ],
+ q(6566) => [
+ q(Tai Thanh),
+ ],
+ q(6567) => [
+ q(Taman (Indonesia)),
+ ],
+ q(6568) => [
+ q(Temoq),
+ ],
+ q(6569) => [
+ q(Tai Mene),
+ ],
+ q(6570) => [
+ q(Tumleo),
+ ],
+ q(6571) => [
+ q(Jewish Babylonian Aramaic (ca. 200-1200 CE)),
+ ],
+ q(6572) => [
+ q(Tima),
+ ],
+ q(6573) => [
+ q(Tasmate),
+ ],
+ q(6574) => [
+ q(Iau),
+ ],
+ q(6575) => [
+ q(Tembo (Motembo)),
+ ],
+ q(6576) => [
+ q(Temuan),
+ ],
+ q(6577) => [
+ q(Tami),
+ ],
+ q(6578) => [
+ q(Tamanaku),
+ ],
+ q(6579) => [
+ q(Tacana),
+ ],
+ q(6580) => [
+ q(Western Tunebo),
+ ],
+ q(6581) => [
+ q(Tanimuca-Retuara),
+ ],
+ q(6582) => [
+ q(Angosturas Tunebo),
+ ],
+ q(6583) => [
+ q(Tinoc Kallahan),
+ ],
+ q(6584) => [
+ q(Tobanga),
+ ],
+ q(6585) => [
+ q(Maiani),
+ ],
+ q(6586) => [
+ q(Tandia),
+ ],
+ q(6587) => [
+ q(Kwamera),
+ ],
+ q(6588) => [
+ q(Lenakel),
+ ],
+ q(6589) => [
+ q(Tabla),
+ ],
+ q(6590) => [
+ q(North Tanna),
+ ],
+ q(6591) => [
+ q(Toromono),
+ ],
+ q(6592) => [
+ q(Whitesands),
+ ],
+ q(6593) => [
+ q(Taino),
+ ],
+ q(6594) => [
+ q(Bedik),
+ ],
+ q(6595) => [
+ q(Tenis),
+ ],
+ q(6596) => [
+ q(Tontemboan),
+ ],
+ q(6597) => [
+ q(Tay Khang),
+ ],
+ q(6598) => [
+ q(Tangchangya),
+ ],
+ q(6599) => [
+ q(Tonsawang),
+ ],
+ q(6600) => [
+ q(Tanema),
+ ],
+ q(6601) => [
+ q(Tongwe),
+ ],
+ q(6602) => [
+ q(Tonga (Thailand)),
+ ],
+ q(6603) => [
+ q(Toba),
+ ],
+ q(6604) => [
+ q(Coyutla Totonac),
+ ],
+ q(6605) => [
+ q(Toma),
+ ],
+ q(6606) => [
+ q(Tomedes),
+ ],
+ q(6607) => [
+ q(Gizrra),
+ ],
+ q(6608) => [
+ q(Gitonga),
+ ],
+ q(6609) => [
+ q(Tonga (Zambia)),
+ ],
+ q(6610) => [
+ q(Tojolabal),
+ ],
+ q(6611) => [
+ q(Tolowa),
+ ],
+ q(6612) => [
+ q(Tombulu),
+ ],
+ q(6613) => [
+ q(Xicotepec De Juarez Totonac),
+ ],
+ q(6614) => [
+ q(Papantla Totonac),
+ ],
+ q(6615) => [
+ q(Toposa),
+ ],
+ q(6616) => [
+ q(Togbo-Vara Banda),
+ ],
+ q(6617) => [
+ q(Highland Totonac),
+ ],
+ q(6618) => [
+ q(Tho),
+ ],
+ q(6619) => [
+ q(Upper Taromi),
+ ],
+ q(6620) => [
+ q(Jemez),
+ ],
+ q(6621) => [
+ q(Tobian),
+ ],
+ q(6622) => [
+ q(Topoiyo),
+ ],
+ q(6623) => [
+ q(To),
+ ],
+ q(6624) => [
+ q(Taupota),
+ ],
+ q(6625) => [
+ q(Azoyu Me'phaa),
+ q(Azoyu Tlapanec),
+ ],
+ q(6626) => [
+ q(Tippera),
+ ],
+ q(6627) => [
+ q(Tarpia),
+ ],
+ q(6628) => [
+ q(Kula),
+ ],
+ q(6629) => [
+ q(Tapiete),
+ ],
+ q(6630) => [
+ q(Tupinikin),
+ ],
+ q(6631) => [
+ q(Tlacoapa Me'phaa),
+ q(Tlacoapa Tlapanec),
+ ],
+ q(6632) => [
+ q(Tampulma),
+ ],
+ q(6633) => [
+ q(Tupinamba),
+ ],
+ q(6634) => [
+ q(Tai Pao),
+ ],
+ q(6635) => [
+ q(Pisaflores Tepehua),
+ ],
+ q(6636) => [
+ q(Tukpa),
+ ],
+ q(6637) => [
+ q(Tupari),
+ ],
+ q(6638) => [
+ q(Tlachichilco Tepehua),
+ ],
+ q(6639) => [
+ q(Tampuan),
+ ],
+ q(6640) => [
+ q(Tanapag),
+ ],
+ q(6641) => [
+ q(Tupi),
+ ],
+ q(6642) => [
+ q(Acatepec Me'phaa),
+ q(Acatepec Tlapanec),
+ ],
+ q(6643) => [
+ q(Trumai),
+ ],
+ q(6644) => [
+ q(Tinputz),
+ ],
+ q(6645) => [
+ q(Tembe),
+ ],
+ q(6646) => [
+ q(Lehali),
+ ],
+ q(6647) => [
+ q(Turumsa),
+ ],
+ q(6648) => [
+ q(Tenino),
+ ],
+ q(6649) => [
+ q(Toaripi),
+ ],
+ q(6650) => [
+ q(Tomoip),
+ ],
+ q(6651) => [
+ q(Tunni),
+ ],
+ q(6652) => [
+ q(Torona),
+ ],
+ q(6653) => [
+ q(Western Totonac),
+ ],
+ q(6654) => [
+ q(Touo),
+ ],
+ q(6655) => [
+ q(Tonkawa),
+ ],
+ q(6656) => [
+ q(Tirahi),
+ ],
+ q(6657) => [
+ q(Terebu),
+ ],
+ q(6658) => [
+ q(Copala Triqui),
+ ],
+ q(6659) => [
+ q(Turi),
+ ],
+ q(6660) => [
+ q(East Tarangan),
+ ],
+ q(6661) => [
+ q(Trinidadian Creole English),
+ ],
+ q(6662) => [
+ q(Lishan Didan),
+ ],
+ q(6663) => [
+ q(Turaka),
+ ],
+ q(6664) => [
+ q(Trio),
+ ],
+ q(6665) => [
+ q(Toram),
+ ],
+ q(6666) => [
+ q(Traveller Scottish),
+ ],
+ q(6667) => [
+ q(Tregami),
+ ],
+ q(6668) => [
+ q(Trinitario),
+ ],
+ q(6669) => [
+ q(Tarao Naga),
+ ],
+ q(6670) => [
+ q(Kok Borok),
+ ],
+ q(6671) => [
+ q(San Martin Itunyoso Triqui),
+ ],
+ q(6672) => [
+ q(Taushiro),
+ ],
+ q(6673) => [
+ q(Chicahuaxtla Triqui),
+ ],
+ q(6674) => [
+ q(Tunggare),
+ ],
+ q(6675) => [
+ q(Turoyo),
+ q(Surayt),
+ ],
+ q(6676) => [
+ q(Taroko),
+ ],
+ q(6677) => [
+ q(Torwali),
+ ],
+ q(6678) => [
+ q(Tringgus-Sembaan Bidayuh),
+ ],
+ q(6679) => [
+ q(Turung),
+ ],
+ q(6680) => [
+ q(Tora),
+ ],
+ q(6681) => [
+ q(Tsaangi),
+ ],
+ q(6682) => [
+ q(Tsamai),
+ ],
+ q(6683) => [
+ q(Tswa),
+ ],
+ q(6684) => [
+ q(Tsakonian),
+ ],
+ q(6685) => [
+ q(Tunisian Sign Language),
+ ],
+ q(6686) => [
+ q(Southwestern Tamang),
+ ],
+ q(6687) => [
+ q(Tausug),
+ ],
+ q(6688) => [
+ q(Tsuvan),
+ ],
+ q(6689) => [
+ q(Tshangla),
+ ],
+ q(6690) => [
+ q(Tseku),
+ ],
+ q(6691) => [
+ q(Ts'un-Lao),
+ ],
+ q(6692) => [
+ q(Turkish Sign Language),
+ q(Turk Isaret Dili),
+ ],
+ q(6693) => [
+ q(Northern Toussian),
+ ],
+ q(6694) => [
+ q(Thai Sign Language),
+ ],
+ q(6695) => [
+ q(Akei),
+ ],
+ q(6696) => [
+ q(Taiwan Sign Language),
+ ],
+ q(6697) => [
+ q(Tondi Songway Kiini),
+ ],
+ q(6698) => [
+ q(Tsou),
+ ],
+ q(6699) => [
+ q(Tsogo),
+ ],
+ q(6700) => [
+ q(Tsishingini),
+ ],
+ q(6701) => [
+ q(Mubami),
+ ],
+ q(6702) => [
+ q(Tebul Sign Language),
+ ],
+ q(6703) => [
+ q(Purepecha),
+ ],
+ q(6704) => [
+ q(Tutelo),
+ ],
+ q(6705) => [
+ q(Gaa),
+ ],
+ q(6706) => [
+ q(Tektiteko),
+ ],
+ q(6707) => [
+ q(Tauade),
+ ],
+ q(6708) => [
+ q(Bwanabwana),
+ ],
+ q(6709) => [
+ q(Tuotomb),
+ ],
+ q(6710) => [
+ q(Tutong),
+ ],
+ q(6711) => [
+ q(Upper Ta'oih),
+ ],
+ q(6712) => [
+ q(Tobati),
+ ],
+ q(6713) => [
+ q(Tooro),
+ ],
+ q(6714) => [
+ q(Totoro),
+ ],
+ q(6715) => [
+ q(Totela),
+ ],
+ q(6716) => [
+ q(Northern Tutchone),
+ ],
+ q(6717) => [
+ q(Towei),
+ ],
+ q(6718) => [
+ q(Lower Ta'oih),
+ ],
+ q(6719) => [
+ q(Tombelala),
+ ],
+ q(6720) => [
+ q(Tawallammat Tamajaq),
+ ],
+ q(6721) => [
+ q(Tera),
+ ],
+ q(6722) => [
+ q(Northeastern Thai),
+ ],
+ q(6723) => [
+ q(Muslim Tat),
+ ],
+ q(6724) => [
+ q(Torau),
+ ],
+ q(6725) => [
+ q(Titan),
+ ],
+ q(6726) => [
+ q(Long Wat),
+ ],
+ q(6727) => [
+ q(Sikaritai),
+ ],
+ q(6728) => [
+ q(Tsum),
+ ],
+ q(6729) => [
+ q(Wiarumus),
+ ],
+ q(6730) => [
+ q(Tubatulabal),
+ ],
+ q(6731) => [
+ q(Mutu),
+ ],
+ q(6732) => [
+ q(Tuxa),
+ ],
+ q(6733) => [
+ q(Tuyuca),
+ ],
+ q(6734) => [
+ q(Central Tunebo),
+ ],
+ q(6735) => [
+ q(Tunia),
+ ],
+ q(6736) => [
+ q(Taulil),
+ ],
+ q(6737) => [
+ q(Tupuri),
+ ],
+ q(6738) => [
+ q(Tugutil),
+ ],
+ q(6739) => [
+ q(Tula),
+ ],
+ q(6740) => [
+ q(Tunica),
+ ],
+ q(6741) => [
+ q(Tucano),
+ ],
+ q(6742) => [
+ q(Tedaga),
+ ],
+ q(6743) => [
+ q(Tuscarora),
+ ],
+ q(6744) => [
+ q(Tututni),
+ ],
+ q(6745) => [
+ q(Turkana),
+ ],
+ q(6746) => [
+ q(Tuxinawa),
+ ],
+ q(6747) => [
+ q(Tugen),
+ ],
+ q(6748) => [
+ q(Turka),
+ ],
+ q(6749) => [
+ q(Vaghua),
+ ],
+ q(6750) => [
+ q(Tsuvadi),
+ ],
+ q(6751) => [
+ q(Te'un),
+ ],
+ q(6752) => [
+ q(Southeast Ambrym),
+ ],
+ q(6753) => [
+ q(Tela-Masbuar),
+ ],
+ q(6754) => [
+ q(Tavoyan),
+ ],
+ q(6755) => [
+ q(Tidore),
+ ],
+ q(6756) => [
+ q(Taveta),
+ ],
+ q(6757) => [
+ q(Tutsa Naga),
+ ],
+ q(6758) => [
+ q(Tunen),
+ ],
+ q(6759) => [
+ q(Sedoa),
+ ],
+ q(6760) => [
+ q(Timor Pidgin),
+ ],
+ q(6761) => [
+ q(Twana),
+ ],
+ q(6762) => [
+ q(Western Tawbuid),
+ ],
+ q(6763) => [
+ q(Teshenawa),
+ ],
+ q(6764) => [
+ q(Twents),
+ ],
+ q(6765) => [
+ q(Tewa (Indonesia)),
+ ],
+ q(6766) => [
+ q(Northern Tiwa),
+ ],
+ q(6767) => [
+ q(Tereweng),
+ ],
+ q(6768) => [
+ q(Tai Don),
+ ],
+ q(6769) => [
+ q(Tawara),
+ ],
+ q(6770) => [
+ q(Tawang Monpa),
+ ],
+ q(6771) => [
+ q(Twendi),
+ ],
+ q(6772) => [
+ q(Tswapong),
+ ],
+ q(6773) => [
+ q(Ere),
+ ],
+ q(6774) => [
+ q(Tasawaq),
+ ],
+ q(6775) => [
+ q(Southwestern Tarahumara),
+ ],
+ q(6776) => [
+ q(Turiwara),
+ ],
+ q(6777) => [
+ q(Termanu),
+ ],
+ q(6778) => [
+ q(Tuwari),
+ ],
+ q(6779) => [
+ q(Tewe),
+ ],
+ q(6780) => [
+ q(Tawoyan),
+ ],
+ q(6781) => [
+ q(Tombonuo),
+ ],
+ q(6782) => [
+ q(Tokharian B),
+ ],
+ q(6783) => [
+ q(Tsetsaut),
+ ],
+ q(6784) => [
+ q(Totoli),
+ ],
+ q(6785) => [
+ q(Tangut),
+ ],
+ q(6786) => [
+ q(Thracian),
+ ],
+ q(6787) => [
+ q(Ikpeng),
+ ],
+ q(6788) => [
+ q(Tomini),
+ ],
+ q(6789) => [
+ q(West Tarangan),
+ ],
+ q(6790) => [
+ q(Toto),
+ ],
+ q(6791) => [
+ q(Tii),
+ ],
+ q(6792) => [
+ q(Tartessian),
+ ],
+ q(6793) => [
+ q(Tonsea),
+ ],
+ q(6794) => [
+ q(Citak),
+ ],
+ q(6795) => [
+ q(Kayapo),
+ ],
+ q(6796) => [
+ q(Tatana),
+ ],
+ q(6797) => [
+ q(Tanosy Malagasy),
+ ],
+ q(6798) => [
+ q(Tauya),
+ ],
+ q(6799) => [
+ q(Kyenga),
+ ],
+ q(6800) => [
+ q(O'du),
+ ],
+ q(6801) => [
+ q(Teke-Tsaayi),
+ ],
+ q(6802) => [
+ q(Tai Do),
+ ],
+ q(6803) => [
+ q(Thu Lao),
+ ],
+ q(6804) => [
+ q(Kombai),
+ ],
+ q(6805) => [
+ q(Thaypan),
+ ],
+ q(6806) => [
+ q(Tai Daeng),
+ ],
+ q(6807) => [
+ q(Tay Sa Pa),
+ ],
+ q(6808) => [
+ q(Tay Tac),
+ ],
+ q(6809) => [
+ q(Kua),
+ ],
+ q(6810) => [
+ q(Teke-Tyee),
+ ],
+ q(6811) => [
+ q(Tay),
+ ],
+ q(6812) => [
+ q(Tanzanian Sign Language),
+ ],
+ q(6813) => [
+ q(Tzeltal),
+ ],
+ q(6814) => [
+ q(Tz'utujil),
+ ],
+ q(6815) => [
+ q(Central Atlas Tamazight),
+ ],
+ q(6816) => [
+ q(Tugun),
+ ],
+ q(6817) => [
+ q(Tzotzil),
+ ],
+ q(6818) => [
+ q(Tabriak),
+ ],
+ q(6819) => [
+ q(Uamue),
+ ],
+ q(6820) => [
+ q(Kuan),
+ ],
+ q(6821) => [
+ q(Tairuma),
+ ],
+ q(6822) => [
+ q(Ubang),
+ ],
+ q(6823) => [
+ q(Ubi),
+ ],
+ q(6824) => [
+ q(Buhi'non Bikol),
+ ],
+ q(6825) => [
+ q(Ubir),
+ ],
+ q(6826) => [
+ q(Umbu-Ungu),
+ ],
+ q(6827) => [
+ q(Ubykh),
+ ],
+ q(6828) => [
+ q(Uda),
+ ],
+ q(6829) => [
+ q(Udihe),
+ ],
+ q(6830) => [
+ q(Muduga),
+ ],
+ q(6831) => [
+ q(Udi),
+ ],
+ q(6832) => [
+ q(Ujir),
+ ],
+ q(6833) => [
+ q(Wuzlam),
+ ],
+ q(6834) => [
+ q(Uduk),
+ ],
+ q(6835) => [
+ q(Kioko),
+ ],
+ q(6836) => [
+ q(Ufim),
+ ],
+ q(6837) => [
+ q(Kuku-Ugbanh),
+ ],
+ q(6838) => [
+ q(Ughele),
+ ],
+ q(6839) => [
+ q(Ugandan Sign Language),
+ ],
+ q(6840) => [
+ q(Ugong),
+ ],
+ q(6841) => [
+ q(Uruguayan Sign Language),
+ ],
+ q(6842) => [
+ q(Uhami),
+ ],
+ q(6843) => [
+ q(Damal),
+ ],
+ q(6844) => [
+ q(Uisai),
+ ],
+ q(6845) => [
+ q(Iyive),
+ ],
+ q(6846) => [
+ q(Tanjijili),
+ ],
+ q(6847) => [
+ q(Kaburi),
+ ],
+ q(6848) => [
+ q(Ukuriguma),
+ ],
+ q(6849) => [
+ q(Ukhwejo),
+ ],
+ q(6850) => [
+ q(Ukrainian Sign Language),
+ ],
+ q(6851) => [
+ q(Ukpe-Bayobiri),
+ ],
+ q(6852) => [
+ q(Ukwa),
+ ],
+ q(6853) => [
+ q(Urubu-Kaapor Sign Language),
+ q(Kaapor Sign Language),
+ ],
+ q(6854) => [
+ q(Ukue),
+ ],
+ q(6855) => [
+ q(Ukwuani-Aboh-Ndoni),
+ ],
+ q(6856) => [
+ q(Kuuk-Yak),
+ ],
+ q(6857) => [
+ q(Fungwa),
+ ],
+ q(6858) => [
+ q(Ulukwumi),
+ ],
+ q(6859) => [
+ q(Ulch),
+ ],
+ q(6860) => [
+ q(Usku),
+ q(Afra),
+ ],
+ q(6861) => [
+ q(Ulithian),
+ ],
+ q(6862) => [
+ q(Meriam),
+ ],
+ q(6863) => [
+ q(Ullatan),
+ ],
+ q(6864) => [
+ q(Ulumanda'),
+ ],
+ q(6865) => [
+ q(Unserdeutsch),
+ ],
+ q(6866) => [
+ q(Uma' Lung),
+ ],
+ q(6867) => [
+ q(Ulwa),
+ ],
+ q(6868) => [
+ q(Umatilla),
+ ],
+ q(6869) => [
+ q(Marrucinian),
+ ],
+ q(6870) => [
+ q(Umbindhamu),
+ ],
+ q(6871) => [
+ q(Umbuygamu),
+ ],
+ q(6872) => [
+ q(Ukit),
+ ],
+ q(6873) => [
+ q(Umon),
+ ],
+ q(6874) => [
+ q(Makyan Naga),
+ ],
+ q(6875) => [
+ q(Umotina),
+ ],
+ q(6876) => [
+ q(Umpila),
+ ],
+ q(6877) => [
+ q(Umbugarla),
+ ],
+ q(6878) => [
+ q(Pendau),
+ ],
+ q(6879) => [
+ q(Munsee),
+ ],
+ q(6880) => [
+ q(North Watut),
+ ],
+ q(6881) => [
+ q(Uneme),
+ ],
+ q(6882) => [
+ q(Ngarinyin),
+ ],
+ q(6883) => [
+ q(Enawene-Nawe),
+ ],
+ q(6884) => [
+ q(Unami),
+ ],
+ q(6885) => [
+ q(Mundari),
+ ],
+ q(6886) => [
+ q(Munda),
+ ],
+ q(6887) => [
+ q(Unde Kaili),
+ ],
+ q(6888) => [
+ q(Uokha),
+ ],
+ q(6889) => [
+ q(Umeda),
+ ],
+ q(6890) => [
+ q(Uripiv-Wala-Rano-Atchin),
+ ],
+ q(6891) => [
+ q(Urarina),
+ ],
+ q(6892) => [
+ q(Urubu-Kaapor),
+ q(Kaapor),
+ ],
+ q(6893) => [
+ q(Urningangg),
+ ],
+ q(6894) => [
+ q(Uru),
+ ],
+ q(6895) => [
+ q(Uradhi),
+ ],
+ q(6896) => [
+ q(Urigina),
+ ],
+ q(6897) => [
+ q(Urhobo),
+ ],
+ q(6898) => [
+ q(Urim),
+ ],
+ q(6899) => [
+ q(Urak Lawoi'),
+ ],
+ q(6900) => [
+ q(Urali),
+ ],
+ q(6901) => [
+ q(Urapmin),
+ ],
+ q(6902) => [
+ q(Uruangnirin),
+ ],
+ q(6903) => [
+ q(Ura (Papua New Guinea)),
+ ],
+ q(6904) => [
+ q(Uru-Pa-In),
+ ],
+ q(6905) => [
+ q(Lehalurup),
+ q(Loyop),
+ ],
+ q(6906) => [
+ q(Urat),
+ ],
+ q(6907) => [
+ q(Urumi),
+ ],
+ q(6908) => [
+ q(Uruava),
+ ],
+ q(6909) => [
+ q(Sop),
+ ],
+ q(6910) => [
+ q(Urimo),
+ ],
+ q(6911) => [
+ q(Orya),
+ ],
+ q(6912) => [
+ q(Uru-Eu-Wau-Wau),
+ ],
+ q(6913) => [
+ q(Usarufa),
+ ],
+ q(6914) => [
+ q(Ushojo),
+ ],
+ q(6915) => [
+ q(Usui),
+ ],
+ q(6916) => [
+ q(Usaghade),
+ ],
+ q(6917) => [
+ q(Uspanteco),
+ ],
+ q(6918) => [
+ q(Uya),
+ ],
+ q(6919) => [
+ q(Otank),
+ ],
+ q(6920) => [
+ q(Ute-Southern Paiute),
+ ],
+ q(6921) => [
+ q(Amba (Solomon Islands)),
+ ],
+ q(6922) => [
+ q(Etulo),
+ ],
+ q(6923) => [
+ q(Utu),
+ ],
+ q(6924) => [
+ q(Urum),
+ ],
+ q(6925) => [
+ q(Kulon-Pazeh),
+ ],
+ q(6926) => [
+ q(Ura (Vanuatu)),
+ ],
+ q(6927) => [
+ q(U),
+ ],
+ q(6928) => [
+ q(West Uvean),
+ ],
+ q(6929) => [
+ q(Uri),
+ ],
+ q(6930) => [
+ q(Lote),
+ ],
+ q(6931) => [
+ q(Kuku-Uwanh),
+ ],
+ q(6932) => [
+ q(Doko-Uyanga),
+ ],
+ q(6933) => [
+ q(Northern Uzbek),
+ ],
+ q(6934) => [
+ q(Southern Uzbek),
+ ],
+ q(6935) => [
+ q(Vaagri Booli),
+ ],
+ q(6936) => [
+ q(Vale),
+ ],
+ q(6937) => [
+ q(Vafsi),
+ ],
+ q(6938) => [
+ q(Vagla),
+ ],
+ q(6939) => [
+ q(Varhadi-Nagpuri),
+ ],
+ q(6940) => [
+ q(Vasekela Bushman),
+ ],
+ q(6941) => [
+ q(Vehes),
+ ],
+ q(6942) => [
+ q(Vanimo),
+ ],
+ q(6943) => [
+ q(Valman),
+ ],
+ q(6944) => [
+ q(Vao),
+ ],
+ q(6945) => [
+ q(Vaiphei),
+ ],
+ q(6946) => [
+ q(Huarijio),
+ ],
+ q(6947) => [
+ q(Vasavi),
+ ],
+ q(6948) => [
+ q(Vanuma),
+ ],
+ q(6949) => [
+ q(Varli),
+ ],
+ q(6950) => [
+ q(Wayu),
+ ],
+ q(6951) => [
+ q(Southeast Babar),
+ ],
+ q(6952) => [
+ q(Southwestern Bontok),
+ ],
+ q(6953) => [
+ q(Venetian),
+ ],
+ q(6954) => [
+ q(Veddah),
+ ],
+ q(6955) => [
+ q(Veluws),
+ ],
+ q(6956) => [
+ q(Vemgo-Mabas),
+ ],
+ q(6957) => [
+ q(Ventureno),
+ ],
+ q(6958) => [
+ q(Veps),
+ ],
+ q(6959) => [
+ q(Mom Jango),
+ ],
+ q(6960) => [
+ q(Vaghri),
+ ],
+ q(6961) => [
+ q(Vlaamse Gebarentaal),
+ q(Flemish Sign Language),
+ ],
+ q(6962) => [
+ q(Virgin Islands Creole English),
+ ],
+ q(6963) => [
+ q(Vidunda),
+ ],
+ q(6964) => [
+ q(Vili),
+ ],
+ q(6965) => [
+ q(Viemo),
+ ],
+ q(6966) => [
+ q(Vilela),
+ ],
+ q(6967) => [
+ q(Vinza),
+ ],
+ q(6968) => [
+ q(Vishavan),
+ ],
+ q(6969) => [
+ q(Viti),
+ ],
+ q(6970) => [
+ q(Iduna),
+ ],
+ q(6971) => [
+ q(Kariyarra),
+ ],
+ q(6972) => [
+ q(Ija-Zuba),
+ ],
+ q(6973) => [
+ q(Kujarge),
+ ],
+ q(6974) => [
+ q(Kaur),
+ ],
+ q(6975) => [
+ q(Kulisusu),
+ ],
+ q(6976) => [
+ q(Kamakan),
+ ],
+ q(6977) => [
+ q(Kodeoha),
+ ],
+ q(6978) => [
+ q(Korlai Creole Portuguese),
+ ],
+ q(6979) => [
+ q(Tenggarong Kutai Malay),
+ ],
+ q(6980) => [
+ q(Kurrama),
+ ],
+ q(6981) => [
+ q(Valpei),
+ ],
+ q(6982) => [
+ q(Vlaams),
+ ],
+ q(6983) => [
+ q(Martuyhunira),
+ ],
+ q(6984) => [
+ q(Mbabaram),
+ ],
+ q(6985) => [
+ q(Juxtlahuaca Mixtec),
+ ],
+ q(6986) => [
+ q(Mudu Koraga),
+ ],
+ q(6987) => [
+ q(East Masela),
+ ],
+ q(6988) => [
+ q(Mainfrankisch),
+ ],
+ q(6989) => [
+ q(Minigir),
+ ],
+ q(6990) => [
+ q(Maraghei),
+ ],
+ q(6991) => [
+ q(Miwa),
+ ],
+ q(6992) => [
+ q(Ixtayutla Mixtec),
+ ],
+ q(6993) => [
+ q(Makhuwa-Shirima),
+ ],
+ q(6994) => [
+ q(Malgana),
+ ],
+ q(6995) => [
+ q(Mitlatongo Mixtec),
+ ],
+ q(6996) => [
+ q(Soyaltepec Mazatec),
+ ],
+ q(6997) => [
+ q(Soyaltepec Mixtec),
+ ],
+ q(6998) => [
+ q(Marenje),
+ ],
+ q(6999) => [
+ q(Moksela),
+ ],
+ q(7000) => [
+ q(Muluridyi),
+ ],
+ q(7001) => [
+ q(Valley Maidu),
+ ],
+ q(7002) => [
+ q(Makhuwa),
+ ],
+ q(7003) => [
+ q(Tamazola Mixtec),
+ ],
+ q(7004) => [
+ q(Ayautla Mazatec),
+ ],
+ q(7005) => [
+ q(Mazatlan Mazatec),
+ ],
+ q(7006) => [
+ q(Vano),
+ q(Lovono),
+ ],
+ q(7007) => [
+ q(Vinmavis),
+ q(Neve'ei),
+ ],
+ q(7008) => [
+ q(Vunapu),
+ ],
+ q(7009) => [
+ q(Voro),
+ ],
+ q(7010) => [
+ q(Vera'a),
+ ],
+ q(7011) => [
+ q(Varisi),
+ ],
+ q(7012) => [
+ q(Burmbar),
+ q(Banam Bay),
+ ],
+ q(7013) => [
+ q(Moldova Sign Language),
+ ],
+ q(7014) => [
+ q(Venezuelan Sign Language),
+ ],
+ q(7015) => [
+ q(Valencian Sign Language),
+ q(Llengua de signes valenciana),
+ ],
+ q(7016) => [
+ q(Vitou),
+ ],
+ q(7017) => [
+ q(Vumbu),
+ ],
+ q(7018) => [
+ q(Vunjo),
+ ],
+ q(7019) => [
+ q(Vute),
+ ],
+ q(7020) => [
+ q(Awa (China)),
+ ],
+ q(7021) => [
+ q(Walla Walla),
+ ],
+ q(7022) => [
+ q(Wab),
+ ],
+ q(7023) => [
+ q(Wasco-Wishram),
+ ],
+ q(7024) => [
+ q(Wandamen),
+ ],
+ q(7025) => [
+ q(Walser),
+ ],
+ q(7026) => [
+ q(Wakona),
+ ],
+ q(7027) => [
+ q(Wa'ema),
+ ],
+ q(7028) => [
+ q(Watubela),
+ ],
+ q(7029) => [
+ q(Wares),
+ ],
+ q(7030) => [
+ q(Waffa),
+ ],
+ q(7031) => [
+ q(Wampanoag),
+ ],
+ q(7032) => [
+ q(Wan),
+ ],
+ q(7033) => [
+ q(Wappo),
+ ],
+ q(7034) => [
+ q(Wapishana),
+ ],
+ q(7035) => [
+ q(Wageman),
+ ],
+ q(7036) => [
+ q(Kaninuwa),
+ ],
+ q(7037) => [
+ q(Waura),
+ ],
+ q(7038) => [
+ q(Waka),
+ ],
+ q(7039) => [
+ q(Waiwai),
+ ],
+ q(7040) => [
+ q(Watam),
+ ],
+ q(7041) => [
+ q(Wayana),
+ ],
+ q(7042) => [
+ q(Wampur),
+ ],
+ q(7043) => [
+ q(Warao),
+ ],
+ q(7044) => [
+ q(Wabo),
+ ],
+ q(7045) => [
+ q(Waritai),
+ ],
+ q(7046) => [
+ q(Wanda),
+ ],
+ q(7047) => [
+ q(Vwanji),
+ ],
+ q(7048) => [
+ q(Alagwa),
+ ],
+ q(7049) => [
+ q(Waigali),
+ ],
+ q(7050) => [
+ q(Wakhi),
+ ],
+ q(7051) => [
+ q(Wa),
+ ],
+ q(7052) => [
+ q(Warlpiri),
+ ],
+ q(7053) => [
+ q(Waddar),
+ ],
+ q(7054) => [
+ q(Wagdi),
+ ],
+ q(7055) => [
+ q(Wanman),
+ ],
+ q(7056) => [
+ q(Wajarri),
+ ],
+ q(7057) => [
+ q(Woi),
+ ],
+ q(7058) => [
+ q(Yanomami),
+ ],
+ q(7059) => [
+ q(Waci Gbe),
+ ],
+ q(7060) => [
+ q(Wandji),
+ ],
+ q(7061) => [
+ q(Wadaginam),
+ ],
+ q(7062) => [
+ q(Wadjiginy),
+ ],
+ q(7063) => [
+ q(Wadjigu),
+ ],
+ q(7064) => [
+ q(Wewaw),
+ ],
+ q(7065) => [
+ q(We Western),
+ ],
+ q(7066) => [
+ q(Wedau),
+ ],
+ q(7067) => [
+ q(Weh),
+ ],
+ q(7068) => [
+ q(Kiunum),
+ ],
+ q(7069) => [
+ q(Weme Gbe),
+ ],
+ q(7070) => [
+ q(Wemale),
+ ],
+ q(7071) => [
+ q(Westphalien),
+ ],
+ q(7072) => [
+ q(Weri),
+ ],
+ q(7073) => [
+ q(Cameroon Pidgin),
+ ],
+ q(7074) => [
+ q(Perai),
+ ],
+ q(7075) => [
+ q(Rawngtu Chin),
+ ],
+ q(7076) => [
+ q(Wejewa),
+ ],
+ q(7077) => [
+ q(Yafi),
+ q(Zorop),
+ ],
+ q(7078) => [
+ q(Wagaya),
+ ],
+ q(7079) => [
+ q(Wagawaga),
+ ],
+ q(7080) => [
+ q(Wangganguru),
+ ],
+ q(7081) => [
+ q(Wahgi),
+ ],
+ q(7082) => [
+ q(Waigeo),
+ ],
+ q(7083) => [
+ q(Wirangu),
+ ],
+ q(7084) => [
+ q(Warrgamay),
+ ],
+ q(7085) => [
+ q(Manusela),
+ ],
+ q(7086) => [
+ q(North Wahgi),
+ ],
+ q(7087) => [
+ q(Wahau Kenyah),
+ ],
+ q(7088) => [
+ q(Wahau Kayan),
+ ],
+ q(7089) => [
+ q(Southern Toussian),
+ ],
+ q(7090) => [
+ q(Wichita),
+ ],
+ q(7091) => [
+ q(Wik-Epa),
+ ],
+ q(7092) => [
+ q(Wik-Keyangan),
+ ],
+ q(7093) => [
+ q(Wik-Ngathana),
+ ],
+ q(7094) => [
+ q(Wik-Me'anha),
+ ],
+ q(7095) => [
+ q(Minidien),
+ ],
+ q(7096) => [
+ q(Wik-Iiyanh),
+ ],
+ q(7097) => [
+ q(Wikalkan),
+ ],
+ q(7098) => [
+ q(Wilawila),
+ ],
+ q(7099) => [
+ q(Wik-Mungkan),
+ ],
+ q(7100) => [
+ q(Ho-Chunk),
+ ],
+ q(7101) => [
+ q(Wirafed),
+ ],
+ q(7102) => [
+ q(Wintu),
+ ],
+ q(7103) => [
+ q(Wiru),
+ ],
+ q(7104) => [
+ q(Vitu),
+ ],
+ q(7105) => [
+ q(Wiyot),
+ ],
+ q(7106) => [
+ q(Waja),
+ ],
+ q(7107) => [
+ q(Warji),
+ ],
+ q(7108) => [
+ q(Kw'adza),
+ ],
+ q(7109) => [
+ q(Kumbaran),
+ ],
+ q(7110) => [
+ q(Wakde),
+ q(Mo),
+ ],
+ q(7111) => [
+ q(Kalanadi),
+ ],
+ q(7112) => [
+ q(Kunduvadi),
+ ],
+ q(7113) => [
+ q(Wakawaka),
+ ],
+ q(7114) => [
+ q(Walio),
+ ],
+ q(7115) => [
+ q(Mwali Comorian),
+ ],
+ q(7116) => [
+ q(Wolane),
+ ],
+ q(7117) => [
+ q(Kunbarlang),
+ ],
+ q(7118) => [
+ q(Waioli),
+ ],
+ q(7119) => [
+ q(Wailaki),
+ ],
+ q(7120) => [
+ q(Wali (Sudan)),
+ ],
+ q(7121) => [
+ q(Middle Welsh),
+ ],
+ q(7122) => [
+ q(Wolio),
+ ],
+ q(7123) => [
+ q(Wailapa),
+ ],
+ q(7124) => [
+ q(Wallisian),
+ ],
+ q(7125) => [
+ q(Wuliwuli),
+ ],
+ q(7126) => [
+ q(Wichi Lhamtes Vejoz),
+ ],
+ q(7127) => [
+ q(Walak),
+ ],
+ q(7128) => [
+ q(Wali (Ghana)),
+ ],
+ q(7129) => [
+ q(Waling),
+ ],
+ q(7130) => [
+ q(Mawa (Nigeria)),
+ ],
+ q(7131) => [
+ q(Wambaya),
+ ],
+ q(7132) => [
+ q(Wamas),
+ ],
+ q(7133) => [
+ q(Mamainde),
+ ],
+ q(7134) => [
+ q(Wambule),
+ ],
+ q(7135) => [
+ q(Waima'a),
+ ],
+ q(7136) => [
+ q(Wamin),
+ ],
+ q(7137) => [
+ q(Maiwa (Indonesia)),
+ ],
+ q(7138) => [
+ q(Waamwang),
+ ],
+ q(7139) => [
+ q(Wom (Papua New Guinea)),
+ ],
+ q(7140) => [
+ q(Wambon),
+ ],
+ q(7141) => [
+ q(Walmajarri),
+ ],
+ q(7142) => [
+ q(Mwani),
+ ],
+ q(7143) => [
+ q(Womo),
+ ],
+ q(7144) => [
+ q(Wanambre),
+ ],
+ q(7145) => [
+ q(Wantoat),
+ ],
+ q(7146) => [
+ q(Wandarang),
+ ],
+ q(7147) => [
+ q(Waneci),
+ ],
+ q(7148) => [
+ q(Wanggom),
+ ],
+ q(7149) => [
+ q(Ndzwani Comorian),
+ ],
+ q(7150) => [
+ q(Wanukaka),
+ ],
+ q(7151) => [
+ q(Wanggamala),
+ ],
+ q(7152) => [
+ q(Wano),
+ ],
+ q(7153) => [
+ q(Wanap),
+ ],
+ q(7154) => [
+ q(Usan),
+ ],
+ q(7155) => [
+ q(Wanyi),
+ ],
+ q(7156) => [
+ q(Tyaraity),
+ ],
+ q(7157) => [
+ q(We Northern),
+ ],
+ q(7158) => [
+ q(Wogeo),
+ ],
+ q(7159) => [
+ q(Wolani),
+ ],
+ q(7160) => [
+ q(Woleaian),
+ ],
+ q(7161) => [
+ q(Gambian Wolof),
+ ],
+ q(7162) => [
+ q(Wogamusin),
+ ],
+ q(7163) => [
+ q(Kamang),
+ ],
+ q(7164) => [
+ q(Longto),
+ ],
+ q(7165) => [
+ q(Wom (Nigeria)),
+ ],
+ q(7166) => [
+ q(Wongo),
+ ],
+ q(7167) => [
+ q(Manombai),
+ ],
+ q(7168) => [
+ q(Woria),
+ ],
+ q(7169) => [
+ q(Hanga Hundi),
+ ],
+ q(7170) => [
+ q(Wawonii),
+ ],
+ q(7171) => [
+ q(Weyto),
+ ],
+ q(7172) => [
+ q(Maco),
+ ],
+ q(7173) => [
+ q(Warapu),
+ ],
+ q(7174) => [
+ q(Warluwara),
+ ],
+ q(7175) => [
+ q(Warduji),
+ ],
+ q(7176) => [
+ q(Warungu),
+ ],
+ q(7177) => [
+ q(Wiradhuri),
+ ],
+ q(7178) => [
+ q(Wariyangga),
+ ],
+ q(7179) => [
+ q(Garrwa),
+ ],
+ q(7180) => [
+ q(Warlmanpa),
+ ],
+ q(7181) => [
+ q(Warumungu),
+ ],
+ q(7182) => [
+ q(Warnang),
+ ],
+ q(7183) => [
+ q(Worrorra),
+ ],
+ q(7184) => [
+ q(Waropen),
+ ],
+ q(7185) => [
+ q(Wardaman),
+ ],
+ q(7186) => [
+ q(Waris),
+ ],
+ q(7187) => [
+ q(Waru),
+ ],
+ q(7188) => [
+ q(Waruna),
+ ],
+ q(7189) => [
+ q(Gugu Warra),
+ ],
+ q(7190) => [
+ q(Wae Rana),
+ ],
+ q(7191) => [
+ q(Merwari),
+ ],
+ q(7192) => [
+ q(Waray (Australia)),
+ ],
+ q(7193) => [
+ q(Warembori),
+ ],
+ q(7194) => [
+ q(Wusi),
+ ],
+ q(7195) => [
+ q(Waskia),
+ ],
+ q(7196) => [
+ q(Owenia),
+ ],
+ q(7197) => [
+ q(Wasa),
+ ],
+ q(7198) => [
+ q(Wasu),
+ ],
+ q(7199) => [
+ q(Wotapuri-Katarqalai),
+ ],
+ q(7200) => [
+ q(Watiwa),
+ ],
+ q(7201) => [
+ q(Berta),
+ ],
+ q(7202) => [
+ q(Watakataui),
+ ],
+ q(7203) => [
+ q(Mewati),
+ ],
+ q(7204) => [
+ q(Wotu),
+ ],
+ q(7205) => [
+ q(Wikngenchera),
+ ],
+ q(7206) => [
+ q(Wunambal),
+ ],
+ q(7207) => [
+ q(Wudu),
+ ],
+ q(7208) => [
+ q(Wutunhua),
+ ],
+ q(7209) => [
+ q(Silimo),
+ ],
+ q(7210) => [
+ q(Wumbvu),
+ ],
+ q(7211) => [
+ q(Bungu),
+ ],
+ q(7212) => [
+ q(Wurrugu),
+ ],
+ q(7213) => [
+ q(Wutung),
+ ],
+ q(7214) => [
+ q(Wu Chinese),
+ ],
+ q(7215) => [
+ q(Wuvulu-Aua),
+ ],
+ q(7216) => [
+ q(Wulna),
+ ],
+ q(7217) => [
+ q(Wauyai),
+ ],
+ q(7218) => [
+ q(Waama),
+ ],
+ q(7219) => [
+ q(Wakabunga),
+ ],
+ q(7220) => [
+ q(Wetamut),
+ q(Dorig),
+ ],
+ q(7221) => [
+ q(Warrwa),
+ ],
+ q(7222) => [
+ q(Wawa),
+ ],
+ q(7223) => [
+ q(Waxianghua),
+ ],
+ q(7224) => [
+ q(Wyandot),
+ ],
+ q(7225) => [
+ q(Wangaaybuwan-Ngiyambaa),
+ ],
+ q(7226) => [
+ q(Wymysorys),
+ ],
+ q(7227) => [
+ q(Wayoro),
+ ],
+ q(7228) => [
+ q(Western Fijian),
+ ],
+ q(7229) => [
+ q(Andalusian Arabic),
+ ],
+ q(7230) => [
+ q(Sambe),
+ ],
+ q(7231) => [
+ q(Kachari),
+ ],
+ q(7232) => [
+ q(Adai),
+ ],
+ q(7233) => [
+ q(Aequian),
+ ],
+ q(7234) => [
+ q(Aghwan),
+ ],
+ q(7235) => [
+ q(Kaimbe),
+ ],
+ q(7236) => [
+ q(/Xam),
+ ],
+ q(7237) => [
+ q(Xamtanga),
+ ],
+ q(7238) => [
+ q(Khao),
+ ],
+ q(7239) => [
+ q(Apalachee),
+ ],
+ q(7240) => [
+ q(Aquitanian),
+ ],
+ q(7241) => [
+ q(Karami),
+ ],
+ q(7242) => [
+ q(Kamas),
+ ],
+ q(7243) => [
+ q(Katawixi),
+ ],
+ q(7244) => [
+ q(Kauwera),
+ ],
+ q(7245) => [
+ q(Xavante),
+ ],
+ q(7246) => [
+ q(Kawaiisu),
+ ],
+ q(7247) => [
+ q(Kayan Mahakam),
+ ],
+ q(7248) => [
+ q(Kamba (Brazil)),
+ ],
+ q(7249) => [
+ q(Lower Burdekin),
+ ],
+ q(7250) => [
+ q(Bactrian),
+ ],
+ q(7251) => [
+ q(Kombio),
+ ],
+ q(7252) => [
+ q(Middle Breton),
+ ],
+ q(7253) => [
+ q(Kenaboi),
+ ],
+ q(7254) => [
+ q(Bolgarian),
+ ],
+ q(7255) => [
+ q(Kambera),
+ ],
+ q(7256) => [
+ q(Kambiwa),
+ ],
+ q(7257) => [
+ q(Kabixi),
+ ],
+ q(7258) => [
+ q(Cumbric),
+ ],
+ q(7259) => [
+ q(Camunic),
+ ],
+ q(7260) => [
+ q(Celtiberian),
+ ],
+ q(7261) => [
+ q(Cisalpine Gaulish),
+ ],
+ q(7262) => [
+ q(Chemakum),
+ q(Chimakum),
+ ],
+ q(7263) => [
+ q(Classical Armenian),
+ ],
+ q(7264) => [
+ q(Comecrudo),
+ ],
+ q(7265) => [
+ q(Cotoname),
+ ],
+ q(7266) => [
+ q(Chorasmian),
+ ],
+ q(7267) => [
+ q(Carian),
+ ],
+ q(7268) => [
+ q(Classical Tibetan),
+ ],
+ q(7269) => [
+ q(Curonian),
+ ],
+ q(7270) => [
+ q(Chuvantsy),
+ ],
+ q(7271) => [
+ q(Coahuilteco),
+ ],
+ q(7272) => [
+ q(Cayuse),
+ ],
+ q(7273) => [
+ q(Dacian),
+ ],
+ q(7274) => [
+ q(Edomite),
+ ],
+ q(7275) => [
+ q(Malayic Dayak),
+ ],
+ q(7276) => [
+ q(Eblan),
+ ],
+ q(7277) => [
+ q(Hdi),
+ ],
+ q(7278) => [
+ q(//Xegwi),
+ ],
+ q(7279) => [
+ q(Kelo),
+ ],
+ q(7280) => [
+ q(Kembayan),
+ ],
+ q(7281) => [
+ q(Epi-Olmec),
+ ],
+ q(7282) => [
+ q(Xerente),
+ ],
+ q(7283) => [
+ q(Kesawai),
+ ],
+ q(7284) => [
+ q(Xeta),
+ ],
+ q(7285) => [
+ q(Keoru-Ahia),
+ ],
+ q(7286) => [
+ q(Faliscan),
+ ],
+ q(7287) => [
+ q(Galatian),
+ ],
+ q(7288) => [
+ q(Gbin),
+ ],
+ q(7289) => [
+ q(Gabrielino-Fernandeno),
+ ],
+ q(7290) => [
+ q(Galindan),
+ ],
+ q(7291) => [
+ q(Garza),
+ ],
+ q(7292) => [
+ q(Unggumi),
+ ],
+ q(7293) => [
+ q(Harami),
+ ],
+ q(7294) => [
+ q(Hunnic),
+ ],
+ q(7295) => [
+ q(Hadrami),
+ ],
+ q(7296) => [
+ q(Khetrani),
+ ],
+ q(7297) => [
+ q(Hernican),
+ ],
+ q(7298) => [
+ q(Hattic),
+ ],
+ q(7299) => [
+ q(Hurrian),
+ ],
+ q(7300) => [
+ q(Khua),
+ ],
+ q(7301) => [
+ q(Xiandao),
+ ],
+ q(7302) => [
+ q(Iberian),
+ ],
+ q(7303) => [
+ q(Xiri),
+ ],
+ q(7304) => [
+ q(Illyrian),
+ ],
+ q(7305) => [
+ q(Xinca),
+ ],
+ q(7306) => [
+ q(Xipinawa),
+ ],
+ q(7307) => [
+ q(Xiriana),
+ ],
+ q(7308) => [
+ q(Indus Valley Language),
+ ],
+ q(7309) => [
+ q(Xipaya),
+ ],
+ q(7310) => [
+ q(Kalkoti),
+ ],
+ q(7311) => [
+ q(Northern Nago),
+ ],
+ q(7312) => [
+ q(Kho'ini),
+ ],
+ q(7313) => [
+ q(Mendalam Kayan),
+ ],
+ q(7314) => [
+ q(Kereho),
+ ],
+ q(7315) => [
+ q(Khengkha),
+ ],
+ q(7316) => [
+ q(Kagoro),
+ ],
+ q(7317) => [
+ q(Karahawyana),
+ ],
+ q(7318) => [
+ q(Kenyan Sign Language),
+ ],
+ q(7319) => [
+ q(Kajali),
+ ],
+ q(7320) => [
+ q(Kaco'),
+ ],
+ q(7321) => [
+ q(Mainstream Kenyah),
+ ],
+ q(7322) => [
+ q(Kayan River Kayan),
+ ],
+ q(7323) => [
+ q(Kiorr),
+ ],
+ q(7324) => [
+ q(Kabatei),
+ ],
+ q(7325) => [
+ q(Koroni),
+ ],
+ q(7326) => [
+ q(Xakriaba),
+ ],
+ q(7327) => [
+ q(Kumbewaha),
+ ],
+ q(7328) => [
+ q(Kantosi),
+ ],
+ q(7329) => [
+ q(Kaamba),
+ ],
+ q(7330) => [
+ q(Kgalagadi),
+ ],
+ q(7331) => [
+ q(Kembra),
+ ],
+ q(7332) => [
+ q(Karore),
+ ],
+ q(7333) => [
+ q(Uma' Lasan),
+ ],
+ q(7334) => [
+ q(Kurtokha),
+ ],
+ q(7335) => [
+ q(Kamula),
+ ],
+ q(7336) => [
+ q(Loup B),
+ ],
+ q(7337) => [
+ q(Lycian),
+ ],
+ q(7338) => [
+ q(Lydian),
+ ],
+ q(7339) => [
+ q(Lemnian),
+ ],
+ q(7340) => [
+ q(Ligurian (Ancient)),
+ ],
+ q(7341) => [
+ q(Liburnian),
+ ],
+ q(7342) => [
+ q(Alanic),
+ ],
+ q(7343) => [
+ q(Loup A),
+ ],
+ q(7344) => [
+ q(Lepontic),
+ ],
+ q(7345) => [
+ q(Lusitanian),
+ ],
+ q(7346) => [
+ q(Cuneiform Luwian),
+ ],
+ q(7347) => [
+ q(Elymian),
+ ],
+ q(7348) => [
+ q(Mushungulu),
+ ],
+ q(7349) => [
+ q(Mbonga),
+ ],
+ q(7350) => [
+ q(Makhuwa-Marrevone),
+ ],
+ q(7351) => [
+ q(Mbudum),
+ ],
+ q(7352) => [
+ q(Median),
+ ],
+ q(7353) => [
+ q(Mingrelian),
+ ],
+ q(7354) => [
+ q(Mengaka),
+ ],
+ q(7355) => [
+ q(Kuku-Muminh),
+ ],
+ q(7356) => [
+ q(Majera),
+ ],
+ q(7357) => [
+ q(Ancient Macedonian),
+ ],
+ q(7358) => [
+ q(Malaysian Sign Language),
+ ],
+ q(7359) => [
+ q(Manado Malay),
+ ],
+ q(7360) => [
+ q(Manichaean Middle Persian),
+ ],
+ q(7361) => [
+ q(Morerebi),
+ ],
+ q(7362) => [
+ q(Kuku-Mu'inh),
+ ],
+ q(7363) => [
+ q(Kuku-Mangk),
+ ],
+ q(7364) => [
+ q(Meroitic),
+ ],
+ q(7365) => [
+ q(Moroccan Sign Language),
+ ],
+ q(7366) => [
+ q(Matbat),
+ ],
+ q(7367) => [
+ q(Kamu),
+ ],
+ q(7368) => [
+ q(Antankarana Malagasy),
+ q(Tankarana Malagasy),
+ ],
+ q(7369) => [
+ q(Tsimihety Malagasy),
+ ],
+ q(7370) => [
+ q(Maden),
+ ],
+ q(7371) => [
+ q(Mayaguduna),
+ ],
+ q(7372) => [
+ q(Mori Bawah),
+ ],
+ q(7373) => [
+ q(Ancient North Arabian),
+ ],
+ q(7374) => [
+ q(Kanakanabu),
+ ],
+ q(7375) => [
+ q(Middle Mongolian),
+ ],
+ q(7376) => [
+ q(Kuanhua),
+ ],
+ q(7377) => [
+ q(Northern Kankanay),
+ ],
+ q(7378) => [
+ q(Anglo-Norman),
+ ],
+ q(7379) => [
+ q(Kangri),
+ ],
+ q(7380) => [
+ q(Kanashi),
+ ],
+ q(7381) => [
+ q(Narragansett),
+ ],
+ q(7382) => [
+ q(Kenzi),
+ q(Mattoki),
+ ],
+ q(7383) => [
+ q(O'chi'chi'),
+ ],
+ q(7384) => [
+ q(Kokoda),
+ ],
+ q(7385) => [
+ q(Soga),
+ ],
+ q(7386) => [
+ q(Kominimung),
+ ],
+ q(7387) => [
+ q(Xokleng),
+ ],
+ q(7388) => [
+ q(Komo (Sudan)),
+ ],
+ q(7389) => [
+ q(Konkomba),
+ ],
+ q(7390) => [
+ q(Xukuru),
+ ],
+ q(7391) => [
+ q(Kopar),
+ ],
+ q(7392) => [
+ q(Korubo),
+ ],
+ q(7393) => [
+ q(Kowaki),
+ ],
+ q(7394) => [
+ q(Pecheneg),
+ ],
+ q(7395) => [
+ q(Liberia Kpelle),
+ ],
+ q(7396) => [
+ q(Phrygian),
+ ],
+ q(7397) => [
+ q(Pictish),
+ ],
+ q(7398) => [
+ q(Mpalitjanh),
+ ],
+ q(7399) => [
+ q(Kulina Pano),
+ ],
+ q(7400) => [
+ q(Pumpokol),
+ ],
+ q(7401) => [
+ q(Kapinawa),
+ ],
+ q(7402) => [
+ q(Pochutec),
+ ],
+ q(7403) => [
+ q(Puyo-Paekche),
+ ],
+ q(7404) => [
+ q(Mohegan-Pequot),
+ ],
+ q(7405) => [
+ q(Parthian),
+ ],
+ q(7406) => [
+ q(Pisidian),
+ ],
+ q(7407) => [
+ q(Punic),
+ ],
+ q(7408) => [
+ q(Puyo),
+ ],
+ q(7409) => [
+ q(Karakhanid),
+ ],
+ q(7410) => [
+ q(Qatabanian),
+ ],
+ q(7411) => [
+ q(Kraho),
+ ],
+ q(7412) => [
+ q(Eastern Karaboro),
+ ],
+ q(7413) => [
+ q(Kreye),
+ ],
+ q(7414) => [
+ q(Krikati-Timbira),
+ ],
+ q(7415) => [
+ q(Armazic),
+ ],
+ q(7416) => [
+ q(Arin),
+ ],
+ q(7417) => [
+ q(Raetic),
+ ],
+ q(7418) => [
+ q(Aranama-Tamique),
+ ],
+ q(7419) => [
+ q(Marriammu),
+ ],
+ q(7420) => [
+ q(Karawa),
+ ],
+ q(7421) => [
+ q(Sabaean),
+ ],
+ q(7422) => [
+ q(Sambal),
+ ],
+ q(7423) => [
+ q(Scythian),
+ ],
+ q(7424) => [
+ q(Sidetic),
+ ],
+ q(7425) => [
+ q(Sempan),
+ ],
+ q(7426) => [
+ q(Shamang),
+ ],
+ q(7427) => [
+ q(Sio),
+ ],
+ q(7428) => [
+ q(Subi),
+ ],
+ q(7429) => [
+ q(South Slavey),
+ ],
+ q(7430) => [
+ q(Kasem),
+ ],
+ q(7431) => [
+ q(Sanga (Nigeria)),
+ ],
+ q(7432) => [
+ q(Solano),
+ ],
+ q(7433) => [
+ q(Silopi),
+ ],
+ q(7434) => [
+ q(Makhuwa-Saka),
+ ],
+ q(7435) => [
+ q(Sherpa),
+ ],
+ q(7436) => [
+ q(Assan),
+ ],
+ q(7437) => [
+ q(Sanuma),
+ ],
+ q(7438) => [
+ q(Sudovian),
+ ],
+ q(7439) => [
+ q(Saisiyat),
+ ],
+ q(7440) => [
+ q(Alcozauca Mixtec),
+ ],
+ q(7441) => [
+ q(Chazumba Mixtec),
+ ],
+ q(7442) => [
+ q(Katcha-Kadugli-Miri),
+ ],
+ q(7443) => [
+ q(Diuxi-Tilantongo Mixtec),
+ ],
+ q(7444) => [
+ q(Ketengban),
+ ],
+ q(7445) => [
+ q(Transalpine Gaulish),
+ ],
+ q(7446) => [
+ q(Sinicahua Mixtec),
+ ],
+ q(7447) => [
+ q(San Juan Teita Mixtec),
+ ],
+ q(7448) => [
+ q(Tijaltepec Mixtec),
+ ],
+ q(7449) => [
+ q(Magdalena Penasco Mixtec),
+ ],
+ q(7450) => [
+ q(Northern Tlaxiaco Mixtec),
+ ],
+ q(7451) => [
+ q(Tokharian A),
+ ],
+ q(7452) => [
+ q(San Miguel Piedras Mixtec),
+ ],
+ q(7453) => [
+ q(Tumshuqese),
+ ],
+ q(7454) => [
+ q(Early Tripuri),
+ ],
+ q(7455) => [
+ q(Sindihui Mixtec),
+ ],
+ q(7456) => [
+ q(Tacahua Mixtec),
+ ],
+ q(7457) => [
+ q(Cuyamecalco Mixtec),
+ ],
+ q(7458) => [
+ q(Tawande),
+ ],
+ q(7459) => [
+ q(Yoloxochitl Mixtec),
+ ],
+ q(7460) => [
+ q(Tasmanian),
+ ],
+ q(7461) => [
+ q(Alu Kurumba),
+ ],
+ q(7462) => [
+ q(Betta Kurumba),
+ ],
+ q(7463) => [
+ q(Umiida),
+ ],
+ q(7464) => [
+ q(Kunigami),
+ ],
+ q(7465) => [
+ q(Jennu Kurumba),
+ ],
+ q(7466) => [
+ q(Umbrian),
+ ],
+ q(7467) => [
+ q(Unggarranggu),
+ ],
+ q(7468) => [
+ q(Kuo),
+ ],
+ q(7469) => [
+ q(Upper Umpqua),
+ ],
+ q(7470) => [
+ q(Urartian),
+ ],
+ q(7471) => [
+ q(Kuthant),
+ ],
+ q(7472) => [
+ q(Kxoe),
+ ],
+ q(7473) => [
+ q(Venetic),
+ ],
+ q(7474) => [
+ q(Kamviri),
+ ],
+ q(7475) => [
+ q(Vandalic),
+ ],
+ q(7476) => [
+ q(Volscian),
+ ],
+ q(7477) => [
+ q(Vestinian),
+ ],
+ q(7478) => [
+ q(Kwaza),
+ ],
+ q(7479) => [
+ q(Woccon),
+ ],
+ q(7480) => [
+ q(Xwela Gbe),
+ ],
+ q(7481) => [
+ q(Kwegu),
+ ],
+ q(7482) => [
+ q(Western Xwla Gbe),
+ ],
+ q(7483) => [
+ q(Written Oirat),
+ ],
+ q(7484) => [
+ q(Kwerba Mamberamo),
+ ],
+ q(7485) => [
+ q(Boro (Ghana)),
+ ],
+ q(7486) => [
+ q(Ke'o),
+ ],
+ q(7487) => [
+ q(Koropo),
+ ],
+ q(7488) => [
+ q(Tambora),
+ ],
+ q(7489) => [
+ q(Yalakalore),
+ ],
+ q(7490) => [
+ q(Yorta Yorta),
+ ],
+ q(7491) => [
+ q(Zhang-Zhung),
+ ],
+ q(7492) => [
+ q(Zemgalian),
+ ],
+ q(7493) => [
+ q(Ancient Zapotec),
+ ],
+ q(7494) => [
+ q(Yaminahua),
+ ],
+ q(7495) => [
+ q(Yuhup),
+ ],
+ q(7496) => [
+ q(Pass Valley Yali),
+ ],
+ q(7497) => [
+ q(Yagua),
+ ],
+ q(7498) => [
+ q(Pume),
+ ],
+ q(7499) => [
+ q(Yaka (Democratic Republic of Congo)),
+ ],
+ q(7500) => [
+ q(Yamana),
+ ],
+ q(7501) => [
+ q(Yazgulyam),
+ ],
+ q(7502) => [
+ q(Yagnobi),
+ ],
+ q(7503) => [
+ q(Banda-Yangere),
+ ],
+ q(7504) => [
+ q(Yakama),
+ ],
+ q(7505) => [
+ q(Yalunka),
+ ],
+ q(7506) => [
+ q(Yamba),
+ ],
+ q(7507) => [
+ q(Mayangna),
+ ],
+ q(7508) => [
+ q(Yaqui),
+ ],
+ q(7509) => [
+ q(Yabarana),
+ ],
+ q(7510) => [
+ q(Nugunu (Cameroon)),
+ ],
+ q(7511) => [
+ q(Yambeta),
+ ],
+ q(7512) => [
+ q(Yuwana),
+ ],
+ q(7513) => [
+ q(Yangben),
+ ],
+ q(7514) => [
+ q(Yawalapiti),
+ ],
+ q(7515) => [
+ q(Yauma),
+ ],
+ q(7516) => [
+ q(Agwagwune),
+ ],
+ q(7517) => [
+ q(Lokaa),
+ ],
+ q(7518) => [
+ q(Yala),
+ ],
+ q(7519) => [
+ q(Yemba),
+ ],
+ q(7520) => [
+ q(West Yugur),
+ ],
+ q(7521) => [
+ q(Yakha),
+ ],
+ q(7522) => [
+ q(Yamphu),
+ ],
+ q(7523) => [
+ q(Hasha),
+ ],
+ q(7524) => [
+ q(Bokha),
+ ],
+ q(7525) => [
+ q(Yukuben),
+ ],
+ q(7526) => [
+ q(Yaben),
+ ],
+ q(7527) => [
+ q(Yabaana),
+ ],
+ q(7528) => [
+ q(Yabong),
+ ],
+ q(7529) => [
+ q(Yawiyo),
+ ],
+ q(7530) => [
+ q(Yaweyuha),
+ ],
+ q(7531) => [
+ q(Chesu),
+ ],
+ q(7532) => [
+ q(Lolopo),
+ ],
+ q(7533) => [
+ q(Yucuna),
+ ],
+ q(7534) => [
+ q(Chepya),
+ ],
+ q(7535) => [
+ q(Eastern Yiddish),
+ ],
+ q(7536) => [
+ q(Yangum Dey),
+ ],
+ q(7537) => [
+ q(Yidgha),
+ ],
+ q(7538) => [
+ q(Yoidik),
+ ],
+ q(7539) => [
+ q(Yiddish Sign Language),
+ ],
+ q(7540) => [
+ q(Ravula),
+ ],
+ q(7541) => [
+ q(Yeniche),
+ ],
+ q(7542) => [
+ q(Yimas),
+ ],
+ q(7543) => [
+ q(Yeni),
+ ],
+ q(7544) => [
+ q(Yevanic),
+ ],
+ q(7545) => [
+ q(Yela),
+ ],
+ q(7546) => [
+ q(Tarok),
+ ],
+ q(7547) => [
+ q(Nyankpa),
+ ],
+ q(7548) => [
+ q(Yetfa),
+ ],
+ q(7549) => [
+ q(Yerukula),
+ ],
+ q(7550) => [
+ q(Yapunda),
+ ],
+ q(7551) => [
+ q(Yeyi),
+ ],
+ q(7552) => [
+ q(Malyangapa),
+ ],
+ q(7553) => [
+ q(Yangum Gel),
+ ],
+ q(7554) => [
+ q(Yagomi),
+ ],
+ q(7555) => [
+ q(Gepo),
+ ],
+ q(7556) => [
+ q(Yagaria),
+ ],
+ q(7557) => [
+ q(Yagwoia),
+ ],
+ q(7558) => [
+ q(Baha Buyang),
+ ],
+ q(7559) => [
+ q(Judeo-Iraqi Arabic),
+ ],
+ q(7560) => [
+ q(Hlepho Phowa),
+ ],
+ q(7561) => [
+ q(Yinggarda),
+ ],
+ q(7562) => [
+ q(Wusa Nasu),
+ ],
+ q(7563) => [
+ q(Western Yiddish),
+ ],
+ q(7564) => [
+ q(Yidiny),
+ ],
+ q(7565) => [
+ q(Yindjibarndi),
+ ],
+ q(7566) => [
+ q(Dongshanba Lalo),
+ ],
+ q(7567) => [
+ q(Yindjilandji),
+ ],
+ q(7568) => [
+ q(Yimchungru Naga),
+ ],
+ q(7569) => [
+ q(Yinchia),
+ ],
+ q(7570) => [
+ q(Pholo),
+ ],
+ q(7571) => [
+ q(Miqie),
+ ],
+ q(7572) => [
+ q(North Awyu),
+ ],
+ q(7573) => [
+ q(Yis),
+ ],
+ q(7574) => [
+ q(Eastern Lalu),
+ ],
+ q(7575) => [
+ q(Awu),
+ ],
+ q(7576) => [
+ q(Northern Nisu),
+ ],
+ q(7577) => [
+ q(Axi Yi),
+ ],
+ q(7578) => [
+ q(Yir Yoront),
+ ],
+ q(7579) => [
+ q(Azhe),
+ ],
+ q(7580) => [
+ q(Yakan),
+ ],
+ q(7581) => [
+ q(Northern Yukaghir),
+ ],
+ q(7582) => [
+ q(Yoke),
+ ],
+ q(7583) => [
+ q(Yakaikeke),
+ ],
+ q(7584) => [
+ q(Khlula),
+ ],
+ q(7585) => [
+ q(Kap),
+ ],
+ q(7586) => [
+ q(Kua-nsi),
+ ],
+ q(7587) => [
+ q(Yasa),
+ ],
+ q(7588) => [
+ q(Yekora),
+ ],
+ q(7589) => [
+ q(Kathu),
+ ],
+ q(7590) => [
+ q(Kuamasi),
+ ],
+ q(7591) => [
+ q(Yakoma),
+ ],
+ q(7592) => [
+ q(Yaul),
+ ],
+ q(7593) => [
+ q(Yaleba),
+ ],
+ q(7594) => [
+ q(Yele),
+ ],
+ q(7595) => [
+ q(Yelogu),
+ ],
+ q(7596) => [
+ q(Angguruk Yali),
+ ],
+ q(7597) => [
+ q(Yil),
+ ],
+ q(7598) => [
+ q(Limi),
+ ],
+ q(7599) => [
+ q(Langnian Buyang),
+ ],
+ q(7600) => [
+ q(Naluo Yi),
+ ],
+ q(7601) => [
+ q(Yalarnnga),
+ ],
+ q(7602) => [
+ q(Aribwaung),
+ ],
+ q(7603) => [
+ q(Nyalayu),
+ ],
+ q(7604) => [
+ q(Yambes),
+ ],
+ q(7605) => [
+ q(Southern Muji),
+ ],
+ q(7606) => [
+ q(Muda),
+ ],
+ q(7607) => [
+ q(Yameo),
+ ],
+ q(7608) => [
+ q(Yamongeri),
+ ],
+ q(7609) => [
+ q(Mili),
+ ],
+ q(7610) => [
+ q(Moji),
+ ],
+ q(7611) => [
+ q(Makwe),
+ ],
+ q(7612) => [
+ q(Iamalele),
+ ],
+ q(7613) => [
+ q(Maay),
+ ],
+ q(7614) => [
+ q(Yamna),
+ q(Sunum),
+ ],
+ q(7615) => [
+ q(Yangum Mon),
+ ],
+ q(7616) => [
+ q(Yamap),
+ ],
+ q(7617) => [
+ q(Qila Muji),
+ ],
+ q(7618) => [
+ q(Malasar),
+ ],
+ q(7619) => [
+ q(Mysian),
+ ],
+ q(7620) => [
+ q(Mator-Taygi-Karagas),
+ ],
+ q(7621) => [
+ q(Northern Muji),
+ ],
+ q(7622) => [
+ q(Muzi),
+ ],
+ q(7623) => [
+ q(Aluo),
+ ],
+ q(7624) => [
+ q(Yandruwandha),
+ ],
+ q(7625) => [
+ q(Lang'e),
+ ],
+ q(7626) => [
+ q(Yango),
+ ],
+ q(7627) => [
+ q(Yangho),
+ ],
+ q(7628) => [
+ q(Naukan Yupik),
+ ],
+ q(7629) => [
+ q(Yangulam),
+ ],
+ q(7630) => [
+ q(Yana),
+ ],
+ q(7631) => [
+ q(Yong),
+ ],
+ q(7632) => [
+ q(Yendang),
+ ],
+ q(7633) => [
+ q(Yansi),
+ ],
+ q(7634) => [
+ q(Yahuna),
+ ],
+ q(7635) => [
+ q(Yoba),
+ ],
+ q(7636) => [
+ q(Yogad),
+ ],
+ q(7637) => [
+ q(Yonaguni),
+ ],
+ q(7638) => [
+ q(Yokuts),
+ ],
+ q(7639) => [
+ q(Yola),
+ ],
+ q(7640) => [
+ q(Yombe),
+ ],
+ q(7641) => [
+ q(Yongkom),
+ ],
+ q(7642) => [
+ q(Yos),
+ ],
+ q(7643) => [
+ q(Yotti),
+ ],
+ q(7644) => [
+ q(Yoron),
+ ],
+ q(7645) => [
+ q(Yoy),
+ ],
+ q(7646) => [
+ q(Phala),
+ ],
+ q(7647) => [
+ q(Labo Phowa),
+ ],
+ q(7648) => [
+ q(Phola),
+ ],
+ q(7649) => [
+ q(Phupha),
+ ],
+ q(7650) => [
+ q(Phuma),
+ ],
+ q(7651) => [
+ q(Ani Phowa),
+ ],
+ q(7652) => [
+ q(Alo Phola),
+ ],
+ q(7653) => [
+ q(Phupa),
+ ],
+ q(7654) => [
+ q(Phuza),
+ ],
+ q(7655) => [
+ q(Yerakai),
+ ],
+ q(7656) => [
+ q(Yareba),
+ ],
+ q(7657) => [
+ q(Yaoure),
+ ],
+ q(7658) => [
+ q(Yari),
+ ],
+ q(7659) => [
+ q(Nenets),
+ ],
+ q(7660) => [
+ q(Nhengatu),
+ ],
+ q(7661) => [
+ q(Yerong),
+ ],
+ q(7662) => [
+ q(Yarsun),
+ ],
+ q(7663) => [
+ q(Yarawata),
+ ],
+ q(7664) => [
+ q(Yassic),
+ ],
+ q(7665) => [
+ q(Samatao),
+ ],
+ q(7666) => [
+ q(Sonaga),
+ ],
+ q(7667) => [
+ q(Yugoslavian Sign Language),
+ ],
+ q(7668) => [
+ q(Sani),
+ ],
+ q(7669) => [
+ q(Nisi (China)),
+ ],
+ q(7670) => [
+ q(Southern Lolopo),
+ ],
+ q(7671) => [
+ q(Sirenik Yupik),
+ ],
+ q(7672) => [
+ q(Yessan-Mayo),
+ ],
+ q(7673) => [
+ q(Sanie),
+ ],
+ q(7674) => [
+ q(Talu),
+ ],
+ q(7675) => [
+ q(Tanglang),
+ ],
+ q(7676) => [
+ q(Thopho),
+ ],
+ q(7677) => [
+ q(Yout Wam),
+ ],
+ q(7678) => [
+ q(Yucateco),
+ q(Yucatec Maya),
+ ],
+ q(7679) => [
+ q(Yugambal),
+ ],
+ q(7680) => [
+ q(Yuchi),
+ ],
+ q(7681) => [
+ q(Judeo-Tripolitanian Arabic),
+ ],
+ q(7682) => [
+ q(Yue Chinese),
+ ],
+ q(7683) => [
+ q(Havasupai-Walapai-Yavapai),
+ ],
+ q(7684) => [
+ q(Yug),
+ ],
+ q(7685) => [
+ q(Yuruti),
+ ],
+ q(7686) => [
+ q(Karkar-Yuri),
+ ],
+ q(7687) => [
+ q(Yuki),
+ ],
+ q(7688) => [
+ q(Yulu),
+ ],
+ q(7689) => [
+ q(Quechan),
+ ],
+ q(7690) => [
+ q(Bena (Nigeria)),
+ ],
+ q(7691) => [
+ q(Yukpa),
+ ],
+ q(7692) => [
+ q(Yuqui),
+ ],
+ q(7693) => [
+ q(Yurok),
+ ],
+ q(7694) => [
+ q(Yopno),
+ ],
+ q(7695) => [
+ q(Yugh),
+ ],
+ q(7696) => [
+ q(Yau (Morobe Province)),
+ ],
+ q(7697) => [
+ q(Southern Yukaghir),
+ ],
+ q(7698) => [
+ q(East Yugur),
+ ],
+ q(7699) => [
+ q(Yuracare),
+ ],
+ q(7700) => [
+ q(Yawa),
+ ],
+ q(7701) => [
+ q(Yavitero),
+ ],
+ q(7702) => [
+ q(Kalou),
+ ],
+ q(7703) => [
+ q(Western Lalu),
+ ],
+ q(7704) => [
+ q(Yawanawa),
+ ],
+ q(7705) => [
+ q(Wuding-Luquan Yi),
+ ],
+ q(7706) => [
+ q(Yawuru),
+ ],
+ q(7707) => [
+ q(Xishanba Lalo),
+ q(Central Lalo),
+ ],
+ q(7708) => [
+ q(Wumeng Nasu),
+ ],
+ q(7709) => [
+ q(Yawarawarga),
+ ],
+ q(7710) => [
+ q(Yagara),
+ ],
+ q(7711) => [
+ q(Yabula Yabula),
+ ],
+ q(7712) => [
+ q(Yau (Sandaun Province)),
+ ],
+ q(7713) => [
+ q(Ayizi),
+ ],
+ q(7714) => [
+ q(E'ma Buyang),
+ ],
+ q(7715) => [
+ q(Zokhuo),
+ ],
+ q(7716) => [
+ q(Sierra de Juarez Zapotec),
+ ],
+ q(7717) => [
+ q(San Juan Guelavia Zapotec),
+ ],
+ q(7718) => [
+ q(Ocotlan Zapotec),
+ ],
+ q(7719) => [
+ q(Cajonos Zapotec),
+ ],
+ q(7720) => [
+ q(Yareni Zapotec),
+ ],
+ q(7721) => [
+ q(Ayoquesco Zapotec),
+ ],
+ q(7722) => [
+ q(Zaghawa),
+ ],
+ q(7723) => [
+ q(Zangwal),
+ ],
+ q(7724) => [
+ q(Isthmus Zapotec),
+ ],
+ q(7725) => [
+ q(Zaramo),
+ ],
+ q(7726) => [
+ q(Zanaki),
+ ],
+ q(7727) => [
+ q(Zauzou),
+ ],
+ q(7728) => [
+ q(Miahuatlan Zapotec),
+ ],
+ q(7729) => [
+ q(Ozolotepec Zapotec),
+ ],
+ q(7730) => [
+ q(Aloapam Zapotec),
+ ],
+ q(7731) => [
+ q(Rincon Zapotec),
+ ],
+ q(7732) => [
+ q(Santo Domingo Albarradas Zapotec),
+ ],
+ q(7733) => [
+ q(Tabaa Zapotec),
+ ],
+ q(7734) => [
+ q(Zangskari),
+ ],
+ q(7735) => [
+ q(Yatzachi Zapotec),
+ ],
+ q(7736) => [
+ q(Mitla Zapotec),
+ ],
+ q(7737) => [
+ q(Xadani Zapotec),
+ ],
+ q(7738) => [
+ q(Zayse-Zergulla),
+ q(Zaysete),
+ ],
+ q(7739) => [
+ q(Zari),
+ ],
+ q(7740) => [
+ q(Central Berawan),
+ ],
+ q(7741) => [
+ q(East Berawan),
+ ],
+ q(7742) => [
+ q(Batui),
+ ],
+ q(7743) => [
+ q(West Berawan),
+ ],
+ q(7744) => [
+ q(Coatecas Altas Zapotec),
+ ],
+ q(7745) => [
+ q(Central Hongshuihe Zhuang),
+ ],
+ q(7746) => [
+ q(Ngazidja Comorian),
+ ],
+ q(7747) => [
+ q(Zeeuws),
+ ],
+ q(7748) => [
+ q(Zenag),
+ ],
+ q(7749) => [
+ q(Eastern Hongshuihe Zhuang),
+ ],
+ q(7750) => [
+ q(Kinga),
+ ],
+ q(7751) => [
+ q(Guibei Zhuang),
+ ],
+ q(7752) => [
+ q(Minz Zhuang),
+ ],
+ q(7753) => [
+ q(Guibian Zhuang),
+ ],
+ q(7754) => [
+ q(Magori),
+ ],
+ q(7755) => [
+ q(Zhaba),
+ ],
+ q(7756) => [
+ q(Dai Zhuang),
+ ],
+ q(7757) => [
+ q(Zhire),
+ ],
+ q(7758) => [
+ q(Nong Zhuang),
+ ],
+ q(7759) => [
+ q(Zhoa),
+ ],
+ q(7760) => [
+ q(Zia),
+ ],
+ q(7761) => [
+ q(Zimbabwe Sign Language),
+ ],
+ q(7762) => [
+ q(Zimakani),
+ ],
+ q(7763) => [
+ q(Zialo),
+ ],
+ q(7764) => [
+ q(Mesme),
+ ],
+ q(7765) => [
+ q(Zinza),
+ ],
+ q(7766) => [
+ q(Ziriya),
+ ],
+ q(7767) => [
+ q(Zigula),
+ ],
+ q(7768) => [
+ q(Zizilivakan),
+ ],
+ q(7769) => [
+ q(Kaimbulawa),
+ ],
+ q(7770) => [
+ q(Koibal),
+ ],
+ q(7771) => [
+ q(Kadu),
+ ],
+ q(7772) => [
+ q(Koguryo),
+ ],
+ q(7773) => [
+ q(Khorezmian),
+ ],
+ q(7774) => [
+ q(Karankawa),
+ ],
+ q(7775) => [
+ q(Kanan),
+ ],
+ q(7776) => [
+ q(Kott),
+ ],
+ q(7777) => [
+ q(Sao Paulo Kaingang),
+ ],
+ q(7778) => [
+ q(Zakhring),
+ ],
+ q(7779) => [
+ q(Kitan),
+ ],
+ q(7780) => [
+ q(Kaurna),
+ ],
+ q(7781) => [
+ q(Krevinian),
+ ],
+ q(7782) => [
+ q(Khazar),
+ ],
+ q(7783) => [
+ q(Liujiang Zhuang),
+ ],
+ q(7784) => [
+ q(Malay (individual language)),
+ ],
+ q(7785) => [
+ q(Lianshan Zhuang),
+ ],
+ q(7786) => [
+ q(Liuqian Zhuang),
+ ],
+ q(7787) => [
+ q(Manda (Australia)),
+ ],
+ q(7788) => [
+ q(Zimba),
+ ],
+ q(7789) => [
+ q(Margany),
+ ],
+ q(7790) => [
+ q(Maridan),
+ ],
+ q(7791) => [
+ q(Mangerr),
+ ],
+ q(7792) => [
+ q(Mfinu),
+ ],
+ q(7793) => [
+ q(Marti Ke),
+ ],
+ q(7794) => [
+ q(Makolkol),
+ ],
+ q(7795) => [
+ q(Negeri Sembilan Malay),
+ ],
+ q(7796) => [
+ q(Maridjabin),
+ ],
+ q(7797) => [
+ q(Mandandanyi),
+ ],
+ q(7798) => [
+ q(Madngele),
+ ],
+ q(7799) => [
+ q(Marimanindji),
+ ],
+ q(7800) => [
+ q(Mbangwe),
+ ],
+ q(7801) => [
+ q(Molo),
+ ],
+ q(7802) => [
+ q(Mpuono),
+ ],
+ q(7803) => [
+ q(Mituku),
+ ],
+ q(7804) => [
+ q(Maranunggu),
+ ],
+ q(7805) => [
+ q(Mbesa),
+ ],
+ q(7806) => [
+ q(Maringarr),
+ ],
+ q(7807) => [
+ q(Muruwari),
+ ],
+ q(7808) => [
+ q(Mbariman-Gudhinma),
+ ],
+ q(7809) => [
+ q(Mbo (Democratic Republic of Congo)),
+ ],
+ q(7810) => [
+ q(Bomitaba),
+ ],
+ q(7811) => [
+ q(Mariyedi),
+ ],
+ q(7812) => [
+ q(Mbandja),
+ ],
+ q(7813) => [
+ q(Zan Gula),
+ ],
+ q(7814) => [
+ q(Zande (individual language)),
+ ],
+ q(7815) => [
+ q(Mang),
+ ],
+ q(7816) => [
+ q(Manangkari),
+ ],
+ q(7817) => [
+ q(Mangas),
+ ],
+ q(7818) => [
+ q(Copainala Zoque),
+ ],
+ q(7819) => [
+ q(Chimalapa Zoque),
+ ],
+ q(7820) => [
+ q(Zou),
+ ],
+ q(7821) => [
+ q(Asuncion Mixtepec Zapotec),
+ ],
+ q(7822) => [
+ q(Tabasco Zoque),
+ ],
+ q(7823) => [
+ q(Rayon Zoque),
+ ],
+ q(7824) => [
+ q(Francisco Leon Zoque),
+ ],
+ q(7825) => [
+ q(Lachiguiri Zapotec),
+ ],
+ q(7826) => [
+ q(Yautepec Zapotec),
+ ],
+ q(7827) => [
+ q(Choapan Zapotec),
+ ],
+ q(7828) => [
+ q(Southeastern Ixtlan Zapotec),
+ ],
+ q(7829) => [
+ q(Petapa Zapotec),
+ ],
+ q(7830) => [
+ q(San Pedro Quiatoni Zapotec),
+ ],
+ q(7831) => [
+ q(Guevea De Humboldt Zapotec),
+ ],
+ q(7832) => [
+ q(Totomachapan Zapotec),
+ ],
+ q(7833) => [
+ q(Santa Maria Quiegolani Zapotec),
+ ],
+ q(7834) => [
+ q(Quiavicuzas Zapotec),
+ ],
+ q(7835) => [
+ q(Tlacolulita Zapotec),
+ ],
+ q(7836) => [
+ q(Lachixio Zapotec),
+ ],
+ q(7837) => [
+ q(Mixtepec Zapotec),
+ ],
+ q(7838) => [
+ q(Santa Ines Yatzechi Zapotec),
+ ],
+ q(7839) => [
+ q(Amatlan Zapotec),
+ ],
+ q(7840) => [
+ q(El Alto Zapotec),
+ ],
+ q(7841) => [
+ q(Zoogocho Zapotec),
+ ],
+ q(7842) => [
+ q(Santiago Xanica Zapotec),
+ ],
+ q(7843) => [
+ q(Coatlan Zapotec),
+ ],
+ q(7844) => [
+ q(San Vicente Coatlan Zapotec),
+ ],
+ q(7845) => [
+ q(Yalalag Zapotec),
+ ],
+ q(7846) => [
+ q(Chichicapan Zapotec),
+ ],
+ q(7847) => [
+ q(Zaniza Zapotec),
+ ],
+ q(7848) => [
+ q(San Baltazar Loxicha Zapotec),
+ ],
+ q(7849) => [
+ q(Mazaltepec Zapotec),
+ ],
+ q(7850) => [
+ q(Texmelucan Zapotec),
+ ],
+ q(7851) => [
+ q(Qiubei Zhuang),
+ ],
+ q(7852) => [
+ q(Kara (Korea)),
+ ],
+ q(7853) => [
+ q(Mirgan),
+ ],
+ q(7854) => [
+ q(Zerenkel),
+ ],
+ q(7855) => [
+ q(Zaparo),
+ ],
+ q(7856) => [
+ q(Zarphatic),
+ ],
+ q(7857) => [
+ q(Mairasi),
+ ],
+ q(7858) => [
+ q(Sarasira),
+ ],
+ q(7859) => [
+ q(Kaskean),
+ ],
+ q(7860) => [
+ q(Zambian Sign Language),
+ ],
+ q(7861) => [
+ q(Standard Malay),
+ ],
+ q(7862) => [
+ q(Southern Rincon Zapotec),
+ ],
+ q(7863) => [
+ q(Sukurum),
+ ],
+ q(7864) => [
+ q(Elotepec Zapotec),
+ ],
+ q(7865) => [
+ q(Xanaguia Zapotec),
+ ],
+ q(7866) => [
+ q(Lapaguia-Guivini Zapotec),
+ ],
+ q(7867) => [
+ q(San Agustin Mixtepec Zapotec),
+ ],
+ q(7868) => [
+ q(Santa Catarina Albarradas Zapotec),
+ ],
+ q(7869) => [
+ q(Loxicha Zapotec),
+ ],
+ q(7870) => [
+ q(Quioquitani-Quieri Zapotec),
+ ],
+ q(7871) => [
+ q(Tilquiapan Zapotec),
+ ],
+ q(7872) => [
+ q(Tejalapan Zapotec),
+ ],
+ q(7873) => [
+ q(Guila Zapotec),
+ ],
+ q(7874) => [
+ q(Zaachila Zapotec),
+ ],
+ q(7875) => [
+ q(Yatee Zapotec),
+ ],
+ q(7876) => [
+ q(Zeem),
+ ],
+ q(7877) => [
+ q(Tokano),
+ ],
+ q(7878) => [
+ q(Kumzari),
+ ],
+ q(7879) => [
+ q(Zumaya),
+ ],
+ q(7880) => [
+ q(Zay),
+ ],
+ q(7881) => [
+ q(Yongbei Zhuang),
+ ],
+ q(7882) => [
+ q(Yang Zhuang),
+ ],
+ q(7883) => [
+ q(Youjiang Zhuang),
+ ],
+ q(7884) => [
+ q(Yongnan Zhuang),
+ ],
+ q(7885) => [
+ q(Zyphe),
+ ],
+ q(7886) => [
+ q(Zuojiang Zhuang),
+ ],
+};
+
+$Locale::Codes::Data{'language'}{'alias2id'} = {
+ q(!o!ung) => [
+ q(5313),
+ q(0),
+ ],
+ q(!xoo) => [
+ q(4956),
+ q(0),
+ ],
+ q('are'are) => [
+ q(0763),
+ q(0),
+ ],
+ q('auhelawa) => [
+ q(3626),
+ q(0),
+ ],
+ q(//ani) => [
+ q(2788),
+ q(0),
+ ],
+ q(//gana) => [
+ q(2559),
+ q(0),
+ ],
+ q(//xegwi) => [
+ q(7278),
+ q(0),
+ ],
+ q(/gwi) => [
+ q(2671),
+ q(0),
+ ],
+ q(/xam) => [
+ q(7236),
+ q(0),
+ ],
+ q(=/hua) => [
+ q(2835),
+ q(0),
+ ],
+ q(=/kx'au//'ein) => [
+ q(0938),
+ q(0),
+ ],
+ q(a'ou) => [
+ q(0833),
+ q(0),
+ ],
+ q(a'tong) => [
+ q(0832),
+ q(0),
+ ],
+ q(a-hmaos) => [
+ q(2765),
+ q(0),
+ ],
+ q(a-pucikwar) => [
+ q(0851),
+ q(0),
+ ],
+ q(aari) => [
+ q(0712),
+ q(0),
+ ],
+ q(aasax) => [
+ q(0554),
+ q(0),
+ ],
+ q(abadi) => [
+ q(3180),
+ q(0),
+ ],
+ q(abaga) => [
+ q(0566),
+ q(0),
+ ],
+ q(abai sungai) => [
+ q(0565),
+ q(0),
+ ],
+ q(abanyom) => [
+ q(0571),
+ q(0),
+ ],
+ q(abar) => [
+ q(4283),
+ q(0),
+ ],
+ q(abau) => [
+ q(0556),
+ q(0),
+ ],
+ q(abaza) => [
+ q(0575),
+ q(0),
+ ],
+ q(abe) => [
+ q(0560),
+ q(0),
+ ],
+ q(abellen ayta) => [
+ q(0574),
+ q(0),
+ ],
+ q(abidji) => [
+ q(0568),
+ q(0),
+ ],
+ q(abinomn) => [
+ q(1448),
+ q(0),
+ ],
+ q(abipon) => [
+ q(0987),
+ q(0),
+ ],
+ q(abishira) => [
+ q(0893),
+ q(0),
+ ],
+ q(abkhazian) => [
+ q(0002),
+ q(0),
+ ],
+ q(abom) => [
+ q(0817),
+ q(0),
+ ],
+ q(abon) => [
+ q(0573),
+ q(0),
+ ],
+ q(abron) => [
+ q(0576),
+ q(0),
+ ],
+ q(abu) => [
+ q(0615),
+ q(0),
+ ],
+ q(abu' arapesh) => [
+ q(0545),
+ q(0),
+ ],
+ q(abua) => [
+ q(0572),
+ q(0),
+ ],
+ q(abui) => [
+ q(0584),
+ q(0),
+ ],
+ q(abun) => [
+ q(3303),
+ q(0),
+ ],
+ q(abure) => [
+ q(0579),
+ q(0),
+ ],
+ q(abureni) => [
+ q(4234),
+ q(0),
+ ],
+ q(acatepec me'phaa) => [
+ q(6642),
+ q(0),
+ ],
+ q(acatepec tlapanec) => [
+ q(6642),
+ q(0),
+ ],
+ q(achagua) => [
+ q(0585),
+ q(0),
+ ],
+ q(achang) => [
+ q(0593),
+ q(0),
+ ],
+ q(ache) => [
+ q(2642),
+ q(0),
+ ],
+ q(acheron) => [
+ q(0604),
+ q(0),
+ ],
+ q(achi) => [
+ q(0596),
+ q(0),
+ ],
+ q(achinese) => [
+ q(0003),
+ q(0),
+ ],
+ q(achterhoeks) => [
+ q(0598),
+ q(0),
+ ],
+ q(achuar-shiwiar) => [
+ q(0599),
+ q(0),
+ ],
+ q(achumawi) => [
+ q(0600),
+ q(0),
+ ],
+ q(acoli) => [
+ q(0004),
+ q(0),
+ ],
+ q(acroa) => [
+ q(0597),
+ q(0),
+ ],
+ q(adabe) => [
+ q(0605),
+ q(0),
+ ],
+ q(adai) => [
+ q(7232),
+ q(0),
+ ],
+ q(adamawa fulfulde) => [
+ q(2371),
+ q(0),
+ ],
+ q(adamorobe sign language) => [
+ q(0619),
+ q(0),
+ ],
+ q(adang) => [
+ q(0614),
+ q(0),
+ ],
+ q(adangbe) => [
+ q(0617),
+ q(0),
+ ],
+ q(adangme) => [
+ q(0005),
+ q(0),
+ ],
+ q(adap) => [
+ q(0616),
+ q(0),
+ ],
+ q(adara) => [
+ q(3148),
+ q(0),
+ ],
+ q(adasen) => [
+ q(6503),
+ q(0),
+ ],
+ q(adele) => [
+ q(0607),
+ q(0),
+ ],
+ q(adhola) => [
+ q(0610),
+ q(0),
+ ],
+ q(adi) => [
+ q(0611),
+ q(0),
+ ],
+ q(adioukrou) => [
+ q(0612),
+ q(0),
+ ],
+ q(adithinngithigh) => [
+ q(2155),
+ q(0),
+ ],
+ q(adivasi oriya) => [
+ q(5277),
+ q(0),
+ ],
+ q(adiwasi garasia) => [
+ q(2406),
+ q(0),
+ ],
+ q(adnyamathanha) => [
+ q(0620),
+ q(0),
+ ],
+ q(adonara) => [
+ q(0618),
+ q(0),
+ ],
+ q(aduge) => [
+ q(0621),
+ q(0),
+ ],
+ q(adygei) => [
+ q(0006),
+ q(0),
+ ],
+ q(adyghe) => [
+ q(0006),
+ q(0),
+ ],
+ q(adzera) => [
+ q(0624),
+ q(0),
+ ],
+ q(aeka) => [
+ q(0640),
+ q(0),
+ ],
+ q(aekyom) => [
+ q(0974),
+ q(0),
+ ],
+ q(aequian) => [
+ q(7233),
+ q(0),
+ ],
+ q(aer) => [
+ q(0634),
+ q(0),
+ ],
+ q(afade) => [
+ q(0548),
+ q(0),
+ ],
+ q(afar) => [
+ q(0001),
+ q(0),
+ ],
+ q(afghan persian) => [
+ q(5577),
+ q(0),
+ ],
+ q(afghan sign language) => [
+ q(0644),
+ q(0),
+ ],
+ q(afitti) => [
+ q(0651),
+ q(0),
+ ],
+ q(afra) => [
+ q(6860),
+ q(0),
+ ],
+ q(afrihili) => [
+ q(0008),
+ q(0),
+ ],
+ q(afrikaans) => [
+ q(0009),
+ q(0),
+ ],
+ q(afro-asiatic languages) => [
+ q(0007),
+ q(0),
+ ],
+ q(afro-seminole creole) => [
+ q(0650),
+ q(0),
+ ],
+ q(agarabi) => [
+ q(0657),
+ q(0),
+ ],
+ q(agariya) => [
+ q(0662),
+ q(0),
+ ],
+ q(agatu) => [
+ q(0656),
+ q(0),
+ ],
+ q(agavotaguerra) => [
+ q(0964),
+ q(0),
+ ],
+ q(aghem) => [
+ q(0669),
+ q(0),
+ ],
+ q(aghu) => [
+ q(0682),
+ q(0),
+ ],
+ q(aghu tharnggalu) => [
+ q(2489),
+ q(0),
+ ],
+ q(aghul) => [
+ q(0676),
+ q(0),
+ ],
+ q(aghwan) => [
+ q(7234),
+ q(0),
+ ],
+ q(agi) => [
+ q(0698),
+ q(0),
+ ],
+ q(agob) => [
+ q(3349),
+ q(0),
+ ],
+ q(agoi) => [
+ q(2875),
+ q(0),
+ ],
+ q(aguacateco) => [
+ q(0673),
+ q(0),
+ ],
+ q(aguano) => [
+ q(0654),
+ q(0),
+ ],
+ q(aguaruna) => [
+ q(0670),
+ q(0),
+ ],
+ q(aguna) => [
+ q(0939),
+ q(0),
+ ],
+ q(agusan manobo) => [
+ q(4520),
+ q(0),
+ ],
+ q(agutaynen) => [
+ q(0667),
+ q(0),
+ ],
+ q(agwagwune) => [
+ q(7516),
+ q(0),
+ ],
+ q(ahan) => [
+ q(0687),
+ q(0),
+ ],
+ q(ahanta) => [
+ q(0679),
+ q(0),
+ ],
+ q(aheu) => [
+ q(6474),
+ q(0),
+ ],
+ q(ahirani) => [
+ q(0690),
+ q(0),
+ ],
+ q(ahom) => [
+ q(0688),
+ q(0),
+ ],
+ q(ahtena) => [
+ q(0692),
+ q(0),
+ ],
+ q(ahwai) => [
+ q(4813),
+ q(0),
+ ],
+ q(ai-cham) => [
+ q(0700),
+ q(0),
+ ],
+ q(aighon) => [
+ q(0713),
+ q(0),
+ ],
+ q(aikana) => [
+ q(6348),
+ q(0),
+ ],
+ q(aiklep) => [
+ q(4609),
+ q(0),
+ ],
+ q(aimaq) => [
+ q(0708),
+ q(0),
+ ],
+ q(aimele) => [
+ q(0704),
+ q(0),
+ ],
+ q(aimol) => [
+ q(0705),
+ q(0),
+ ],
+ q(ainbai) => [
+ q(0695),
+ q(0),
+ ],
+ q(ainu) => [
+ q(0010),
+ q(0),
+ ],
+ q(ainu (china)) => [
+ q(0694),
+ q(0),
+ ],
+ q(ainu (japan)) => [
+ q(0010),
+ q(1),
+ ],
+ q(aiome) => [
+ q(0731),
+ q(0),
+ ],
+ q(airoran) => [
+ q(0709),
+ q(0),
+ ],
+ q(aiton) => [
+ q(0706),
+ q(0),
+ ],
+ q(aiwoo) => [
+ q(4814),
+ q(0),
+ ],
+ q(aja (benin)) => [
+ q(0716),
+ q(0),
+ ],
+ q(aja (sudan)) => [
+ q(0715),
+ q(0),
+ ],
+ q(ajawa) => [
+ q(0722),
+ q(0),
+ ],
+ q(ajie) => [
+ q(0717),
+ q(0),
+ ],
+ q(ajyininka apurucayali) => [
+ q(1833),
+ q(0),
+ ],
+ q(ak) => [
+ q(0737),
+ q(0),
+ ],
+ q(aka) => [
+ q(6134),
+ q(0),
+ ],
+ q(aka-bea) => [
+ q(0569),
+ q(0),
+ ],
+ q(aka-bo) => [
+ q(0734),
+ q(0),
+ ],
+ q(aka-cari) => [
+ q(0589),
+ q(0),
+ ],
+ q(aka-jeru) => [
+ q(0732),
+ q(0),
+ ],
+ q(aka-kede) => [
+ q(0744),
+ q(0),
+ ],
+ q(aka-kol) => [
+ q(0745),
+ q(0),
+ ],
+ q(aka-kora) => [
+ q(0590),
+ q(0),
+ ],
+ q(akan) => [
+ q(0011),
+ q(0),
+ ],
+ q(akar-bale) => [
+ q(0591),
+ q(0),
+ ],
+ q(akaselem) => [
+ q(0739),
+ q(0),
+ ],
+ q(akawaio) => [
+ q(0727),
+ q(0),
+ ],
+ q(ake) => [
+ q(0703),
+ q(0),
+ ],
+ q(akebu) => [
+ q(3255),
+ q(0),
+ ],
+ q(akei) => [
+ q(6695),
+ q(0),
+ ],
+ q(akeu) => [
+ q(0637),
+ q(0),
+ ],
+ q(akha) => [
+ q(0684),
+ q(0),
+ ],
+ q(akhvakh) => [
+ q(0742),
+ q(0),
+ ],
+ q(akkadian) => [
+ q(0012),
+ q(0),
+ ],
+ q(akkala sami) => [
+ q(6006),
+ q(0),
+ ],
+ q(aklanon) => [
+ q(0733),
+ q(0),
+ ],
+ q(akolet) => [
+ q(0740),
+ q(0),
+ ],
+ q(akoose) => [
+ q(1465),
+ q(0),
+ ],
+ q(akoye) => [
+ q(4293),
+ q(0),
+ ],
+ q(akpa) => [
+ q(0728),
+ q(0),
+ ],
+ q(akpes) => [
+ q(2872),
+ q(0),
+ ],
+ q(akrukay) => [
+ q(0645),
+ q(0),
+ ],
+ q(akukem) => [
+ q(6158),
+ q(0),
+ ],
+ q(akuku) => [
+ q(1001),
+ q(0),
+ ],
+ q(akum) => [
+ q(0741),
+ q(0),
+ ],
+ q(akuntsu) => [
+ q(0868),
+ q(0),
+ ],
+ q(akurio) => [
+ q(0735),
+ q(0),
+ ],
+ q(akwa) => [
+ q(0743),
+ q(0),
+ ],
+ q(akyaung ari naga) => [
+ q(5028),
+ q(0),
+ ],
+ q(al-sayyid bedouin sign language) => [
+ q(6314),
+ q(0),
+ ],
+ q(alaba-k'abeena) => [
+ q(0764),
+ q(0),
+ ],
+ q(alabama) => [
+ q(0746),
+ q(0),
+ ],
+ q(alabat island agta) => [
+ q(2176),
+ q(0),
+ ],
+ q(alacalufan languages) => [
+ q(0489),
+ q(0),
+ ],
+ q(alacatlatzala mixtec) => [
+ q(4286),
+ q(0),
+ ],
+ q(alago) => [
+ q(0747),
+ q(0),
+ ],
+ q(alagwa) => [
+ q(7048),
+ q(0),
+ ],
+ q(alak) => [
+ q(0754),
+ q(0),
+ ],
+ q(alamblak) => [
+ q(0781),
+ q(0),
+ ],
+ q(alangan) => [
+ q(0753),
+ q(0),
+ ],
+ q(alanic) => [
+ q(7342),
+ q(0),
+ ],
+ q(alapmunte) => [
+ q(0856),
+ q(0),
+ ],
+ q(alawa) => [
+ q(0751),
+ q(0),
+ ],
+ q(albanian) => [
+ q(0013),
+ q(0),
+ ],
+ q(albanian languages) => [
+ q(0525),
+ q(0),
+ ],
+ q(albanian sign language) => [
+ q(6171),
+ q(0),
+ ],
+ q(alcozauca mixtec) => [
+ q(7440),
+ q(0),
+ ],
+ q(alege) => [
+ q(0750),
+ q(0),
+ ],
+ q(alekano) => [
+ q(2395),
+ q(0),
+ ],
+ q(alemannic) => [
+ q(0166),
+ q(0),
+ ],
+ q(aleut) => [
+ q(0014),
+ q(0),
+ ],
+ q(algerian arabic) => [
+ q(0878),
+ q(0),
+ ],
+ q(algerian saharan arabic) => [
+ q(0551),
+ q(0),
+ ],
+ q(algerian sign language) => [
+ q(0900),
+ q(0),
+ ],
+ q(algic languages) => [
+ q(0490),
+ q(0),
+ ],
+ q(algonquian languages) => [
+ q(0015),
+ q(0),
+ ],
+ q(algonquin) => [
+ q(0760),
+ q(0),
+ ],
+ q(ali) => [
+ q(0714),
+ q(0),
+ ],
+ q(alladian) => [
+ q(0749),
+ q(0),
+ ],
+ q(allar) => [
+ q(0755),
+ q(0),
+ ],
+ q(alngith) => [
+ q(0696),
+ q(0),
+ ],
+ q(alo phola) => [
+ q(7652),
+ q(0),
+ ],
+ q(aloapam zapotec) => [
+ q(7730),
+ q(0),
+ ],
+ q(alor) => [
+ q(0827),
+ q(0),
+ ],
+ q(alsatian) => [
+ q(0166),
+ q(0),
+ ],
+ q(alsea) => [
+ q(0636),
+ q(0),
+ ],
+ q(altaic languages) => [
+ q(0445),
+ q(0),
+ ],
+ q(alu kurumba) => [
+ q(7461),
+ q(0),
+ ],
+ q(alugu) => [
+ q(0935),
+ q(0),
+ ],
+ q(alumu-tesu) => [
+ q(0539),
+ q(0),
+ ],
+ q(alune) => [
+ q(0759),
+ q(0),
+ ],
+ q(aluo) => [
+ q(7623),
+ q(0),
+ ],
+ q(alur) => [
+ q(0767),
+ q(0),
+ ],
+ q(alutor) => [
+ q(0761),
+ q(0),
+ ],
+ q(alviri-vidari) => [
+ q(0958),
+ q(0),
+ ],
+ q(alyawarr) => [
+ q(0766),
+ q(0),
+ ],
+ q(ama (papua new guinea)) => [
+ q(0778),
+ q(0),
+ ],
+ q(ama (sudan)) => [
+ q(5139),
+ q(0),
+ ],
+ q(amahai) => [
+ q(0782),
+ q(0),
+ ],
+ q(amahuaca) => [
+ q(0770),
+ q(0),
+ ],
+ q(amaimon) => [
+ q(0752),
+ q(0),
+ ],
+ q(amal) => [
+ q(0541),
+ q(0),
+ ],
+ q(amanab) => [
+ q(0779),
+ q(0),
+ ],
+ q(amanaye) => [
+ q(0768),
+ q(0),
+ ],
+ q(amara) => [
+ q(0697),
+ q(0),
+ ],
+ q(amarakaeri) => [
+ q(0783),
+ q(0),
+ ],
+ q(amarasi) => [
+ q(0559),
+ q(0),
+ ],
+ q(amatlan zapotec) => [
+ q(7839),
+ q(0),
+ ],
+ q(amba (solomon islands)) => [
+ q(6921),
+ q(0),
+ ],
+ q(amba (uganda)) => [
+ q(5850),
+ q(0),
+ ],
+ q(ambai) => [
+ q(0776),
+ q(0),
+ ],
+ q(ambakich) => [
+ q(0638),
+ q(0),
+ ],
+ q(ambala ayta) => [
+ q(0562),
+ q(0),
+ ],
+ q(ambelau) => [
+ q(0787),
+ q(0),
+ ],
+ q(ambele) => [
+ q(0631),
+ q(0),
+ ],
+ q(amblong) => [
+ q(0756),
+ q(0),
+ ],
+ q(ambo) => [
+ q(0769),
+ q(0),
+ ],
+ q(ambo-pasco quechua) => [
+ q(5674),
+ q(0),
+ ],
+ q(ambonese malay) => [
+ q(0577),
+ q(0),
+ ],
+ q(ambrak) => [
+ q(0544),
+ q(0),
+ ],
+ q(ambul) => [
+ q(0849),
+ q(0),
+ ],
+ q(ambulas) => [
+ q(0578),
+ q(0),
+ ],
+ q(amdang) => [
+ q(0775),
+ q(0),
+ ],
+ q(amdo tibetan) => [
+ q(0623),
+ q(0),
+ ],
+ q(amele) => [
+ q(0639),
+ q(0),
+ ],
+ q(american sign language) => [
+ q(0890),
+ q(0),
+ ],
+ q(amganad ifugao) => [
+ q(2894),
+ q(0),
+ ],
+ q(amharic) => [
+ q(0017),
+ q(0),
+ ],
+ q(ami) => [
+ q(0790),
+ q(0),
+ ],
+ q(amio-gelimi) => [
+ q(3857),
+ q(0),
+ ],
+ q(amis) => [
+ q(0774),
+ q(0),
+ ],
+ q(amo) => [
+ q(0780),
+ q(0),
+ ],
+ q(amol) => [
+ q(0765),
+ q(0),
+ ],
+ q(amoltepec mixtec) => [
+ q(4126),
+ q(0),
+ ],
+ q(ampanang) => [
+ q(0841),
+ q(0),
+ ],
+ q(ampari dogon) => [
+ q(0862),
+ q(0),
+ ],
+ q(amri karbi) => [
+ q(0723),
+ q(0),
+ ],
+ q(amto) => [
+ q(0785),
+ q(0),
+ ],
+ q(amundava) => [
+ q(0622),
+ q(0),
+ ],
+ q(amurdak) => [
+ q(0773),
+ q(0),
+ ],
+ q(ana tinga dogon) => [
+ q(2156),
+ q(0),
+ ],
+ q(anaang) => [
+ q(0812),
+ q(0),
+ ],
+ q(anakalangu) => [
+ q(0729),
+ q(0),
+ ],
+ q(anal) => [
+ q(0803),
+ q(0),
+ ],
+ q(anam) => [
+ q(5373),
+ q(0),
+ ],
+ q(anambe) => [
+ q(0550),
+ q(0),
+ ],
+ q(anamgura) => [
+ q(2943),
+ q(0),
+ ],
+ q(anasi) => [
+ q(1387),
+ q(0),
+ ],
+ q(anca) => [
+ q(0586),
+ q(0),
+ ],
+ q(ancient aramaic (up to 700 bce)) => [
+ q(5163),
+ q(0),
+ ],
+ q(ancient greek (to 1453)) => [
+ q(0163),
+ q(1),
+ ],
+ q(ancient hebrew) => [
+ q(2720),
+ q(0),
+ ],
+ q(ancient macedonian) => [
+ q(7357),
+ q(0),
+ ],
+ q(ancient north arabian) => [
+ q(7373),
+ q(0),
+ ],
+ q(ancient zapotec) => [
+ q(7493),
+ q(0),
+ ],
+ q(andaandi) => [
+ q(2012),
+ q(0),
+ ],
+ q(andai) => [
+ q(0642),
+ q(0),
+ ],
+ q(andajin) => [
+ q(0718),
+ q(0),
+ ],
+ q(andalusian arabic) => [
+ q(7229),
+ q(0),
+ ],
+ q(andaman creole hindi) => [
+ q(2722),
+ q(0),
+ ],
+ q(andaqui) => [
+ q(0792),
+ q(0),
+ ],
+ q(andarum) => [
+ q(0819),
+ q(0),
+ ],
+ q(andegerebinha) => [
+ q(0609),
+ q(0),
+ ],
+ q(andh) => [
+ q(0807),
+ q(0),
+ ],
+ q(andi) => [
+ q(0799),
+ q(0),
+ ],
+ q(andio) => [
+ q(1616),
+ q(0),
+ ],
+ q(andoa) => [
+ q(0793),
+ q(0),
+ ],
+ q(andoque) => [
+ q(0805),
+ q(0),
+ ],
+ q(andra-hus) => [
+ q(0813),
+ q(0),
+ ],
+ q(aneityum) => [
+ q(0932),
+ q(0),
+ ],
+ q(anem) => [
+ q(0815),
+ q(0),
+ ],
+ q(aneme wake) => [
+ q(0583),
+ q(0),
+ ],
+ q(anfillo) => [
+ q(4665),
+ q(0),
+ ],
+ q(angaataha) => [
+ q(0666),
+ q(0),
+ ],
+ q(angal) => [
+ q(0658),
+ q(0),
+ ],
+ q(angal enen) => [
+ q(0820),
+ q(0),
+ ],
+ q(angal heneng) => [
+ q(0730),
+ q(0),
+ ],
+ q(angami naga) => [
+ q(4894),
+ q(0),
+ ],
+ q(angguruk yali) => [
+ q(7596),
+ q(0),
+ ],
+ q(angika) => [
+ q(0019),
+ q(0),
+ ],
+ q(angkamuthi) => [
+ q(0962),
+ q(0),
+ ],
+ q(anglo-norman) => [
+ q(7378),
+ q(0),
+ ],
+ q(angloromani) => [
+ q(5782),
+ q(0),
+ ],
+ q(angolar) => [
+ q(0816),
+ q(0),
+ ],
+ q(angor) => [
+ q(0660),
+ q(0),
+ ],
+ q(angoram) => [
+ q(0822),
+ q(0),
+ ],
+ q(angosturas tunebo) => [
+ q(6582),
+ q(0),
+ ],
+ q(anguthimri) => [
+ q(0972),
+ q(0),
+ ],
+ q(ani phowa) => [
+ q(7651),
+ q(0),
+ ],
+ q(anii) => [
+ q(1292),
+ q(0),
+ ],
+ q(animere) => [
+ q(0797),
+ q(0),
+ ],
+ q(anindilyakwa) => [
+ q(0824),
+ q(0),
+ ],
+ q(anjam) => [
+ q(1360),
+ q(0),
+ ],
+ q(ankave) => [
+ q(0547),
+ q(0),
+ ],
+ q(anmatyerre) => [
+ q(0789),
+ q(0),
+ ],
+ q(anong) => [
+ q(5093),
+ q(0),
+ ],
+ q(anor) => [
+ q(0800),
+ q(0),
+ ],
+ q(anserma) => [
+ q(0808),
+ q(0),
+ ],
+ q(ansus) => [
+ q(0795),
+ q(0),
+ ],
+ q(antakarinya) => [
+ q(0809),
+ q(0),
+ ],
+ q(antankarana malagasy) => [
+ q(7368),
+ q(0),
+ ],
+ q(antigua and barbuda creole english) => [
+ q(0699),
+ q(0),
+ ],
+ q(anu-hkongso chin) => [
+ q(0802),
+ q(0),
+ ],
+ q(anuak) => [
+ q(0810),
+ q(0),
+ ],
+ q(anufo) => [
+ q(1759),
+ q(0),
+ ],
+ q(anuki) => [
+ q(0941),
+ q(0),
+ ],
+ q(anus) => [
+ q(0949),
+ q(0),
+ ],
+ q(anuta) => [
+ q(0937),
+ q(0),
+ ],
+ q(anyin) => [
+ q(0814),
+ q(0),
+ ],
+ q(anyin morofo) => [
+ q(4534),
+ q(0),
+ ],
+ q(ao naga) => [
+ q(4896),
+ q(0),
+ ],
+ q(aoheng) => [
+ q(5512),
+ q(0),
+ ],
+ q(aore) => [
+ q(0830),
+ q(0),
+ ],
+ q(ap ma) => [
+ q(3184),
+ q(0),
+ ],
+ q(apache languages) => [
+ q(0020),
+ q(0),
+ ],
+ q(apalachee) => [
+ q(7239),
+ q(0),
+ ],
+ q(apalai) => [
+ q(0859),
+ q(0),
+ ],
+ q(apali) => [
+ q(2259),
+ q(0),
+ ],
+ q(apasco-apoala mixtec) => [
+ q(4288),
+ q(0),
+ ],
+ q(apatani) => [
+ q(0854),
+ q(0),
+ ],
+ q(apiaka) => [
+ q(0843),
+ q(0),
+ ],
+ q(apinaye) => [
+ q(0848),
+ q(0),
+ ],
+ q(apma) => [
+ q(0850),
+ q(0),
+ ],
+ q(aproumu aizi) => [
+ q(0689),
+ q(0),
+ ],
+ q(apurina) => [
+ q(0855),
+ q(0),
+ ],
+ q(aputai) => [
+ q(0858),
+ q(0),
+ ],
+ q(aquitanian) => [
+ q(7240),
+ q(0),
+ ],
+ q(arabana) => [
+ q(0870),
+ q(0),
+ ],
+ q(arabela) => [
+ q(0876),
+ q(0),
+ ],
+ q(arabic) => [
+ q(0021),
+ q(0),
+ ],
+ q(aragonese) => [
+ q(0023),
+ q(0),
+ ],
+ q(araki) => [
+ q(0738),
+ q(0),
+ ],
+ q(aralle-tabulahan) => [
+ q(0924),
+ q(0),
+ ],
+ q(aramanik) => [
+ q(0549),
+ q(0),
+ ],
+ q(arammba) => [
+ q(6234),
+ q(0),
+ ],
+ q(aranadan) => [
+ q(0543),
+ q(0),
+ ],
+ q(aranama-tamique) => [
+ q(7418),
+ q(0),
+ ],
+ q(arandai) => [
+ q(3041),
+ q(0),
+ ],
+ q(araona) => [
+ q(0877),
+ q(0),
+ ],
+ q(arapaho) => [
+ q(0026),
+ q(0),
+ ],
+ q(arapaso) => [
+ q(0874),
+ q(0),
+ ],
+ q(arauan languages) => [
+ q(0491),
+ q(0),
+ ],
+ q(arawa) => [
+ q(0881),
+ q(0),
+ ],
+ q(arawak) => [
+ q(0028),
+ q(0),
+ ],
+ q(arawakan languages) => [
+ q(0492),
+ q(0),
+ ],
+ q(arawete) => [
+ q(0981),
+ q(0),
+ ],
+ q(arawum) => [
+ q(0976),
+ q(0),
+ ],
+ q(arbereshe albanian) => [
+ q(0542),
+ q(0),
+ ],
+ q(arbore) => [
+ q(0882),
+ q(0),
+ ],
+ q(archi) => [
+ q(0861),
+ q(0),
+ ],
+ q(ardhamagadhi prakrit) => [
+ q(5449),
+ q(0),
+ ],
+ q(are) => [
+ q(4605),
+ q(0),
+ ],
+ q(areba) => [
+ q(0625),
+ q(0),
+ ],
+ q(arem) => [
+ q(0632),
+ q(0),
+ ],
+ q(arequipa-la union quechua) => [
+ q(5706),
+ q(0),
+ ],
+ q(argentine sign language) => [
+ q(0628),
+ q(0),
+ ],
+ q(argobba) => [
+ q(0663),
+ q(0),
+ ],
+ q(arguni) => [
+ q(0659),
+ q(0),
+ ],
+ q(arha) => [
+ q(0867),
+ q(0),
+ ],
+ q(arho) => [
+ q(0826),
+ q(0),
+ ],
+ q(arhuaco) => [
+ q(0872),
+ q(0),
+ ],
+ q(ari) => [
+ q(0540),
+ q(0),
+ ],
+ q(aribwatsa) => [
+ q(3792),
+ q(0),
+ ],
+ q(aribwaung) => [
+ q(7602),
+ q(0),
+ ],
+ q(arifama-miniafia) => [
+ q(0546),
+ q(0),
+ ],
+ q(arigidi) => [
+ q(0863),
+ q(0),
+ ],
+ q(arikapu) => [
+ q(0875),
+ q(0),
+ ],
+ q(arikara) => [
+ q(0873),
+ q(0),
+ ],
+ q(arikem) => [
+ q(0711),
+ q(0),
+ ],
+ q(arin) => [
+ q(7416),
+ q(0),
+ ],
+ q(aringa) => [
+ q(4052),
+ q(0),
+ ],
+ q(arma) => [
+ q(0823),
+ q(0),
+ ],
+ q(armazic) => [
+ q(7415),
+ q(0),
+ ],
+ q(armenian) => [
+ q(0024),
+ q(0),
+ ],
+ q(armenian (family)) => [
+ q(0511),
+ q(0),
+ ],
+ q(armenian sign language) => [
+ q(0633),
+ q(0),
+ ],
+ q(aromanian) => [
+ q(0362),
+ q(0),
+ ],
+ q(arop-lokep) => [
+ q(0852),
+ q(0),
+ ],
+ q(arop-sissano) => [
+ q(0853),
+ q(0),
+ ],
+ q(arosi) => [
+ q(0693),
+ q(0),
+ ],
+ q(arpitan) => [
+ q(2365),
+ q(0),
+ ],
+ q(arritinngithigh) => [
+ q(5826),
+ q(0),
+ ],
+ q(arta) => [
+ q(0933),
+ q(0),
+ ],
+ q(artificial languages) => [
+ q(0027),
+ q(0),
+ ],
+ q(arua (amazonas state)) => [
+ q(0881),
+ q(0),
+ ],
+ q(arua (rodonia state)) => [
+ q(0883),
+ q(0),
+ ],
+ q(aruamu) => [
+ q(4531),
+ q(0),
+ ],
+ q(aruek) => [
+ q(0950),
+ q(0),
+ ],
+ q(arumanian) => [
+ q(0362),
+ q(0),
+ ],
+ q(aruop) => [
+ q(4041),
+ q(0),
+ ],
+ q(arutani) => [
+ q(0931),
+ q(0),
+ ],
+ q(arvanitika albanian) => [
+ q(0555),
+ q(0),
+ ],
+ q(as) => [
+ q(0909),
+ q(0),
+ ],
+ q(asaro'o) => [
+ q(4554),
+ q(0),
+ ],
+ q(asas) => [
+ q(0889),
+ q(0),
+ ],
+ q(ashaninka) => [
+ q(1800),
+ q(0),
+ ],
+ q(ashe) => [
+ q(0691),
+ q(0),
+ ],
+ q(asheninka pajonal) => [
+ q(1751),
+ q(0),
+ ],
+ q(asheninka perene) => [
+ q(5575),
+ q(0),
+ ],
+ q(ashkun) => [
+ q(0896),
+ q(0),
+ ],
+ q(asho chin) => [
+ q(1871),
+ q(0),
+ ],
+ q(ashtiani) => [
+ q(0921),
+ q(0),
+ ],
+ q(asilulu) => [
+ q(0897),
+ q(0),
+ ],
+ q(askopan) => [
+ q(2225),
+ q(0),
+ ],
+ q(asoa) => [
+ q(0905),
+ q(0),
+ ],
+ q(assamese) => [
+ q(0029),
+ q(0),
+ ],
+ q(assan) => [
+ q(7436),
+ q(0),
+ ],
+ q(assangori) => [
+ q(6031),
+ q(0),
+ ],
+ q(assiniboine) => [
+ q(0887),
+ q(0),
+ ],
+ q(assyrian neo-aramaic) => [
+ q(0701),
+ q(0),
+ ],
+ q(asturian) => [
+ q(0030),
+ q(0),
+ ],
+ q(asturleonese) => [
+ q(0030),
+ q(0),
+ ],
+ q(asu (nigeria)) => [
+ q(0945),
+ q(0),
+ ],
+ q(asu (tanzania)) => [
+ q(0886),
+ q(0),
+ ],
+ q(asue awyu) => [
+ q(5584),
+ q(0),
+ ],
+ q(asumboa) => [
+ q(0934),
+ q(0),
+ ],
+ q(asuncion mixtepec zapotec) => [
+ q(7821),
+ q(0),
+ ],
+ q(asuri) => [
+ q(0902),
+ q(0),
+ ],
+ q(ata) => [
+ q(0920),
+ q(0),
+ ],
+ q(ata manobo) => [
+ q(0913),
+ q(0),
+ ],
+ q(atakapa) => [
+ q(0866),
+ q(0),
+ ],
+ q(atampaya) => [
+ q(0791),
+ q(0),
+ ],
+ q(atatlahuca mixtec) => [
+ q(4276),
+ q(0),
+ ],
+ q(atayal) => [
+ q(6346),
+ q(0),
+ ],
+ q(atemble) => [
+ q(0914),
+ q(0),
+ ],
+ q(athapascan languages) => [
+ q(0031),
+ q(0),
+ ],
+ q(athpariya) => [
+ q(0842),
+ q(0),
+ ],
+ q(ati) => [
+ q(0918),
+ q(0),
+ ],
+ q(atikamekw) => [
+ q(0917),
+ q(0),
+ ],
+ q(atlantic-congo languages) => [
+ q(0488),
+ q(0),
+ ],
+ q(atohwaim) => [
+ q(0864),
+ q(0),
+ ],
+ q(atong) => [
+ q(0922),
+ q(0),
+ ],
+ q(atorada) => [
+ q(0834),
+ q(0),
+ ],
+ q(atsahuaca) => [
+ q(0912),
+ q(0),
+ ],
+ q(atsam) => [
+ q(1686),
+ q(0),
+ ],
+ q(atsugewi) => [
+ q(0930),
+ q(0),
+ ],
+ q(attapady kurumba) => [
+ q(5457),
+ q(0),
+ ],
+ q(attie) => [
+ q(0916),
+ q(0),
+ ],
+ q(atzingo matlatzinca) => [
+ q(5176),
+ q(0),
+ ],
+ q(au) => [
+ q(0966),
+ q(0),
+ ],
+ q(aulua) => [
+ q(0944),
+ q(0),
+ ],
+ q(aura) => [
+ q(0954),
+ q(0),
+ ],
+ q(aushi) => [
+ q(0940),
+ q(0),
+ ],
+ q(aushiri) => [
+ q(0965),
+ q(0),
+ ],
+ q(austral) => [
+ q(0951),
+ q(0),
+ ],
+ q(australian aborigines sign language) => [
+ q(0906),
+ q(0),
+ ],
+ q(australian languages) => [
+ q(0032),
+ q(0),
+ ],
+ q(australian sign language) => [
+ q(0891),
+ q(0),
+ ],
+ q(austrian sign language) => [
+ q(0901),
+ q(0),
+ ],
+ q(austro-asiatic languages) => [
+ q(0487),
+ q(0),
+ ],
+ q(austronesian languages) => [
+ q(0271),
+ q(0),
+ ],
+ q(auwe) => [
+ q(6091),
+ q(0),
+ ],
+ q(auye) => [
+ q(0952),
+ q(0),
+ ],
+ q(auyokawa) => [
+ q(0947),
+ q(0),
+ ],
+ q(ava guarani) => [
+ q(4845),
+ q(0),
+ ],
+ q(ava-canoeiro) => [
+ q(0968),
+ q(0),
+ ],
+ q(avaric) => [
+ q(0033),
+ q(0),
+ ],
+ q(avatime) => [
+ q(0963),
+ q(0),
+ ],
+ q(avau) => [
+ q(0957),
+ q(0),
+ ],
+ q(avava) => [
+ q(6556),
+ q(0),
+ ],
+ q(avestan) => [
+ q(0034),
+ q(0),
+ ],
+ q(avikam) => [
+ q(0959),
+ q(0),
+ ],
+ q(avokaya) => [
+ q(0967),
+ q(0),
+ ],
+ q(awa (china)) => [
+ q(7020),
+ q(0),
+ ],
+ q(awa (papua new guinea)) => [
+ q(0969),
+ q(0),
+ ],
+ q(awa-cuaiquer) => [
+ q(3679),
+ q(0),
+ ],
+ q(awabakal) => [
+ q(0975),
+ q(0),
+ ],
+ q(awad bing) => [
+ q(1085),
+ q(0),
+ ],
+ q(awadhi) => [
+ q(0035),
+ q(0),
+ ],
+ q(awak) => [
+ q(0978),
+ q(0),
+ ],
+ q(awar) => [
+ q(0993),
+ q(0),
+ ],
+ q(awara) => [
+ q(0985),
+ q(0),
+ ],
+ q(awbono) => [
+ q(0973),
+ q(0),
+ ],
+ q(aweer) => [
+ q(1354),
+ q(0),
+ ],
+ q(awera) => [
+ q(0979),
+ q(0),
+ ],
+ q(aweti) => [
+ q(0971),
+ q(0),
+ ],
+ q(awing) => [
+ q(1020),
+ q(0),
+ ],
+ q(awiyaana) => [
+ q(0955),
+ q(0),
+ ],
+ q(awjilah) => [
+ q(0942),
+ q(0),
+ ],
+ q(awngi) => [
+ q(0977),
+ q(0),
+ ],
+ q(awngthim) => [
+ q(2672),
+ q(0),
+ ],
+ q(awtuw) => [
+ q(3444),
+ q(0),
+ ],
+ q(awu) => [
+ q(7575),
+ q(0),
+ ],
+ q(awun) => [
+ q(0984),
+ q(0),
+ ],
+ q(awutu) => [
+ q(0652),
+ q(0),
+ ],
+ q(awyi) => [
+ q(0953),
+ q(0),
+ ],
+ q(axamb) => [
+ q(0680),
+ q(0),
+ ],
+ q(axi yi) => [
+ q(7577),
+ q(0),
+ ],
+ q(ayabadhu) => [
+ q(0996),
+ q(0),
+ ],
+ q(ayacucho quechua) => [
+ q(5672),
+ q(0),
+ ],
+ q(ayangan ifugao) => [
+ q(2895),
+ q(0),
+ ],
+ q(ayautla mazatec) => [
+ q(7004),
+ q(0),
+ ],
+ q(ayere) => [
+ q(0997),
+ q(0),
+ ],
+ q(ayerrerenge) => [
+ q(0988),
+ q(0),
+ ],
+ q(ayi (papua new guinea)) => [
+ q(1006),
+ q(0),
+ ],
+ q(ayiwo) => [
+ q(4814),
+ q(0),
+ ],
+ q(ayizi) => [
+ q(7713),
+ q(0),
+ ],
+ q(ayizo gbe) => [
+ q(0994),
+ q(0),
+ ],
+ q(aymara) => [
+ q(0036),
+ q(0),
+ ],
+ q(ayoquesco zapotec) => [
+ q(7721),
+ q(0),
+ ],
+ q(ayoreo) => [
+ q(1004),
+ q(0),
+ ],
+ q(ayu) => [
+ q(1010),
+ q(0),
+ ],
+ q(ayutla mixtec) => [
+ q(4295),
+ q(0),
+ ],
+ q(azerbaijani) => [
+ q(0037),
+ q(0),
+ ],
+ q(azha) => [
+ q(1013),
+ q(0),
+ ],
+ q(azhe) => [
+ q(7579),
+ q(0),
+ ],
+ q(azoyu me'phaa) => [
+ q(6625),
+ q(0),
+ ],
+ q(azoyu tlapanec) => [
+ q(6625),
+ q(0),
+ ],
+ q(baan) => [
+ q(1527),
+ q(0),
+ ],
+ q(baangi) => [
+ q(1421),
+ q(0),
+ ],
+ q(baatonum) => [
+ q(1039),
+ q(0),
+ ],
+ q(baba) => [
+ q(1061),
+ q(0),
+ ],
+ q(baba malay) => [
+ q(4107),
+ q(0),
+ ],
+ q(babalia creole arabic) => [
+ q(1064),
+ q(0),
+ ],
+ q(babango) => [
+ q(1051),
+ q(0),
+ ],
+ q(babanki) => [
+ q(1049),
+ q(0),
+ ],
+ q(babatana) => [
+ q(1023),
+ q(0),
+ ],
+ q(babine) => [
+ q(1082),
+ q(0),
+ ],
+ q(bable) => [
+ q(0030),
+ q(0),
+ ],
+ q(babuza) => [
+ q(1621),
+ q(0),
+ ],
+ q(bacama) => [
+ q(1088),
+ q(0),
+ ],
+ q(bacanese malay) => [
+ q(1480),
+ q(0),
+ ],
+ q(bactrian) => [
+ q(7250),
+ q(0),
+ ],
+ q(bada (indonesia)) => [
+ q(1210),
+ q(0),
+ ],
+ q(bada (nigeria)) => [
+ q(1034),
+ q(0),
+ ],
+ q(badaga) => [
+ q(1153),
+ q(0),
+ ],
+ q(bade) => [
+ q(1094),
+ q(0),
+ ],
+ q(badeshi) => [
+ q(1115),
+ q(0),
+ ],
+ q(badi kanum) => [
+ q(3313),
+ q(0),
+ ],
+ q(badimaya) => [
+ q(1211),
+ q(0),
+ ],
+ q(badui) => [
+ q(1025),
+ q(0),
+ ],
+ q(badyara) => [
+ q(5349),
+ q(0),
+ ],
+ q(baeggu) => [
+ q(1521),
+ q(0),
+ ],
+ q(baelelea) => [
+ q(1520),
+ q(0),
+ ],
+ q(baetora) => [
+ q(1487),
+ q(0),
+ ],
+ q(bafanji) => [
+ q(1146),
+ q(0),
+ ],
+ q(bafaw-balong) => [
+ q(1561),
+ q(0),
+ ],
+ q(bafia) => [
+ q(3577),
+ q(0),
+ ],
+ q(bafut) => [
+ q(1140),
+ q(0),
+ ],
+ q(baga binari) => [
+ q(1071),
+ q(0),
+ ],
+ q(baga kaloum) => [
+ q(1403),
+ q(0),
+ ],
+ q(baga koga) => [
+ q(1175),
+ q(0),
+ ],
+ q(baga manduri) => [
+ q(1306),
+ q(0),
+ ],
+ q(baga mboteni) => [
+ q(1173),
+ q(0),
+ ],
+ q(baga sitemu) => [
+ q(1462),
+ q(0),
+ ],
+ q(baga sobane) => [
+ q(1468),
+ q(0),
+ ],
+ q(bagheli) => [
+ q(1160),
+ q(0),
+ ],
+ q(bagirmi) => [
+ q(1311),
+ q(0),
+ ],
+ q(bagirmi fulfulde) => [
+ q(2377),
+ q(0),
+ ],
+ q(bago-kusuntu) => [
+ q(1404),
+ q(0),
+ ],
+ q(bagri) => [
+ q(1177),
+ q(0),
+ ],
+ q(bagupi) => [
+ q(1381),
+ q(0),
+ ],
+ q(bagusa) => [
+ q(1400),
+ q(0),
+ ],
+ q(bagvalal) => [
+ q(3645),
+ q(0),
+ ],
+ q(baha buyang) => [
+ q(7558),
+ q(0),
+ ],
+ q(baham) => [
+ q(1112),
+ q(0),
+ ],
+ q(bahamas creole english) => [
+ q(1029),
+ q(0),
+ ],
+ q(baharna arabic) => [
+ q(0580),
+ q(0),
+ ],
+ q(bahau) => [
+ q(1206),
+ q(0),
+ ],
+ q(bahinemo) => [
+ q(1238),
+ q(0),
+ ],
+ q(bahing) => [
+ q(1196),
+ q(0),
+ ],
+ q(bahnar) => [
+ q(1106),
+ q(0),
+ ],
+ q(bahonsuai) => [
+ q(1467),
+ q(0),
+ ],
+ q(bai) => [
+ q(1099),
+ q(0),
+ ],
+ q(baibai) => [
+ q(1044),
+ q(0),
+ ],
+ q(baikeno) => [
+ q(1276),
+ q(0),
+ ],
+ q(baima) => [
+ q(1405),
+ q(0),
+ ],
+ q(baimak) => [
+ q(1326),
+ q(0),
+ ],
+ q(bainouk-gunyaamolo) => [
+ q(1089),
+ q(0),
+ ],
+ q(bainouk-gunyuno) => [
+ q(1024),
+ q(0),
+ ],
+ q(bainouk-samik) => [
+ q(1066),
+ q(0),
+ ],
+ q(baiso) => [
+ q(1469),
+ q(0),
+ ],
+ q(baissa fali) => [
+ q(2318),
+ q(0),
+ ],
+ q(bajan) => [
+ q(1247),
+ q(0),
+ ],
+ q(bajelani) => [
+ q(1243),
+ q(0),
+ ],
+ q(baka (cameroon)) => [
+ q(1256),
+ q(0),
+ ],
+ q(baka (sudan)) => [
+ q(1097),
+ q(0),
+ ],
+ q(bakairi) => [
+ q(1269),
+ q(0),
+ ],
+ q(bakaka) => [
+ q(1423),
+ q(0),
+ ],
+ q(bakhtiari) => [
+ q(1406),
+ q(0),
+ ],
+ q(baki) => [
+ q(1261),
+ q(0),
+ ],
+ q(bakoko) => [
+ q(1260),
+ q(0),
+ ],
+ q(bakole) => [
+ q(3435),
+ q(0),
+ ],
+ q(bakpinka) => [
+ q(1057),
+ q(0),
+ ],
+ q(bakumpai) => [
+ q(1270),
+ q(0),
+ ],
+ q(bakwe) => [
+ q(1251),
+ q(0),
+ ],
+ q(balaesang) => [
+ q(1296),
+ q(0),
+ ],
+ q(balangao) => [
+ q(1299),
+ q(0),
+ ],
+ q(balangingi) => [
+ q(6204),
+ q(0),
+ ],
+ q(balanta-ganja) => [
+ q(1248),
+ q(0),
+ ],
+ q(balanta-kentohe) => [
+ q(1282),
+ q(0),
+ ],
+ q(balantak) => [
+ q(1302),
+ q(0),
+ ],
+ q(balau) => [
+ q(1284),
+ q(0),
+ ],
+ q(baldemu) => [
+ q(1103),
+ q(0),
+ ],
+ q(bali (democratic republic of congo)) => [
+ q(1080),
+ q(0),
+ ],
+ q(bali (nigeria)) => [
+ q(1078),
+ q(0),
+ ],
+ q(balinese) => [
+ q(0043),
+ q(0),
+ ],
+ q(balinese malay) => [
+ q(4265),
+ q(0),
+ ],
+ q(balkan gagauz turkish) => [
+ q(1184),
+ q(0),
+ ],
+ q(balkan romani) => [
+ q(5790),
+ q(0),
+ ],
+ q(balo) => [
+ q(1412),
+ q(0),
+ ],
+ q(baloi) => [
+ q(1231),
+ q(0),
+ ],
+ q(balti) => [
+ q(1156),
+ q(0),
+ ],
+ q(baltic languages) => [
+ q(0046),
+ q(0),
+ ],
+ q(baltic romani) => [
+ q(5788),
+ q(0),
+ ],
+ q(baluan-pam) => [
+ q(1294),
+ q(0),
+ ],
+ q(baluchi) => [
+ q(0041),
+ q(0),
+ ],
+ q(bamako sign language) => [
+ q(1357),
+ q(0),
+ ],
+ q(bamali) => [
+ q(1055),
+ q(0),
+ ],
+ q(bambalang) => [
+ q(1317),
+ q(0),
+ ],
+ q(bambam) => [
+ q(5611),
+ q(0),
+ ],
+ q(bambara) => [
+ q(0042),
+ q(0),
+ ],
+ q(bambassi) => [
+ q(4657),
+ q(0),
+ ],
+ q(bambili-bambui) => [
+ q(1036),
+ q(0),
+ ],
+ q(bamenyam) => [
+ q(1069),
+ q(0),
+ ],
+ q(bamileke languages) => [
+ q(0039),
+ q(0),
+ ],
+ q(bamu) => [
+ q(1070),
+ q(0),
+ ],
+ q(bamukumbit) => [
+ q(1417),
+ q(0),
+ ],
+ q(bamun) => [
+ q(1037),
+ q(0),
+ ],
+ q(bamunka) => [
+ q(1530),
+ q(0),
+ ],
+ q(bamwe) => [
+ q(1309),
+ q(0),
+ ],
+ q(ban khor sign language) => [
+ q(1147),
+ q(0),
+ ],
+ q(bana) => [
+ q(1087),
+ q(0),
+ ],
+ q(banam bay) => [
+ q(7012),
+ q(0),
+ ],
+ q(banao itneg) => [
+ q(1252),
+ q(0),
+ ],
+ q(banaro) => [
+ q(1614),
+ q(0),
+ ],
+ q(banda (indonesia)) => [
+ q(1332),
+ q(0),
+ ],
+ q(banda languages) => [
+ q(0038),
+ q(0),
+ ],
+ q(banda malay) => [
+ q(1389),
+ q(0),
+ ],
+ q(banda-bambari) => [
+ q(3910),
+ q(0),
+ ],
+ q(banda-banda) => [
+ q(1378),
+ q(0),
+ ],
+ q(banda-mbres) => [
+ q(1408),
+ q(0),
+ ],
+ q(banda-ndele) => [
+ q(1148),
+ q(0),
+ ],
+ q(banda-yangere) => [
+ q(7503),
+ q(0),
+ ],
+ q(bandi) => [
+ q(1615),
+ q(0),
+ ],
+ q(bandial) => [
+ q(1407),
+ q(0),
+ ],
+ q(bandjalang) => [
+ q(1114),
+ q(0),
+ ],
+ q(bangala) => [
+ q(1573),
+ q(0),
+ ],
+ q(bangandu) => [
+ q(1167),
+ q(0),
+ ],
+ q(bangba) => [
+ q(1043),
+ q(0),
+ ],
+ q(banggai) => [
+ q(1186),
+ q(0),
+ ],
+ q(banggarla) => [
+ q(1233),
+ q(0),
+ ],
+ q(bangi) => [
+ q(1336),
+ q(0),
+ ],
+ q(bangi me) => [
+ q(1955),
+ q(0),
+ ],
+ q(bangingih sama) => [
+ q(6204),
+ q(0),
+ ],
+ q(bangka) => [
+ q(4201),
+ q(0),
+ ],
+ q(bangolan) => [
+ q(1170),
+ q(0),
+ ],
+ q(bangubangu) => [
+ q(1350),
+ q(0),
+ ],
+ q(bangwinji) => [
+ q(1456),
+ q(0),
+ ],
+ q(baniva) => [
+ q(1537),
+ q(0),
+ ],
+ q(baniwa) => [
+ q(1550),
+ q(0),
+ ],
+ q(banjar) => [
+ q(1244),
+ q(0),
+ ],
+ q(bankagooma) => [
+ q(1588),
+ q(0),
+ ],
+ q(bankal) => [
+ q(3086),
+ q(0),
+ ],
+ q(bankan tey dogon) => [
+ q(1973),
+ q(0),
+ ],
+ q(bankon) => [
+ q(0561),
+ q(0),
+ ],
+ q(bannoni) => [
+ q(1077),
+ q(0),
+ ],
+ q(bantawa) => [
+ q(1032),
+ q(0),
+ ],
+ q(bantayanon) => [
+ q(1159),
+ q(0),
+ ],
+ q(bantik) => [
+ q(1344),
+ q(0),
+ ],
+ q(bantoanon) => [
+ q(1342),
+ q(0),
+ ],
+ q(bantu (other)) => [
+ q(0058),
+ q(0),
+ ],
+ q(bantu languages) => [
+ q(0058),
+ q(1),
+ ],
+ q(baoule) => [
+ q(1073),
+ q(0),
+ ],
+ q(bara malagasy) => [
+ q(1202),
+ q(0),
+ ],
+ q(baraamu) => [
+ q(1426),
+ q(0),
+ ],
+ q(barababaraba) => [
+ q(5735),
+ q(0),
+ ],
+ q(barai) => [
+ q(1040),
+ q(0),
+ ],
+ q(barakai) => [
+ q(1030),
+ q(0),
+ ],
+ q(baram kayan) => [
+ q(3740),
+ q(0),
+ ],
+ q(barama) => [
+ q(1045),
+ q(0),
+ ],
+ q(barambu) => [
+ q(1434),
+ q(0),
+ ],
+ q(baramu) => [
+ q(1328),
+ q(0),
+ ],
+ q(barapasi) => [
+ q(1437),
+ q(0),
+ ],
+ q(baras) => [
+ q(1440),
+ q(0),
+ ],
+ q(barasana-eduria) => [
+ q(1460),
+ q(0),
+ ],
+ q(barbacoas) => [
+ q(1377),
+ q(0),
+ ],
+ q(barbareno) => [
+ q(1359),
+ q(0),
+ ],
+ q(barclayville grebo) => [
+ q(2615),
+ q(0),
+ ],
+ q(bardi) => [
+ q(1074),
+ q(0),
+ ],
+ q(bare) => [
+ q(1026),
+ q(0),
+ ],
+ q(barein) => [
+ q(1518),
+ q(0),
+ ],
+ q(bargam) => [
+ q(4358),
+ q(0),
+ ],
+ q(bari) => [
+ q(1137),
+ q(0),
+ ],
+ q(bariai) => [
+ q(1072),
+ q(0),
+ ],
+ q(bariji) => [
+ q(1234),
+ q(0),
+ ],
+ q(barikanchi) => [
+ q(1581),
+ q(0),
+ ],
+ q(barikewa) => [
+ q(3042),
+ q(0),
+ ],
+ q(barok) => [
+ q(1241),
+ q(0),
+ ],
+ q(barombi) => [
+ q(1047),
+ q(0),
+ ],
+ q(barro negro tunebo) => [
+ q(6361),
+ q(0),
+ ],
+ q(barrow point) => [
+ q(1392),
+ q(0),
+ ],
+ q(baruga) => [
+ q(1254),
+ q(0),
+ ],
+ q(baruya) => [
+ q(1607),
+ q(0),
+ ],
+ q(barwe) => [
+ q(1548),
+ q(0),
+ ],
+ q(barzani jewish neo-aramaic) => [
+ q(1236),
+ q(0),
+ ],
+ q(basa) => [
+ q(0045),
+ q(0),
+ ],
+ q(basa (cameroon)) => [
+ q(0045),
+ q(1),
+ ],
+ q(basa (nigeria)) => [
+ q(1637),
+ q(0),
+ ],
+ q(basa-gumna) => [
+ q(1458),
+ q(0),
+ ],
+ q(basa-gurmana) => [
+ q(1503),
+ q(0),
+ ],
+ q(basap) => [
+ q(1091),
+ q(0),
+ ],
+ q(basay) => [
+ q(1606),
+ q(0),
+ ],
+ q(bashkardi) => [
+ q(1453),
+ q(0),
+ ],
+ q(bashkir) => [
+ q(0040),
+ q(0),
+ ],
+ q(basketo) => [
+ q(1466),
+ q(0),
+ ],
+ q(basque) => [
+ q(0044),
+ q(0),
+ ],
+ q(basque (family)) => [
+ q(0503),
+ q(0),
+ ],
+ q(bassa) => [
+ q(1463),
+ q(0),
+ ],
+ q(bassa-kontagora) => [
+ q(1464),
+ q(0),
+ ],
+ q(bassari) => [
+ q(1450),
+ q(0),
+ ],
+ q(bassossi) => [
+ q(1455),
+ q(0),
+ ],
+ q(bata) => [
+ q(1472),
+ q(0),
+ ],
+ q(batad ifugao) => [
+ q(2895),
+ q(0),
+ ],
+ q(batak) => [
+ q(1591),
+ q(0),
+ ],
+ q(batak alas-kluet) => [
+ q(1495),
+ q(0),
+ ],
+ q(batak angkola) => [
+ q(0724),
+ q(0),
+ ],
+ q(batak dairi) => [
+ q(1474),
+ q(0),
+ ],
+ q(batak karo) => [
+ q(1493),
+ q(0),
+ ],
+ q(batak languages) => [
+ q(0062),
+ q(0),
+ ],
+ q(batak mandailing) => [
+ q(1482),
+ q(0),
+ ],
+ q(batak simalungun) => [
+ q(1488),
+ q(0),
+ ],
+ q(batak toba) => [
+ q(1041),
+ q(0),
+ ],
+ q(batanga) => [
+ q(1340),
+ q(0),
+ ],
+ q(batek) => [
+ q(1486),
+ q(0),
+ ],
+ q(bateri) => [
+ q(1491),
+ q(0),
+ ],
+ q(bathari) => [
+ q(1198),
+ q(0),
+ ],
+ q(bati (cameroon)) => [
+ q(1473),
+ q(0),
+ ],
+ q(bati (indonesia)) => [
+ q(1535),
+ q(0),
+ ],
+ q(bats) => [
+ q(1050),
+ q(0),
+ ],
+ q(batu) => [
+ q(1490),
+ q(0),
+ ],
+ q(batui) => [
+ q(7742),
+ q(0),
+ ],
+ q(batuley) => [
+ q(1038),
+ q(0),
+ ],
+ q(bau) => [
+ q(1042),
+ q(0),
+ ],
+ q(bau bidayuh) => [
+ q(6109),
+ q(0),
+ ],
+ q(bauchi) => [
+ q(1452),
+ q(0),
+ ],
+ q(baure) => [
+ q(1428),
+ q(0),
+ ],
+ q(bauria) => [
+ q(1166),
+ q(0),
+ ],
+ q(bauro) => [
+ q(1567),
+ q(0),
+ ],
+ q(bauwaki) => [
+ q(1552),
+ q(0),
+ ],
+ q(bauzi) => [
+ q(1541),
+ q(0),
+ ],
+ q(bavarian) => [
+ q(1033),
+ q(0),
+ ],
+ q(bawm chin) => [
+ q(1178),
+ q(0),
+ ],
+ q(bay miwok) => [
+ q(4334),
+ q(0),
+ ],
+ q(bayali) => [
+ q(1253),
+ q(0),
+ ],
+ q(baybayanon) => [
+ q(1540),
+ q(0),
+ ],
+ q(baygo) => [
+ q(1597),
+ q(0),
+ ],
+ q(bayono) => [
+ q(1602),
+ q(0),
+ ],
+ q(bayot) => [
+ q(1090),
+ q(0),
+ ],
+ q(bayungu) => [
+ q(1576),
+ q(0),
+ ],
+ q(bazigar) => [
+ q(1154),
+ q(0),
+ ],
+ q(beami) => [
+ q(1126),
+ q(0),
+ ],
+ q(beaver) => [
+ q(1116),
+ q(0),
+ ],
+ q(beba) => [
+ q(1152),
+ q(0),
+ ],
+ q(bebe) => [
+ q(1636),
+ q(0),
+ ],
+ q(bebele) => [
+ q(1117),
+ q(0),
+ ],
+ q(bebeli) => [
+ q(1125),
+ q(0),
+ ],
+ q(bebil) => [
+ q(1582),
+ q(0),
+ ],
+ q(bedawiyet) => [
+ q(0047),
+ q(0),
+ ],
+ q(bedik) => [
+ q(6594),
+ q(0),
+ ],
+ q(bedjond) => [
+ q(1250),
+ q(0),
+ ],
+ q(bedoanas) => [
+ q(1119),
+ q(0),
+ ],
+ q(beeke) => [
+ q(1258),
+ q(0),
+ ],
+ q(beele) => [
+ q(1583),
+ q(0),
+ ],
+ q(beembe) => [
+ q(1128),
+ q(0),
+ ],
+ q(beezen) => [
+ q(1352),
+ q(0),
+ ],
+ q(befang) => [
+ q(1063),
+ q(0),
+ ],
+ q(begbere-ejar) => [
+ q(1419),
+ q(0),
+ ],
+ q(beja) => [
+ q(0047),
+ q(0),
+ ],
+ q(bekati') => [
+ q(1124),
+ q(0),
+ ],
+ q(bekwarra) => [
+ q(1274),
+ q(0),
+ ],
+ q(bekwel) => [
+ q(1275),
+ q(0),
+ ],
+ q(belait) => [
+ q(1122),
+ q(0),
+ ],
+ q(belanda bor) => [
+ q(1568),
+ q(0),
+ ],
+ q(belanda viri) => [
+ q(1526),
+ q(0),
+ ],
+ q(belarusian) => [
+ q(0048),
+ q(0),
+ ],
+ q(belhariya) => [
+ q(1611),
+ q(0),
+ ],
+ q(beli (papua new guinea)) => [
+ q(1135),
+ q(0),
+ ],
+ q(beli (sudan)) => [
+ q(1290),
+ q(0),
+ ],
+ q(belize kriol english) => [
+ q(1624),
+ q(0),
+ ],
+ q(bella coola) => [
+ q(1280),
+ q(0),
+ ],
+ q(bellari) => [
+ q(1444),
+ q(0),
+ ],
+ q(bemba) => [
+ q(0049),
+ q(0),
+ ],
+ q(bemba (democratic republic of congo)) => [
+ q(1327),
+ q(0),
+ ],
+ q(bemba (zambia)) => [
+ q(0049),
+ q(1),
+ ],
+ q(bembe) => [
+ q(1304),
+ q(0),
+ ],
+ q(ben tey dogon) => [
+ q(1970),
+ q(0),
+ ],
+ q(bena (nigeria)) => [
+ q(7690),
+ q(0),
+ ],
+ q(bena (tanzania)) => [
+ q(1136),
+ q(0),
+ ],
+ q(benabena) => [
+ q(1121),
+ q(0),
+ ],
+ q(bench) => [
+ q(1081),
+ q(0),
+ ],
+ q(bende) => [
+ q(1105),
+ q(0),
+ ],
+ q(bendi) => [
+ q(1084),
+ q(0),
+ ],
+ q(beneraf) => [
+ q(1348),
+ q(0),
+ ],
+ q(beng) => [
+ q(4843),
+ q(0),
+ ],
+ q(benga) => [
+ q(1335),
+ q(0),
+ ],
+ q(bengali) => [
+ q(0050),
+ q(0),
+ ],
+ q(benggoi) => [
+ q(1185),
+ q(0),
+ ],
+ q(bengkala sign language) => [
+ q(1422),
+ q(0),
+ ],
+ q(bentong) => [
+ q(1347),
+ q(0),
+ ],
+ q(benyadu') => [
+ q(1594),
+ q(0),
+ ],
+ q(beothuk) => [
+ q(1499),
+ q(0),
+ ],
+ q(bepour) => [
+ q(1215),
+ q(0),
+ ],
+ q(bera) => [
+ q(1427),
+ q(0),
+ ],
+ q(berakou) => [
+ q(1587),
+ q(0),
+ ],
+ q(berau malay) => [
+ q(1522),
+ q(0),
+ ],
+ q(berber languages) => [
+ q(0051),
+ q(0),
+ ],
+ q(berbice creole dutch) => [
+ q(1425),
+ q(0),
+ ],
+ q(berik) => [
+ q(1264),
+ q(0),
+ ],
+ q(berinomo) => [
+ q(1225),
+ q(0),
+ ],
+ q(berom) => [
+ q(1363),
+ q(0),
+ ],
+ q(berta) => [
+ q(7201),
+ q(0),
+ ],
+ q(berti) => [
+ q(1609),
+ q(0),
+ ],
+ q(besisi) => [
+ q(4254),
+ q(0),
+ ],
+ q(besme) => [
+ q(1129),
+ q(0),
+ ],
+ q(besoa) => [
+ q(1127),
+ q(0),
+ ],
+ q(betaf) => [
+ q(1141),
+ q(0),
+ ],
+ q(betawi) => [
+ q(1133),
+ q(0),
+ ],
+ q(bete) => [
+ q(1596),
+ q(0),
+ ],
+ q(bete-bendi) => [
+ q(1489),
+ q(0),
+ ],
+ q(beti (cote d'ivoire)) => [
+ q(2272),
+ q(0),
+ ],
+ q(betta kurumba) => [
+ q(7462),
+ q(0),
+ ],
+ q(bezhta) => [
+ q(3157),
+ q(0),
+ ],
+ q(bhadrawahi) => [
+ q(1190),
+ q(0),
+ ],
+ q(bhalay) => [
+ q(1208),
+ q(0),
+ ],
+ q(bharia) => [
+ q(1187),
+ q(0),
+ ],
+ q(bhatola) => [
+ q(1481),
+ q(0),
+ ],
+ q(bhatri) => [
+ q(1183),
+ q(0),
+ ],
+ q(bhattiyali) => [
+ q(1204),
+ q(0),
+ ],
+ q(bhaya) => [
+ q(1191),
+ q(0),
+ ],
+ q(bhele) => [
+ q(1209),
+ q(0),
+ ],
+ q(bhilali) => [
+ q(1195),
+ q(0),
+ ],
+ q(bhili) => [
+ q(1188),
+ q(0),
+ ],
+ q(bhojpuri) => [
+ q(0052),
+ q(0),
+ ],
+ q(bhoti kinnauri) => [
+ q(4805),
+ q(0),
+ ],
+ q(bhujel) => [
+ q(1598),
+ q(0),
+ ],
+ q(bhunjia) => [
+ q(1205),
+ q(0),
+ ],
+ q(biafada) => [
+ q(1216),
+ q(0),
+ ],
+ q(biage) => [
+ q(1095),
+ q(0),
+ ],
+ q(biak) => [
+ q(1207),
+ q(0),
+ ],
+ q(biali) => [
+ q(1123),
+ q(0),
+ ],
+ q(bian marind) => [
+ q(1394),
+ q(0),
+ ],
+ q(biangai) => [
+ q(1217),
+ q(0),
+ ],
+ q(biao) => [
+ q(1601),
+ q(0),
+ ],
+ q(biao mon) => [
+ q(1322),
+ q(0),
+ ],
+ q(biao-jiao mien) => [
+ q(1235),
+ q(0),
+ ],
+ q(biatah bidayuh) => [
+ q(1478),
+ q(0),
+ ],
+ q(bidhawal) => [
+ q(2914),
+ q(0),
+ ],
+ q(bidiyo) => [
+ q(1214),
+ q(0),
+ ],
+ q(bidyara) => [
+ q(1603),
+ q(0),
+ ],
+ q(bidyogo) => [
+ q(1237),
+ q(0),
+ ],
+ q(biem) => [
+ q(1305),
+ q(0),
+ ],
+ q(bierebo) => [
+ q(1338),
+ q(0),
+ ],
+ q(bieria) => [
+ q(1431),
+ q(0),
+ ],
+ q(biete) => [
+ q(1226),
+ q(0),
+ ],
+ q(big nambas) => [
+ q(4944),
+ q(0),
+ ],
+ q(biga) => [
+ q(1189),
+ q(0),
+ ],
+ q(bihari languages) => [
+ q(0053),
+ q(0),
+ ],
+ q(bijori) => [
+ q(1229),
+ q(0),
+ ],
+ q(bikaru) => [
+ q(1213),
+ q(0),
+ ],
+ q(bikol) => [
+ q(0054),
+ q(0),
+ ],
+ q(bikya) => [
+ q(1592),
+ q(0),
+ ],
+ q(bila) => [
+ q(1222),
+ q(0),
+ ],
+ q(bilakura) => [
+ q(1409),
+ q(0),
+ ],
+ q(bilaspuri) => [
+ q(3279),
+ q(0),
+ ],
+ q(bilba) => [
+ q(1398),
+ q(0),
+ ],
+ q(bilbil) => [
+ q(1447),
+ q(0),
+ ],
+ q(bile) => [
+ q(1219),
+ q(0),
+ ],
+ q(bilin) => [
+ q(0067),
+ q(0),
+ ],
+ q(bilma kanuri) => [
+ q(1321),
+ q(0),
+ ],
+ q(biloxi) => [
+ q(1289),
+ q(0),
+ ],
+ q(bilua) => [
+ q(1279),
+ q(0),
+ ],
+ q(bilur) => [
+ q(1572),
+ q(0),
+ ],
+ q(bima) => [
+ q(1200),
+ q(0),
+ ],
+ q(bimin) => [
+ q(1197),
+ q(0),
+ ],
+ q(bimoba) => [
+ q(1220),
+ q(0),
+ ],
+ q(bina (nigeria)) => [
+ q(1600),
+ q(0),
+ ],
+ q(bina (papua new guinea)) => [
+ q(1316),
+ q(0),
+ ],
+ q(binahari) => [
+ q(1590),
+ q(0),
+ ],
+ q(binandere) => [
+ q(1193),
+ q(0),
+ ],
+ q(bine) => [
+ q(1364),
+ q(0),
+ ],
+ q(bini) => [
+ q(0055),
+ q(0),
+ ],
+ q(binji) => [
+ q(1382),
+ q(0),
+ ],
+ q(binongan itneg) => [
+ q(2990),
+ q(0),
+ ],
+ q(bintauna) => [
+ q(1333),
+ q(0),
+ ],
+ q(bintulu) => [
+ q(1351),
+ q(0),
+ ],
+ q(binukid) => [
+ q(1257),
+ q(0),
+ ],
+ q(binumarien) => [
+ q(1246),
+ q(0),
+ ],
+ q(bipi) => [
+ q(1223),
+ q(0),
+ ],
+ q(birale) => [
+ q(1571),
+ q(0),
+ ],
+ q(birao) => [
+ q(1439),
+ q(0),
+ ],
+ q(birgit) => [
+ q(1476),
+ q(0),
+ ],
+ q(birhor) => [
+ q(1230),
+ q(0),
+ ],
+ q(biri) => [
+ q(1632),
+ q(0),
+ ],
+ q(biritai) => [
+ q(1414),
+ q(0),
+ ],
+ q(birked) => [
+ q(1432),
+ q(0),
+ ],
+ q(birri) => [
+ q(1533),
+ q(0),
+ ],
+ q(birwa) => [
+ q(1433),
+ q(0),
+ ],
+ q(bisa) => [
+ q(1212),
+ q(0),
+ ],
+ q(biseni) => [
+ q(2916),
+ q(0),
+ ],
+ q(bishnupriya) => [
+ q(1397),
+ q(0),
+ ],
+ q(bishuo) => [
+ q(1549),
+ q(0),
+ ],
+ q(bisis) => [
+ q(1349),
+ q(0),
+ ],
+ q(bislama) => [
+ q(0056),
+ q(0),
+ ],
+ q(bisorio) => [
+ q(1224),
+ q(0),
+ ],
+ q(bissa) => [
+ q(1212),
+ q(0),
+ ],
+ q(bisu) => [
+ q(1623),
+ q(0),
+ ],
+ q(bit) => [
+ q(1171),
+ q(0),
+ ],
+ q(bitare) => [
+ q(1441),
+ q(0),
+ ],
+ q(bitur) => [
+ q(4129),
+ q(0),
+ ],
+ q(biwat) => [
+ q(1554),
+ q(0),
+ ],
+ q(biyo) => [
+ q(1604),
+ q(0),
+ ],
+ q(biyom) => [
+ q(1385),
+ q(0),
+ ],
+ q(blablanga) => [
+ q(1293),
+ q(0),
+ ],
+ q(blafe) => [
+ q(1144),
+ q(0),
+ ],
+ q(blagar) => [
+ q(1131),
+ q(0),
+ ],
+ q(blang) => [
+ q(1295),
+ q(0),
+ ],
+ q(blin) => [
+ q(0067),
+ q(0),
+ ],
+ q(bliss) => [
+ q(0478),
+ q(0),
+ ],
+ q(blissymbolics) => [
+ q(0478),
+ q(0),
+ ],
+ q(blissymbols) => [
+ q(0478),
+ q(0),
+ ],
+ q(bo (laos)) => [
+ q(1172),
+ q(0),
+ ],
+ q(bo (papua new guinea)) => [
+ q(1395),
+ q(0),
+ ],
+ q(bo-rukul) => [
+ q(4091),
+ q(0),
+ ],
+ q(bo-ung) => [
+ q(4576),
+ q(0),
+ ],
+ q(boano (maluku)) => [
+ q(1628),
+ q(0),
+ ],
+ q(boano (sulawesi)) => [
+ q(1626),
+ q(0),
+ ],
+ q(bobongko) => [
+ q(1163),
+ q(0),
+ ],
+ q(bobot) => [
+ q(1494),
+ q(0),
+ ],
+ q(bodo (central african republic)) => [
+ q(1374),
+ q(0),
+ ],
+ q(bodo (india)) => [
+ q(1445),
+ q(0),
+ ],
+ q(bodo gadaba) => [
+ q(2419),
+ q(0),
+ ],
+ q(bodo parja) => [
+ q(1111),
+ q(0),
+ ],
+ q(bofi) => [
+ q(1142),
+ q(0),
+ ],
+ q(boga) => [
+ q(1538),
+ q(0),
+ ],
+ q(bogaya) => [
+ q(1367),
+ q(0),
+ ],
+ q(boghom) => [
+ q(1515),
+ q(0),
+ ],
+ q(boguru) => [
+ q(1418),
+ q(0),
+ ],
+ q(bohtan neo-aramaic) => [
+ q(1199),
+ q(0),
+ ],
+ q(boikin) => [
+ q(1620),
+ q(0),
+ ],
+ q(bokha) => [
+ q(7524),
+ q(0),
+ ],
+ q(bokmal, norwegian) => [
+ q(0313),
+ q(0),
+ ],
+ q(boko (benin)) => [
+ q(1401),
+ q(0),
+ ],
+ q(boko (democratic republic of congo)) => [
+ q(1268),
+ q(0),
+ ],
+ q(bokobaru) => [
+ q(1510),
+ q(0),
+ ],
+ q(bokoto) => [
+ q(1109),
+ q(0),
+ ],
+ q(bokyi) => [
+ q(1277),
+ q(0),
+ ],
+ q(bola) => [
+ q(1343),
+ q(0),
+ ],
+ q(bolango) => [
+ q(1281),
+ q(0),
+ ],
+ q(bole) => [
+ q(1362),
+ q(0),
+ ],
+ q(bolgarian) => [
+ q(7254),
+ q(0),
+ ],
+ q(bolgo) => [
+ q(1532),
+ q(0),
+ ],
+ q(bolia) => [
+ q(1286),
+ q(0),
+ ],
+ q(bolinao) => [
+ q(6094),
+ q(0),
+ ],
+ q(bolivian sign language) => [
+ q(1529),
+ q(0),
+ ],
+ q(bolo) => [
+ q(1298),
+ q(0),
+ ],
+ q(boloki) => [
+ q(1272),
+ q(0),
+ ],
+ q(bolon) => [
+ q(1356),
+ q(0),
+ ],
+ q(bolondo) => [
+ q(1627),
+ q(0),
+ ],
+ q(bolongan) => [
+ q(1287),
+ q(0),
+ ],
+ q(bolyu) => [
+ q(5481),
+ q(0),
+ ],
+ q(bom) => [
+ q(1308),
+ q(0),
+ ],
+ q(boma) => [
+ q(1358),
+ q(0),
+ ],
+ q(bomboli) => [
+ q(1314),
+ q(0),
+ ],
+ q(bomboma) => [
+ q(1560),
+ q(0),
+ ],
+ q(bomitaba) => [
+ q(7810),
+ q(0),
+ ],
+ q(bomu) => [
+ q(1319),
+ q(0),
+ ],
+ q(bomwali) => [
+ q(1325),
+ q(0),
+ ],
+ q(bon gula) => [
+ q(2530),
+ q(0),
+ ],
+ q(bonan) => [
+ q(5386),
+ q(0),
+ ],
+ q(bondei) => [
+ q(1370),
+ q(0),
+ ],
+ q(bondo) => [
+ q(1158),
+ q(0),
+ ],
+ q(bondoukou kulango) => [
+ q(3750),
+ q(0),
+ ],
+ q(bondum dom dogon) => [
+ q(1971),
+ q(0),
+ ],
+ q(bonerate) => [
+ q(1329),
+ q(0),
+ ],
+ q(bonerif) => [
+ q(1348),
+ q(0),
+ ],
+ q(bonggi) => [
+ q(1096),
+ q(0),
+ ],
+ q(bonggo) => [
+ q(1379),
+ q(0),
+ ],
+ q(bongili) => [
+ q(1502),
+ q(0),
+ ],
+ q(bongo) => [
+ q(1369),
+ q(0),
+ ],
+ q(bongu) => [
+ q(1393),
+ q(0),
+ ],
+ q(bonjo) => [
+ q(1361),
+ q(0),
+ ],
+ q(bonkeng) => [
+ q(1524),
+ q(0),
+ ],
+ q(bonkiman) => [
+ q(1366),
+ q(0),
+ ],
+ q(bontok) => [
+ q(1331),
+ q(0),
+ ],
+ q(bookan) => [
+ q(1330),
+ q(0),
+ ],
+ q(boon) => [
+ q(1339),
+ q(0),
+ ],
+ q(boor) => [
+ q(1523),
+ q(0),
+ ],
+ q(bora) => [
+ q(1353),
+ q(0),
+ ],
+ q(borana-arsi-guji oromo) => [
+ q(2410),
+ q(0),
+ ],
+ q(border kuna) => [
+ q(3658),
+ q(0),
+ ],
+ q(borei) => [
+ q(2396),
+ q(0),
+ ],
+ q(borgu fulfulde) => [
+ q(2374),
+ q(0),
+ ],
+ q(borna (democratic republic of congo)) => [
+ q(1589),
+ q(0),
+ ],
+ q(borna (ethiopia)) => [
+ q(1556),
+ q(0),
+ ],
+ q(boro (ethiopia)) => [
+ q(1556),
+ q(0),
+ ],
+ q(boro (ghana)) => [
+ q(7485),
+ q(0),
+ ],
+ q(borong) => [
+ q(3589),
+ q(0),
+ ],
+ q(bororo) => [
+ q(1368),
+ q(0),
+ ],
+ q(boruca) => [
+ q(1435),
+ q(0),
+ ],
+ q(boselewa) => [
+ q(1547),
+ q(0),
+ ],
+ q(bosngun) => [
+ q(1416),
+ q(0),
+ ],
+ q(bosnian) => [
+ q(0059),
+ q(0),
+ ],
+ q(bote-majhi) => [
+ q(1312),
+ q(0),
+ ],
+ q(botlikh) => [
+ q(1380),
+ q(0),
+ ],
+ q(botolan sambal) => [
+ q(5884),
+ q(0),
+ ],
+ q(bouna kulango) => [
+ q(4923),
+ q(0),
+ ],
+ q(bouyei) => [
+ q(5358),
+ q(0),
+ ],
+ q(bozaba) => [
+ q(1629),
+ q(0),
+ ],
+ q(bragat) => [
+ q(0821),
+ q(0),
+ ],
+ q(brahui) => [
+ q(1429),
+ q(0),
+ ],
+ q(braj) => [
+ q(0060),
+ q(0),
+ ],
+ q(brazilian sign language) => [
+ q(1633),
+ q(0),
+ ],
+ q(brem) => [
+ q(1509),
+ q(0),
+ ],
+ q(breri) => [
+ q(1438),
+ q(0),
+ ],
+ q(breton) => [
+ q(0061),
+ q(0),
+ ],
+ q(bribri) => [
+ q(1618),
+ q(0),
+ ],
+ q(brithenig) => [
+ q(1634),
+ q(0),
+ ],
+ q(british sign language) => [
+ q(1145),
+ q(0),
+ ],
+ q(brokkat) => [
+ q(1436),
+ q(0),
+ ],
+ q(brokpake) => [
+ q(5976),
+ q(0),
+ ],
+ q(brokskat) => [
+ q(1263),
+ q(0),
+ ],
+ q(brooke's point palawano) => [
+ q(5480),
+ q(0),
+ ],
+ q(broome pearling lugger pidgin) => [
+ q(1384),
+ q(0),
+ ],
+ q(brunei) => [
+ q(3700),
+ q(0),
+ ],
+ q(brunei bisaya) => [
+ q(1449),
+ q(0),
+ ],
+ q(bu) => [
+ q(3073),
+ q(0),
+ ],
+ q(bu-nao bunu) => [
+ q(1564),
+ q(0),
+ ],
+ q(bua) => [
+ q(1496),
+ q(0),
+ ],
+ q(bualkhaw chin) => [
+ q(1671),
+ q(0),
+ ],
+ q(buamu) => [
+ q(1373),
+ q(0),
+ ],
+ q(bube) => [
+ q(1519),
+ q(0),
+ ],
+ q(bubi) => [
+ q(1514),
+ q(0),
+ ],
+ q(bubia) => [
+ q(1062),
+ q(0),
+ ],
+ q(budeh stieng) => [
+ q(6243),
+ q(0),
+ ],
+ q(budibud) => [
+ q(1485),
+ q(0),
+ ],
+ q(budong-budong) => [
+ q(1113),
+ q(0),
+ ],
+ q(budu) => [
+ q(1512),
+ q(0),
+ ],
+ q(budukh) => [
+ q(1100),
+ q(0),
+ ],
+ q(buduma) => [
+ q(1102),
+ q(0),
+ ],
+ q(budza) => [
+ q(1232),
+ q(0),
+ ],
+ q(bugan) => [
+ q(1046),
+ q(0),
+ ],
+ q(bugawac) => [
+ q(1504),
+ q(0),
+ ],
+ q(bughotu) => [
+ q(1180),
+ q(0),
+ ],
+ q(buginese) => [
+ q(0064),
+ q(0),
+ ],
+ q(buglere) => [
+ q(5857),
+ q(0),
+ ],
+ q(bugun) => [
+ q(1168),
+ q(0),
+ ],
+ q(buhi'non bikol) => [
+ q(6824),
+ q(0),
+ ],
+ q(buhid) => [
+ q(1273),
+ q(0),
+ ],
+ q(buhutu) => [
+ q(1574),
+ q(0),
+ ],
+ q(bukar-sadung bidayuh) => [
+ q(5926),
+ q(0),
+ ],
+ q(bukat) => [
+ q(1528),
+ q(0),
+ ],
+ q(bukharic) => [
+ q(1194),
+ q(0),
+ ],
+ q(bukit malay) => [
+ q(1536),
+ q(0),
+ ],
+ q(bukitan) => [
+ q(1266),
+ q(0),
+ ],
+ q(bukiyip) => [
+ q(0839),
+ q(0),
+ ],
+ q(buksa) => [
+ q(6518),
+ q(0),
+ ],
+ q(bukusu) => [
+ q(1577),
+ q(0),
+ ],
+ q(bukwen) => [
+ q(1517),
+ q(0),
+ ],
+ q(bulgarian) => [
+ q(0065),
+ q(0),
+ ],
+ q(bulgarian sign language) => [
+ q(1411),
+ q(0),
+ ],
+ q(bulgebi) => [
+ q(1318),
+ q(0),
+ ],
+ q(buli (ghana)) => [
+ q(1562),
+ q(0),
+ ],
+ q(buli (indonesia)) => [
+ q(1631),
+ q(0),
+ ],
+ q(bullom so) => [
+ q(1516),
+ q(0),
+ ],
+ q(bulo stieng) => [
+ q(6232),
+ q(0),
+ ],
+ q(bulu (cameroon)) => [
+ q(1505),
+ q(0),
+ ],
+ q(bulu (papua new guinea)) => [
+ q(1242),
+ q(0),
+ ],
+ q(bum) => [
+ q(1324),
+ q(0),
+ ],
+ q(bumaji) => [
+ q(1605),
+ q(0),
+ ],
+ q(bumbita arapesh) => [
+ q(0829),
+ q(0),
+ ],
+ q(bumthangkha) => [
+ q(3379),
+ q(0),
+ ],
+ q(bun) => [
+ q(1513),
+ q(0),
+ ],
+ q(buna) => [
+ q(1531),
+ q(0),
+ ],
+ q(bunaba) => [
+ q(1075),
+ q(0),
+ ],
+ q(bunak) => [
+ q(1150),
+ q(0),
+ ],
+ q(bunama) => [
+ q(1093),
+ q(0),
+ ],
+ q(bundeli) => [
+ q(1346),
+ q(0),
+ ],
+ q(bung) => [
+ q(1402),
+ q(0),
+ ],
+ q(bungain) => [
+ q(1511),
+ q(0),
+ ],
+ q(bungku) => [
+ q(1278),
+ q(0),
+ ],
+ q(bungu) => [
+ q(7211),
+ q(0),
+ ],
+ q(bunoge dogon) => [
+ q(2004),
+ q(0),
+ ],
+ q(bunun) => [
+ q(1341),
+ q(0),
+ ],
+ q(buol) => [
+ q(1283),
+ q(0),
+ ],
+ q(bura-pabir) => [
+ q(1559),
+ q(0),
+ ],
+ q(burak) => [
+ q(1608),
+ q(0),
+ ],
+ q(buraka) => [
+ q(1259),
+ q(0),
+ ],
+ q(burarra) => [
+ q(1534),
+ q(0),
+ ],
+ q(burate) => [
+ q(1479),
+ q(0),
+ ],
+ q(burduna) => [
+ q(1580),
+ q(0),
+ ],
+ q(bure) => [
+ q(1525),
+ q(0),
+ ],
+ q(buriat) => [
+ q(0063),
+ q(0),
+ ],
+ q(burji) => [
+ q(1239),
+ q(0),
+ ],
+ q(burmbar) => [
+ q(7012),
+ q(0),
+ ],
+ q(burmese) => [
+ q(0066),
+ q(0),
+ ],
+ q(burmeso) => [
+ q(1635),
+ q(0),
+ ],
+ q(buru (indonesia)) => [
+ q(4268),
+ q(0),
+ ],
+ q(buru (nigeria)) => [
+ q(1420),
+ q(0),
+ ],
+ q(burui) => [
+ q(1446),
+ q(0),
+ ],
+ q(burumakok) => [
+ q(0707),
+ q(0),
+ ],
+ q(burun) => [
+ q(1098),
+ q(0),
+ ],
+ q(burunge) => [
+ q(1108),
+ q(0),
+ ],
+ q(burushaski) => [
+ q(1457),
+ q(0),
+ ],
+ q(burusu) => [
+ q(1415),
+ q(0),
+ ],
+ q(buruwai) => [
+ q(0894),
+ q(0),
+ ],
+ q(busa) => [
+ q(1413),
+ q(0),
+ ],
+ q(busam) => [
+ q(1585),
+ q(0),
+ ],
+ q(busami) => [
+ q(1459),
+ q(0),
+ ],
+ q(busang kayan) => [
+ q(1143),
+ q(0),
+ ],
+ q(bushi) => [
+ q(1497),
+ q(0),
+ ],
+ q(bushoong) => [
+ q(1500),
+ q(0),
+ ],
+ q(businenge tongo) => [
+ q(2064),
+ q(0),
+ ],
+ q(buso) => [
+ q(1461),
+ q(0),
+ ],
+ q(busoa) => [
+ q(1508),
+ q(0),
+ ],
+ q(bussa) => [
+ q(2126),
+ q(0),
+ ],
+ q(busuu) => [
+ q(1249),
+ q(0),
+ ],
+ q(butbut kalinga) => [
+ q(3723),
+ q(0),
+ ],
+ q(butmas-tur) => [
+ q(1345),
+ q(0),
+ ],
+ q(butuanon) => [
+ q(1492),
+ q(0),
+ ],
+ q(buwal) => [
+ q(1203),
+ q(0),
+ ],
+ q(buxinhua) => [
+ q(1171),
+ q(0),
+ ],
+ q(buya) => [
+ q(1613),
+ q(0),
+ ],
+ q(buyu) => [
+ q(1599),
+ q(0),
+ ],
+ q(buyuan jinuo) => [
+ q(3085),
+ q(0),
+ ],
+ q(bwa) => [
+ q(1563),
+ q(0),
+ ],
+ q(bwaidoka) => [
+ q(1545),
+ q(0),
+ ],
+ q(bwanabwana) => [
+ q(6708),
+ q(0),
+ ],
+ q(bwatoo) => [
+ q(1542),
+ q(0),
+ ],
+ q(bwe karen) => [
+ q(1546),
+ q(0),
+ ],
+ q(bwela) => [
+ q(1553),
+ q(0),
+ ],
+ q(bwile) => [
+ q(1544),
+ q(0),
+ ],
+ q(bwisi) => [
+ q(1566),
+ q(0),
+ ],
+ q(byangsi) => [
+ q(1120),
+ q(0),
+ ],
+ q(byep) => [
+ q(4328),
+ q(0),
+ ],
+ q(c'lela) => [
+ q(2135),
+ q(0),
+ ],
+ q(caac) => [
+ q(4524),
+ q(0),
+ ],
+ q(cabecar) => [
+ q(1752),
+ q(0),
+ ],
+ q(cabiyari) => [
+ q(1662),
+ q(0),
+ ],
+ q(cacaloxtepec mixtec) => [
+ q(4292),
+ q(0),
+ ],
+ q(cacaopera) => [
+ q(1692),
+ q(0),
+ ],
+ q(cacgia roglai) => [
+ q(5811),
+ q(0),
+ ],
+ q(cacua) => [
+ q(1678),
+ q(0),
+ ],
+ q(caddo) => [
+ q(0068),
+ q(0),
+ ],
+ q(caddoan languages) => [
+ q(0498),
+ q(0),
+ ],
+ q(cafundo creole) => [
+ q(1683),
+ q(0),
+ ],
+ q(cagua) => [
+ q(1667),
+ q(0),
+ ],
+ q(cahuarano) => [
+ q(1647),
+ q(0),
+ ],
+ q(cahuilla) => [
+ q(1725),
+ q(0),
+ ],
+ q(cajamarca quechua) => [
+ q(5675),
+ q(0),
+ ],
+ q(cajatambo north lima quechua) => [
+ q(5680),
+ q(0),
+ ],
+ q(cajonos zapotec) => [
+ q(7719),
+ q(0),
+ ],
+ q(cajun french) => [
+ q(2362),
+ q(0),
+ ],
+ q(caka) => [
+ q(1766),
+ q(0),
+ ],
+ q(cakchiquel) => [
+ q(1649),
+ q(0),
+ ],
+ q(cakchiquel-quiche mixed language) => [
+ q(1768),
+ q(0),
+ ],
+ q(cakfem-mushere) => [
+ q(1767),
+ q(0),
+ ],
+ q(calamian tagbanwa) => [
+ q(6358),
+ q(0),
+ ],
+ q(calderon highland quichua) => [
+ q(5656),
+ q(0),
+ ],
+ q(callawalla) => [
+ q(1658),
+ q(0),
+ ],
+ q(calo) => [
+ q(5793),
+ q(0),
+ ],
+ q(caluyanun) => [
+ q(1781),
+ q(0),
+ ],
+ q(cameroon mambila) => [
+ q(4147),
+ q(0),
+ ],
+ q(cameroon pidgin) => [
+ q(7073),
+ q(0),
+ ],
+ q(camling) => [
+ q(5711),
+ q(0),
+ ],
+ q(campalagian) => [
+ q(1788),
+ q(0),
+ ],
+ q(campidanese sardinian) => [
+ q(6191),
+ q(0),
+ ],
+ q(camsa) => [
+ q(3168),
+ q(0),
+ ],
+ q(camtho) => [
+ q(1794),
+ q(0),
+ ],
+ q(camunic) => [
+ q(7259),
+ q(0),
+ ],
+ q(canar highland quichua) => [
+ q(5703),
+ q(0),
+ ],
+ q(candoshi-shapra) => [
+ q(1677),
+ q(0),
+ ],
+ q(canela) => [
+ q(5720),
+ q(0),
+ ],
+ q(canichana) => [
+ q(1661),
+ q(0),
+ ],
+ q(cao lan) => [
+ q(4346),
+ q(0),
+ ],
+ q(cao miao) => [
+ q(1826),
+ q(0),
+ ],
+ q(capanahua) => [
+ q(3158),
+ q(0),
+ ],
+ q(capiznon) => [
+ q(1837),
+ q(0),
+ ],
+ q(cappadocian greek) => [
+ q(1834),
+ q(0),
+ ],
+ q(caquinte) => [
+ q(1824),
+ q(0),
+ ],
+ q(car nicobarese) => [
+ q(1655),
+ q(0),
+ ],
+ q(cara) => [
+ q(1713),
+ q(0),
+ ],
+ q(carabayo) => [
+ q(1680),
+ q(0),
+ ],
+ q(caramanta) => [
+ q(1847),
+ q(0),
+ ],
+ q(carapana) => [
+ q(1663),
+ q(0),
+ ],
+ q(carian) => [
+ q(7267),
+ q(0),
+ ],
+ q(caribbean hindustani) => [
+ q(2793),
+ q(0),
+ ],
+ q(caribbean javanese) => [
+ q(3143),
+ q(0),
+ ],
+ q(carijona) => [
+ q(1664),
+ q(0),
+ ],
+ q(carolina algonquian) => [
+ q(1857),
+ q(0),
+ ],
+ q(carolinian) => [
+ q(1650),
+ q(0),
+ ],
+ q(carpathian romani) => [
+ q(5780),
+ q(0),
+ ],
+ q(carrier) => [
+ q(1862),
+ q(0),
+ ],
+ q(cashibo-cacataibo) => [
+ q(1674),
+ q(0),
+ ],
+ q(cashinahua) => [
+ q(1675),
+ q(0),
+ ],
+ q(casiguran dumagat agta) => [
+ q(2005),
+ q(0),
+ ],
+ q(castilian) => [
+ q(0401),
+ q(0),
+ ],
+ q(casuarina coast asmat) => [
+ q(0888),
+ q(0),
+ ],
+ q(catalan) => [
+ q(0071),
+ q(0),
+ ],
+ q(catalan sign language) => [
+ q(1866),
+ q(0),
+ ],
+ q(catawba) => [
+ q(1720),
+ q(0),
+ ],
+ q(cauca) => [
+ q(1681),
+ q(0),
+ ],
+ q(caucasian languages) => [
+ q(0072),
+ q(0),
+ ],
+ q(cavinena) => [
+ q(1657),
+ q(0),
+ ],
+ q(cayubaba) => [
+ q(1929),
+ q(0),
+ ],
+ q(cayuga) => [
+ q(1660),
+ q(0),
+ ],
+ q(cayuse) => [
+ q(7272),
+ q(0),
+ ],
+ q(cebaara senoufo) => [
+ q(5939),
+ q(0),
+ ],
+ q(cebuano) => [
+ q(0073),
+ q(0),
+ ],
+ q(celtiberian) => [
+ q(7260),
+ q(0),
+ ],
+ q(celtic languages) => [
+ q(0074),
+ q(0),
+ ],
+ q(cemuhi) => [
+ q(1651),
+ q(0),
+ ],
+ q(cen) => [
+ q(1710),
+ q(0),
+ ],
+ q(central american indian languages) => [
+ q(0069),
+ q(0),
+ ],
+ q(central asmat) => [
+ q(1804),
+ q(0),
+ ],
+ q(central atlas tamazight) => [
+ q(6815),
+ q(0),
+ ],
+ q(central awyu) => [
+ q(0982),
+ q(0),
+ ],
+ q(central aymara) => [
+ q(1007),
+ q(0),
+ ],
+ q(central bai) => [
+ q(1065),
+ q(0),
+ ],
+ q(central berawan) => [
+ q(7740),
+ q(0),
+ ],
+ q(central bikol) => [
+ q(1076),
+ q(0),
+ ],
+ q(central bontok) => [
+ q(3801),
+ q(0),
+ ],
+ q(central cagayan agta) => [
+ q(0672),
+ q(0),
+ ],
+ q(central dusun) => [
+ q(2160),
+ q(0),
+ ],
+ q(central grebo) => [
+ q(2612),
+ q(0),
+ ],
+ q(central hongshuihe zhuang) => [
+ q(7745),
+ q(0),
+ ],
+ q(central huasteca nahuatl) => [
+ q(4751),
+ q(0),
+ ],
+ q(central huishui hmong) => [
+ q(2764),
+ q(0),
+ ],
+ q(central huishui miao) => [
+ q(2764),
+ q(0),
+ ],
+ q(central kanuri) => [
+ q(3459),
+ q(0),
+ ],
+ q(central khmer) => [
+ q(0222),
+ q(0),
+ ],
+ q(central kurdish) => [
+ q(1756),
+ q(0),
+ ],
+ q(central lalo) => [
+ q(7707),
+ q(0),
+ ],
+ q(central maewo) => [
+ q(4616),
+ q(0),
+ ],
+ q(central malay) => [
+ q(5587),
+ q(0),
+ ],
+ q(central malayo-polynesian languages) => [
+ q(0519),
+ q(0),
+ ],
+ q(central masela) => [
+ q(4652),
+ q(0),
+ ],
+ q(central mashan hmong) => [
+ q(2774),
+ q(0),
+ ],
+ q(central mashan miao) => [
+ q(2774),
+ q(0),
+ ],
+ q(central mazahua) => [
+ q(4101),
+ q(0),
+ ],
+ q(central melanau) => [
+ q(4187),
+ q(0),
+ ],
+ q(central mnong) => [
+ q(1791),
+ q(0),
+ ],
+ q(central nahuatl) => [
+ q(4853),
+ q(0),
+ ],
+ q(central nicobarese) => [
+ q(4745),
+ q(0),
+ ],
+ q(central ojibwa) => [
+ q(5195),
+ q(0),
+ ],
+ q(central okinawan) => [
+ q(5855),
+ q(0),
+ ],
+ q(central palawano) => [
+ q(5463),
+ q(0),
+ ],
+ q(central pame) => [
+ q(5351),
+ q(0),
+ ],
+ q(central pashto) => [
+ q(5599),
+ q(0),
+ ],
+ q(central pomo) => [
+ q(5537),
+ q(0),
+ ],
+ q(central puebla nahuatl) => [
+ q(4764),
+ q(0),
+ ],
+ q(central sama) => [
+ q(6095),
+ q(0),
+ ],
+ q(central siberian yupik) => [
+ q(2293),
+ q(0),
+ ],
+ q(central sierra miwok) => [
+ q(1875),
+ q(0),
+ ],
+ q(central subanen) => [
+ q(6305),
+ q(0),
+ ],
+ q(central sudanic languages) => [
+ q(0499),
+ q(0),
+ ],
+ q(central tagbanwa) => [
+ q(6459),
+ q(0),
+ ],
+ q(central tarahumara) => [
+ q(6340),
+ q(0),
+ ],
+ q(central tunebo) => [
+ q(6734),
+ q(0),
+ ],
+ q(central yupik) => [
+ q(2294),
+ q(0),
+ ],
+ q(central-eastern niger fulfulde) => [
+ q(2381),
+ q(0),
+ ],
+ q(centuum) => [
+ q(1711),
+ q(0),
+ ],
+ q(cerma) => [
+ q(1785),
+ q(0),
+ ],
+ q(chachapoyas quechua) => [
+ q(5661),
+ q(0),
+ ],
+ q(chachi) => [
+ q(1668),
+ q(0),
+ ],
+ q(chacobo) => [
+ q(1653),
+ q(0),
+ ],
+ q(chadian arabic) => [
+ q(6000),
+ q(0),
+ ],
+ q(chadian sign language) => [
+ q(1704),
+ q(0),
+ ],
+ q(chadic languages) => [
+ q(0497),
+ q(0),
+ ],
+ q(chadong) => [
+ q(1705),
+ q(0),
+ ],
+ q(chagatai) => [
+ q(0078),
+ q(0),
+ ],
+ q(chaima) => [
+ q(1743),
+ q(0),
+ ],
+ q(chak) => [
+ q(1757),
+ q(0),
+ ],
+ q(chakali) => [
+ q(1774),
+ q(0),
+ ],
+ q(chakma) => [
+ q(1691),
+ q(0),
+ ],
+ q(chala) => [
+ q(1777),
+ q(0),
+ ],
+ q(chaldean neo-aramaic) => [
+ q(1771),
+ q(0),
+ ],
+ q(chalikha) => [
+ q(6448),
+ q(0),
+ ],
+ q(chamacoco) => [
+ q(1708),
+ q(0),
+ ],
+ q(chamalal) => [
+ q(1747),
+ q(0),
+ ],
+ q(chamari) => [
+ q(1696),
+ q(0),
+ ],
+ q(chambeali) => [
+ q(1697),
+ q(0),
+ ],
+ q(chambri) => [
+ q(1652),
+ q(0),
+ ],
+ q(chamic languages) => [
+ q(0089),
+ q(0),
+ ],
+ q(chamicuro) => [
+ q(1682),
+ q(0),
+ ],
+ q(chamorro) => [
+ q(0075),
+ q(0),
+ ],
+ q(chane) => [
+ q(1648),
+ q(0),
+ ],
+ q(chang naga) => [
+ q(4723),
+ q(0),
+ ],
+ q(changriwa) => [
+ q(1716),
+ q(0),
+ ],
+ q(changthang) => [
+ q(1795),
+ q(0),
+ ],
+ q(chantyal) => [
+ q(1729),
+ q(0),
+ ],
+ q(chara) => [
+ q(1843),
+ q(0),
+ ],
+ q(chaudangsi) => [
+ q(1701),
+ q(0),
+ ],
+ q(chaura) => [
+ q(1860),
+ q(0),
+ ],
+ q(chavacano) => [
+ q(1670),
+ q(0),
+ ],
+ q(chayahuita) => [
+ q(1676),
+ q(0),
+ ],
+ q(chayuco mixtec) => [
+ q(4281),
+ q(0),
+ ],
+ q(chazumba mixtec) => [
+ q(7441),
+ q(0),
+ ],
+ q(che) => [
+ q(5841),
+ q(0),
+ ],
+ q(chechen) => [
+ q(0077),
+ q(0),
+ ],
+ q(cheke holo) => [
+ q(4496),
+ q(0),
+ ],
+ q(chemakum) => [
+ q(7262),
+ q(0),
+ ],
+ q(chenapian) => [
+ q(1750),
+ q(0),
+ ],
+ q(chenchu) => [
+ q(1694),
+ q(0),
+ ],
+ q(chenoua) => [
+ q(1806),
+ q(0),
+ ],
+ q(chepang) => [
+ q(1700),
+ q(0),
+ ],
+ q(chepya) => [
+ q(7534),
+ q(0),
+ ],
+ q(cheq wong) => [
+ q(1926),
+ q(0),
+ ],
+ q(cherepon) => [
+ q(1836),
+ q(0),
+ ],
+ q(cherokee) => [
+ q(0085),
+ q(0),
+ ],
+ q(chesu) => [
+ q(7531),
+ q(0),
+ ],
+ q(chetco) => [
+ q(1887),
+ q(0),
+ ],
+ q(chewa) => [
+ q(0321),
+ q(0),
+ ],
+ q(chewong) => [
+ q(1926),
+ q(0),
+ ],
+ q(cheyenne) => [
+ q(0088),
+ q(0),
+ ],
+ q(chhattisgarhi) => [
+ q(2787),
+ q(0),
+ ],
+ q(chhintange) => [
+ q(1894),
+ q(0),
+ ],
+ q(chhulung) => [
+ q(1914),
+ q(0),
+ ],
+ q(chiangmai sign language) => [
+ q(1867),
+ q(0),
+ ],
+ q(chiapanec) => [
+ q(1740),
+ q(0),
+ ],
+ q(chibcha) => [
+ q(0076),
+ q(0),
+ ],
+ q(chibchan languages) => [
+ q(0494),
+ q(0),
+ ],
+ q(chicahuaxtla triqui) => [
+ q(6673),
+ q(0),
+ ],
+ q(chichewa) => [
+ q(0321),
+ q(0),
+ ],
+ q(chichicapan zapotec) => [
+ q(7846),
+ q(0),
+ ],
+ q(chichimeca-jonaz) => [
+ q(5387),
+ q(0),
+ ],
+ q(chichonyi-chidzihana-chikauma) => [
+ q(1816),
+ q(0),
+ ],
+ q(chickasaw) => [
+ q(1733),
+ q(0),
+ ],
+ q(chicomuceltec) => [
+ q(1810),
+ q(0),
+ ],
+ q(chidigo) => [
+ q(2038),
+ q(0),
+ ],
+ q(chiduruma) => [
+ q(2171),
+ q(0),
+ ],
+ q(chiga) => [
+ q(1718),
+ q(0),
+ ],
+ q(chigmecatitlan mixtec) => [
+ q(4282),
+ q(0),
+ ],
+ q(chilcotin) => [
+ q(1770),
+ q(0),
+ ],
+ q(chilean quechua) => [
+ q(1842),
+ q(0),
+ ],
+ q(chilean sign language) => [
+ q(1870),
+ q(0),
+ ],
+ q(chilisso) => [
+ q(1773),
+ q(0),
+ ],
+ q(chiltepec chinantec) => [
+ q(1865),
+ q(0),
+ ],
+ q(chimakum) => [
+ q(7262),
+ q(0),
+ ],
+ q(chimalapa zoque) => [
+ q(7819),
+ q(0),
+ ],
+ q(chimariko) => [
+ q(1734),
+ q(0),
+ ],
+ q(chimborazo highland quichua) => [
+ q(5658),
+ q(0),
+ ],
+ q(chimila) => [
+ q(1666),
+ q(0),
+ ],
+ q(china buriat) => [
+ q(1586),
+ q(0),
+ ],
+ q(chinali) => [
+ q(1736),
+ q(0),
+ ],
+ q(chinbon chin) => [
+ q(1796),
+ q(0),
+ ],
+ q(chincha quechua) => [
+ q(5696),
+ q(0),
+ ],
+ q(chinese) => [
+ q(0079),
+ q(0),
+ ],
+ q(chinese (family)) => [
+ q(0533),
+ q(0),
+ ],
+ q(chinese pidgin english) => [
+ q(1835),
+ q(0),
+ ],
+ q(chinese sign language) => [
+ q(1874),
+ q(0),
+ ],
+ q(chinook) => [
+ q(1723),
+ q(0),
+ ],
+ q(chinook jargon) => [
+ q(0082),
+ q(0),
+ ],
+ q(chipaya) => [
+ q(1654),
+ q(0),
+ ],
+ q(chipewyan) => [
+ q(0084),
+ q(0),
+ ],
+ q(chipiajes) => [
+ q(1665),
+ q(0),
+ ],
+ q(chippewa) => [
+ q(1742),
+ q(0),
+ ],
+ q(chiquian ancash quechua) => [
+ q(5695),
+ q(0),
+ ],
+ q(chiquihuitlan mazatec) => [
+ q(4095),
+ q(0),
+ ],
+ q(chiquitano) => [
+ q(1659),
+ q(0),
+ ],
+ q(chiripa) => [
+ q(4845),
+ q(0),
+ ],
+ q(chiru) => [
+ q(1695),
+ q(0),
+ ],
+ q(chitimacha) => [
+ q(1893),
+ q(0),
+ ],
+ q(chitkuli kinnauri) => [
+ q(1737),
+ q(0),
+ ],
+ q(chittagonian) => [
+ q(1890),
+ q(0),
+ ],
+ q(chitwania tharu) => [
+ q(6468),
+ q(0),
+ ],
+ q(choapan zapotec) => [
+ q(7827),
+ q(0),
+ ],
+ q(chocangacakha) => [
+ q(1719),
+ q(0),
+ ],
+ q(chochotec) => [
+ q(1830),
+ q(0),
+ ],
+ q(choctaw) => [
+ q(0083),
+ q(0),
+ ],
+ q(chodri) => [
+ q(1698),
+ q(0),
+ ],
+ q(chokri naga) => [
+ q(5034),
+ q(0),
+ ],
+ q(chokwe) => [
+ q(1748),
+ q(0),
+ ],
+ q(chol) => [
+ q(1899),
+ q(0),
+ ],
+ q(cholon) => [
+ q(1727),
+ q(0),
+ ],
+ q(chong) => [
+ q(1815),
+ q(0),
+ ],
+ q(choni) => [
+ q(1693),
+ q(0),
+ ],
+ q(chonyi-dzihana-kauma) => [
+ q(1816),
+ q(0),
+ ],
+ q(chopi) => [
+ q(1684),
+ q(0),
+ ],
+ q(chorasmian) => [
+ q(7266),
+ q(0),
+ ],
+ q(chorti) => [
+ q(1641),
+ q(0),
+ ],
+ q(chothe naga) => [
+ q(4762),
+ q(0),
+ ],
+ q(chrau) => [
+ q(1861),
+ q(0),
+ ],
+ q(chru) => [
+ q(1745),
+ q(0),
+ ],
+ q(chuang) => [
+ q(0481),
+ q(0),
+ ],
+ q(chuanqiandian cluster miao) => [
+ q(1841),
+ q(0),
+ ],
+ q(chuave) => [
+ q(1754),
+ q(0),
+ ],
+ q(chug) => [
+ q(1920),
+ q(0),
+ ],
+ q(chuj) => [
+ q(1643),
+ q(0),
+ ],
+ q(chuka) => [
+ q(1905),
+ q(0),
+ ],
+ q(chukot) => [
+ q(1763),
+ q(0),
+ ],
+ q(chukwa) => [
+ q(1918),
+ q(0),
+ ],
+ q(chulym) => [
+ q(1782),
+ q(0),
+ ],
+ q(chumburung) => [
+ q(4763),
+ q(0),
+ ],
+ q(churahi) => [
+ q(1699),
+ q(0),
+ ],
+ q(church slavic) => [
+ q(0086),
+ q(0),
+ ],
+ q(church slavonic) => [
+ q(0086),
+ q(0),
+ ],
+ q(chut) => [
+ q(5899),
+ q(0),
+ ],
+ q(chuukese) => [
+ q(0080),
+ q(0),
+ ],
+ q(chuvantsy) => [
+ q(7270),
+ q(0),
+ ],
+ q(chuvash) => [
+ q(0087),
+ q(0),
+ ],
+ q(chuwabu) => [
+ q(1728),
+ q(0),
+ ],
+ q(ci gbe) => [
+ q(1732),
+ q(0),
+ ],
+ q(cia-cia) => [
+ q(1731),
+ q(0),
+ ],
+ q(cibak) => [
+ q(1758),
+ q(0),
+ ],
+ q(cicipu) => [
+ q(0970),
+ q(0),
+ ],
+ q(cimbrian) => [
+ q(1738),
+ q(0),
+ ],
+ q(cinda-regi-tiyal) => [
+ q(1703),
+ q(0),
+ ],
+ q(cineni) => [
+ q(1735),
+ q(0),
+ ],
+ q(cinta larga) => [
+ q(1739),
+ q(0),
+ ],
+ q(cisalpine gaulish) => [
+ q(7261),
+ q(0),
+ ],
+ q(cishingini) => [
+ q(0892),
+ q(0),
+ ],
+ q(citak) => [
+ q(6794),
+ q(0),
+ ],
+ q(ciwogai) => [
+ q(6446),
+ q(0),
+ ],
+ q(clallam) => [
+ q(1778),
+ q(0),
+ ],
+ q(classical armenian) => [
+ q(7263),
+ q(0),
+ ],
+ q(classical mandaic) => [
+ q(4674),
+ q(0),
+ ],
+ q(classical mongolian) => [
+ q(1786),
+ q(0),
+ ],
+ q(classical nahuatl) => [
+ q(4752),
+ q(0),
+ ],
+ q(classical nepal bhasa) => [
+ q(0320),
+ q(0),
+ ],
+ q(classical newari) => [
+ q(0320),
+ q(0),
+ ],
+ q(classical quechua) => [
+ q(5690),
+ q(0),
+ ],
+ q(classical syriac) => [
+ q(0414),
+ q(0),
+ ],
+ q(classical tibetan) => [
+ q(7268),
+ q(0),
+ ],
+ q(coahuilteco) => [
+ q(7271),
+ q(0),
+ ],
+ q(coast miwok) => [
+ q(1872),
+ q(0),
+ ],
+ q(coastal kadazan) => [
+ q(3756),
+ q(0),
+ ],
+ q(coastal konjo) => [
+ q(3358),
+ q(0),
+ ],
+ q(coatecas altas zapotec) => [
+ q(7744),
+ q(0),
+ ],
+ q(coatepec nahuatl) => [
+ q(4720),
+ q(0),
+ ],
+ q(coatlan mixe) => [
+ q(4141),
+ q(0),
+ ],
+ q(coatlan zapotec) => [
+ q(7843),
+ q(0),
+ ],
+ q(coatzospan mixtec) => [
+ q(4296),
+ q(0),
+ ],
+ q(cocama-cocamilla) => [
+ q(1812),
+ q(0),
+ ],
+ q(cochimi) => [
+ q(1817),
+ q(0),
+ ],
+ q(cocopa) => [
+ q(1811),
+ q(0),
+ ],
+ q(cocos islands malay) => [
+ q(1809),
+ q(0),
+ ],
+ q(coeur d'alene) => [
+ q(1846),
+ q(0),
+ ],
+ q(cofan) => [
+ q(1821),
+ q(0),
+ ],
+ q(cogui) => [
+ q(3487),
+ q(0),
+ ],
+ q(col) => [
+ q(3908),
+ q(0),
+ ],
+ q(colombian sign language) => [
+ q(1876),
+ q(0),
+ ],
+ q(colonia tovar german) => [
+ q(2441),
+ q(0),
+ ],
+ q(colorado) => [
+ q(1814),
+ q(0),
+ ],
+ q(columbia-wenatchi) => [
+ q(1819),
+ q(0),
+ ],
+ q(comaltepec chinantec) => [
+ q(1690),
+ q(0),
+ ],
+ q(comanche) => [
+ q(1820),
+ q(0),
+ ],
+ q(comecrudo) => [
+ q(7264),
+ q(0),
+ ],
+ q(como karim) => [
+ q(1714),
+ q(0),
+ ],
+ q(comox) => [
+ q(1822),
+ q(0),
+ ],
+ q(con) => [
+ q(1803),
+ q(0),
+ ],
+ q(congo swahili) => [
+ q(6270),
+ q(0),
+ ],
+ q(cook islands maori) => [
+ q(0356),
+ q(0),
+ ],
+ q(coong) => [
+ q(1797),
+ q(0),
+ ],
+ q(coos) => [
+ q(1885),
+ q(0),
+ ],
+ q(copainala zoque) => [
+ q(7818),
+ q(0),
+ ],
+ q(copala triqui) => [
+ q(6658),
+ q(0),
+ ],
+ q(coptic) => [
+ q(0090),
+ q(0),
+ ],
+ q(coquille) => [
+ q(1823),
+ q(0),
+ ],
+ q(cori) => [
+ q(1863),
+ q(0),
+ ],
+ q(cornish) => [
+ q(0091),
+ q(0),
+ ],
+ q(corongo ancash quechua) => [
+ q(5689),
+ q(0),
+ ],
+ q(corsican) => [
+ q(0092),
+ q(0),
+ ],
+ q(costa rican sign language) => [
+ q(1879),
+ q(0),
+ ],
+ q(cotabato manobo) => [
+ q(4533),
+ q(0),
+ ],
+ q(cotoname) => [
+ q(7265),
+ q(0),
+ ],
+ q(cowlitz) => [
+ q(1827),
+ q(0),
+ ],
+ q(coxima) => [
+ q(3499),
+ q(0),
+ ],
+ q(coyaima) => [
+ q(1829),
+ q(0),
+ ],
+ q(coyotepec popoloca) => [
+ q(5342),
+ q(0),
+ ],
+ q(coyutla totonac) => [
+ q(6604),
+ q(0),
+ ],
+ q(cree) => [
+ q(0096),
+ q(0),
+ ],
+ q(creek) => [
+ q(0293),
+ q(0),
+ ],
+ q(creoles and pidgins) => [
+ q(0098),
+ q(1),
+ ],
+ q(creoles and pidgins ) => [
+ q(0098),
+ q(0),
+ ],
+ q(creoles and pidgins, english based) => [
+ q(0093),
+ q(0),
+ ],
+ q(creoles and pidgins, english-based) => [
+ q(0093),
+ q(1),
+ ],
+ q(creoles and pidgins, french-based) => [
+ q(0094),
+ q(1),
+ ],
+ q(creoles and pidgins, french-based ) => [
+ q(0094),
+ q(0),
+ ],
+ q(creoles and pidgins, portuguese-based) => [
+ q(0095),
+ q(1),
+ ],
+ q(creoles and pidgins, portuguese-based ) => [
+ q(0095),
+ q(0),
+ ],
+ q(crimean tatar) => [
+ q(0097),
+ q(0),
+ ],
+ q(crimean turkish) => [
+ q(0097),
+ q(0),
+ ],
+ q(croatia sign language) => [
+ q(1878),
+ q(0),
+ ],
+ q(croatian) => [
+ q(0181),
+ q(0),
+ ],
+ q(cross river mbembe) => [
+ q(4213),
+ q(0),
+ ],
+ q(crow) => [
+ q(1855),
+ q(0),
+ ],
+ q(cruzeno) => [
+ q(1864),
+ q(0),
+ ],
+ q(cua) => [
+ q(1901),
+ q(0),
+ ],
+ q(cuba sign language) => [
+ q(1869),
+ q(0),
+ ],
+ q(cubeo) => [
+ q(1902),
+ q(0),
+ ],
+ q(cuiba) => [
+ q(1906),
+ q(0),
+ ],
+ q(culina) => [
+ q(1909),
+ q(0),
+ ],
+ q(cumanagoto) => [
+ q(1911),
+ q(0),
+ ],
+ q(cumbric) => [
+ q(7258),
+ q(0),
+ ],
+ q(cumeral) => [
+ q(1910),
+ q(0),
+ ],
+ q(cun) => [
+ q(1913),
+ q(0),
+ ],
+ q(cuneiform luwian) => [
+ q(7346),
+ q(0),
+ ],
+ q(cung) => [
+ q(1904),
+ q(0),
+ ],
+ q(cupeno) => [
+ q(1912),
+ q(0),
+ ],
+ q(curonian) => [
+ q(7269),
+ q(0),
+ ],
+ q(curripaco) => [
+ q(3504),
+ q(0),
+ ],
+ q(cusco quechua) => [
+ q(5673),
+ q(0),
+ ],
+ q(cushitic languages) => [
+ q(0100),
+ q(0),
+ ],
+ q(cutchi-swahili) => [
+ q(1688),
+ q(0),
+ ],
+ q(cuvok) => [
+ q(1917),
+ q(0),
+ ],
+ q(cuyamecalco mixtec) => [
+ q(7457),
+ q(0),
+ ],
+ q(cuyonon) => [
+ q(1930),
+ q(0),
+ ],
+ q(cwi bwamu) => [
+ q(1565),
+ q(0),
+ ],
+ q(cypriot arabic) => [
+ q(0603),
+ q(0),
+ ],
+ q(czech) => [
+ q(0101),
+ q(0),
+ ],
+ q(czech sign language) => [
+ q(1868),
+ q(0),
+ ],
+ q(da'a kaili) => [
+ q(3753),
+ q(0),
+ ],
+ q(da-hua miao) => [
+ q(2765),
+ q(0),
+ ],
+ q(daai chin) => [
+ q(1947),
+ q(0),
+ ],
+ q(daantanai') => [
+ q(3980),
+ q(0),
+ ],
+ q(daasanach) => [
+ q(2146),
+ q(0),
+ ],
+ q(daba) => [
+ q(1968),
+ q(0),
+ ],
+ q(dabarre) => [
+ q(1969),
+ q(0),
+ ],
+ q(dabe) => [
+ q(1958),
+ q(0),
+ ],
+ q(dacian) => [
+ q(7273),
+ q(0),
+ ],
+ q(dadi dadi) => [
+ q(1977),
+ q(0),
+ ],
+ q(dadibi) => [
+ q(4451),
+ q(0),
+ ],
+ q(dadiya) => [
+ q(1957),
+ q(0),
+ ],
+ q(daga) => [
+ q(2020),
+ q(0),
+ ],
+ q(dagaari dioula) => [
+ q(2006),
+ q(0),
+ ],
+ q(dagba) => [
+ q(2011),
+ q(0),
+ ],
+ q(dagbani) => [
+ q(1941),
+ q(0),
+ ],
+ q(dagik) => [
+ q(1988),
+ q(0),
+ ],
+ q(dagoman) => [
+ q(2013),
+ q(0),
+ ],
+ q(dahalo) => [
+ q(1945),
+ q(0),
+ ],
+ q(daho-doo) => [
+ q(1949),
+ q(0),
+ ],
+ q(dai) => [
+ q(2041),
+ q(0),
+ ],
+ q(dai zhuang) => [
+ q(7756),
+ q(0),
+ ],
+ q(dair) => [
+ q(2130),
+ q(0),
+ ],
+ q(dakaka) => [
+ q(1376),
+ q(0),
+ ],
+ q(dakka) => [
+ q(2073),
+ q(0),
+ ],
+ q(dakota) => [
+ q(0102),
+ q(0),
+ ],
+ q(dakpakha) => [
+ q(2072),
+ q(0),
+ ],
+ q(dalmatian) => [
+ q(2078),
+ q(0),
+ ],
+ q(daloa bete) => [
+ q(1132),
+ q(0),
+ ],
+ q(dama) => [
+ q(2088),
+ q(0),
+ ],
+ q(damakawa) => [
+ q(1946),
+ q(0),
+ ],
+ q(damal) => [
+ q(6843),
+ q(0),
+ ],
+ q(dambi) => [
+ q(1937),
+ q(0),
+ ],
+ q(dameli) => [
+ q(2087),
+ q(0),
+ ],
+ q(dampelas) => [
+ q(2091),
+ q(0),
+ ],
+ q(dan) => [
+ q(1940),
+ q(0),
+ ],
+ q(danaru) => [
+ q(2103),
+ q(0),
+ ],
+ q(danau) => [
+ q(2105),
+ q(0),
+ ],
+ q(dandami maria) => [
+ q(1948),
+ q(0),
+ ],
+ q(dangaleat) => [
+ q(1936),
+ q(0),
+ ],
+ q(dangaura tharu) => [
+ q(6473),
+ q(0),
+ ],
+ q(danish) => [
+ q(0103),
+ q(0),
+ ],
+ q(danish sign language) => [
+ q(2148),
+ q(0),
+ ],
+ q(dano) => [
+ q(0899),
+ q(0),
+ ],
+ q(danu) => [
+ q(2106),
+ q(0),
+ ],
+ q(dao) => [
+ q(1954),
+ q(0),
+ ],
+ q(daonda) => [
+ q(2097),
+ q(0),
+ ],
+ q(dar daju daju) => [
+ q(2058),
+ q(0),
+ ],
+ q(dar fur daju) => [
+ q(1944),
+ q(0),
+ ],
+ q(dar sila daju) => [
+ q(1950),
+ q(0),
+ ],
+ q(darai) => [
+ q(2144),
+ q(0),
+ ],
+ q(darang deng) => [
+ q(4270),
+ q(0),
+ ],
+ q(dargwa) => [
+ q(0104),
+ q(0),
+ ],
+ q(dari) => [
+ q(5577),
+ q(0),
+ ],
+ q(darlong) => [
+ q(2079),
+ q(0),
+ ],
+ q(darmiya) => [
+ q(2132),
+ q(0),
+ ],
+ q(daro-matu melanau) => [
+ q(2138),
+ q(0),
+ ],
+ q(dass) => [
+ q(2123),
+ q(0),
+ ],
+ q(datooga) => [
+ q(6375),
+ q(0),
+ ],
+ q(daungwurrung) => [
+ q(2018),
+ q(0),
+ ],
+ q(daur) => [
+ q(2152),
+ q(0),
+ ],
+ q(davawenyo) => [
+ q(1952),
+ q(0),
+ ],
+ q(daw) => [
+ q(3671),
+ q(0),
+ ],
+ q(dawawa) => [
+ q(2193),
+ q(0),
+ ],
+ q(dawera-daweloor) => [
+ q(1987),
+ q(0),
+ ],
+ q(dawida) => [
+ q(1951),
+ q(0),
+ ],
+ q(dawro) => [
+ q(2191),
+ q(0),
+ ],
+ q(day) => [
+ q(1943),
+ q(0),
+ ],
+ q(dayi) => [
+ q(1953),
+ q(0),
+ ],
+ q(daza) => [
+ q(2204),
+ q(0),
+ ],
+ q(dazaga) => [
+ q(2205),
+ q(0),
+ ],
+ q(deccan) => [
+ q(1975),
+ q(0),
+ ],
+ q(dedua) => [
+ q(1989),
+ q(0),
+ ],
+ q(defaka) => [
+ q(0647),
+ q(0),
+ ],
+ q(defi gbe) => [
+ q(2417),
+ q(0),
+ ],
+ q(deg) => [
+ q(4696),
+ q(0),
+ ],
+ q(degaru) => [
+ q(2017),
+ q(0),
+ ],
+ q(degema) => [
+ q(1992),
+ q(0),
+ ],
+ q(degenan) => [
+ q(2007),
+ q(0),
+ ],
+ q(degexit'an) => [
+ q(2951),
+ q(0),
+ ],
+ q(dehu) => [
+ q(2031),
+ q(0),
+ ],
+ q(dehwari) => [
+ q(1993),
+ q(0),
+ ],
+ q(dek) => [
+ q(1995),
+ q(0),
+ ],
+ q(dela-oenale) => [
+ q(5821),
+ q(0),
+ ],
+ q(delaware) => [
+ q(0106),
+ q(0),
+ ],
+ q(delo) => [
+ q(5074),
+ q(0),
+ ],
+ q(dem) => [
+ q(1996),
+ q(0),
+ ],
+ q(dema) => [
+ q(2094),
+ q(0),
+ ],
+ q(demisa) => [
+ q(1994),
+ q(0),
+ ],
+ q(demta) => [
+ q(2095),
+ q(0),
+ ],
+ q(dendi (benin)) => [
+ q(1983),
+ q(0),
+ ],
+ q(dendi (central african republic)) => [
+ q(1998),
+ q(0),
+ ],
+ q(dene suline) => [
+ q(0084),
+ q(0),
+ ],
+ q(dengese) => [
+ q(2002),
+ q(0),
+ ],
+ q(dengka) => [
+ q(2101),
+ q(0),
+ ],
+ q(deni) => [
+ q(2108),
+ q(0),
+ ],
+ q(deno) => [
+ q(1956),
+ q(0),
+ ],
+ q(denya) => [
+ q(0811),
+ q(0),
+ ],
+ q(deori) => [
+ q(1999),
+ q(0),
+ ],
+ q(dera (indonesia)) => [
+ q(3182),
+ q(0),
+ ],
+ q(dera (nigeria)) => [
+ q(3457),
+ q(0),
+ ],
+ q(desano) => [
+ q(2000),
+ q(0),
+ ],
+ q(desiya) => [
+ q(2150),
+ q(0),
+ ],
+ q(dewoin) => [
+ q(1990),
+ q(0),
+ ],
+ q(dezfuli) => [
+ q(1991),
+ q(0),
+ ],
+ q(dghwede) => [
+ q(2009),
+ q(0),
+ ],
+ q(dhaiso) => [
+ q(2029),
+ q(0),
+ ],
+ q(dhalandji) => [
+ q(2024),
+ q(0),
+ ],
+ q(dhangu) => [
+ q(2022),
+ q(0),
+ ],
+ q(dhanki) => [
+ q(2026),
+ q(0),
+ ],
+ q(dhanwar (nepal)) => [
+ q(2032),
+ q(0),
+ ],
+ q(dhao) => [
+ q(4812),
+ q(0),
+ ],
+ q(dhargari) => [
+ q(2028),
+ q(0),
+ ],
+ q(dhatki) => [
+ q(4326),
+ q(0),
+ ],
+ q(dhimal) => [
+ q(2023),
+ q(0),
+ ],
+ q(dhivehi) => [
+ q(0110),
+ q(0),
+ ],
+ q(dhodia) => [
+ q(2027),
+ q(0),
+ ],
+ q(dhofari arabic) => [
+ q(0608),
+ q(0),
+ ],
+ q(dholuo) => [
+ q(0260),
+ q(1),
+ ],
+ q(dhudhuroa) => [
+ q(1985),
+ q(0),
+ ],
+ q(dhundari) => [
+ q(2021),
+ q(0),
+ ],
+ q(dhurga) => [
+ q(2030),
+ q(0),
+ ],
+ q(dhuwal) => [
+ q(2174),
+ q(0),
+ ],
+ q(dia) => [
+ q(2033),
+ q(0),
+ ],
+ q(dibabawon manobo) => [
+ q(4105),
+ q(0),
+ ],
+ q(dibiyaso) => [
+ q(1974),
+ q(0),
+ ],
+ q(dibo) => [
+ q(2045),
+ q(0),
+ ],
+ q(dibole) => [
+ q(1539),
+ q(0),
+ ],
+ q(dicamay agta) => [
+ q(2187),
+ q(0),
+ ],
+ q(didinga) => [
+ q(2036),
+ q(0),
+ ],
+ q(dido) => [
+ q(1984),
+ q(0),
+ ],
+ q(diebroud) => [
+ q(6363),
+ q(0),
+ ],
+ q(dieri) => [
+ q(2037),
+ q(0),
+ ],
+ q(digaro-mishmi) => [
+ q(4270),
+ q(0),
+ ],
+ q(digo) => [
+ q(2038),
+ q(0),
+ ],
+ q(dii) => [
+ q(2181),
+ q(0),
+ ],
+ q(dijim-bwilim) => [
+ q(1712),
+ q(0),
+ ],
+ q(dilling) => [
+ q(2043),
+ q(0),
+ ],
+ q(dima) => [
+ q(3094),
+ q(0),
+ ],
+ q(dimasa) => [
+ q(2049),
+ q(0),
+ ],
+ q(dimbong) => [
+ q(2040),
+ q(0),
+ ],
+ q(dime) => [
+ q(2044),
+ q(0),
+ ],
+ q(dimili) => [
+ q(0486),
+ q(0),
+ ],
+ q(dimir) => [
+ q(2082),
+ q(0),
+ ],
+ q(dimli) => [
+ q(0486),
+ q(0),
+ ],
+ q(dimli (individual language)) => [
+ q(2047),
+ q(0),
+ ],
+ q(dimli (macrolanguage)) => [
+ q(0486),
+ q(6),
+ ],
+ q(dineor) => [
+ q(4506),
+ q(0),
+ ],
+ q(ding) => [
+ q(2055),
+ q(0),
+ ],
+ q(dinka) => [
+ q(0109),
+ q(0),
+ ],
+ q(dirari) => [
+ q(2050),
+ q(0),
+ ],
+ q(dirasha) => [
+ q(2453),
+ q(0),
+ ],
+ q(diri) => [
+ q(2190),
+ q(0),
+ ],
+ q(diriku) => [
+ q(2051),
+ q(0),
+ ],
+ q(dirim) => [
+ q(2048),
+ q(0),
+ ],
+ q(disa) => [
+ q(2147),
+ q(0),
+ ],
+ q(ditammari) => [
+ q(6372),
+ q(0),
+ ],
+ q(ditidaht) => [
+ q(2154),
+ q(0),
+ ],
+ q(diuwe) => [
+ q(2054),
+ q(0),
+ ],
+ q(diuxi-tilantongo mixtec) => [
+ q(7443),
+ q(0),
+ ],
+ q(divehi) => [
+ q(0110),
+ q(0),
+ ],
+ q(dixon reef) => [
+ q(2053),
+ q(0),
+ ],
+ q(dizin) => [
+ q(4173),
+ q(0),
+ ],
+ q(djadjawurrung) => [
+ q(2056),
+ q(0),
+ ],
+ q(djambarrpuyngu) => [
+ q(2069),
+ q(0),
+ ],
+ q(djamindjung) => [
+ q(2059),
+ q(0),
+ ],
+ q(djangun) => [
+ q(2061),
+ q(0),
+ ],
+ q(djauan) => [
+ q(2067),
+ q(0),
+ ],
+ q(djawi) => [
+ q(2071),
+ q(0),
+ ],
+ q(djeebbana) => [
+ q(2063),
+ q(0),
+ ],
+ q(djimini senoufo) => [
+ q(2198),
+ q(0),
+ ],
+ q(djinang) => [
+ q(2062),
+ q(0),
+ ],
+ q(djinba) => [
+ q(2057),
+ q(0),
+ ],
+ q(djingili) => [
+ q(3075),
+ q(0),
+ ],
+ q(djiwarli) => [
+ q(2065),
+ q(0),
+ ],
+ q(dobel) => [
+ q(3659),
+ q(0),
+ ],
+ q(dobu) => [
+ q(2110),
+ q(0),
+ ],
+ q(doe) => [
+ q(2112),
+ q(0),
+ ],
+ q(doga) => [
+ q(2008),
+ q(0),
+ ],
+ q(doghoro) => [
+ q(2019),
+ q(0),
+ ],
+ q(dogose) => [
+ q(2122),
+ q(0),
+ ],
+ q(dogoso) => [
+ q(2015),
+ q(0),
+ ],
+ q(dogri) => [
+ q(0111),
+ q(0),
+ ],
+ q(dogri (individual language)) => [
+ q(2014),
+ q(0),
+ ],
+ q(dogri (macrolanguage)) => [
+ q(0111),
+ q(1),
+ ],
+ q(dogrib) => [
+ q(0108),
+ q(0),
+ ],
+ q(dogul dom dogon) => [
+ q(1960),
+ q(0),
+ ],
+ q(doka) => [
+ q(1961),
+ q(0),
+ ],
+ q(doko-uyanga) => [
+ q(6932),
+ q(0),
+ ],
+ q(dolgan) => [
+ q(2077),
+ q(0),
+ ],
+ q(dolpo) => [
+ q(2133),
+ q(0),
+ ],
+ q(dom) => [
+ q(2109),
+ q(0),
+ ],
+ q(domaaki) => [
+ q(2086),
+ q(0),
+ ],
+ q(domari) => [
+ q(5795),
+ q(0),
+ ],
+ q(dombe) => [
+ q(2124),
+ q(0),
+ ],
+ q(dominican sign language) => [
+ q(2120),
+ q(0),
+ ],
+ q(dompo) => [
+ q(2127),
+ q(0),
+ ],
+ q(domu) => [
+ q(2113),
+ q(0),
+ ],
+ q(domung) => [
+ q(2001),
+ q(0),
+ ],
+ q(dondo) => [
+ q(2115),
+ q(0),
+ ],
+ q(dong) => [
+ q(2114),
+ q(0),
+ ],
+ q(dongo) => [
+ q(2118),
+ q(0),
+ ],
+ q(dongolawi) => [
+ q(2012),
+ q(0),
+ ],
+ q(dongotono) => [
+ q(1978),
+ q(0),
+ ],
+ q(dongshanba lalo) => [
+ q(7566),
+ q(0),
+ ],
+ q(dongxiang) => [
+ q(5900),
+ q(0),
+ ],
+ q(donno so dogon) => [
+ q(1986),
+ q(0),
+ ],
+ q(doondo) => [
+ q(1979),
+ q(0),
+ ],
+ q(dori'o) => [
+ q(2121),
+ q(0),
+ ],
+ q(dorig) => [
+ q(7220),
+ q(0),
+ ],
+ q(doromu-koki) => [
+ q(3528),
+ q(0),
+ ],
+ q(dororo) => [
+ q(2140),
+ q(0),
+ ],
+ q(dorze) => [
+ q(2128),
+ q(0),
+ ],
+ q(doso) => [
+ q(2116),
+ q(0),
+ ],
+ q(dotyali) => [
+ q(2165),
+ q(0),
+ ],
+ q(doutai) => [
+ q(6412),
+ q(0),
+ ],
+ q(doyayo) => [
+ q(2125),
+ q(0),
+ ],
+ q(dravidian languages) => [
+ q(0112),
+ q(0),
+ ],
+ q(drents) => [
+ q(2142),
+ q(0),
+ ],
+ q(drung) => [
+ q(2183),
+ q(0),
+ ],
+ q(duala) => [
+ q(0114),
+ q(0),
+ ],
+ q(duano) => [
+ q(2179),
+ q(0),
+ ],
+ q(duau) => [
+ q(2189),
+ q(0),
+ ],
+ q(dubli) => [
+ q(2166),
+ q(0),
+ ],
+ q(dubu) => [
+ q(2092),
+ q(0),
+ ],
+ q(dugun) => [
+ q(4783),
+ q(0),
+ ],
+ q(duguri) => [
+ q(1964),
+ q(0),
+ ],
+ q(dugwor) => [
+ q(2084),
+ q(0),
+ ],
+ q(duhwa) => [
+ q(3186),
+ q(0),
+ ],
+ q(duke) => [
+ q(4908),
+ q(0),
+ ],
+ q(dulbu) => [
+ q(1966),
+ q(0),
+ ],
+ q(duli) => [
+ q(2188),
+ q(0),
+ ],
+ q(duma) => [
+ q(2080),
+ q(0),
+ ],
+ q(dumbea) => [
+ q(2170),
+ q(0),
+ ],
+ q(dumi) => [
+ q(2182),
+ q(0),
+ ],
+ q(dumpas) => [
+ q(2093),
+ q(0),
+ ],
+ q(dumun) => [
+ q(2173),
+ q(0),
+ ],
+ q(duna) => [
+ q(2167),
+ q(0),
+ ],
+ q(dungan) => [
+ q(2099),
+ q(0),
+ ],
+ q(dungmali) => [
+ q(5710),
+ q(0),
+ ],
+ q(dungra bhil) => [
+ q(2172),
+ q(0),
+ ],
+ q(dungu) => [
+ q(1972),
+ q(0),
+ ],
+ q(dupaninan agta) => [
+ q(2178),
+ q(0),
+ ],
+ q(dura) => [
+ q(2139),
+ q(0),
+ ],
+ q(duri) => [
+ q(4592),
+ q(0),
+ ],
+ q(duriankere) => [
+ q(1965),
+ q(0),
+ ],
+ q(duruma) => [
+ q(2171),
+ q(0),
+ ],
+ q(duruwa) => [
+ q(5364),
+ q(0),
+ ],
+ q(dusner) => [
+ q(2149),
+ q(0),
+ ],
+ q(dusun deyah) => [
+ q(2177),
+ q(0),
+ ],
+ q(dusun malang) => [
+ q(2180),
+ q(0),
+ ],
+ q(dusun witu) => [
+ q(2185),
+ q(0),
+ ],
+ q(dutch) => [
+ q(0116),
+ q(0),
+ ],
+ q(dutch sign language) => [
+ q(2145),
+ q(0),
+ ],
+ q(dutch, middle (ca.1050-1350)) => [
+ q(0115),
+ q(0),
+ ],
+ q(dutton world speedwords) => [
+ q(2192),
+ q(0),
+ ],
+ q(duungooma) => [
+ q(2186),
+ q(0),
+ ],
+ q(duupa) => [
+ q(1939),
+ q(0),
+ ],
+ q(duvle) => [
+ q(2184),
+ q(0),
+ ],
+ q(duwai) => [
+ q(1967),
+ q(0),
+ ],
+ q(duwet) => [
+ q(2653),
+ q(0),
+ ],
+ q(duya) => [
+ q(3825),
+ q(0),
+ ],
+ q(dwang) => [
+ q(4988),
+ q(0),
+ ],
+ q(dyaabugay) => [
+ q(2202),
+ q(0),
+ ],
+ q(dyaberdyaber) => [
+ q(2195),
+ q(0),
+ ],
+ q(dyan) => [
+ q(2194),
+ q(0),
+ ],
+ q(dyangadi) => [
+ q(2200),
+ q(0),
+ ],
+ q(dyirbal) => [
+ q(1963),
+ q(0),
+ ],
+ q(dyugun) => [
+ q(2196),
+ q(0),
+ ],
+ q(dyula) => [
+ q(0117),
+ q(0),
+ ],
+ q(dza) => [
+ q(3060),
+ q(0),
+ ],
+ q(dzalakha) => [
+ q(2206),
+ q(0),
+ ],
+ q(dzando) => [
+ q(2207),
+ q(0),
+ ],
+ q(dzao min) => [
+ q(1386),
+ q(0),
+ ],
+ q(dzodinka) => [
+ q(0606),
+ q(0),
+ ],
+ q(dzongkha) => [
+ q(0118),
+ q(0),
+ ],
+ q(dzuungoo) => [
+ q(2102),
+ q(0),
+ ],
+ q(e) => [
+ q(2216),
+ q(0),
+ ],
+ q(e'ma buyang) => [
+ q(7714),
+ q(0),
+ ],
+ q(e'napa woromaipu) => [
+ q(5344),
+ q(0),
+ ],
+ q(early tripuri) => [
+ q(7454),
+ q(0),
+ ],
+ q(east ambae) => [
+ q(5226),
+ q(0),
+ ],
+ q(east berawan) => [
+ q(7741),
+ q(0),
+ ],
+ q(east damar) => [
+ q(2090),
+ q(0),
+ ],
+ q(east futuna) => [
+ q(2373),
+ q(0),
+ ],
+ q(east germanic languages) => [
+ q(0505),
+ q(0),
+ ],
+ q(east kewa) => [
+ q(3374),
+ q(0),
+ ],
+ q(east limba) => [
+ q(3951),
+ q(0),
+ ],
+ q(east makian) => [
+ q(4342),
+ q(0),
+ ],
+ q(east masela) => [
+ q(6987),
+ q(0),
+ ],
+ q(east nyala) => [
+ q(4930),
+ q(0),
+ ],
+ q(east slavic languages) => [
+ q(0534),
+ q(0),
+ ],
+ q(east tarangan) => [
+ q(6660),
+ q(0),
+ ],
+ q(east yugur) => [
+ q(7698),
+ q(0),
+ ],
+ q(eastern abnaki) => [
+ q(0553),
+ q(0),
+ ],
+ q(eastern acipa) => [
+ q(0594),
+ q(0),
+ ],
+ q(eastern apurimac quechua) => [
+ q(5676),
+ q(0),
+ ],
+ q(eastern arrernte) => [
+ q(0635),
+ q(0),
+ ],
+ q(eastern balochi) => [
+ q(1176),
+ q(0),
+ ],
+ q(eastern bolivian guarani) => [
+ q(2635),
+ q(0),
+ ],
+ q(eastern bontok) => [
+ q(2209),
+ q(0),
+ ],
+ q(eastern bru) => [
+ q(1442),
+ q(0),
+ ],
+ q(eastern canadian inuktitut) => [
+ q(2920),
+ q(0),
+ ],
+ q(eastern cham) => [
+ q(1749),
+ q(0),
+ ],
+ q(eastern durango nahuatl) => [
+ q(1015),
+ q(0),
+ ],
+ q(eastern egyptian bedawi arabic) => [
+ q(0961),
+ q(0),
+ ],
+ q(eastern frisian) => [
+ q(0141),
+ q(0),
+ ],
+ q(eastern gorkha tamang) => [
+ q(6447),
+ q(0),
+ ],
+ q(eastern gurung) => [
+ q(2487),
+ q(0),
+ ],
+ q(eastern highland chatino) => [
+ q(1783),
+ q(0),
+ ],
+ q(eastern highland otomi) => [
+ q(5297),
+ q(0),
+ ],
+ q(eastern hongshuihe zhuang) => [
+ q(7749),
+ q(0),
+ ],
+ q(eastern huasteca nahuatl) => [
+ q(4846),
+ q(0),
+ ],
+ q(eastern huishui hmong) => [
+ q(2766),
+ q(0),
+ ],
+ q(eastern huishui miao) => [
+ q(2766),
+ q(0),
+ ],
+ q(eastern karaboro) => [
+ q(7412),
+ q(0),
+ ],
+ q(eastern katu) => [
+ q(3619),
+ q(0),
+ ],
+ q(eastern kayah) => [
+ q(2236),
+ q(0),
+ ],
+ q(eastern keres) => [
+ q(3239),
+ q(0),
+ ],
+ q(eastern khumi chin) => [
+ q(1709),
+ q(0),
+ ],
+ q(eastern krahn) => [
+ q(3540),
+ q(0),
+ ],
+ q(eastern lalu) => [
+ q(7574),
+ q(0),
+ ],
+ q(eastern lawa) => [
+ q(4077),
+ q(0),
+ ],
+ q(eastern magar) => [
+ q(4240),
+ q(0),
+ ],
+ q(eastern malayo-polynesian languages) => [
+ q(0521),
+ q(0),
+ ],
+ q(eastern maninkakan) => [
+ q(2249),
+ q(0),
+ ],
+ q(eastern mari) => [
+ q(4267),
+ q(0),
+ ],
+ q(eastern maroon creole) => [
+ q(2064),
+ q(0),
+ ],
+ q(eastern meohang) => [
+ q(2247),
+ q(0),
+ ],
+ q(eastern mnong) => [
+ q(4397),
+ q(0),
+ ],
+ q(eastern muria) => [
+ q(2255),
+ q(0),
+ ],
+ q(eastern ngad'a) => [
+ q(4789),
+ q(0),
+ ],
+ q(eastern nisu) => [
+ q(5006),
+ q(0),
+ ],
+ q(eastern ojibwa) => [
+ q(5196),
+ q(0),
+ ],
+ q(eastern oromo) => [
+ q(2699),
+ q(0),
+ ],
+ q(eastern parbate kham) => [
+ q(3338),
+ q(0),
+ ],
+ q(eastern penan) => [
+ q(5398),
+ q(0),
+ ],
+ q(eastern pomo) => [
+ q(5381),
+ q(0),
+ ],
+ q(eastern qiandong miao) => [
+ q(2776),
+ q(0),
+ ],
+ q(eastern subanen) => [
+ q(5958),
+ q(0),
+ ],
+ q(eastern sudanic languages) => [
+ q(0524),
+ q(0),
+ ],
+ q(eastern tamang) => [
+ q(6333),
+ q(0),
+ ],
+ q(eastern tawbuid) => [
+ q(1337),
+ q(0),
+ ],
+ q(eastern xiangxi miao) => [
+ q(4571),
+ q(0),
+ ],
+ q(eastern xwla gbe) => [
+ q(2431),
+ q(0),
+ ],
+ q(eastern yiddish) => [
+ q(7535),
+ q(0),
+ ],
+ q(ebira) => [
+ q(2902),
+ q(0),
+ ],
+ q(eblan) => [
+ q(7276),
+ q(0),
+ ],
+ q(ebrie) => [
+ q(2211),
+ q(0),
+ ],
+ q(ebughu) => [
+ q(2208),
+ q(0),
+ ],
+ q(ecuadorian sign language) => [
+ q(2214),
+ q(0),
+ ],
+ q(ede cabe) => [
+ q(1669),
+ q(0),
+ ],
+ q(ede ica) => [
+ q(2880),
+ q(0),
+ ],
+ q(ede idaca) => [
+ q(2887),
+ q(0),
+ ],
+ q(ede ije) => [
+ q(2917),
+ q(0),
+ ],
+ q(edera awyu) => [
+ q(0986),
+ q(0),
+ ],
+ q(edo) => [
+ q(0055),
+ q(0),
+ ],
+ q(edolo) => [
+ q(2300),
+ q(0),
+ ],
+ q(edomite) => [
+ q(7274),
+ q(0),
+ ],
+ q(edopi) => [
+ q(1959),
+ q(0),
+ ],
+ q(edwas) => [
+ q(1348),
+ q(0),
+ ],
+ q(efai) => [
+ q(2217),
+ q(0),
+ ],
+ q(efe) => [
+ q(2218),
+ q(0),
+ ],
+ q(efik) => [
+ q(0119),
+ q(0),
+ ],
+ q(efutop) => [
+ q(5183),
+ q(0),
+ ],
+ q(ega) => [
+ q(2219),
+ q(0),
+ ],
+ q(eggon) => [
+ q(2221),
+ q(0),
+ ],
+ q(egypt sign language) => [
+ q(2288),
+ q(0),
+ ],
+ q(egyptian (ancient)) => [
+ q(0120),
+ q(0),
+ ],
+ q(egyptian arabic) => [
+ q(0885),
+ q(0),
+ ],
+ q(egyptian languages) => [
+ q(0501),
+ q(0),
+ ],
+ q(ehueun) => [
+ q(2222),
+ q(0),
+ ],
+ q(eipomek) => [
+ q(2223),
+ q(0),
+ ],
+ q(eitiep) => [
+ q(2224),
+ q(0),
+ ],
+ q(ejagham) => [
+ q(2303),
+ q(0),
+ ],
+ q(ejamat) => [
+ q(2226),
+ q(0),
+ ],
+ q(ekajuk) => [
+ q(0121),
+ q(0),
+ ],
+ q(ekari) => [
+ q(2228),
+ q(0),
+ ],
+ q(ekegusii) => [
+ q(2650),
+ q(0),
+ ],
+ q(eki) => [
+ q(2229),
+ q(0),
+ ],
+ q(ekit) => [
+ q(2227),
+ q(0),
+ ],
+ q(ekpeye) => [
+ q(2234),
+ q(0),
+ ],
+ q(el alto zapotec) => [
+ q(7840),
+ q(0),
+ ],
+ q(el hugeirat) => [
+ q(2238),
+ q(0),
+ ],
+ q(el molo) => [
+ q(2242),
+ q(0),
+ ],
+ q(el nayar cora) => [
+ q(1854),
+ q(0),
+ ],
+ q(elamite) => [
+ q(0122),
+ q(0),
+ ],
+ q(eleme) => [
+ q(2241),
+ q(0),
+ ],
+ q(elepi) => [
+ q(2237),
+ q(0),
+ ],
+ q(elip) => [
+ q(2232),
+ q(0),
+ ],
+ q(elkei) => [
+ q(2240),
+ q(0),
+ ],
+ q(elotepec zapotec) => [
+ q(7864),
+ q(0),
+ ],
+ q(eloyi) => [
+ q(0648),
+ q(0),
+ ],
+ q(elseng) => [
+ q(4489),
+ q(0),
+ ],
+ q(elu) => [
+ q(2243),
+ q(0),
+ ],
+ q(elymian) => [
+ q(7347),
+ q(0),
+ ],
+ q(emae) => [
+ q(4388),
+ q(0),
+ ],
+ q(emai-iuleha-ora) => [
+ q(2244),
+ q(0),
+ ],
+ q(eman) => [
+ q(2251),
+ q(0),
+ ],
+ q(embaloh) => [
+ q(2245),
+ q(0),
+ ],
+ q(embera-baudo) => [
+ q(1092),
+ q(0),
+ ],
+ q(embera-catio) => [
+ q(1895),
+ q(0),
+ ],
+ q(embera-chami) => [
+ q(1787),
+ q(0),
+ ],
+ q(embera-tado) => [
+ q(6398),
+ q(0),
+ ],
+ q(embu) => [
+ q(2212),
+ q(0),
+ ],
+ q(emem) => [
+ q(2268),
+ q(0),
+ ],
+ q(emerillon) => [
+ q(2246),
+ q(0),
+ ],
+ q(emilian) => [
+ q(2220),
+ q(0),
+ ],
+ q(emok) => [
+ q(2252),
+ q(0),
+ ],
+ q(emplawas) => [
+ q(2256),
+ q(0),
+ ],
+ q(emumu) => [
+ q(2268),
+ q(0),
+ ],
+ q(en) => [
+ q(2261),
+ q(0),
+ ],
+ q(enawene-nawe) => [
+ q(6883),
+ q(0),
+ ],
+ q(ende) => [
+ q(2262),
+ q(0),
+ ],
+ q(enga) => [
+ q(2267),
+ q(0),
+ ],
+ q(engdewu) => [
+ q(4833),
+ q(0),
+ ],
+ q(engenni) => [
+ q(2265),
+ q(0),
+ ],
+ q(enggano) => [
+ q(2266),
+ q(0),
+ ],
+ q(english) => [
+ q(0123),
+ q(0),
+ ],
+ q(english, middle (1100-1500)) => [
+ q(0124),
+ q(0),
+ ],
+ q(english, old (ca.450-1100)) => [
+ q(0018),
+ q(0),
+ ],
+ q(english-based creoles and pidgins) => [
+ q(0093),
+ q(2),
+ ],
+ q(enrekang) => [
+ q(5610),
+ q(0),
+ ],
+ q(enu) => [
+ q(2269),
+ q(0),
+ ],
+ q(enwan (akwa ibom state)) => [
+ q(2271),
+ q(0),
+ ],
+ q(enwan (edu state)) => [
+ q(2270),
+ q(0),
+ ],
+ q(enya) => [
+ q(2476),
+ q(0),
+ ],
+ q(epena) => [
+ q(6027),
+ q(0),
+ ],
+ q(epi-olmec) => [
+ q(7281),
+ q(0),
+ ],
+ q(epie) => [
+ q(2273),
+ q(0),
+ ],
+ q(epigraphic mayan) => [
+ q(2258),
+ q(0),
+ ],
+ q(eravallan) => [
+ q(2274),
+ q(0),
+ ],
+ q(erave) => [
+ q(3378),
+ q(0),
+ ],
+ q(ere) => [
+ q(6773),
+ q(0),
+ ],
+ q(eritai) => [
+ q(2282),
+ q(0),
+ ],
+ q(erokwanas) => [
+ q(2283),
+ q(0),
+ ],
+ q(erre) => [
+ q(2280),
+ q(0),
+ ],
+ q(erromintxela) => [
+ q(2257),
+ q(0),
+ ],
+ q(ersu) => [
+ q(2281),
+ q(0),
+ ],
+ q(eruwa) => [
+ q(2276),
+ q(0),
+ ],
+ q(erzya) => [
+ q(0297),
+ q(0),
+ ],
+ q(esan) => [
+ q(2981),
+ q(0),
+ ],
+ q(ese) => [
+ q(4143),
+ q(0),
+ ],
+ q(ese ejja) => [
+ q(2284),
+ q(0),
+ ],
+ q(eshtehardi) => [
+ q(2285),
+ q(0),
+ ],
+ q(esimbi) => [
+ q(0671),
+ q(0),
+ ],
+ q(eskimo-aleut languages) => [
+ q(0502),
+ q(0),
+ ],
+ q(esperanto) => [
+ q(0125),
+ q(0),
+ ],
+ q(esselen) => [
+ q(2292),
+ q(0),
+ ],
+ q(estado de mexico otomi) => [
+ q(5301),
+ q(0),
+ ],
+ q(estonian) => [
+ q(0126),
+ q(0),
+ ],
+ q(estonian sign language) => [
+ q(2291),
+ q(0),
+ ],
+ q(esuma) => [
+ q(2289),
+ q(0),
+ ],
+ q(etchemin) => [
+ q(2296),
+ q(0),
+ ],
+ q(etebi) => [
+ q(2295),
+ q(0),
+ ],
+ q(eten) => [
+ q(2304),
+ q(0),
+ ],
+ q(eteocretan) => [
+ q(2213),
+ q(0),
+ ],
+ q(eteocypriot) => [
+ q(2215),
+ q(0),
+ ],
+ q(ethiopian sign language) => [
+ q(2297),
+ q(0),
+ ],
+ q(etkywan) => [
+ q(2881),
+ q(0),
+ ],
+ q(eton (cameroon)) => [
+ q(2299),
+ q(0),
+ ],
+ q(eton (vanuatu)) => [
+ q(2298),
+ q(0),
+ ],
+ q(etruscan) => [
+ q(2302),
+ q(0),
+ ],
+ q(etulo) => [
+ q(6922),
+ q(0),
+ ],
+ q(evant) => [
+ q(1640),
+ q(0),
+ ],
+ q(even) => [
+ q(2306),
+ q(0),
+ ],
+ q(evenki) => [
+ q(2308),
+ q(0),
+ ],
+ q(ewage-notu) => [
+ q(5008),
+ q(0),
+ ],
+ q(ewe) => [
+ q(0127),
+ q(0),
+ ],
+ q(ewondo) => [
+ q(0128),
+ q(0),
+ ],
+ q(extremaduran) => [
+ q(2309),
+ q(0),
+ ],
+ q(eyak) => [
+ q(2310),
+ q(0),
+ ],
+ q(fa d'ambu) => [
+ q(2314),
+ q(0),
+ ],
+ q(fagani) => [
+ q(2316),
+ q(0),
+ ],
+ q(faire atta) => [
+ q(1021),
+ q(0),
+ ],
+ q(faita) => [
+ q(2320),
+ q(0),
+ ],
+ q(faiwol) => [
+ q(2319),
+ q(0),
+ ],
+ q(fala) => [
+ q(2327),
+ q(0),
+ ],
+ q(falam chin) => [
+ q(1715),
+ q(0),
+ ],
+ q(fali) => [
+ q(2346),
+ q(0),
+ ],
+ q(faliscan) => [
+ q(7286),
+ q(0),
+ ],
+ q(fam) => [
+ q(2323),
+ q(0),
+ ],
+ q(fanagalo) => [
+ q(2353),
+ q(0),
+ ],
+ q(fang) => [
+ q(0129),
+ q(0),
+ ],
+ q(fang (cameroon)) => [
+ q(2321),
+ q(0),
+ ],
+ q(fang (equatorial guinea)) => [
+ q(0129),
+ q(1),
+ ],
+ q(fania) => [
+ q(2354),
+ q(0),
+ ],
+ q(fanti) => [
+ q(0131),
+ q(0),
+ ],
+ q(far western muria) => [
+ q(2352),
+ q(0),
+ ],
+ q(farefare) => [
+ q(2643),
+ q(0),
+ ],
+ q(faroese) => [
+ q(0130),
+ q(0),
+ ],
+ q(fas) => [
+ q(2361),
+ q(0),
+ ],
+ q(fasu) => [
+ q(2313),
+ q(0),
+ ],
+ q(fataleka) => [
+ q(2325),
+ q(0),
+ ],
+ q(fataluku) => [
+ q(1980),
+ q(0),
+ ],
+ q(fayu) => [
+ q(2326),
+ q(0),
+ ],
+ q(fe'fe') => [
+ q(2351),
+ q(0),
+ ],
+ q(fedan) => [
+ q(5376),
+ q(0),
+ ],
+ q(fembe) => [
+ q(0665),
+ q(0),
+ ],
+ q(fernando po creole english) => [
+ q(2360),
+ q(0),
+ ],
+ q(feroge) => [
+ q(2332),
+ q(0),
+ ],
+ q(fiji hindi) => [
+ q(2741),
+ q(0),
+ ],
+ q(fijian) => [
+ q(0132),
+ q(0),
+ ],
+ q(filipino) => [
+ q(0133),
+ q(0),
+ ],
+ q(filomena mata-coahuitlan totonac) => [
+ q(6546),
+ q(0),
+ ],
+ q(finland-swedish sign language) => [
+ q(2370),
+ q(0),
+ ],
+ q(finlandssvenskt teckensprak) => [
+ q(2370),
+ q(0),
+ ],
+ q(finnish) => [
+ q(0134),
+ q(0),
+ ],
+ q(finnish sign language) => [
+ q(2368),
+ q(0),
+ ],
+ q(finno-ugrian languages) => [
+ q(0135),
+ q(0),
+ ],
+ q(finongan) => [
+ q(2317),
+ q(0),
+ ],
+ q(fipa) => [
+ q(2338),
+ q(0),
+ ],
+ q(firan) => [
+ q(2339),
+ q(0),
+ ],
+ q(fiwaga) => [
+ q(2341),
+ q(0),
+ ],
+ q(flemish) => [
+ q(0116),
+ q(0),
+ ],
+ q(flemish sign language) => [
+ q(6961),
+ q(0),
+ ],
+ q(flinders island) => [
+ q(2348),
+ q(0),
+ ],
+ q(foau) => [
+ q(2345),
+ q(0),
+ ],
+ q(foi) => [
+ q(2356),
+ q(0),
+ ],
+ q(foia foia) => [
+ q(2333),
+ q(0),
+ ],
+ q(folopa) => [
+ q(5553),
+ q(0),
+ ],
+ q(foma) => [
+ q(2357),
+ q(0),
+ ],
+ q(fon) => [
+ q(0136),
+ q(0),
+ ],
+ q(fongoro) => [
+ q(2335),
+ q(0),
+ ],
+ q(foodo) => [
+ q(2355),
+ q(0),
+ ],
+ q(forak) => [
+ q(2366),
+ q(0),
+ ],
+ q(fordata) => [
+ q(2363),
+ q(0),
+ ],
+ q(fore) => [
+ q(2358),
+ q(0),
+ ],
+ q(forest enets) => [
+ q(2263),
+ q(0),
+ ],
+ q(forest maninka) => [
+ q(4667),
+ q(0),
+ ],
+ q(formosan languages) => [
+ q(0504),
+ q(0),
+ ],
+ q(fortsenal) => [
+ q(2367),
+ q(0),
+ ],
+ q(francisco leon zoque) => [
+ q(7824),
+ q(0),
+ ],
+ q(francoprovencal) => [
+ q(2365),
+ q(0),
+ ],
+ q(frankish) => [
+ q(2364),
+ q(0),
+ ],
+ q(french) => [
+ q(0137),
+ q(0),
+ ],
+ q(french belgian sign language) => [
+ q(5957),
+ q(0),
+ ],
+ q(french sign language) => [
+ q(2369),
+ q(0),
+ ],
+ q(french, middle (ca.1400-1600)) => [
+ q(0138),
+ q(0),
+ ],
+ q(french, old (842-ca.1400)) => [
+ q(0139),
+ q(0),
+ ],
+ q(french-based creoles and pidgins) => [
+ q(0094),
+ q(2),
+ ],
+ q(friulian) => [
+ q(0144),
+ q(0),
+ ],
+ q(fulah) => [
+ q(0143),
+ q(0),
+ ],
+ q(fuliiru) => [
+ q(2349),
+ q(0),
+ ],
+ q(fulnio) => [
+ q(2380),
+ q(0),
+ ],
+ q(fum) => [
+ q(2379),
+ q(0),
+ ],
+ q(fungwa) => [
+ q(6857),
+ q(0),
+ ],
+ q(fur) => [
+ q(2386),
+ q(0),
+ ],
+ q(furu) => [
+ q(2383),
+ q(0),
+ ],
+ q(futuna-aniwa) => [
+ q(2382),
+ q(0),
+ ],
+ q(fuyug) => [
+ q(2385),
+ q(0),
+ ],
+ q(fwai) => [
+ q(2387),
+ q(0),
+ ],
+ q(fwe) => [
+ q(2388),
+ q(0),
+ ],
+ q(fyam) => [
+ q(5646),
+ q(0),
+ ],
+ q(fyer) => [
+ q(2337),
+ q(0),
+ ],
+ q(ga) => [
+ q(0145),
+ q(0),
+ ],
+ q(ga'anda) => [
+ q(2594),
+ q(0),
+ ],
+ q(ga'dang) => [
+ q(2448),
+ q(0),
+ ],
+ q(gaa) => [
+ q(6705),
+ q(0),
+ ],
+ q(gaam) => [
+ q(6356),
+ q(0),
+ ],
+ q(gabri) => [
+ q(2389),
+ q(0),
+ ],
+ q(gabrielino-fernandeno) => [
+ q(7289),
+ q(0),
+ ],
+ q(gadang) => [
+ q(2452),
+ q(0),
+ ],
+ q(gaddang) => [
+ q(2391),
+ q(0),
+ ],
+ q(gaddi) => [
+ q(2420),
+ q(0),
+ ],
+ q(gade) => [
+ q(2465),
+ q(0),
+ ],
+ q(gade lohar) => [
+ q(2442),
+ q(0),
+ ],
+ q(gadjerawang) => [
+ q(2449),
+ q(0),
+ ],
+ q(gadsup) => [
+ q(2397),
+ q(0),
+ ],
+ q(gaelic) => [
+ q(0153),
+ q(0),
+ ],
+ q(gafat) => [
+ q(2478),
+ q(0),
+ ],
+ q(gagadu) => [
+ q(2429),
+ q(0),
+ ],
+ q(gagauz) => [
+ q(2394),
+ q(0),
+ ],
+ q(gagnoa bete) => [
+ q(1477),
+ q(0),
+ ],
+ q(gagu) => [
+ q(2491),
+ q(0),
+ ],
+ q(gahri) => [
+ q(1157),
+ q(0),
+ ],
+ q(gaikundi) => [
+ q(2415),
+ q(0),
+ ],
+ q(gail) => [
+ q(2506),
+ q(0),
+ ],
+ q(gaina) => [
+ q(2439),
+ q(0),
+ ],
+ q(gal) => [
+ q(2403),
+ q(0),
+ ],
+ q(galambu) => [
+ q(2536),
+ q(0),
+ ],
+ q(galatian) => [
+ q(7287),
+ q(0),
+ ],
+ q(galela) => [
+ q(2418),
+ q(0),
+ ],
+ q(galeya) => [
+ q(2405),
+ q(0),
+ ],
+ q(galibi carib) => [
+ q(0070),
+ q(0),
+ ],
+ q(galice) => [
+ q(2436),
+ q(0),
+ ],
+ q(galician) => [
+ q(0155),
+ q(0),
+ ],
+ q(galindan) => [
+ q(7290),
+ q(0),
+ ],
+ q(gallurese sardinian) => [
+ q(5925),
+ q(0),
+ ],
+ q(galo) => [
+ q(0613),
+ q(0),
+ ],
+ q(galoli) => [
+ q(2399),
+ q(0),
+ ],
+ q(gamale kham) => [
+ q(3295),
+ q(0),
+ ],
+ q(gambera) => [
+ q(2541),
+ q(0),
+ ],
+ q(gambian wolof) => [
+ q(7161),
+ q(0),
+ ],
+ q(gamilaraay) => [
+ q(3409),
+ q(0),
+ ],
+ q(gamit) => [
+ q(2421),
+ q(0),
+ ],
+ q(gamkonora) => [
+ q(2398),
+ q(0),
+ ],
+ q(gamo) => [
+ q(2548),
+ q(0),
+ ],
+ q(gamo-ningi) => [
+ q(1475),
+ q(0),
+ ],
+ q(gan chinese) => [
+ q(2401),
+ q(0),
+ ],
+ q(gana) => [
+ q(2564),
+ q(0),
+ ],
+ q(ganang) => [
+ q(2555),
+ q(0),
+ ],
+ q(ganda) => [
+ q(0257),
+ q(0),
+ ],
+ q(gane) => [
+ q(2694),
+ q(0),
+ ],
+ q(ganggalida) => [
+ q(2435),
+ q(0),
+ ],
+ q(ganglau) => [
+ q(2486),
+ q(0),
+ ],
+ q(gangte) => [
+ q(2552),
+ q(0),
+ ],
+ q(gangulu) => [
+ q(2560),
+ q(0),
+ ],
+ q(gants) => [
+ q(2402),
+ q(0),
+ ],
+ q(ganza) => [
+ q(2692),
+ q(0),
+ ],
+ q(ganzi) => [
+ q(2569),
+ q(0),
+ ],
+ q(gao) => [
+ q(2480),
+ q(0),
+ ],
+ q(gapapaiwa) => [
+ q(5638),
+ q(0),
+ ],
+ q(garhwali) => [
+ q(2422),
+ q(0),
+ ],
+ q(garifuna) => [
+ q(1642),
+ q(0),
+ ],
+ q(garig-ilgar) => [
+ q(2933),
+ q(0),
+ ],
+ q(garo) => [
+ q(2610),
+ q(0),
+ ],
+ q(garre) => [
+ q(2475),
+ q(0),
+ ],
+ q(garrwa) => [
+ q(7179),
+ q(0),
+ ],
+ q(garus) => [
+ q(2681),
+ q(0),
+ ],
+ q(garza) => [
+ q(7291),
+ q(0),
+ ],
+ q(gata') => [
+ q(2404),
+ q(0),
+ ],
+ q(gavar) => [
+ q(2586),
+ q(0),
+ ],
+ q(gaviao do jiparana) => [
+ q(2659),
+ q(0),
+ ],
+ q(gawar-bati) => [
+ q(2675),
+ q(0),
+ ],
+ q(gawwada) => [
+ q(2667),
+ q(0),
+ ],
+ q(gayil) => [
+ q(2687),
+ q(0),
+ ],
+ q(gayo) => [
+ q(0146),
+ q(0),
+ ],
+ q(gazi) => [
+ q(2693),
+ q(0),
+ ],
+ q(gbagyi) => [
+ q(2427),
+ q(0),
+ ],
+ q(gbanu) => [
+ q(2430),
+ q(0),
+ ],
+ q(gbanziri) => [
+ q(2416),
+ q(0),
+ ],
+ q(gbari) => [
+ q(2432),
+ q(0),
+ ],
+ q(gbati-ri) => [
+ q(2626),
+ q(0),
+ ],
+ q(gbaya) => [
+ q(0147),
+ q(0),
+ ],
+ q(gbaya (central african republic)) => [
+ q(0147),
+ q(1),
+ ],
+ q(gbaya (sudan)) => [
+ q(3565),
+ q(0),
+ ],
+ q(gbaya-bossangoa) => [
+ q(2425),
+ q(0),
+ ],
+ q(gbaya-bozoum) => [
+ q(2426),
+ q(0),
+ ],
+ q(gbaya-mbodomo) => [
+ q(2545),
+ q(0),
+ ],
+ q(gbayi) => [
+ q(2685),
+ q(0),
+ ],
+ q(gbesi gbe) => [
+ q(2428),
+ q(0),
+ ],
+ q(gbii) => [
+ q(2481),
+ q(0),
+ ],
+ q(gbin) => [
+ q(7288),
+ q(0),
+ ],
+ q(gbiri-niragu) => [
+ q(2602),
+ q(0),
+ ],
+ q(gboloo grebo) => [
+ q(2464),
+ q(0),
+ ],
+ q(ge) => [
+ q(2771),
+ q(0),
+ ],
+ q(geba karen) => [
+ q(3661),
+ q(0),
+ ],
+ q(gebe) => [
+ q(2468),
+ q(0),
+ ],
+ q(gedaged) => [
+ q(2445),
+ q(0),
+ ],
+ q(gedeo) => [
+ q(2141),
+ q(0),
+ ],
+ q(geez) => [
+ q(0151),
+ q(0),
+ ],
+ q(geji) => [
+ q(2521),
+ q(0),
+ ],
+ q(gejia) => [
+ q(2771),
+ q(0),
+ ],
+ q(geko karen) => [
+ q(2497),
+ q(0),
+ ],
+ q(gela) => [
+ q(4931),
+ q(0),
+ ],
+ q(geman deng) => [
+ q(4636),
+ q(0),
+ ],
+ q(geme) => [
+ q(2472),
+ q(0),
+ ],
+ q(gen) => [
+ q(2469),
+ q(0),
+ ],
+ q(gende) => [
+ q(2393),
+ q(0),
+ ],
+ q(gengle) => [
+ q(2466),
+ q(0),
+ ],
+ q(georgian) => [
+ q(0149),
+ q(0),
+ ],
+ q(gepo) => [
+ q(7555),
+ q(0),
+ ],
+ q(gera) => [
+ q(2474),
+ q(0),
+ ],
+ q(gergiko) => [
+ q(4433),
+ q(0),
+ ],
+ q(german) => [
+ q(0150),
+ q(0),
+ ],
+ q(german sign language) => [
+ q(2618),
+ q(0),
+ ],
+ q(german, low) => [
+ q(0306),
+ q(0),
+ ],
+ q(german, middle high (ca.1050-1500)) => [
+ q(0157),
+ q(0),
+ ],
+ q(german, old high (ca.750-1050)) => [
+ q(0158),
+ q(0),
+ ],
+ q(germanic languages) => [
+ q(0148),
+ q(0),
+ ],
+ q(geruma) => [
+ q(2462),
+ q(0),
+ ],
+ q(geser-gorom) => [
+ q(2473),
+ q(0),
+ ],
+ q(gey) => [
+ q(2647),
+ q(0),
+ ],
+ q(ghadames) => [
+ q(2493),
+ q(0),
+ ],
+ q(ghanaian pidgin english) => [
+ q(2592),
+ q(0),
+ ],
+ q(ghanaian sign language) => [
+ q(2617),
+ q(0),
+ ],
+ q(ghandruk sign language) => [
+ q(2459),
+ q(0),
+ ],
+ q(ghanongga) => [
+ q(2499),
+ q(0),
+ ],
+ q(ghari) => [
+ q(2603),
+ q(0),
+ ],
+ q(ghayavi) => [
+ q(1313),
+ q(0),
+ ],
+ q(gheg albanian) => [
+ q(0757),
+ q(0),
+ ],
+ q(ghera) => [
+ q(2501),
+ q(0),
+ ],
+ q(ghodoberi) => [
+ q(2456),
+ q(0),
+ ],
+ q(ghomala') => [
+ q(1048),
+ q(0),
+ ],
+ q(ghomara) => [
+ q(2500),
+ q(0),
+ ],
+ q(ghotuo) => [
+ q(0538),
+ q(0),
+ ],
+ q(ghulfan) => [
+ q(2498),
+ q(0),
+ ],
+ q(giangan) => [
+ q(1169),
+ q(0),
+ ],
+ q(gibanawa) => [
+ q(2505),
+ q(0),
+ ],
+ q(gichuka) => [
+ q(1905),
+ q(0),
+ ],
+ q(gidar) => [
+ q(2507),
+ q(0),
+ ],
+ q(giiwo) => [
+ q(3398),
+ q(0),
+ ],
+ q(gikuyu) => [
+ q(0224),
+ q(0),
+ ],
+ q(gikyode) => [
+ q(0587),
+ q(0),
+ ],
+ q(gilaki) => [
+ q(2535),
+ q(0),
+ ],
+ q(gilbertese) => [
+ q(0152),
+ q(0),
+ ],
+ q(gilima) => [
+ q(2518),
+ q(0),
+ ],
+ q(gilyak) => [
+ q(4882),
+ q(0),
+ ],
+ q(gimi (eastern highlands)) => [
+ q(2509),
+ q(0),
+ ],
+ q(gimi (west new britain)) => [
+ q(2511),
+ q(0),
+ ],
+ q(gimme) => [
+ q(3446),
+ q(0),
+ ],
+ q(gimnime) => [
+ q(2546),
+ q(0),
+ ],
+ q(ginuman) => [
+ q(2561),
+ q(0),
+ ],
+ q(ginyanga) => [
+ q(0998),
+ q(0),
+ ],
+ q(girawa) => [
+ q(1056),
+ q(0),
+ ],
+ q(giryama) => [
+ q(5136),
+ q(0),
+ ],
+ q(gitonga) => [
+ q(6608),
+ q(0),
+ ],
+ q(gitua) => [
+ q(2490),
+ q(0),
+ ],
+ q(gitxsan) => [
+ q(2515),
+ q(0),
+ ],
+ q(giyug) => [
+ q(2519),
+ q(0),
+ ],
+ q(gizrra) => [
+ q(6607),
+ q(0),
+ ],
+ q(glaro-twabo) => [
+ q(2537),
+ q(0),
+ ],
+ q(glavda) => [
+ q(2539),
+ q(0),
+ ],
+ q(glio-oubi) => [
+ q(5309),
+ q(0),
+ ],
+ q(gnau) => [
+ q(2567),
+ q(0),
+ ],
+ q(goan konkani) => [
+ q(2581),
+ q(0),
+ ],
+ q(goaria) => [
+ q(2508),
+ q(0),
+ ],
+ q(gobasi) => [
+ q(2577),
+ q(0),
+ ],
+ q(gobu) => [
+ q(2588),
+ q(0),
+ ],
+ q(godie) => [
+ q(2573),
+ q(0),
+ ],
+ q(godwari) => [
+ q(2461),
+ q(0),
+ ],
+ q(goemai) => [
+ q(0801),
+ q(0),
+ ],
+ q(gofa) => [
+ q(2575),
+ q(0),
+ ],
+ q(gogo) => [
+ q(2576),
+ q(0),
+ ],
+ q(gogodala) => [
+ q(2492),
+ q(0),
+ ],
+ q(gokana) => [
+ q(2527),
+ q(0),
+ ],
+ q(gola) => [
+ q(2580),
+ q(0),
+ ],
+ q(golin) => [
+ q(2654),
+ q(0),
+ ],
+ q(gondi) => [
+ q(0159),
+ q(0),
+ ],
+ q(gone dau) => [
+ q(2582),
+ q(0),
+ ],
+ q(gongduk) => [
+ q(2574),
+ q(0),
+ ],
+ q(gonja) => [
+ q(2523),
+ q(0),
+ ],
+ q(gooniyandi) => [
+ q(2558),
+ q(0),
+ ],
+ q(gor) => [
+ q(2597),
+ q(0),
+ ],
+ q(gorakor) => [
+ q(2572),
+ q(0),
+ ],
+ q(gorap) => [
+ q(2584),
+ q(0),
+ ],
+ q(gorontalo) => [
+ q(0160),
+ q(0),
+ ],
+ q(gorovu) => [
+ q(2607),
+ q(0),
+ ],
+ q(gorowa) => [
+ q(2587),
+ q(0),
+ ],
+ q(gothic) => [
+ q(0161),
+ q(0),
+ ],
+ q(goundo) => [
+ q(2589),
+ q(0),
+ ],
+ q(gourmanchema) => [
+ q(2649),
+ q(0),
+ ],
+ q(gowlan) => [
+ q(2578),
+ q(0),
+ ],
+ q(gowli) => [
+ q(2579),
+ q(0),
+ ],
+ q(gowro) => [
+ q(2669),
+ q(0),
+ ],
+ q(gozarkhani) => [
+ q(2590),
+ q(0),
+ ],
+ q(grangali) => [
+ q(4932),
+ q(0),
+ ],
+ q(grass koiari) => [
+ q(3171),
+ q(0),
+ ],
+ q(grebo) => [
+ q(0162),
+ q(0),
+ ],
+ q(greek) => [
+ q(0164),
+ q(2),
+ ],
+ q(greek languages) => [
+ q(0508),
+ q(0),
+ ],
+ q(greek sign language) => [
+ q(2624),
+ q(0),
+ ],
+ q(greek, ancient (to 1453)) => [
+ q(0163),
+ q(0),
+ ],
+ q(greek, modern (1453-)) => [
+ q(0164),
+ q(0),
+ ],
+ q(green gelao) => [
+ q(2512),
+ q(0),
+ ],
+ q(greenlandic) => [
+ q(0211),
+ q(0),
+ ],
+ q(grenadian creole english) => [
+ q(2438),
+ q(0),
+ ],
+ q(gresi) => [
+ q(2609),
+ q(0),
+ ],
+ q(groma) => [
+ q(2606),
+ q(0),
+ ],
+ q(gronings) => [
+ q(2585),
+ q(0),
+ ],
+ q(gros ventre) => [
+ q(0926),
+ q(0),
+ ],
+ q(gua) => [
+ q(2678),
+ q(0),
+ ],
+ q(guadeloupean creole french) => [
+ q(2437),
+ q(0),
+ ],
+ q(guahibo) => [
+ q(2634),
+ q(0),
+ ],
+ q(guaja) => [
+ q(2655),
+ q(0),
+ ],
+ q(guajajara) => [
+ q(2628),
+ q(0),
+ ],
+ q(guambiano) => [
+ q(2638),
+ q(0),
+ ],
+ q(guana (brazil)) => [
+ q(2596),
+ q(0),
+ ],
+ q(guana (paraguay)) => [
+ q(2651),
+ q(0),
+ ],
+ q(guanano) => [
+ q(2652),
+ q(0),
+ ],
+ q(guanche) => [
+ q(2553),
+ q(0),
+ ],
+ q(guanyinqiao) => [
+ q(3081),
+ q(0),
+ ],
+ q(guarani) => [
+ q(0165),
+ q(0),
+ ],
+ q(guarayu) => [
+ q(2690),
+ q(0),
+ ],
+ q(guarequena) => [
+ q(2392),
+ q(0),
+ ],
+ q(guatemalan sign language) => [
+ q(2620),
+ q(0),
+ ],
+ q(guato) => [
+ q(2625),
+ q(0),
+ ],
+ q(guayabero) => [
+ q(2640),
+ q(0),
+ ],
+ q(gudanji) => [
+ q(4891),
+ q(0),
+ ],
+ q(gude) => [
+ q(2446),
+ q(0),
+ ],
+ q(gudu) => [
+ q(2460),
+ q(0),
+ ],
+ q(guduf-gava) => [
+ q(2447),
+ q(0),
+ ],
+ q(guerrero amuzgo) => [
+ q(0786),
+ q(0),
+ ],
+ q(guerrero nahuatl) => [
+ q(4836),
+ q(0),
+ ],
+ q(guevea de humboldt zapotec) => [
+ q(7831),
+ q(0),
+ ],
+ q(gugadj) => [
+ q(2482),
+ q(0),
+ ],
+ q(gugu badhun) => [
+ q(2444),
+ q(0),
+ ],
+ q(gugu warra) => [
+ q(7189),
+ q(0),
+ ],
+ q(gugubera) => [
+ q(3395),
+ q(0),
+ ],
+ q(guguyimidjir) => [
+ q(3404),
+ q(0),
+ ],
+ q(guhu-samane) => [
+ q(2502),
+ q(0),
+ ],
+ q(guianese creole french) => [
+ q(2440),
+ q(0),
+ ],
+ q(guibei zhuang) => [
+ q(7751),
+ q(0),
+ ],
+ q(guiberoua bete) => [
+ q(1130),
+ q(0),
+ ],
+ q(guibian zhuang) => [
+ q(7753),
+ q(0),
+ ],
+ q(guila zapotec) => [
+ q(7873),
+ q(0),
+ ],
+ q(guinea kpelle) => [
+ q(2529),
+ q(0),
+ ],
+ q(guinean sign language) => [
+ q(2644),
+ q(0),
+ ],
+ q(guiqiong) => [
+ q(2595),
+ q(0),
+ ],
+ q(gujarati) => [
+ q(0167),
+ q(0),
+ ],
+ q(gujari) => [
+ q(2524),
+ q(0),
+ ],
+ q(gula (central african republic)) => [
+ q(3199),
+ q(0),
+ ],
+ q(gula (chad)) => [
+ q(2538),
+ q(0),
+ ],
+ q(gula iro) => [
+ q(2534),
+ q(0),
+ ],
+ q(gula'alaa) => [
+ q(2542),
+ q(0),
+ ],
+ q(gulay) => [
+ q(2656),
+ q(0),
+ ],
+ q(gule) => [
+ q(2540),
+ q(0),
+ ],
+ q(gulf arabic) => [
+ q(0641),
+ q(0),
+ ],
+ q(guliguli) => [
+ q(2533),
+ q(0),
+ ],
+ q(gumalu) => [
+ q(2547),
+ q(0),
+ ],
+ q(gumatj) => [
+ q(2562),
+ q(0),
+ ],
+ q(gumawana) => [
+ q(2662),
+ q(0),
+ ],
+ q(gumuz) => [
+ q(2636),
+ q(0),
+ ],
+ q(gun) => [
+ q(2648),
+ q(0),
+ ],
+ q(gundi) => [
+ q(2450),
+ q(0),
+ ],
+ q(gungabula) => [
+ q(2684),
+ q(0),
+ ],
+ q(gungu) => [
+ q(5834),
+ q(0),
+ ],
+ q(guntai) => [
+ q(2566),
+ q(0),
+ ],
+ q(gunwinggu) => [
+ q(2641),
+ q(0),
+ ],
+ q(gunya) => [
+ q(2691),
+ q(0),
+ ],
+ q(gupa-abawa) => [
+ q(2591),
+ q(0),
+ ],
+ q(gupapuyngu) => [
+ q(2632),
+ q(0),
+ ],
+ q(guragone) => [
+ q(2483),
+ q(0),
+ ],
+ q(guramalum) => [
+ q(2616),
+ q(0),
+ ],
+ q(gurani) => [
+ q(2697),
+ q(0),
+ ],
+ q(gurdjar) => [
+ q(2451),
+ q(0),
+ ],
+ q(gureng gureng) => [
+ q(2565),
+ q(0),
+ ],
+ q(gurgula) => [
+ q(2484),
+ q(0),
+ ],
+ q(guriaso) => [
+ q(2614),
+ q(0),
+ ],
+ q(gurinji) => [
+ q(2631),
+ q(0),
+ ],
+ q(gurmana) => [
+ q(2657),
+ q(0),
+ ],
+ q(guro) => [
+ q(2570),
+ q(0),
+ ],
+ q(guruntum-mbaaru) => [
+ q(2600),
+ q(0),
+ ],
+ q(gusan) => [
+ q(2621),
+ q(0),
+ ],
+ q(gusii) => [
+ q(2650),
+ q(0),
+ ],
+ q(gusilay) => [
+ q(2619),
+ q(0),
+ ],
+ q(guwamu) => [
+ q(2676),
+ q(0),
+ ],
+ q(guya) => [
+ q(2525),
+ q(0),
+ ],
+ q(guyanese creole english) => [
+ q(2689),
+ q(0),
+ ],
+ q(guyani) => [
+ q(2663),
+ q(0),
+ ],
+ q(gvoko) => [
+ q(4834),
+ q(0),
+ ],
+ q(gwa) => [
+ q(2665),
+ q(0),
+ ],
+ q(gwahatike) => [
+ q(1942),
+ q(0),
+ ],
+ q(gwak) => [
+ q(3066),
+ q(0),
+ ],
+ q(gwamhi-wuri) => [
+ q(1162),
+ q(0),
+ ],
+ q(gwandara) => [
+ q(2673),
+ q(0),
+ ],
+ q(gweda) => [
+ q(2613),
+ q(0),
+ ],
+ q(gweno) => [
+ q(2668),
+ q(0),
+ ],
+ q(gwere) => [
+ q(2674),
+ q(0),
+ ],
+ q(gwich'in) => [
+ q(0168),
+ q(0),
+ ],
+ q(gyele) => [
+ q(2686),
+ q(0),
+ ],
+ q(gyem) => [
+ q(2683),
+ q(0),
+ ],
+ q(ha) => [
+ q(2710),
+ q(0),
+ ],
+ q(habu) => [
+ q(2721),
+ q(0),
+ ],
+ q(hadiyya) => [
+ q(2726),
+ q(0),
+ ],
+ q(hadothi) => [
+ q(2802),
+ q(0),
+ ],
+ q(hadrami) => [
+ q(7295),
+ q(0),
+ ],
+ q(hadrami arabic) => [
+ q(0999),
+ q(0),
+ ],
+ q(hadza) => [
+ q(2831),
+ q(0),
+ ],
+ q(haeke) => [
+ q(0630),
+ q(0),
+ ],
+ q(hahon) => [
+ q(2702),
+ q(0),
+ ],
+ q(hai//om) => [
+ q(2733),
+ q(0),
+ ],
+ q(haida) => [
+ q(0169),
+ q(0),
+ ],
+ q(haigwai) => [
+ q(2734),
+ q(0),
+ ],
+ q(haiphong sign language) => [
+ q(2700),
+ q(0),
+ ],
+ q(haisla) => [
+ q(2712),
+ q(0),
+ ],
+ q(haitian) => [
+ q(0170),
+ q(0),
+ ],
+ q(haitian creole) => [
+ q(0170),
+ q(0),
+ ],
+ q(haitian vodoun culture language) => [
+ q(2857),
+ q(0),
+ ],
+ q(haji) => [
+ q(2751),
+ q(0),
+ ],
+ q(hajong) => [
+ q(2703),
+ q(0),
+ ],
+ q(haka chin) => [
+ q(1799),
+ q(0),
+ ],
+ q(hakka chinese) => [
+ q(2704),
+ q(0),
+ ],
+ q(hako) => [
+ q(2708),
+ q(0),
+ ],
+ q(halang) => [
+ q(2705),
+ q(0),
+ ],
+ q(halang doan) => [
+ q(2758),
+ q(0),
+ ],
+ q(halbi) => [
+ q(2757),
+ q(0),
+ ],
+ q(halh mongolian) => [
+ q(3319),
+ q(0),
+ ],
+ q(halia) => [
+ q(2756),
+ q(0),
+ ],
+ q(halkomelem) => [
+ q(2848),
+ q(0),
+ ],
+ q(hamap) => [
+ q(2780),
+ q(0),
+ ],
+ q(hamba) => [
+ q(2717),
+ q(0),
+ ],
+ q(hamer-banna) => [
+ q(0772),
+ q(0),
+ ],
+ q(hamtai) => [
+ q(2779),
+ q(0),
+ ],
+ q(han) => [
+ q(2695),
+ q(0),
+ ],
+ q(hanga) => [
+ q(2701),
+ q(0),
+ ],
+ q(hanga hundi) => [
+ q(7169),
+ q(0),
+ ],
+ q(hangaza) => [
+ q(2707),
+ q(0),
+ ],
+ q(hani) => [
+ q(2789),
+ q(0),
+ ],
+ q(hano) => [
+ q(3962),
+ q(0),
+ ],
+ q(hanoi sign language) => [
+ q(2696),
+ q(0),
+ ],
+ q(hanunoo) => [
+ q(2791),
+ q(0),
+ ],
+ q(harami) => [
+ q(7293),
+ q(0),
+ ],
+ q(harari) => [
+ q(2711),
+ q(0),
+ ],
+ q(harijan kinnauri) => [
+ q(3370),
+ q(0),
+ ],
+ q(haroi) => [
+ q(2820),
+ q(0),
+ ],
+ q(haroti) => [
+ q(2802),
+ q(0),
+ ],
+ q(harsusi) => [
+ q(2828),
+ q(0),
+ ],
+ q(haruai) => [
+ q(6558),
+ q(0),
+ ],
+ q(haruku) => [
+ q(2818),
+ q(0),
+ ],
+ q(haryanvi) => [
+ q(1164),
+ q(0),
+ ],
+ q(harzani) => [
+ q(2824),
+ q(0),
+ ],
+ q(hasha) => [
+ q(7523),
+ q(0),
+ ],
+ q(hassaniyya) => [
+ q(4198),
+ q(0),
+ ],
+ q(hatam) => [
+ q(2698),
+ q(0),
+ ],
+ q(hattic) => [
+ q(7298),
+ q(0),
+ ],
+ q(hausa) => [
+ q(0171),
+ q(0),
+ ],
+ q(hausa sign language) => [
+ q(2826),
+ q(0),
+ ],
+ q(havasupai-walapai-yavapai) => [
+ q(7683),
+ q(0),
+ ],
+ q(haveke) => [
+ q(2859),
+ q(0),
+ ],
+ q(havu) => [
+ q(2713),
+ q(0),
+ ],
+ q(hawai'i creole english) => [
+ q(2863),
+ q(0),
+ ],
+ q(hawai'i pidgin sign language) => [
+ q(2815),
+ q(0),
+ ],
+ q(hawaiian) => [
+ q(0172),
+ q(0),
+ ],
+ q(haya) => [
+ q(2715),
+ q(0),
+ ],
+ q(hazaragi) => [
+ q(2716),
+ q(0),
+ ],
+ q(hdi) => [
+ q(7277),
+ q(0),
+ ],
+ q(hebrew) => [
+ q(0173),
+ q(0),
+ ],
+ q(hehe) => [
+ q(2730),
+ q(0),
+ ],
+ q(heiban) => [
+ q(2719),
+ q(0),
+ ],
+ q(heiltsuk) => [
+ q(2731),
+ q(0),
+ ],
+ q(helambu sherpa) => [
+ q(5907),
+ q(0),
+ ],
+ q(helong) => [
+ q(2729),
+ q(0),
+ ],
+ q(hema) => [
+ q(4884),
+ q(0),
+ ],
+ q(hemba) => [
+ q(2732),
+ q(0),
+ ],
+ q(herde) => [
+ q(2728),
+ q(0),
+ ],
+ q(herero) => [
+ q(0174),
+ q(0),
+ ],
+ q(hermit) => [
+ q(3936),
+ q(0),
+ ],
+ q(hernican) => [
+ q(7297),
+ q(0),
+ ],
+ q(hertevin) => [
+ q(2821),
+ q(0),
+ ],
+ q(heung kong sau yue) => [
+ q(2755),
+ q(0),
+ ],
+ q(hewa) => [
+ q(2706),
+ q(0),
+ ],
+ q(heyo) => [
+ q(0943),
+ q(0),
+ ],
+ q(hiberno-scottish gaelic) => [
+ q(2494),
+ q(0),
+ ],
+ q(hibito) => [
+ q(2739),
+ q(0),
+ ],
+ q(hidatsa) => [
+ q(2740),
+ q(0),
+ ],
+ q(hieroglyphic luwian) => [
+ q(2761),
+ q(0),
+ ],
+ q(higaonon) => [
+ q(4102),
+ q(0),
+ ],
+ q(highland konjo) => [
+ q(3366),
+ q(0),
+ ],
+ q(highland oaxaca chontal) => [
+ q(1721),
+ q(0),
+ ],
+ q(highland popoluca) => [
+ q(5534),
+ q(0),
+ ],
+ q(highland puebla nahuatl) => [
+ q(1022),
+ q(0),
+ ],
+ q(highland totonac) => [
+ q(6617),
+ q(0),
+ ],
+ q(hijazi arabic) => [
+ q(0601),
+ q(0),
+ ],
+ q(hijuk) => [
+ q(2745),
+ q(0),
+ ],
+ q(hiligaynon) => [
+ q(0175),
+ q(0),
+ ],
+ q(himachali languages) => [
+ q(0176),
+ q(0),
+ ],
+ q(himarima) => [
+ q(2748),
+ q(0),
+ ],
+ q(hindi) => [
+ q(0177),
+ q(0),
+ ],
+ q(hinduri) => [
+ q(2744),
+ q(0),
+ ],
+ q(hinukh) => [
+ q(2510),
+ q(0),
+ ],
+ q(hiri motu) => [
+ q(0180),
+ q(0),
+ ],
+ q(hittite) => [
+ q(0178),
+ q(0),
+ ],
+ q(hitu) => [
+ q(2832),
+ q(0),
+ ],
+ q(hiw) => [
+ q(2749),
+ q(0),
+ ],
+ q(hixkaryana) => [
+ q(2750),
+ q(0),
+ ],
+ q(hlai) => [
+ q(3891),
+ q(0),
+ ],
+ q(hlepho phowa) => [
+ q(7560),
+ q(0),
+ ],
+ q(hlersu) => [
+ q(2759),
+ q(0),
+ ],
+ q(hmar) => [
+ q(2777),
+ q(0),
+ ],
+ q(hmong) => [
+ q(0179),
+ q(0),
+ ],
+ q(hmong daw) => [
+ q(4623),
+ q(0),
+ ],
+ q(hmong do) => [
+ q(2781),
+ q(0),
+ ],
+ q(hmong don) => [
+ q(2767),
+ q(0),
+ ],
+ q(hmong njua) => [
+ q(2790),
+ q(0),
+ ],
+ q(hmong shua) => [
+ q(2784),
+ q(0),
+ ],
+ q(hmong-mien languages) => [
+ q(0509),
+ q(0),
+ ],
+ q(hmwaveke) => [
+ q(4493),
+ q(0),
+ ],
+ q(ho) => [
+ q(2797),
+ q(0),
+ ],
+ q(ho chi minh city sign language) => [
+ q(2808),
+ q(0),
+ ],
+ q(ho-chunk) => [
+ q(7100),
+ q(0),
+ ],
+ q(hoava) => [
+ q(2795),
+ q(0),
+ ],
+ q(hobyot) => [
+ q(2800),
+ q(0),
+ ],
+ q(hoia hoia) => [
+ q(2735),
+ q(0),
+ ],
+ q(hokan languages) => [
+ q(0510),
+ q(0),
+ ],
+ q(holikachuk) => [
+ q(2801),
+ q(0),
+ ],
+ q(holiya) => [
+ q(2812),
+ q(0),
+ ],
+ q(holma) => [
+ q(2798),
+ q(0),
+ ],
+ q(holoholo) => [
+ q(2805),
+ q(0),
+ ],
+ q(holu) => [
+ q(2803),
+ q(0),
+ ],
+ q(homa) => [
+ q(2804),
+ q(0),
+ ],
+ q(honduras sign language) => [
+ q(2725),
+ q(0),
+ ],
+ q(hone) => [
+ q(3128),
+ q(0),
+ ],
+ q(hong kong sign language) => [
+ q(2755),
+ q(0),
+ ],
+ q(honi) => [
+ q(2811),
+ q(0),
+ ],
+ q(hopi) => [
+ q(2806),
+ q(0),
+ ],
+ q(horned miao) => [
+ q(2819),
+ q(0),
+ ],
+ q(horo) => [
+ q(2807),
+ q(0),
+ ],
+ q(horom) => [
+ q(2799),
+ q(0),
+ ],
+ q(horpa) => [
+ q(2279),
+ q(0),
+ ],
+ q(hote) => [
+ q(2809),
+ q(0),
+ ],
+ q(hoti) => [
+ q(2829),
+ q(0),
+ ],
+ q(hovongan) => [
+ q(2810),
+ q(0),
+ ],
+ q(hoyahoya) => [
+ q(2737),
+ q(0),
+ ],
+ q(hozo) => [
+ q(2813),
+ q(0),
+ ],
+ q(hpon) => [
+ q(2814),
+ q(0),
+ ],
+ q(hrangkhol) => [
+ q(2816),
+ q(0),
+ ],
+ q(hre) => [
+ q(2817),
+ q(0),
+ ],
+ q(hruso) => [
+ q(2822),
+ q(0),
+ ],
+ q(hu) => [
+ q(2846),
+ q(0),
+ ],
+ q(huachipaeri) => [
+ q(2839),
+ q(0),
+ ],
+ q(huallaga huanuco quechua) => [
+ q(5654),
+ q(0),
+ ],
+ q(huamalies-dos de mayo huanuco quechua) => [
+ q(5677),
+ q(0),
+ ],
+ q(huambisa) => [
+ q(2834),
+ q(0),
+ ],
+ q(huarijio) => [
+ q(6946),
+ q(0),
+ ],
+ q(huastec) => [
+ q(2849),
+ q(0),
+ ],
+ q(huaulu) => [
+ q(2836),
+ q(0),
+ ],
+ q(huautla mazatec) => [
+ q(4097),
+ q(0),
+ ],
+ q(huaxcaleca nahuatl) => [
+ q(4856),
+ q(0),
+ ],
+ q(huaylas ancash quechua) => [
+ q(5691),
+ q(0),
+ ],
+ q(huaylla wanca quechua) => [
+ q(5686),
+ q(0),
+ ],
+ q(huba) => [
+ q(2718),
+ q(0),
+ ],
+ q(huehuetla tepehua) => [
+ q(6422),
+ q(0),
+ ],
+ q(huichol) => [
+ q(2723),
+ q(0),
+ ],
+ q(huilliche) => [
+ q(2840),
+ q(0),
+ ],
+ q(huitepec mixtec) => [
+ q(4645),
+ q(0),
+ ],
+ q(huizhou chinese) => [
+ q(1931),
+ q(0),
+ ],
+ q(hukumina) => [
+ q(2853),
+ q(0),
+ ],
+ q(hula) => [
+ q(2844),
+ q(0),
+ ],
+ q(hulaula) => [
+ q(2855),
+ q(0),
+ ],
+ q(huli) => [
+ q(2841),
+ q(0),
+ ],
+ q(hulung) => [
+ q(2843),
+ q(0),
+ ],
+ q(humburi senni songhay) => [
+ q(2763),
+ q(0),
+ ],
+ q(humene) => [
+ q(2838),
+ q(0),
+ ],
+ q(humla) => [
+ q(2850),
+ q(0),
+ ],
+ q(hun-saare) => [
+ q(2168),
+ q(0),
+ ],
+ q(hunde) => [
+ q(2753),
+ q(0),
+ ],
+ q(hung) => [
+ q(2794),
+ q(0),
+ ],
+ q(hungana) => [
+ q(2845),
+ q(0),
+ ],
+ q(hungarian) => [
+ q(0183),
+ q(0),
+ ],
+ q(hungarian sign language) => [
+ q(2825),
+ q(0),
+ ],
+ q(hungworo) => [
+ q(4716),
+ q(0),
+ ],
+ q(hunjara-kaina ke) => [
+ q(2754),
+ q(0),
+ ],
+ q(hunnic) => [
+ q(7294),
+ q(0),
+ ],
+ q(hunsrik) => [
+ q(2823),
+ q(0),
+ ],
+ q(hunzib) => [
+ q(2856),
+ q(0),
+ ],
+ q(hupa) => [
+ q(0184),
+ q(0),
+ ],
+ q(hupde) => [
+ q(3135),
+ q(0),
+ ],
+ q(hupla) => [
+ q(2709),
+ q(0),
+ ],
+ q(hurrian) => [
+ q(7299),
+ q(0),
+ ],
+ q(hutterisch) => [
+ q(2467),
+ q(0),
+ ],
+ q(hutterite german) => [
+ q(2467),
+ q(0),
+ ],
+ q(hwana) => [
+ q(2864),
+ q(0),
+ ],
+ q(hya) => [
+ q(2865),
+ q(0),
+ ],
+ q(hyam) => [
+ q(3021),
+ q(0),
+ ],
+ q(i'saka) => [
+ q(3580),
+ q(0),
+ ],
+ q(i-wak) => [
+ q(3008),
+ q(0),
+ ],
+ q(iaai) => [
+ q(2866),
+ q(0),
+ ],
+ q(iamalele) => [
+ q(7612),
+ q(0),
+ ],
+ q(iapama) => [
+ q(2868),
+ q(0),
+ ],
+ q(iatmul) => [
+ q(2867),
+ q(0),
+ ],
+ q(iau) => [
+ q(6574),
+ q(0),
+ ],
+ q(ibali teke) => [
+ q(6427),
+ q(0),
+ ],
+ q(ibaloi) => [
+ q(2874),
+ q(0),
+ ],
+ q(iban) => [
+ q(0185),
+ q(0),
+ ],
+ q(ibanag) => [
+ q(2873),
+ q(0),
+ ],
+ q(ibani) => [
+ q(2879),
+ q(0),
+ ],
+ q(ibatan) => [
+ q(3006),
+ q(0),
+ ],
+ q(iberian) => [
+ q(7302),
+ q(0),
+ ],
+ q(ibibio) => [
+ q(2870),
+ q(0),
+ ],
+ q(ibino) => [
+ q(2876),
+ q(0),
+ ],
+ q(ibu) => [
+ q(2878),
+ q(0),
+ ],
+ q(ibuoro) => [
+ q(2877),
+ q(0),
+ ],
+ q(icelandic) => [
+ q(0187),
+ q(0),
+ ],
+ q(icelandic sign language) => [
+ q(2882),
+ q(0),
+ ],
+ q(iceve-maci) => [
+ q(1118),
+ q(0),
+ ],
+ q(ida'an) => [
+ q(1962),
+ q(0),
+ ],
+ q(idakho-isukha-tiriki) => [
+ q(2884),
+ q(0),
+ ],
+ q(idate) => [
+ q(2892),
+ q(0),
+ ],
+ q(idere) => [
+ q(2888),
+ q(0),
+ ],
+ q(idesa) => [
+ q(2891),
+ q(0),
+ ],
+ q(idi) => [
+ q(2889),
+ q(0),
+ ],
+ q(ido) => [
+ q(0188),
+ q(0),
+ ],
+ q(idoma) => [
+ q(2893),
+ q(0),
+ ],
+ q(idon) => [
+ q(2886),
+ q(0),
+ ],
+ q(idu-mishmi) => [
+ q(1776),
+ q(0),
+ ],
+ q(iduna) => [
+ q(6970),
+ q(0),
+ ],
+ q(ife) => [
+ q(2896),
+ q(0),
+ ],
+ q(ifo) => [
+ q(2897),
+ q(0),
+ ],
+ q(igala) => [
+ q(2905),
+ q(0),
+ ],
+ q(igana) => [
+ q(2904),
+ q(0),
+ ],
+ q(igbo) => [
+ q(0186),
+ q(0),
+ ],
+ q(igede) => [
+ q(2903),
+ q(0),
+ ],
+ q(ignaciano) => [
+ q(2907),
+ q(0),
+ ],
+ q(igo) => [
+ q(0685),
+ q(0),
+ ],
+ q(iguta) => [
+ q(4714),
+ q(0),
+ ],
+ q(igwe) => [
+ q(2910),
+ q(0),
+ ],
+ q(iha) => [
+ q(2913),
+ q(0),
+ ],
+ q(iha based pidgin) => [
+ q(2911),
+ q(0),
+ ],
+ q(ihievbe) => [
+ q(2912),
+ q(0),
+ ],
+ q(ija-zuba) => [
+ q(6972),
+ q(0),
+ ],
+ q(ijo languages) => [
+ q(0190),
+ q(0),
+ ],
+ q(ik) => [
+ q(2929),
+ q(0),
+ ],
+ q(ika) => [
+ q(2922),
+ q(0),
+ ],
+ q(ikizu) => [
+ q(2930),
+ q(0),
+ ],
+ q(iko) => [
+ q(2921),
+ q(0),
+ ],
+ q(ikobi) => [
+ q(4177),
+ q(0),
+ ],
+ q(ikoma-nata-isenye) => [
+ q(5070),
+ q(0),
+ ],
+ q(ikpeng) => [
+ q(6787),
+ q(0),
+ ],
+ q(ikpeshi) => [
+ q(2925),
+ q(0),
+ ],
+ q(ikposo) => [
+ q(3515),
+ q(0),
+ ],
+ q(iku-gora-ankwa) => [
+ q(2927),
+ q(0),
+ ],
+ q(ikulu) => [
+ q(2923),
+ q(0),
+ ],
+ q(ikwere) => [
+ q(2928),
+ q(0),
+ ],
+ q(ila) => [
+ q(2932),
+ q(0),
+ ],
+ q(ile ape) => [
+ q(2931),
+ q(0),
+ ],
+ q(ili turki) => [
+ q(2934),
+ q(0),
+ ],
+ q(ili'uun) => [
+ q(2938),
+ q(0),
+ ],
+ q(ilianen manobo) => [
+ q(4109),
+ q(0),
+ ],
+ q(illyrian) => [
+ q(7304),
+ q(0),
+ ],
+ q(iloko) => [
+ q(0193),
+ q(0),
+ ],
+ q(ilongot) => [
+ q(2935),
+ q(0),
+ ],
+ q(ilue) => [
+ q(2939),
+ q(0),
+ ],
+ q(ilwana) => [
+ q(4353),
+ q(0),
+ ],
+ q(imbabura highland quichua) => [
+ q(5678),
+ q(0),
+ ],
+ q(imbongu) => [
+ q(2946),
+ q(0),
+ ],
+ q(imeraguen) => [
+ q(2942),
+ q(0),
+ ],
+ q(imonda) => [
+ q(2945),
+ q(0),
+ ],
+ q(imperial aramaic (700-300 bce)) => [
+ q(0022),
+ q(0),
+ ],
+ q(imroing) => [
+ q(2947),
+ q(0),
+ ],
+ q(inabaknon) => [
+ q(0582),
+ q(0),
+ ],
+ q(inapang) => [
+ q(4694),
+ q(0),
+ ],
+ q(inapari) => [
+ q(2957),
+ q(0),
+ ],
+ q(inari sami) => [
+ q(0391),
+ q(0),
+ ],
+ q(indian sign language) => [
+ q(2958),
+ q(0),
+ ],
+ q(indic languages) => [
+ q(0195),
+ q(0),
+ ],
+ q(indo-european languages) => [
+ q(0197),
+ q(0),
+ ],
+ q(indo-iranian languages) => [
+ q(0512),
+ q(0),
+ ],
+ q(indo-portuguese) => [
+ q(2885),
+ q(0),
+ ],
+ q(indonesian) => [
+ q(0196),
+ q(0),
+ ],
+ q(indonesian bajau) => [
+ q(1101),
+ q(0),
+ ],
+ q(indonesian sign language) => [
+ q(2953),
+ q(0),
+ ],
+ q(indri) => [
+ q(2890),
+ q(0),
+ ],
+ q(indus kohistani) => [
+ q(4601),
+ q(0),
+ ],
+ q(indus valley language) => [
+ q(7308),
+ q(0),
+ ],
+ q(inebu one) => [
+ q(5193),
+ q(0),
+ ],
+ q(ineseno) => [
+ q(2960),
+ q(0),
+ ],
+ q(inga) => [
+ q(2950),
+ q(0),
+ ],
+ q(ingrian) => [
+ q(3017),
+ q(0),
+ ],
+ q(ingush) => [
+ q(0198),
+ q(0),
+ ],
+ q(inlaod itneg) => [
+ q(2992),
+ q(0),
+ ],
+ q(inoke-yate) => [
+ q(2956),
+ q(0),
+ ],
+ q(inonhan) => [
+ q(3991),
+ q(0),
+ ],
+ q(inor) => [
+ q(2961),
+ q(0),
+ ],
+ q(inpui naga) => [
+ q(4909),
+ q(0),
+ ],
+ q(interglossa) => [
+ q(2909),
+ q(0),
+ ],
+ q(interlingua (international auxiliary language association)) => [
+ q(0194),
+ q(0),
+ ],
+ q(interlingue) => [
+ q(0192),
+ q(0),
+ ],
+ q(international sign) => [
+ q(2937),
+ q(0),
+ ],
+ q(intha) => [
+ q(2959),
+ q(0),
+ ],
+ q(inuinnaqtun) => [
+ q(2926),
+ q(0),
+ ],
+ q(inuktitut) => [
+ q(0191),
+ q(0),
+ ],
+ q(inupiaq) => [
+ q(0199),
+ q(0),
+ ],
+ q(iowa-oto) => [
+ q(2963),
+ q(0),
+ ],
+ q(ipalapa amuzgo) => [
+ q(1018),
+ q(0),
+ ],
+ q(ipiko) => [
+ q(2965),
+ q(0),
+ ],
+ q(ipili) => [
+ q(2964),
+ q(0),
+ ],
+ q(ipulo) => [
+ q(0903),
+ q(0),
+ ],
+ q(iquito) => [
+ q(2966),
+ q(0),
+ ],
+ q(ir) => [
+ q(2972),
+ q(0),
+ ],
+ q(iranian languages) => [
+ q(0200),
+ q(0),
+ ],
+ q(iranian persian) => [
+ q(5394),
+ q(0),
+ ],
+ q(irantxe) => [
+ q(2971),
+ q(0),
+ ],
+ q(iranun) => [
+ q(2936),
+ q(0),
+ ],
+ q(iraqw) => [
+ q(2970),
+ q(0),
+ ],
+ q(irarutu) => [
+ q(2968),
+ q(0),
+ ],
+ q(iraya) => [
+ q(2975),
+ q(0),
+ ],
+ q(iresim) => [
+ q(2967),
+ q(0),
+ ],
+ q(irigwe) => [
+ q(2969),
+ q(0),
+ ],
+ q(irish) => [
+ q(0154),
+ q(0),
+ ],
+ q(irish sign language) => [
+ q(2980),
+ q(0),
+ ],
+ q(irish, middle (900-1200)) => [
+ q(0278),
+ q(0),
+ ],
+ q(irish, old (to 900)) => [
+ q(0377),
+ q(0),
+ ],
+ q(iroquoian languages) => [
+ q(0201),
+ q(0),
+ ],
+ q(irula) => [
+ q(2973),
+ q(0),
+ ],
+ q(isabi) => [
+ q(2976),
+ q(0),
+ ],
+ q(isanzu) => [
+ q(2985),
+ q(0),
+ ],
+ q(isarog agta) => [
+ q(0664),
+ q(0),
+ ],
+ q(isconahua) => [
+ q(2977),
+ q(0),
+ ],
+ q(isebe) => [
+ q(2908),
+ q(0),
+ ],
+ q(isekiri) => [
+ q(2998),
+ q(0),
+ ],
+ q(ishkashimi) => [
+ q(2983),
+ q(0),
+ ],
+ q(isinai) => [
+ q(2955),
+ q(0),
+ ],
+ q(isirawa) => [
+ q(6189),
+ q(0),
+ ],
+ q(island carib) => [
+ q(1844),
+ q(0),
+ ],
+ q(islander creole english) => [
+ q(2883),
+ q(0),
+ ],
+ q(isnag) => [
+ q(2978),
+ q(0),
+ ],
+ q(isoko) => [
+ q(2986),
+ q(0),
+ ],
+ q(israeli sign language) => [
+ q(2987),
+ q(0),
+ ],
+ q(isthmus mixe) => [
+ q(4290),
+ q(0),
+ ],
+ q(isthmus zapotec) => [
+ q(7724),
+ q(0),
+ ],
+ q(isthmus-cosoleacaque nahuatl) => [
+ q(4851),
+ q(0),
+ ],
+ q(isthmus-mecayapan nahuatl) => [
+ q(4862),
+ q(0),
+ ],
+ q(isthmus-pajapan nahuatl) => [
+ q(4855),
+ q(0),
+ ],
+ q(istriot) => [
+ q(2988),
+ q(0),
+ ],
+ q(istro romanian) => [
+ q(5842),
+ q(0),
+ ],
+ q(isu (fako division)) => [
+ q(6324),
+ q(0),
+ ],
+ q(isu (menchum division)) => [
+ q(2989),
+ q(0),
+ ],
+ q(italian) => [
+ q(0202),
+ q(0),
+ ],
+ q(italian sign language) => [
+ q(2979),
+ q(0),
+ ],
+ q(italic languages) => [
+ q(0513),
+ q(0),
+ ],
+ q(itawit) => [
+ q(3000),
+ q(0),
+ ],
+ q(itelmen) => [
+ q(2994),
+ q(0),
+ ],
+ q(itene) => [
+ q(2991),
+ q(0),
+ ],
+ q(iteri) => [
+ q(2997),
+ q(0),
+ ],
+ q(itik) => [
+ q(3002),
+ q(0),
+ ],
+ q(ito) => [
+ q(3001),
+ q(0),
+ ],
+ q(itonama) => [
+ q(2996),
+ q(0),
+ ],
+ q(itu mbon uzo) => [
+ q(2995),
+ q(0),
+ ],
+ q(itundujia mixtec) => [
+ q(4131),
+ q(0),
+ ],
+ q(itza) => [
+ q(3004),
+ q(0),
+ ],
+ q(iu mien) => [
+ q(3005),
+ q(0),
+ ],
+ q(ivatan) => [
+ q(3007),
+ q(0),
+ ],
+ q(ivbie north-okpela-arhe) => [
+ q(0915),
+ q(0),
+ ],
+ q(iwaidja) => [
+ q(2871),
+ q(0),
+ ],
+ q(iwal) => [
+ q(3173),
+ q(0),
+ ],
+ q(iwam) => [
+ q(3009),
+ q(0),
+ ],
+ q(iwur) => [
+ q(3010),
+ q(0),
+ ],
+ q(ixcatec) => [
+ q(3012),
+ q(0),
+ ],
+ q(ixcatlan mazatec) => [
+ q(4682),
+ q(0),
+ ],
+ q(ixil) => [
+ q(3013),
+ q(0),
+ ],
+ q(ixtayutla mixtec) => [
+ q(6992),
+ q(0),
+ ],
+ q(ixtenco otomi) => [
+ q(5307),
+ q(0),
+ ],
+ q(iyayu) => [
+ q(3014),
+ q(0),
+ ],
+ q(iyive) => [
+ q(6845),
+ q(0),
+ ],
+ q(iyo) => [
+ q(4744),
+ q(0),
+ ],
+ q(iyo'wujwa chorote) => [
+ q(1856),
+ q(0),
+ ],
+ q(iyojwa'ja chorote) => [
+ q(1859),
+ q(0),
+ ],
+ q(izere) => [
+ q(3019),
+ q(0),
+ ],
+ q(izi-ezaa-ikwo-mgbo) => [
+ q(3018),
+ q(0),
+ ],
+ q(izon) => [
+ q(2915),
+ q(0),
+ ],
+ q(izora) => [
+ q(1673),
+ q(0),
+ ],
+ q(jabuti) => [
+ q(3045),
+ q(0),
+ ],
+ q(jad) => [
+ q(3050),
+ q(0),
+ ],
+ q(jadgali) => [
+ q(3051),
+ q(0),
+ ],
+ q(jah hut) => [
+ q(3026),
+ q(0),
+ ],
+ q(jahanka) => [
+ q(3023),
+ q(0),
+ ],
+ q(jair awyu) => [
+ q(0983),
+ q(0),
+ ],
+ q(jakalteko) => [
+ q(3022),
+ q(0),
+ ],
+ q(jakati) => [
+ q(3035),
+ q(0),
+ ],
+ q(jakun) => [
+ q(3028),
+ q(0),
+ ],
+ q(jalapa de diaz mazatec) => [
+ q(4093),
+ q(0),
+ ],
+ q(jalkunan) => [
+ q(1578),
+ q(0),
+ ],
+ q(jamaican country sign language) => [
+ q(3048),
+ q(0),
+ ],
+ q(jamaican creole english) => [
+ q(3030),
+ q(0),
+ ],
+ q(jamaican sign language) => [
+ q(3093),
+ q(0),
+ ],
+ q(jamamadi) => [
+ q(3020),
+ q(0),
+ ],
+ q(jambi malay) => [
+ q(3037),
+ q(0),
+ ],
+ q(jamiltepec mixtec) => [
+ q(4646),
+ q(0),
+ ],
+ q(jamsay dogon) => [
+ q(2066),
+ q(0),
+ ],
+ q(jandai) => [
+ q(3031),
+ q(0),
+ ],
+ q(jandavra) => [
+ q(3106),
+ q(0),
+ ],
+ q(jangkang) => [
+ q(2068),
+ q(0),
+ ],
+ q(jangshung) => [
+ q(3105),
+ q(0),
+ ],
+ q(janji) => [
+ q(3108),
+ q(0),
+ ],
+ q(japanese) => [
+ q(0205),
+ q(0),
+ ],
+ q(japanese (family)) => [
+ q(0514),
+ q(0),
+ ],
+ q(japanese sign language) => [
+ q(3123),
+ q(0),
+ ],
+ q(japreria) => [
+ q(3122),
+ q(0),
+ ],
+ q(jaqaru) => [
+ q(3118),
+ q(0),
+ ],
+ q(jara) => [
+ q(3025),
+ q(0),
+ ],
+ q(jarai) => [
+ q(3119),
+ q(0),
+ ],
+ q(jarawa (india)) => [
+ q(0806),
+ q(0),
+ ],
+ q(jaru) => [
+ q(1982),
+ q(0),
+ ],
+ q(jauja wanca quechua) => [
+ q(5707),
+ q(0),
+ ],
+ q(jaunsari) => [
+ q(3111),
+ q(0),
+ ],
+ q(javanese) => [
+ q(0203),
+ q(0),
+ ],
+ q(javindo) => [
+ q(3142),
+ q(0),
+ ],
+ q(jawe) => [
+ q(3039),
+ q(0),
+ ],
+ q(jaya) => [
+ q(3147),
+ q(0),
+ ],
+ q(jebero) => [
+ q(3053),
+ q(0),
+ ],
+ q(jeh) => [
+ q(3056),
+ q(0),
+ ],
+ q(jehai) => [
+ q(3068),
+ q(0),
+ ],
+ q(jemez) => [
+ q(6620),
+ q(0),
+ ],
+ q(jenaama bozo) => [
+ q(1619),
+ q(0),
+ ],
+ q(jeng) => [
+ q(3055),
+ q(0),
+ ],
+ q(jennu kurumba) => [
+ q(7465),
+ q(0),
+ ],
+ q(jere) => [
+ q(3061),
+ q(0),
+ ],
+ q(jeri kuo) => [
+ q(3058),
+ q(0),
+ ],
+ q(jerung) => [
+ q(3054),
+ q(0),
+ ],
+ q(jewish babylonian aramaic (ca. 200-1200 ce)) => [
+ q(6571),
+ q(0),
+ ],
+ q(jewish palestinian aramaic) => [
+ q(3117),
+ q(0),
+ ],
+ q(jhankot sign language) => [
+ q(3069),
+ q(0),
+ ],
+ q(jiamao) => [
+ q(3080),
+ q(0),
+ ],
+ q(jiarong) => [
+ q(3145),
+ q(0),
+ ],
+ q(jiba) => [
+ q(3134),
+ q(0),
+ ],
+ q(jibu) => [
+ q(3071),
+ q(0),
+ ],
+ q(jicarilla apache) => [
+ q(0844),
+ q(0),
+ ],
+ q(jiiddu) => [
+ q(3077),
+ q(0),
+ ],
+ q(jilbe) => [
+ q(3074),
+ q(0),
+ ],
+ q(jilim) => [
+ q(3078),
+ q(0),
+ ],
+ q(jimi (cameroon)) => [
+ q(3079),
+ q(0),
+ ],
+ q(jimi (nigeria)) => [
+ q(3098),
+ q(0),
+ ],
+ q(jina) => [
+ q(3070),
+ q(0),
+ ],
+ q(jingpho) => [
+ q(0210),
+ q(0),
+ ],
+ q(jinyu chinese) => [
+ q(1755),
+ q(0),
+ ],
+ q(jiongnai bunu) => [
+ q(5522),
+ q(0),
+ ],
+ q(jirel) => [
+ q(3131),
+ q(0),
+ ],
+ q(jiru) => [
+ q(3120),
+ q(0),
+ ],
+ q(jita) => [
+ q(3082),
+ q(0),
+ ],
+ q(jju) => [
+ q(3154),
+ q(0),
+ ],
+ q(joba) => [
+ q(3112),
+ q(0),
+ ],
+ q(jofotek-bromnya) => [
+ q(3044),
+ q(0),
+ ],
+ q(jola-fonyi) => [
+ q(2201),
+ q(0),
+ ],
+ q(jola-kasa) => [
+ q(1873),
+ q(0),
+ ],
+ q(jonkor bourmataguil) => [
+ q(3063),
+ q(0),
+ ],
+ q(jora) => [
+ q(3114),
+ q(0),
+ ],
+ q(jordanian sign language) => [
+ q(3115),
+ q(0),
+ ],
+ q(jorto) => [
+ q(3121),
+ q(0),
+ ],
+ q(jowulu) => [
+ q(3116),
+ q(0),
+ ],
+ q(ju) => [
+ q(3139),
+ q(0),
+ ],
+ q(ju/'hoan) => [
+ q(3623),
+ q(0),
+ ],
+ q(juang) => [
+ q(3133),
+ q(0),
+ ],
+ q(judeo-arabic) => [
+ q(0207),
+ q(0),
+ ],
+ q(judeo-berber) => [
+ q(3040),
+ q(0),
+ ],
+ q(judeo-georgian) => [
+ q(3065),
+ q(0),
+ ],
+ q(judeo-iraqi arabic) => [
+ q(7559),
+ q(0),
+ ],
+ q(judeo-italian) => [
+ q(2993),
+ q(0),
+ ],
+ q(judeo-moroccan arabic) => [
+ q(0721),
+ q(0),
+ ],
+ q(judeo-persian) => [
+ q(0206),
+ q(0),
+ ],
+ q(judeo-tat) => [
+ q(3052),
+ q(0),
+ ],
+ q(judeo-tripolitanian arabic) => [
+ q(7681),
+ q(0),
+ ],
+ q(judeo-tunisian arabic) => [
+ q(0720),
+ q(0),
+ ],
+ q(judeo-yemeni arabic) => [
+ q(3146),
+ q(0),
+ ],
+ q(jukun takum) => [
+ q(3046),
+ q(0),
+ ],
+ q(juma) => [
+ q(3124),
+ q(0),
+ ],
+ q(jumjum) => [
+ q(3132),
+ q(0),
+ ],
+ q(jumla sign language) => [
+ q(3137),
+ q(0),
+ ],
+ q(jumli) => [
+ q(3099),
+ q(0),
+ ],
+ q(jungle inga) => [
+ q(2952),
+ q(0),
+ ],
+ q(juquila mixe) => [
+ q(4643),
+ q(0),
+ ],
+ q(jur modo) => [
+ q(1134),
+ q(0),
+ ],
+ q(juray) => [
+ q(3141),
+ q(0),
+ ],
+ q(jurchen) => [
+ q(3126),
+ q(0),
+ ],
+ q(juruna) => [
+ q(3136),
+ q(0),
+ ],
+ q(jutish) => [
+ q(3138),
+ q(0),
+ ],
+ q(juwal) => [
+ q(4604),
+ q(0),
+ ],
+ q(juxtlahuaca mixtec) => [
+ q(6985),
+ q(0),
+ ],
+ q(jwira-pepesa) => [
+ q(3144),
+ q(0),
+ ],
+ q(k'iche') => [
+ q(5655),
+ q(0),
+ ],
+ q(kaamba) => [
+ q(7329),
+ q(0),
+ ],
+ q(kaan) => [
+ q(3832),
+ q(0),
+ ],
+ q(kaansa) => [
+ q(2551),
+ q(0),
+ ],
+ q(kaapor) => [
+ q(6892),
+ q(0),
+ ],
+ q(kaapor sign language) => [
+ q(6853),
+ q(0),
+ ],
+ q(kaba) => [
+ q(3587),
+ q(0),
+ ],
+ q(kabalai) => [
+ q(3650),
+ q(0),
+ ],
+ q(kabardian) => [
+ q(0219),
+ q(0),
+ ],
+ q(kabatei) => [
+ q(7324),
+ q(0),
+ ],
+ q(kabixi) => [
+ q(7257),
+ q(0),
+ ],
+ q(kabiye) => [
+ q(3176),
+ q(0),
+ ],
+ q(kabola) => [
+ q(3431),
+ q(0),
+ ],
+ q(kabore one) => [
+ q(5247),
+ q(0),
+ ],
+ q(kabras) => [
+ q(3917),
+ q(0),
+ ],
+ q(kaburi) => [
+ q(6847),
+ q(0),
+ ],
+ q(kabutra) => [
+ q(3181),
+ q(0),
+ ],
+ q(kabuverdianu) => [
+ q(3235),
+ q(0),
+ ],
+ q(kabwa) => [
+ q(1922),
+ q(0),
+ ],
+ q(kabwari) => [
+ q(3209),
+ q(0),
+ ],
+ q(kabyle) => [
+ q(0209),
+ q(0),
+ ],
+ q(kachama-ganjule) => [
+ q(3210),
+ q(0),
+ ],
+ q(kachari) => [
+ q(7231),
+ q(0),
+ ],
+ q(kachchi) => [
+ q(3278),
+ q(0),
+ ],
+ q(kachi koli) => [
+ q(2522),
+ q(0),
+ ],
+ q(kachin) => [
+ q(0210),
+ q(0),
+ ],
+ q(kacipo-balesi) => [
+ q(3485),
+ q(0),
+ ],
+ q(kaco') => [
+ q(7320),
+ q(0),
+ ],
+ q(kadai) => [
+ q(3751),
+ q(0),
+ ],
+ q(kadar) => [
+ q(3244),
+ q(0),
+ ],
+ q(kadaru) => [
+ q(3230),
+ q(0),
+ ],
+ q(kadiweu) => [
+ q(3164),
+ q(0),
+ ],
+ q(kadu) => [
+ q(7771),
+ q(0),
+ ],
+ q(kaduo) => [
+ q(3613),
+ q(0),
+ ],
+ q(kafa) => [
+ q(3178),
+ q(0),
+ ],
+ q(kafoa) => [
+ q(3520),
+ q(0),
+ ],
+ q(kagan kalagan) => [
+ q(3417),
+ q(0),
+ ],
+ q(kagate) => [
+ q(6313),
+ q(0),
+ ],
+ q(kagayanen) => [
+ q(1717),
+ q(0),
+ ],
+ q(kagoma) => [
+ q(3224),
+ q(0),
+ ],
+ q(kagoro) => [
+ q(7316),
+ q(0),
+ ],
+ q(kagulu) => [
+ q(3388),
+ q(0),
+ ],
+ q(kahe) => [
+ q(2752),
+ q(0),
+ ],
+ q(kahua) => [
+ q(0675),
+ q(0),
+ ],
+ q(kaian) => [
+ q(3206),
+ q(0),
+ ],
+ q(kaibobo) => [
+ q(3749),
+ q(0),
+ ],
+ q(kaidipang) => [
+ q(3762),
+ q(0),
+ ],
+ q(kaiep) => [
+ q(3183),
+ q(0),
+ ],
+ q(kaikadi) => [
+ q(3250),
+ q(0),
+ ],
+ q(kaike) => [
+ q(3763),
+ q(0),
+ ],
+ q(kaiku) => [
+ q(3396),
+ q(0),
+ ],
+ q(kaimbe) => [
+ q(7235),
+ q(0),
+ ],
+ q(kaimbulawa) => [
+ q(7769),
+ q(0),
+ ],
+ q(kaingang) => [
+ q(3301),
+ q(0),
+ ],
+ q(kairak) => [
+ q(1761),
+ q(0),
+ ],
+ q(kairiru) => [
+ q(3697),
+ q(0),
+ ],
+ q(kairui-midiki) => [
+ q(3554),
+ q(0),
+ ],
+ q(kais) => [
+ q(3759),
+ q(0),
+ ],
+ q(kaivi) => [
+ q(3191),
+ q(0),
+ ],
+ q(kaiwa) => [
+ q(3296),
+ q(0),
+ ],
+ q(kaiy) => [
+ q(6388),
+ q(0),
+ ],
+ q(kajakse) => [
+ q(1760),
+ q(0),
+ ],
+ q(kajali) => [
+ q(7319),
+ q(0),
+ ],
+ q(kajaman) => [
+ q(3151),
+ q(0),
+ ],
+ q(kakabai) => [
+ q(3531),
+ q(0),
+ ],
+ q(kakabe) => [
+ q(3384),
+ q(0),
+ ],
+ q(kakanda) => [
+ q(3380),
+ q(0),
+ ],
+ q(kakauhua) => [
+ q(3166),
+ q(0),
+ ],
+ q(kaki ae) => [
+ q(6351),
+ q(0),
+ ],
+ q(kakihum) => [
+ q(3701),
+ q(0),
+ ],
+ q(kako) => [
+ q(3389),
+ q(0),
+ ],
+ q(kakwa) => [
+ q(3249),
+ q(0),
+ ],
+ q(kala) => [
+ q(3198),
+ q(0),
+ ],
+ q(kala lagaw ya) => [
+ q(4617),
+ q(0),
+ ],
+ q(kalaallisut) => [
+ q(0211),
+ q(0),
+ ],
+ q(kalabakan) => [
+ q(3649),
+ q(0),
+ ],
+ q(kalabari) => [
+ q(2918),
+ q(0),
+ ],
+ q(kalabra) => [
+ q(3772),
+ q(0),
+ ],
+ q(kalagan) => [
+ q(3530),
+ q(0),
+ ],
+ q(kalaktang monpa) => [
+ q(3385),
+ q(0),
+ ],
+ q(kalam) => [
+ q(3438),
+ q(0),
+ ],
+ q(kalami) => [
+ q(2666),
+ q(0),
+ ],
+ q(kalamse) => [
+ q(3481),
+ q(0),
+ ],
+ q(kalanadi) => [
+ q(7111),
+ q(0),
+ ],
+ q(kalanga) => [
+ q(3197),
+ q(0),
+ ],
+ q(kalao) => [
+ q(3430),
+ q(0),
+ ],
+ q(kalapuya) => [
+ q(3733),
+ q(0),
+ ],
+ q(kalarko) => [
+ q(3162),
+ q(0),
+ ],
+ q(kalasha) => [
+ q(3424),
+ q(0),
+ ],
+ q(kalenjin) => [
+ q(3419),
+ q(0),
+ ],
+ q(kalispel-pend d'oreille) => [
+ q(2344),
+ q(0),
+ ],
+ q(kalkoti) => [
+ q(7310),
+ q(0),
+ ],
+ q(kalkutung) => [
+ q(3604),
+ q(0),
+ ],
+ q(kalmyk) => [
+ q(0470),
+ q(0),
+ ],
+ q(kalo finnish romani) => [
+ q(5783),
+ q(0),
+ ],
+ q(kalou) => [
+ q(7702),
+ q(0),
+ ],
+ q(kaluli) => [
+ q(1079),
+ q(0),
+ ],
+ q(kalumpang) => [
+ q(3414),
+ q(0),
+ ],
+ q(kam) => [
+ q(3232),
+ q(0),
+ ],
+ q(kamakan) => [
+ q(6976),
+ q(0),
+ ],
+ q(kamang) => [
+ q(7163),
+ q(0),
+ ],
+ q(kamano) => [
+ q(3177),
+ q(0),
+ ],
+ q(kamantan) => [
+ q(3195),
+ q(0),
+ ],
+ q(kamar) => [
+ q(3251),
+ q(0),
+ ],
+ q(kamara) => [
+ q(3101),
+ q(0),
+ ],
+ q(kamarian) => [
+ q(3770),
+ q(0),
+ ],
+ q(kamaru) => [
+ q(3309),
+ q(0),
+ ],
+ q(kamas) => [
+ q(7242),
+ q(0),
+ ],
+ q(kamasa) => [
+ q(3421),
+ q(0),
+ ],
+ q(kamasau) => [
+ q(3449),
+ q(0),
+ ],
+ q(kamayo) => [
+ q(3732),
+ q(0),
+ ],
+ q(kamayura) => [
+ q(3161),
+ q(0),
+ ],
+ q(kamba) => [
+ q(0212),
+ q(0),
+ ],
+ q(kamba (brazil)) => [
+ q(7248),
+ q(0),
+ ],
+ q(kamba (kenya)) => [
+ q(0212),
+ q(1),
+ ],
+ q(kambaata) => [
+ q(3599),
+ q(0),
+ ],
+ q(kambaira) => [
+ q(3746),
+ q(0),
+ ],
+ q(kambera) => [
+ q(7255),
+ q(0),
+ ],
+ q(kamberau) => [
+ q(2974),
+ q(0),
+ ],
+ q(kambiwa) => [
+ q(7256),
+ q(0),
+ ],
+ q(kami (nigeria)) => [
+ q(3439),
+ q(0),
+ ],
+ q(kami (tanzania)) => [
+ q(3207),
+ q(0),
+ ],
+ q(kamo) => [
+ q(3203),
+ q(0),
+ ],
+ q(kamoro) => [
+ q(3302),
+ q(0),
+ ],
+ q(kamta) => [
+ q(5777),
+ q(0),
+ ],
+ q(kamu) => [
+ q(7367),
+ q(0),
+ ],
+ q(kamula) => [
+ q(7335),
+ q(0),
+ ],
+ q(kamviri) => [
+ q(7474),
+ q(0),
+ ],
+ q(kamwe) => [
+ q(2742),
+ q(0),
+ ],
+ q(kanakanabu) => [
+ q(7374),
+ q(0),
+ ],
+ q(kanamari) => [
+ q(3468),
+ q(0),
+ ],
+ q(kanan) => [
+ q(7775),
+ q(0),
+ ],
+ q(kanashi) => [
+ q(7380),
+ q(0),
+ ],
+ q(kanasi) => [
+ q(6141),
+ q(0),
+ ],
+ q(kanauji) => [
+ q(1240),
+ q(0),
+ ],
+ q(kandas) => [
+ q(3548),
+ q(0),
+ ],
+ q(kandawo) => [
+ q(2400),
+ q(0),
+ ],
+ q(kande) => [
+ q(3179),
+ q(0),
+ ],
+ q(kanembu) => [
+ q(3172),
+ q(0),
+ ],
+ q(kang) => [
+ q(3737),
+ q(0),
+ ],
+ q(kanga) => [
+ q(3202),
+ q(0),
+ ],
+ q(kangean) => [
+ q(3401),
+ q(0),
+ ],
+ q(kanggape) => [
+ q(2906),
+ q(0),
+ ],
+ q(kangjia) => [
+ q(3714),
+ q(0),
+ ],
+ q(kango (bas-uele district)) => [
+ q(3622),
+ q(0),
+ ],
+ q(kango (tshopo district)) => [
+ q(3771),
+ q(0),
+ ],
+ q(kangri) => [
+ q(7379),
+ q(0),
+ ],
+ q(kaniet) => [
+ q(3608),
+ q(0),
+ ],
+ q(kanikkaran) => [
+ q(3256),
+ q(0),
+ ],
+ q(kaningdon-nindem) => [
+ q(3226),
+ q(0),
+ ],
+ q(kaningi) => [
+ q(3761),
+ q(0),
+ ],
+ q(kaningra) => [
+ q(3473),
+ q(0),
+ ],
+ q(kaninuwa) => [
+ q(7036),
+ q(0),
+ ],
+ q(kanite) => [
+ q(3451),
+ q(0),
+ ],
+ q(kanjari) => [
+ q(3280),
+ q(0),
+ ],
+ q(kanjobal) => [
+ q(3357),
+ q(0),
+ ],
+ q(kanju) => [
+ q(3165),
+ q(0),
+ ],
+ q(kankanaey) => [
+ q(3461),
+ q(0),
+ ],
+ q(kannada) => [
+ q(0213),
+ q(0),
+ ],
+ q(kannada kurumba) => [
+ q(3269),
+ q(0),
+ ],
+ q(kanoe) => [
+ q(3710),
+ q(0),
+ ],
+ q(kanowit-tanjong melanau) => [
+ q(3709),
+ q(0),
+ ],
+ q(kansa) => [
+ q(3582),
+ q(0),
+ ],
+ q(kantosi) => [
+ q(7328),
+ q(0),
+ ],
+ q(kanu) => [
+ q(3330),
+ q(0),
+ ],
+ q(kanufi) => [
+ q(3464),
+ q(0),
+ ],
+ q(kanuri) => [
+ q(0216),
+ q(0),
+ ],
+ q(kanyok) => [
+ q(3480),
+ q(0),
+ ],
+ q(kao) => [
+ q(3160),
+ q(0),
+ ],
+ q(kaonde) => [
+ q(3539),
+ q(0),
+ ],
+ q(kap) => [
+ q(7585),
+ q(0),
+ ],
+ q(kapampangan) => [
+ q(0337),
+ q(0),
+ ],
+ q(kapauri) => [
+ q(3322),
+ q(0),
+ ],
+ q(kapin) => [
+ q(6370),
+ q(0),
+ ],
+ q(kapinawa) => [
+ q(7401),
+ q(0),
+ ],
+ q(kapingamarangi) => [
+ q(3507),
+ q(0),
+ ],
+ q(kapori) => [
+ q(3322),
+ q(0),
+ ],
+ q(kapriman) => [
+ q(2070),
+ q(0),
+ ],
+ q(kaptiau) => [
+ q(3169),
+ q(0),
+ ],
+ q(kapya) => [
+ q(3420),
+ q(0),
+ ],
+ q(kaqchikel) => [
+ q(1649),
+ q(0),
+ ],
+ q(kara (central african republic)) => [
+ q(3152),
+ q(0),
+ ],
+ q(kara (korea)) => [
+ q(7852),
+ q(0),
+ ],
+ q(kara (papua new guinea)) => [
+ q(3858),
+ q(0),
+ ],
+ q(kara (tanzania)) => [
+ q(5741),
+ q(0),
+ ],
+ q(kara-kalpak) => [
+ q(0208),
+ q(0),
+ ],
+ q(karachay-balkar) => [
+ q(0234),
+ q(0),
+ ],
+ q(karadjeri) => [
+ q(2413),
+ q(0),
+ ],
+ q(karagas) => [
+ q(3344),
+ q(0),
+ ],
+ q(karahawyana) => [
+ q(7317),
+ q(0),
+ ],
+ q(karaim) => [
+ q(3228),
+ q(0),
+ ],
+ q(karaja) => [
+ q(3510),
+ q(0),
+ ],
+ q(karakhanid) => [
+ q(7409),
+ q(0),
+ ],
+ q(karami) => [
+ q(7241),
+ q(0),
+ ],
+ q(karamojong) => [
+ q(3221),
+ q(0),
+ ],
+ q(karang) => [
+ q(3764),
+ q(0),
+ ],
+ q(karanga) => [
+ q(3605),
+ q(0),
+ ],
+ q(karankawa) => [
+ q(7774),
+ q(0),
+ ],
+ q(karao) => [
+ q(3731),
+ q(0),
+ ],
+ q(karas) => [
+ q(3307),
+ q(0),
+ ],
+ q(karata) => [
+ q(3519),
+ q(0),
+ ],
+ q(karawa) => [
+ q(7420),
+ q(0),
+ ],
+ q(karbi) => [
+ q(4316),
+ q(0),
+ ],
+ q(kare (central african republic)) => [
+ q(3174),
+ q(0),
+ ],
+ q(kare (papua new guinea)) => [
+ q(3436),
+ q(0),
+ ],
+ q(karekare) => [
+ q(3153),
+ q(0),
+ ],
+ q(karelian) => [
+ q(0235),
+ q(0),
+ ],
+ q(karen languages) => [
+ q(0214),
+ q(0),
+ ],
+ q(karey) => [
+ q(3725),
+ q(0),
+ ],
+ q(kari) => [
+ q(3170),
+ q(0),
+ ],
+ q(karingani) => [
+ q(3299),
+ q(0),
+ ],
+ q(karipuna) => [
+ q(3298),
+ q(0),
+ ],
+ q(karipuna creole french) => [
+ q(3452),
+ q(0),
+ ],
+ q(kariri-xoco) => [
+ q(3769),
+ q(0),
+ ],
+ q(karitiana) => [
+ q(3611),
+ q(0),
+ ],
+ q(kariya) => [
+ q(3343),
+ q(0),
+ ],
+ q(kariyarra) => [
+ q(6971),
+ q(0),
+ ],
+ q(karkar-yuri) => [
+ q(7686),
+ q(0),
+ ],
+ q(karkin) => [
+ q(3553),
+ q(0),
+ ],
+ q(karko) => [
+ q(3394),
+ q(0),
+ ],
+ q(karnai) => [
+ q(1060),
+ q(0),
+ ],
+ q(karo (brazil)) => [
+ q(0879),
+ q(0),
+ ],
+ q(karo (ethiopia)) => [
+ q(3703),
+ q(0),
+ ],
+ q(karok) => [
+ q(3729),
+ q(0),
+ ],
+ q(karon) => [
+ q(3569),
+ q(0),
+ ],
+ q(karon dori) => [
+ q(3308),
+ q(0),
+ ],
+ q(karore) => [
+ q(7332),
+ q(0),
+ ],
+ q(kasanga) => [
+ q(1687),
+ q(0),
+ ],
+ q(kasem) => [
+ q(7430),
+ q(0),
+ ],
+ q(kashaya) => [
+ q(3376),
+ q(0),
+ ],
+ q(kashmiri) => [
+ q(0215),
+ q(0),
+ ],
+ q(kashubian) => [
+ q(0099),
+ q(0),
+ ],
+ q(kasiguranin) => [
+ q(3585),
+ q(0),
+ ],
+ q(kaska) => [
+ q(3405),
+ q(0),
+ ],
+ q(kaskean) => [
+ q(7859),
+ q(0),
+ ],
+ q(kasseng) => [
+ q(3289),
+ q(0),
+ ],
+ q(kasua) => [
+ q(3325),
+ q(0),
+ ],
+ q(kataang) => [
+ q(3290),
+ q(0),
+ ],
+ q(katabaga) => [
+ q(3614),
+ q(0),
+ ],
+ q(katawixi) => [
+ q(7243),
+ q(0),
+ ],
+ q(katbol) => [
+ q(6556),
+ q(0),
+ ],
+ q(katcha-kadugli-miri) => [
+ q(7442),
+ q(0),
+ ],
+ q(kate) => [
+ q(3437),
+ q(0),
+ ],
+ q(kathoriya tharu) => [
+ q(6529),
+ q(0),
+ ],
+ q(kathu) => [
+ q(7589),
+ q(0),
+ ],
+ q(kati) => [
+ q(1454),
+ q(0),
+ ],
+ q(katkari) => [
+ q(3281),
+ q(0),
+ ],
+ q(katla) => [
+ q(3204),
+ q(0),
+ ],
+ q(kato) => [
+ q(3620),
+ q(0),
+ ],
+ q(katso) => [
+ q(3150),
+ q(0),
+ ],
+ q(katua) => [
+ q(3598),
+ q(0),
+ ],
+ q(katukina) => [
+ q(3159),
+ q(0),
+ ],
+ q(kaulong) => [
+ q(5598),
+ q(0),
+ ],
+ q(kaur) => [
+ q(6974),
+ q(0),
+ ],
+ q(kaure) => [
+ q(1388),
+ q(0),
+ ],
+ q(kaurna) => [
+ q(7780),
+ q(0),
+ ],
+ q(kauwera) => [
+ q(7244),
+ q(0),
+ ],
+ q(kavalan) => [
+ q(1765),
+ q(0),
+ ],
+ q(kavet) => [
+ q(3567),
+ q(0),
+ ],
+ q(kawacha) => [
+ q(3188),
+ q(0),
+ ],
+ q(kawaiisu) => [
+ q(7246),
+ q(0),
+ ],
+ q(kawe) => [
+ q(3288),
+ q(0),
+ ],
+ q(kawi) => [
+ q(0217),
+ q(0),
+ ],
+ q(kaxarari) => [
+ q(3621),
+ q(0),
+ ],
+ q(kaxuiana) => [
+ q(3163),
+ q(0),
+ ],
+ q(kayabi) => [
+ q(3747),
+ q(0),
+ ],
+ q(kayagar) => [
+ q(3741),
+ q(0),
+ ],
+ q(kayan) => [
+ q(5379),
+ q(0),
+ ],
+ q(kayan mahakam) => [
+ q(7247),
+ q(0),
+ ],
+ q(kayan river kayan) => [
+ q(7322),
+ q(0),
+ ],
+ q(kayapa kallahan) => [
+ q(3155),
+ q(0),
+ ],
+ q(kayapo) => [
+ q(6795),
+ q(0),
+ ],
+ q(kayardild) => [
+ q(2682),
+ q(0),
+ ],
+ q(kayaw) => [
+ q(3656),
+ q(0),
+ ],
+ q(kayeli) => [
+ q(3758),
+ q(0),
+ ],
+ q(kayong) => [
+ q(3720),
+ q(0),
+ ],
+ q(kayort) => [
+ q(3743),
+ q(0),
+ ],
+ q(kaytetye) => [
+ q(2412),
+ q(0),
+ ],
+ q(kayupulau) => [
+ q(3767),
+ q(0),
+ ],
+ q(kazakh) => [
+ q(0218),
+ q(0),
+ ],
+ q(kazukuru) => [
+ q(3757),
+ q(0),
+ ],
+ q(ke'o) => [
+ q(7486),
+ q(0),
+ ],
+ q(keak) => [
+ q(3242),
+ q(0),
+ ],
+ q(keapara) => [
+ q(3332),
+ q(0),
+ ],
+ q(kedah malay) => [
+ q(4189),
+ q(0),
+ ],
+ q(kedang) => [
+ q(3595),
+ q(0),
+ ],
+ q(keder) => [
+ q(3233),
+ q(0),
+ ],
+ q(kehu) => [
+ q(3317),
+ q(0),
+ ],
+ q(kei) => [
+ q(3243),
+ q(0),
+ ],
+ q(keiga) => [
+ q(3237),
+ q(0),
+ ],
+ q(keijar) => [
+ q(3233),
+ q(0),
+ ],
+ q(kein) => [
+ q(1310),
+ q(0),
+ ],
+ q(keiyo) => [
+ q(2311),
+ q(0),
+ ],
+ q(kekchi) => [
+ q(3245),
+ q(0),
+ ],
+ q(kela (democratic republic of congo)) => [
+ q(3246),
+ q(0),
+ ],
+ q(kela (papua new guinea)) => [
+ q(3198),
+ q(0),
+ ],
+ q(kelabit) => [
+ q(3755),
+ q(0),
+ ],
+ q(kele) => [
+ q(3236),
+ q(0),
+ ],
+ q(kele (democratic republic of congo)) => [
+ q(3331),
+ q(0),
+ ],
+ q(kele (papua new guinea)) => [
+ q(5875),
+ q(0),
+ ],
+ q(kelengazxo bozo) => [
+ q(1638),
+ q(0),
+ ],
+ q(keley-i kallahan) => [
+ q(2901),
+ q(0),
+ ],
+ q(keliko) => [
+ q(3175),
+ q(0),
+ ],
+ q(kelo) => [
+ q(7279),
+ q(0),
+ ],
+ q(kelon) => [
+ q(3736),
+ q(0),
+ ],
+ q(kemak) => [
+ q(3247),
+ q(0),
+ ],
+ q(kembayan) => [
+ q(7280),
+ q(0),
+ ],
+ q(kemberano) => [
+ q(1630),
+ q(0),
+ ],
+ q(kembra) => [
+ q(7331),
+ q(0),
+ ],
+ q(kemedzung) => [
+ q(2089),
+ q(0),
+ ],
+ q(kemi sami) => [
+ q(6032),
+ q(0),
+ ],
+ q(kemiehua) => [
+ q(3270),
+ q(0),
+ ],
+ q(kemtuik) => [
+ q(3450),
+ q(0),
+ ],
+ q(kenaboi) => [
+ q(7253),
+ q(0),
+ ],
+ q(kenati) => [
+ q(2407),
+ q(0),
+ ],
+ q(kendayan) => [
+ q(3479),
+ q(0),
+ ],
+ q(kendeje) => [
+ q(3411),
+ q(0),
+ ],
+ q(kendem) => [
+ q(3657),
+ q(0),
+ ],
+ q(kenga) => [
+ q(3738),
+ q(0),
+ ],
+ q(keningau murut) => [
+ q(3704),
+ q(0),
+ ],
+ q(keninjal) => [
+ q(3467),
+ q(0),
+ ],
+ q(kensiu) => [
+ q(3474),
+ q(0),
+ ],
+ q(kenswei nsei) => [
+ q(4767),
+ q(0),
+ ],
+ q(kenyan sign language) => [
+ q(7318),
+ q(0),
+ ],
+ q(kenyang) => [
+ q(3248),
+ q(0),
+ ],
+ q(kenyi) => [
+ q(3920),
+ q(0),
+ ],
+ q(kenzi) => [
+ q(7382),
+ q(0),
+ ],
+ q(keoru-ahia) => [
+ q(7285),
+ q(0),
+ ],
+ q(kepkiriwat) => [
+ q(3514),
+ q(0),
+ ],
+ q(kepo') => [
+ q(3633),
+ q(0),
+ ],
+ q(kera) => [
+ q(3252),
+ q(0),
+ ],
+ q(kerak) => [
+ q(2736),
+ q(0),
+ ],
+ q(kereho) => [
+ q(7314),
+ q(0),
+ ],
+ q(kerek) => [
+ q(3560),
+ q(0),
+ ],
+ q(kerewe) => [
+ q(3238),
+ q(0),
+ ],
+ q(kerewo) => [
+ q(3721),
+ q(0),
+ ],
+ q(kerinci) => [
+ q(3662),
+ q(0),
+ ],
+ q(kesawai) => [
+ q(7283),
+ q(0),
+ ],
+ q(ket) => [
+ q(3254),
+ q(0),
+ ],
+ q(ketangalan) => [
+ q(3149),
+ q(0),
+ ],
+ q(kete) => [
+ q(3208),
+ q(0),
+ ],
+ q(ketengban) => [
+ q(7444),
+ q(0),
+ ],
+ q(ketum) => [
+ q(3617),
+ q(0),
+ ],
+ q(keyagana) => [
+ q(3728),
+ q(0),
+ ],
+ q(kgalagadi) => [
+ q(7330),
+ q(0),
+ ],
+ q(khakas) => [
+ q(3363),
+ q(0),
+ ],
+ q(khalaj) => [
+ q(3361),
+ q(0),
+ ],
+ q(khaling) => [
+ q(3423),
+ q(0),
+ ],
+ q(khamba) => [
+ q(3167),
+ q(0),
+ ],
+ q(khams tibetan) => [
+ q(3316),
+ q(0),
+ ],
+ q(khamti) => [
+ q(3326),
+ q(0),
+ ],
+ q(khamyang) => [
+ q(3592),
+ q(0),
+ ],
+ q(khana) => [
+ q(5188),
+ q(0),
+ ],
+ q(khandesi) => [
+ q(3321),
+ q(0),
+ ],
+ q(khang) => [
+ q(3368),
+ q(0),
+ ],
+ q(khanty) => [
+ q(3187),
+ q(0),
+ ],
+ q(khao) => [
+ q(7238),
+ q(0),
+ ],
+ q(kharam naga) => [
+ q(3283),
+ q(0),
+ ],
+ q(kharia) => [
+ q(3324),
+ q(0),
+ ],
+ q(kharia thar) => [
+ q(3596),
+ q(0),
+ ],
+ q(khasi) => [
+ q(0220),
+ q(0),
+ ],
+ q(khayo) => [
+ q(3926),
+ q(0),
+ ],
+ q(khazar) => [
+ q(7782),
+ q(0),
+ ],
+ q(khe) => [
+ q(3532),
+ q(0),
+ ],
+ q(khehek) => [
+ q(6553),
+ q(0),
+ ],
+ q(khengkha) => [
+ q(7315),
+ q(0),
+ ],
+ q(khetrani) => [
+ q(7296),
+ q(0),
+ ],
+ q(khezha naga) => [
+ q(4911),
+ q(0),
+ ],
+ q(khiamniungan naga) => [
+ q(3353),
+ q(0),
+ ],
+ q(khinalugh) => [
+ q(3365),
+ q(0),
+ ],
+ q(khirwar) => [
+ q(3694),
+ q(0),
+ ],
+ q(khisa) => [
+ q(3538),
+ q(0),
+ ],
+ q(khlor) => [
+ q(3945),
+ q(0),
+ ],
+ q(khlula) => [
+ q(7584),
+ q(0),
+ ],
+ q(khmu) => [
+ q(3362),
+ q(0),
+ ],
+ q(kho'ini) => [
+ q(7312),
+ q(0),
+ ],
+ q(khoibu naga) => [
+ q(4905),
+ q(0),
+ ],
+ q(khoisan languages) => [
+ q(0221),
+ q(0),
+ ],
+ q(kholok) => [
+ q(3600),
+ q(0),
+ ],
+ q(khonso) => [
+ q(3699),
+ q(0),
+ ],
+ q(khorasani turkish) => [
+ q(3456),
+ q(0),
+ ],
+ q(khorezmian) => [
+ q(7773),
+ q(0),
+ ],
+ q(khotanese) => [
+ q(0223),
+ q(0),
+ ],
+ q(khowar) => [
+ q(3329),
+ q(0),
+ ],
+ q(khua) => [
+ q(7300),
+ q(0),
+ ],
+ q(khuen) => [
+ q(3315),
+ q(0),
+ ],
+ q(khumi chin) => [
+ q(1801),
+ q(0),
+ ],
+ q(khun) => [
+ q(3387),
+ q(0),
+ ],
+ q(khunsari) => [
+ q(3273),
+ q(0),
+ ],
+ q(khvarshi) => [
+ q(3328),
+ q(0),
+ ],
+ q(kibet) => [
+ q(3337),
+ q(0),
+ ],
+ q(kibiri) => [
+ q(5572),
+ q(0),
+ ],
+ q(kickapoo) => [
+ q(3335),
+ q(0),
+ ],
+ q(kiembu) => [
+ q(2212),
+ q(0),
+ ],
+ q(kigiryama) => [
+ q(5136),
+ q(0),
+ ],
+ q(kikai) => [
+ q(3754),
+ q(0),
+ ],
+ q(kikuyu) => [
+ q(0224),
+ q(0),
+ ],
+ q(kildin sami) => [
+ q(6029),
+ q(0),
+ ],
+ q(kilivila) => [
+ q(3342),
+ q(0),
+ ],
+ q(kiliwa) => [
+ q(3407),
+ q(0),
+ ],
+ q(kilmeri) => [
+ q(3340),
+ q(0),
+ ],
+ q(kim) => [
+ q(3333),
+ q(0),
+ ],
+ q(kim mun) => [
+ q(4302),
+ q(0),
+ ],
+ q(kimaama) => [
+ q(3339),
+ q(0),
+ ],
+ q(kimaghima) => [
+ q(3339),
+ q(0),
+ ],
+ q(kimaragang) => [
+ q(3543),
+ q(0),
+ ],
+ q(kimbu) => [
+ q(3351),
+ q(0),
+ ],
+ q(kimbundu) => [
+ q(0227),
+ q(0),
+ ],
+ q(kimki) => [
+ q(5892),
+ q(0),
+ ],
+ q(kimre) => [
+ q(3541),
+ q(0),
+ ],
+ q(kinabalian) => [
+ q(1679),
+ q(0),
+ ],
+ q(kinalakna) => [
+ q(3201),
+ q(0),
+ ],
+ q(kinamiging manobo) => [
+ q(4341),
+ q(0),
+ ],
+ q(kinaray-a) => [
+ q(3559),
+ q(0),
+ ],
+ q(kinga) => [
+ q(7750),
+ q(0),
+ ],
+ q(kinnauri) => [
+ q(3271),
+ q(0),
+ ],
+ q(kintaq) => [
+ q(3472),
+ q(0),
+ ],
+ q(kinuku) => [
+ q(3383),
+ q(0),
+ ],
+ q(kinyarwanda) => [
+ q(0225),
+ q(0),
+ ],
+ q(kioko) => [
+ q(6835),
+ q(0),
+ ],
+ q(kiong) => [
+ q(3392),
+ q(0),
+ ],
+ q(kiorr) => [
+ q(7323),
+ q(0),
+ ],
+ q(kiowa) => [
+ q(3345),
+ q(0),
+ ],
+ q(kiowa apache) => [
+ q(0845),
+ q(0),
+ ],
+ q(kipfokomo) => [
+ q(5450),
+ q(0),
+ ],
+ q(kipsigis) => [
+ q(5963),
+ q(0),
+ ],
+ q(kiput) => [
+ q(3730),
+ q(0),
+ ],
+ q(kir-balar) => [
+ q(3397),
+ q(0),
+ ],
+ q(kirdki) => [
+ q(0486),
+ q(0),
+ ],
+ q(kire) => [
+ q(2463),
+ q(0),
+ ],
+ q(kirghiz) => [
+ q(0226),
+ q(0),
+ ],
+ q(kirike) => [
+ q(5214),
+ q(0),
+ ],
+ q(kirikiri) => [
+ q(3354),
+ q(0),
+ ],
+ q(kirmanjki) => [
+ q(0486),
+ q(0),
+ ],
+ q(kirmanjki (individual language)) => [
+ q(3350),
+ q(0),
+ ],
+ q(kirmanjki (macrolanguage)) => [
+ q(0486),
+ q(7),
+ ],
+ q(kirya-konzel) => [
+ q(2342),
+ q(0),
+ ],
+ q(kis) => [
+ q(3348),
+ q(0),
+ ],
+ q(kisa) => [
+ q(3928),
+ q(0),
+ ],
+ q(kisankasa) => [
+ q(3533),
+ q(0),
+ ],
+ q(kisar) => [
+ q(3360),
+ q(0),
+ ],
+ q(kisi) => [
+ q(3355),
+ q(0),
+ ],
+ q(kistane) => [
+ q(2611),
+ q(0),
+ ],
+ q(kiswahili) => [
+ q(6273),
+ q(0),
+ ],
+ q(kita maninkakan) => [
+ q(4613),
+ q(0),
+ ],
+ q(kitan) => [
+ q(7779),
+ q(0),
+ ],
+ q(kitharaka) => [
+ q(6472),
+ q(0),
+ ],
+ q(kitja) => [
+ q(2504),
+ q(0),
+ ],
+ q(kitsai) => [
+ q(3341),
+ q(0),
+ ],
+ q(kituba (congo)) => [
+ q(4340),
+ q(0),
+ ],
+ q(kituba (democratic republic of congo)) => [
+ q(3618),
+ q(0),
+ ],
+ q(kiunum) => [
+ q(7068),
+ q(0),
+ ],
+ q(kiwilwana) => [
+ q(4353),
+ q(0),
+ ],
+ q(klamath-modoc) => [
+ q(3406),
+ q(0),
+ ],
+ q(klao) => [
+ q(3426),
+ q(0),
+ ],
+ q(klias river kadazan) => [
+ q(3545),
+ q(0),
+ ],
+ q(klingon) => [
+ q(0432),
+ q(0),
+ ],
+ q(knaanic) => [
+ q(1932),
+ q(0),
+ ],
+ q(ko) => [
+ q(2378),
+ q(0),
+ ],
+ q(koalib) => [
+ q(3334),
+ q(0),
+ ],
+ q(koasati) => [
+ q(1764),
+ q(0),
+ ],
+ q(koba) => [
+ q(3505),
+ q(0),
+ ],
+ q(kobiana) => [
+ q(3196),
+ q(0),
+ ],
+ q(kobol) => [
+ q(3306),
+ q(0),
+ ],
+ q(kobon) => [
+ q(3522),
+ q(0),
+ ],
+ q(koch) => [
+ q(3227),
+ q(0),
+ ],
+ q(kochila tharu) => [
+ q(6477),
+ q(0),
+ ],
+ q(koda) => [
+ q(1706),
+ q(0),
+ ],
+ q(kodaku) => [
+ q(3597),
+ q(0),
+ ],
+ q(kodava) => [
+ q(3261),
+ q(0),
+ ],
+ q(kodeoha) => [
+ q(6977),
+ q(0),
+ ],
+ q(kodi) => [
+ q(3484),
+ q(0),
+ ],
+ q(kodia) => [
+ q(3686),
+ q(0),
+ ],
+ q(koenoem) => [
+ q(3205),
+ q(0),
+ ],
+ q(kofa) => [
+ q(3586),
+ q(0),
+ ],
+ q(kofei) => [
+ q(3509),
+ q(0),
+ ],
+ q(kofyar) => [
+ q(3682),
+ q(0),
+ ],
+ q(kogi) => [
+ q(3487),
+ q(0),
+ ],
+ q(koguryo) => [
+ q(7772),
+ q(0),
+ ],
+ q(kohin) => [
+ q(3403),
+ q(0),
+ ],
+ q(kohistani shina) => [
+ q(5469),
+ q(0),
+ ],
+ q(koho) => [
+ q(3513),
+ q(0),
+ ],
+ q(kohumono) => [
+ q(1083),
+ q(0),
+ ],
+ q(koi) => [
+ q(3399),
+ q(0),
+ ],
+ q(koibal) => [
+ q(7770),
+ q(0),
+ ],
+ q(koireng) => [
+ q(4907),
+ q(0),
+ ],
+ q(koitabu) => [
+ q(3534),
+ q(0),
+ ],
+ q(koiwat) => [
+ q(3715),
+ q(0),
+ ],
+ q(kok borok) => [
+ q(6670),
+ q(0),
+ ],
+ q(kok-nar) => [
+ q(2528),
+ q(0),
+ ],
+ q(kokata) => [
+ q(3601),
+ q(0),
+ ],
+ q(koke) => [
+ q(3496),
+ q(0),
+ ],
+ q(koki naga) => [
+ q(5124),
+ q(0),
+ ],
+ q(koko babangk) => [
+ q(5205),
+ q(0),
+ ],
+ q(kokoda) => [
+ q(7384),
+ q(0),
+ ],
+ q(kokola) => [
+ q(3760),
+ q(0),
+ ],
+ q(kokota) => [
+ q(3390),
+ q(0),
+ ],
+ q(kol) => [
+ q(2231),
+ q(0),
+ ],
+ q(kol (bangladesh)) => [
+ q(2231),
+ q(0),
+ ],
+ q(kol (cameroon)) => [
+ q(1228),
+ q(0),
+ ],
+ q(kol (papua new guinea)) => [
+ q(3491),
+ q(0),
+ ],
+ q(kola) => [
+ q(3666),
+ q(0),
+ ],
+ q(kolbila) => [
+ q(3408),
+ q(0),
+ ],
+ q(kolibugan subanon) => [
+ q(6055),
+ q(0),
+ ],
+ q(kolsch) => [
+ q(3579),
+ q(0),
+ ],
+ q(koluwawa) => [
+ q(3429),
+ q(0),
+ ],
+ q(kom (cameroon)) => [
+ q(1265),
+ q(0),
+ ],
+ q(kom (india)) => [
+ q(3443),
+ q(0),
+ ],
+ q(koma) => [
+ q(3455),
+ q(0),
+ ],
+ q(komba) => [
+ q(3506),
+ q(0),
+ ],
+ q(kombai) => [
+ q(6804),
+ q(0),
+ ],
+ q(kombio) => [
+ q(7251),
+ q(0),
+ ],
+ q(komering) => [
+ q(3291),
+ q(0),
+ ],
+ q(komi) => [
+ q(0229),
+ q(0),
+ ],
+ q(komi-permyak) => [
+ q(3489),
+ q(0),
+ ],
+ q(komi-zyrian) => [
+ q(3521),
+ q(0),
+ ],
+ q(kominimung) => [
+ q(7386),
+ q(0),
+ ],
+ q(komo (democratic republic of congo)) => [
+ q(3453),
+ q(0),
+ ],
+ q(komo (sudan)) => [
+ q(7388),
+ q(0),
+ ],
+ q(komodo) => [
+ q(3652),
+ q(0),
+ ],
+ q(kompane) => [
+ q(3660),
+ q(0),
+ ],
+ q(komyandaret) => [
+ q(3768),
+ q(0),
+ ],
+ q(kon keu) => [
+ q(3393),
+ q(0),
+ ],
+ q(konabere) => [
+ q(1053),
+ q(0),
+ ],
+ q(konai) => [
+ q(3718),
+ q(0),
+ ],
+ q(konda) => [
+ q(3460),
+ q(0),
+ ],
+ q(konda-dora) => [
+ q(3263),
+ q(0),
+ ],
+ q(koneraw) => [
+ q(3231),
+ q(0),
+ ],
+ q(kongo) => [
+ q(0230),
+ q(0),
+ ],
+ q(konkani) => [
+ q(0228),
+ q(0),
+ ],
+ q(konkani (individual language)) => [
+ q(3469),
+ q(0),
+ ],
+ q(konkani (macrolanguage)) => [
+ q(0228),
+ q(1),
+ ],
+ q(konkomba) => [
+ q(7389),
+ q(0),
+ ],
+ q(konni) => [
+ q(3432),
+ q(0),
+ ],
+ q(kono (guinea)) => [
+ q(3476),
+ q(0),
+ ],
+ q(kono (nigeria)) => [
+ q(3416),
+ q(0),
+ ],
+ q(kono (sierra leone)) => [
+ q(3470),
+ q(0),
+ ],
+ q(konomala) => [
+ q(3482),
+ q(0),
+ ],
+ q(konongo) => [
+ q(3212),
+ q(0),
+ ],
+ q(konso) => [
+ q(3699),
+ q(0),
+ ],
+ q(konyak naga) => [
+ q(4725),
+ q(0),
+ ],
+ q(konyanka maninka) => [
+ q(4338),
+ q(0),
+ ],
+ q(konzo) => [
+ q(3492),
+ q(0),
+ ],
+ q(koongo) => [
+ q(3463),
+ q(0),
+ ],
+ q(koonzime) => [
+ q(5320),
+ q(0),
+ ],
+ q(koorete) => [
+ q(3550),
+ q(0),
+ ],
+ q(kopar) => [
+ q(7391),
+ q(0),
+ ],
+ q(kopkaka) => [
+ q(5263),
+ q(0),
+ ],
+ q(korafe-yegha) => [
+ q(3517),
+ q(0),
+ ],
+ q(korak) => [
+ q(3501),
+ q(0),
+ ],
+ q(korana) => [
+ q(3551),
+ q(0),
+ ],
+ q(korandje) => [
+ q(3211),
+ q(0),
+ ],
+ q(kordofanian languages) => [
+ q(0515),
+ q(0),
+ ],
+ q(korean) => [
+ q(0231),
+ q(0),
+ ],
+ q(korean sign language) => [
+ q(3655),
+ q(0),
+ ],
+ q(koreguaje) => [
+ q(1813),
+ q(0),
+ ],
+ q(koresh-e rostam) => [
+ q(5206),
+ q(0),
+ ],
+ q(korku) => [
+ q(3277),
+ q(0),
+ ],
+ q(korlai creole portuguese) => [
+ q(6978),
+ q(0),
+ ],
+ q(koro (cote d'ivoire)) => [
+ q(3275),
+ q(0),
+ ],
+ q(koro (india)) => [
+ q(3090),
+ q(0),
+ ],
+ q(koro (papua new guinea)) => [
+ q(3713),
+ q(0),
+ ],
+ q(koro (vanuatu)) => [
+ q(3556),
+ q(0),
+ ],
+ q(koro wachi) => [
+ q(1419),
+ q(0),
+ ],
+ q(koromfe) => [
+ q(3286),
+ q(0),
+ ],
+ q(koromira) => [
+ q(3535),
+ q(0),
+ ],
+ q(koronadal blaan) => [
+ q(1390),
+ q(0),
+ ],
+ q(koroni) => [
+ q(7325),
+ q(0),
+ ],
+ q(korop) => [
+ q(3563),
+ q(0),
+ ],
+ q(koropo) => [
+ q(7487),
+ q(0),
+ ],
+ q(koroshi) => [
+ q(3609),
+ q(0),
+ ],
+ q(korowai) => [
+ q(3314),
+ q(0),
+ ],
+ q(korra koraga) => [
+ q(3264),
+ q(0),
+ ],
+ q(korubo) => [
+ q(7392),
+ q(0),
+ ],
+ q(korupun-sela) => [
+ q(3516),
+ q(0),
+ ],
+ q(korur) => [
+ q(0949),
+ q(0),
+ ],
+ q(korwa) => [
+ q(3276),
+ q(0),
+ ],
+ q(koryak) => [
+ q(3524),
+ q(0),
+ ],
+ q(kosadle) => [
+ q(3347),
+ q(0),
+ ],
+ q(kosare) => [
+ q(3347),
+ q(0),
+ ],
+ q(kosarek yale) => [
+ q(3391),
+ q(0),
+ ],
+ q(kosena) => [
+ q(3752),
+ q(0),
+ ],
+ q(koshin) => [
+ q(3336),
+ q(0),
+ ],
+ q(kosli) => [
+ q(6166),
+ q(0),
+ ],
+ q(kosraean) => [
+ q(0232),
+ q(0),
+ ],
+ q(kota (gabon)) => [
+ q(3494),
+ q(0),
+ ],
+ q(kota (india)) => [
+ q(3265),
+ q(0),
+ ],
+ q(kota bangun kutai malay) => [
+ q(4464),
+ q(0),
+ ],
+ q(kota marudu talantang) => [
+ q(2605),
+ q(0),
+ ],
+ q(kota marudu tinagas) => [
+ q(3615),
+ q(0),
+ ],
+ q(kotafon gbe) => [
+ q(3536),
+ q(0),
+ ],
+ q(kotava) => [
+ q(0960),
+ q(0),
+ ],
+ q(koti) => [
+ q(2233),
+ q(0),
+ ],
+ q(kott) => [
+ q(7776),
+ q(0),
+ ],
+ q(kouya) => [
+ q(3727),
+ q(0),
+ ],
+ q(kovai) => [
+ q(3527),
+ q(0),
+ ],
+ q(kove) => [
+ q(3647),
+ q(0),
+ ],
+ q(kowaki) => [
+ q(7393),
+ q(0),
+ ],
+ q(kowiai) => [
+ q(3678),
+ q(0),
+ ],
+ q(koy sanjaq surat) => [
+ q(3529),
+ q(0),
+ ],
+ q(koya) => [
+ q(3266),
+ q(0),
+ ],
+ q(koyaga) => [
+ q(3287),
+ q(0),
+ ],
+ q(koyo) => [
+ q(3488),
+ q(0),
+ ],
+ q(koyra chiini songhay) => [
+ q(3323),
+ q(0),
+ ],
+ q(koyraboro senni songhai) => [
+ q(5950),
+ q(0),
+ ],
+ q(koyukon) => [
+ q(3500),
+ q(0),
+ ],
+ q(kpagua) => [
+ q(3641),
+ q(0),
+ ],
+ q(kpala) => [
+ q(3512),
+ q(0),
+ ],
+ q(kpan) => [
+ q(3511),
+ q(0),
+ ],
+ q(kpasam) => [
+ q(5347),
+ q(0),
+ ],
+ q(kpati) => [
+ q(3483),
+ q(0),
+ ],
+ q(kpatili) => [
+ q(3734),
+ q(0),
+ ],
+ q(kpelle) => [
+ q(0233),
+ q(0),
+ ],
+ q(kpessi) => [
+ q(3240),
+ q(0),
+ ],
+ q(kplang) => [
+ q(3508),
+ q(0),
+ ],
+ q(krache) => [
+ q(3726),
+ q(0),
+ ],
+ q(kraho) => [
+ q(7411),
+ q(0),
+ ],
+ q(kraol) => [
+ q(5772),
+ q(0),
+ ],
+ q(krenak) => [
+ q(3542),
+ q(0),
+ ],
+ q(krevinian) => [
+ q(7781),
+ q(0),
+ ],
+ q(kreye) => [
+ q(7413),
+ q(0),
+ ],
+ q(krikati-timbira) => [
+ q(7414),
+ q(0),
+ ],
+ q(krim) => [
+ q(3561),
+ q(0),
+ ],
+ q(krio) => [
+ q(3558),
+ q(0),
+ ],
+ q(kriol) => [
+ q(5818),
+ q(0),
+ ],
+ q(krisa) => [
+ q(3580),
+ q(0),
+ ],
+ q(krobu) => [
+ q(3698),
+ q(0),
+ ],
+ q(krongo) => [
+ q(3300),
+ q(0),
+ ],
+ q(kru languages) => [
+ q(0236),
+ q(0),
+ ],
+ q(kru'ng 2) => [
+ q(3564),
+ q(0),
+ ],
+ q(krymchak) => [
+ q(3049),
+ q(0),
+ ],
+ q(kryts) => [
+ q(3570),
+ q(0),
+ ],
+ q(kua) => [
+ q(6809),
+ q(0),
+ ],
+ q(kua-nsi) => [
+ q(7586),
+ q(0),
+ ],
+ q(kuamasi) => [
+ q(7590),
+ q(0),
+ ],
+ q(kuan) => [
+ q(6820),
+ q(0),
+ ],
+ q(kuanhua) => [
+ q(7376),
+ q(0),
+ ],
+ q(kuanua) => [
+ q(3575),
+ q(0),
+ ],
+ q(kuanyama) => [
+ q(0238),
+ q(0),
+ ],
+ q(kube) => [
+ q(3292),
+ q(0),
+ ],
+ q(kubi) => [
+ q(3486),
+ q(0),
+ ],
+ q(kubo) => [
+ q(3088),
+ q(0),
+ ],
+ q(kubu) => [
+ q(3646),
+ q(0),
+ ],
+ q(kucong) => [
+ q(3918),
+ q(0),
+ ],
+ q(kudiya) => [
+ q(3267),
+ q(0),
+ ],
+ q(kudmali) => [
+ q(3744),
+ q(0),
+ ],
+ q(kudu-camo) => [
+ q(3497),
+ q(0),
+ ],
+ q(kugama) => [
+ q(3498),
+ q(0),
+ ],
+ q(kugbo) => [
+ q(3253),
+ q(0),
+ ],
+ q(kui (india)) => [
+ q(3716),
+ q(0),
+ ],
+ q(kui (indonesia)) => [
+ q(3648),
+ q(0),
+ ],
+ q(kuijau) => [
+ q(2074),
+ q(0),
+ ],
+ q(kuikuro-kalapalo) => [
+ q(3631),
+ q(0),
+ ],
+ q(kujarge) => [
+ q(6973),
+ q(0),
+ ],
+ q(kuk) => [
+ q(3274),
+ q(0),
+ ],
+ q(kukatja) => [
+ q(3642),
+ q(0),
+ ],
+ q(kuke) => [
+ q(2503),
+ q(0),
+ ],
+ q(kukele) => [
+ q(3260),
+ q(0),
+ ],
+ q(kukna) => [
+ q(3258),
+ q(0),
+ ],
+ q(kuku-mangk) => [
+ q(7363),
+ q(0),
+ ],
+ q(kuku-mu'inh) => [
+ q(7362),
+ q(0),
+ ],
+ q(kuku-muminh) => [
+ q(7355),
+ q(0),
+ ],
+ q(kuku-ugbanh) => [
+ q(6837),
+ q(0),
+ ],
+ q(kuku-uwanh) => [
+ q(6931),
+ q(0),
+ ],
+ q(kuku-yalanji) => [
+ q(2658),
+ q(0),
+ ],
+ q(kula) => [
+ q(6628),
+ q(0),
+ ],
+ q(kulere) => [
+ q(3634),
+ q(0),
+ ],
+ q(kulfa) => [
+ q(3705),
+ q(0),
+ ],
+ q(kulina) => [
+ q(1909),
+ q(0),
+ ],
+ q(kulina pano) => [
+ q(7399),
+ q(0),
+ ],
+ q(kulisusu) => [
+ q(6975),
+ q(0),
+ ],
+ q(kullu pahari) => [
+ q(3284),
+ q(0),
+ ],
+ q(kulon-pazeh) => [
+ q(6925),
+ q(0),
+ ],
+ q(kulung (nepal)) => [
+ q(3410),
+ q(0),
+ ],
+ q(kulung (nigeria)) => [
+ q(1059),
+ q(0),
+ ],
+ q(kumalu) => [
+ q(3583),
+ q(0),
+ ],
+ q(kumam) => [
+ q(3220),
+ q(0),
+ ],
+ q(kuman) => [
+ q(3627),
+ q(0),
+ ],
+ q(kuman (russia)) => [
+ q(5692),
+ q(0),
+ ],
+ q(kumaoni) => [
+ q(3285),
+ q(0),
+ ],
+ q(kumarbhag paharia) => [
+ q(3440),
+ q(0),
+ ],
+ q(kumba) => [
+ q(3584),
+ q(0),
+ ],
+ q(kumbainggar) => [
+ q(3304),
+ q(0),
+ ],
+ q(kumbaran) => [
+ q(7109),
+ q(0),
+ ],
+ q(kumbewaha) => [
+ q(7327),
+ q(0),
+ ],
+ q(kumhali) => [
+ q(3552),
+ q(0),
+ ],
+ q(kumiai) => [
+ q(2039),
+ q(0),
+ ],
+ q(kumukio) => [
+ q(3636),
+ q(0),
+ ],
+ q(kumyk) => [
+ q(0239),
+ q(0),
+ ],
+ q(kumzari) => [
+ q(7878),
+ q(0),
+ ],
+ q(kunama) => [
+ q(3635),
+ q(0),
+ ],
+ q(kunbarlang) => [
+ q(7117),
+ q(0),
+ ],
+ q(kunda) => [
+ q(3225),
+ q(0),
+ ],
+ q(kundal shahi) => [
+ q(5985),
+ q(0),
+ ],
+ q(kunduvadi) => [
+ q(7112),
+ q(0),
+ ],
+ q(kung) => [
+ q(3272),
+ q(0),
+ ],
+ q(kung-ekoka) => [
+ q(3478),
+ q(0),
+ ],
+ q(kungarakany) => [
+ q(2485),
+ q(0),
+ ],
+ q(kunggara) => [
+ q(3663),
+ q(0),
+ ],
+ q(kunggari) => [
+ q(3297),
+ q(0),
+ ],
+ q(kuni) => [
+ q(3576),
+ q(0),
+ ],
+ q(kuni-boazi) => [
+ q(3651),
+ q(0),
+ ],
+ q(kunigami) => [
+ q(7464),
+ q(0),
+ ],
+ q(kunimaipa) => [
+ q(3637),
+ q(0),
+ ],
+ q(kunja) => [
+ q(5392),
+ q(0),
+ ],
+ q(kunjen) => [
+ q(3369),
+ q(0),
+ ],
+ q(kunyi) => [
+ q(4901),
+ q(0),
+ ],
+ q(kunza) => [
+ q(3644),
+ q(0),
+ ],
+ q(kuo) => [
+ q(7468),
+ q(0),
+ ],
+ q(kuot) => [
+ q(3612),
+ q(0),
+ ],
+ q(kupa) => [
+ q(3629),
+ q(0),
+ ],
+ q(kupang malay) => [
+ q(4331),
+ q(0),
+ ],
+ q(kupia) => [
+ q(3259),
+ q(0),
+ ],
+ q(kupsabiny) => [
+ q(3525),
+ q(0),
+ ],
+ q(kur) => [
+ q(3640),
+ q(0),
+ ],
+ q(kura ede nago) => [
+ q(5025),
+ q(0),
+ ],
+ q(kurama) => [
+ q(3557),
+ q(0),
+ ],
+ q(kuranko) => [
+ q(3466),
+ q(0),
+ ],
+ q(kurdish) => [
+ q(0240),
+ q(0),
+ ],
+ q(kuri) => [
+ q(4732),
+ q(0),
+ ],
+ q(kuria) => [
+ q(3632),
+ q(0),
+ ],
+ q(kurichiya) => [
+ q(3268),
+ q(0),
+ ],
+ q(kurmukar) => [
+ q(3282),
+ q(0),
+ ],
+ q(kurrama) => [
+ q(6980),
+ q(0),
+ ],
+ q(kurti) => [
+ q(3610),
+ q(0),
+ ],
+ q(kurtokha) => [
+ q(7334),
+ q(0),
+ ],
+ q(kuruaya) => [
+ q(3739),
+ q(0),
+ ],
+ q(kurudu) => [
+ q(3373),
+ q(0),
+ ],
+ q(kurukh) => [
+ q(0237),
+ q(0),
+ ],
+ q(kusaal) => [
+ q(3638),
+ q(0),
+ ],
+ q(kusaghe) => [
+ q(3578),
+ q(0),
+ ],
+ q(kushi) => [
+ q(3630),
+ q(0),
+ ],
+ q(kusu) => [
+ q(3593),
+ q(0),
+ ],
+ q(kusunda) => [
+ q(3293),
+ q(0),
+ ],
+ q(kutang ghale) => [
+ q(2503),
+ q(0),
+ ],
+ q(kutenai) => [
+ q(0241),
+ q(0),
+ ],
+ q(kutep) => [
+ q(3624),
+ q(0),
+ ],
+ q(kuthant) => [
+ q(7471),
+ q(0),
+ ],
+ q(kutong) => [
+ q(6054),
+ q(0),
+ ],
+ q(kutto) => [
+ q(3502),
+ q(0),
+ ],
+ q(kutu) => [
+ q(3214),
+ q(0),
+ ],
+ q(kuturmi) => [
+ q(3318),
+ q(0),
+ ],
+ q(kuuk-yak) => [
+ q(6856),
+ q(0),
+ ],
+ q(kuuku-ya'u) => [
+ q(3643),
+ q(0),
+ ],
+ q(kuvi) => [
+ q(3717),
+ q(0),
+ ],
+ q(kuwaa) => [
+ q(1285),
+ q(0),
+ ],
+ q(kuwaataay) => [
+ q(1927),
+ q(0),
+ ],
+ q(kuy) => [
+ q(3229),
+ q(0),
+ ],
+ q(kven finnish) => [
+ q(2343),
+ q(0),
+ ],
+ q(kw'adza) => [
+ q(7108),
+ q(0),
+ ],
+ q(kwa) => [
+ q(3672),
+ q(0),
+ ],
+ q(kwa') => [
+ q(1267),
+ q(0),
+ ],
+ q(kwaami) => [
+ q(3588),
+ q(0),
+ ],
+ q(kwadi) => [
+ q(3696),
+ q(0),
+ ],
+ q(kwaio) => [
+ q(3674),
+ q(0),
+ ],
+ q(kwaja) => [
+ q(3234),
+ q(0),
+ ],
+ q(kwak) => [
+ q(3687),
+ q(0),
+ ],
+ q(kwakiutl) => [
+ q(3681),
+ q(0),
+ ],
+ q(kwakum) => [
+ q(3691),
+ q(0),
+ ],
+ q(kwalhioqua-tlatskanai) => [
+ q(5694),
+ q(0),
+ ],
+ q(kwama) => [
+ q(3447),
+ q(0),
+ ],
+ q(kwambi) => [
+ q(3683),
+ q(0),
+ ],
+ q(kwamera) => [
+ q(6587),
+ q(0),
+ ],
+ q(kwami) => [
+ q(3603),
+ q(0),
+ ],
+ q(kwamtim one) => [
+ q(5209),
+ q(0),
+ ],
+ q(kwang) => [
+ q(3653),
+ q(0),
+ ],
+ q(kwanga) => [
+ q(3680),
+ q(0),
+ ],
+ q(kwangali) => [
+ q(3684),
+ q(0),
+ ],
+ q(kwanja) => [
+ q(3471),
+ q(0),
+ ],
+ q(kwanyama) => [
+ q(0238),
+ q(0),
+ ],
+ q(kwara'ae) => [
+ q(3676),
+ q(0),
+ ],
+ q(kwasio) => [
+ q(4949),
+ q(0),
+ ],
+ q(kwaya) => [
+ q(3722),
+ q(0),
+ ],
+ q(kwaza) => [
+ q(7478),
+ q(0),
+ ],
+ q(kwegu) => [
+ q(7481),
+ q(0),
+ ],
+ q(kwer) => [
+ q(3688),
+ q(0),
+ ],
+ q(kwerba) => [
+ q(3675),
+ q(0),
+ ],
+ q(kwerba mamberamo) => [
+ q(7484),
+ q(0),
+ ],
+ q(kwere) => [
+ q(1925),
+ q(0),
+ ],
+ q(kwerisa) => [
+ q(3381),
+ q(0),
+ ],
+ q(kwese) => [
+ q(3689),
+ q(0),
+ ],
+ q(kwesten) => [
+ q(3690),
+ q(0),
+ ],
+ q(kwini) => [
+ q(2677),
+ q(0),
+ ],
+ q(kwinsu) => [
+ q(3625),
+ q(0),
+ ],
+ q(kwinti) => [
+ q(3693),
+ q(0),
+ ],
+ q(kwoma) => [
+ q(3445),
+ q(0),
+ ],
+ q(kwomtari) => [
+ q(3685),
+ q(0),
+ ],
+ q(kxoe) => [
+ q(7472),
+ q(0),
+ ],
+ q(kyak) => [
+ q(1255),
+ q(0),
+ ],
+ q(kyaka) => [
+ q(3724),
+ q(0),
+ ],
+ q(kyenele) => [
+ q(3537),
+ q(0),
+ ],
+ q(kyenga) => [
+ q(6799),
+ q(0),
+ ],
+ q(kyerung) => [
+ q(3310),
+ q(0),
+ ],
+ q(kyrgyz) => [
+ q(0226),
+ q(0),
+ ],
+ q(la'bi) => [
+ q(3799),
+ q(0),
+ ],
+ q(laa laa bwamu) => [
+ q(1551),
+ q(0),
+ ],
+ q(laadan) => [
+ q(3834),
+ q(0),
+ ],
+ q(laal) => [
+ q(2454),
+ q(0),
+ ],
+ q(laalaa) => [
+ q(1644),
+ q(0),
+ ],
+ q(laari) => [
+ q(3829),
+ q(0),
+ ],
+ q(laba) => [
+ q(3788),
+ q(0),
+ ],
+ q(label) => [
+ q(3794),
+ q(0),
+ ],
+ q(labir) => [
+ q(3091),
+ q(0),
+ ],
+ q(labo) => [
+ q(4611),
+ q(0),
+ ],
+ q(labo phowa) => [
+ q(7647),
+ q(0),
+ ],
+ q(labu) => [
+ q(3810),
+ q(0),
+ ],
+ q(labuk-kinabatangan kadazan) => [
+ q(2153),
+ q(0),
+ ],
+ q(lacandon) => [
+ q(3775),
+ q(0),
+ ],
+ q(lachi) => [
+ q(3809),
+ q(0),
+ ],
+ q(lachiguiri zapotec) => [
+ q(7825),
+ q(0),
+ ],
+ q(lachixio zapotec) => [
+ q(7836),
+ q(0),
+ ],
+ q(ladakhi) => [
+ q(3800),
+ q(0),
+ ],
+ q(ladin) => [
+ q(3934),
+ q(0),
+ ],
+ q(ladino) => [
+ q(0242),
+ q(0),
+ ],
+ q(ladji ladji) => [
+ q(3940),
+ q(0),
+ ],
+ q(laeko-libuat) => [
+ q(3924),
+ q(0),
+ ],
+ q(lafofa) => [
+ q(3777),
+ q(0),
+ ],
+ q(laghu) => [
+ q(3866),
+ q(0),
+ ],
+ q(laghuu) => [
+ q(3868),
+ q(0),
+ ],
+ q(lagwan) => [
+ q(3495),
+ q(0),
+ ],
+ q(laha (indonesia)) => [
+ q(3880),
+ q(0),
+ ],
+ q(laha (viet nam)) => [
+ q(3879),
+ q(0),
+ ],
+ q(lahanan) => [
+ q(3884),
+ q(0),
+ ],
+ q(lahnda) => [
+ q(0243),
+ q(0),
+ ],
+ q(lahta) => [
+ q(3664),
+ q(0),
+ ],
+ q(lahta karen) => [
+ q(3664),
+ q(0),
+ ],
+ q(lahu) => [
+ q(3888),
+ q(0),
+ ],
+ q(lahu shi) => [
+ q(3881),
+ q(0),
+ ],
+ q(lahul lohar) => [
+ q(3882),
+ q(0),
+ ],
+ q(laimbue) => [
+ q(3972),
+ q(0),
+ ],
+ q(laitu chin) => [
+ q(1775),
+ q(0),
+ ],
+ q(laiyolo) => [
+ q(3913),
+ q(0),
+ ],
+ q(lak) => [
+ q(3796),
+ q(0),
+ ],
+ q(laka (chad)) => [
+ q(3784),
+ q(0),
+ ],
+ q(laka (nigeria)) => [
+ q(3781),
+ q(0),
+ ],
+ q(lakalei) => [
+ q(3916),
+ q(0),
+ ],
+ q(lake miwok) => [
+ q(3971),
+ q(0),
+ ],
+ q(lakha) => [
+ q(3921),
+ q(0),
+ ],
+ q(laki) => [
+ q(3922),
+ q(0),
+ ],
+ q(lakkia) => [
+ q(3795),
+ q(0),
+ ],
+ q(lakon) => [
+ q(3925),
+ q(0),
+ ],
+ q(lakonde) => [
+ q(3919),
+ q(0),
+ ],
+ q(lakota) => [
+ q(3929),
+ q(0),
+ ],
+ q(lakota dida) => [
+ q(2035),
+ q(0),
+ ],
+ q(lala) => [
+ q(5043),
+ q(0),
+ ],
+ q(lala-bisa) => [
+ q(3839),
+ q(0),
+ ],
+ q(lala-roba) => [
+ q(3931),
+ q(0),
+ ],
+ q(lalana chinantec) => [
+ q(1802),
+ q(0),
+ ],
+ q(lalia) => [
+ q(3782),
+ q(0),
+ ],
+ q(lama (myanmar)) => [
+ q(3791),
+ q(0),
+ ],
+ q(lama (togo)) => [
+ q(3787),
+ q(0),
+ ],
+ q(lamaholot) => [
+ q(6078),
+ q(0),
+ ],
+ q(lamalera) => [
+ q(3968),
+ q(0),
+ ],
+ q(lamam) => [
+ q(3963),
+ q(0),
+ ],
+ q(lamang) => [
+ q(2738),
+ q(0),
+ ],
+ q(lamatuka) => [
+ q(3967),
+ q(0),
+ ],
+ q(lamba) => [
+ q(0244),
+ q(0),
+ ],
+ q(lambadi) => [
+ q(3964),
+ q(0),
+ ],
+ q(lambayeque quechua) => [
+ q(5657),
+ q(0),
+ ],
+ q(lambichhong) => [
+ q(3958),
+ q(0),
+ ],
+ q(lamboya) => [
+ q(3973),
+ q(0),
+ ],
+ q(lambya) => [
+ q(3779),
+ q(0),
+ ],
+ q(lame) => [
+ q(1303),
+ q(0),
+ ],
+ q(lamenu) => [
+ q(3969),
+ q(0),
+ ],
+ q(lamet) => [
+ q(3804),
+ q(0),
+ ],
+ q(lamja-dengsa-tola) => [
+ q(3828),
+ q(0),
+ ],
+ q(lamkang) => [
+ q(3961),
+ q(0),
+ ],
+ q(lamma) => [
+ q(3859),
+ q(0),
+ ],
+ q(lamnso') => [
+ q(3986),
+ q(0),
+ ],
+ q(lamogai) => [
+ q(3957),
+ q(0),
+ ],
+ q(lampung api) => [
+ q(3915),
+ q(0),
+ ],
+ q(lampung nyo) => [
+ q(0570),
+ q(0),
+ ],
+ q(lamu) => [
+ q(3938),
+ q(0),
+ ],
+ q(lamu-lamu) => [
+ q(3814),
+ q(0),
+ ],
+ q(lanas lobu) => [
+ q(5845),
+ q(0),
+ ],
+ q(land dayak languages) => [
+ q(0105),
+ q(0),
+ ],
+ q(landoma) => [
+ q(3833),
+ q(0),
+ ],
+ q(lang'e) => [
+ q(7625),
+ q(0),
+ ],
+ q(langam) => [
+ q(3983),
+ q(0),
+ ],
+ q(langbashe) => [
+ q(3975),
+ q(0),
+ ],
+ q(langi) => [
+ q(3778),
+ q(0),
+ ],
+ q(langnian buyang) => [
+ q(7599),
+ q(0),
+ ],
+ q(lango (sudan)) => [
+ q(3985),
+ q(0),
+ ],
+ q(lango (uganda)) => [
+ q(3780),
+ q(0),
+ ],
+ q(langobardic) => [
+ q(3978),
+ q(0),
+ ],
+ q(langue des signes de belgique francophone) => [
+ q(5957),
+ q(0),
+ ],
+ q(lanoh) => [
+ q(3979),
+ q(0),
+ ],
+ q(lao) => [
+ q(0245),
+ q(0),
+ ],
+ q(laomian) => [
+ q(4078),
+ q(0),
+ ],
+ q(laopang) => [
+ q(3798),
+ q(0),
+ ],
+ q(laos sign language) => [
+ q(4039),
+ q(0),
+ ],
+ q(lapaguia-guivini zapotec) => [
+ q(7866),
+ q(0),
+ ],
+ q(laragia) => [
+ q(4020),
+ q(0),
+ ],
+ q(larantuka malay) => [
+ q(4028),
+ q(0),
+ ],
+ q(lardil) => [
+ q(3815),
+ q(0),
+ ],
+ q(larevat) => [
+ q(4029),
+ q(0),
+ ],
+ q(large flowery miao) => [
+ q(2765),
+ q(0),
+ ],
+ q(lari) => [
+ q(4023),
+ q(0),
+ ],
+ q(larike-wakasihu) => [
+ q(0758),
+ q(0),
+ ],
+ q(laro) => [
+ q(4026),
+ q(0),
+ ],
+ q(larteh) => [
+ q(3786),
+ q(0),
+ ],
+ q(laru) => [
+ q(3783),
+ q(0),
+ ],
+ q(lasalimu) => [
+ q(3943),
+ q(0),
+ ],
+ q(lasgerdi) => [
+ q(4031),
+ q(0),
+ ],
+ q(lashi) => [
+ q(4036),
+ q(0),
+ ],
+ q(lasi) => [
+ q(4042),
+ q(0),
+ ],
+ q(late middle chinese) => [
+ q(4045),
+ q(0),
+ ],
+ q(latgalian) => [
+ q(4046),
+ q(0),
+ ],
+ q(latin) => [
+ q(0246),
+ q(0),
+ ],
+ q(latu) => [
+ q(4051),
+ q(0),
+ ],
+ q(latunde) => [
+ q(4048),
+ q(0),
+ ],
+ q(latvian) => [
+ q(0247),
+ q(0),
+ ],
+ q(latvian sign language) => [
+ q(4037),
+ q(0),
+ ],
+ q(lau) => [
+ q(3949),
+ q(0),
+ ],
+ q(laua) => [
+ q(4055),
+ q(0),
+ ],
+ q(lauan) => [
+ q(3950),
+ q(0),
+ ],
+ q(lauje) => [
+ q(3789),
+ q(0),
+ ],
+ q(laura) => [
+ q(4062),
+ q(0),
+ ],
+ q(laurentian) => [
+ q(4019),
+ q(0),
+ ],
+ q(lautu chin) => [
+ q(1780),
+ q(0),
+ ],
+ q(lavatbura-lamusong) => [
+ q(3811),
+ q(0),
+ ],
+ q(lave) => [
+ q(1424),
+ q(0),
+ ],
+ q(laven) => [
+ q(3805),
+ q(0),
+ ],
+ q(lavrung) => [
+ q(3081),
+ q(0),
+ ],
+ q(lavukaleve) => [
+ q(4070),
+ q(0),
+ ],
+ q(lawangan) => [
+ q(3813),
+ q(0),
+ ],
+ q(lawunuia) => [
+ q(6451),
+ q(0),
+ ],
+ q(layakha) => [
+ q(4082),
+ q(0),
+ ],
+ q(laz) => [
+ q(4088),
+ q(0),
+ ],
+ q(lealao chinantec) => [
+ q(1772),
+ q(0),
+ ],
+ q(leco) => [
+ q(3840),
+ q(0),
+ ],
+ q(ledo kaili) => [
+ q(3860),
+ q(0),
+ ],
+ q(leelau) => [
+ q(3831),
+ q(0),
+ ],
+ q(lefa) => [
+ q(3863),
+ q(0),
+ ],
+ q(lega-mwenga) => [
+ q(3872),
+ q(0),
+ ],
+ q(lega-shabunda) => [
+ q(3838),
+ q(0),
+ ],
+ q(legbo) => [
+ q(0655),
+ q(0),
+ ],
+ q(legenyem) => [
+ q(3816),
+ q(0),
+ ],
+ q(lehali) => [
+ q(6646),
+ q(0),
+ ],
+ q(lehalurup) => [
+ q(6905),
+ q(0),
+ ],
+ q(lehar) => [
+ q(1644),
+ q(0),
+ ],
+ q(leinong naga) => [
+ q(4087),
+ q(0),
+ ],
+ q(leipon) => [
+ q(3848),
+ q(0),
+ ],
+ q(lelak) => [
+ q(3941),
+ q(0),
+ ],
+ q(lele (chad)) => [
+ q(3944),
+ q(0),
+ ],
+ q(lele (democratic republic of congo)) => [
+ q(3849),
+ q(0),
+ ],
+ q(lele (guinea)) => [
+ q(3933),
+ q(0),
+ ],
+ q(lele (papua new guinea)) => [
+ q(3935),
+ q(0),
+ ],
+ q(lelemi) => [
+ q(3843),
+ q(0),
+ ],
+ q(lelepa) => [
+ q(4012),
+ q(0),
+ ],
+ q(lembena) => [
+ q(3854),
+ q(0),
+ ],
+ q(lemerig) => [
+ q(4030),
+ q(0),
+ ],
+ q(lemio) => [
+ q(3846),
+ q(0),
+ ],
+ q(lemnian) => [
+ q(7339),
+ q(0),
+ ],
+ q(lemolang) => [
+ q(3862),
+ q(0),
+ ],
+ q(lemoro) => [
+ q(3830),
+ q(0),
+ ],
+ q(lenakel) => [
+ q(6588),
+ q(0),
+ ],
+ q(lenca) => [
+ q(3851),
+ q(0),
+ ],
+ q(lendu) => [
+ q(3841),
+ q(0),
+ ],
+ q(lengilu) => [
+ q(3869),
+ q(0),
+ ],
+ q(lengo) => [
+ q(3875),
+ q(0),
+ ],
+ q(lengola) => [
+ q(3847),
+ q(0),
+ ],
+ q(lengua) => [
+ q(3844),
+ q(0),
+ ],
+ q(lengua de senas catalana) => [
+ q(1866),
+ q(0),
+ ],
+ q(lengua de senas del paraguay) => [
+ q(5648),
+ q(0),
+ ],
+ q(lengua de senas panamenas) => [
+ q(4040),
+ q(0),
+ ],
+ q(leningitij) => [
+ q(3981),
+ q(0),
+ ],
+ q(lenje) => [
+ q(3845),
+ q(0),
+ ],
+ q(lenkau) => [
+ q(3855),
+ q(0),
+ ],
+ q(lenyima) => [
+ q(3827),
+ q(0),
+ ],
+ q(leonese) => [
+ q(0030),
+ q(0),
+ ],
+ q(lepcha) => [
+ q(3853),
+ q(0),
+ ],
+ q(lepki) => [
+ q(4013),
+ q(0),
+ ],
+ q(lepontic) => [
+ q(7344),
+ q(0),
+ ],
+ q(lere) => [
+ q(2557),
+ q(0),
+ ],
+ q(lese) => [
+ q(3856),
+ q(0),
+ ],
+ q(lesing-gelimi) => [
+ q(3857),
+ q(0),
+ ],
+ q(letemboi) => [
+ q(4961),
+ q(0),
+ ],
+ q(leti (cameroon)) => [
+ q(3852),
+ q(0),
+ ],
+ q(leti (indonesia)) => [
+ q(4047),
+ q(0),
+ ],
+ q(letzeburgesch) => [
+ q(0254),
+ q(0),
+ ],
+ q(levuka) => [
+ q(4072),
+ q(0),
+ ],
+ q(lewo) => [
+ q(4081),
+ q(0),
+ ],
+ q(lewo eleng) => [
+ q(4074),
+ q(0),
+ ],
+ q(lewotobi) => [
+ q(4080),
+ q(0),
+ ],
+ q(leyigha) => [
+ q(1000),
+ q(0),
+ ],
+ q(lezghian) => [
+ q(0248),
+ q(0),
+ ],
+ q(lhaovo) => [
+ q(4272),
+ q(0),
+ ],
+ q(lhokpu) => [
+ q(3885),
+ q(0),
+ ],
+ q(lhomi) => [
+ q(3883),
+ q(0),
+ ],
+ q(li'o) => [
+ q(3914),
+ q(0),
+ ],
+ q(liabuku) => [
+ q(3909),
+ q(0),
+ ],
+ q(liana-seti) => [
+ q(6228),
+ q(0),
+ ],
+ q(liangmai naga) => [
+ q(4895),
+ q(0),
+ ],
+ q(lianshan zhuang) => [
+ q(7785),
+ q(0),
+ ],
+ q(liberia kpelle) => [
+ q(7395),
+ q(0),
+ ],
+ q(liberian english) => [
+ q(3904),
+ q(0),
+ ],
+ q(libido) => [
+ q(3903),
+ q(0),
+ ],
+ q(libinza) => [
+ q(3911),
+ q(0),
+ ],
+ q(libon bikol) => [
+ q(3802),
+ q(0),
+ ],
+ q(liburnian) => [
+ q(7341),
+ q(0),
+ ],
+ q(libyan arabic) => [
+ q(1002),
+ q(0),
+ ],
+ q(libyan sign language) => [
+ q(3808),
+ q(0),
+ ],
+ q(ligbi) => [
+ q(3895),
+ q(0),
+ ],
+ q(ligenza) => [
+ q(3878),
+ q(0),
+ ],
+ q(ligurian) => [
+ q(3898),
+ q(0),
+ ],
+ q(ligurian (ancient)) => [
+ q(7340),
+ q(0),
+ ],
+ q(lihir) => [
+ q(3896),
+ q(0),
+ ],
+ q(lijili) => [
+ q(4233),
+ q(0),
+ ],
+ q(lika) => [
+ q(3899),
+ q(0),
+ ],
+ q(liki) => [
+ q(3901),
+ q(0),
+ ],
+ q(likila) => [
+ q(3893),
+ q(0),
+ ],
+ q(likuba) => [
+ q(3719),
+ q(0),
+ ],
+ q(likum) => [
+ q(3890),
+ q(0),
+ ],
+ q(likwala) => [
+ q(3673),
+ q(0),
+ ],
+ q(lilau) => [
+ q(3942),
+ q(0),
+ ],
+ q(lillooet) => [
+ q(3900),
+ q(0),
+ ],
+ q(limassa) => [
+ q(1307),
+ q(0),
+ ],
+ q(limbu) => [
+ q(3894),
+ q(0),
+ ],
+ q(limbum) => [
+ q(3966),
+ q(0),
+ ],
+ q(limburgan) => [
+ q(0249),
+ q(0),
+ ],
+ q(limburger) => [
+ q(0249),
+ q(0),
+ ],
+ q(limburgish) => [
+ q(0249),
+ q(0),
+ ],
+ q(limi) => [
+ q(7598),
+ q(0),
+ ],
+ q(limilngan) => [
+ q(3953),
+ q(0),
+ ],
+ q(limos kalinga) => [
+ q(3441),
+ q(0),
+ ],
+ q(lindu) => [
+ q(3428),
+ q(0),
+ ],
+ q(linear a) => [
+ q(3774),
+ q(0),
+ ],
+ q(lingala) => [
+ q(0250),
+ q(0),
+ ],
+ q(lingao) => [
+ q(5242),
+ q(0),
+ ],
+ q(lingarak) => [
+ q(3870),
+ q(0),
+ ],
+ q(lingkhim) => [
+ q(3897),
+ q(0),
+ ],
+ q(lingua franca) => [
+ q(5493),
+ q(0),
+ ],
+ q(lingua franca nova) => [
+ q(3864),
+ q(0),
+ ],
+ q(lipan apache) => [
+ q(0846),
+ q(0),
+ ],
+ q(lipo) => [
+ q(4015),
+ q(0),
+ ],
+ q(lisabata-nuniali) => [
+ q(3824),
+ q(0),
+ ],
+ q(lisela) => [
+ q(3821),
+ q(0),
+ ],
+ q(lish) => [
+ q(4035),
+ q(0),
+ ],
+ q(lishan didan) => [
+ q(6662),
+ q(0),
+ ],
+ q(lishana deni) => [
+ q(4032),
+ q(0),
+ ],
+ q(lishanid noshan) => [
+ q(0702),
+ q(0),
+ ],
+ q(lisu) => [
+ q(3905),
+ q(0),
+ ],
+ q(literary chinese) => [
+ q(4085),
+ q(0),
+ ],
+ q(lithuanian) => [
+ q(0251),
+ q(0),
+ ],
+ q(lithuanian sign language) => [
+ q(3948),
+ q(0),
+ ],
+ q(litzlitz) => [
+ q(4086),
+ q(0),
+ ],
+ q(liujiang zhuang) => [
+ q(7783),
+ q(0),
+ ],
+ q(liuqian zhuang) => [
+ q(7786),
+ q(0),
+ ],
+ q(liv) => [
+ q(3907),
+ q(0),
+ ],
+ q(livvi) => [
+ q(5223),
+ q(0),
+ ],
+ q(llengua de signes catalana) => [
+ q(1866),
+ q(0),
+ ],
+ q(llengua de signes valenciana) => [
+ q(7015),
+ q(0),
+ ],
+ q(lo-toga) => [
+ q(3887),
+ q(0),
+ ],
+ q(loarki) => [
+ q(4022),
+ q(0),
+ ],
+ q(lobala) => [
+ q(4003),
+ q(0),
+ ],
+ q(lobi) => [
+ q(3990),
+ q(0),
+ ],
+ q(lodhi) => [
+ q(3803),
+ q(0),
+ ],
+ q(logba) => [
+ q(3874),
+ q(0),
+ ],
+ q(logo) => [
+ q(3994),
+ q(0),
+ ],
+ q(logol) => [
+ q(3993),
+ q(0),
+ ],
+ q(logooli) => [
+ q(5715),
+ q(0),
+ ],
+ q(logorik) => [
+ q(3906),
+ q(0),
+ ],
+ q(logudorese sardinian) => [
+ q(6182),
+ q(0),
+ ],
+ q(lohorung) => [
+ q(3807),
+ q(0),
+ ],
+ q(loja highland quichua) => [
+ q(5679),
+ q(0),
+ ],
+ q(lojban) => [
+ q(0204),
+ q(0),
+ ],
+ q(lokaa) => [
+ q(7517),
+ q(0),
+ ],
+ q(loke) => [
+ q(4011),
+ q(0),
+ ],
+ q(loko) => [
+ q(3998),
+ q(0),
+ ],
+ q(lokoya) => [
+ q(3930),
+ q(0),
+ ],
+ q(lola) => [
+ q(3817),
+ q(0),
+ ],
+ q(lolak) => [
+ q(3947),
+ q(0),
+ ],
+ q(lole) => [
+ q(3937),
+ q(0),
+ ],
+ q(lolo) => [
+ q(3932),
+ q(0),
+ ],
+ q(loloda) => [
+ q(3989),
+ q(0),
+ ],
+ q(lolopo) => [
+ q(7532),
+ q(0),
+ ],
+ q(loma (cote d'ivoire)) => [
+ q(3996),
+ q(0),
+ ],
+ q(loma (liberia)) => [
+ q(3999),
+ q(0),
+ ],
+ q(lomaiviti) => [
+ q(3970),
+ q(0),
+ ],
+ q(lomavren) => [
+ q(5786),
+ q(0),
+ ],
+ q(lombard) => [
+ q(3965),
+ q(0),
+ ],
+ q(lombi) => [
+ q(3959),
+ q(0),
+ ],
+ q(lombo) => [
+ q(4001),
+ q(0),
+ ],
+ q(lomwe) => [
+ q(4827),
+ q(0),
+ ],
+ q(loncong) => [
+ q(3818),
+ q(0),
+ ],
+ q(long phuri naga) => [
+ q(4014),
+ q(0),
+ ],
+ q(long wat) => [
+ q(6726),
+ q(0),
+ ],
+ q(longgu) => [
+ q(3877),
+ q(0),
+ ],
+ q(longto) => [
+ q(7164),
+ q(0),
+ ],
+ q(longuda) => [
+ q(3987),
+ q(0),
+ ],
+ q(loniu) => [
+ q(4005),
+ q(0),
+ ],
+ q(lonwolwol) => [
+ q(1845),
+ q(0),
+ ],
+ q(lonzo) => [
+ q(3988),
+ q(0),
+ ],
+ q(loo) => [
+ q(3835),
+ q(0),
+ ],
+ q(lopa) => [
+ q(4002),
+ q(0),
+ ],
+ q(lopi) => [
+ q(4008),
+ q(0),
+ ],
+ q(lopit) => [
+ q(4016),
+ q(0),
+ ],
+ q(lorang) => [
+ q(4025),
+ q(0),
+ ],
+ q(lorediakarkar) => [
+ q(3984),
+ q(0),
+ ],
+ q(loreto-ucayali spanish) => [
+ q(6161),
+ q(0),
+ ],
+ q(lote) => [
+ q(6930),
+ q(0),
+ ],
+ q(lotha naga) => [
+ q(4890),
+ q(0),
+ ],
+ q(lotud) => [
+ q(2161),
+ q(0),
+ ],
+ q(lou) => [
+ q(3997),
+ q(0),
+ ],
+ q(louisiana creole french) => [
+ q(4007),
+ q(0),
+ ],
+ q(loun) => [
+ q(4010),
+ q(0),
+ ],
+ q(loup a) => [
+ q(7343),
+ q(0),
+ ],
+ q(loup b) => [
+ q(7336),
+ q(0),
+ ],
+ q(lovono) => [
+ q(7006),
+ q(0),
+ ],
+ q(low german) => [
+ q(0306),
+ q(0),
+ ],
+ q(low saxon) => [
+ q(0306),
+ q(0),
+ ],
+ q(lower burdekin) => [
+ q(7249),
+ q(0),
+ ],
+ q(lower chehalis) => [
+ q(1707),
+ q(0),
+ ],
+ q(lower grand valley dani) => [
+ q(2100),
+ q(0),
+ ],
+ q(lower silesian) => [
+ q(6073),
+ q(0),
+ ],
+ q(lower sorbian) => [
+ q(0113),
+ q(0),
+ ],
+ q(lower ta'oih) => [
+ q(6718),
+ q(0),
+ ],
+ q(lower tanana) => [
+ q(6326),
+ q(0),
+ ],
+ q(lowland oaxaca chontal) => [
+ q(1779),
+ q(0),
+ ],
+ q(lowland tarahumara) => [
+ q(6328),
+ q(0),
+ ],
+ q(loxicha zapotec) => [
+ q(7869),
+ q(0),
+ ],
+ q(loyop) => [
+ q(6905),
+ q(0),
+ ],
+ q(lozi) => [
+ q(0253),
+ q(0),
+ ],
+ q(lu) => [
+ q(3311),
+ q(0),
+ ],
+ q(lua') => [
+ q(5562),
+ q(0),
+ ],
+ q(luang) => [
+ q(3861),
+ q(0),
+ ],
+ q(luba-katanga) => [
+ q(0256),
+ q(0),
+ ],
+ q(luba-lulua) => [
+ q(0255),
+ q(0),
+ ],
+ q(lubila) => [
+ q(3189),
+ q(0),
+ ],
+ q(lubu) => [
+ q(3819),
+ q(0),
+ ],
+ q(lubuagan kalinga) => [
+ q(3458),
+ q(0),
+ ],
+ q(lubukusu) => [
+ q(1577),
+ q(0),
+ ],
+ q(luchazi) => [
+ q(3820),
+ q(0),
+ ],
+ q(lucumi) => [
+ q(4061),
+ q(0),
+ ],
+ q(ludian) => [
+ q(4053),
+ q(0),
+ ],
+ q(lufu) => [
+ q(3837),
+ q(0),
+ ],
+ q(lugbara) => [
+ q(3867),
+ q(0),
+ ],
+ q(luguru) => [
+ q(5837),
+ q(0),
+ ],
+ q(lui) => [
+ q(3793),
+ q(0),
+ ],
+ q(luidakho-luisukha-lutirichi) => [
+ q(2884),
+ q(0),
+ ],
+ q(luimbi) => [
+ q(4059),
+ q(0),
+ ],
+ q(luiseno) => [
+ q(0258),
+ q(0),
+ ],
+ q(lukabaras) => [
+ q(3917),
+ q(0),
+ ],
+ q(lukpa) => [
+ q(2119),
+ q(0),
+ ],
+ q(lule sami) => [
+ q(0390),
+ q(0),
+ ],
+ q(lulogooli) => [
+ q(5715),
+ q(0),
+ ],
+ q(lumba-yakkha) => [
+ q(4064),
+ q(0),
+ ],
+ q(lumbee) => [
+ q(3974),
+ q(0),
+ ],
+ q(lumbu) => [
+ q(4060),
+ q(0),
+ ],
+ q(lumun) => [
+ q(3954),
+ q(0),
+ ],
+ q(lun bawang) => [
+ q(3977),
+ q(0),
+ ],
+ q(luna) => [
+ q(4056),
+ q(0),
+ ],
+ q(lunanakha) => [
+ q(4057),
+ q(0),
+ ],
+ q(lunda) => [
+ q(0259),
+ q(0),
+ ],
+ q(lundayeh) => [
+ q(3977),
+ q(0),
+ ],
+ q(lungga) => [
+ q(3865),
+ q(0),
+ ],
+ q(luo (cameroon)) => [
+ q(4066),
+ q(0),
+ ],
+ q(luo (kenya and tanzania)) => [
+ q(0260),
+ q(0),
+ ],
+ q(luopohe hmong) => [
+ q(2773),
+ q(0),
+ ],
+ q(luopohe miao) => [
+ q(2773),
+ q(0),
+ ],
+ q(luri) => [
+ q(3826),
+ q(0),
+ ],
+ q(lusengo) => [
+ q(4033),
+ q(0),
+ ],
+ q(lushai) => [
+ q(0261),
+ q(0),
+ ],
+ q(lushootseed) => [
+ q(4063),
+ q(0),
+ ],
+ q(lusi) => [
+ q(3320),
+ q(0),
+ ],
+ q(lusitanian) => [
+ q(7345),
+ q(0),
+ ],
+ q(lutachoni) => [
+ q(4050),
+ q(0),
+ ],
+ q(lutos) => [
+ q(4787),
+ q(0),
+ ],
+ q(luvale) => [
+ q(4054),
+ q(0),
+ ],
+ q(luwati) => [
+ q(4065),
+ q(0),
+ ],
+ q(luwo) => [
+ q(4079),
+ q(0),
+ ],
+ q(luxembourgish) => [
+ q(0254),
+ q(0),
+ ],
+ q(luyana) => [
+ q(4084),
+ q(0),
+ ],
+ q(luyia) => [
+ q(4067),
+ q(0),
+ ],
+ q(lwalu) => [
+ q(4073),
+ q(0),
+ ],
+ q(lycian) => [
+ q(7337),
+ q(0),
+ ],
+ q(lydian) => [
+ q(7338),
+ q(0),
+ ],
+ q(lyele) => [
+ q(3842),
+ q(0),
+ ],
+ q(lyngngam) => [
+ q(4083),
+ q(0),
+ ],
+ q(lyons sign language) => [
+ q(4034),
+ q(0),
+ ],
+ q(ma (democratic republic of congo)) => [
+ q(4517),
+ q(0),
+ ],
+ q(ma (papua new guinea)) => [
+ q(4307),
+ q(0),
+ ],
+ q(ma manda) => [
+ q(6045),
+ q(0),
+ ],
+ q(ma'anyan) => [
+ q(4273),
+ q(0),
+ ],
+ q(ma'di) => [
+ q(4258),
+ q(0),
+ ],
+ q(ma'ya) => [
+ q(6087),
+ q(0),
+ ],
+ q(maa) => [
+ q(1784),
+ q(0),
+ ],
+ q(maaka) => [
+ q(4197),
+ q(0),
+ ],
+ q(maasina fulfulde) => [
+ q(2334),
+ q(0),
+ ],
+ q(maay) => [
+ q(7613),
+ q(0),
+ ],
+ q(maba (chad)) => [
+ q(4157),
+ q(0),
+ ],
+ q(maba (indonesia)) => [
+ q(4459),
+ q(0),
+ ],
+ q(mabaale) => [
+ q(4391),
+ q(0),
+ ],
+ q(mabaan) => [
+ q(4225),
+ q(0),
+ ],
+ q(mabaka valley kalinga) => [
+ q(3386),
+ q(0),
+ ],
+ q(mabire) => [
+ q(4566),
+ q(0),
+ ],
+ q(maca) => [
+ q(4127),
+ q(0),
+ ],
+ q(macaguaje) => [
+ q(4138),
+ q(0),
+ ],
+ q(macaguan) => [
+ q(4114),
+ q(0),
+ ],
+ q(macanese) => [
+ q(4692),
+ q(0),
+ ],
+ q(macedo-romanian) => [
+ q(0362),
+ q(0),
+ ],
+ q(macedonian) => [
+ q(0262),
+ q(0),
+ ],
+ q(machame) => [
+ q(3096),
+ q(0),
+ ],
+ q(machiguenga) => [
+ q(4128),
+ q(0),
+ ],
+ q(machinere) => [
+ q(4437),
+ q(0),
+ ],
+ q(machinga) => [
+ q(4599),
+ q(0),
+ ],
+ q(maco) => [
+ q(7172),
+ q(0),
+ ],
+ q(macuna) => [
+ q(4673),
+ q(0),
+ ],
+ q(macushi) => [
+ q(4104),
+ q(0),
+ ],
+ q(mada (cameroon)) => [
+ q(4647),
+ q(0),
+ ],
+ q(mada (nigeria)) => [
+ q(4153),
+ q(0),
+ ],
+ q(madagascar sign language) => [
+ q(4677),
+ q(0),
+ ],
+ q(madak) => [
+ q(4389),
+ q(0),
+ ],
+ q(maden) => [
+ q(7370),
+ q(0),
+ ],
+ q(madhi madhi) => [
+ q(2083),
+ q(0),
+ ],
+ q(madi) => [
+ q(2601),
+ q(0),
+ ],
+ q(madngele) => [
+ q(7798),
+ q(0),
+ ],
+ q(madurese) => [
+ q(0263),
+ q(0),
+ ],
+ q(mae) => [
+ q(4371),
+ q(0),
+ ],
+ q(maek) => [
+ q(2772),
+ q(0),
+ ],
+ q(maeng itneg) => [
+ q(2999),
+ q(0),
+ ],
+ q(mafa) => [
+ q(4092),
+ q(0),
+ ],
+ q(mafea) => [
+ q(4339),
+ q(0),
+ ],
+ q(mag-antsi ayta) => [
+ q(5962),
+ q(0),
+ ],
+ q(mag-indi ayta) => [
+ q(1300),
+ q(0),
+ ],
+ q(magahi) => [
+ q(0264),
+ q(0),
+ ],
+ q(magbukun ayta) => [
+ q(1009),
+ q(0),
+ ],
+ q(magdalena penasco mixtec) => [
+ q(7449),
+ q(0),
+ ],
+ q(maghdi) => [
+ q(2543),
+ q(0),
+ ],
+ q(magoma) => [
+ q(2549),
+ q(0),
+ ],
+ q(magori) => [
+ q(7754),
+ q(0),
+ ],
+ q(maguindanaon) => [
+ q(4159),
+ q(0),
+ ],
+ q(mah meri) => [
+ q(4254),
+ q(0),
+ ],
+ q(mahali) => [
+ q(4317),
+ q(0),
+ ],
+ q(maharastri prakrit) => [
+ q(5489),
+ q(0),
+ ],
+ q(mahasu pahari) => [
+ q(1161),
+ q(0),
+ ],
+ q(mahican) => [
+ q(4318),
+ q(0),
+ ],
+ q(mahongwe) => [
+ q(4251),
+ q(0),
+ ],
+ q(mahou) => [
+ q(4650),
+ q(0),
+ ],
+ q(mai brat) => [
+ q(1012),
+ q(0),
+ ],
+ q(maia) => [
+ q(6060),
+ q(0),
+ ],
+ q(maiadomu) => [
+ q(4699),
+ q(0),
+ ],
+ q(maiani) => [
+ q(6585),
+ q(0),
+ ],
+ q(maii) => [
+ q(4379),
+ q(0),
+ ],
+ q(mailu) => [
+ q(4245),
+ q(0),
+ ],
+ q(maindo) => [
+ q(1923),
+ q(0),
+ ],
+ q(mainfrankisch) => [
+ q(6988),
+ q(0),
+ ],
+ q(mainstream kenyah) => [
+ q(7321),
+ q(0),
+ ],
+ q(mairasi) => [
+ q(7857),
+ q(0),
+ ],
+ q(maisin) => [
+ q(4117),
+ q(0),
+ ],
+ q(maithili) => [
+ q(0266),
+ q(0),
+ ],
+ q(maiwa (indonesia)) => [
+ q(7137),
+ q(0),
+ ],
+ q(maiwa (papua new guinea)) => [
+ q(4541),
+ q(0),
+ ],
+ q(maiwala) => [
+ q(4568),
+ q(0),
+ ],
+ q(majang) => [
+ q(4438),
+ q(0),
+ ],
+ q(majera) => [
+ q(7356),
+ q(0),
+ ],
+ q(majhi) => [
+ q(4319),
+ q(0),
+ ],
+ q(majhwar) => [
+ q(4376),
+ q(0),
+ ],
+ q(majukayang kalinga) => [
+ q(3434),
+ q(0),
+ ],
+ q(mak (china)) => [
+ q(4325),
+ q(0),
+ ],
+ q(mak (nigeria)) => [
+ q(5346),
+ q(0),
+ ],
+ q(makaa) => [
+ q(4142),
+ q(0),
+ ],
+ q(makah) => [
+ q(4659),
+ q(0),
+ ],
+ q(makasae) => [
+ q(4343),
+ q(0),
+ ],
+ q(makasar) => [
+ q(0267),
+ q(0),
+ ],
+ q(makassar malay) => [
+ q(4215),
+ q(0),
+ ],
+ q(makayam) => [
+ q(0948),
+ q(0),
+ ],
+ q(makhuwa) => [
+ q(7002),
+ q(0),
+ ],
+ q(makhuwa-marrevone) => [
+ q(7350),
+ q(0),
+ ],
+ q(makhuwa-meetto) => [
+ q(4232),
+ q(0),
+ ],
+ q(makhuwa-moniga) => [
+ q(4262),
+ q(0),
+ ],
+ q(makhuwa-saka) => [
+ q(7434),
+ q(0),
+ ],
+ q(makhuwa-shirima) => [
+ q(6993),
+ q(0),
+ ],
+ q(maklew) => [
+ q(4230),
+ q(0),
+ ],
+ q(makolkol) => [
+ q(7794),
+ q(0),
+ ],
+ q(makonde) => [
+ q(3216),
+ q(0),
+ ],
+ q(maku'a) => [
+ q(4069),
+ q(0),
+ ],
+ q(makurap) => [
+ q(4453),
+ q(0),
+ ],
+ q(makuri naga) => [
+ q(3100),
+ q(0),
+ ],
+ q(makwe) => [
+ q(7611),
+ q(0),
+ ],
+ q(makyan naga) => [
+ q(6874),
+ q(0),
+ ],
+ q(mal) => [
+ q(4349),
+ q(0),
+ ],
+ q(mal paharia) => [
+ q(4321),
+ q(0),
+ ],
+ q(mala (nigeria)) => [
+ q(5846),
+ q(0),
+ ],
+ q(mala (papua new guinea)) => [
+ q(5382),
+ q(0),
+ ],
+ q(mala malasar) => [
+ q(2941),
+ q(0),
+ ],
+ q(malaccan creole malay) => [
+ q(1689),
+ q(0),
+ ],
+ q(malaccan creole portuguese) => [
+ q(4139),
+ q(0),
+ ],
+ q(malagasy) => [
+ q(0283),
+ q(0),
+ ],
+ q(malakhel) => [
+ q(4347),
+ q(0),
+ ],
+ q(malalamai) => [
+ q(4385),
+ q(0),
+ ],
+ q(malango) => [
+ q(4356),
+ q(0),
+ ],
+ q(malankuravan) => [
+ q(4308),
+ q(0),
+ ],
+ q(malapandaram) => [
+ q(4309),
+ q(0),
+ ],
+ q(malaryan) => [
+ q(4310),
+ q(0),
+ ],
+ q(malas) => [
+ q(4335),
+ q(0),
+ ],
+ q(malasar) => [
+ q(7618),
+ q(0),
+ ],
+ q(malavedan) => [
+ q(4311),
+ q(0),
+ ],
+ q(malawi lomwe) => [
+ q(4000),
+ q(0),
+ ],
+ q(malawi sena) => [
+ q(6276),
+ q(0),
+ ],
+ q(malay) => [
+ q(0274),
+ q(0),
+ ],
+ q(malay (individual language)) => [
+ q(7784),
+ q(0),
+ ],
+ q(malay (macrolanguage)) => [
+ q(0274),
+ q(1),
+ ],
+ q(malayalam) => [
+ q(0268),
+ q(0),
+ ],
+ q(malayic dayak) => [
+ q(7275),
+ q(0),
+ ],
+ q(malaynon) => [
+ q(4366),
+ q(0),
+ ],
+ q(malayo) => [
+ q(4116),
+ q(0),
+ ],
+ q(malayo-polynesian languages) => [
+ q(0520),
+ q(0),
+ ],
+ q(malaysian sign language) => [
+ q(7358),
+ q(0),
+ ],
+ q(malba birifor) => [
+ q(1151),
+ q(0),
+ ],
+ q(maldivian) => [
+ q(0110),
+ q(0),
+ ],
+ q(male) => [
+ q(2809),
+ q(0),
+ ],
+ q(male (ethiopia)) => [
+ q(4174),
+ q(0),
+ ],
+ q(male (papua new guinea)) => [
+ q(4155),
+ q(0),
+ ],
+ q(malecite-passamaquoddy) => [
+ q(5561),
+ q(0),
+ ],
+ q(maleku jaika) => [
+ q(2645),
+ q(0),
+ ],
+ q(maleng) => [
+ q(5459),
+ q(0),
+ ],
+ q(maleu-kilenge) => [
+ q(4236),
+ q(0),
+ ],
+ q(malfaxal) => [
+ q(4365),
+ q(0),
+ ],
+ q(malgana) => [
+ q(6994),
+ q(0),
+ ],
+ q(malgbe) => [
+ q(4632),
+ q(0),
+ ],
+ q(mali) => [
+ q(2434),
+ q(0),
+ ],
+ q(maligo) => [
+ q(4612),
+ q(0),
+ ],
+ q(malila) => [
+ q(4241),
+ q(0),
+ ],
+ q(malimba) => [
+ q(4678),
+ q(0),
+ ],
+ q(malimpung) => [
+ q(4351),
+ q(0),
+ ],
+ q(malinaltepec me'phaa) => [
+ q(6378),
+ q(0),
+ ],
+ q(malinaltepec tlapanec) => [
+ q(6378),
+ q(0),
+ ],
+ q(malo) => [
+ q(4344),
+ q(0),
+ ],
+ q(malol) => [
+ q(4111),
+ q(0),
+ ],
+ q(maltese) => [
+ q(0284),
+ q(0),
+ ],
+ q(maltese sign language) => [
+ q(4163),
+ q(0),
+ ],
+ q(malua bay) => [
+ q(4354),
+ q(0),
+ ],
+ q(malvi) => [
+ q(4570),
+ q(0),
+ ],
+ q(malyangapa) => [
+ q(7552),
+ q(0),
+ ],
+ q(mam) => [
+ q(4094),
+ q(0),
+ ],
+ q(mama) => [
+ q(4367),
+ q(0),
+ ],
+ q(mamaa) => [
+ q(4255),
+ q(0),
+ ],
+ q(mamainde) => [
+ q(7133),
+ q(0),
+ ],
+ q(mamanwa) => [
+ q(4380),
+ q(0),
+ ],
+ q(mamara senoufo) => [
+ q(4662),
+ q(0),
+ ],
+ q(mamasa) => [
+ q(4467),
+ q(0),
+ ],
+ q(mambae) => [
+ q(4237),
+ q(0),
+ ],
+ q(mambai) => [
+ q(4145),
+ q(0),
+ ],
+ q(mamboru) => [
+ q(4581),
+ q(0),
+ ],
+ q(mambwe-lungu) => [
+ q(4242),
+ q(0),
+ ],
+ q(mampruli) => [
+ q(4099),
+ q(0),
+ ],
+ q(mamuju) => [
+ q(4481),
+ q(0),
+ ],
+ q(mamulique) => [
+ q(2250),
+ q(0),
+ ],
+ q(mamusi) => [
+ q(3217),
+ q(0),
+ ],
+ q(mamvu) => [
+ q(4160),
+ q(0),
+ ],
+ q(man met) => [
+ q(4378),
+ q(0),
+ ],
+ q(manado malay) => [
+ q(7359),
+ q(0),
+ ],
+ q(manam) => [
+ q(4579),
+ q(0),
+ ],
+ q(manambu) => [
+ q(4348),
+ q(0),
+ ],
+ q(manangba) => [
+ q(4955),
+ q(0),
+ ],
+ q(manangkari) => [
+ q(7816),
+ q(0),
+ ],
+ q(manchu) => [
+ q(0285),
+ q(0),
+ ],
+ q(manda (australia)) => [
+ q(7787),
+ q(0),
+ ],
+ q(manda (india)) => [
+ q(4250),
+ q(0),
+ ],
+ q(manda (tanzania)) => [
+ q(4243),
+ q(0),
+ ],
+ q(mandahuaca) => [
+ q(4269),
+ q(0),
+ ],
+ q(mandaic) => [
+ q(4277),
+ q(0),
+ ],
+ q(mandan) => [
+ q(4266),
+ q(0),
+ ],
+ q(mandandanyi) => [
+ q(7797),
+ q(0),
+ ],
+ q(mandar) => [
+ q(0276),
+ q(0),
+ ],
+ q(mandara) => [
+ q(6353),
+ q(0),
+ ],
+ q(mandari) => [
+ q(4478),
+ q(0),
+ ],
+ q(mandarin chinese) => [
+ q(1790),
+ q(0),
+ ],
+ q(mandaya) => [
+ q(4507),
+ q(0),
+ ],
+ q(mande languages) => [
+ q(0500),
+ q(0),
+ ],
+ q(mandeali) => [
+ q(4305),
+ q(0),
+ ],
+ q(mander) => [
+ q(4475),
+ q(0),
+ ],
+ q(mandingo) => [
+ q(0269),
+ q(0),
+ ],
+ q(mandinka) => [
+ q(4400),
+ q(0),
+ ],
+ q(mandjak) => [
+ q(4221),
+ q(0),
+ ],
+ q(mandobo atas) => [
+ q(0558),
+ q(0),
+ ],
+ q(mandobo bawah) => [
+ q(1557),
+ q(0),
+ ],
+ q(manem) => [
+ q(3062),
+ q(0),
+ ],
+ q(mang) => [
+ q(7815),
+ q(0),
+ ],
+ q(manga kanuri) => [
+ q(3185),
+ q(0),
+ ],
+ q(mangala) => [
+ q(4188),
+ q(0),
+ ],
+ q(mangarayi) => [
+ q(4436),
+ q(0),
+ ],
+ q(mangareva) => [
+ q(4504),
+ q(0),
+ ],
+ q(mangas) => [
+ q(7817),
+ q(0),
+ ],
+ q(mangayat) => [
+ q(4661),
+ q(0),
+ ],
+ q(mangbetu) => [
+ q(4161),
+ q(0),
+ ],
+ q(mangbutu) => [
+ q(4162),
+ q(0),
+ ],
+ q(mangerr) => [
+ q(7791),
+ q(0),
+ ],
+ q(mangetti dune !xung) => [
+ q(2479),
+ q(0),
+ ],
+ q(mangga buang) => [
+ q(4381),
+ q(0),
+ ],
+ q(manggarai) => [
+ q(4482),
+ q(0),
+ ],
+ q(mango) => [
+ q(4229),
+ q(0),
+ ],
+ q(mangole) => [
+ q(4461),
+ q(0),
+ ],
+ q(mangseng) => [
+ q(4108),
+ q(0),
+ ],
+ q(mangue) => [
+ q(4423),
+ q(0),
+ ],
+ q(manichaean middle persian) => [
+ q(7360),
+ q(0),
+ ],
+ q(manide) => [
+ q(0563),
+ q(0),
+ ],
+ q(manikion) => [
+ q(4412),
+ q(0),
+ ],
+ q(manipa) => [
+ q(4473),
+ q(0),
+ ],
+ q(manipuri) => [
+ q(0286),
+ q(0),
+ ],
+ q(mankanya) => [
+ q(3462),
+ q(0),
+ ],
+ q(mann) => [
+ q(4196),
+ q(0),
+ ],
+ q(manna-dora) => [
+ q(4314),
+ q(0),
+ ],
+ q(mannan) => [
+ q(4315),
+ q(0),
+ ],
+ q(manobo languages) => [
+ q(0287),
+ q(0),
+ ],
+ q(manombai) => [
+ q(7167),
+ q(0),
+ ],
+ q(mansaka) => [
+ q(4518),
+ q(0),
+ ],
+ q(mansi) => [
+ q(4407),
+ q(0),
+ ],
+ q(mansoanka) => [
+ q(4529),
+ q(0),
+ ],
+ q(manta) => [
+ q(4658),
+ q(0),
+ ],
+ q(mantsi) => [
+ q(5079),
+ q(0),
+ ],
+ q(manumanaw) => [
+ q(3702),
+ q(0),
+ ],
+ q(manumanaw karen) => [
+ q(3702),
+ q(0),
+ ],
+ q(manusela) => [
+ q(7085),
+ q(0),
+ ],
+ q(manx) => [
+ q(0156),
+ q(0),
+ ],
+ q(manya) => [
+ q(4683),
+ q(0),
+ ],
+ q(manyawa) => [
+ q(4413),
+ q(0),
+ ],
+ q(manyika) => [
+ q(4629),
+ q(0),
+ ],
+ q(manza) => [
+ q(4695),
+ q(0),
+ ],
+ q(mao naga) => [
+ q(4728),
+ q(0),
+ ],
+ q(maonan) => [
+ q(4370),
+ q(0),
+ ],
+ q(maore comorian) => [
+ q(6269),
+ q(0),
+ ],
+ q(maori) => [
+ q(0270),
+ q(0),
+ ],
+ q(mape) => [
+ q(4350),
+ q(0),
+ ],
+ q(mapena) => [
+ q(4402),
+ q(0),
+ ],
+ q(mapia) => [
+ q(4457),
+ q(0),
+ ],
+ q(mapidian) => [
+ q(4455),
+ q(0),
+ ],
+ q(mapos buang) => [
+ q(1622),
+ q(0),
+ ],
+ q(mapoyo) => [
+ q(4133),
+ q(0),
+ ],
+ q(mapuche) => [
+ q(0025),
+ q(0),
+ ],
+ q(mapudungun) => [
+ q(0025),
+ q(0),
+ ],
+ q(mapun) => [
+ q(6034),
+ q(0),
+ ],
+ q(maquiritari) => [
+ q(4134),
+ q(0),
+ ],
+ q(mara) => [
+ q(4178),
+ q(0),
+ ],
+ q(mara chin) => [
+ q(4491),
+ q(0),
+ ],
+ q(marachi) => [
+ q(4021),
+ q(0),
+ ],
+ q(maraghei) => [
+ q(6990),
+ q(0),
+ ],
+ q(maragus) => [
+ q(4501),
+ q(0),
+ ],
+ q(maram naga) => [
+ q(4943),
+ q(0),
+ ],
+ q(marama) => [
+ q(4024),
+ q(0),
+ ],
+ q(maramba) => [
+ q(4655),
+ q(0),
+ ],
+ q(maranao) => [
+ q(4505),
+ q(0),
+ ],
+ q(maranunggu) => [
+ q(7804),
+ q(0),
+ ],
+ q(mararit) => [
+ q(4226),
+ q(0),
+ ],
+ q(marathi) => [
+ q(0272),
+ q(0),
+ ],
+ q(marau) => [
+ q(4594),
+ q(0),
+ ],
+ q(marba) => [
+ q(4439),
+ q(0),
+ ],
+ q(maremgi) => [
+ q(4506),
+ q(0),
+ ],
+ q(marenje) => [
+ q(6998),
+ q(0),
+ ],
+ q(marfa) => [
+ q(4597),
+ q(0),
+ ],
+ q(margany) => [
+ q(7789),
+ q(0),
+ ],
+ q(marghi central) => [
+ q(4502),
+ q(0),
+ ],
+ q(marghi south) => [
+ q(4212),
+ q(0),
+ ],
+ q(margos-yarowilca-lauricocha quechua) => [
+ q(5681),
+ q(0),
+ ],
+ q(margu) => [
+ q(4256),
+ q(0),
+ ],
+ q(mari) => [
+ q(0081),
+ q(0),
+ ],
+ q(mari (east sepik province)) => [
+ q(4124),
+ q(0),
+ ],
+ q(mari (madang province)) => [
+ q(2796),
+ q(0),
+ ],
+ q(mari (russia)) => [
+ q(0081),
+ q(1),
+ ],
+ q(maria (india)) => [
+ q(4500),
+ q(0),
+ ],
+ q(maria (papua new guinea)) => [
+ q(4168),
+ q(0),
+ ],
+ q(maricopa) => [
+ q(4486),
+ q(0),
+ ],
+ q(maridan) => [
+ q(7790),
+ q(0),
+ ],
+ q(maridjabin) => [
+ q(7796),
+ q(0),
+ ],
+ q(marik) => [
+ q(1938),
+ q(0),
+ ],
+ q(marimanindji) => [
+ q(7799),
+ q(0),
+ ],
+ q(marind) => [
+ q(4508),
+ q(0),
+ ],
+ q(maring) => [
+ q(4123),
+ q(0),
+ ],
+ q(maring naga) => [
+ q(4975),
+ q(0),
+ ],
+ q(maringarr) => [
+ q(7806),
+ q(0),
+ ],
+ q(marino) => [
+ q(4485),
+ q(0),
+ ],
+ q(mariri) => [
+ q(4466),
+ q(0),
+ ],
+ q(marithiel) => [
+ q(4217),
+ q(0),
+ ],
+ q(maritime sign language) => [
+ q(5058),
+ q(0),
+ ],
+ q(maritsaua) => [
+ q(4523),
+ q(0),
+ ],
+ q(mariyedi) => [
+ q(7811),
+ q(0),
+ ],
+ q(marka) => [
+ q(5776),
+ q(0),
+ ],
+ q(markweeta) => [
+ q(2260),
+ q(0),
+ ],
+ q(marma) => [
+ q(5801),
+ q(0),
+ ],
+ q(marovo) => [
+ q(4591),
+ q(0),
+ ],
+ q(marriammu) => [
+ q(7419),
+ q(0),
+ ],
+ q(marrucinian) => [
+ q(6869),
+ q(0),
+ ],
+ q(marshallese) => [
+ q(0265),
+ q(0),
+ ],
+ q(marsian) => [
+ q(2948),
+ q(0),
+ ],
+ q(martha's vineyard sign language) => [
+ q(4488),
+ q(0),
+ ],
+ q(marti ke) => [
+ q(7793),
+ q(0),
+ ],
+ q(martu wangka) => [
+ q(4442),
+ q(0),
+ ],
+ q(martuyhunira) => [
+ q(6983),
+ q(0),
+ ],
+ q(maru) => [
+ q(4272),
+ q(0),
+ ],
+ q(marubo) => [
+ q(4691),
+ q(0),
+ ],
+ q(marwari) => [
+ q(0295),
+ q(0),
+ ],
+ q(marwari (india)) => [
+ q(5852),
+ q(0),
+ ],
+ q(marwari (pakistan)) => [
+ q(4582),
+ q(0),
+ ],
+ q(masaaba) => [
+ q(4672),
+ q(0),
+ ],
+ q(masadiit itneg) => [
+ q(6501),
+ q(0),
+ ],
+ q(masai) => [
+ q(0273),
+ q(0),
+ ],
+ q(masalit) => [
+ q(4361),
+ q(0),
+ ],
+ q(masana) => [
+ q(4140),
+ q(0),
+ ],
+ q(masbatenyo) => [
+ q(4509),
+ q(0),
+ ],
+ q(mashco piro) => [
+ q(1907),
+ q(0),
+ ],
+ q(mashi (nigeria)) => [
+ q(3102),
+ q(0),
+ ],
+ q(mashi (zambia)) => [
+ q(4264),
+ q(0),
+ ],
+ q(masikoro malagasy) => [
+ q(4515),
+ q(0),
+ ],
+ q(masimasi) => [
+ q(2984),
+ q(0),
+ ],
+ q(masiwang) => [
+ q(1334),
+ q(0),
+ ],
+ q(maskelynes) => [
+ q(3427),
+ q(0),
+ ],
+ q(maskoy pidgin) => [
+ q(4257),
+ q(0),
+ ],
+ q(maslam) => [
+ q(4528),
+ q(0),
+ ],
+ q(masmaje) => [
+ q(4193),
+ q(0),
+ ],
+ q(massalat) => [
+ q(4158),
+ q(0),
+ ],
+ q(massep) => [
+ q(4595),
+ q(0),
+ ],
+ q(matagalpa) => [
+ q(4546),
+ q(0),
+ ],
+ q(matal) => [
+ q(4207),
+ q(0),
+ ],
+ q(matbat) => [
+ q(7366),
+ q(0),
+ ],
+ q(matengo) => [
+ q(4246),
+ q(0),
+ ],
+ q(matepi) => [
+ q(4462),
+ q(0),
+ ],
+ q(matigsalug manobo) => [
+ q(4120),
+ q(0),
+ ],
+ q(matipuhy) => [
+ q(4688),
+ q(0),
+ ],
+ q(matis) => [
+ q(4449),
+ q(0),
+ ],
+ q(mato) => [
+ q(4194),
+ q(0),
+ ],
+ q(mato grosso arara) => [
+ q(0989),
+ q(0),
+ ],
+ q(mator) => [
+ q(4545),
+ q(0),
+ ],
+ q(mator-taygi-karagas) => [
+ q(7620),
+ q(0),
+ ],
+ q(matses) => [
+ q(4132),
+ q(0),
+ ],
+ q(mattoki) => [
+ q(7382),
+ q(0),
+ ],
+ q(mattole) => [
+ q(4580),
+ q(0),
+ ],
+ q(matu chin) => [
+ q(2760),
+ q(0),
+ ],
+ q(matukar) => [
+ q(4304),
+ q(0),
+ ],
+ q(matumbi) => [
+ q(4247),
+ q(0),
+ ],
+ q(matya samo) => [
+ q(6233),
+ q(0),
+ ],
+ q(maung) => [
+ q(4440),
+ q(0),
+ ],
+ q(mauritian sign language) => [
+ q(4044),
+ q(0),
+ ],
+ q(mauwake) => [
+ q(4261),
+ q(0),
+ ],
+ q(mawa (chad)) => [
+ q(4149),
+ q(0),
+ ],
+ q(mawa (nigeria)) => [
+ q(7130),
+ q(0),
+ ],
+ q(mawak) => [
+ q(4303),
+ q(0),
+ ],
+ q(mawan) => [
+ q(4152),
+ q(0),
+ ],
+ q(mawayana) => [
+ q(4697),
+ q(0),
+ ],
+ q(mawchi) => [
+ q(4323),
+ q(0),
+ ],
+ q(mawes) => [
+ q(4235),
+ q(0),
+ ],
+ q(mawukakan) => [
+ q(4650),
+ q(0),
+ ],
+ q(maxakali) => [
+ q(4112),
+ q(0),
+ ],
+ q(maxi gbe) => [
+ q(4638),
+ q(0),
+ ],
+ q(maya samo) => [
+ q(6309),
+ q(0),
+ ],
+ q(mayaguduna) => [
+ q(7371),
+ q(0),
+ ],
+ q(mayan languages) => [
+ q(0296),
+ q(0),
+ ],
+ q(mayangna) => [
+ q(7507),
+ q(0),
+ ],
+ q(mayeka) => [
+ q(4654),
+ q(0),
+ ],
+ q(maykulan) => [
+ q(4408),
+ q(0),
+ ],
+ q(mayo) => [
+ q(4224),
+ q(0),
+ ],
+ q(mayogo) => [
+ q(4164),
+ q(0),
+ ],
+ q(mayoyao ifugao) => [
+ q(2900),
+ q(0),
+ ],
+ q(mazagway) => [
+ q(2076),
+ q(0),
+ ],
+ q(mazaltepec zapotec) => [
+ q(7849),
+ q(0),
+ ],
+ q(mazanderani) => [
+ q(4687),
+ q(0),
+ ],
+ q(mazatlan mazatec) => [
+ q(7005),
+ q(0),
+ ],
+ q(mazatlan mixe) => [
+ q(4685),
+ q(0),
+ ],
+ q(mba) => [
+ q(4202),
+ q(0),
+ ],
+ q(mbabaram) => [
+ q(6984),
+ q(0),
+ ],
+ q(mbala) => [
+ q(4166),
+ q(0),
+ ],
+ q(mbalanhu) => [
+ q(3976),
+ q(0),
+ ],
+ q(mbandja) => [
+ q(7812),
+ q(0),
+ ],
+ q(mbangala) => [
+ q(4633),
+ q(0),
+ ],
+ q(mbangi) => [
+ q(4238),
+ q(0),
+ ],
+ q(mbangwe) => [
+ q(7800),
+ q(0),
+ ],
+ q(mbara (australia)) => [
+ q(4588),
+ q(0),
+ ],
+ q(mbara (chad)) => [
+ q(4443),
+ q(0),
+ ],
+ q(mbariman-gudhinma) => [
+ q(7808),
+ q(0),
+ ],
+ q(mbati) => [
+ q(4165),
+ q(0),
+ ],
+ q(mbato) => [
+ q(2664),
+ q(0),
+ ],
+ q(mbay) => [
+ q(4653),
+ q(0),
+ ],
+ q(mbe) => [
+ q(4214),
+ q(0),
+ ],
+ q(mbe') => [
+ q(4543),
+ q(0),
+ ],
+ q(mbelime) => [
+ q(4469),
+ q(0),
+ ],
+ q(mbere) => [
+ q(4169),
+ q(0),
+ ],
+ q(mbesa) => [
+ q(7805),
+ q(0),
+ ],
+ q(mbo (cameroon)) => [
+ q(4115),
+ q(0),
+ ],
+ q(mbo (democratic republic of congo)) => [
+ q(7809),
+ q(0),
+ ],
+ q(mboi) => [
+ q(4420),
+ q(0),
+ ],
+ q(mboko) => [
+ q(4170),
+ q(0),
+ ],
+ q(mbole) => [
+ q(4167),
+ q(0),
+ ],
+ q(mbonga) => [
+ q(7349),
+ q(0),
+ ],
+ q(mbongno) => [
+ q(1181),
+ q(0),
+ ],
+ q(mbosi) => [
+ q(4172),
+ q(0),
+ ],
+ q(mbowe) => [
+ q(4641),
+ q(0),
+ ],
+ q(mbre) => [
+ q(4320),
+ q(0),
+ ],
+ q(mbu') => [
+ q(4560),
+ q(0),
+ ],
+ q(mbudum) => [
+ q(7351),
+ q(0),
+ ],
+ q(mbugu) => [
+ q(4253),
+ q(0),
+ ],
+ q(mbugwe) => [
+ q(4249),
+ q(0),
+ ],
+ q(mbuko) => [
+ q(4460),
+ q(0),
+ ],
+ q(mbukushu) => [
+ q(4271),
+ q(0),
+ ],
+ q(mbula) => [
+ q(4392),
+ q(0),
+ ],
+ q(mbula-bwazza) => [
+ q(4121),
+ q(0),
+ ],
+ q(mbule) => [
+ q(4345),
+ q(0),
+ ],
+ q(mbulungish) => [
+ q(4122),
+ q(0),
+ ],
+ q(mbum) => [
+ q(4156),
+ q(0),
+ ],
+ q(mbunda) => [
+ q(4137),
+ q(0),
+ ],
+ q(mbunga) => [
+ q(4248),
+ q(0),
+ ],
+ q(mburku) => [
+ q(1058),
+ q(0),
+ ],
+ q(mbwela) => [
+ q(4220),
+ q(0),
+ ],
+ q(mbya guarani) => [
+ q(2639),
+ q(0),
+ ],
+ q(me'en) => [
+ q(4664),
+ q(0),
+ ],
+ q(mea) => [
+ q(4182),
+ q(0),
+ ],
+ q(medebur) => [
+ q(4306),
+ q(0),
+ ],
+ q(media lengua) => [
+ q(4562),
+ q(0),
+ ],
+ q(mediak) => [
+ q(4624),
+ q(0),
+ ],
+ q(median) => [
+ q(7352),
+ q(0),
+ ],
+ q(mednyj aleut) => [
+ q(4561),
+ q(0),
+ ],
+ q(medumba) => [
+ q(1610),
+ q(0),
+ ],
+ q(mefele) => [
+ q(4209),
+ q(0),
+ ],
+ q(megam) => [
+ q(4181),
+ q(0),
+ ],
+ q(megleno romanian) => [
+ q(5843),
+ q(0),
+ ],
+ q(mehek) => [
+ q(5103),
+ q(0),
+ ],
+ q(mehinaku) => [
+ q(4374),
+ q(0),
+ ],
+ q(mehri) => [
+ q(2457),
+ q(0),
+ ],
+ q(mekeo) => [
+ q(4186),
+ q(0),
+ ],
+ q(mekmek) => [
+ q(4587),
+ q(0),
+ ],
+ q(mekwei) => [
+ q(4513),
+ q(0),
+ ],
+ q(mele-fila) => [
+ q(4631),
+ q(0),
+ ],
+ q(melo) => [
+ q(4223),
+ q(0),
+ ],
+ q(melpa) => [
+ q(4179),
+ q(0),
+ ],
+ q(memoni) => [
+ q(4125),
+ q(0),
+ ],
+ q(mendalam kayan) => [
+ q(7313),
+ q(0),
+ ],
+ q(mendankwe-nkwen) => [
+ q(4203),
+ q(0),
+ ],
+ q(mende) => [
+ q(0277),
+ q(0),
+ ],
+ q(mende (papua new guinea)) => [
+ q(6016),
+ q(0),
+ ],
+ q(mende (sierra leone)) => [
+ q(0277),
+ q(1),
+ ],
+ q(mengaka) => [
+ q(7354),
+ q(0),
+ ],
+ q(mengen) => [
+ q(4180),
+ q(0),
+ ],
+ q(mengisa) => [
+ q(4146),
+ q(0),
+ ],
+ q(menka) => [
+ q(4176),
+ q(0),
+ ],
+ q(menominee) => [
+ q(4199),
+ q(0),
+ ],
+ q(mentawai) => [
+ q(4622),
+ q(0),
+ ],
+ q(menya) => [
+ q(4144),
+ q(0),
+ ],
+ q(meoswar) => [
+ q(4600),
+ q(0),
+ ],
+ q(mer) => [
+ q(4409),
+ q(0),
+ ],
+ q(meramera) => [
+ q(4639),
+ q(0),
+ ],
+ q(merei) => [
+ q(3952),
+ q(0),
+ ],
+ q(merey) => [
+ q(4191),
+ q(0),
+ ],
+ q(meriam) => [
+ q(6862),
+ q(0),
+ ],
+ q(merlav) => [
+ q(4495),
+ q(0),
+ ],
+ q(meroitic) => [
+ q(7364),
+ q(0),
+ ],
+ q(meru) => [
+ q(4192),
+ q(0),
+ ],
+ q(merwari) => [
+ q(7191),
+ q(0),
+ ],
+ q(mesaka) => [
+ q(3015),
+ q(0),
+ ],
+ q(mescalero-chiricahua apache) => [
+ q(0847),
+ q(0),
+ ],
+ q(mese) => [
+ q(4135),
+ q(0),
+ ],
+ q(meskwaki) => [
+ q(5858),
+ q(0),
+ ],
+ q(mesme) => [
+ q(7764),
+ q(0),
+ ],
+ q(mesmes) => [
+ q(4669),
+ q(0),
+ ],
+ q(mesopotamian arabic) => [
+ q(0592),
+ q(0),
+ ],
+ q(mesqan) => [
+ q(4602),
+ q(0),
+ ],
+ q(messapic) => [
+ q(1793),
+ q(0),
+ ],
+ q(meta') => [
+ q(4239),
+ q(0),
+ ],
+ q(metlatonoc mixtec) => [
+ q(4648),
+ q(0),
+ ],
+ q(mewari) => [
+ q(4550),
+ q(0),
+ ],
+ q(mewati) => [
+ q(7203),
+ q(0),
+ ],
+ q(mexican sign language) => [
+ q(4218),
+ q(0),
+ ],
+ q(meyah) => [
+ q(4185),
+ q(0),
+ ],
+ q(mezontla popoloca) => [
+ q(5341),
+ q(0),
+ ],
+ q(mezquital otomi) => [
+ q(5293),
+ q(0),
+ ],
+ q(mfinu) => [
+ q(7792),
+ q(0),
+ ],
+ q(mfumte) => [
+ q(4816),
+ q(0),
+ ],
+ q(mi'kmaq) => [
+ q(0279),
+ q(0),
+ ],
+ q(miahuatlan zapotec) => [
+ q(7728),
+ q(0),
+ ],
+ q(miami) => [
+ q(4275),
+ q(0),
+ ],
+ q(mian) => [
+ q(4452),
+ q(0),
+ ],
+ q(miani) => [
+ q(5461),
+ q(0),
+ ],
+ q(michif) => [
+ q(1848),
+ q(0),
+ ],
+ q(michigamea) => [
+ q(1789),
+ q(0),
+ ],
+ q(michoacan mazahua) => [
+ q(4369),
+ q(0),
+ ],
+ q(michoacan nahuatl) => [
+ q(4755),
+ q(0),
+ ],
+ q(micmac) => [
+ q(0279),
+ q(0),
+ ],
+ q(mid grand valley dani) => [
+ q(2104),
+ q(0),
+ ],
+ q(mid-southern banda) => [
+ q(1245),
+ q(0),
+ ],
+ q(middle armenian) => [
+ q(0991),
+ q(0),
+ ],
+ q(middle breton) => [
+ q(7252),
+ q(0),
+ ],
+ q(middle cornish) => [
+ q(1808),
+ q(0),
+ ],
+ q(middle dutch (ca. 1050-1350)) => [
+ q(0115),
+ q(1),
+ ],
+ q(middle english (1100-1500)) => [
+ q(0124),
+ q(1),
+ ],
+ q(middle french (ca. 1400-1600)) => [
+ q(0138),
+ q(1),
+ ],
+ q(middle high german (ca. 1050-1500)) => [
+ q(0157),
+ q(1),
+ ],
+ q(middle hittite) => [
+ q(2833),
+ q(0),
+ ],
+ q(middle irish (900-1200)) => [
+ q(0278),
+ q(1),
+ ],
+ q(middle korean (10th-16th cent.)) => [
+ q(5211),
+ q(0),
+ ],
+ q(middle low german) => [
+ q(2544),
+ q(0),
+ ],
+ q(middle mongolian) => [
+ q(7375),
+ q(0),
+ ],
+ q(middle newar) => [
+ q(5117),
+ q(0),
+ ],
+ q(middle watut) => [
+ q(4444),
+ q(0),
+ ],
+ q(middle welsh) => [
+ q(7121),
+ q(0),
+ ],
+ q(midob) => [
+ q(4184),
+ q(0),
+ ],
+ q(migaama) => [
+ q(4390),
+ q(0),
+ ],
+ q(migabac) => [
+ q(4448),
+ q(0),
+ ],
+ q(migum) => [
+ q(3418),
+ q(0),
+ ],
+ q(miji) => [
+ q(6033),
+ q(0),
+ ],
+ q(miju-mishmi) => [
+ q(4636),
+ q(0),
+ ],
+ q(mikasuki) => [
+ q(4284),
+ q(0),
+ ],
+ q(mili) => [
+ q(7609),
+ q(0),
+ ],
+ q(miltu) => [
+ q(4352),
+ q(0),
+ ],
+ q(miluk) => [
+ q(2944),
+ q(0),
+ ],
+ q(milyan) => [
+ q(2949),
+ q(0),
+ ],
+ q(min bei chinese) => [
+ q(4404),
+ q(0),
+ ],
+ q(min dong chinese) => [
+ q(1702),
+ q(0),
+ ],
+ q(min nan chinese) => [
+ q(4711),
+ q(0),
+ ],
+ q(min zhong chinese) => [
+ q(1934),
+ q(0),
+ ],
+ q(mina (cameroon)) => [
+ q(2785),
+ q(0),
+ ],
+ q(mina (india)) => [
+ q(4660),
+ q(0),
+ ],
+ q(minaean) => [
+ q(2954),
+ q(0),
+ ],
+ q(minangkabau) => [
+ q(0280),
+ q(0),
+ ],
+ q(minanibai) => [
+ q(4148),
+ q(0),
+ ],
+ q(minaveha) => [
+ q(4590),
+ q(0),
+ ],
+ q(minderico) => [
+ q(2131),
+ q(0),
+ ],
+ q(mindiri) => [
+ q(4446),
+ q(0),
+ ],
+ q(mingang doso) => [
+ q(4332),
+ q(0),
+ ],
+ q(mingrelian) => [
+ q(7353),
+ q(0),
+ ],
+ q(minica huitoto) => [
+ q(2830),
+ q(0),
+ ],
+ q(minidien) => [
+ q(7095),
+ q(0),
+ ],
+ q(minigir) => [
+ q(6989),
+ q(0),
+ ],
+ q(minoan) => [
+ q(5233),
+ q(0),
+ ],
+ q(minokok) => [
+ q(4474),
+ q(0),
+ ],
+ q(minriq) => [
+ q(4405),
+ q(0),
+ ],
+ q(mintil) => [
+ q(4693),
+ q(0),
+ ],
+ q(minz zhuang) => [
+ q(7752),
+ q(0),
+ ],
+ q(miqie) => [
+ q(7571),
+ q(0),
+ ],
+ q(mirandese) => [
+ q(0294),
+ q(0),
+ ],
+ q(miraya bikol) => [
+ q(5734),
+ q(0),
+ ],
+ q(mirgan) => [
+ q(7853),
+ q(0),
+ ],
+ q(miriti) => [
+ q(4387),
+ q(0),
+ ],
+ q(miriwung) => [
+ q(4190),
+ q(0),
+ ],
+ q(mirpur panjabi) => [
+ q(5501),
+ q(0),
+ ],
+ q(miship) => [
+ q(4312),
+ q(0),
+ ],
+ q(misima-panaeati) => [
+ q(4456),
+ q(0),
+ ],
+ q(mising) => [
+ q(4490),
+ q(0),
+ ],
+ q(miskito) => [
+ q(4289),
+ q(0),
+ ],
+ q(mitla zapotec) => [
+ q(7736),
+ q(0),
+ ],
+ q(mitlatongo mixtec) => [
+ q(6995),
+ q(0),
+ ],
+ q(mittu) => [
+ q(4621),
+ q(0),
+ ],
+ q(mituku) => [
+ q(7803),
+ q(0),
+ ],
+ q(miu) => [
+ q(4447),
+ q(0),
+ ],
+ q(miwa) => [
+ q(6991),
+ q(0),
+ ],
+ q(mixed great andamanese) => [
+ q(2390),
+ q(0),
+ ],
+ q(mixifore) => [
+ q(4206),
+ q(0),
+ ],
+ q(mixtepec mixtec) => [
+ q(4294),
+ q(0),
+ ],
+ q(mixtepec zapotec) => [
+ q(7837),
+ q(0),
+ ],
+ q(miya) => [
+ q(4324),
+ q(0),
+ ],
+ q(miyako) => [
+ q(4586),
+ q(0),
+ ],
+ q(miyobe) => [
+ q(6148),
+ q(0),
+ ],
+ q(mlabri) => [
+ q(4484),
+ q(0),
+ ],
+ q(mlahso) => [
+ q(3886),
+ q(0),
+ ],
+ q(mlap) => [
+ q(3356),
+ q(0),
+ ],
+ q(mlomp) => [
+ q(4357),
+ q(0),
+ ],
+ q(mmaala) => [
+ q(4386),
+ q(0),
+ ],
+ q(mmen) => [
+ q(1149),
+ q(0),
+ ],
+ q(mo) => [
+ q(7110),
+ q(0),
+ ],
+ q(mo'da) => [
+ q(2423),
+ q(0),
+ ],
+ q(moabite) => [
+ q(5168),
+ q(0),
+ ],
+ q(moba) => [
+ q(4216),
+ q(0),
+ ],
+ q(mobilian) => [
+ q(4417),
+ q(0),
+ ],
+ q(mobumrin aizi) => [
+ q(0686),
+ q(0),
+ ],
+ q(mobwa karen) => [
+ q(3087),
+ q(0),
+ ],
+ q(mocheno) => [
+ q(4263),
+ q(0),
+ ],
+ q(mochi) => [
+ q(5220),
+ q(0),
+ ],
+ q(mochica) => [
+ q(5227),
+ q(0),
+ ],
+ q(mocho) => [
+ q(4252),
+ q(0),
+ ],
+ q(mocovi) => [
+ q(4416),
+ q(0),
+ ],
+ q(modang) => [
+ q(4630),
+ q(0),
+ ],
+ q(modern greek (1453-)) => [
+ q(0164),
+ q(1),
+ ],
+ q(modole) => [
+ q(4472),
+ q(0),
+ ],
+ q(moere) => [
+ q(4593),
+ q(0),
+ ],
+ q(mofu-gudur) => [
+ q(4279),
+ q(0),
+ ],
+ q(mogholi) => [
+ q(4259),
+ q(0),
+ ],
+ q(mogum) => [
+ q(4428),
+ q(0),
+ ],
+ q(mohave) => [
+ q(4429),
+ q(0),
+ ],
+ q(mohawk) => [
+ q(0288),
+ q(0),
+ ],
+ q(mohegan-pequot) => [
+ q(7404),
+ q(0),
+ ],
+ q(moi (congo)) => [
+ q(4430),
+ q(0),
+ ],
+ q(moi (indonesia)) => [
+ q(4640),
+ q(0),
+ ],
+ q(moikodi) => [
+ q(4333),
+ q(0),
+ ],
+ q(moingi) => [
+ q(4626),
+ q(0),
+ ],
+ q(moji) => [
+ q(7610),
+ q(0),
+ ],
+ q(mok) => [
+ q(4477),
+ q(0),
+ ],
+ q(moken) => [
+ q(4620),
+ q(0),
+ ],
+ q(mokerang) => [
+ q(4219),
+ q(0),
+ ],
+ q(mokilese) => [
+ q(4327),
+ q(0),
+ ],
+ q(moklen) => [
+ q(4330),
+ q(0),
+ ],
+ q(mokole) => [
+ q(4329),
+ q(0),
+ ],
+ q(mokpwe) => [
+ q(1430),
+ q(0),
+ ],
+ q(moksela) => [
+ q(6999),
+ q(0),
+ ],
+ q(moksha) => [
+ q(0275),
+ q(0),
+ ],
+ q(molale) => [
+ q(4106),
+ q(0),
+ ],
+ q(molbog) => [
+ q(5639),
+ q(0),
+ ],
+ q(moldavian) => [
+ q(0360),
+ q(0),
+ ],
+ q(moldova sign language) => [
+ q(7013),
+ q(0),
+ ],
+ q(moldovan) => [
+ q(0360),
+ q(0),
+ ],
+ q(molengue) => [
+ q(1569),
+ q(0),
+ ],
+ q(molima) => [
+ q(4431),
+ q(0),
+ ],
+ q(molmo one) => [
+ q(0946),
+ q(0),
+ ],
+ q(molo) => [
+ q(7801),
+ q(0),
+ ],
+ q(molof) => [
+ q(4519),
+ q(0),
+ ],
+ q(moloko) => [
+ q(4364),
+ q(0),
+ ],
+ q(mom jango) => [
+ q(6959),
+ q(0),
+ ],
+ q(moma) => [
+ q(4663),
+ q(0),
+ ],
+ q(momare) => [
+ q(4532),
+ q(0),
+ ],
+ q(mombo dogon) => [
+ q(2081),
+ q(0),
+ ],
+ q(mombum) => [
+ q(4522),
+ q(0),
+ ],
+ q(momina) => [
+ q(4368),
+ q(0),
+ ],
+ q(momuna) => [
+ q(4463),
+ q(0),
+ ],
+ q(mon) => [
+ q(4411),
+ q(0),
+ ],
+ q(mon-khmer languages) => [
+ q(0282),
+ q(0),
+ ],
+ q(monastic sign language) => [
+ q(4680),
+ q(0),
+ ],
+ q(monde) => [
+ q(4394),
+ q(0),
+ ],
+ q(mondropolon) => [
+ q(5019),
+ q(0),
+ ],
+ q(mong) => [
+ q(0179),
+ q(0),
+ ],
+ q(mong leng) => [
+ q(2790),
+ q(0),
+ ],
+ q(mong njua) => [
+ q(2790),
+ q(0),
+ ],
+ q(mongo) => [
+ q(0252),
+ q(0),
+ ],
+ q(mongol) => [
+ q(4244),
+ q(0),
+ ],
+ q(mongolia buriat) => [
+ q(1579),
+ q(0),
+ ],
+ q(mongolian) => [
+ q(0289),
+ q(0),
+ ],
+ q(mongolian languages) => [
+ q(0531),
+ q(0),
+ ],
+ q(mongolian sign language) => [
+ q(4525),
+ q(0),
+ ],
+ q(mongondow) => [
+ q(4419),
+ q(0),
+ ],
+ q(moni) => [
+ q(4414),
+ q(0),
+ ],
+ q(mono (cameroon)) => [
+ q(4503),
+ q(0),
+ ],
+ q(mono (democratic republic of congo)) => [
+ q(4398),
+ q(0),
+ ],
+ q(mono (solomon islands)) => [
+ q(4537),
+ q(0),
+ ],
+ q(mono (usa)) => [
+ q(4406),
+ q(0),
+ ],
+ q(monom) => [
+ q(4424),
+ q(0),
+ ],
+ q(monsang naga) => [
+ q(4950),
+ q(0),
+ ],
+ q(montagnais) => [
+ q(4418),
+ q(0),
+ ],
+ q(montol) => [
+ q(4544),
+ q(0),
+ ],
+ q(monumbo) => [
+ q(4637),
+ q(0),
+ ],
+ q(monzombo) => [
+ q(4421),
+ q(0),
+ ],
+ q(moo) => [
+ q(2670),
+ q(0),
+ ],
+ q(moose cree) => [
+ q(1853),
+ q(0),
+ ],
+ q(mopan maya) => [
+ q(4425),
+ q(0),
+ ],
+ q(mor (bomberai peninsula)) => [
+ q(4426),
+ q(0),
+ ],
+ q(mor (mor islands)) => [
+ q(4274),
+ q(0),
+ ],
+ q(moraid) => [
+ q(4514),
+ q(0),
+ ],
+ q(morawa) => [
+ q(4679),
+ q(0),
+ ],
+ q(morelos nahuatl) => [
+ q(4852),
+ q(0),
+ ],
+ q(morerebi) => [
+ q(7361),
+ q(0),
+ ],
+ q(moresada) => [
+ q(4530),
+ q(0),
+ ],
+ q(mori atas) => [
+ q(4690),
+ q(0),
+ ],
+ q(mori bawah) => [
+ q(7372),
+ q(0),
+ ],
+ q(morigi) => [
+ q(4154),
+ q(0),
+ ],
+ q(morisyen) => [
+ q(4204),
+ q(0),
+ ],
+ q(moro) => [
+ q(4427),
+ q(0),
+ ],
+ q(moroccan arabic) => [
+ q(0884),
+ q(0),
+ ],
+ q(moroccan sign language) => [
+ q(7365),
+ q(0),
+ ],
+ q(morokodo) => [
+ q(4227),
+ q(0),
+ ],
+ q(morom) => [
+ q(1104),
+ q(0),
+ ],
+ q(moronene) => [
+ q(4471),
+ q(0),
+ ],
+ q(morori) => [
+ q(4422),
+ q(0),
+ ],
+ q(morouas) => [
+ q(4498),
+ q(0),
+ ],
+ q(mortlockese) => [
+ q(4494),
+ q(0),
+ ],
+ q(moru) => [
+ q(4228),
+ q(0),
+ ],
+ q(mosimo) => [
+ q(4479),
+ q(0),
+ ],
+ q(mosiro) => [
+ q(4625),
+ q(0),
+ ],
+ q(moskona) => [
+ q(4542),
+ q(0),
+ ],
+ q(mossi) => [
+ q(0290),
+ q(0),
+ ],
+ q(mota) => [
+ q(4552),
+ q(0),
+ ],
+ q(motlav) => [
+ q(4363),
+ q(0),
+ ],
+ q(motu) => [
+ q(4195),
+ q(0),
+ ],
+ q(mouk-aria) => [
+ q(4610),
+ q(0),
+ ],
+ q(mountain koiali) => [
+ q(3523),
+ q(0),
+ ],
+ q(mouwase) => [
+ q(3103),
+ q(0),
+ ],
+ q(movima) => [
+ q(4689),
+ q(0),
+ ],
+ q(moyadan itneg) => [
+ q(3003),
+ q(0),
+ ],
+ q(moyon naga) => [
+ q(4957),
+ q(0),
+ ],
+ q(mozambican sign language) => [
+ q(4698),
+ q(0),
+ ],
+ q(mozarabic) => [
+ q(4635),
+ q(0),
+ ],
+ q(mpade) => [
+ q(4441),
+ q(0),
+ ],
+ q(mpalitjanh) => [
+ q(7398),
+ q(0),
+ ],
+ q(mpi) => [
+ q(4458),
+ q(0),
+ ],
+ q(mpiemo) => [
+ q(4150),
+ q(0),
+ ],
+ q(mpoto) => [
+ q(4434),
+ q(0),
+ ],
+ q(mpotovoro) => [
+ q(4596),
+ q(0),
+ ],
+ q(mpumpong) => [
+ q(4231),
+ q(0),
+ ],
+ q(mpuono) => [
+ q(7802),
+ q(0),
+ ],
+ q(mpur) => [
+ q(0725),
+ q(0),
+ ],
+ q(mro-khimi chin) => [
+ q(1792),
+ q(0),
+ ],
+ q(mru) => [
+ q(4497),
+ q(0),
+ ],
+ q(mser) => [
+ q(3549),
+ q(0),
+ ],
+ q(mt. iraya agta) => [
+ q(0919),
+ q(0),
+ ],
+ q(mt. iriga agta) => [
+ q(0678),
+ q(0),
+ ],
+ q(mualang) => [
+ q(4536),
+ q(0),
+ ],
+ q(mubami) => [
+ q(6701),
+ q(0),
+ ],
+ q(mubi) => [
+ q(4559),
+ q(0),
+ ],
+ q(muda) => [
+ q(7606),
+ q(0),
+ ],
+ q(mudbura) => [
+ q(4606),
+ q(0),
+ ],
+ q(mudhili gadaba) => [
+ q(2408),
+ q(0),
+ ],
+ q(mudu koraga) => [
+ q(6986),
+ q(0),
+ ],
+ q(muduga) => [
+ q(6830),
+ q(0),
+ ],
+ q(mufian) => [
+ q(0825),
+ q(0),
+ ],
+ q(mugom) => [
+ q(4567),
+ q(0),
+ ],
+ q(muinane) => [
+ q(1320),
+ q(0),
+ ],
+ q(mukha-dora) => [
+ q(4377),
+ q(0),
+ ],
+ q(mukulu) => [
+ q(4433),
+ q(0),
+ ],
+ q(mulaha) => [
+ q(4222),
+ q(0),
+ ],
+ q(mulam) => [
+ q(4355),
+ q(0),
+ ],
+ q(mulao) => [
+ q(2516),
+ q(0),
+ ],
+ q(mulgi) => [
+ q(4585),
+ q(0),
+ ],
+ q(mullu kurumba) => [
+ q(3503),
+ q(0),
+ ],
+ q(mullukmulluk) => [
+ q(4435),
+ q(0),
+ ],
+ q(multiple languages) => [
+ q(0291),
+ q(0),
+ ],
+ q(muluridyi) => [
+ q(7000),
+ q(0),
+ ],
+ q(mum) => [
+ q(3526),
+ q(0),
+ ],
+ q(mumuye) => [
+ q(4686),
+ q(0),
+ ],
+ q(mun chin) => [
+ q(4618),
+ q(0),
+ ],
+ q(muna) => [
+ q(4393),
+ q(0),
+ ],
+ q(munda) => [
+ q(6886),
+ q(0),
+ ],
+ q(munda languages) => [
+ q(0292),
+ q(0),
+ ],
+ q(mundabli) => [
+ q(1355),
+ q(0),
+ ],
+ q(mundang) => [
+ q(4558),
+ q(0),
+ ],
+ q(mundani) => [
+ q(4396),
+ q(0),
+ ],
+ q(mundari) => [
+ q(6885),
+ q(0),
+ ],
+ q(mundat) => [
+ q(4372),
+ q(0),
+ ],
+ q(mundu) => [
+ q(4564),
+ q(0),
+ ],
+ q(munduruku) => [
+ q(4670),
+ q(0),
+ ],
+ q(mungaka) => [
+ q(4260),
+ q(0),
+ ],
+ q(munggui) => [
+ q(4540),
+ q(0),
+ ],
+ q(mungkip) => [
+ q(4454),
+ q(0),
+ ],
+ q(muniche) => [
+ q(4668),
+ q(0),
+ ],
+ q(munit) => [
+ q(4535),
+ q(0),
+ ],
+ q(munji) => [
+ q(4399),
+ q(0),
+ ],
+ q(munsee) => [
+ q(6879),
+ q(0),
+ ],
+ q(muong) => [
+ q(4549),
+ q(0),
+ ],
+ q(muratayak) => [
+ q(0907),
+ q(0),
+ ],
+ q(murik (malaysia)) => [
+ q(4644),
+ q(0),
+ ],
+ q(murik (papua new guinea)) => [
+ q(4538),
+ q(0),
+ ],
+ q(murkim) => [
+ q(5785),
+ q(0),
+ ],
+ q(murle) => [
+ q(4572),
+ q(0),
+ ],
+ q(murrinh-patha) => [
+ q(4608),
+ q(0),
+ ],
+ q(mursi) => [
+ q(4578),
+ q(0),
+ ],
+ q(murui huitoto) => [
+ q(2851),
+ q(0),
+ ],
+ q(murupi) => [
+ q(4480),
+ q(0),
+ ],
+ q(muruwari) => [
+ q(7807),
+ q(0),
+ ],
+ q(musak) => [
+ q(4383),
+ q(0),
+ ],
+ q(musar) => [
+ q(4375),
+ q(0),
+ ],
+ q(musasa) => [
+ q(6096),
+ q(0),
+ ],
+ q(musey) => [
+ q(4512),
+ q(0),
+ ],
+ q(musgu) => [
+ q(4563),
+ q(0),
+ ],
+ q(mushungulu) => [
+ q(7348),
+ q(0),
+ ],
+ q(musi) => [
+ q(4565),
+ q(0),
+ ],
+ q(muskum) => [
+ q(4299),
+ q(0),
+ ],
+ q(muslim tat) => [
+ q(6723),
+ q(0),
+ ],
+ q(musom) => [
+ q(4527),
+ q(0),
+ ],
+ q(mussau-emira) => [
+ q(2248),
+ q(0),
+ ],
+ q(muthuvan) => [
+ q(4575),
+ q(0),
+ ],
+ q(mutu) => [
+ q(6731),
+ q(0),
+ ],
+ q(muya) => [
+ q(4589),
+ q(0),
+ ],
+ q(muyang) => [
+ q(4577),
+ q(0),
+ ],
+ q(muyuw) => [
+ q(4671),
+ q(0),
+ ],
+ q(muzi) => [
+ q(7622),
+ q(0),
+ ],
+ q(mvanip) => [
+ q(4136),
+ q(0),
+ ],
+ q(mvuba) => [
+ q(4634),
+ q(0),
+ ],
+ q(mwaghavul) => [
+ q(6255),
+ q(0),
+ ],
+ q(mwali comorian) => [
+ q(7115),
+ q(0),
+ ],
+ q(mwan) => [
+ q(4415),
+ q(0),
+ ],
+ q(mwani) => [
+ q(7142),
+ q(0),
+ ],
+ q(mwatebu) => [
+ q(4603),
+ q(0),
+ ],
+ q(mwera (chimwera)) => [
+ q(4607),
+ q(0),
+ ],
+ q(mwera (nyasa)) => [
+ q(4301),
+ q(0),
+ ],
+ q(mwerlap) => [
+ q(4495),
+ q(0),
+ ],
+ q(mwimbi-muthambi) => [
+ q(4619),
+ q(0),
+ ],
+ q(mwotlap) => [
+ q(4363),
+ q(0),
+ ],
+ q(mycenaean greek) => [
+ q(2550),
+ q(0),
+ ],
+ q(myene) => [
+ q(4656),
+ q(0),
+ ],
+ q(mysian) => [
+ q(7619),
+ q(0),
+ ],
+ q(mzieme naga) => [
+ q(4947),
+ q(0),
+ ],
+ q(n'ko) => [
+ q(0317),
+ q(0),
+ ],
+ q(n/u) => [
+ q(4823),
+ q(0),
+ ],
+ q(na) => [
+ q(4738),
+ q(0),
+ ],
+ q(na-dene languages) => [
+ q(0532),
+ q(0),
+ ],
+ q(na-meo) => [
+ q(4802),
+ q(0),
+ ],
+ q(naaba) => [
+ q(4712),
+ q(0),
+ ],
+ q(naasioi) => [
+ q(4715),
+ q(0),
+ ],
+ q(naba) => [
+ q(4395),
+ q(0),
+ ],
+ q(nabak) => [
+ q(4705),
+ q(0),
+ ],
+ q(nabi) => [
+ q(4557),
+ q(0),
+ ],
+ q(nachering) => [
+ q(4747),
+ q(0),
+ ],
+ q(nadeb) => [
+ q(4110),
+ q(0),
+ ],
+ q(nadruvian) => [
+ q(4770),
+ q(0),
+ ],
+ q(nafaanra) => [
+ q(4815),
+ q(0),
+ ],
+ q(nafi) => [
+ q(6184),
+ q(0),
+ ],
+ q(nafri) => [
+ q(5131),
+ q(0),
+ ],
+ q(nafusi) => [
+ q(3043),
+ q(0),
+ ],
+ q(naga pidgin) => [
+ q(4706),
+ q(0),
+ ],
+ q(nagarchal) => [
+ q(4726),
+ q(0),
+ ],
+ q(nage) => [
+ q(5121),
+ q(0),
+ ],
+ q(nagumi) => [
+ q(4837),
+ q(0),
+ ],
+ q(naha'ai) => [
+ q(4365),
+ q(0),
+ ],
+ q(nahali) => [
+ q(4940),
+ q(0),
+ ],
+ q(nahari) => [
+ q(4849),
+ q(0),
+ ],
+ q(nahavaq) => [
+ q(6122),
+ q(0),
+ ],
+ q(nahuatl languages) => [
+ q(0298),
+ q(0),
+ ],
+ q(nai) => [
+ q(1221),
+ q(0),
+ ],
+ q(najdi arabic) => [
+ q(0880),
+ q(0),
+ ],
+ q(naka'ela) => [
+ q(4704),
+ q(0),
+ ],
+ q(nakai) => [
+ q(4913),
+ q(0),
+ ],
+ q(nakame) => [
+ q(4865),
+ q(0),
+ ],
+ q(nakanai) => [
+ q(4708),
+ q(0),
+ ],
+ q(nakara) => [
+ q(4754),
+ q(0),
+ ],
+ q(nake) => [
+ q(4730),
+ q(0),
+ ],
+ q(naki) => [
+ q(4205),
+ q(0),
+ ],
+ q(nakwi) => [
+ q(4718),
+ q(0),
+ ],
+ q(nalca) => [
+ q(4929),
+ q(0),
+ ],
+ q(nali) => [
+ q(5059),
+ q(0),
+ ],
+ q(nalik) => [
+ q(4709),
+ q(0),
+ ],
+ q(nalogo) => [
+ q(4942),
+ q(0),
+ ],
+ q(nalu) => [
+ q(4707),
+ q(0),
+ ],
+ q(naluo yi) => [
+ q(7600),
+ q(0),
+ ],
+ q(nama (namibia)) => [
+ q(4713),
+ q(0),
+ ],
+ q(nama (papua new guinea)) => [
+ q(4966),
+ q(0),
+ ],
+ q(namakura) => [
+ q(4953),
+ q(0),
+ ],
+ q(namat) => [
+ q(4915),
+ q(0),
+ ],
+ q(nambo) => [
+ q(4756),
+ q(0),
+ ],
+ q(nambya) => [
+ q(4959),
+ q(0),
+ ],
+ q(namia) => [
+ q(4981),
+ q(0),
+ ],
+ q(namiae) => [
+ q(5107),
+ q(0),
+ ],
+ q(namibian sign language) => [
+ q(4737),
+ q(0),
+ ],
+ q(namla) => [
+ q(4700),
+ q(0),
+ ],
+ q(namo) => [
+ q(4649),
+ q(0),
+ ],
+ q(namonuito) => [
+ q(4962),
+ q(0),
+ ],
+ q(namosi-naitasiri-serua) => [
+ q(1543),
+ q(0),
+ ],
+ q(namuyi) => [
+ q(4967),
+ q(0),
+ ],
+ q(nanai) => [
+ q(2531),
+ q(0),
+ ],
+ q(nancere) => [
+ q(4971),
+ q(0),
+ ],
+ q(nande) => [
+ q(4970),
+ q(0),
+ ],
+ q(nandi) => [
+ q(4878),
+ q(0),
+ ],
+ q(nanerige senoufo) => [
+ q(5945),
+ q(0),
+ ],
+ q(nanga dama dogon) => [
+ q(5160),
+ q(0),
+ ],
+ q(nankina) => [
+ q(4979),
+ q(0),
+ ],
+ q(nanti) => [
+ q(1828),
+ q(0),
+ ],
+ q(nanticoke) => [
+ q(4987),
+ q(0),
+ ],
+ q(nanubae) => [
+ q(0646),
+ q(0),
+ ],
+ q(napo lowland quechua) => [
+ q(5683),
+ q(0),
+ ],
+ q(napu) => [
+ q(5023),
+ q(0),
+ ],
+ q(nar phu) => [
+ q(5013),
+ q(0),
+ ],
+ q(nara) => [
+ q(5030),
+ q(0),
+ ],
+ q(narak) => [
+ q(4702),
+ q(0),
+ ],
+ q(narango) => [
+ q(5033),
+ q(0),
+ ],
+ q(narau) => [
+ q(5130),
+ q(0),
+ ],
+ q(nari nari) => [
+ q(5808),
+ q(0),
+ ],
+ q(narim) => [
+ q(3995),
+ q(0),
+ ],
+ q(naro) => [
+ q(4857),
+ q(0),
+ ],
+ q(narom) => [
+ q(5036),
+ q(0),
+ ],
+ q(narragansett) => [
+ q(7381),
+ q(0),
+ ],
+ q(narrinyeri) => [
+ q(4719),
+ q(0),
+ ],
+ q(narua) => [
+ q(5041),
+ q(0),
+ ],
+ q(narungga) => [
+ q(4985),
+ q(0),
+ ],
+ q(nasal) => [
+ q(5065),
+ q(0),
+ ],
+ q(nasarian) => [
+ q(5106),
+ q(0),
+ ],
+ q(naskapi) => [
+ q(5052),
+ q(0),
+ ],
+ q(natagaimas) => [
+ q(5075),
+ q(0),
+ ],
+ q(natanzi) => [
+ q(5080),
+ q(0),
+ ],
+ q(nataoran amis) => [
+ q(0710),
+ q(0),
+ ],
+ q(natchez) => [
+ q(4765),
+ q(0),
+ ],
+ q(nateni) => [
+ q(5071),
+ q(0),
+ ],
+ q(nathembo) => [
+ q(5067),
+ q(0),
+ ],
+ q(natioro) => [
+ q(5068),
+ q(0),
+ ],
+ q(natugu) => [
+ q(5076),
+ q(0),
+ ],
+ q(nauete) => [
+ q(5119),
+ q(0),
+ ],
+ q(naukan yupik) => [
+ q(7628),
+ q(0),
+ ],
+ q(nauna) => [
+ q(4757),
+ q(0),
+ ],
+ q(nauo) => [
+ q(5115),
+ q(0),
+ ],
+ q(nauru) => [
+ q(0301),
+ q(0),
+ ],
+ q(navaho) => [
+ q(0302),
+ q(0),
+ ],
+ q(navajo) => [
+ q(0302),
+ q(0),
+ ],
+ q(navut) => [
+ q(5063),
+ q(0),
+ ],
+ q(nawaru) => [
+ q(5116),
+ q(0),
+ ],
+ q(nawathinehena) => [
+ q(5109),
+ q(0),
+ ],
+ q(nawdm) => [
+ q(4968),
+ q(0),
+ ],
+ q(nawuri) => [
+ q(4717),
+ q(0),
+ ],
+ q(naxi) => [
+ q(5128),
+ q(0),
+ ],
+ q(nayi) => [
+ q(5012),
+ q(0),
+ ],
+ q(nayini) => [
+ q(5144),
+ q(0),
+ ],
+ q(ncane) => [
+ q(4760),
+ q(0),
+ ],
+ q(nchumbulu) => [
+ q(4938),
+ q(0),
+ ],
+ q(nda'nda') => [
+ q(4993),
+ q(0),
+ ],
+ q(ndai) => [
+ q(2526),
+ q(0),
+ ],
+ q(ndaka) => [
+ q(4775),
+ q(0),
+ ],
+ q(ndaktup) => [
+ q(4759),
+ q(0),
+ ],
+ q(ndali) => [
+ q(4772),
+ q(0),
+ ],
+ q(ndam) => [
+ q(4777),
+ q(0),
+ ],
+ q(ndamba) => [
+ q(4774),
+ q(0),
+ ],
+ q(ndasa) => [
+ q(4766),
+ q(0),
+ ],
+ q(ndau) => [
+ q(4768),
+ q(0),
+ ],
+ q(nde-gbite) => [
+ q(4792),
+ q(0),
+ ],
+ q(nde-nsele-nta) => [
+ q(4769),
+ q(0),
+ ],
+ q(ndebele, north) => [
+ q(0304),
+ q(0),
+ ],
+ q(ndebele, south) => [
+ q(0303),
+ q(0),
+ ],
+ q(ndemli) => [
+ q(4954),
+ q(0),
+ ],
+ q(ndendeule) => [
+ q(2098),
+ q(0),
+ ],
+ q(ndengereko) => [
+ q(4771),
+ q(0),
+ ],
+ q(nding) => [
+ q(2239),
+ q(0),
+ ],
+ q(ndo) => [
+ q(4779),
+ q(0),
+ ],
+ q(ndobo) => [
+ q(4785),
+ q(0),
+ ],
+ q(ndoe) => [
+ q(4722),
+ q(0),
+ ],
+ q(ndogo) => [
+ q(4788),
+ q(0),
+ ],
+ q(ndolo) => [
+ q(4776),
+ q(0),
+ ],
+ q(ndom) => [
+ q(5026),
+ q(0),
+ ],
+ q(ndombe) => [
+ q(4780),
+ q(0),
+ ],
+ q(ndonde hamba) => [
+ q(4889),
+ q(0),
+ ],
+ q(ndonga) => [
+ q(0305),
+ q(0),
+ ],
+ q(ndoola) => [
+ q(4781),
+ q(0),
+ ],
+ q(ndrag'ngith) => [
+ q(2016),
+ q(0),
+ ],
+ q(nduga) => [
+ q(4786),
+ q(0),
+ ],
+ q(ndumu) => [
+ q(4946),
+ q(0),
+ ],
+ q(ndunda) => [
+ q(5087),
+ q(0),
+ ],
+ q(ndunga) => [
+ q(4782),
+ q(0),
+ ],
+ q(ndut) => [
+ q(4784),
+ q(0),
+ ],
+ q(ndyuka-trio pidgin) => [
+ q(4899),
+ q(0),
+ ],
+ q(ndzwani comorian) => [
+ q(7149),
+ q(0),
+ ],
+ q(neapolitan) => [
+ q(0300),
+ q(0),
+ ],
+ q(nedebang) => [
+ q(4791),
+ q(0),
+ ],
+ q(nefamese) => [
+ q(4794),
+ q(0),
+ ],
+ q(negerhollands) => [
+ q(1976),
+ q(0),
+ ],
+ q(negeri sembilan malay) => [
+ q(7795),
+ q(0),
+ ],
+ q(negidal) => [
+ q(4795),
+ q(0),
+ ],
+ q(nehan) => [
+ q(5055),
+ q(0),
+ ],
+ q(nek) => [
+ q(4868),
+ q(0),
+ ],
+ q(nekgini) => [
+ q(4910),
+ q(0),
+ ],
+ q(neko) => [
+ q(4798),
+ q(0),
+ ],
+ q(neku) => [
+ q(4799),
+ q(0),
+ ],
+ q(nelemwa-nixumwak) => [
+ q(4793),
+ q(0),
+ ],
+ q(neme) => [
+ q(4809),
+ q(0),
+ ],
+ q(nemi) => [
+ q(4800),
+ q(0),
+ ],
+ q(nen) => [
+ q(5027),
+ q(0),
+ ],
+ q(nend) => [
+ q(0798),
+ q(0),
+ ],
+ q(nenets) => [
+ q(7659),
+ q(0),
+ ],
+ q(nenge) => [
+ q(2064),
+ q(0),
+ ],
+ q(nengone) => [
+ q(4801),
+ q(0),
+ ],
+ q(neo) => [
+ q(4807),
+ q(0),
+ ],
+ q(neo-hittite) => [
+ q(4797),
+ q(0),
+ ],
+ q(nepal bhasa) => [
+ q(0308),
+ q(0),
+ ],
+ q(nepalese sign language) => [
+ q(5056),
+ q(0),
+ ],
+ q(nepali) => [
+ q(0307),
+ q(0),
+ ],
+ q(nepali (individual language)) => [
+ q(5017),
+ q(0),
+ ],
+ q(nepali (macrolanguage)) => [
+ q(0307),
+ q(1),
+ ],
+ q(nepali kurux) => [
+ q(3707),
+ q(0),
+ ],
+ q(nete) => [
+ q(4806),
+ q(0),
+ ],
+ q(neve'ei) => [
+ q(7007),
+ q(0),
+ ],
+ q(neverver) => [
+ q(3870),
+ q(0),
+ ],
+ q(new caledonian javanese) => [
+ q(3034),
+ q(0),
+ ],
+ q(new zealand sign language) => [
+ q(5157),
+ q(0),
+ ],
+ q(newari) => [
+ q(0308),
+ q(0),
+ ],
+ q(neyo) => [
+ q(4810),
+ q(0),
+ ],
+ q(nez perce) => [
+ q(4811),
+ q(0),
+ ],
+ q(ngaanyatjarra) => [
+ q(5069),
+ q(0),
+ ],
+ q(ngabere) => [
+ q(2688),
+ q(0),
+ ],
+ q(ngad'a) => [
+ q(5122),
+ q(0),
+ ],
+ q(ngadjunmaya) => [
+ q(4900),
+ q(0),
+ ],
+ q(ngadjuri) => [
+ q(3129),
+ q(0),
+ ],
+ q(ngaing) => [
+ q(4974),
+ q(0),
+ ],
+ q(ngaju) => [
+ q(4872),
+ q(0),
+ ],
+ q(ngala) => [
+ q(5083),
+ q(0),
+ ],
+ q(ngalakan) => [
+ q(4869),
+ q(0),
+ ],
+ q(ngalkbun) => [
+ q(4826),
+ q(0),
+ ],
+ q(ngalum) => [
+ q(6316),
+ q(0),
+ ],
+ q(ngam) => [
+ q(4945),
+ q(0),
+ ],
+ q(ngamambo) => [
+ q(4740),
+ q(0),
+ ],
+ q(ngambay) => [
+ q(5873),
+ q(0),
+ ],
+ q(ngamini) => [
+ q(4964),
+ q(0),
+ ],
+ q(ngamo) => [
+ q(4727),
+ q(0),
+ ],
+ q(ngan'gityemerri) => [
+ q(4710),
+ q(0),
+ ],
+ q(nganasan) => [
+ q(4877),
+ q(0),
+ ],
+ q(ngandi) => [
+ q(4866),
+ q(0),
+ ],
+ q(ngando (central african republic)) => [
+ q(4820),
+ q(0),
+ ],
+ q(ngando (democratic republic of congo)) => [
+ q(5120),
+ q(0),
+ ],
+ q(ngandyera) => [
+ q(4973),
+ q(0),
+ ],
+ q(ngangam) => [
+ q(2556),
+ q(0),
+ ],
+ q(nganyaywana) => [
+ q(5151),
+ q(0),
+ ],
+ q(ngarinman) => [
+ q(4729),
+ q(0),
+ ],
+ q(ngarinyin) => [
+ q(6882),
+ q(0),
+ ],
+ q(ngarla) => [
+ q(4937),
+ q(0),
+ ],
+ q(ngarluma) => [
+ q(5035),
+ q(0),
+ ],
+ q(ngas) => [
+ q(0794),
+ q(0),
+ ],
+ q(ngasa) => [
+ q(5049),
+ q(0),
+ ],
+ q(ngatik men's creole) => [
+ q(4828),
+ q(0),
+ ],
+ q(ngawn chin) => [
+ q(1807),
+ q(0),
+ ],
+ q(ngawun) => [
+ q(5127),
+ q(0),
+ ],
+ q(ngayawung) => [
+ q(5112),
+ q(0),
+ ],
+ q(ngazidja comorian) => [
+ q(7746),
+ q(0),
+ ],
+ q(ngbaka) => [
+ q(4817),
+ q(0),
+ ],
+ q(ngbaka ma'bo) => [
+ q(4731),
+ q(0),
+ ],
+ q(ngbaka manza) => [
+ q(4822),
+ q(0),
+ ],
+ q(ngbee) => [
+ q(3064),
+ q(0),
+ ],
+ q(ngbinda) => [
+ q(4724),
+ q(0),
+ ],
+ q(ngbundu) => [
+ q(5100),
+ q(0),
+ ],
+ q(ngelima) => [
+ q(0661),
+ q(0),
+ ],
+ q(ngemba) => [
+ q(4821),
+ q(0),
+ ],
+ q(ngeq) => [
+ q(4835),
+ q(0),
+ ],
+ q(ngete) => [
+ q(4982),
+ q(0),
+ ],
+ q(nggem) => [
+ q(4735),
+ q(0),
+ ],
+ q(nggwahyi) => [
+ q(4839),
+ q(0),
+ ],
+ q(ngie) => [
+ q(4825),
+ q(0),
+ ],
+ q(ngiemboon) => [
+ q(4976),
+ q(0),
+ ],
+ q(ngile) => [
+ q(3092),
+ q(0),
+ ],
+ q(ngindo) => [
+ q(4984),
+ q(0),
+ ],
+ q(ngiti) => [
+ q(4885),
+ q(0),
+ ],
+ q(ngizim) => [
+ q(4824),
+ q(0),
+ ],
+ q(ngkalmpw kanum) => [
+ q(3190),
+ q(0),
+ ],
+ q(ngom) => [
+ q(5029),
+ q(0),
+ ],
+ q(ngomba) => [
+ q(3067),
+ q(0),
+ ],
+ q(ngombale) => [
+ q(4928),
+ q(0),
+ ],
+ q(ngombe (central african republic)) => [
+ q(4952),
+ q(0),
+ ],
+ q(ngombe (democratic republic of congo)) => [
+ q(4819),
+ q(0),
+ ],
+ q(ngong) => [
+ q(4991),
+ q(0),
+ ],
+ q(ngongo) => [
+ q(5005),
+ q(0),
+ ],
+ q(ngoni) => [
+ q(4830),
+ q(0),
+ ],
+ q(ngoreme) => [
+ q(4832),
+ q(0),
+ ],
+ q(ngoshie) => [
+ q(5050),
+ q(0),
+ ],
+ q(ngul) => [
+ q(4936),
+ q(0),
+ ],
+ q(ngulu) => [
+ q(4831),
+ q(0),
+ ],
+ q(nguluwan) => [
+ q(5102),
+ q(0),
+ ],
+ q(ngumbi) => [
+ q(5088),
+ q(0),
+ ],
+ q(ngundi) => [
+ q(4778),
+ q(0),
+ ],
+ q(ngundu) => [
+ q(5084),
+ q(0),
+ ],
+ q(ngungwel) => [
+ q(4841),
+ q(0),
+ ],
+ q(nguon) => [
+ q(5094),
+ q(0),
+ ],
+ q(ngura) => [
+ q(4742),
+ q(0),
+ ],
+ q(ngurimi) => [
+ q(4832),
+ q(0),
+ ],
+ q(ngurmbur) => [
+ q(5042),
+ q(0),
+ ],
+ q(ngwaba) => [
+ q(4838),
+ q(0),
+ ],
+ q(ngwe) => [
+ q(5111),
+ q(0),
+ ],
+ q(ngwo) => [
+ q(4829),
+ q(0),
+ ],
+ q(nhanda) => [
+ q(4842),
+ q(0),
+ ],
+ q(nhengatu) => [
+ q(7660),
+ q(0),
+ ],
+ q(nhuwala) => [
+ q(4847),
+ q(0),
+ ],
+ q(nias) => [
+ q(0309),
+ q(0),
+ ],
+ q(nicaragua creole english) => [
+ q(1625),
+ q(0),
+ ],
+ q(nicaraguan sign language) => [
+ q(4761),
+ q(0),
+ ],
+ q(nicarao) => [
+ q(5550),
+ q(0),
+ ],
+ q(niellim) => [
+ q(4867),
+ q(0),
+ ],
+ q(niger-kordofanian languages) => [
+ q(0310),
+ q(0),
+ ],
+ q(nigeria mambila) => [
+ q(4684),
+ q(0),
+ ],
+ q(nigerian fulfulde) => [
+ q(2384),
+ q(0),
+ ],
+ q(nigerian pidgin) => [
+ q(5368),
+ q(0),
+ ],
+ q(nigerian sign language) => [
+ q(5051),
+ q(0),
+ ],
+ q(nihali) => [
+ q(4935),
+ q(0),
+ ],
+ q(nii) => [
+ q(4871),
+ q(0),
+ ],
+ q(nijadali) => [
+ q(4703),
+ q(0),
+ ],
+ q(niksek) => [
+ q(2414),
+ q(0),
+ ],
+ q(nila) => [
+ q(4874),
+ q(0),
+ ],
+ q(nilamba) => [
+ q(4875),
+ q(0),
+ ],
+ q(nilo-saharan languages) => [
+ q(0406),
+ q(0),
+ ],
+ q(nimadi) => [
+ q(4997),
+ q(0),
+ ],
+ q(nimanbur) => [
+ q(4958),
+ q(0),
+ ],
+ q(nimbari) => [
+ q(4960),
+ q(0),
+ ],
+ q(nimboran) => [
+ q(4879),
+ q(0),
+ ],
+ q(nimi) => [
+ q(4880),
+ q(0),
+ ],
+ q(nimo) => [
+ q(4883),
+ q(0),
+ ],
+ q(nimoa) => [
+ q(4965),
+ q(0),
+ ],
+ q(ninam) => [
+ q(5983),
+ q(0),
+ ],
+ q(ninde) => [
+ q(4611),
+ q(0),
+ ],
+ q(nindi) => [
+ q(5123),
+ q(0),
+ ],
+ q(ningera) => [
+ q(4743),
+ q(0),
+ ],
+ q(ninggerum) => [
+ q(5129),
+ q(0),
+ ],
+ q(ningil) => [
+ q(4886),
+ q(0),
+ ],
+ q(ningye) => [
+ q(4986),
+ q(0),
+ ],
+ q(ninia yali) => [
+ q(4934),
+ q(0),
+ ],
+ q(ninzo) => [
+ q(4876),
+ q(0),
+ ],
+ q(nipsan) => [
+ q(5021),
+ q(0),
+ ],
+ q(nisa) => [
+ q(4898),
+ q(0),
+ ],
+ q(nisenan) => [
+ q(5066),
+ q(0),
+ ],
+ q(nisga'a) => [
+ q(4750),
+ q(0),
+ ],
+ q(nisi (china)) => [
+ q(7669),
+ q(0),
+ ],
+ q(niuafo'ou) => [
+ q(5092),
+ q(0),
+ ],
+ q(niuatoputapu) => [
+ q(4918),
+ q(0),
+ ],
+ q(niuean) => [
+ q(0311),
+ q(0),
+ ],
+ q(nivacle) => [
+ q(1646),
+ q(0),
+ ],
+ q(njalgulgule) => [
+ q(4893),
+ q(0),
+ ],
+ q(njebi) => [
+ q(5154),
+ q(0),
+ ],
+ q(njen) => [
+ q(4892),
+ q(0),
+ ],
+ q(njerep) => [
+ q(4897),
+ q(0),
+ ],
+ q(njyem) => [
+ q(4902),
+ q(0),
+ ],
+ q(nkami) => [
+ q(4919),
+ q(0),
+ ],
+ q(nkangala) => [
+ q(4916),
+ q(0),
+ ],
+ q(nkari) => [
+ q(4927),
+ q(0),
+ ],
+ q(nkem-nkum) => [
+ q(2982),
+ q(0),
+ ],
+ q(nkhumbi) => [
+ q(3327),
+ q(0),
+ ],
+ q(nkongho) => [
+ q(4906),
+ q(0),
+ ],
+ q(nkonya) => [
+ q(4917),
+ q(0),
+ ],
+ q(nkoroo) => [
+ q(4926),
+ q(0),
+ ],
+ q(nkoya) => [
+ q(4904),
+ q(0),
+ ],
+ q(nkukoli) => [
+ q(4733),
+ q(0),
+ ],
+ q(nkutu) => [
+ q(4925),
+ q(0),
+ ],
+ q(nnam) => [
+ q(4734),
+ q(0),
+ ],
+ q(no linguistic content) => [
+ q(0485),
+ q(0),
+ ],
+ q(nobiin) => [
+ q(2336),
+ q(0),
+ ],
+ q(nobonob) => [
+ q(2409),
+ q(0),
+ ],
+ q(nocaman) => [
+ q(5003),
+ q(0),
+ ],
+ q(nocte naga) => [
+ q(4888),
+ q(0),
+ ],
+ q(nogai) => [
+ q(0314),
+ q(0),
+ ],
+ q(noiri) => [
+ q(5000),
+ q(0),
+ ],
+ q(nokuku) => [
+ q(4914),
+ q(0),
+ ],
+ q(nomaande) => [
+ q(3850),
+ q(0),
+ ],
+ q(nomane) => [
+ q(4998),
+ q(0),
+ ],
+ q(nomatsiguenga) => [
+ q(5007),
+ q(0),
+ ],
+ q(nomu) => [
+ q(4999),
+ q(0),
+ ],
+ q(nong zhuang) => [
+ q(7758),
+ q(0),
+ ],
+ q(nonuya) => [
+ q(5001),
+ q(0),
+ ],
+ q(nooksack) => [
+ q(5002),
+ q(0),
+ ],
+ q(noon) => [
+ q(6110),
+ q(0),
+ ],
+ q(noone) => [
+ q(4859),
+ q(0),
+ ],
+ q(nopala chatino) => [
+ q(1928),
+ q(0),
+ ],
+ q(noric) => [
+ q(5031),
+ q(0),
+ ],
+ q(norn) => [
+ q(5037),
+ q(0),
+ ],
+ q(norra) => [
+ q(5039),
+ q(0),
+ ],
+ q(norse, old) => [
+ q(0315),
+ q(0),
+ ],
+ q(north alaskan inupiatun) => [
+ q(2286),
+ q(0),
+ ],
+ q(north ambrym) => [
+ q(4373),
+ q(0),
+ ],
+ q(north american indian languages) => [
+ q(0299),
+ q(0),
+ ],
+ q(north asmat) => [
+ q(4921),
+ q(0),
+ ],
+ q(north awyu) => [
+ q(7572),
+ q(0),
+ ],
+ q(north azerbaijani) => [
+ q(1017),
+ q(0),
+ ],
+ q(north babar) => [
+ q(1068),
+ q(0),
+ ],
+ q(north bolivian quechua) => [
+ q(5662),
+ q(0),
+ ],
+ q(north caucasian languages) => [
+ q(0495),
+ q(0),
+ ],
+ q(north central mixe) => [
+ q(4803),
+ q(0),
+ ],
+ q(north efate) => [
+ q(3946),
+ q(0),
+ ],
+ q(north fali) => [
+ q(2347),
+ q(0),
+ ],
+ q(north germanic languages) => [
+ q(0506),
+ q(0),
+ ],
+ q(north giziga) => [
+ q(2514),
+ q(0),
+ ],
+ q(north junin quechua) => [
+ q(5682),
+ q(0),
+ ],
+ q(north levantine arabic) => [
+ q(0837),
+ q(0),
+ ],
+ q(north marquesan) => [
+ q(4499),
+ q(0),
+ ],
+ q(north mesopotamian arabic) => [
+ q(1005),
+ q(0),
+ ],
+ q(north mofu) => [
+ q(4210),
+ q(0),
+ ],
+ q(north moluccan malay) => [
+ q(4100),
+ q(0),
+ ],
+ q(north muyu) => [
+ q(3606),
+ q(0),
+ ],
+ q(north ndebele) => [
+ q(0304),
+ q(0),
+ ],
+ q(north nuaulu) => [
+ q(4977),
+ q(0),
+ ],
+ q(north picene) => [
+ q(5038),
+ q(0),
+ ],
+ q(north slavey) => [
+ q(5909),
+ q(0),
+ ],
+ q(north tairora) => [
+ q(6354),
+ q(0),
+ ],
+ q(north tanna) => [
+ q(6590),
+ q(0),
+ ],
+ q(north wahgi) => [
+ q(7086),
+ q(0),
+ ],
+ q(north watut) => [
+ q(6880),
+ q(0),
+ ],
+ q(northeast kiwai) => [
+ q(3352),
+ q(0),
+ ],
+ q(northeast maidu) => [
+ q(4963),
+ q(0),
+ ],
+ q(northeast pashayi) => [
+ q(0629),
+ q(0),
+ ],
+ q(northeastern dinka) => [
+ q(2046),
+ q(0),
+ ],
+ q(northeastern pomo) => [
+ q(5384),
+ q(0),
+ ],
+ q(northeastern thai) => [
+ q(6722),
+ q(0),
+ ],
+ q(northern alta) => [
+ q(0865),
+ q(0),
+ ],
+ q(northern altai) => [
+ q(0929),
+ q(0),
+ ],
+ q(northern amami-oshima) => [
+ q(5853),
+ q(0),
+ ],
+ q(northern bai) => [
+ q(1139),
+ q(0),
+ ],
+ q(northern betsimisaraka malagasy) => [
+ q(1315),
+ q(0),
+ ],
+ q(northern binukidnon) => [
+ q(3735),
+ q(0),
+ ],
+ q(northern bobo madare) => [
+ q(1053),
+ q(0),
+ ],
+ q(northern bontok) => [
+ q(5733),
+ q(0),
+ ],
+ q(northern catanduanes bikol) => [
+ q(1897),
+ q(0),
+ ],
+ q(northern conchucos ancash quechua) => [
+ q(5699),
+ q(0),
+ ],
+ q(northern dagara) => [
+ q(2010),
+ q(0),
+ ],
+ q(northern dong) => [
+ q(2111),
+ q(0),
+ ],
+ q(northern east cree) => [
+ q(1852),
+ q(0),
+ ],
+ q(northern embera) => [
+ q(2253),
+ q(0),
+ ],
+ q(northern frisian) => [
+ q(0140),
+ q(0),
+ ],
+ q(northern ghale) => [
+ q(2496),
+ q(0),
+ ],
+ q(northern gondi) => [
+ q(2563),
+ q(0),
+ ],
+ q(northern grebo) => [
+ q(2424),
+ q(0),
+ ],
+ q(northern guiyang hmong) => [
+ q(2842),
+ q(0),
+ ],
+ q(northern guiyang miao) => [
+ q(2842),
+ q(0),
+ ],
+ q(northern haida) => [
+ q(2724),
+ q(0),
+ ],
+ q(northern hindko) => [
+ q(2792),
+ q(0),
+ ],
+ q(northern huishui hmong) => [
+ q(2770),
+ q(0),
+ ],
+ q(northern huishui miao) => [
+ q(2770),
+ q(0),
+ ],
+ q(northern kalapuya) => [
+ q(5040),
+ q(0),
+ ],
+ q(northern kankanay) => [
+ q(7377),
+ q(0),
+ ],
+ q(northern khmer) => [
+ q(3708),
+ q(0),
+ ],
+ q(northern kissi) => [
+ q(3544),
+ q(0),
+ ],
+ q(northern kurdish) => [
+ q(3448),
+ q(0),
+ ],
+ q(northern luri) => [
+ q(4018),
+ q(0),
+ ],
+ q(northern mashan hmong) => [
+ q(2775),
+ q(0),
+ ],
+ q(northern mashan miao) => [
+ q(2775),
+ q(0),
+ ],
+ q(northern muji) => [
+ q(7621),
+ q(0),
+ ],
+ q(northern nago) => [
+ q(7311),
+ q(0),
+ ],
+ q(northern ngbandi) => [
+ q(4818),
+ q(0),
+ ],
+ q(northern nisu) => [
+ q(7576),
+ q(0),
+ ],
+ q(northern nuni) => [
+ q(5101),
+ q(0),
+ ],
+ q(northern oaxaca nahuatl) => [
+ q(4863),
+ q(0),
+ ],
+ q(northern ohlone) => [
+ q(1881),
+ q(0),
+ ],
+ q(northern one) => [
+ q(5251),
+ q(0),
+ ],
+ q(northern paiute) => [
+ q(5329),
+ q(0),
+ ],
+ q(northern pame) => [
+ q(5497),
+ q(0),
+ ],
+ q(northern pashto) => [
+ q(5353),
+ q(0),
+ ],
+ q(northern pastaza quichua) => [
+ q(5688),
+ q(0),
+ ],
+ q(northern pomo) => [
+ q(5388),
+ q(0),
+ ],
+ q(northern puebla nahuatl) => [
+ q(4753),
+ q(0),
+ ],
+ q(northern pumi) => [
+ q(5490),
+ q(0),
+ ],
+ q(northern qiandong miao) => [
+ q(2727),
+ q(0),
+ ],
+ q(northern qiang) => [
+ q(1798),
+ q(0),
+ ],
+ q(northern rengma naga) => [
+ q(4980),
+ q(0),
+ ],
+ q(northern roglai) => [
+ q(5815),
+ q(0),
+ ],
+ q(northern sami) => [
+ q(0388),
+ q(0),
+ ],
+ q(northern sierra miwok) => [
+ q(5057),
+ q(0),
+ ],
+ q(northern sorsoganon) => [
+ q(1271),
+ q(0),
+ ],
+ q(northern sotho) => [
+ q(0318),
+ q(0),
+ ],
+ q(northern subanen) => [
+ q(6226),
+ q(0),
+ ],
+ q(northern tarahumara) => [
+ q(6470),
+ q(0),
+ ],
+ q(northern tepehuan) => [
+ q(5073),
+ q(0),
+ ],
+ q(northern thai) => [
+ q(4996),
+ q(0),
+ ],
+ q(northern tiwa) => [
+ q(6766),
+ q(0),
+ ],
+ q(northern tlaxiaco mixtec) => [
+ q(7450),
+ q(0),
+ ],
+ q(northern toussian) => [
+ q(6693),
+ q(0),
+ ],
+ q(northern tujia) => [
+ q(6510),
+ q(0),
+ ],
+ q(northern tutchone) => [
+ q(6716),
+ q(0),
+ ],
+ q(northern uzbek) => [
+ q(6933),
+ q(0),
+ ],
+ q(northern yukaghir) => [
+ q(7581),
+ q(0),
+ ],
+ q(northwest alaska inupiatun) => [
+ q(2287),
+ q(0),
+ ],
+ q(northwest gbaya) => [
+ q(2680),
+ q(0),
+ ],
+ q(northwest maidu) => [
+ q(4298),
+ q(0),
+ ],
+ q(northwest oaxaca mixtec) => [
+ q(4627),
+ q(0),
+ ],
+ q(northwest pashayi) => [
+ q(2532),
+ q(0),
+ ],
+ q(northwestern dinka) => [
+ q(2052),
+ q(0),
+ ],
+ q(northwestern fars) => [
+ q(2329),
+ q(0),
+ ],
+ q(northwestern kolami) => [
+ q(3262),
+ q(0),
+ ],
+ q(northwestern nisu) => [
+ q(5048),
+ q(0),
+ ],
+ q(northwestern ojibwa) => [
+ q(5194),
+ q(0),
+ ],
+ q(northwestern tamang) => [
+ q(6564),
+ q(0),
+ ],
+ q(norwegian) => [
+ q(0316),
+ q(0),
+ ],
+ q(norwegian bokmal) => [
+ q(0313),
+ q(0),
+ ],
+ q(norwegian nynorsk) => [
+ q(0312),
+ q(0),
+ ],
+ q(norwegian sign language) => [
+ q(5053),
+ q(0),
+ ],
+ q(not applicable) => [
+ q(0485),
+ q(0),
+ ],
+ q(notre) => [
+ q(1301),
+ q(0),
+ ],
+ q(notsi) => [
+ q(4749),
+ q(0),
+ ],
+ q(nottoway) => [
+ q(5077),
+ q(0),
+ ],
+ q(nottoway-meherrin) => [
+ q(5118),
+ q(0),
+ ],
+ q(novial) => [
+ q(5009),
+ q(0),
+ ],
+ q(noy) => [
+ q(5011),
+ q(0),
+ ],
+ q(nsari) => [
+ q(0895),
+ q(0),
+ ],
+ q(nsenga) => [
+ q(5047),
+ q(0),
+ ],
+ q(nshi) => [
+ q(5045),
+ q(0),
+ ],
+ q(nsongo) => [
+ q(5064),
+ q(0),
+ ],
+ q(ntcham) => [
+ q(1498),
+ q(0),
+ ],
+ q(ntomba) => [
+ q(5072),
+ q(0),
+ ],
+ q(nubaca) => [
+ q(1027),
+ q(0),
+ ],
+ q(nubi) => [
+ q(3200),
+ q(0),
+ ],
+ q(nubian languages) => [
+ q(0319),
+ q(0),
+ ],
+ q(nubri) => [
+ q(3602),
+ q(0),
+ ],
+ q(nuer) => [
+ q(5098),
+ q(0),
+ ],
+ q(nugunu (australia)) => [
+ q(4989),
+ q(0),
+ ],
+ q(nugunu (cameroon)) => [
+ q(7510),
+ q(0),
+ ],
+ q(nuk) => [
+ q(4995),
+ q(0),
+ ],
+ q(nukak maku) => [
+ q(4118),
+ q(0),
+ ],
+ q(nukna) => [
+ q(3425),
+ q(0),
+ ],
+ q(nukuini) => [
+ q(5082),
+ q(0),
+ ],
+ q(nukumanu) => [
+ q(5096),
+ q(0),
+ ],
+ q(nukuoro) => [
+ q(4920),
+ q(0),
+ ],
+ q(nukuria) => [
+ q(5097),
+ q(0),
+ ],
+ q(numana-nunku-gbantu-numbu) => [
+ q(4736),
+ q(0),
+ ],
+ q(numanggang) => [
+ q(5004),
+ q(0),
+ ],
+ q(numbami) => [
+ q(6013),
+ q(0),
+ ],
+ q(nume) => [
+ q(6458),
+ q(0),
+ ],
+ q(numee) => [
+ q(3222),
+ q(0),
+ ],
+ q(numidian) => [
+ q(5126),
+ q(0),
+ ],
+ q(nung (viet nam)) => [
+ q(5099),
+ q(0),
+ ],
+ q(nungali) => [
+ q(5086),
+ q(0),
+ ],
+ q(nunggubuyu) => [
+ q(5104),
+ q(0),
+ ],
+ q(nungu) => [
+ q(5765),
+ q(0),
+ ],
+ q(nuosu) => [
+ q(0189),
+ q(0),
+ ],
+ q(nupbikha) => [
+ q(5014),
+ q(0),
+ ],
+ q(nupe-nupe-tako) => [
+ q(5095),
+ q(0),
+ ],
+ q(nupode huitoto) => [
+ q(2854),
+ q(0),
+ ],
+ q(nusa laut) => [
+ q(5091),
+ q(0),
+ ],
+ q(nusu) => [
+ q(5085),
+ q(0),
+ ],
+ q(nuu-chah-nulth) => [
+ q(5090),
+ q(0),
+ ],
+ q(nuuchahnulth) => [
+ q(5090),
+ q(0),
+ ],
+ q(nyabwa) => [
+ q(5110),
+ q(0),
+ ],
+ q(nyaheun) => [
+ q(4808),
+ q(0),
+ ],
+ q(nyahkur) => [
+ q(1672),
+ q(0),
+ ],
+ q(nyakyusa-ngonde) => [
+ q(5152),
+ q(0),
+ ],
+ q(nyalayu) => [
+ q(7603),
+ q(0),
+ ],
+ q(nyali) => [
+ q(4933),
+ q(0),
+ ],
+ q(nyam) => [
+ q(4951),
+ q(0),
+ ],
+ q(nyamal) => [
+ q(4941),
+ q(0),
+ ],
+ q(nyambo) => [
+ q(5010),
+ q(0),
+ ],
+ q(nyamusa-molo) => [
+ q(5114),
+ q(0),
+ ],
+ q(nyamwanga) => [
+ q(4615),
+ q(0),
+ ],
+ q(nyamwezi) => [
+ q(0322),
+ q(0),
+ ],
+ q(nyaneka) => [
+ q(5141),
+ q(0),
+ ],
+ q(nyang'i) => [
+ q(5143),
+ q(0),
+ ],
+ q(nyanga) => [
+ q(5140),
+ q(0),
+ ],
+ q(nyanga-li) => [
+ q(5133),
+ q(0),
+ ],
+ q(nyangatom) => [
+ q(4978),
+ q(0),
+ ],
+ q(nyangbo) => [
+ q(5132),
+ q(0),
+ ],
+ q(nyangga) => [
+ q(4992),
+ q(0),
+ ],
+ q(nyangumarta) => [
+ q(4969),
+ q(0),
+ ],
+ q(nyanja) => [
+ q(0321),
+ q(0),
+ ],
+ q(nyankole) => [
+ q(0323),
+ q(0),
+ ],
+ q(nyankpa) => [
+ q(7547),
+ q(0),
+ ],
+ q(nyarafolo senoufo) => [
+ q(5953),
+ q(0),
+ ],
+ q(nyaturu) => [
+ q(5764),
+ q(0),
+ ],
+ q(nyaw) => [
+ q(5150),
+ q(0),
+ ],
+ q(nyawaygi) => [
+ q(5147),
+ q(0),
+ ],
+ q(nyemba) => [
+ q(4721),
+ q(0),
+ ],
+ q(nyengo) => [
+ q(5135),
+ q(0),
+ ],
+ q(nyenkha) => [
+ q(4796),
+ q(0),
+ ],
+ q(nyeu) => [
+ q(5142),
+ q(0),
+ ],
+ q(nyigina) => [
+ q(5138),
+ q(0),
+ ],
+ q(nyiha (malawi)) => [
+ q(5145),
+ q(0),
+ ],
+ q(nyiha (tanzania)) => [
+ q(4870),
+ q(0),
+ ],
+ q(nyika (malawi and zambia)) => [
+ q(4924),
+ q(0),
+ ],
+ q(nyika (tanzania)) => [
+ q(4922),
+ q(0),
+ ],
+ q(nyindrou) => [
+ q(3892),
+ q(0),
+ ],
+ q(nyindu) => [
+ q(5137),
+ q(0),
+ ],
+ q(nyishi) => [
+ q(4903),
+ q(0),
+ ],
+ q(nynorsk, norwegian) => [
+ q(0312),
+ q(0),
+ ],
+ q(nyokon) => [
+ q(5108),
+ q(0),
+ ],
+ q(nyole) => [
+ q(5089),
+ q(0),
+ ],
+ q(nyong) => [
+ q(4569),
+ q(0),
+ ],
+ q(nyore) => [
+ q(5134),
+ q(0),
+ ],
+ q(nyoro) => [
+ q(0324),
+ q(0),
+ ],
+ q(nyulnyul) => [
+ q(5149),
+ q(0),
+ ],
+ q(nyunga) => [
+ q(5146),
+ q(0),
+ ],
+ q(nyungwe) => [
+ q(5148),
+ q(0),
+ ],
+ q(nzakambay) => [
+ q(5159),
+ q(0),
+ ],
+ q(nzakara) => [
+ q(5155),
+ q(0),
+ ],
+ q(nzanyi) => [
+ q(4887),
+ q(0),
+ ],
+ q(nzima) => [
+ q(0325),
+ q(0),
+ ],
+ q(o'chi'chi') => [
+ q(7383),
+ q(0),
+ ],
+ q(o'du) => [
+ q(6800),
+ q(0),
+ ],
+ q(obanliku) => [
+ q(1639),
+ q(0),
+ ],
+ q(obispeno) => [
+ q(5165),
+ q(0),
+ ],
+ q(oblo) => [
+ q(5167),
+ q(0),
+ ],
+ q(obo manobo) => [
+ q(5169),
+ q(0),
+ ],
+ q(obokuitai) => [
+ q(0653),
+ q(0),
+ ],
+ q(obolo) => [
+ q(0804),
+ q(0),
+ ],
+ q(obulom) => [
+ q(5172),
+ q(0),
+ ],
+ q(ocaina) => [
+ q(5173),
+ q(0),
+ ],
+ q(occidental) => [
+ q(0192),
+ q(0),
+ ],
+ q(occitan (post 1500)) => [
+ q(0326),
+ q(0),
+ ],
+ q(ocotepec mixtec) => [
+ q(4278),
+ q(0),
+ ],
+ q(ocotlan zapotec) => [
+ q(7718),
+ q(0),
+ ],
+ q(od) => [
+ q(5178),
+ q(0),
+ ],
+ q(odiai) => [
+ q(1192),
+ q(0),
+ ],
+ q(odoodee) => [
+ q(3382),
+ q(0),
+ ],
+ q(odual) => [
+ q(5180),
+ q(0),
+ ],
+ q(odut) => [
+ q(5177),
+ q(0),
+ ],
+ q(ofaye) => [
+ q(5267),
+ q(0),
+ ],
+ q(official aramaic (700-300 bce)) => [
+ q(0022),
+ q(0),
+ ],
+ q(ofo) => [
+ q(5181),
+ q(0),
+ ],
+ q(ogbah) => [
+ q(5185),
+ q(0),
+ ],
+ q(ogbia) => [
+ q(5184),
+ q(0),
+ ],
+ q(ogbogolo) => [
+ q(5187),
+ q(0),
+ ],
+ q(ogbronuagum) => [
+ q(5189),
+ q(0),
+ ],
+ q(ogea) => [
+ q(2277),
+ q(0),
+ ],
+ q(oirat) => [
+ q(0470),
+ q(0),
+ ],
+ q(oirata) => [
+ q(5192),
+ q(0),
+ ],
+ q(ojibwa) => [
+ q(0327),
+ q(0),
+ ],
+ q(ojitlan chinantec) => [
+ q(1724),
+ q(0),
+ ],
+ q(okanagan) => [
+ q(5201),
+ q(0),
+ ],
+ q(oki-no-erabu) => [
+ q(5212),
+ q(0),
+ ],
+ q(okiek) => [
+ q(5207),
+ q(0),
+ ],
+ q(oko-eni-osayen) => [
+ q(5215),
+ q(0),
+ ],
+ q(oko-juwoi) => [
+ q(5208),
+ q(0),
+ ],
+ q(okobo) => [
+ q(5202),
+ q(0),
+ ],
+ q(okodia) => [
+ q(5203),
+ q(0),
+ ],
+ q(okolod) => [
+ q(3547),
+ q(0),
+ ],
+ q(okpamheri) => [
+ q(5262),
+ q(0),
+ ],
+ q(okpe (northwestern edo)) => [
+ q(5218),
+ q(0),
+ ],
+ q(okpe (southwestern edo)) => [
+ q(5204),
+ q(0),
+ ],
+ q(oksapmin) => [
+ q(5264),
+ q(0),
+ ],
+ q(oku) => [
+ q(5216),
+ q(0),
+ ],
+ q(old aramaic (up to 700 bce)) => [
+ q(5163),
+ q(0),
+ ],
+ q(old avar) => [
+ q(5164),
+ q(0),
+ ],
+ q(old breton) => [
+ q(5171),
+ q(0),
+ ],
+ q(old bulgarian) => [
+ q(0086),
+ q(0),
+ ],
+ q(old burmese) => [
+ q(5170),
+ q(0),
+ ],
+ q(old chinese) => [
+ q(5174),
+ q(0),
+ ],
+ q(old church slavonic) => [
+ q(0086),
+ q(0),
+ ],
+ q(old cornish) => [
+ q(5175),
+ q(0),
+ ],
+ q(old dutch) => [
+ q(5179),
+ q(0),
+ ],
+ q(old english (ca. 450-1100)) => [
+ q(0018),
+ q(1),
+ ],
+ q(old french (842-ca. 1400)) => [
+ q(0139),
+ q(1),
+ ],
+ q(old frisian) => [
+ q(5182),
+ q(0),
+ ],
+ q(old georgian) => [
+ q(5186),
+ q(0),
+ ],
+ q(old high german (ca. 750-1050)) => [
+ q(0158),
+ q(1),
+ ],
+ q(old hittite) => [
+ q(5190),
+ q(0),
+ ],
+ q(old hungarian) => [
+ q(5191),
+ q(0),
+ ],
+ q(old irish (to 900)) => [
+ q(0377),
+ q(1),
+ ],
+ q(old japanese) => [
+ q(5197),
+ q(0),
+ ],
+ q(old kentish sign language) => [
+ q(5210),
+ q(0),
+ ],
+ q(old korean (3rd-9th cent.)) => [
+ q(5213),
+ q(0),
+ ],
+ q(old manipuri) => [
+ q(5235),
+ q(0),
+ ],
+ q(old marathi) => [
+ q(5236),
+ q(0),
+ ],
+ q(old mon) => [
+ q(5240),
+ q(0),
+ ],
+ q(old newari) => [
+ q(0320),
+ q(0),
+ ],
+ q(old norse) => [
+ q(0315),
+ q(1),
+ ],
+ q(old nubian) => [
+ q(5255),
+ q(0),
+ ],
+ q(old occitan (to 1500)) => [
+ q(0350),
+ q(2),
+ ],
+ q(old ossetic) => [
+ q(5261),
+ q(0),
+ ],
+ q(old persian (ca. 600-400 b.c.)) => [
+ q(0341),
+ q(1),
+ ],
+ q(old provencal (to 1500)) => [
+ q(0350),
+ q(1),
+ ],
+ q(old russian) => [
+ q(5279),
+ q(0),
+ ],
+ q(old saxon) => [
+ q(5290),
+ q(0),
+ ],
+ q(old slavonic) => [
+ q(0086),
+ q(0),
+ ],
+ q(old spanish) => [
+ q(5287),
+ q(0),
+ ],
+ q(old tamil) => [
+ q(5306),
+ q(0),
+ ],
+ q(old tibetan) => [
+ q(5291),
+ q(0),
+ ],
+ q(old turkish) => [
+ q(5295),
+ q(0),
+ ],
+ q(old uighur) => [
+ q(5311),
+ q(0),
+ ],
+ q(old welsh) => [
+ q(5315),
+ q(0),
+ ],
+ q(olekha) => [
+ q(5221),
+ q(0),
+ ],
+ q(olo) => [
+ q(5244),
+ q(0),
+ ],
+ q(oloma) => [
+ q(5222),
+ q(0),
+ ],
+ q(olrat) => [
+ q(5224),
+ q(0),
+ ],
+ q(olu'bo) => [
+ q(4058),
+ q(0),
+ ],
+ q(olukhayo) => [
+ q(3926),
+ q(0),
+ ],
+ q(olulumo-ikom) => [
+ q(2924),
+ q(0),
+ ],
+ q(oluluyia) => [
+ q(4067),
+ q(0),
+ ],
+ q(olumarachi) => [
+ q(4021),
+ q(0),
+ ],
+ q(olumarama) => [
+ q(4024),
+ q(0),
+ ],
+ q(olunyole) => [
+ q(5134),
+ q(0),
+ ],
+ q(olusamia) => [
+ q(4038),
+ q(0),
+ ],
+ q(olushisa) => [
+ q(3928),
+ q(0),
+ ],
+ q(oluta popoluca) => [
+ q(5472),
+ q(0),
+ ],
+ q(olutsotso) => [
+ q(4049),
+ q(0),
+ ],
+ q(oluwanga) => [
+ q(4075),
+ q(0),
+ ],
+ q(omagua) => [
+ q(5229),
+ q(0),
+ ],
+ q(omaha-ponca) => [
+ q(5225),
+ q(0),
+ ],
+ q(omani arabic) => [
+ q(0602),
+ q(0),
+ ],
+ q(ombamba) => [
+ q(4113),
+ q(0),
+ ],
+ q(ombo) => [
+ q(5232),
+ q(0),
+ ],
+ q(omejes) => [
+ q(5228),
+ q(0),
+ ],
+ q(ometepec nahuatl) => [
+ q(4858),
+ q(0),
+ ],
+ q(omi) => [
+ q(5230),
+ q(0),
+ ],
+ q(omie) => [
+ q(0828),
+ q(0),
+ ],
+ q(omok) => [
+ q(5231),
+ q(0),
+ ],
+ q(omotic languages) => [
+ q(0518),
+ q(0),
+ ],
+ q(omotik) => [
+ q(5237),
+ q(0),
+ ],
+ q(omurano) => [
+ q(5238),
+ q(0),
+ ],
+ q(ona) => [
+ q(5241),
+ q(0),
+ ],
+ q(oneida) => [
+ q(5243),
+ q(0),
+ ],
+ q(ong) => [
+ q(5258),
+ q(0),
+ ],
+ q(onge) => [
+ q(5259),
+ q(0),
+ ],
+ q(onin) => [
+ q(5245),
+ q(0),
+ ],
+ q(onin based pidgin) => [
+ q(5256),
+ q(0),
+ ],
+ q(oniyan) => [
+ q(1450),
+ q(0),
+ ],
+ q(onjob) => [
+ q(5246),
+ q(0),
+ ],
+ q(ono) => [
+ q(5252),
+ q(0),
+ ],
+ q(onobasulu) => [
+ q(5248),
+ q(0),
+ ],
+ q(onondaga) => [
+ q(5249),
+ q(0),
+ ],
+ q(ontenu) => [
+ q(5253),
+ q(0),
+ ],
+ q(ontong java) => [
+ q(5199),
+ q(0),
+ ],
+ q(oorlams) => [
+ q(5260),
+ q(0),
+ ],
+ q(opao) => [
+ q(5265),
+ q(0),
+ ],
+ q(opata) => [
+ q(5266),
+ q(0),
+ ],
+ q(opuuo) => [
+ q(3873),
+ q(0),
+ ],
+ q(orang kanaq) => [
+ q(5273),
+ q(0),
+ ],
+ q(orang seletar) => [
+ q(5276),
+ q(0),
+ ],
+ q(oraon sadri) => [
+ q(5928),
+ q(0),
+ ],
+ q(orejon) => [
+ q(5270),
+ q(0),
+ ],
+ q(oring) => [
+ q(5271),
+ q(0),
+ ],
+ q(oriya) => [
+ q(0328),
+ q(0),
+ ],
+ q(oriya (individual language)) => [
+ q(5282),
+ q(0),
+ ],
+ q(oriya (macrolanguage)) => [
+ q(0328),
+ q(1),
+ ],
+ q(orizaba nahuatl) => [
+ q(4939),
+ q(0),
+ ],
+ q(orma) => [
+ q(5269),
+ q(0),
+ ],
+ q(ormu) => [
+ q(5283),
+ q(0),
+ ],
+ q(ormuri) => [
+ q(5278),
+ q(0),
+ ],
+ q(oro) => [
+ q(5281),
+ q(0),
+ ],
+ q(oro win) => [
+ q(5280),
+ q(0),
+ ],
+ q(oroch) => [
+ q(5162),
+ q(0),
+ ],
+ q(oroha) => [
+ q(5268),
+ q(0),
+ ],
+ q(orok) => [
+ q(5161),
+ q(0),
+ ],
+ q(orokaiva) => [
+ q(5217),
+ q(0),
+ ],
+ q(oroko) => [
+ q(1110),
+ q(0),
+ ],
+ q(orokolo) => [
+ q(5274),
+ q(0),
+ ],
+ q(oromo) => [
+ q(0329),
+ q(0),
+ ],
+ q(oroqen) => [
+ q(5272),
+ q(0),
+ ],
+ q(orowe) => [
+ q(1383),
+ q(0),
+ ],
+ q(oruma) => [
+ q(5275),
+ q(0),
+ ],
+ q(orya) => [
+ q(6911),
+ q(0),
+ ],
+ q(osage) => [
+ q(0330),
+ q(0),
+ ],
+ q(osatu) => [
+ q(5288),
+ q(0),
+ ],
+ q(oscan) => [
+ q(5284),
+ q(0),
+ ],
+ q(osing) => [
+ q(5285),
+ q(0),
+ ],
+ q(ososo) => [
+ q(5286),
+ q(0),
+ ],
+ q(ossetian) => [
+ q(0331),
+ q(0),
+ ],
+ q(ossetic) => [
+ q(0331),
+ q(0),
+ ],
+ q(ot danum) => [
+ q(5292),
+ q(0),
+ ],
+ q(otank) => [
+ q(6919),
+ q(0),
+ ],
+ q(oti) => [
+ q(5294),
+ q(0),
+ ],
+ q(oto-manguean languages) => [
+ q(0517),
+ q(0),
+ ],
+ q(otomian languages) => [
+ q(0333),
+ q(0),
+ ],
+ q(otoro) => [
+ q(5300),
+ q(0),
+ ],
+ q(ottawa) => [
+ q(5304),
+ q(0),
+ ],
+ q(ottoman turkish (1500-1928)) => [
+ q(0332),
+ q(1),
+ ],
+ q(otuho) => [
+ q(4006),
+ q(0),
+ ],
+ q(otuke) => [
+ q(5303),
+ q(0),
+ ],
+ q(ouma) => [
+ q(5312),
+ q(0),
+ ],
+ q(oune) => [
+ q(5310),
+ q(0),
+ ],
+ q(owa) => [
+ q(6237),
+ q(0),
+ ],
+ q(owenia) => [
+ q(7196),
+ q(0),
+ ],
+ q(owiniga) => [
+ q(5314),
+ q(0),
+ ],
+ q(oy) => [
+ q(5316),
+ q(0),
+ ],
+ q(oya'oya) => [
+ q(5319),
+ q(0),
+ ],
+ q(oyda) => [
+ q(5317),
+ q(0),
+ ],
+ q(ozolotepec zapotec) => [
+ q(7729),
+ q(0),
+ ],
+ q(ozumacin chinantec) => [
+ q(1730),
+ q(0),
+ ],
+ q(pa di) => [
+ q(5375),
+ q(0),
+ ],
+ q(pa'a) => [
+ q(5560),
+ q(0),
+ ],
+ q(pa'o) => [
+ q(1288),
+ q(0),
+ ],
+ q(pa'o karen) => [
+ q(1288),
+ q(0),
+ ],
+ q(pa-hng) => [
+ q(5410),
+ q(0),
+ ],
+ q(paafang) => [
+ q(5399),
+ q(0),
+ ],
+ q(paakantyi) => [
+ q(2136),
+ q(0),
+ ],
+ q(paama) => [
+ q(5483),
+ q(0),
+ ],
+ q(paasaal) => [
+ q(6010),
+ q(0),
+ ],
+ q(pacahuara) => [
+ q(5370),
+ q(0),
+ ],
+ q(pacaraos quechua) => [
+ q(5684),
+ q(0),
+ ],
+ q(pacific gulf yupik) => [
+ q(2254),
+ q(0),
+ ],
+ q(pacoh) => [
+ q(5322),
+ q(0),
+ ],
+ q(padoe) => [
+ q(5377),
+ q(0),
+ ],
+ q(paekche) => [
+ q(5451),
+ q(0),
+ ],
+ q(paelignian) => [
+ q(5407),
+ q(0),
+ ],
+ q(paez) => [
+ q(5339),
+ q(0),
+ ],
+ q(pagi) => [
+ q(5404),
+ q(0),
+ ],
+ q(pagibete) => [
+ q(5324),
+ q(0),
+ ],
+ q(pagu) => [
+ q(5409),
+ q(0),
+ ],
+ q(pahanan agta) => [
+ q(0840),
+ q(0),
+ ],
+ q(pahari-potwari) => [
+ q(5419),
+ q(0),
+ ],
+ q(pahi) => [
+ q(3876),
+ q(0),
+ ],
+ q(pahlavani) => [
+ q(5422),
+ q(0),
+ ],
+ q(pahlavi) => [
+ q(0336),
+ q(0),
+ ],
+ q(pai tavytera) => [
+ q(5603),
+ q(0),
+ ],
+ q(paici) => [
+ q(5569),
+ q(0),
+ ],
+ q(paipai) => [
+ q(5548),
+ q(0),
+ ],
+ q(paite chin) => [
+ q(5366),
+ q(0),
+ ],
+ q(paiwan) => [
+ q(5640),
+ q(0),
+ ],
+ q(pak-tong) => [
+ q(5452),
+ q(0),
+ ],
+ q(pakaasnovos) => [
+ q(5334),
+ q(0),
+ ],
+ q(pakanha) => [
+ q(5454),
+ q(0),
+ ],
+ q(pakistan sign language) => [
+ q(5458),
+ q(0),
+ ],
+ q(paku) => [
+ q(5460),
+ q(0),
+ ],
+ q(paku karen) => [
+ q(3089),
+ q(0),
+ ],
+ q(pal) => [
+ q(0581),
+ q(0),
+ ],
+ q(palaic) => [
+ q(5474),
+ q(0),
+ ],
+ q(palaka senoufo) => [
+ q(5475),
+ q(0),
+ ],
+ q(palantla chinantec) => [
+ q(1831),
+ q(0),
+ ],
+ q(palauan) => [
+ q(0340),
+ q(0),
+ ],
+ q(palenquero) => [
+ q(5471),
+ q(0),
+ ],
+ q(pali) => [
+ q(0345),
+ q(0),
+ ],
+ q(palikur) => [
+ q(5478),
+ q(0),
+ ],
+ q(paliyan) => [
+ q(5361),
+ q(0),
+ ],
+ q(pallanganmiddang) => [
+ q(5486),
+ q(0),
+ ],
+ q(palor) => [
+ q(2324),
+ q(0),
+ ],
+ q(palpa) => [
+ q(5473),
+ q(0),
+ ],
+ q(palu'e) => [
+ q(5465),
+ q(0),
+ ],
+ q(paluan) => [
+ q(5482),
+ q(0),
+ ],
+ q(palula) => [
+ q(5415),
+ q(0),
+ ],
+ q(palumata) => [
+ q(5485),
+ q(0),
+ ],
+ q(palya bareli) => [
+ q(1396),
+ q(0),
+ ],
+ q(pam) => [
+ q(5495),
+ q(0),
+ ],
+ q(pambia) => [
+ q(5484),
+ q(0),
+ ],
+ q(pamlico) => [
+ q(5492),
+ q(0),
+ ],
+ q(pamona) => [
+ q(5488),
+ q(0),
+ ],
+ q(pamosu) => [
+ q(2743),
+ q(0),
+ ],
+ q(pampanga) => [
+ q(0337),
+ q(0),
+ ],
+ q(pamplona atta) => [
+ q(0927),
+ q(0),
+ ],
+ q(pana (burkina faso)) => [
+ q(5518),
+ q(0),
+ ],
+ q(pana (central african republic)) => [
+ q(5527),
+ q(0),
+ ],
+ q(panamanian sign language) => [
+ q(4040),
+ q(0),
+ ],
+ q(panamint) => [
+ q(5331),
+ q(0),
+ ],
+ q(panang) => [
+ q(5371),
+ q(0),
+ ],
+ q(panao huanuco quechua) => [
+ q(5697),
+ q(0),
+ ],
+ q(panara) => [
+ q(3555),
+ q(0),
+ ],
+ q(panasuan) => [
+ q(5593),
+ q(0),
+ ],
+ q(panawa) => [
+ q(5637),
+ q(0),
+ ],
+ q(pancana) => [
+ q(5517),
+ q(0),
+ ],
+ q(panchpargania) => [
+ q(6397),
+ q(0),
+ ],
+ q(pande) => [
+ q(1262),
+ q(0),
+ ],
+ q(pangasinan) => [
+ q(0335),
+ q(0),
+ ],
+ q(pangseng) => [
+ q(5408),
+ q(0),
+ ],
+ q(pangutaran sama) => [
+ q(6076),
+ q(0),
+ ],
+ q(pangwa) => [
+ q(5350),
+ q(0),
+ ],
+ q(pangwali) => [
+ q(5403),
+ q(0),
+ ],
+ q(panim) => [
+ q(5519),
+ q(0),
+ ],
+ q(paniya) => [
+ q(5362),
+ q(0),
+ ],
+ q(panjabi) => [
+ q(0338),
+ q(0),
+ ],
+ q(pankarare) => [
+ q(5336),
+ q(0),
+ ],
+ q(pankararu) => [
+ q(5338),
+ q(0),
+ ],
+ q(pankhu) => [
+ q(5453),
+ q(0),
+ ],
+ q(pannei) => [
+ q(5508),
+ q(0),
+ ],
+ q(pano) => [
+ q(4483),
+ q(0),
+ ],
+ q(panoan katukina) => [
+ q(3475),
+ q(0),
+ ],
+ q(panobo) => [
+ q(5516),
+ q(0),
+ ],
+ q(panytyima) => [
+ q(5524),
+ q(0),
+ ],
+ q(pao) => [
+ q(5546),
+ q(0),
+ ],
+ q(papantla totonac) => [
+ q(6614),
+ q(0),
+ ],
+ q(papapana) => [
+ q(5552),
+ q(0),
+ ],
+ q(papar) => [
+ q(2129),
+ q(0),
+ ],
+ q(papasena) => [
+ q(5332),
+ q(0),
+ ],
+ q(papel) => [
+ q(5348),
+ q(0),
+ ],
+ q(papi) => [
+ q(5547),
+ q(0),
+ ],
+ q(papiamento) => [
+ q(0339),
+ q(0),
+ ],
+ q(papitalai) => [
+ q(5333),
+ q(0),
+ ],
+ q(papora) => [
+ q(5559),
+ q(0),
+ ],
+ q(papuan languages) => [
+ q(0334),
+ q(0),
+ ],
+ q(papuan malay) => [
+ q(5504),
+ q(0),
+ ],
+ q(papuma) => [
+ q(5551),
+ q(0),
+ ],
+ q(para arara) => [
+ q(0552),
+ q(0),
+ ],
+ q(para gaviao) => [
+ q(2660),
+ q(0),
+ ],
+ q(para naga) => [
+ q(5652),
+ q(0),
+ ],
+ q(parachi) => [
+ q(5563),
+ q(0),
+ ],
+ q(paraguayan guarani) => [
+ q(2633),
+ q(0),
+ ],
+ q(paraguayan sign language) => [
+ q(5648),
+ q(0),
+ ],
+ q(parakana) => [
+ q(5328),
+ q(0),
+ ],
+ q(paranan) => [
+ q(5566),
+ q(0),
+ ],
+ q(paranawat) => [
+ q(5325),
+ q(0),
+ ],
+ q(paraujano) => [
+ q(5343),
+ q(0),
+ ],
+ q(parauk) => [
+ q(5570),
+ q(0),
+ ],
+ q(parawen) => [
+ q(5580),
+ q(0),
+ ],
+ q(pardhan) => [
+ q(5363),
+ q(0),
+ ],
+ q(pardhi) => [
+ q(5367),
+ q(0),
+ ],
+ q(pare) => [
+ q(5558),
+ q(0),
+ ],
+ q(parecis) => [
+ q(5321),
+ q(0),
+ ],
+ q(parenga) => [
+ q(5365),
+ q(0),
+ ],
+ q(pari) => [
+ q(3927),
+ q(0),
+ ],
+ q(parkari koli) => [
+ q(3668),
+ q(0),
+ ],
+ q(parkwa) => [
+ q(5345),
+ q(0),
+ ],
+ q(parsi) => [
+ q(5574),
+ q(0),
+ ],
+ q(parsi-dari) => [
+ q(5564),
+ q(0),
+ ],
+ q(parthian) => [
+ q(7405),
+ q(0),
+ ],
+ q(parya) => [
+ q(5330),
+ q(0),
+ ],
+ q(pashto) => [
+ q(0351),
+ q(0),
+ ],
+ q(pasi) => [
+ q(5596),
+ q(0),
+ ],
+ q(pass valley yali) => [
+ q(7496),
+ q(0),
+ ],
+ q(patamona) => [
+ q(5340),
+ q(0),
+ ],
+ q(patani) => [
+ q(5606),
+ q(0),
+ ],
+ q(pataxo ha-ha-hae) => [
+ q(5604),
+ q(0),
+ ],
+ q(patep) => [
+ q(5608),
+ q(0),
+ ],
+ q(pathiya) => [
+ q(5614),
+ q(0),
+ ],
+ q(patpatar) => [
+ q(2477),
+ q(0),
+ ],
+ q(pattani) => [
+ q(3776),
+ q(0),
+ ],
+ q(pattani malay) => [
+ q(4200),
+ q(0),
+ ],
+ q(paulohi) => [
+ q(5467),
+ q(0),
+ ],
+ q(paumari) => [
+ q(5323),
+ q(0),
+ ],
+ q(paunaka) => [
+ q(5513),
+ q(0),
+ ],
+ q(pauri bareli) => [
+ q(1138),
+ q(0),
+ ],
+ q(pauserna) => [
+ q(5592),
+ q(0),
+ ],
+ q(pawaia) => [
+ q(5636),
+ q(0),
+ ],
+ q(pawnee) => [
+ q(5335),
+ q(0),
+ ],
+ q(paynamar) => [
+ q(5498),
+ q(0),
+ ],
+ q(pe) => [
+ q(5327),
+ q(0),
+ ],
+ q(pear) => [
+ q(5357),
+ q(0),
+ ],
+ q(pech) => [
+ q(5337),
+ q(0),
+ ],
+ q(pecheneg) => [
+ q(7394),
+ q(0),
+ ],
+ q(pedi) => [
+ q(0318),
+ q(0),
+ ],
+ q(peere) => [
+ q(5400),
+ q(0),
+ ],
+ q(pei) => [
+ q(5555),
+ q(0),
+ ],
+ q(pekal) => [
+ q(5390),
+ q(0),
+ ],
+ q(pela) => [
+ q(1570),
+ q(0),
+ ],
+ q(pele-ata) => [
+ q(0910),
+ q(0),
+ ],
+ q(pelende) => [
+ q(5554),
+ q(0),
+ ],
+ q(pemon) => [
+ q(0818),
+ q(0),
+ ],
+ q(pemono) => [
+ q(5395),
+ q(0),
+ ],
+ q(penang sign language) => [
+ q(5588),
+ q(0),
+ ],
+ q(penchal) => [
+ q(5389),
+ q(0),
+ ],
+ q(pendau) => [
+ q(6878),
+ q(0),
+ ],
+ q(pengo) => [
+ q(5385),
+ q(0),
+ ],
+ q(pennsylvania german) => [
+ q(5374),
+ q(0),
+ ],
+ q(penoles mixtec) => [
+ q(4285),
+ q(0),
+ ],
+ q(penrhyn) => [
+ q(5511),
+ q(0),
+ ],
+ q(pentlatch) => [
+ q(5613),
+ q(0),
+ ],
+ q(perai) => [
+ q(7074),
+ q(0),
+ ],
+ q(peranakan indonesian) => [
+ q(5380),
+ q(0),
+ ],
+ q(peripheral mongolian) => [
+ q(4583),
+ q(0),
+ ],
+ q(pero) => [
+ q(5438),
+ q(0),
+ ],
+ q(persian) => [
+ q(0342),
+ q(0),
+ ],
+ q(persian sign language) => [
+ q(5585),
+ q(0),
+ ],
+ q(persian, old (ca.600-400 b.c.)) => [
+ q(0341),
+ q(0),
+ ],
+ q(peruvian sign language) => [
+ q(5571),
+ q(0),
+ ],
+ q(petapa zapotec) => [
+ q(7829),
+ q(0),
+ ],
+ q(petats) => [
+ q(5396),
+ q(0),
+ ],
+ q(petjo) => [
+ q(5397),
+ q(0),
+ ],
+ q(peve) => [
+ q(3955),
+ q(0),
+ ],
+ q(pfaelzisch) => [
+ q(5401),
+ q(0),
+ ],
+ q(phai) => [
+ q(5578),
+ q(0),
+ ],
+ q(phake) => [
+ q(5414),
+ q(0),
+ ],
+ q(phala) => [
+ q(7646),
+ q(0),
+ ],
+ q(phalura) => [
+ q(5415),
+ q(0),
+ ],
+ q(phana') => [
+ q(5418),
+ q(0),
+ ],
+ q(phangduwali) => [
+ q(5423),
+ q(0),
+ ],
+ q(phende) => [
+ q(5391),
+ q(0),
+ ],
+ q(philippine languages) => [
+ q(0343),
+ q(0),
+ ],
+ q(philippine sign language) => [
+ q(5595),
+ q(0),
+ ],
+ q(phimbi) => [
+ q(5416),
+ q(0),
+ ],
+ q(phoenician) => [
+ q(0344),
+ q(0),
+ ],
+ q(phola) => [
+ q(7648),
+ q(0),
+ ],
+ q(pholo) => [
+ q(7570),
+ q(0),
+ ],
+ q(phom naga) => [
+ q(5016),
+ q(0),
+ ],
+ q(phong-kniang) => [
+ q(5525),
+ q(0),
+ ],
+ q(phrae pwo karen) => [
+ q(3375),
+ q(0),
+ ],
+ q(phrygian) => [
+ q(7396),
+ q(0),
+ ],
+ q(phu thai) => [
+ q(5420),
+ q(0),
+ ],
+ q(phuan) => [
+ q(5421),
+ q(0),
+ ],
+ q(phudagi) => [
+ q(5411),
+ q(0),
+ ],
+ q(phuie) => [
+ q(5621),
+ q(0),
+ ],
+ q(phukha) => [
+ q(5413),
+ q(0),
+ ],
+ q(phuma) => [
+ q(7650),
+ q(0),
+ ],
+ q(phunoi) => [
+ q(5417),
+ q(0),
+ ],
+ q(phuong) => [
+ q(5412),
+ q(0),
+ ],
+ q(phupa) => [
+ q(7653),
+ q(0),
+ ],
+ q(phupha) => [
+ q(7649),
+ q(0),
+ ],
+ q(phuza) => [
+ q(7654),
+ q(0),
+ ],
+ q(piamatsina) => [
+ q(5609),
+ q(0),
+ ],
+ q(piame) => [
+ q(5436),
+ q(0),
+ ],
+ q(piapoco) => [
+ q(5437),
+ q(0),
+ ],
+ q(piaroa) => [
+ q(5427),
+ q(0),
+ ],
+ q(picard) => [
+ q(5359),
+ q(0),
+ ],
+ q(pichis asheninka) => [
+ q(1838),
+ q(0),
+ ],
+ q(pictish) => [
+ q(7397),
+ q(0),
+ ],
+ q(pidgin delaware) => [
+ q(1997),
+ q(0),
+ ],
+ q(piemontese) => [
+ q(5499),
+ q(0),
+ ],
+ q(pijao) => [
+ q(5433),
+ q(0),
+ ],
+ q(pije) => [
+ q(5447),
+ q(0),
+ ],
+ q(pijin) => [
+ q(5440),
+ q(0),
+ ],
+ q(pilaga) => [
+ q(5466),
+ q(0),
+ ],
+ q(pileni) => [
+ q(5443),
+ q(0),
+ ],
+ q(pilipino) => [
+ q(0133),
+ q(0),
+ ],
+ q(pima bajo) => [
+ q(5424),
+ q(0),
+ ],
+ q(pimbwe) => [
+ q(5444),
+ q(0),
+ ],
+ q(pinai-hagahai) => [
+ q(5515),
+ q(0),
+ ],
+ q(pingelapese) => [
+ q(5429),
+ q(0),
+ ],
+ q(pini) => [
+ q(5432),
+ q(0),
+ ],
+ q(pinigura) => [
+ q(5523),
+ q(0),
+ ],
+ q(pinji) => [
+ q(5426),
+ q(0),
+ ],
+ q(pinotepa nacional mixtec) => [
+ q(4287),
+ q(0),
+ ],
+ q(pintiini) => [
+ q(5605),
+ q(0),
+ ],
+ q(pintupi-luritja) => [
+ q(5442),
+ q(0),
+ ],
+ q(pinyin) => [
+ q(5526),
+ q(0),
+ ],
+ q(pipil) => [
+ q(5550),
+ q(0),
+ ],
+ q(piraha) => [
+ q(4666),
+ q(0),
+ ],
+ q(piratapuyo) => [
+ q(5439),
+ q(0),
+ ],
+ q(pirlatapa) => [
+ q(1575),
+ q(0),
+ ],
+ q(piro) => [
+ q(5428),
+ q(0),
+ ],
+ q(piru) => [
+ q(5556),
+ q(0),
+ ],
+ q(pisabo) => [
+ q(5430),
+ q(0),
+ ],
+ q(pisaflores tepehua) => [
+ q(6635),
+ q(0),
+ ],
+ q(piscataway) => [
+ q(5602),
+ q(0),
+ ],
+ q(pisidian) => [
+ q(7406),
+ q(0),
+ ],
+ q(pitcairn-norfolk) => [
+ q(5431),
+ q(0),
+ ],
+ q(pite sami) => [
+ q(6030),
+ q(0),
+ ],
+ q(piti) => [
+ q(5369),
+ q(0),
+ ],
+ q(pitjantjatjara) => [
+ q(5448),
+ q(0),
+ ],
+ q(pitta pitta) => [
+ q(5441),
+ q(0),
+ ],
+ q(piu) => [
+ q(5445),
+ q(0),
+ ],
+ q(piya-kwonci) => [
+ q(5446),
+ q(0),
+ ],
+ q(plains cree) => [
+ q(1851),
+ q(0),
+ ],
+ q(plains indian sign language) => [
+ q(5586),
+ q(0),
+ ],
+ q(plains miwok) => [
+ q(5502),
+ q(0),
+ ],
+ q(plapo krumen) => [
+ q(3607),
+ q(0),
+ ],
+ q(plateau malagasy) => [
+ q(5477),
+ q(0),
+ ],
+ q(plautdietsch) => [
+ q(5378),
+ q(0),
+ ],
+ q(playero) => [
+ q(2571),
+ q(0),
+ ],
+ q(pnar) => [
+ q(5354),
+ q(0),
+ ],
+ q(pochuri naga) => [
+ q(5020),
+ q(0),
+ ],
+ q(pochutec) => [
+ q(7402),
+ q(0),
+ ],
+ q(podena) => [
+ q(5376),
+ q(0),
+ ],
+ q(pogolo) => [
+ q(5545),
+ q(0),
+ ],
+ q(pohnpeian) => [
+ q(0347),
+ q(0),
+ ],
+ q(pokanga) => [
+ q(5535),
+ q(0),
+ ],
+ q(poke) => [
+ q(5531),
+ q(0),
+ ],
+ q(pokomo) => [
+ q(5450),
+ q(0),
+ ],
+ q(pokoot) => [
+ q(5455),
+ q(0),
+ ],
+ q(polabian) => [
+ q(5544),
+ q(0),
+ ],
+ q(polari) => [
+ q(5464),
+ q(0),
+ ],
+ q(polci) => [
+ q(5468),
+ q(0),
+ ],
+ q(polish) => [
+ q(0346),
+ q(0),
+ ],
+ q(polish sign language) => [
+ q(5594),
+ q(0),
+ ],
+ q(polonombauk) => [
+ q(5462),
+ q(0),
+ ],
+ q(pom) => [
+ q(5496),
+ q(0),
+ ],
+ q(pomo) => [
+ q(5494),
+ q(0),
+ ],
+ q(ponam) => [
+ q(4746),
+ q(0),
+ ],
+ q(ponares) => [
+ q(5529),
+ q(0),
+ ],
+ q(pongu) => [
+ q(5510),
+ q(0),
+ ],
+ q(ponosakan) => [
+ q(5520),
+ q(0),
+ ],
+ q(pontic) => [
+ q(5521),
+ q(0),
+ ],
+ q(ponyo-gongwang naga) => [
+ q(5015),
+ q(0),
+ ],
+ q(popti') => [
+ q(3022),
+ q(0),
+ ],
+ q(poqomam) => [
+ q(5528),
+ q(0),
+ ],
+ q(poqomchi') => [
+ q(5533),
+ q(0),
+ ],
+ q(porohanon) => [
+ q(5568),
+ q(0),
+ ],
+ q(port sandwich) => [
+ q(5601),
+ q(0),
+ ],
+ q(port vato) => [
+ q(5612),
+ q(0),
+ ],
+ q(portuguese) => [
+ q(0348),
+ q(0),
+ ],
+ q(portuguese sign language) => [
+ q(5597),
+ q(0),
+ ],
+ q(portuguese-based creoles and pidgins) => [
+ q(0095),
+ q(2),
+ ],
+ q(potawatomi) => [
+ q(5541),
+ q(0),
+ ],
+ q(potiguara) => [
+ q(5532),
+ q(0),
+ ],
+ q(pottangi ollar gadaba) => [
+ q(2443),
+ q(0),
+ ],
+ q(poule) => [
+ q(4519),
+ q(0),
+ ],
+ q(poumei naga) => [
+ q(5503),
+ q(0),
+ ],
+ q(pouye) => [
+ q(1595),
+ q(0),
+ ],
+ q(powari) => [
+ q(5642),
+ q(0),
+ ],
+ q(powhatan) => [
+ q(5435),
+ q(0),
+ ],
+ q(poyanawa) => [
+ q(5647),
+ q(0),
+ ],
+ q(prakrit languages) => [
+ q(0349),
+ q(0),
+ ],
+ q(prasuni) => [
+ q(5573),
+ q(0),
+ ],
+ q(pray 3) => [
+ q(5582),
+ q(0),
+ ],
+ q(primitive irish) => [
+ q(5406),
+ q(0),
+ ],
+ q(principense) => [
+ q(5565),
+ q(0),
+ ],
+ q(provencal) => [
+ q(0326),
+ q(0),
+ ],
+ q(provencal, old (to 1500)) => [
+ q(0350),
+ q(0),
+ ],
+ q(providencia sign language) => [
+ q(5583),
+ q(0),
+ ],
+ q(prussian) => [
+ q(5567),
+ q(0),
+ ],
+ q(psikye) => [
+ q(3654),
+ q(0),
+ ],
+ q(pu ko) => [
+ q(5624),
+ q(0),
+ ],
+ q(pu-xian chinese) => [
+ q(1839),
+ q(0),
+ ],
+ q(puare) => [
+ q(5633),
+ q(0),
+ ],
+ q(pudtol atta) => [
+ q(0923),
+ q(0),
+ ],
+ q(puelche) => [
+ q(5619),
+ q(0),
+ ],
+ q(puerto rican sign language) => [
+ q(5591),
+ q(0),
+ ],
+ q(puimei naga) => [
+ q(5022),
+ q(0),
+ ],
+ q(puinave) => [
+ q(5622),
+ q(0),
+ ],
+ q(pukapuka) => [
+ q(5456),
+ q(0),
+ ],
+ q(pulaar) => [
+ q(2372),
+ q(0),
+ ],
+ q(pulabu) => [
+ q(5627),
+ q(0),
+ ],
+ q(pular) => [
+ q(2375),
+ q(0),
+ ],
+ q(puluwatese) => [
+ q(5632),
+ q(0),
+ ],
+ q(puma) => [
+ q(5625),
+ q(0),
+ ],
+ q(pume) => [
+ q(7498),
+ q(0),
+ ],
+ q(pumpokol) => [
+ q(7400),
+ q(0),
+ ],
+ q(punan aput) => [
+ q(5618),
+ q(0),
+ ],
+ q(punan bah-biau) => [
+ q(5506),
+ q(0),
+ ],
+ q(punan batu 1) => [
+ q(5514),
+ q(0),
+ ],
+ q(punan merah) => [
+ q(5620),
+ q(0),
+ ],
+ q(punan merap) => [
+ q(5617),
+ q(0),
+ ],
+ q(punan tubu) => [
+ q(5623),
+ q(0),
+ ],
+ q(punic) => [
+ q(7407),
+ q(0),
+ ],
+ q(punjabi) => [
+ q(0338),
+ q(0),
+ ],
+ q(puno quechua) => [
+ q(5701),
+ q(0),
+ ],
+ q(punu) => [
+ q(5631),
+ q(0),
+ ],
+ q(puoc) => [
+ q(5626),
+ q(0),
+ ],
+ q(puquina) => [
+ q(5628),
+ q(0),
+ ],
+ q(puragi) => [
+ q(5579),
+ q(0),
+ ],
+ q(purari) => [
+ q(2869),
+ q(0),
+ ],
+ q(purepecha) => [
+ q(6703),
+ q(0),
+ ],
+ q(puri) => [
+ q(5576),
+ q(0),
+ ],
+ q(purik) => [
+ q(5581),
+ q(0),
+ ],
+ q(purisimeno) => [
+ q(5634),
+ q(0),
+ ],
+ q(puroik) => [
+ q(6257),
+ q(0),
+ ],
+ q(purubora) => [
+ q(5629),
+ q(0),
+ ],
+ q(purum) => [
+ q(5616),
+ q(0),
+ ],
+ q(purum naga) => [
+ q(5635),
+ q(0),
+ ],
+ q(pushto) => [
+ q(0351),
+ q(0),
+ ],
+ q(putai) => [
+ q(4211),
+ q(0),
+ ],
+ q(putoh) => [
+ q(5630),
+ q(0),
+ ],
+ q(putukwam) => [
+ q(0643),
+ q(0),
+ ],
+ q(puyo) => [
+ q(7408),
+ q(0),
+ ],
+ q(puyo-paekche) => [
+ q(7403),
+ q(0),
+ ],
+ q(puyuma) => [
+ q(5649),
+ q(0),
+ ],
+ q(pwaamei) => [
+ q(5487),
+ q(0),
+ ],
+ q(pwapwa) => [
+ q(5538),
+ q(0),
+ ],
+ q(pwo eastern karen) => [
+ q(3371),
+ q(0),
+ ],
+ q(pwo northern karen) => [
+ q(5643),
+ q(0),
+ ],
+ q(pwo western karen) => [
+ q(5641),
+ q(0),
+ ],
+ q(pyapun) => [
+ q(5372),
+ q(0),
+ ],
+ q(pye krumen) => [
+ q(5645),
+ q(0),
+ ],
+ q(pyen) => [
+ q(5651),
+ q(0),
+ ],
+ q(pyu) => [
+ q(5355),
+ q(0),
+ ],
+ q(pyu (myanmar)) => [
+ q(5650),
+ q(0),
+ ],
+ q(q'anjob'al) => [
+ q(3357),
+ q(0),
+ ],
+ q(qabiao) => [
+ q(3785),
+ q(0),
+ ],
+ q(qaqet) => [
+ q(1612),
+ q(0),
+ ],
+ q(qashqa'i) => [
+ q(5702),
+ q(0),
+ ],
+ q(qatabanian) => [
+ q(7410),
+ q(0),
+ ],
+ q(qau) => [
+ q(2598),
+ q(0),
+ ],
+ q(qawasqar) => [
+ q(0748),
+ q(0),
+ ],
+ q(qila muji) => [
+ q(7617),
+ q(0),
+ ],
+ q(qimant) => [
+ q(0681),
+ q(0),
+ ],
+ q(qiubei zhuang) => [
+ q(7851),
+ q(0),
+ ],
+ q(quapaw) => [
+ q(5653),
+ q(0),
+ ],
+ q(quebec sign language) => [
+ q(2331),
+ q(0),
+ ],
+ q(quechan) => [
+ q(7689),
+ q(0),
+ ],
+ q(quechua) => [
+ q(0353),
+ q(0),
+ ],
+ q(quechuan (family)) => [
+ q(0523),
+ q(0),
+ ],
+ q(quenya) => [
+ q(5708),
+ q(0),
+ ],
+ q(queretaro otomi) => [
+ q(5299),
+ q(0),
+ ],
+ q(quetzaltepec mixe) => [
+ q(5644),
+ q(0),
+ ],
+ q(queyu) => [
+ q(5687),
+ q(0),
+ ],
+ q(quiavicuzas zapotec) => [
+ q(7834),
+ q(0),
+ ],
+ q(quiche) => [
+ q(5655),
+ q(0),
+ ],
+ q(quileute) => [
+ q(5660),
+ q(0),
+ ],
+ q(quinault) => [
+ q(5664),
+ q(0),
+ ],
+ q(quinqui) => [
+ q(5666),
+ q(0),
+ ],
+ q(quioquitani-quieri zapotec) => [
+ q(7870),
+ q(0),
+ ],
+ q(quiotepec chinantec) => [
+ q(1726),
+ q(0),
+ ],
+ q(quiripi) => [
+ q(5709),
+ q(0),
+ ],
+ q(rabha) => [
+ q(5716),
+ q(0),
+ ],
+ q(rade) => [
+ q(5713),
+ q(0),
+ ],
+ q(raetic) => [
+ q(7417),
+ q(0),
+ ],
+ q(rahambuu) => [
+ q(5731),
+ q(0),
+ ],
+ q(rajah kabunsuwan manobo) => [
+ q(4468),
+ q(0),
+ ],
+ q(rajasthani) => [
+ q(0354),
+ q(0),
+ ],
+ q(rajbanshi) => [
+ q(5771),
+ q(0),
+ ],
+ q(raji) => [
+ q(5770),
+ q(0),
+ ],
+ q(rajong) => [
+ q(5769),
+ q(0),
+ ],
+ q(rajput garasia) => [
+ q(2599),
+ q(0),
+ ],
+ q(rakahanga-manihiki) => [
+ q(5774),
+ q(0),
+ ],
+ q(rakhine) => [
+ q(5775),
+ q(0),
+ ],
+ q(ralte) => [
+ q(5719),
+ q(0),
+ ],
+ q(rama) => [
+ q(5778),
+ q(0),
+ ],
+ q(ramoaaina) => [
+ q(5717),
+ q(0),
+ ],
+ q(ramopa) => [
+ q(3377),
+ q(0),
+ ],
+ q(rampi) => [
+ q(3912),
+ q(0),
+ ],
+ q(rana tharu) => [
+ q(6478),
+ q(0),
+ ],
+ q(rang) => [
+ q(5729),
+ q(0),
+ ],
+ q(rangkas) => [
+ q(5753),
+ q(0),
+ ],
+ q(ranglong) => [
+ q(5805),
+ q(0),
+ ],
+ q(rangpuri) => [
+ q(5777),
+ q(0),
+ ],
+ q(rao) => [
+ q(5722),
+ q(0),
+ ],
+ q(rapa) => [
+ q(5730),
+ q(0),
+ ],
+ q(rapanui) => [
+ q(0355),
+ q(0),
+ ],
+ q(rapoisi) => [
+ q(3745),
+ q(0),
+ ],
+ q(rapting) => [
+ q(5823),
+ q(0),
+ ],
+ q(rara bakati') => [
+ q(4017),
+ q(0),
+ ],
+ q(rarotongan) => [
+ q(0356),
+ q(0),
+ ],
+ q(rasawa) => [
+ q(5712),
+ q(0),
+ ],
+ q(ratagnon) => [
+ q(1483),
+ q(0),
+ ],
+ q(ratahan) => [
+ q(5831),
+ q(0),
+ ],
+ q(rathawi) => [
+ q(5833),
+ q(0),
+ ],
+ q(rathwi bareli) => [
+ q(1165),
+ q(0),
+ ],
+ q(raute) => [
+ q(5726),
+ q(0),
+ ],
+ q(ravula) => [
+ q(7540),
+ q(0),
+ ],
+ q(rawa) => [
+ q(5851),
+ q(0),
+ ],
+ q(rawang) => [
+ q(5728),
+ q(0),
+ ],
+ q(rawat) => [
+ q(3110),
+ q(0),
+ ],
+ q(rawngtu chin) => [
+ q(7075),
+ q(0),
+ ],
+ q(rawo) => [
+ q(5848),
+ q(0),
+ ],
+ q(rayon zoque) => [
+ q(7823),
+ q(0),
+ ],
+ q(razajerdi) => [
+ q(5725),
+ q(0),
+ ],
+ q(red gelao) => [
+ q(2513),
+ q(0),
+ ],
+ q(reel) => [
+ q(0928),
+ q(0),
+ ],
+ q(rejang) => [
+ q(5743),
+ q(0),
+ ],
+ q(rejang kayan) => [
+ q(5740),
+ q(0),
+ ],
+ q(reli) => [
+ q(5742),
+ q(0),
+ ],
+ q(rema) => [
+ q(1372),
+ q(0),
+ ],
+ q(rembarunga) => [
+ q(5779),
+ q(0),
+ ],
+ q(rembong) => [
+ q(5739),
+ q(0),
+ ],
+ q(remo) => [
+ q(5745),
+ q(0),
+ ],
+ q(remontado dumagat) => [
+ q(0674),
+ q(0),
+ ],
+ q(rempi) => [
+ q(5792),
+ q(0),
+ ],
+ q(remun) => [
+ q(3923),
+ q(0),
+ ],
+ q(rendille) => [
+ q(5744),
+ q(0),
+ ],
+ q(rengao) => [
+ q(5746),
+ q(0),
+ ],
+ q(rennell-bellona) => [
+ q(4410),
+ q(0),
+ ],
+ q(rennellese sign language) => [
+ q(5828),
+ q(0),
+ ],
+ q(repanbitip) => [
+ q(5822),
+ q(0),
+ ],
+ q(rer bare) => [
+ q(5747),
+ q(0),
+ ],
+ q(rerau) => [
+ q(5738),
+ q(0),
+ ],
+ q(rerep) => [
+ q(5405),
+ q(0),
+ ],
+ q(reserved for local use) => [
+ q(0352),
+ q(0),
+ ],
+ q(reshe) => [
+ q(5748),
+ q(0),
+ ],
+ q(resigaro) => [
+ q(5755),
+ q(0),
+ ],
+ q(retta) => [
+ q(5749),
+ q(0),
+ ],
+ q(reunion creole french) => [
+ q(5736),
+ q(0),
+ ],
+ q(reyesano) => [
+ q(5750),
+ q(0),
+ ],
+ q(riang (india)) => [
+ q(5760),
+ q(0),
+ ],
+ q(riang (myanmar)) => [
+ q(5763),
+ q(0),
+ ],
+ q(riantana) => [
+ q(5721),
+ q(0),
+ ],
+ q(ribun) => [
+ q(5766),
+ q(0),
+ ],
+ q(rien) => [
+ q(5761),
+ q(0),
+ ],
+ q(rikbaktsa) => [
+ q(5773),
+ q(0),
+ ],
+ q(rincon zapotec) => [
+ q(7731),
+ q(0),
+ ],
+ q(rinconada bikol) => [
+ q(1484),
+ q(0),
+ ],
+ q(ringgou) => [
+ q(5757),
+ q(0),
+ ],
+ q(ririo) => [
+ q(5824),
+ q(0),
+ ],
+ q(ritarungo) => [
+ q(5767),
+ q(0),
+ ],
+ q(riung) => [
+ q(5768),
+ q(0),
+ ],
+ q(riverain sango) => [
+ q(6114),
+ q(0),
+ ],
+ q(rogo) => [
+ q(5812),
+ q(0),
+ ],
+ q(rohingya) => [
+ q(5758),
+ q(0),
+ ],
+ q(roma) => [
+ q(5789),
+ q(0),
+ ],
+ q(romagnol) => [
+ q(5754),
+ q(0),
+ ],
+ q(romam) => [
+ q(5799),
+ q(0),
+ ],
+ q(romance languages) => [
+ q(0357),
+ q(0),
+ ],
+ q(romanian) => [
+ q(0360),
+ q(0),
+ ],
+ q(romanian sign language) => [
+ q(5794),
+ q(0),
+ ],
+ q(romano-greek) => [
+ q(5752),
+ q(0),
+ ],
+ q(romano-serbian) => [
+ q(5827),
+ q(0),
+ ],
+ q(romanova) => [
+ q(5797),
+ q(0),
+ ],
+ q(romansh) => [
+ q(0358),
+ q(0),
+ ],
+ q(romany) => [
+ q(0359),
+ q(0),
+ ],
+ q(romblomanon) => [
+ q(5816),
+ q(0),
+ ],
+ q(rombo) => [
+ q(5814),
+ q(0),
+ ],
+ q(romkun) => [
+ q(5787),
+ q(0),
+ ],
+ q(ron) => [
+ q(1769),
+ q(0),
+ ],
+ q(ronga) => [
+ q(5804),
+ q(0),
+ ],
+ q(rongga) => [
+ q(5819),
+ q(0),
+ ],
+ q(rongmei naga) => [
+ q(4739),
+ q(0),
+ ],
+ q(rongpo) => [
+ q(5807),
+ q(0),
+ ],
+ q(ronji) => [
+ q(5813),
+ q(0),
+ ],
+ q(roon) => [
+ q(5806),
+ q(0),
+ ],
+ q(roria) => [
+ q(5751),
+ q(0),
+ ],
+ q(rotokas) => [
+ q(5817),
+ q(0),
+ ],
+ q(rotuman) => [
+ q(5832),
+ q(0),
+ ],
+ q(roviana) => [
+ q(5838),
+ q(0),
+ ],
+ q(ruching palaung) => [
+ q(5360),
+ q(0),
+ ],
+ q(rudbari) => [
+ q(5737),
+ q(0),
+ ],
+ q(rufiji) => [
+ q(5840),
+ q(0),
+ ],
+ q(ruga) => [
+ q(5839),
+ q(0),
+ ],
+ q(rukai) => [
+ q(2143),
+ q(0),
+ ],
+ q(ruma) => [
+ q(5847),
+ q(0),
+ ],
+ q(rumai palaung) => [
+ q(5732),
+ q(0),
+ ],
+ q(rumu) => [
+ q(3422),
+ q(0),
+ ],
+ q(runa) => [
+ q(5802),
+ q(0),
+ ],
+ q(rundi) => [
+ q(0361),
+ q(0),
+ ],
+ q(runga) => [
+ q(5820),
+ q(0),
+ ],
+ q(rungtu chin) => [
+ q(5830),
+ q(0),
+ ],
+ q(rungus) => [
+ q(2134),
+ q(0),
+ ],
+ q(rungwa) => [
+ q(5809),
+ q(0),
+ ],
+ q(russia buriat) => [
+ q(1584),
+ q(0),
+ ],
+ q(russian) => [
+ q(0363),
+ q(0),
+ ],
+ q(russian sign language) => [
+ q(5829),
+ q(0),
+ ],
+ q(rusyn) => [
+ q(5836),
+ q(0),
+ ],
+ q(rutul) => [
+ q(5844),
+ q(0),
+ ],
+ q(ruuli) => [
+ q(5835),
+ q(0),
+ ],
+ q(ruund) => [
+ q(5803),
+ q(0),
+ ],
+ q(rwa) => [
+ q(5849),
+ q(0),
+ ],
+ q(s'gaw karen) => [
+ q(3594),
+ q(0),
+ ],
+ q(sa) => [
+ q(5870),
+ q(0),
+ ],
+ q(sa'a) => [
+ q(0836),
+ q(0),
+ ],
+ q(sa'ban) => [
+ q(6124),
+ q(0),
+ ],
+ q(sa'och) => [
+ q(5908),
+ q(0),
+ ],
+ q(saafi-saafi) => [
+ q(5868),
+ q(0),
+ ],
+ q(saam) => [
+ q(5723),
+ q(0),
+ ],
+ q(saamia) => [
+ q(4038),
+ q(0),
+ ],
+ q(saaroa) => [
+ q(6300),
+ q(0),
+ ],
+ q(saba) => [
+ q(5856),
+ q(0),
+ ],
+ q(sabaean) => [
+ q(7421),
+ q(0),
+ ],
+ q(sabah bisaya) => [
+ q(1471),
+ q(0),
+ ],
+ q(sabah malay) => [
+ q(4516),
+ q(0),
+ ],
+ q(sabane) => [
+ q(5859),
+ q(0),
+ ],
+ q(sabaot) => [
+ q(6168),
+ q(0),
+ ],
+ q(sabine) => [
+ q(5894),
+ q(0),
+ ],
+ q(sabu) => [
+ q(2860),
+ q(0),
+ ],
+ q(sabum) => [
+ q(5887),
+ q(0),
+ ],
+ q(sacapulteco) => [
+ q(5669),
+ q(0),
+ ],
+ q(sadri) => [
+ q(5905),
+ q(0),
+ ],
+ q(saek) => [
+ q(6044),
+ q(0),
+ ],
+ q(saep) => [
+ q(6152),
+ q(0),
+ ],
+ q(safaliba) => [
+ q(5860),
+ q(0),
+ ],
+ q(safeyoka) => [
+ q(0860),
+ q(0),
+ ],
+ q(safwa) => [
+ q(5883),
+ q(0),
+ ],
+ q(sagala) => [
+ q(5885),
+ q(0),
+ ],
+ q(sagalla) => [
+ q(6443),
+ q(0),
+ ],
+ q(saho) => [
+ q(6223),
+ q(0),
+ ],
+ q(sahu) => [
+ q(5861),
+ q(0),
+ ],
+ q(saidi arabic) => [
+ q(0627),
+ q(0),
+ ],
+ q(saint lucian creole french) => [
+ q(0588),
+ q(0),
+ ],
+ q(saisiyat) => [
+ q(7439),
+ q(0),
+ ],
+ q(sajalong) => [
+ q(6033),
+ q(0),
+ ],
+ q(sajau basap) => [
+ q(6028),
+ q(0),
+ ],
+ q(sakachep) => [
+ q(5903),
+ q(0),
+ ],
+ q(sakalava malagasy) => [
+ q(6049),
+ q(0),
+ ],
+ q(sakan) => [
+ q(0223),
+ q(0),
+ ],
+ q(sakao) => [
+ q(6062),
+ q(0),
+ ],
+ q(sakata) => [
+ q(6061),
+ q(0),
+ ],
+ q(sake) => [
+ q(5862),
+ q(0),
+ ],
+ q(sakirabia) => [
+ q(6048),
+ q(0),
+ ],
+ q(sala) => [
+ q(5996),
+ q(0),
+ ],
+ q(salako) => [
+ q(3479),
+ q(0),
+ ],
+ q(salampasu) => [
+ q(6085),
+ q(0),
+ ],
+ q(salar) => [
+ q(6080),
+ q(0),
+ ],
+ q(salas) => [
+ q(5977),
+ q(0),
+ ],
+ q(salasaca highland quichua) => [
+ q(5698),
+ q(0),
+ ],
+ q(salchuq) => [
+ q(6079),
+ q(0),
+ ],
+ q(saleman) => [
+ q(5867),
+ q(0),
+ ],
+ q(saliba) => [
+ q(5877),
+ q(0),
+ ],
+ q(salinan) => [
+ q(6077),
+ q(0),
+ ],
+ q(salishan languages) => [
+ q(0368),
+ q(0),
+ ],
+ q(sallands) => [
+ q(5933),
+ q(0),
+ ],
+ q(salt-yui) => [
+ q(6075),
+ q(0),
+ ],
+ q(saluan) => [
+ q(3992),
+ q(0),
+ ],
+ q(saluma) => [
+ q(6074),
+ q(0),
+ ],
+ q(salvadoran sign language) => [
+ q(2290),
+ q(0),
+ ],
+ q(sam) => [
+ q(6126),
+ q(0),
+ ],
+ q(sama) => [
+ q(6090),
+ q(0),
+ ],
+ q(samaritan) => [
+ q(6097),
+ q(0),
+ ],
+ q(samaritan aramaic) => [
+ q(0369),
+ q(0),
+ ],
+ q(samarokena) => [
+ q(6563),
+ q(0),
+ ],
+ q(samatao) => [
+ q(7665),
+ q(0),
+ ],
+ q(samba) => [
+ q(6104),
+ q(0),
+ ],
+ q(samba daka) => [
+ q(1685),
+ q(0),
+ ],
+ q(samba leko) => [
+ q(4773),
+ q(0),
+ ],
+ q(sambal) => [
+ q(7422),
+ q(0),
+ ],
+ q(sambalpuri) => [
+ q(6166),
+ q(0),
+ ],
+ q(sambe) => [
+ q(7230),
+ q(0),
+ ],
+ q(samberigi) => [
+ q(6222),
+ q(0),
+ ],
+ q(samburu) => [
+ q(5865),
+ q(0),
+ ],
+ q(samei) => [
+ q(6093),
+ q(0),
+ ],
+ q(sami languages) => [
+ q(0389),
+ q(0),
+ ],
+ q(samo) => [
+ q(6098),
+ q(0),
+ ],
+ q(samoan) => [
+ q(0392),
+ q(0),
+ ],
+ q(samogitian) => [
+ q(5975),
+ q(0),
+ ],
+ q(samosa) => [
+ q(6278),
+ q(0),
+ ],
+ q(samoyedic languages) => [
+ q(0526),
+ q(0),
+ ],
+ q(sampang) => [
+ q(5727),
+ q(0),
+ ],
+ q(samre) => [
+ q(6297),
+ q(0),
+ ],
+ q(samtao) => [
+ q(6244),
+ q(0),
+ ],
+ q(samvedi) => [
+ q(6102),
+ q(0),
+ ],
+ q(san agustin mixtepec zapotec) => [
+ q(7867),
+ q(0),
+ ],
+ q(san baltazar loxicha zapotec) => [
+ q(7848),
+ q(0),
+ ],
+ q(san blas kuna) => [
+ q(1908),
+ q(0),
+ ],
+ q(san dionisio del mar huave) => [
+ q(2858),
+ q(0),
+ ],
+ q(san felipe otlaltepec popoloca) => [
+ q(5543),
+ q(0),
+ ],
+ q(san francisco del mar huave) => [
+ q(2837),
+ q(0),
+ ],
+ q(san francisco matlatzinca) => [
+ q(4096),
+ q(0),
+ ],
+ q(san jeronimo tecoatl mazatec) => [
+ q(4089),
+ q(0),
+ ],
+ q(san juan atzingo popoloca) => [
+ q(5530),
+ q(0),
+ ],
+ q(san juan colorado mixtec) => [
+ q(4297),
+ q(0),
+ ],
+ q(san juan guelavia zapotec) => [
+ q(7717),
+ q(0),
+ ],
+ q(san juan teita mixtec) => [
+ q(7447),
+ q(0),
+ ],
+ q(san luis temalacayuca popoloca) => [
+ q(5557),
+ q(0),
+ ],
+ q(san marcos tlalcoyalco popoloca) => [
+ q(5476),
+ q(0),
+ ],
+ q(san martin itunyoso triqui) => [
+ q(6671),
+ q(0),
+ ],
+ q(san martin quechua) => [
+ q(5685),
+ q(0),
+ ],
+ q(san mateo del mar huave) => [
+ q(2852),
+ q(0),
+ ],
+ q(san miguel creole french) => [
+ q(5901),
+ q(0),
+ ],
+ q(san miguel el grande mixtec) => [
+ q(4280),
+ q(0),
+ ],
+ q(san miguel piedras mixtec) => [
+ q(7452),
+ q(0),
+ ],
+ q(san pedro amuzgos amuzgo) => [
+ q(1016),
+ q(0),
+ ],
+ q(san pedro quiatoni zapotec) => [
+ q(7830),
+ q(0),
+ ],
+ q(san salvador kongo) => [
+ q(3695),
+ q(0),
+ ],
+ q(san vicente coatlan zapotec) => [
+ q(7844),
+ q(0),
+ ],
+ q(sanaani arabic) => [
+ q(1003),
+ q(0),
+ ],
+ q(sanapana) => [
+ q(5864),
+ q(0),
+ ],
+ q(sandawe) => [
+ q(0364),
+ q(0),
+ ],
+ q(sanga (democratic republic of congo)) => [
+ q(6111),
+ q(0),
+ ],
+ q(sanga (nigeria)) => [
+ q(7431),
+ q(0),
+ ],
+ q(sanggau) => [
+ q(5902),
+ q(0),
+ ],
+ q(sangil) => [
+ q(6115),
+ q(0),
+ ],
+ q(sangir) => [
+ q(6298),
+ q(0),
+ ],
+ q(sangisari) => [
+ q(5974),
+ q(0),
+ ],
+ q(sangkong) => [
+ q(5970),
+ q(0),
+ ],
+ q(sanglechi) => [
+ q(5980),
+ q(0),
+ ],
+ q(sango) => [
+ q(0365),
+ q(0),
+ ],
+ q(sangtam naga) => [
+ q(5044),
+ q(0),
+ ],
+ q(sangu (gabon)) => [
+ q(6120),
+ q(0),
+ ],
+ q(sangu (tanzania)) => [
+ q(5888),
+ q(0),
+ ],
+ q(sani) => [
+ q(7668),
+ q(0),
+ ],
+ q(sanie) => [
+ q(7673),
+ q(0),
+ ],
+ q(saniyo-hiyewe) => [
+ q(6127),
+ q(0),
+ ],
+ q(sankaran maninka) => [
+ q(4510),
+ q(0),
+ ],
+ q(sansi) => [
+ q(6208),
+ q(0),
+ ],
+ q(sanskrit) => [
+ q(0370),
+ q(0),
+ ],
+ q(santa ana de tusi pasco quechua) => [
+ q(5705),
+ q(0),
+ ],
+ q(santa catarina albarradas zapotec) => [
+ q(7868),
+ q(0),
+ ],
+ q(santa ines ahuatempan popoloca) => [
+ q(5356),
+ q(0),
+ ],
+ q(santa ines yatzechi zapotec) => [
+ q(7838),
+ q(0),
+ ],
+ q(santa lucia monteverde mixtec) => [
+ q(4171),
+ q(0),
+ ],
+ q(santa maria del mar huave) => [
+ q(2861),
+ q(0),
+ ],
+ q(santa maria la alta nahuatl) => [
+ q(4864),
+ q(0),
+ ],
+ q(santa maria quiegolani zapotec) => [
+ q(7833),
+ q(0),
+ ],
+ q(santa maria zacatepec mixtec) => [
+ q(4675),
+ q(0),
+ ],
+ q(santa teresa cora) => [
+ q(1818),
+ q(0),
+ ],
+ q(santali) => [
+ q(0372),
+ q(0),
+ ],
+ q(santiago del estero quichua) => [
+ q(5668),
+ q(0),
+ ],
+ q(santiago xanica zapotec) => [
+ q(7842),
+ q(0),
+ ],
+ q(santo domingo albarradas zapotec) => [
+ q(7732),
+ q(0),
+ ],
+ q(sanuma) => [
+ q(7437),
+ q(0),
+ ],
+ q(sao paulo kaingang) => [
+ q(7777),
+ q(0),
+ ],
+ q(saotomense) => [
+ q(1849),
+ q(0),
+ ],
+ q(saparua) => [
+ q(6162),
+ q(0),
+ ],
+ q(sape) => [
+ q(6151),
+ q(0),
+ ],
+ q(sapo) => [
+ q(3562),
+ q(0),
+ ],
+ q(saponi) => [
+ q(6155),
+ q(0),
+ ],
+ q(saposa) => [
+ q(6163),
+ q(0),
+ ],
+ q(sapuan) => [
+ q(6165),
+ q(0),
+ ],
+ q(sar) => [
+ q(4614),
+ q(0),
+ ],
+ q(sara) => [
+ q(6183),
+ q(0),
+ ],
+ q(sara dunjo) => [
+ q(3490),
+ q(0),
+ ],
+ q(sara kaba) => [
+ q(5898),
+ q(0),
+ ],
+ q(sara kaba deme) => [
+ q(3677),
+ q(0),
+ ],
+ q(sara kaba naa) => [
+ q(3692),
+ q(0),
+ ],
+ q(saramaccan) => [
+ q(6190),
+ q(0),
+ ],
+ q(sarangani blaan) => [
+ q(1391),
+ q(0),
+ ],
+ q(sarangani manobo) => [
+ q(4119),
+ q(0),
+ ],
+ q(sarasira) => [
+ q(7858),
+ q(0),
+ ],
+ q(saraveca) => [
+ q(5866),
+ q(0),
+ ],
+ q(sardinian) => [
+ q(0402),
+ q(0),
+ ],
+ q(sarikoli) => [
+ q(6186),
+ q(0),
+ ],
+ q(sarli) => [
+ q(5918),
+ q(0),
+ ],
+ q(sarsi) => [
+ q(6193),
+ q(0),
+ ],
+ q(sartang) => [
+ q(5250),
+ q(0),
+ ],
+ q(sarua) => [
+ q(6290),
+ q(0),
+ ],
+ q(sarudu) => [
+ q(5931),
+ q(0),
+ ],
+ q(saruga) => [
+ q(6180),
+ q(0),
+ ],
+ q(sasak) => [
+ q(0371),
+ q(0),
+ ],
+ q(sasaru) => [
+ q(6301),
+ q(0),
+ ],
+ q(sassarese sardinian) => [
+ q(5916),
+ q(0),
+ ],
+ q(satawalese) => [
+ q(6246),
+ q(0),
+ ],
+ q(satere-mawe) => [
+ q(4098),
+ q(0),
+ ],
+ q(saterfriesisch) => [
+ q(6240),
+ q(0),
+ ],
+ q(saudi arabian sign language) => [
+ q(5923),
+ q(0),
+ ],
+ q(sauraseni prakrit) => [
+ q(5600),
+ q(0),
+ ],
+ q(saurashtra) => [
+ q(5872),
+ q(0),
+ ],
+ q(sauri) => [
+ q(6194),
+ q(0),
+ ],
+ q(sauria paharia) => [
+ q(4313),
+ q(0),
+ ],
+ q(sause) => [
+ q(5863),
+ q(0),
+ ],
+ q(sausi) => [
+ q(6209),
+ q(0),
+ ],
+ q(savara) => [
+ q(6266),
+ q(0),
+ ],
+ q(savi) => [
+ q(5919),
+ q(0),
+ ],
+ q(savosavo) => [
+ q(6267),
+ q(0),
+ ],
+ q(sawai) => [
+ q(6325),
+ q(0),
+ ],
+ q(saweru) => [
+ q(6283),
+ q(0),
+ ],
+ q(sawi) => [
+ q(5869),
+ q(0),
+ ],
+ q(sawila) => [
+ q(6285),
+ q(0),
+ ],
+ q(sawknah) => [
+ q(6279),
+ q(0),
+ ],
+ q(saxon, low) => [
+ q(0306),
+ q(0),
+ ],
+ q(saxwe gbe) => [
+ q(6303),
+ q(0),
+ ],
+ q(saya) => [
+ q(5871),
+ q(0),
+ ],
+ q(sayula popoluca) => [
+ q(5540),
+ q(0),
+ ],
+ q(scots) => [
+ q(0374),
+ q(0),
+ ],
+ q(scottish gaelic) => [
+ q(0153),
+ q(0),
+ ],
+ q(scythian) => [
+ q(7423),
+ q(0),
+ ],
+ q(sea island creole english) => [
+ q(2637),
+ q(0),
+ ],
+ q(seba) => [
+ q(3218),
+ q(0),
+ ],
+ q(sebat bet gurage) => [
+ q(5978),
+ q(0),
+ ],
+ q(seberuang) => [
+ q(5896),
+ q(0),
+ ],
+ q(sebop) => [
+ q(6007),
+ q(0),
+ ],
+ q(sebuyau) => [
+ q(6107),
+ q(0),
+ ],
+ q(sechelt) => [
+ q(5936),
+ q(0),
+ ],
+ q(secoya) => [
+ q(5955),
+ q(0),
+ ],
+ q(sedang) => [
+ q(5937),
+ q(0),
+ ],
+ q(sedoa) => [
+ q(6759),
+ q(0),
+ ],
+ q(seeku) => [
+ q(6143),
+ q(0),
+ ],
+ q(segai) => [
+ q(5965),
+ q(0),
+ ],
+ q(segeju) => [
+ q(5940),
+ q(0),
+ ],
+ q(seget) => [
+ q(5879),
+ q(0),
+ ],
+ q(sehwi) => [
+ q(5961),
+ q(0),
+ ],
+ q(seimat) => [
+ q(6206),
+ q(0),
+ ],
+ q(seit-kaitetu) => [
+ q(2746),
+ q(0),
+ ],
+ q(sekani) => [
+ q(5944),
+ q(0),
+ ],
+ q(sekapan) => [
+ q(6057),
+ q(0),
+ ],
+ q(sekar) => [
+ q(6067),
+ q(0),
+ ],
+ q(seke (nepal)) => [
+ q(6052),
+ q(0),
+ ],
+ q(seke (vanuatu)) => [
+ q(6047),
+ q(0),
+ ],
+ q(seki) => [
+ q(6306),
+ q(0),
+ ],
+ q(seko padang) => [
+ q(6065),
+ q(0),
+ ],
+ q(seko tengah) => [
+ q(6056),
+ q(0),
+ ],
+ q(sekpele) => [
+ q(3902),
+ q(0),
+ ],
+ q(selangor sign language) => [
+ q(3294),
+ q(0),
+ ],
+ q(selaru) => [
+ q(6083),
+ q(0),
+ ],
+ q(selayar) => [
+ q(6086),
+ q(0),
+ ],
+ q(selee) => [
+ q(6125),
+ q(0),
+ ],
+ q(selepet) => [
+ q(6157),
+ q(0),
+ ],
+ q(selian) => [
+ q(6296),
+ q(0),
+ ],
+ q(selkup) => [
+ q(0375),
+ q(0),
+ ],
+ q(selungai murut) => [
+ q(6071),
+ q(0),
+ ],
+ q(seluwasan) => [
+ q(6284),
+ q(0),
+ ],
+ q(semai) => [
+ q(5934),
+ q(0),
+ ],
+ q(semandang) => [
+ q(5924),
+ q(0),
+ ],
+ q(semaq beri) => [
+ q(6317),
+ q(0),
+ ],
+ q(sembakung murut) => [
+ q(5890),
+ q(0),
+ ],
+ q(semelai) => [
+ q(6315),
+ q(0),
+ ],
+ q(semimi) => [
+ q(2305),
+ q(0),
+ ],
+ q(semitic languages) => [
+ q(0376),
+ q(0),
+ ],
+ q(semnam) => [
+ q(6212),
+ q(0),
+ ],
+ q(semnani) => [
+ q(6105),
+ q(0),
+ ],
+ q(sempan) => [
+ q(7425),
+ q(0),
+ ],
+ q(sena) => [
+ q(5941),
+ q(0),
+ ],
+ q(senara senoufo) => [
+ q(5948),
+ q(0),
+ ],
+ q(senaya) => [
+ q(6310),
+ q(0),
+ ],
+ q(sene) => [
+ q(5943),
+ q(0),
+ ],
+ q(seneca) => [
+ q(5938),
+ q(0),
+ ],
+ q(sened) => [
+ q(5929),
+ q(0),
+ ],
+ q(sengele) => [
+ q(6320),
+ q(0),
+ ],
+ q(senggi) => [
+ q(6123),
+ q(0),
+ ],
+ q(sengo) => [
+ q(6156),
+ q(0),
+ ],
+ q(sengseng) => [
+ q(6224),
+ q(0),
+ ],
+ q(senhaja de srair) => [
+ q(6039),
+ q(0),
+ ],
+ q(sensi) => [
+ q(6113),
+ q(0),
+ ],
+ q(sentani) => [
+ q(5951),
+ q(0),
+ ],
+ q(senthang chin) => [
+ q(5956),
+ q(0),
+ ],
+ q(sentinel) => [
+ q(6227),
+ q(0),
+ ],
+ q(sepa (indonesia)) => [
+ q(6150),
+ q(0),
+ ],
+ q(sepa (papua new guinea)) => [
+ q(6153),
+ q(0),
+ ],
+ q(sepedi) => [
+ q(0318),
+ q(0),
+ ],
+ q(sepik iwam) => [
+ q(3011),
+ q(0),
+ ],
+ q(sera) => [
+ q(6199),
+ q(0),
+ ],
+ q(seraiki) => [
+ q(6059),
+ q(0),
+ ],
+ q(serbian) => [
+ q(0404),
+ q(0),
+ ],
+ q(serbo-croatian) => [
+ q(0537),
+ q(0),
+ ],
+ q(sere) => [
+ q(6271),
+ q(0),
+ ],
+ q(serer) => [
+ q(0405),
+ q(0),
+ ],
+ q(seri) => [
+ q(5942),
+ q(0),
+ ],
+ q(serili) => [
+ q(6264),
+ q(0),
+ ],
+ q(seroa) => [
+ q(3546),
+ q(0),
+ ],
+ q(serrano) => [
+ q(5949),
+ q(0),
+ ],
+ q(seru) => [
+ q(6318),
+ q(0),
+ ],
+ q(serua) => [
+ q(6197),
+ q(0),
+ ],
+ q(serudung murut) => [
+ q(6188),
+ q(0),
+ ],
+ q(serui-laut) => [
+ q(5952),
+ q(0),
+ ],
+ q(seselwa creole french) => [
+ q(1858),
+ q(0),
+ ],
+ q(seta) => [
+ q(6229),
+ q(0),
+ ],
+ q(setaman) => [
+ q(6236),
+ q(0),
+ ],
+ q(seti) => [
+ q(5881),
+ q(0),
+ ],
+ q(settla) => [
+ q(6225),
+ q(0),
+ ],
+ q(severn ojibwa) => [
+ q(5198),
+ q(0),
+ ],
+ q(sewa bay) => [
+ q(5954),
+ q(0),
+ ],
+ q(seze) => [
+ q(6319),
+ q(0),
+ ],
+ q(sha) => [
+ q(5912),
+ q(0),
+ ],
+ q(shabak) => [
+ q(5915),
+ q(0),
+ ],
+ q(shabo) => [
+ q(5878),
+ q(0),
+ ],
+ q(shahmirzadi) => [
+ q(6200),
+ q(0),
+ ],
+ q(shahrudi) => [
+ q(5993),
+ q(0),
+ ],
+ q(shall-zwall) => [
+ q(5982),
+ q(0),
+ ],
+ q(shama-sambuga) => [
+ q(6169),
+ q(0),
+ ],
+ q(shamang) => [
+ q(7426),
+ q(0),
+ ],
+ q(shambala) => [
+ q(3573),
+ q(0),
+ ],
+ q(shan) => [
+ q(0379),
+ q(0),
+ ],
+ q(shanenawa) => [
+ q(6280),
+ q(0),
+ ],
+ q(shanga) => [
+ q(5994),
+ q(0),
+ ],
+ q(shangzhai) => [
+ q(3076),
+ q(0),
+ ],
+ q(sharanahua) => [
+ q(4130),
+ q(0),
+ ],
+ q(shark bay) => [
+ q(6221),
+ q(0),
+ ],
+ q(sharwa) => [
+ q(6282),
+ q(0),
+ ],
+ q(shasta) => [
+ q(5999),
+ q(0),
+ ],
+ q(shatt) => [
+ q(5990),
+ q(0),
+ ],
+ q(shau) => [
+ q(6170),
+ q(0),
+ ],
+ q(shawnee) => [
+ q(6042),
+ q(0),
+ ],
+ q(she) => [
+ q(6003),
+ q(0),
+ ],
+ q(shehri) => [
+ q(6001),
+ q(0),
+ ],
+ q(shekhawati) => [
+ q(6287),
+ q(0),
+ ],
+ q(shekkacho) => [
+ q(4432),
+ q(0),
+ ],
+ q(sheko) => [
+ q(5986),
+ q(0),
+ ],
+ q(shelta) => [
+ q(6231),
+ q(0),
+ ],
+ q(shempire senoufo) => [
+ q(5935),
+ q(0),
+ ],
+ q(shendu) => [
+ q(5992),
+ q(0),
+ ],
+ q(sheni) => [
+ q(5911),
+ q(0),
+ ],
+ q(sherbro) => [
+ q(1506),
+ q(0),
+ ],
+ q(sherdukpen) => [
+ q(5927),
+ q(0),
+ ],
+ q(sherpa) => [
+ q(7435),
+ q(0),
+ ],
+ q(sheshi kham) => [
+ q(3346),
+ q(0),
+ ],
+ q(shi) => [
+ q(5997),
+ q(0),
+ ],
+ q(shihhi arabic) => [
+ q(6207),
+ q(0),
+ ],
+ q(shiki) => [
+ q(2627),
+ q(0),
+ ],
+ q(shilluk) => [
+ q(5991),
+ q(0),
+ ],
+ q(shina) => [
+ q(5906),
+ q(0),
+ ],
+ q(shinabo) => [
+ q(6112),
+ q(0),
+ ],
+ q(shipibo-conibo) => [
+ q(5995),
+ q(0),
+ ],
+ q(shixing) => [
+ q(6294),
+ q(0),
+ ],
+ q(sholaga) => [
+ q(6069),
+ q(0),
+ ],
+ q(shom peng) => [
+ q(6012),
+ q(0),
+ ],
+ q(shona) => [
+ q(0394),
+ q(0),
+ ],
+ q(shoo-minda-nye) => [
+ q(1086),
+ q(0),
+ ],
+ q(shor) => [
+ q(1753),
+ q(0),
+ ],
+ q(shoshoni) => [
+ q(5988),
+ q(0),
+ ],
+ q(shua) => [
+ q(5987),
+ q(0),
+ ],
+ q(shuadit) => [
+ q(5930),
+ q(0),
+ ],
+ q(shuar) => [
+ q(3084),
+ q(0),
+ ],
+ q(shubi) => [
+ q(6253),
+ q(0),
+ ],
+ q(shughni) => [
+ q(5967),
+ q(0),
+ ],
+ q(shumashti) => [
+ q(6242),
+ q(0),
+ ],
+ q(shumcho) => [
+ q(5910),
+ q(0),
+ ],
+ q(shuswap) => [
+ q(5998),
+ q(0),
+ ],
+ q(shuwa-zamani) => [
+ q(3572),
+ q(0),
+ ],
+ q(shwai) => [
+ q(6002),
+ q(0),
+ ],
+ q(shwe palaung) => [
+ q(5470),
+ q(0),
+ ],
+ q(sialum) => [
+ q(6084),
+ q(0),
+ ],
+ q(siamou) => [
+ q(6009),
+ q(0),
+ ],
+ q(sian) => [
+ q(6154),
+ q(0),
+ ],
+ q(siane) => [
+ q(6119),
+ q(0),
+ ],
+ q(siang) => [
+ q(6304),
+ q(0),
+ ],
+ q(siar-lak) => [
+ q(6038),
+ q(0),
+ ],
+ q(siawi) => [
+ q(4382),
+ q(0),
+ ],
+ q(sibe) => [
+ q(4758),
+ q(0),
+ ],
+ q(sibu melanau) => [
+ q(5932),
+ q(0),
+ ],
+ q(sicanian) => [
+ q(6292),
+ q(0),
+ ],
+ q(sicel) => [
+ q(5913),
+ q(0),
+ ],
+ q(sichuan yi) => [
+ q(0189),
+ q(0),
+ ],
+ q(sicilian) => [
+ q(0373),
+ q(0),
+ ],
+ q(sicite senoufo) => [
+ q(5947),
+ q(0),
+ ],
+ q(siculo arabic) => [
+ q(6176),
+ q(0),
+ ],
+ q(sidamo) => [
+ q(0380),
+ q(0),
+ ],
+ q(sidetic) => [
+ q(7424),
+ q(0),
+ ],
+ q(sie) => [
+ q(2275),
+ q(0),
+ ],
+ q(sierra de juarez zapotec) => [
+ q(7716),
+ q(0),
+ ],
+ q(sierra leone sign language) => [
+ q(5979),
+ q(0),
+ ],
+ q(sierra negra nahuatl) => [
+ q(5061),
+ q(0),
+ ],
+ q(sighu) => [
+ q(6293),
+ q(0),
+ ],
+ q(sign languages) => [
+ q(0378),
+ q(0),
+ ],
+ q(sihan) => [
+ q(6121),
+ q(0),
+ ],
+ q(sihuas ancash quechua) => [
+ q(5693),
+ q(0),
+ ],
+ q(sika) => [
+ q(6051),
+ q(0),
+ ],
+ q(sikaiana) => [
+ q(6066),
+ q(0),
+ ],
+ q(sikaritai) => [
+ q(6727),
+ q(0),
+ ],
+ q(sikiana) => [
+ q(6014),
+ q(0),
+ ],
+ q(sikkimese) => [
+ q(6017),
+ q(0),
+ ],
+ q(siksika) => [
+ q(0057),
+ q(0),
+ ],
+ q(sikule) => [
+ q(6050),
+ q(0),
+ ],
+ q(sila) => [
+ q(6082),
+ q(0),
+ ],
+ q(silacayoapan mixtec) => [
+ q(4336),
+ q(0),
+ ],
+ q(sileibi) => [
+ q(5889),
+ q(0),
+ ],
+ q(silesian) => [
+ q(6321),
+ q(0),
+ ],
+ q(silimo) => [
+ q(7209),
+ q(0),
+ ],
+ q(siliput) => [
+ q(4322),
+ q(0),
+ ],
+ q(silopi) => [
+ q(7433),
+ q(0),
+ ],
+ q(silt'e) => [
+ q(6245),
+ q(0),
+ ],
+ q(simaa) => [
+ q(6008),
+ q(0),
+ ],
+ q(simba) => [
+ q(5895),
+ q(0),
+ ],
+ q(simbali) => [
+ q(6092),
+ q(0),
+ ],
+ q(simbari) => [
+ q(6088),
+ q(0),
+ ],
+ q(simbo) => [
+ q(5874),
+ q(0),
+ ],
+ q(simeku) => [
+ q(6106),
+ q(0),
+ ],
+ q(simeulue) => [
+ q(6099),
+ q(0),
+ ],
+ q(simte) => [
+ q(6100),
+ q(0),
+ ],
+ q(sinagen) => [
+ q(6021),
+ q(0),
+ ],
+ q(sinasina) => [
+ q(6219),
+ q(0),
+ ],
+ q(sinaugoro) => [
+ q(6108),
+ q(0),
+ ],
+ q(sindarin) => [
+ q(6035),
+ q(0),
+ ],
+ q(sindhi) => [
+ q(0395),
+ q(0),
+ ],
+ q(sindhi bhil) => [
+ q(5886),
+ q(0),
+ ],
+ q(sindihui mixtec) => [
+ q(7455),
+ q(0),
+ ],
+ q(singa) => [
+ q(5971),
+ q(0),
+ ],
+ q(singapore sign language) => [
+ q(6081),
+ q(0),
+ ],
+ q(singpho) => [
+ q(5973),
+ q(0),
+ ],
+ q(sinhala) => [
+ q(0381),
+ q(0),
+ ],
+ q(sinhalese) => [
+ q(0381),
+ q(0),
+ ],
+ q(sinicahua mixtec) => [
+ q(7446),
+ q(0),
+ ],
+ q(sinicized miao) => [
+ q(2784),
+ q(0),
+ ],
+ q(sininkere) => [
+ q(6058),
+ q(0),
+ ],
+ q(sino-tibetan languages) => [
+ q(0383),
+ q(0),
+ ],
+ q(sinsauru) => [
+ q(6128),
+ q(0),
+ ],
+ q(sinte romani) => [
+ q(5791),
+ q(0),
+ ],
+ q(sinyar) => [
+ q(6312),
+ q(0),
+ ],
+ q(sio) => [
+ q(7427),
+ q(0),
+ ],
+ q(siona) => [
+ q(6117),
+ q(0),
+ ],
+ q(siouan languages) => [
+ q(0382),
+ q(0),
+ ],
+ q(sipacapense) => [
+ q(5663),
+ q(0),
+ ],
+ q(sira) => [
+ q(6275),
+ q(0),
+ ],
+ q(siraya) => [
+ q(2359),
+ q(0),
+ ],
+ q(sirenik yupik) => [
+ q(7671),
+ q(0),
+ ],
+ q(siri) => [
+ q(6019),
+ q(0),
+ ],
+ q(siriano) => [
+ q(6187),
+ q(0),
+ ],
+ q(siriono) => [
+ q(6192),
+ q(0),
+ ],
+ q(sirmauri) => [
+ q(6198),
+ q(0),
+ ],
+ q(siroi) => [
+ q(6203),
+ q(0),
+ ],
+ q(sissala) => [
+ q(6068),
+ q(0),
+ ],
+ q(sissano) => [
+ q(6214),
+ q(0),
+ ],
+ q(siuslaw) => [
+ q(6020),
+ q(0),
+ ],
+ q(sivandi) => [
+ q(6025),
+ q(0),
+ ],
+ q(siwai) => [
+ q(6023),
+ q(0),
+ ],
+ q(siwi) => [
+ q(6026),
+ q(0),
+ ],
+ q(siwu) => [
+ q(0736),
+ q(0),
+ ],
+ q(siyin chin) => [
+ q(1884),
+ q(0),
+ ],
+ q(skagit) => [
+ q(6043),
+ q(0),
+ ],
+ q(skalvian) => [
+ q(6268),
+ q(0),
+ ],
+ q(skepi creole dutch) => [
+ q(6064),
+ q(0),
+ ],
+ q(skolt sami) => [
+ q(0393),
+ q(0),
+ ],
+ q(skou) => [
+ q(6063),
+ q(0),
+ ],
+ q(slave (athapascan)) => [
+ q(0107),
+ q(0),
+ ],
+ q(slavic languages) => [
+ q(0384),
+ q(0),
+ ],
+ q(slovak) => [
+ q(0385),
+ q(0),
+ ],
+ q(slovakian sign language) => [
+ q(6265),
+ q(0),
+ ],
+ q(slovenian) => [
+ q(0386),
+ q(0),
+ ],
+ q(small flowery miao) => [
+ q(5959),
+ q(0),
+ ],
+ q(smarky kanum) => [
+ q(3712),
+ q(0),
+ ],
+ q(snohomish) => [
+ q(6118),
+ q(0),
+ ],
+ q(so) => [
+ q(6218),
+ q(0),
+ ],
+ q(so (democratic republic of congo)) => [
+ q(6131),
+ q(0),
+ ],
+ q(so'a) => [
+ q(6216),
+ q(0),
+ ],
+ q(sobei) => [
+ q(6130),
+ q(0),
+ ],
+ q(sochiapam chinantec) => [
+ q(1877),
+ q(0),
+ ],
+ q(sochiapan chinantec) => [
+ q(1877),
+ q(0),
+ ],
+ q(soga) => [
+ q(7385),
+ q(0),
+ ],
+ q(sogdian) => [
+ q(0397),
+ q(0),
+ ],
+ q(soi) => [
+ q(6136),
+ q(0),
+ ],
+ q(sok) => [
+ q(6053),
+ q(0),
+ ],
+ q(sokoro) => [
+ q(6137),
+ q(0),
+ ],
+ q(solano) => [
+ q(7432),
+ q(0),
+ ],
+ q(soli) => [
+ q(5897),
+ q(0),
+ ],
+ q(solong) => [
+ q(0557),
+ q(0),
+ ],
+ q(solos) => [
+ q(6138),
+ q(0),
+ ],
+ q(som) => [
+ q(6089),
+ q(0),
+ ],
+ q(somali) => [
+ q(0398),
+ q(0),
+ ],
+ q(somba-siawari) => [
+ q(1323),
+ q(0),
+ ],
+ q(somrai) => [
+ q(6142),
+ q(0),
+ ],
+ q(somray) => [
+ q(6101),
+ q(0),
+ ],
+ q(somyev) => [
+ q(3305),
+ q(0),
+ ],
+ q(sonaga) => [
+ q(7666),
+ q(0),
+ ],
+ q(sonde) => [
+ q(5984),
+ q(0),
+ ],
+ q(songa) => [
+ q(5972),
+ q(0),
+ ],
+ q(songe) => [
+ q(6140),
+ q(0),
+ ],
+ q(songhai languages) => [
+ q(0399),
+ q(0),
+ ],
+ q(songo) => [
+ q(6139),
+ q(0),
+ ],
+ q(songomeno) => [
+ q(6133),
+ q(0),
+ ],
+ q(songoora) => [
+ q(6132),
+ q(0),
+ ],
+ q(sonha) => [
+ q(6135),
+ q(0),
+ ],
+ q(sonia) => [
+ q(6018),
+ q(0),
+ ],
+ q(soninke) => [
+ q(0396),
+ q(0),
+ ],
+ q(sonsorol) => [
+ q(6145),
+ q(0),
+ ],
+ q(soo) => [
+ q(6433),
+ q(0),
+ ],
+ q(sop) => [
+ q(6909),
+ q(0),
+ ],
+ q(soqotri) => [
+ q(6178),
+ q(0),
+ ],
+ q(sora) => [
+ q(6181),
+ q(0),
+ ],
+ q(sorbian languages) => [
+ q(0467),
+ q(0),
+ ],
+ q(sori-harengan) => [
+ q(5880),
+ q(0),
+ ],
+ q(sorkhei) => [
+ q(6174),
+ q(0),
+ ],
+ q(sorothaptic) => [
+ q(6299),
+ q(0),
+ ],
+ q(sorsogon ayta) => [
+ q(1008),
+ q(0),
+ ],
+ q(sos kundi) => [
+ q(5922),
+ q(0),
+ ],
+ q(sota kanum) => [
+ q(3571),
+ q(0),
+ ],
+ q(sotho, southern) => [
+ q(0400),
+ q(0),
+ ],
+ q(sou) => [
+ q(6175),
+ q(0),
+ ],
+ q(south african sign language) => [
+ q(5960),
+ q(0),
+ ],
+ q(south american indian (other)) => [
+ q(0367),
+ q(0),
+ ],
+ q(south american indian languages) => [
+ q(0367),
+ q(1),
+ ],
+ q(south awyu) => [
+ q(0980),
+ q(0),
+ ],
+ q(south azerbaijani) => [
+ q(1014),
+ q(0),
+ ],
+ q(south bolivian quechua) => [
+ q(5659),
+ q(0),
+ ],
+ q(south caucasian languages) => [
+ q(0496),
+ q(0),
+ ],
+ q(south central banda) => [
+ q(3982),
+ q(0),
+ ],
+ q(south central dinka) => [
+ q(2034),
+ q(0),
+ ],
+ q(south efate) => [
+ q(2278),
+ q(0),
+ ],
+ q(south fali) => [
+ q(2322),
+ q(0),
+ ],
+ q(south giziga) => [
+ q(2520),
+ q(0),
+ ],
+ q(south lembata) => [
+ q(3956),
+ q(0),
+ ],
+ q(south levantine arabic) => [
+ q(0719),
+ q(0),
+ ],
+ q(south marquesan) => [
+ q(4470),
+ q(0),
+ ],
+ q(south muyu) => [
+ q(3616),
+ q(0),
+ ],
+ q(south ndebele) => [
+ q(0303),
+ q(0),
+ ],
+ q(south nuaulu) => [
+ q(5125),
+ q(0),
+ ],
+ q(south picene) => [
+ q(6167),
+ q(0),
+ ],
+ q(south slavey) => [
+ q(7429),
+ q(0),
+ ],
+ q(south slavic languages) => [
+ q(0535),
+ q(0),
+ ],
+ q(south tairora) => [
+ q(5239),
+ q(0),
+ ],
+ q(south ucayali asheninka) => [
+ q(1840),
+ q(0),
+ ],
+ q(south watut) => [
+ q(4151),
+ q(0),
+ ],
+ q(south west bay) => [
+ q(6122),
+ q(0),
+ ],
+ q(southeast ambrym) => [
+ q(6752),
+ q(0),
+ ],
+ q(southeast babar) => [
+ q(6951),
+ q(0),
+ ],
+ q(southeast ijo) => [
+ q(2919),
+ q(0),
+ ],
+ q(southeast pashayi) => [
+ q(5590),
+ q(0),
+ ],
+ q(southeastern dinka) => [
+ q(2075),
+ q(0),
+ ],
+ q(southeastern ixtlan zapotec) => [
+ q(7828),
+ q(0),
+ ],
+ q(southeastern kolami) => [
+ q(4881),
+ q(0),
+ ],
+ q(southeastern nochixtlan mixtec) => [
+ q(4651),
+ q(0),
+ ],
+ q(southeastern pomo) => [
+ q(5536),
+ q(0),
+ ],
+ q(southeastern puebla nahuatl) => [
+ q(5018),
+ q(0),
+ ],
+ q(southeastern tarahumara) => [
+ q(6391),
+ q(0),
+ ],
+ q(southeastern tepehuan) => [
+ q(6239),
+ q(0),
+ ],
+ q(southern alta) => [
+ q(0677),
+ q(0),
+ ],
+ q(southern altai) => [
+ q(0016),
+ q(0),
+ ],
+ q(southern amami-oshima) => [
+ q(0784),
+ q(0),
+ ],
+ q(southern aymara) => [
+ q(0995),
+ q(0),
+ ],
+ q(southern bai) => [
+ q(1155),
+ q(0),
+ ],
+ q(southern balochi) => [
+ q(1067),
+ q(0),
+ ],
+ q(southern betsimisaraka malagasy) => [
+ q(1617),
+ q(0),
+ ],
+ q(southern binukidnon) => [
+ q(4555),
+ q(0),
+ ],
+ q(southern birifor) => [
+ q(1227),
+ q(0),
+ ],
+ q(southern bobo madare) => [
+ q(1558),
+ q(0),
+ ],
+ q(southern bontok) => [
+ q(5166),
+ q(0),
+ ],
+ q(southern carrier) => [
+ q(1645),
+ q(0),
+ ],
+ q(southern catanduanes bikol) => [
+ q(1291),
+ q(0),
+ ],
+ q(southern conchucos ancash quechua) => [
+ q(5700),
+ q(0),
+ ],
+ q(southern dagaare) => [
+ q(2003),
+ q(0),
+ ],
+ q(southern dong) => [
+ q(3433),
+ q(0),
+ ],
+ q(southern east cree) => [
+ q(1850),
+ q(0),
+ ],
+ q(southern ghale) => [
+ q(2495),
+ q(0),
+ ],
+ q(southern gondi) => [
+ q(2488),
+ q(0),
+ ],
+ q(southern grebo) => [
+ q(2604),
+ q(0),
+ ],
+ q(southern guiyang hmong) => [
+ q(2783),
+ q(0),
+ ],
+ q(southern guiyang miao) => [
+ q(2783),
+ q(0),
+ ],
+ q(southern haida) => [
+ q(2714),
+ q(0),
+ ],
+ q(southern hindko) => [
+ q(2786),
+ q(0),
+ ],
+ q(southern kalapuya) => [
+ q(6295),
+ q(0),
+ ],
+ q(southern kalinga) => [
+ q(3574),
+ q(0),
+ ],
+ q(southern kisi) => [
+ q(3590),
+ q(0),
+ ],
+ q(southern kiwai) => [
+ q(3359),
+ q(0),
+ ],
+ q(southern kurdish) => [
+ q(5920),
+ q(0),
+ ],
+ q(southern lolopo) => [
+ q(7670),
+ q(0),
+ ],
+ q(southern luri) => [
+ q(4068),
+ q(0),
+ ],
+ q(southern ma'di) => [
+ q(6116),
+ q(0),
+ ],
+ q(southern mashan hmong) => [
+ q(2762),
+ q(0),
+ ],
+ q(southern mashan miao) => [
+ q(2762),
+ q(0),
+ ],
+ q(southern mnong) => [
+ q(4403),
+ q(0),
+ ],
+ q(southern muji) => [
+ q(7605),
+ q(0),
+ ],
+ q(southern nago) => [
+ q(5024),
+ q(0),
+ ],
+ q(southern nambikuara) => [
+ q(4701),
+ q(0),
+ ],
+ q(southern ngbandi) => [
+ q(4741),
+ q(0),
+ ],
+ q(southern nicobarese) => [
+ q(4873),
+ q(0),
+ ],
+ q(southern nisu) => [
+ q(5046),
+ q(0),
+ ],
+ q(southern nuni) => [
+ q(4990),
+ q(0),
+ ],
+ q(southern ohlone) => [
+ q(1880),
+ q(0),
+ ],
+ q(southern one) => [
+ q(5289),
+ q(0),
+ ],
+ q(southern pame) => [
+ q(5505),
+ q(0),
+ ],
+ q(southern pashto) => [
+ q(5352),
+ q(0),
+ ],
+ q(southern pastaza quechua) => [
+ q(5665),
+ q(0),
+ ],
+ q(southern pomo) => [
+ q(5393),
+ q(0),
+ ],
+ q(southern puebla mixtec) => [
+ q(4291),
+ q(0),
+ ],
+ q(southern puget sound salish) => [
+ q(6072),
+ q(0),
+ ],
+ q(southern pumi) => [
+ q(5491),
+ q(0),
+ ],
+ q(southern qiandong miao) => [
+ q(2778),
+ q(0),
+ ],
+ q(southern qiang) => [
+ q(5704),
+ q(0),
+ ],
+ q(southern rengma naga) => [
+ q(5032),
+ q(0),
+ ],
+ q(southern rincon zapotec) => [
+ q(7862),
+ q(0),
+ ],
+ q(southern roglai) => [
+ q(5756),
+ q(0),
+ ],
+ q(southern sama) => [
+ q(6201),
+ q(0),
+ ],
+ q(southern sami) => [
+ q(0387),
+ q(0),
+ ],
+ q(southern samo) => [
+ q(5876),
+ q(0),
+ ],
+ q(southern sierra miwok) => [
+ q(6046),
+ q(0),
+ ],
+ q(southern sorsoganon) => [
+ q(6196),
+ q(0),
+ ],
+ q(southern sotho) => [
+ q(0400),
+ q(1),
+ ],
+ q(southern subanen) => [
+ q(3773),
+ q(0),
+ ],
+ q(southern thai) => [
+ q(6144),
+ q(0),
+ ],
+ q(southern tiwa) => [
+ q(6505),
+ q(0),
+ ],
+ q(southern toussian) => [
+ q(7089),
+ q(0),
+ ],
+ q(southern tujia) => [
+ q(6515),
+ q(0),
+ ],
+ q(southern tutchone) => [
+ q(6377),
+ q(0),
+ ],
+ q(southern uzbek) => [
+ q(6934),
+ q(0),
+ ],
+ q(southern yamphu) => [
+ q(4027),
+ q(0),
+ ],
+ q(southern yukaghir) => [
+ q(7697),
+ q(0),
+ ],
+ q(southwest gbaya) => [
+ q(2622),
+ q(0),
+ ],
+ q(southwest palawano) => [
+ q(5479),
+ q(0),
+ ],
+ q(southwest pashayi) => [
+ q(5589),
+ q(0),
+ ],
+ q(southwest tanna) => [
+ q(5113),
+ q(0),
+ ],
+ q(southwestern bontok) => [
+ q(6952),
+ q(0),
+ ],
+ q(southwestern dinka) => [
+ q(2042),
+ q(0),
+ ],
+ q(southwestern fars) => [
+ q(2328),
+ q(0),
+ ],
+ q(southwestern guiyang hmong) => [
+ q(2768),
+ q(0),
+ ],
+ q(southwestern huishui hmong) => [
+ q(2769),
+ q(0),
+ ],
+ q(southwestern huishui miao) => [
+ q(2769),
+ q(0),
+ ],
+ q(southwestern nisu) => [
+ q(5062),
+ q(0),
+ ],
+ q(southwestern tamang) => [
+ q(6686),
+ q(0),
+ ],
+ q(southwestern tarahumara) => [
+ q(6775),
+ q(0),
+ ],
+ q(southwestern tepehuan) => [
+ q(6534),
+ q(0),
+ ],
+ q(southwestern tlaxiaco mixtec) => [
+ q(4183),
+ q(0),
+ ],
+ q(sowa) => [
+ q(6288),
+ q(0),
+ ],
+ q(sowanda) => [
+ q(6146),
+ q(0),
+ ],
+ q(sowari) => [
+ q(2095),
+ q(0),
+ ],
+ q(soyaltepec mazatec) => [
+ q(6996),
+ q(0),
+ ],
+ q(soyaltepec mixtec) => [
+ q(6997),
+ q(0),
+ ],
+ q(spanish) => [
+ q(0401),
+ q(0),
+ ],
+ q(spanish sign language) => [
+ q(6215),
+ q(0),
+ ],
+ q(spiti bhoti) => [
+ q(6164),
+ q(0),
+ ],
+ q(spokane) => [
+ q(6159),
+ q(0),
+ ],
+ q(squamish) => [
+ q(6179),
+ q(0),
+ ],
+ q(sranan tongo) => [
+ q(0403),
+ q(0),
+ ],
+ q(sri lankan creole malay) => [
+ q(5904),
+ q(0),
+ ],
+ q(sri lankan sign language) => [
+ q(6177),
+ q(0),
+ ],
+ q(standard arabic) => [
+ q(0869),
+ q(0),
+ ],
+ q(standard estonian) => [
+ q(2230),
+ q(0),
+ ],
+ q(standard latvian) => [
+ q(4071),
+ q(0),
+ ],
+ q(standard malay) => [
+ q(7861),
+ q(0),
+ ],
+ q(standard moroccan tamazight) => [
+ q(0480),
+ q(0),
+ ],
+ q(stellingwerfs) => [
+ q(6235),
+ q(0),
+ ],
+ q(stod bhoti) => [
+ q(5893),
+ q(0),
+ ],
+ q(stodsde) => [
+ q(3076),
+ q(0),
+ ],
+ q(stoney) => [
+ q(6238),
+ q(0),
+ ],
+ q(straits salish) => [
+ q(6241),
+ q(0),
+ ],
+ q(suabo) => [
+ q(6323),
+ q(0),
+ ],
+ q(suarmin) => [
+ q(5946),
+ q(0),
+ ],
+ q(suau) => [
+ q(6281),
+ q(0),
+ ],
+ q(suba) => [
+ q(6291),
+ q(0),
+ ],
+ q(suba-simbiti) => [
+ q(6202),
+ q(0),
+ ],
+ q(subi) => [
+ q(7428),
+ q(0),
+ ],
+ q(subiya) => [
+ q(5891),
+ q(0),
+ ],
+ q(subtiaba) => [
+ q(6256),
+ q(0),
+ ],
+ q(sudanese arabic) => [
+ q(0838),
+ q(0),
+ ],
+ q(sudanese creole arabic) => [
+ q(5402),
+ q(0),
+ ],
+ q(sudest) => [
+ q(6454),
+ q(0),
+ ],
+ q(sudovian) => [
+ q(7438),
+ q(0),
+ ],
+ q(suena) => [
+ q(6250),
+ q(0),
+ ],
+ q(suga) => [
+ q(5968),
+ q(0),
+ ],
+ q(suganga) => [
+ q(6251),
+ q(0),
+ ],
+ q(sugut dusun) => [
+ q(3765),
+ q(0),
+ ],
+ q(sui) => [
+ q(6274),
+ q(0),
+ ],
+ q(suki) => [
+ q(6252),
+ q(0),
+ ],
+ q(suku) => [
+ q(6248),
+ q(0),
+ ],
+ q(sukuma) => [
+ q(0408),
+ q(0),
+ ],
+ q(sukur) => [
+ q(6307),
+ q(0),
+ ],
+ q(sukurum) => [
+ q(7863),
+ q(0),
+ ],
+ q(sula) => [
+ q(6322),
+ q(0),
+ ],
+ q(sulka) => [
+ q(6247),
+ q(0),
+ ],
+ q(sulod) => [
+ q(6185),
+ q(0),
+ ],
+ q(suma) => [
+ q(6172),
+ q(0),
+ ],
+ q(sumariup) => [
+ q(6022),
+ q(0),
+ ],
+ q(sumau) => [
+ q(6024),
+ q(0),
+ ],
+ q(sumbawa) => [
+ q(6103),
+ q(0),
+ ],
+ q(sumbwa) => [
+ q(6258),
+ q(0),
+ ],
+ q(sumerian) => [
+ q(0411),
+ q(0),
+ ],
+ q(sumi naga) => [
+ q(5054),
+ q(0),
+ ],
+ q(sumtu chin) => [
+ q(1882),
+ q(0),
+ ],
+ q(sunam) => [
+ q(6210),
+ q(0),
+ ],
+ q(sundanese) => [
+ q(0409),
+ q(0),
+ ],
+ q(sunum) => [
+ q(7614),
+ q(0),
+ ],
+ q(sunwar) => [
+ q(6260),
+ q(0),
+ ],
+ q(suomenruotsalainen viittomakieli) => [
+ q(2370),
+ q(0),
+ ],
+ q(suoy) => [
+ q(6311),
+ q(0),
+ ],
+ q(supyire senoufo) => [
+ q(6160),
+ q(0),
+ ],
+ q(sur) => [
+ q(6407),
+ q(0),
+ ],
+ q(surayt) => [
+ q(6675),
+ q(0),
+ ],
+ q(surbakhal) => [
+ q(5882),
+ q(0),
+ ],
+ q(surgujia) => [
+ q(5969),
+ q(0),
+ ],
+ q(suri) => [
+ q(6254),
+ q(0),
+ ],
+ q(surigaonon) => [
+ q(5964),
+ q(0),
+ ],
+ q(surjapuri) => [
+ q(6037),
+ q(0),
+ ],
+ q(sursurunga) => [
+ q(5981),
+ q(0),
+ ],
+ q(suruaha) => [
+ q(6289),
+ q(0),
+ ],
+ q(surubu) => [
+ q(5917),
+ q(0),
+ ],
+ q(surui) => [
+ q(6195),
+ q(0),
+ ],
+ q(surui do para) => [
+ q(4175),
+ q(0),
+ ],
+ q(susquehannock) => [
+ q(6173),
+ q(0),
+ ],
+ q(susu) => [
+ q(0410),
+ q(0),
+ ],
+ q(susuami) => [
+ q(6220),
+ q(0),
+ ],
+ q(suundi) => [
+ q(5921),
+ q(0),
+ ],
+ q(suwawa) => [
+ q(6286),
+ q(0),
+ ],
+ q(suya) => [
+ q(6259),
+ q(0),
+ ],
+ q(svan) => [
+ q(6261),
+ q(0),
+ ],
+ q(swabian) => [
+ q(6272),
+ q(0),
+ ],
+ q(swahili) => [
+ q(0412),
+ q(0),
+ ],
+ q(swahili (individual language)) => [
+ q(6273),
+ q(0),
+ ],
+ q(swahili (macrolanguage)) => [
+ q(0412),
+ q(1),
+ ],
+ q(swampy cree) => [
+ q(1883),
+ q(0),
+ ],
+ q(swati) => [
+ q(0407),
+ q(0),
+ ],
+ q(swedish) => [
+ q(0413),
+ q(0),
+ ],
+ q(swedish sign language) => [
+ q(6277),
+ q(0),
+ ],
+ q(swiss german) => [
+ q(0166),
+ q(0),
+ ],
+ q(swiss-french sign language) => [
+ q(6217),
+ q(0),
+ ],
+ q(swiss-german sign language) => [
+ q(5966),
+ q(0),
+ ],
+ q(swiss-italian sign language) => [
+ q(6070),
+ q(0),
+ ],
+ q(swo) => [
+ q(6147),
+ q(0),
+ ],
+ q(syenara senoufo) => [
+ q(6005),
+ q(0),
+ ],
+ q(sylheti) => [
+ q(6308),
+ q(0),
+ ],
+ q(syriac) => [
+ q(0415),
+ q(0),
+ ],
+ q(t'en) => [
+ q(6390),
+ q(0),
+ ],
+ q(ta'izzi-adeni arabic) => [
+ q(0595),
+ q(0),
+ ],
+ q(taabwa) => [
+ q(6338),
+ q(0),
+ ],
+ q(tabaa zapotec) => [
+ q(7733),
+ q(0),
+ ],
+ q(tabaru) => [
+ q(6371),
+ q(0),
+ ],
+ q(tabasco chontal) => [
+ q(1722),
+ q(0),
+ ],
+ q(tabasco nahuatl) => [
+ q(4844),
+ q(0),
+ ],
+ q(tabasco zoque) => [
+ q(7822),
+ q(0),
+ ],
+ q(tabassaran) => [
+ q(6327),
+ q(0),
+ ],
+ q(tabla) => [
+ q(6589),
+ q(0),
+ ],
+ q(tabo) => [
+ q(3477),
+ q(0),
+ ],
+ q(tabriak) => [
+ q(6818),
+ q(0),
+ ],
+ q(tacahua mixtec) => [
+ q(7456),
+ q(0),
+ ],
+ q(tacana) => [
+ q(6579),
+ q(0),
+ ],
+ q(tachawit) => [
+ q(6004),
+ q(0),
+ ],
+ q(tachelhit) => [
+ q(5989),
+ q(0),
+ ],
+ q(tachoni) => [
+ q(4050),
+ q(0),
+ ],
+ q(tadaksahak) => [
+ q(2151),
+ q(0),
+ ],
+ q(tadyawan) => [
+ q(6417),
+ q(0),
+ ],
+ q(tae') => [
+ q(5810),
+ q(0),
+ ],
+ q(tafi) => [
+ q(6376),
+ q(0),
+ ],
+ q(tagabawa) => [
+ q(1179),
+ q(0),
+ ],
+ q(tagakaulo) => [
+ q(3412),
+ q(0),
+ ],
+ q(tagal murut) => [
+ q(4598),
+ q(0),
+ ],
+ q(tagalaka) => [
+ q(6465),
+ q(0),
+ ],
+ q(tagalog) => [
+ q(0425),
+ q(0),
+ ],
+ q(tagargrent) => [
+ q(5308),
+ q(0),
+ ],
+ q(tagbanwa) => [
+ q(6369),
+ q(0),
+ ],
+ q(tagbu) => [
+ q(6360),
+ q(0),
+ ],
+ q(tagdal) => [
+ q(6396),
+ q(0),
+ ],
+ q(tagin) => [
+ q(6452),
+ q(0),
+ ],
+ q(tagish) => [
+ q(6463),
+ q(0),
+ ],
+ q(tagoi) => [
+ q(6332),
+ q(0),
+ ],
+ q(tagwana senoufo) => [
+ q(6462),
+ q(0),
+ ],
+ q(tahaggart tamahaq) => [
+ q(6482),
+ q(0),
+ ],
+ q(tahitian) => [
+ q(0416),
+ q(0),
+ ],
+ q(tahltan) => [
+ q(6480),
+ q(0),
+ ],
+ q(tai) => [
+ q(6344),
+ q(0),
+ ],
+ q(tai daeng) => [
+ q(6806),
+ q(0),
+ ],
+ q(tai dam) => [
+ q(1297),
+ q(0),
+ ],
+ q(tai do) => [
+ q(6802),
+ q(0),
+ ],
+ q(tai don) => [
+ q(6768),
+ q(0),
+ ],
+ q(tai hang tong) => [
+ q(6466),
+ q(0),
+ ],
+ q(tai hongjin) => [
+ q(6507),
+ q(0),
+ ],
+ q(tai laing) => [
+ q(6511),
+ q(0),
+ ],
+ q(tai languages) => [
+ q(0417),
+ q(0),
+ ],
+ q(tai loi) => [
+ q(6547),
+ q(0),
+ ],
+ q(tai long) => [
+ q(6471),
+ q(0),
+ ],
+ q(tai mene) => [
+ q(6569),
+ q(0),
+ ],
+ q(tai nua) => [
+ q(6399),
+ q(0),
+ ],
+ q(tai pao) => [
+ q(6634),
+ q(0),
+ ],
+ q(tai thanh) => [
+ q(6566),
+ q(0),
+ ],
+ q(tai ya) => [
+ q(1916),
+ q(0),
+ ],
+ q(taiap) => [
+ q(2593),
+ q(0),
+ ],
+ q(taikat) => [
+ q(0831),
+ q(0),
+ ],
+ q(tainae) => [
+ q(0668),
+ q(0),
+ ],
+ q(taino) => [
+ q(6593),
+ q(0),
+ ],
+ q(tairuma) => [
+ q(6821),
+ q(0),
+ ],
+ q(taita) => [
+ q(1951),
+ q(0),
+ ],
+ q(taiwan sign language) => [
+ q(6696),
+ q(0),
+ ],
+ q(taje) => [
+ q(5383),
+ q(0),
+ ],
+ q(tajik) => [
+ q(0424),
+ q(0),
+ ],
+ q(tajiki arabic) => [
+ q(0567),
+ q(0),
+ ],
+ q(tajio) => [
+ q(6405),
+ q(0),
+ ],
+ q(tajuasohn) => [
+ q(6508),
+ q(0),
+ ],
+ q(takelma) => [
+ q(6523),
+ q(0),
+ ],
+ q(takestani) => [
+ q(6528),
+ q(0),
+ ],
+ q(takia) => [
+ q(6350),
+ q(0),
+ ],
+ q(takua) => [
+ q(6533),
+ q(0),
+ ],
+ q(takuu) => [
+ q(4854),
+ q(0),
+ ],
+ q(takwane) => [
+ q(6520),
+ q(0),
+ ],
+ q(tal) => [
+ q(6335),
+ q(0),
+ ],
+ q(tala) => [
+ q(6334),
+ q(0),
+ ],
+ q(talaandig) => [
+ q(1257),
+ q(0),
+ ],
+ q(talaud) => [
+ q(6537),
+ q(0),
+ ],
+ q(taliabu) => [
+ q(6552),
+ q(0),
+ ],
+ q(talieng) => [
+ q(6401),
+ q(0),
+ ],
+ q(talinga-bwisi) => [
+ q(6540),
+ q(0),
+ ],
+ q(talise) => [
+ q(6548),
+ q(0),
+ ],
+ q(talodi) => [
+ q(6545),
+ q(0),
+ ],
+ q(taloki) => [
+ q(6541),
+ q(0),
+ ],
+ q(talondo') => [
+ q(6544),
+ q(0),
+ ],
+ q(talu) => [
+ q(7674),
+ q(0),
+ ],
+ q(talur) => [
+ q(2940),
+ q(0),
+ ],
+ q(talysh) => [
+ q(6554),
+ q(0),
+ ],
+ q(tama (chad)) => [
+ q(6555),
+ q(0),
+ ],
+ q(tama (colombia)) => [
+ q(6428),
+ q(0),
+ ],
+ q(tamagario) => [
+ q(6379),
+ q(0),
+ ],
+ q(taman (indonesia)) => [
+ q(6567),
+ q(0),
+ ],
+ q(taman (myanmar)) => [
+ q(6383),
+ q(0),
+ ],
+ q(tamanaku) => [
+ q(6578),
+ q(0),
+ ],
+ q(tamashek) => [
+ q(0434),
+ q(0),
+ ],
+ q(tamasheq) => [
+ q(6339),
+ q(0),
+ ],
+ q(tamazola mixtec) => [
+ q(7003),
+ q(0),
+ ],
+ q(tambas) => [
+ q(6406),
+ q(0),
+ ],
+ q(tambora) => [
+ q(7488),
+ q(0),
+ ],
+ q(tambotalo) => [
+ q(6549),
+ q(0),
+ ],
+ q(tambunan dusun) => [
+ q(3766),
+ q(0),
+ ],
+ q(tami) => [
+ q(6577),
+ q(0),
+ ],
+ q(tamil) => [
+ q(0418),
+ q(0),
+ ],
+ q(tamki) => [
+ q(6345),
+ q(0),
+ ],
+ q(tamnim citak) => [
+ q(6565),
+ q(0),
+ ],
+ q(tampias lobu) => [
+ q(4009),
+ q(0),
+ ],
+ q(tampuan) => [
+ q(6639),
+ q(0),
+ ],
+ q(tampulma) => [
+ q(6632),
+ q(0),
+ ],
+ q(tanacross) => [
+ q(6374),
+ q(0),
+ ],
+ q(tanahmerah) => [
+ q(6384),
+ q(0),
+ ],
+ q(tanaina) => [
+ q(6439),
+ q(0),
+ ],
+ q(tanapag) => [
+ q(6640),
+ q(0),
+ ],
+ q(tandaganon) => [
+ q(6453),
+ q(0),
+ ],
+ q(tandia) => [
+ q(6586),
+ q(0),
+ ],
+ q(tandroy-mahafaly malagasy) => [
+ q(6416),
+ q(0),
+ ],
+ q(tanema) => [
+ q(6600),
+ q(0),
+ ],
+ q(tangale) => [
+ q(6336),
+ q(0),
+ ],
+ q(tangchangya) => [
+ q(6598),
+ q(0),
+ ],
+ q(tangga) => [
+ q(6449),
+ q(0),
+ ],
+ q(tanggu) => [
+ q(6460),
+ q(0),
+ ],
+ q(tangkhul naga (india)) => [
+ q(4948),
+ q(0),
+ ],
+ q(tangkhul naga (myanmar)) => [
+ q(5078),
+ q(0),
+ ],
+ q(tangko) => [
+ q(6532),
+ q(0),
+ ],
+ q(tanglang) => [
+ q(7675),
+ q(0),
+ ],
+ q(tangoa) => [
+ q(6455),
+ q(0),
+ ],
+ q(tanguat) => [
+ q(6365),
+ q(0),
+ ],
+ q(tangut) => [
+ q(6785),
+ q(0),
+ ],
+ q(tanimbili) => [
+ q(6352),
+ q(0),
+ ],
+ q(tanimuca-retuara) => [
+ q(6581),
+ q(0),
+ ],
+ q(tanjijili) => [
+ q(6846),
+ q(0),
+ ],
+ q(tankarana malagasy) => [
+ q(7368),
+ q(0),
+ ],
+ q(tanosy malagasy) => [
+ q(6797),
+ q(0),
+ ],
+ q(tanudan kalinga) => [
+ q(3442),
+ q(0),
+ ],
+ q(tanzanian sign language) => [
+ q(6812),
+ q(0),
+ ],
+ q(tapeba) => [
+ q(6349),
+ q(0),
+ ],
+ q(tapei) => [
+ q(0649),
+ q(0),
+ ],
+ q(tapiete) => [
+ q(6629),
+ q(0),
+ ],
+ q(tapirape) => [
+ q(6331),
+ q(0),
+ ],
+ q(tarao naga) => [
+ q(6669),
+ q(0),
+ ],
+ q(tareng) => [
+ q(6457),
+ q(0),
+ ],
+ q(tariana) => [
+ q(6330),
+ q(0),
+ ],
+ q(tarifit) => [
+ q(5762),
+ q(0),
+ ],
+ q(tarok) => [
+ q(7546),
+ q(0),
+ ],
+ q(taroko) => [
+ q(6676),
+ q(0),
+ ],
+ q(tarpia) => [
+ q(6627),
+ q(0),
+ ],
+ q(tartessian) => [
+ q(6792),
+ q(0),
+ ],
+ q(tasawaq) => [
+ q(6774),
+ q(0),
+ ],
+ q(tase naga) => [
+ q(5060),
+ q(0),
+ ],
+ q(tasmanian) => [
+ q(7460),
+ q(0),
+ ],
+ q(tasmate) => [
+ q(6573),
+ q(0),
+ ],
+ q(tataltepec chatino) => [
+ q(1886),
+ q(0),
+ ],
+ q(tatana) => [
+ q(6796),
+ q(0),
+ ],
+ q(tatar) => [
+ q(0419),
+ q(0),
+ ],
+ q(tatuyo) => [
+ q(6343),
+ q(0),
+ ],
+ q(tauade) => [
+ q(6707),
+ q(0),
+ ],
+ q(taulil) => [
+ q(6736),
+ q(0),
+ ],
+ q(taungyo) => [
+ q(6386),
+ q(0),
+ ],
+ q(taupota) => [
+ q(6624),
+ q(0),
+ ],
+ q(tause) => [
+ q(6329),
+ q(0),
+ ],
+ q(taushiro) => [
+ q(6672),
+ q(0),
+ ],
+ q(tausug) => [
+ q(6687),
+ q(0),
+ ],
+ q(tauya) => [
+ q(6798),
+ q(0),
+ ],
+ q(taveta) => [
+ q(6756),
+ q(0),
+ ],
+ q(tavoyan) => [
+ q(6754),
+ q(0),
+ ],
+ q(tavringer romani) => [
+ q(5796),
+ q(0),
+ ],
+ q(tawala) => [
+ q(6362),
+ q(0),
+ ],
+ q(tawallammat tamajaq) => [
+ q(6720),
+ q(0),
+ ],
+ q(tawande) => [
+ q(7458),
+ q(0),
+ ],
+ q(tawang monpa) => [
+ q(6770),
+ q(0),
+ ],
+ q(tawara) => [
+ q(6769),
+ q(0),
+ ],
+ q(taworta) => [
+ q(6363),
+ q(0),
+ ],
+ q(tawoyan) => [
+ q(6780),
+ q(0),
+ ],
+ q(tawr chin) => [
+ q(6387),
+ q(0),
+ ],
+ q(tay) => [
+ q(6811),
+ q(0),
+ ],
+ q(tay boi) => [
+ q(6341),
+ q(0),
+ ],
+ q(tay khang) => [
+ q(6597),
+ q(0),
+ ],
+ q(tay sa pa) => [
+ q(6807),
+ q(0),
+ ],
+ q(tay tac) => [
+ q(6808),
+ q(0),
+ ],
+ q(tayabas ayta) => [
+ q(1011),
+ q(0),
+ ],
+ q(tayart tamajeq) => [
+ q(6486),
+ q(0),
+ ],
+ q(tayo) => [
+ q(1762),
+ q(0),
+ ],
+ q(taznatit) => [
+ q(2608),
+ q(0),
+ ],
+ q(tboli) => [
+ q(6359),
+ q(0),
+ ],
+ q(tchitchege) => [
+ q(6382),
+ q(0),
+ ],
+ q(tchumbuli) => [
+ q(1399),
+ q(0),
+ ],
+ q(te'un) => [
+ q(6751),
+ q(0),
+ ],
+ q(teanu) => [
+ q(6531),
+ q(0),
+ ],
+ q(tebi) => [
+ q(2092),
+ q(0),
+ ],
+ q(tebul sign language) => [
+ q(6702),
+ q(0),
+ ],
+ q(tebul ure dogon) => [
+ q(2164),
+ q(0),
+ ],
+ q(tecpatlan totonac) => [
+ q(6392),
+ q(0),
+ ],
+ q(tedaga) => [
+ q(6742),
+ q(0),
+ ],
+ q(tedim chin) => [
+ q(1888),
+ q(0),
+ ],
+ q(tee) => [
+ q(6526),
+ q(0),
+ ],
+ q(teen) => [
+ q(4004),
+ q(0),
+ ],
+ q(tefaro) => [
+ q(6440),
+ q(0),
+ ],
+ q(tegali) => [
+ q(5724),
+ q(0),
+ ],
+ q(tehit) => [
+ q(3518),
+ q(0),
+ ],
+ q(tehuelche) => [
+ q(6425),
+ q(0),
+ ],
+ q(tejalapan zapotec) => [
+ q(7872),
+ q(0),
+ ],
+ q(teke-ebo) => [
+ q(2210),
+ q(0),
+ ],
+ q(teke-fuumu) => [
+ q(2899),
+ q(0),
+ ],
+ q(teke-kukuya) => [
+ q(3402),
+ q(0),
+ ],
+ q(teke-laali) => [
+ q(3939),
+ q(0),
+ ],
+ q(teke-nzikou) => [
+ q(5158),
+ q(0),
+ ],
+ q(teke-tege) => [
+ q(6424),
+ q(0),
+ ],
+ q(teke-tsaayi) => [
+ q(6801),
+ q(0),
+ ],
+ q(teke-tyee) => [
+ q(6810),
+ q(0),
+ ],
+ q(tektiteko) => [
+ q(6706),
+ q(0),
+ ],
+ q(tela-masbuar) => [
+ q(6753),
+ q(0),
+ ],
+ q(telefol) => [
+ q(6538),
+ q(0),
+ ],
+ q(telugu) => [
+ q(0420),
+ q(0),
+ ],
+ q(teluti) => [
+ q(6550),
+ q(0),
+ ],
+ q(tem) => [
+ q(3219),
+ q(0),
+ ],
+ q(temacine tamazight) => [
+ q(6514),
+ q(0),
+ ],
+ q(temascaltepec nahuatl) => [
+ q(4860),
+ q(0),
+ ],
+ q(tembe) => [
+ q(6645),
+ q(0),
+ ],
+ q(tembo (kitembo)) => [
+ q(6366),
+ q(0),
+ ],
+ q(tembo (motembo)) => [
+ q(6575),
+ q(0),
+ ],
+ q(teme) => [
+ q(6409),
+ q(0),
+ ],
+ q(temein) => [
+ q(6431),
+ q(0),
+ ],
+ q(temi) => [
+ q(6149),
+ q(0),
+ ],
+ q(temiar) => [
+ q(6418),
+ q(0),
+ ],
+ q(temoaya otomi) => [
+ q(5302),
+ q(0),
+ ],
+ q(temoq) => [
+ q(6568),
+ q(0),
+ ],
+ q(tempasuk dusun) => [
+ q(6414),
+ q(0),
+ ],
+ q(temuan) => [
+ q(6576),
+ q(0),
+ ],
+ q(tena) => [
+ q(1141),
+ q(0),
+ ],
+ q(tena lowland quichua) => [
+ q(5670),
+ q(0),
+ ],
+ q(tenango otomi) => [
+ q(5298),
+ q(0),
+ ],
+ q(tene kan dogon) => [
+ q(2157),
+ q(0),
+ ],
+ q(tenggarong kutai malay) => [
+ q(6979),
+ q(0),
+ ],
+ q(tengger) => [
+ q(6432),
+ q(0),
+ ],
+ q(tenharim) => [
+ q(5326),
+ q(0),
+ ],
+ q(tenino) => [
+ q(6648),
+ q(0),
+ ],
+ q(tenis) => [
+ q(6595),
+ q(0),
+ ],
+ q(tennet) => [
+ q(6436),
+ q(0),
+ ],
+ q(teop) => [
+ q(6498),
+ q(0),
+ ],
+ q(teor) => [
+ q(6434),
+ q(0),
+ ],
+ q(tepecano) => [
+ q(6430),
+ q(0),
+ ],
+ q(tepetotutla chinantec) => [
+ q(1805),
+ q(0),
+ ],
+ q(tepeuxila cuicatec) => [
+ q(1919),
+ q(0),
+ ],
+ q(tepinapa chinantec) => [
+ q(1889),
+ q(0),
+ ],
+ q(tepo krumen) => [
+ q(6421),
+ q(0),
+ ],
+ q(ter sami) => [
+ q(6040),
+ q(0),
+ ],
+ q(tera) => [
+ q(6721),
+ q(0),
+ ],
+ q(terebu) => [
+ q(6657),
+ q(0),
+ ],
+ q(terei) => [
+ q(1507),
+ q(0),
+ ],
+ q(tereno) => [
+ q(0422),
+ q(0),
+ ],
+ q(teressa) => [
+ q(6423),
+ q(0),
+ ],
+ q(tereweng) => [
+ q(6767),
+ q(0),
+ ],
+ q(teribe) => [
+ q(6441),
+ q(0),
+ ],
+ q(terik) => [
+ q(6420),
+ q(0),
+ ],
+ q(termanu) => [
+ q(6777),
+ q(0),
+ ],
+ q(ternate) => [
+ q(6442),
+ q(0),
+ ],
+ q(ternateno) => [
+ q(6561),
+ q(0),
+ ],
+ q(tesaka malagasy) => [
+ q(6522),
+ q(0),
+ ],
+ q(tese) => [
+ q(3241),
+ q(0),
+ ],
+ q(teshenawa) => [
+ q(6763),
+ q(0),
+ ],
+ q(teso) => [
+ q(6429),
+ q(0),
+ ],
+ q(tetela) => [
+ q(6542),
+ q(0),
+ ],
+ q(tetelcingo nahuatl) => [
+ q(4848),
+ q(0),
+ ],
+ q(tetete) => [
+ q(6419),
+ q(0),
+ ],
+ q(tetum) => [
+ q(0423),
+ q(0),
+ ],
+ q(tetun dili) => [
+ q(6413),
+ q(0),
+ ],
+ q(teutila cuicatec) => [
+ q(1915),
+ q(0),
+ ],
+ q(tewa (indonesia)) => [
+ q(6765),
+ q(0),
+ ],
+ q(tewa (usa)) => [
+ q(6435),
+ q(0),
+ ],
+ q(tewe) => [
+ q(6779),
+ q(0),
+ ],
+ q(texcatepec otomi) => [
+ q(5305),
+ q(0),
+ ],
+ q(texistepec popoluca) => [
+ q(5539),
+ q(0),
+ ],
+ q(texmelucan zapotec) => [
+ q(7850),
+ q(0),
+ ],
+ q(tezoatlan mixtec) => [
+ q(4628),
+ q(0),
+ ],
+ q(tha) => [
+ q(6485),
+ q(0),
+ ],
+ q(thachanadan) => [
+ q(6475),
+ q(0),
+ ],
+ q(thado chin) => [
+ q(6395),
+ q(0),
+ ],
+ q(thai) => [
+ q(0426),
+ q(0),
+ ],
+ q(thai sign language) => [
+ q(6694),
+ q(0),
+ ],
+ q(thai song) => [
+ q(6129),
+ q(0),
+ ],
+ q(thaiphum chin) => [
+ q(1891),
+ q(0),
+ ],
+ q(thakali) => [
+ q(6479),
+ q(0),
+ ],
+ q(thangal naga) => [
+ q(4912),
+ q(0),
+ ],
+ q(thangmi) => [
+ q(6469),
+ q(0),
+ ],
+ q(thao) => [
+ q(6205),
+ q(0),
+ ],
+ q(tharaka) => [
+ q(6472),
+ q(0),
+ ],
+ q(thayore) => [
+ q(6467),
+ q(0),
+ ],
+ q(thaypan) => [
+ q(6805),
+ q(0),
+ ],
+ q(the) => [
+ q(6484),
+ q(0),
+ ],
+ q(tho) => [
+ q(6618),
+ q(0),
+ ],
+ q(thompson) => [
+ q(6476),
+ q(0),
+ ],
+ q(thopho) => [
+ q(7676),
+ q(0),
+ ],
+ q(thracian) => [
+ q(6786),
+ q(0),
+ ],
+ q(thu lao) => [
+ q(6803),
+ q(0),
+ ],
+ q(thudam) => [
+ q(6483),
+ q(0),
+ ],
+ q(thulung) => [
+ q(6403),
+ q(0),
+ ],
+ q(thurawal) => [
+ q(6355),
+ q(0),
+ ],
+ q(thuri) => [
+ q(6481),
+ q(0),
+ ],
+ q(tiagbamrin aizi) => [
+ q(0683),
+ q(0),
+ ],
+ q(tiale) => [
+ q(4401),
+ q(0),
+ ],
+ q(tiang) => [
+ q(6357),
+ q(0),
+ ],
+ q(tibea) => [
+ q(4840),
+ q(0),
+ ],
+ q(tibetan) => [
+ q(0427),
+ q(0),
+ ],
+ q(tibeto-burman languages) => [
+ q(0527),
+ q(0),
+ ],
+ q(tichurong) => [
+ q(6385),
+ q(0),
+ ],
+ q(ticuna) => [
+ q(6373),
+ q(0),
+ ],
+ q(tidaa mixtec) => [
+ q(4556),
+ q(0),
+ ],
+ q(tidikelt tamazight) => [
+ q(6487),
+ q(0),
+ ],
+ q(tidong) => [
+ q(6489),
+ q(0),
+ ],
+ q(tidore) => [
+ q(6755),
+ q(0),
+ ],
+ q(tiefo) => [
+ q(6500),
+ q(0),
+ ],
+ q(tiemacewe bozo) => [
+ q(1365),
+ q(0),
+ ],
+ q(tiene) => [
+ q(6492),
+ q(0),
+ ],
+ q(tieyaxo bozo) => [
+ q(1375),
+ q(0),
+ ],
+ q(tifal) => [
+ q(6490),
+ q(0),
+ ],
+ q(tigak) => [
+ q(6445),
+ q(0),
+ ],
+ q(tigon mbembe) => [
+ q(5153),
+ q(0),
+ ],
+ q(tigre) => [
+ q(0428),
+ q(0),
+ ],
+ q(tigrinya) => [
+ q(0429),
+ q(0),
+ ],
+ q(tii) => [
+ q(6791),
+ q(0),
+ ],
+ q(tijaltepec mixtec) => [
+ q(7448),
+ q(0),
+ ],
+ q(tikar) => [
+ q(6494),
+ q(0),
+ ],
+ q(tikopia) => [
+ q(6525),
+ q(0),
+ ],
+ q(tilapa otomi) => [
+ q(5296),
+ q(0),
+ ],
+ q(tillamook) => [
+ q(6495),
+ q(0),
+ ],
+ q(tilquiapan zapotec) => [
+ q(7871),
+ q(0),
+ ],
+ q(tilung) => [
+ q(6493),
+ q(0),
+ ],
+ q(tima) => [
+ q(6572),
+ q(0),
+ ],
+ q(timbe) => [
+ q(6496),
+ q(0),
+ ],
+ q(timbisha) => [
+ q(5331),
+ q(0),
+ ],
+ q(timne) => [
+ q(0421),
+ q(0),
+ ],
+ q(timor pidgin) => [
+ q(6760),
+ q(0),
+ ],
+ q(timucua) => [
+ q(6512),
+ q(0),
+ ],
+ q(timugon murut) => [
+ q(6491),
+ q(0),
+ ],
+ q(tinani) => [
+ q(3797),
+ q(0),
+ ],
+ q(tindi) => [
+ q(6497),
+ q(0),
+ ],
+ q(tingui-boto) => [
+ q(6461),
+ q(0),
+ ],
+ q(tinigua) => [
+ q(6502),
+ q(0),
+ ],
+ q(tinoc kallahan) => [
+ q(6583),
+ q(0),
+ ],
+ q(tinputz) => [
+ q(6644),
+ q(0),
+ ],
+ q(tippera) => [
+ q(6626),
+ q(0),
+ ],
+ q(tira) => [
+ q(6488),
+ q(0),
+ ],
+ q(tirahi) => [
+ q(6656),
+ q(0),
+ ],
+ q(tiranige diga dogon) => [
+ q(6400),
+ q(0),
+ ],
+ q(tiri) => [
+ q(1741),
+ q(0),
+ ],
+ q(tiruray) => [
+ q(6506),
+ q(0),
+ ],
+ q(tita) => [
+ q(6410),
+ q(0),
+ ],
+ q(titan) => [
+ q(6725),
+ q(0),
+ ],
+ q(tiv) => [
+ q(0430),
+ q(0),
+ ],
+ q(tiwa) => [
+ q(3790),
+ q(0),
+ ],
+ q(tiwi) => [
+ q(6504),
+ q(0),
+ ],
+ q(tjurruru) => [
+ q(6516),
+ q(0),
+ ],
+ q(tlachichilco tepehua) => [
+ q(6638),
+ q(0),
+ ],
+ q(tlacoapa me'phaa) => [
+ q(6631),
+ q(0),
+ ],
+ q(tlacoapa tlapanec) => [
+ q(6631),
+ q(0),
+ ],
+ q(tlacoatzintepec chinantec) => [
+ q(1892),
+ q(0),
+ ],
+ q(tlacolulita zapotec) => [
+ q(7835),
+ q(0),
+ ],
+ q(tlahuitoltepec mixe) => [
+ q(4642),
+ q(0),
+ ],
+ q(tlamacazapa nahuatl) => [
+ q(5105),
+ q(0),
+ ],
+ q(tlazoyaltepec mixtec) => [
+ q(4465),
+ q(0),
+ ],
+ q(tlhingan-hol) => [
+ q(0432),
+ q(0),
+ ],
+ q(tlingit) => [
+ q(0433),
+ q(0),
+ ],
+ q(to) => [
+ q(6623),
+ q(0),
+ ],
+ q(to'abaita) => [
+ q(4362),
+ q(0),
+ ],
+ q(toaripi) => [
+ q(6649),
+ q(0),
+ ],
+ q(toba) => [
+ q(6603),
+ q(0),
+ ],
+ q(toba-maskoy) => [
+ q(6560),
+ q(0),
+ ],
+ q(tobagonian creole english) => [
+ q(6450),
+ q(0),
+ ],
+ q(tobanga) => [
+ q(6584),
+ q(0),
+ ],
+ q(tobati) => [
+ q(6712),
+ q(0),
+ ],
+ q(tobelo) => [
+ q(6535),
+ q(0),
+ ],
+ q(tobian) => [
+ q(6621),
+ q(0),
+ ],
+ q(tobilung) => [
+ q(6444),
+ q(0),
+ ],
+ q(tobo) => [
+ q(6368),
+ q(0),
+ ],
+ q(tocantins asurini) => [
+ q(0904),
+ q(0),
+ ],
+ q(tocho) => [
+ q(6347),
+ q(0),
+ ],
+ q(toda) => [
+ q(6393),
+ q(0),
+ ],
+ q(todrah) => [
+ q(6411),
+ q(0),
+ ],
+ q(tofanma) => [
+ q(6539),
+ q(0),
+ ],
+ q(tofin gbe) => [
+ q(6438),
+ q(0),
+ ],
+ q(togbo-vara banda) => [
+ q(6616),
+ q(0),
+ ],
+ q(togoyo) => [
+ q(6464),
+ q(0),
+ ],
+ q(tohono o'odham) => [
+ q(5257),
+ q(0),
+ ],
+ q(tojolabal) => [
+ q(6610),
+ q(0),
+ ],
+ q(tok pisin) => [
+ q(0437),
+ q(0),
+ ],
+ q(tokano) => [
+ q(7877),
+ q(0),
+ ],
+ q(tokelau) => [
+ q(0431),
+ q(0),
+ ],
+ q(tokharian a) => [
+ q(7451),
+ q(0),
+ ],
+ q(tokharian b) => [
+ q(6782),
+ q(0),
+ ],
+ q(toku-no-shima) => [
+ q(6524),
+ q(0),
+ ],
+ q(tol) => [
+ q(3072),
+ q(0),
+ ],
+ q(tolaki) => [
+ q(3812),
+ q(0),
+ ],
+ q(tolomako) => [
+ q(6543),
+ q(0),
+ ],
+ q(tolowa) => [
+ q(6611),
+ q(0),
+ ],
+ q(toma) => [
+ q(6605),
+ q(0),
+ ],
+ q(tomadino) => [
+ q(6404),
+ q(0),
+ ],
+ q(tombelala) => [
+ q(6719),
+ q(0),
+ ],
+ q(tombonuo) => [
+ q(6781),
+ q(0),
+ ],
+ q(tombulu) => [
+ q(6612),
+ q(0),
+ ],
+ q(tomedes) => [
+ q(6606),
+ q(0),
+ ],
+ q(tomini) => [
+ q(6788),
+ q(0),
+ ],
+ q(tommo so dogon) => [
+ q(2159),
+ q(0),
+ ],
+ q(tomo kan dogon) => [
+ q(2158),
+ q(0),
+ ],
+ q(tomoip) => [
+ q(6650),
+ q(0),
+ ],
+ q(tondano) => [
+ q(6408),
+ q(0),
+ ],
+ q(tondi songway kiini) => [
+ q(6697),
+ q(0),
+ ],
+ q(tonga) => [
+ q(0436),
+ q(1),
+ ],
+ q(tonga (nyasa)) => [
+ q(0435),
+ q(0),
+ ],
+ q(tonga (thailand)) => [
+ q(6602),
+ q(0),
+ ],
+ q(tonga (tonga islands)) => [
+ q(0436),
+ q(0),
+ ],
+ q(tonga (zambia)) => [
+ q(6609),
+ q(0),
+ ],
+ q(tongwe) => [
+ q(6601),
+ q(0),
+ ],
+ q(tonjon) => [
+ q(6513),
+ q(0),
+ ],
+ q(tonkawa) => [
+ q(6655),
+ q(0),
+ ],
+ q(tonsawang) => [
+ q(6599),
+ q(0),
+ ],
+ q(tonsea) => [
+ q(6793),
+ q(0),
+ ],
+ q(tontemboan) => [
+ q(6596),
+ q(0),
+ ],
+ q(tooro) => [
+ q(6713),
+ q(0),
+ ],
+ q(topoiyo) => [
+ q(6622),
+ q(0),
+ ],
+ q(toposa) => [
+ q(6615),
+ q(0),
+ ],
+ q(tora) => [
+ q(6680),
+ q(0),
+ ],
+ q(toraja-sa'dan) => [
+ q(5914),
+ q(0),
+ ],
+ q(toram) => [
+ q(6665),
+ q(0),
+ ],
+ q(torau) => [
+ q(6724),
+ q(0),
+ ],
+ q(tornedalen finnish) => [
+ q(2340),
+ q(0),
+ ],
+ q(toro) => [
+ q(6415),
+ q(0),
+ ],
+ q(toro so dogon) => [
+ q(2162),
+ q(0),
+ ],
+ q(toro tegu dogon) => [
+ q(2163),
+ q(0),
+ ],
+ q(toromono) => [
+ q(6591),
+ q(0),
+ ],
+ q(torona) => [
+ q(6652),
+ q(0),
+ ],
+ q(torres strait creole) => [
+ q(6389),
+ q(0),
+ ],
+ q(torricelli) => [
+ q(6426),
+ q(0),
+ ],
+ q(torwali) => [
+ q(6677),
+ q(0),
+ ],
+ q(tosk albanian) => [
+ q(0762),
+ q(0),
+ ],
+ q(totela) => [
+ q(6715),
+ q(0),
+ ],
+ q(toto) => [
+ q(6790),
+ q(0),
+ ],
+ q(totoli) => [
+ q(6784),
+ q(0),
+ ],
+ q(totomachapan zapotec) => [
+ q(7832),
+ q(0),
+ ],
+ q(totontepec mixe) => [
+ q(4547),
+ q(0),
+ ],
+ q(totoro) => [
+ q(6714),
+ q(0),
+ ],
+ q(touo) => [
+ q(6654),
+ q(0),
+ ],
+ q(toura (cote d'ivoire)) => [
+ q(4790),
+ q(0),
+ ],
+ q(toura (papua new guinea)) => [
+ q(2117),
+ q(0),
+ ],
+ q(towei) => [
+ q(6717),
+ q(0),
+ ],
+ q(trans-new guinea languages) => [
+ q(0516),
+ q(0),
+ ],
+ q(transalpine gaulish) => [
+ q(7445),
+ q(0),
+ ],
+ q(traveller danish) => [
+ q(5781),
+ q(0),
+ ],
+ q(traveller norwegian) => [
+ q(5784),
+ q(0),
+ ],
+ q(traveller scottish) => [
+ q(6666),
+ q(0),
+ ],
+ q(tregami) => [
+ q(6667),
+ q(0),
+ ],
+ q(tremembe) => [
+ q(6559),
+ q(0),
+ ],
+ q(trieng) => [
+ q(6230),
+ q(0),
+ ],
+ q(trimuris) => [
+ q(6499),
+ q(0),
+ ],
+ q(tring) => [
+ q(6456),
+ q(0),
+ ],
+ q(tringgus-sembaan bidayuh) => [
+ q(6678),
+ q(0),
+ ],
+ q(trinidad and tobago sign language) => [
+ q(4043),
+ q(0),
+ ],
+ q(trinidadian creole english) => [
+ q(6661),
+ q(0),
+ ],
+ q(trinitario) => [
+ q(6668),
+ q(0),
+ ],
+ q(trio) => [
+ q(6664),
+ q(0),
+ ],
+ q(truka) => [
+ q(6517),
+ q(0),
+ ],
+ q(trumai) => [
+ q(6643),
+ q(0),
+ ],
+ q(ts'un-lao) => [
+ q(6691),
+ q(0),
+ ],
+ q(tsaangi) => [
+ q(6681),
+ q(0),
+ ],
+ q(tsakhur) => [
+ q(6527),
+ q(0),
+ ],
+ q(tsakonian) => [
+ q(6684),
+ q(0),
+ ],
+ q(tsakwambo) => [
+ q(3670),
+ q(0),
+ ],
+ q(tsamai) => [
+ q(6682),
+ q(0),
+ ],
+ q(tsat) => [
+ q(2847),
+ q(0),
+ ],
+ q(tsaukambo) => [
+ q(3670),
+ q(0),
+ ],
+ q(tseku) => [
+ q(6690),
+ q(0),
+ ],
+ q(tsetsaut) => [
+ q(6783),
+ q(0),
+ ],
+ q(tshangla) => [
+ q(6689),
+ q(0),
+ ],
+ q(tsikimba) => [
+ q(3223),
+ q(0),
+ ],
+ q(tsimane) => [
+ q(1656),
+ q(0),
+ ],
+ q(tsimihety malagasy) => [
+ q(7369),
+ q(0),
+ ],
+ q(tsimshian) => [
+ q(0438),
+ q(0),
+ ],
+ q(tsishingini) => [
+ q(6700),
+ q(0),
+ ],
+ q(tso) => [
+ q(3836),
+ q(0),
+ ],
+ q(tsoa) => [
+ q(2747),
+ q(0),
+ ],
+ q(tsogo) => [
+ q(6699),
+ q(0),
+ ],
+ q(tsonga) => [
+ q(0440),
+ q(0),
+ ],
+ q(tsotsitaal) => [
+ q(2350),
+ q(0),
+ ],
+ q(tsotso) => [
+ q(4049),
+ q(0),
+ ],
+ q(tsou) => [
+ q(6698),
+ q(0),
+ ],
+ q(tsum) => [
+ q(6728),
+ q(0),
+ ],
+ q(tsuvadi) => [
+ q(6750),
+ q(0),
+ ],
+ q(tsuvan) => [
+ q(6688),
+ q(0),
+ ],
+ q(tswa) => [
+ q(6683),
+ q(0),
+ ],
+ q(tswana) => [
+ q(0439),
+ q(0),
+ ],
+ q(tswapong) => [
+ q(6772),
+ q(0),
+ ],
+ q(tu) => [
+ q(4300),
+ q(0),
+ ],
+ q(tuamotuan) => [
+ q(5500),
+ q(0),
+ ],
+ q(tubar) => [
+ q(6367),
+ q(0),
+ ],
+ q(tubatulabal) => [
+ q(6730),
+ q(0),
+ ],
+ q(tucano) => [
+ q(6741),
+ q(0),
+ ],
+ q(tugen) => [
+ q(6747),
+ q(0),
+ ],
+ q(tugun) => [
+ q(6816),
+ q(0),
+ ],
+ q(tugutil) => [
+ q(6738),
+ q(0),
+ ],
+ q(tukang besi north) => [
+ q(3312),
+ q(0),
+ ],
+ q(tukang besi south) => [
+ q(1201),
+ q(0),
+ ],
+ q(tuki) => [
+ q(1028),
+ q(0),
+ ],
+ q(tukpa) => [
+ q(6636),
+ q(0),
+ ],
+ q(tukudede) => [
+ q(6519),
+ q(0),
+ ],
+ q(tukumanfed) => [
+ q(6521),
+ q(0),
+ ],
+ q(tula) => [
+ q(6739),
+ q(0),
+ ],
+ q(tulehu) => [
+ q(6551),
+ q(0),
+ ],
+ q(tulishi) => [
+ q(6437),
+ q(0),
+ ],
+ q(tulu) => [
+ q(6394),
+ q(0),
+ ],
+ q(tulu-bohuai) => [
+ q(5718),
+ q(0),
+ ],
+ q(tuma-irumu) => [
+ q(2962),
+ q(0),
+ ],
+ q(tumak) => [
+ q(6557),
+ q(0),
+ ],
+ q(tumari kanuri) => [
+ q(3566),
+ q(0),
+ ],
+ q(tumbuka) => [
+ q(0442),
+ q(0),
+ ],
+ q(tumi) => [
+ q(3400),
+ q(0),
+ ],
+ q(tumleo) => [
+ q(6570),
+ q(0),
+ ],
+ q(tumshuqese) => [
+ q(7453),
+ q(0),
+ ],
+ q(tumtum) => [
+ q(6364),
+ q(0),
+ ],
+ q(tumulung sisaala) => [
+ q(6015),
+ q(0),
+ ],
+ q(tumzabt) => [
+ q(4676),
+ q(0),
+ ],
+ q(tundra enets) => [
+ q(2264),
+ q(0),
+ ],
+ q(tunen) => [
+ q(6758),
+ q(0),
+ ],
+ q(tungag) => [
+ q(3822),
+ q(0),
+ ],
+ q(tunggare) => [
+ q(6674),
+ q(0),
+ ],
+ q(tungus languages) => [
+ q(0529),
+ q(0),
+ ],
+ q(tunia) => [
+ q(6735),
+ q(0),
+ ],
+ q(tunica) => [
+ q(6740),
+ q(0),
+ ],
+ q(tunisian arabic) => [
+ q(0626),
+ q(0),
+ ],
+ q(tunisian sign language) => [
+ q(6685),
+ q(0),
+ ],
+ q(tunjung) => [
+ q(6509),
+ q(0),
+ ],
+ q(tunni) => [
+ q(6651),
+ q(0),
+ ],
+ q(tunzu) => [
+ q(2203),
+ q(0),
+ ],
+ q(tuotomb) => [
+ q(6709),
+ q(0),
+ ],
+ q(tupari) => [
+ q(6637),
+ q(0),
+ ],
+ q(tupi) => [
+ q(6641),
+ q(0),
+ ],
+ q(tupi languages) => [
+ q(0443),
+ q(0),
+ ],
+ q(tupinamba) => [
+ q(6633),
+ q(0),
+ ],
+ q(tupinikin) => [
+ q(6630),
+ q(0),
+ ],
+ q(tupuri) => [
+ q(6737),
+ q(0),
+ ],
+ q(turaka) => [
+ q(6663),
+ q(0),
+ ],
+ q(turi) => [
+ q(6659),
+ q(0),
+ ],
+ q(turiwara) => [
+ q(6776),
+ q(0),
+ ],
+ q(turk isaret dili) => [
+ q(6692),
+ q(0),
+ ],
+ q(turka) => [
+ q(6748),
+ q(0),
+ ],
+ q(turkana) => [
+ q(6745),
+ q(0),
+ ],
+ q(turkic khalaj) => [
+ q(3415),
+ q(0),
+ ],
+ q(turkic languages) => [
+ q(0528),
+ q(0),
+ ],
+ q(turkish) => [
+ q(0444),
+ q(0),
+ ],
+ q(turkish sign language) => [
+ q(6692),
+ q(0),
+ ],
+ q(turkish, ottoman (1500-1928)) => [
+ q(0332),
+ q(0),
+ ],
+ q(turkmen) => [
+ q(0441),
+ q(0),
+ ],
+ q(turks and caicos creole english) => [
+ q(6380),
+ q(0),
+ ],
+ q(turoyo) => [
+ q(6675),
+ q(0),
+ ],
+ q(turumsa) => [
+ q(6647),
+ q(0),
+ ],
+ q(turung) => [
+ q(6679),
+ q(0),
+ ],
+ q(tuscarora) => [
+ q(6743),
+ q(0),
+ ],
+ q(tutelo) => [
+ q(6704),
+ q(0),
+ ],
+ q(tutong) => [
+ q(6710),
+ q(0),
+ ],
+ q(tutsa naga) => [
+ q(6757),
+ q(0),
+ ],
+ q(tutuba) => [
+ q(6562),
+ q(0),
+ ],
+ q(tututepec mixtec) => [
+ q(4553),
+ q(0),
+ ],
+ q(tututni) => [
+ q(6744),
+ q(0),
+ ],
+ q(tuvalu) => [
+ q(0446),
+ q(0),
+ ],
+ q(tuvinian) => [
+ q(0448),
+ q(0),
+ ],
+ q(tuwali ifugao) => [
+ q(2898),
+ q(0),
+ ],
+ q(tuwari) => [
+ q(6778),
+ q(0),
+ ],
+ q(tuwuli) => [
+ q(1371),
+ q(0),
+ ],
+ q(tuxa) => [
+ q(6732),
+ q(0),
+ ],
+ q(tuxinawa) => [
+ q(6746),
+ q(0),
+ ],
+ q(tuyuca) => [
+ q(6733),
+ q(0),
+ ],
+ q(twana) => [
+ q(6761),
+ q(0),
+ ],
+ q(twendi) => [
+ q(6771),
+ q(0),
+ ],
+ q(twents) => [
+ q(6764),
+ q(0),
+ ],
+ q(twi) => [
+ q(0447),
+ q(0),
+ ],
+ q(tyap) => [
+ q(3193),
+ q(0),
+ ],
+ q(tyaraity) => [
+ q(7156),
+ q(0),
+ ],
+ q(tz'utujil) => [
+ q(6814),
+ q(0),
+ ],
+ q(tzeltal) => [
+ q(6813),
+ q(0),
+ ],
+ q(tzotzil) => [
+ q(6817),
+ q(0),
+ ],
+ q(u) => [
+ q(6927),
+ q(0),
+ ],
+ q(uab meto) => [
+ q(0835),
+ q(0),
+ ],
+ q(uamue) => [
+ q(6819),
+ q(0),
+ ],
+ q(uare) => [
+ q(3581),
+ q(0),
+ ],
+ q(ubaghara) => [
+ q(1593),
+ q(0),
+ ],
+ q(ubang) => [
+ q(6822),
+ q(0),
+ ],
+ q(ubi) => [
+ q(6823),
+ q(0),
+ ],
+ q(ubir) => [
+ q(6825),
+ q(0),
+ ],
+ q(ubykh) => [
+ q(6827),
+ q(0),
+ ],
+ q(ucayali-yurua asheninka) => [
+ q(1832),
+ q(0),
+ ],
+ q(uda) => [
+ q(6828),
+ q(0),
+ ],
+ q(udi) => [
+ q(6831),
+ q(0),
+ ],
+ q(udihe) => [
+ q(6829),
+ q(0),
+ ],
+ q(udmurt) => [
+ q(0449),
+ q(0),
+ ],
+ q(uduk) => [
+ q(6834),
+ q(0),
+ ],
+ q(ufim) => [
+ q(6836),
+ q(0),
+ ],
+ q(ugandan sign language) => [
+ q(6839),
+ q(0),
+ ],
+ q(ugaritic) => [
+ q(0450),
+ q(0),
+ ],
+ q(ughele) => [
+ q(6838),
+ q(0),
+ ],
+ q(ugong) => [
+ q(6840),
+ q(0),
+ ],
+ q(uhami) => [
+ q(6842),
+ q(0),
+ ],
+ q(uighur) => [
+ q(0451),
+ q(0),
+ ],
+ q(uisai) => [
+ q(6844),
+ q(0),
+ ],
+ q(ujir) => [
+ q(6832),
+ q(0),
+ ],
+ q(ukaan) => [
+ q(3192),
+ q(0),
+ ],
+ q(ukhwejo) => [
+ q(6849),
+ q(0),
+ ],
+ q(ukit) => [
+ q(6872),
+ q(0),
+ ],
+ q(ukpe-bayobiri) => [
+ q(6851),
+ q(0),
+ ],
+ q(ukpet-ehom) => [
+ q(0726),
+ q(0),
+ ],
+ q(ukrainian) => [
+ q(0452),
+ q(0),
+ ],
+ q(ukrainian sign language) => [
+ q(6850),
+ q(0),
+ ],
+ q(ukue) => [
+ q(6854),
+ q(0),
+ ],
+ q(ukuriguma) => [
+ q(6848),
+ q(0),
+ ],
+ q(ukwa) => [
+ q(6852),
+ q(0),
+ ],
+ q(ukwuani-aboh-ndoni) => [
+ q(6855),
+ q(0),
+ ],
+ q(ulau-suain) => [
+ q(6262),
+ q(0),
+ ],
+ q(ulch) => [
+ q(6859),
+ q(0),
+ ],
+ q(ulithian) => [
+ q(6861),
+ q(0),
+ ],
+ q(ullatan) => [
+ q(6863),
+ q(0),
+ ],
+ q(ulukwumi) => [
+ q(6858),
+ q(0),
+ ],
+ q(ulumanda') => [
+ q(6864),
+ q(0),
+ ],
+ q(ulwa) => [
+ q(6867),
+ q(0),
+ ],
+ q(uma) => [
+ q(5549),
+ q(0),
+ ],
+ q(uma' lasan) => [
+ q(7333),
+ q(0),
+ ],
+ q(uma' lung) => [
+ q(6866),
+ q(0),
+ ],
+ q(umanakaina) => [
+ q(2455),
+ q(0),
+ ],
+ q(umatilla) => [
+ q(6868),
+ q(0),
+ ],
+ q(umbindhamu) => [
+ q(6870),
+ q(0),
+ ],
+ q(umbrian) => [
+ q(7466),
+ q(0),
+ ],
+ q(umbu-ungu) => [
+ q(6826),
+ q(0),
+ ],
+ q(umbugarla) => [
+ q(6877),
+ q(0),
+ ],
+ q(umbundu) => [
+ q(0453),
+ q(0),
+ ],
+ q(umbuygamu) => [
+ q(6871),
+ q(0),
+ ],
+ q(ume sami) => [
+ q(6041),
+ q(0),
+ ],
+ q(umeda) => [
+ q(6889),
+ q(0),
+ ],
+ q(umiida) => [
+ q(7463),
+ q(0),
+ ],
+ q(umiray dumaget agta) => [
+ q(2169),
+ q(0),
+ ],
+ q(umon) => [
+ q(6873),
+ q(0),
+ ],
+ q(umotina) => [
+ q(6875),
+ q(0),
+ ],
+ q(umpila) => [
+ q(6876),
+ q(0),
+ ],
+ q(una) => [
+ q(4539),
+ q(0),
+ ],
+ q(unami) => [
+ q(6884),
+ q(0),
+ ],
+ q(uncoded languages) => [
+ q(0281),
+ q(0),
+ ],
+ q(unde kaili) => [
+ q(6887),
+ q(0),
+ ],
+ q(undetermined) => [
+ q(0454),
+ q(0),
+ ],
+ q(uneapa) => [
+ q(1052),
+ q(0),
+ ],
+ q(uneme) => [
+ q(6881),
+ q(0),
+ ],
+ q(unggarranggu) => [
+ q(7467),
+ q(0),
+ ],
+ q(unggumi) => [
+ q(7292),
+ q(0),
+ ],
+ q(unserdeutsch) => [
+ q(6865),
+ q(0),
+ ],
+ q(unua) => [
+ q(5254),
+ q(0),
+ ],
+ q(uokha) => [
+ q(6888),
+ q(0),
+ ],
+ q(upper chehalis) => [
+ q(1746),
+ q(0),
+ ],
+ q(upper grand valley dani) => [
+ q(2096),
+ q(0),
+ ],
+ q(upper guinea crioulo) => [
+ q(5542),
+ q(0),
+ ],
+ q(upper kinabatangan) => [
+ q(2085),
+ q(0),
+ ],
+ q(upper kuskokwim) => [
+ q(3639),
+ q(0),
+ ],
+ q(upper necaxa totonac) => [
+ q(6530),
+ q(0),
+ ],
+ q(upper saxon) => [
+ q(6302),
+ q(0),
+ ],
+ q(upper sorbian) => [
+ q(0182),
+ q(0),
+ ],
+ q(upper ta'oih) => [
+ q(6711),
+ q(0),
+ ],
+ q(upper tanana) => [
+ q(6342),
+ q(0),
+ ],
+ q(upper taromi) => [
+ q(6619),
+ q(0),
+ ],
+ q(upper umpqua) => [
+ q(7469),
+ q(0),
+ ],
+ q(ura (papua new guinea)) => [
+ q(6903),
+ q(0),
+ ],
+ q(ura (vanuatu)) => [
+ q(6926),
+ q(0),
+ ],
+ q(uradhi) => [
+ q(6895),
+ q(0),
+ ],
+ q(urak lawoi') => [
+ q(6899),
+ q(0),
+ ],
+ q(urali) => [
+ q(6900),
+ q(0),
+ ],
+ q(uralic languages) => [
+ q(0530),
+ q(0),
+ ],
+ q(urapmin) => [
+ q(6901),
+ q(0),
+ ],
+ q(urarina) => [
+ q(6891),
+ q(0),
+ ],
+ q(urartian) => [
+ q(7470),
+ q(0),
+ ],
+ q(urat) => [
+ q(6906),
+ q(0),
+ ],
+ q(urdu) => [
+ q(0455),
+ q(0),
+ ],
+ q(urhobo) => [
+ q(6897),
+ q(0),
+ ],
+ q(uri) => [
+ q(6929),
+ q(0),
+ ],
+ q(urigina) => [
+ q(6896),
+ q(0),
+ ],
+ q(urim) => [
+ q(6898),
+ q(0),
+ ],
+ q(urimo) => [
+ q(6910),
+ q(0),
+ ],
+ q(uripiv-wala-rano-atchin) => [
+ q(6890),
+ q(0),
+ ],
+ q(urningangg) => [
+ q(6893),
+ q(0),
+ ],
+ q(uru) => [
+ q(6894),
+ q(0),
+ ],
+ q(uru-eu-wau-wau) => [
+ q(6912),
+ q(0),
+ ],
+ q(uru-pa-in) => [
+ q(6904),
+ q(0),
+ ],
+ q(uruangnirin) => [
+ q(6902),
+ q(0),
+ ],
+ q(uruava) => [
+ q(6908),
+ q(0),
+ ],
+ q(urubu-kaapor) => [
+ q(6892),
+ q(0),
+ ],
+ q(urubu-kaapor sign language) => [
+ q(6853),
+ q(0),
+ ],
+ q(uruguayan sign language) => [
+ q(6841),
+ q(0),
+ ],
+ q(urum) => [
+ q(6924),
+ q(0),
+ ],
+ q(urumi) => [
+ q(6907),
+ q(0),
+ ],
+ q(usaghade) => [
+ q(6916),
+ q(0),
+ ],
+ q(usan) => [
+ q(7154),
+ q(0),
+ ],
+ q(usarufa) => [
+ q(6913),
+ q(0),
+ ],
+ q(ushojo) => [
+ q(6914),
+ q(0),
+ ],
+ q(usila chinantec) => [
+ q(1903),
+ q(0),
+ ],
+ q(usku) => [
+ q(6860),
+ q(0),
+ ],
+ q(uspanteco) => [
+ q(6917),
+ q(0),
+ ],
+ q(usui) => [
+ q(6915),
+ q(0),
+ ],
+ q(ut-ma'in) => [
+ q(2471),
+ q(0),
+ ],
+ q(utarmbung) => [
+ q(5234),
+ q(0),
+ ],
+ q(ute-southern paiute) => [
+ q(6920),
+ q(0),
+ ],
+ q(uto-aztecan languages) => [
+ q(0493),
+ q(0),
+ ],
+ q(utu) => [
+ q(6923),
+ q(0),
+ ],
+ q(uvbie) => [
+ q(2307),
+ q(0),
+ ],
+ q(uya) => [
+ q(6918),
+ q(0),
+ ],
+ q(uyajitaya) => [
+ q(2175),
+ q(0),
+ ],
+ q(uyghur) => [
+ q(0451),
+ q(0),
+ ],
+ q(uzbek) => [
+ q(0456),
+ q(0),
+ ],
+ q(uzbeki arabic) => [
+ q(0956),
+ q(0),
+ ],
+ q(uzekwe) => [
+ q(2312),
+ q(0),
+ ],
+ q(v'enen taut) => [
+ q(4944),
+ q(0),
+ ],
+ q(vaagri booli) => [
+ q(6935),
+ q(0),
+ ],
+ q(vaeakau-taumako) => [
+ q(5443),
+ q(0),
+ ],
+ q(vafsi) => [
+ q(6937),
+ q(0),
+ ],
+ q(vaghat-ya-bijim-legeri) => [
+ q(1218),
+ q(0),
+ ],
+ q(vaghri) => [
+ q(6960),
+ q(0),
+ ],
+ q(vaghua) => [
+ q(6749),
+ q(0),
+ ],
+ q(vagla) => [
+ q(6938),
+ q(0),
+ ],
+ q(vai) => [
+ q(0457),
+ q(0),
+ ],
+ q(vaiphei) => [
+ q(6945),
+ q(0),
+ ],
+ q(vale) => [
+ q(6936),
+ q(0),
+ ],
+ q(valencian) => [
+ q(0071),
+ q(0),
+ ],
+ q(valencian sign language) => [
+ q(7015),
+ q(0),
+ ],
+ q(valle nacional chinantec) => [
+ q(1921),
+ q(0),
+ ],
+ q(valley maidu) => [
+ q(7001),
+ q(0),
+ ],
+ q(valman) => [
+ q(6943),
+ q(0),
+ ],
+ q(valpei) => [
+ q(6981),
+ q(0),
+ ],
+ q(vamale) => [
+ q(4337),
+ q(0),
+ ],
+ q(vame) => [
+ q(4360),
+ q(0),
+ ],
+ q(vandalic) => [
+ q(7475),
+ q(0),
+ ],
+ q(vangunu) => [
+ q(4450),
+ q(0),
+ ],
+ q(vanimo) => [
+ q(6942),
+ q(0),
+ ],
+ q(vano) => [
+ q(7006),
+ q(0),
+ ],
+ q(vanuma) => [
+ q(6948),
+ q(0),
+ ],
+ q(vao) => [
+ q(6944),
+ q(0),
+ ],
+ q(varhadi-nagpuri) => [
+ q(6939),
+ q(0),
+ ],
+ q(varisi) => [
+ q(7011),
+ q(0),
+ ],
+ q(varli) => [
+ q(6949),
+ q(0),
+ ],
+ q(vasavi) => [
+ q(6947),
+ q(0),
+ ],
+ q(vasekela bushman) => [
+ q(6940),
+ q(0),
+ ],
+ q(veddah) => [
+ q(6954),
+ q(0),
+ ],
+ q(vehes) => [
+ q(6941),
+ q(0),
+ ],
+ q(veluws) => [
+ q(6955),
+ q(0),
+ ],
+ q(vemgo-mabas) => [
+ q(6956),
+ q(0),
+ ],
+ q(venda) => [
+ q(0458),
+ q(0),
+ ],
+ q(venetian) => [
+ q(6953),
+ q(0),
+ ],
+ q(venetic) => [
+ q(7473),
+ q(0),
+ ],
+ q(venezuelan sign language) => [
+ q(7014),
+ q(0),
+ ],
+ q(vengo) => [
+ q(1035),
+ q(0),
+ ],
+ q(ventureno) => [
+ q(6957),
+ q(0),
+ ],
+ q(veps) => [
+ q(6958),
+ q(0),
+ ],
+ q(vera'a) => [
+ q(7010),
+ q(0),
+ ],
+ q(vestinian) => [
+ q(7477),
+ q(0),
+ ],
+ q(vidunda) => [
+ q(6963),
+ q(0),
+ ],
+ q(viemo) => [
+ q(6965),
+ q(0),
+ ],
+ q(vietnamese) => [
+ q(0459),
+ q(0),
+ ],
+ q(viid) => [
+ q(6123),
+ q(0),
+ ],
+ q(vilela) => [
+ q(6966),
+ q(0),
+ ],
+ q(vili) => [
+ q(6964),
+ q(0),
+ ],
+ q(villa viciosa agta) => [
+ q(2197),
+ q(0),
+ ],
+ q(vincentian creole english) => [
+ q(6263),
+ q(0),
+ ],
+ q(vinmavis) => [
+ q(7007),
+ q(0),
+ ],
+ q(vinza) => [
+ q(6967),
+ q(0),
+ ],
+ q(virgin islands creole english) => [
+ q(6962),
+ q(0),
+ ],
+ q(vishavan) => [
+ q(6968),
+ q(0),
+ ],
+ q(viti) => [
+ q(6969),
+ q(0),
+ ],
+ q(vitou) => [
+ q(7016),
+ q(0),
+ ],
+ q(vitu) => [
+ q(7104),
+ q(0),
+ ],
+ q(vlaams) => [
+ q(6982),
+ q(0),
+ ],
+ q(vlaamse gebarentaal) => [
+ q(6961),
+ q(0),
+ ],
+ q(vlax romani) => [
+ q(5800),
+ q(0),
+ ],
+ q(volapuk) => [
+ q(0460),
+ q(0),
+ ],
+ q(volscian) => [
+ q(7476),
+ q(0),
+ ],
+ q(vono) => [
+ q(3194),
+ q(0),
+ ],
+ q(voro) => [
+ q(7009),
+ q(0),
+ ],
+ q(votic) => [
+ q(0461),
+ q(0),
+ ],
+ q(vumbu) => [
+ q(7017),
+ q(0),
+ ],
+ q(vunapu) => [
+ q(7008),
+ q(0),
+ ],
+ q(vunjo) => [
+ q(7018),
+ q(0),
+ ],
+ q(vure) => [
+ q(3925),
+ q(0),
+ ],
+ q(vures) => [
+ q(4521),
+ q(0),
+ ],
+ q(vute) => [
+ q(7019),
+ q(0),
+ ],
+ q(vwanji) => [
+ q(7047),
+ q(0),
+ ],
+ q(wa) => [
+ q(7051),
+ q(0),
+ ],
+ q(wa'ema) => [
+ q(7027),
+ q(0),
+ ],
+ q(waama) => [
+ q(7218),
+ q(0),
+ ],
+ q(waamwang) => [
+ q(7138),
+ q(0),
+ ],
+ q(waata) => [
+ q(6213),
+ q(0),
+ ],
+ q(wab) => [
+ q(7022),
+ q(0),
+ ],
+ q(wabo) => [
+ q(7044),
+ q(0),
+ ],
+ q(waboda) => [
+ q(3454),
+ q(0),
+ ],
+ q(waci gbe) => [
+ q(7059),
+ q(0),
+ ],
+ q(wadaginam) => [
+ q(7061),
+ q(0),
+ ],
+ q(waddar) => [
+ q(7053),
+ q(0),
+ ],
+ q(wadiyara koli) => [
+ q(3711),
+ q(0),
+ ],
+ q(wadjiginy) => [
+ q(7062),
+ q(0),
+ ],
+ q(wadjigu) => [
+ q(7063),
+ q(0),
+ ],
+ q(wae rana) => [
+ q(7190),
+ q(0),
+ ],
+ q(waffa) => [
+ q(7030),
+ q(0),
+ ],
+ q(wagawaga) => [
+ q(7079),
+ q(0),
+ ],
+ q(wagaya) => [
+ q(7078),
+ q(0),
+ ],
+ q(wagdi) => [
+ q(7054),
+ q(0),
+ ],
+ q(wageman) => [
+ q(7035),
+ q(0),
+ ],
+ q(wagi) => [
+ q(2315),
+ q(0),
+ ],
+ q(wahau kayan) => [
+ q(7088),
+ q(0),
+ ],
+ q(wahau kenyah) => [
+ q(7087),
+ q(0),
+ ],
+ q(wahgi) => [
+ q(7081),
+ q(0),
+ ],
+ q(waigali) => [
+ q(7049),
+ q(0),
+ ],
+ q(waigeo) => [
+ q(7082),
+ q(0),
+ ],
+ q(wailaki) => [
+ q(7119),
+ q(0),
+ ],
+ q(wailapa) => [
+ q(7123),
+ q(0),
+ ],
+ q(waima) => [
+ q(5825),
+ q(0),
+ ],
+ q(waima'a) => [
+ q(7135),
+ q(0),
+ ],
+ q(waimaha) => [
+ q(1031),
+ q(0),
+ ],
+ q(waimiri-atroari) => [
+ q(0925),
+ q(0),
+ ],
+ q(waioli) => [
+ q(7118),
+ q(0),
+ ],
+ q(waiwai) => [
+ q(7039),
+ q(0),
+ ],
+ q(waja) => [
+ q(7106),
+ q(0),
+ ],
+ q(wajarri) => [
+ q(7056),
+ q(0),
+ ],
+ q(waka) => [
+ q(7038),
+ q(0),
+ ],
+ q(wakabunga) => [
+ q(7219),
+ q(0),
+ ],
+ q(wakashan languages) => [
+ q(0462),
+ q(0),
+ ],
+ q(wakawaka) => [
+ q(7113),
+ q(0),
+ ],
+ q(wakde) => [
+ q(7110),
+ q(0),
+ ],
+ q(wakhi) => [
+ q(7050),
+ q(0),
+ ],
+ q(wakona) => [
+ q(7026),
+ q(0),
+ ],
+ q(wala) => [
+ q(3871),
+ q(0),
+ ],
+ q(walak) => [
+ q(7127),
+ q(0),
+ ],
+ q(walamo) => [
+ q(0463),
+ q(0),
+ ],
+ q(wali (ghana)) => [
+ q(7128),
+ q(0),
+ ],
+ q(wali (sudan)) => [
+ q(7120),
+ q(0),
+ ],
+ q(waling) => [
+ q(7129),
+ q(0),
+ ],
+ q(walio) => [
+ q(7114),
+ q(0),
+ ],
+ q(walla walla) => [
+ q(7021),
+ q(0),
+ ],
+ q(wallisian) => [
+ q(7124),
+ q(0),
+ ],
+ q(walloon) => [
+ q(0468),
+ q(0),
+ ],
+ q(walmajarri) => [
+ q(7141),
+ q(0),
+ ],
+ q(walser) => [
+ q(7025),
+ q(0),
+ ],
+ q(walungge) => [
+ q(5219),
+ q(0),
+ ],
+ q(wamas) => [
+ q(7132),
+ q(0),
+ ],
+ q(wambaya) => [
+ q(7131),
+ q(0),
+ ],
+ q(wambon) => [
+ q(7140),
+ q(0),
+ ],
+ q(wambule) => [
+ q(7134),
+ q(0),
+ ],
+ q(wamey) => [
+ q(1825),
+ q(0),
+ ],
+ q(wamin) => [
+ q(7136),
+ q(0),
+ ],
+ q(wampanoag) => [
+ q(7031),
+ q(0),
+ ],
+ q(wampar) => [
+ q(3806),
+ q(0),
+ ],
+ q(wampur) => [
+ q(7042),
+ q(0),
+ ],
+ q(wan) => [
+ q(7032),
+ q(0),
+ ],
+ q(wanambre) => [
+ q(7144),
+ q(0),
+ ],
+ q(wanap) => [
+ q(7153),
+ q(0),
+ ],
+ q(wanbasana) => [
+ q(0764),
+ q(0),
+ ],
+ q(wancho naga) => [
+ q(4983),
+ q(0),
+ ],
+ q(wanda) => [
+ q(7046),
+ q(0),
+ ],
+ q(wandala) => [
+ q(4208),
+ q(0),
+ ],
+ q(wandamen) => [
+ q(7024),
+ q(0),
+ ],
+ q(wandarang) => [
+ q(7146),
+ q(0),
+ ],
+ q(wandji) => [
+ q(7060),
+ q(0),
+ ],
+ q(wane) => [
+ q(2862),
+ q(0),
+ ],
+ q(waneci) => [
+ q(7147),
+ q(0),
+ ],
+ q(wanga) => [
+ q(4075),
+ q(0),
+ ],
+ q(wangaaybuwan-ngiyambaa) => [
+ q(7225),
+ q(0),
+ ],
+ q(wanggamala) => [
+ q(7151),
+ q(0),
+ ],
+ q(wangganguru) => [
+ q(7080),
+ q(0),
+ ],
+ q(wanggom) => [
+ q(7148),
+ q(0),
+ ],
+ q(wanman) => [
+ q(7055),
+ q(0),
+ ],
+ q(wannu) => [
+ q(3125),
+ q(0),
+ ],
+ q(wano) => [
+ q(7152),
+ q(0),
+ ],
+ q(wantoat) => [
+ q(7145),
+ q(0),
+ ],
+ q(wanukaka) => [
+ q(7150),
+ q(0),
+ ],
+ q(wanyi) => [
+ q(7155),
+ q(0),
+ ],
+ q(waorani) => [
+ q(0936),
+ q(0),
+ ],
+ q(wapan) => [
+ q(3130),
+ q(0),
+ ],
+ q(wapha) => [
+ q(3140),
+ q(0),
+ ],
+ q(wapishana) => [
+ q(7034),
+ q(0),
+ ],
+ q(wappo) => [
+ q(7033),
+ q(0),
+ ],
+ q(war-jaintia) => [
+ q(0777),
+ q(0),
+ ],
+ q(wara) => [
+ q(6381),
+ q(0),
+ ],
+ q(warao) => [
+ q(7043),
+ q(0),
+ ],
+ q(warapu) => [
+ q(7173),
+ q(0),
+ ],
+ q(waray) => [
+ q(0464),
+ q(0),
+ ],
+ q(waray (australia)) => [
+ q(7192),
+ q(0),
+ ],
+ q(waray (philippines)) => [
+ q(0464),
+ q(1),
+ ],
+ q(wardaman) => [
+ q(7185),
+ q(0),
+ ],
+ q(warduji) => [
+ q(7175),
+ q(0),
+ ],
+ q(warembori) => [
+ q(7193),
+ q(0),
+ ],
+ q(wares) => [
+ q(7029),
+ q(0),
+ ],
+ q(waris) => [
+ q(7186),
+ q(0),
+ ],
+ q(waritai) => [
+ q(7045),
+ q(0),
+ ],
+ q(wariyangga) => [
+ q(7178),
+ q(0),
+ ],
+ q(warji) => [
+ q(7107),
+ q(0),
+ ],
+ q(warkay-bipim) => [
+ q(1182),
+ q(0),
+ ],
+ q(warlmanpa) => [
+ q(7180),
+ q(0),
+ ],
+ q(warlpiri) => [
+ q(7052),
+ q(0),
+ ],
+ q(warluwara) => [
+ q(7174),
+ q(0),
+ ],
+ q(warnang) => [
+ q(7182),
+ q(0),
+ ],
+ q(waropen) => [
+ q(7184),
+ q(0),
+ ],
+ q(warrgamay) => [
+ q(7084),
+ q(0),
+ ],
+ q(warrwa) => [
+ q(7221),
+ q(0),
+ ],
+ q(waru) => [
+ q(7187),
+ q(0),
+ ],
+ q(warumungu) => [
+ q(7181),
+ q(0),
+ ],
+ q(waruna) => [
+ q(7188),
+ q(0),
+ ],
+ q(warungu) => [
+ q(7176),
+ q(0),
+ ],
+ q(wasa) => [
+ q(7197),
+ q(0),
+ ],
+ q(wasco-wishram) => [
+ q(7023),
+ q(0),
+ ],
+ q(wasembo) => [
+ q(2623),
+ q(0),
+ ],
+ q(washo) => [
+ q(0465),
+ q(0),
+ ],
+ q(waskia) => [
+ q(7195),
+ q(0),
+ ],
+ q(wasu) => [
+ q(7198),
+ q(0),
+ ],
+ q(watakataui) => [
+ q(7202),
+ q(0),
+ ],
+ q(watam) => [
+ q(7040),
+ q(0),
+ ],
+ q(watiwa) => [
+ q(7200),
+ q(0),
+ ],
+ q(watubela) => [
+ q(7028),
+ q(0),
+ ],
+ q(waube) => [
+ q(3493),
+ q(0),
+ ],
+ q(waura) => [
+ q(7037),
+ q(0),
+ ],
+ q(wauyai) => [
+ q(7217),
+ q(0),
+ ],
+ q(wawa) => [
+ q(7222),
+ q(0),
+ ],
+ q(wawonii) => [
+ q(7170),
+ q(0),
+ ],
+ q(waxianghua) => [
+ q(7223),
+ q(0),
+ ],
+ q(wayampi) => [
+ q(5318),
+ q(0),
+ ],
+ q(wayana) => [
+ q(7041),
+ q(0),
+ ],
+ q(wayanad chetti) => [
+ q(1898),
+ q(0),
+ ],
+ q(wayoro) => [
+ q(7227),
+ q(0),
+ ],
+ q(wayu) => [
+ q(6950),
+ q(0),
+ ],
+ q(wayuu) => [
+ q(2629),
+ q(0),
+ ],
+ q(we northern) => [
+ q(7157),
+ q(0),
+ ],
+ q(we southern) => [
+ q(2679),
+ q(0),
+ ],
+ q(we western) => [
+ q(7065),
+ q(0),
+ ],
+ q(wedau) => [
+ q(7066),
+ q(0),
+ ],
+ q(weh) => [
+ q(7067),
+ q(0),
+ ],
+ q(wejewa) => [
+ q(7076),
+ q(0),
+ ],
+ q(weliki) => [
+ q(3413),
+ q(0),
+ ],
+ q(welsh) => [
+ q(0466),
+ q(0),
+ ],
+ q(welsh romani) => [
+ q(5798),
+ q(0),
+ ],
+ q(wemale) => [
+ q(7070),
+ q(0),
+ ],
+ q(weme gbe) => [
+ q(7069),
+ q(0),
+ ],
+ q(weri) => [
+ q(7072),
+ q(0),
+ ],
+ q(wersing) => [
+ q(3667),
+ q(0),
+ ],
+ q(west albay bikol) => [
+ q(2330),
+ q(0),
+ ],
+ q(west ambae) => [
+ q(4972),
+ q(0),
+ ],
+ q(west berawan) => [
+ q(7743),
+ q(0),
+ ],
+ q(west central banda) => [
+ q(1054),
+ q(0),
+ ],
+ q(west central oromo) => [
+ q(2411),
+ q(0),
+ ],
+ q(west coast bajau) => [
+ q(1107),
+ q(0),
+ ],
+ q(west damar) => [
+ q(2137),
+ q(0),
+ ],
+ q(west germanic languages) => [
+ q(0507),
+ q(0),
+ ],
+ q(west goodenough) => [
+ q(1981),
+ q(0),
+ ],
+ q(west kewa) => [
+ q(3257),
+ q(0),
+ ],
+ q(west lembata) => [
+ q(3960),
+ q(0),
+ ],
+ q(west makian) => [
+ q(4476),
+ q(0),
+ ],
+ q(west masela) => [
+ q(4526),
+ q(0),
+ ],
+ q(west slavic languages) => [
+ q(0536),
+ q(0),
+ ],
+ q(west tarangan) => [
+ q(6789),
+ q(0),
+ ],
+ q(west uvean) => [
+ q(6928),
+ q(0),
+ ],
+ q(west yugur) => [
+ q(7520),
+ q(0),
+ ],
+ q(west-central limba) => [
+ q(3889),
+ q(0),
+ ],
+ q(western abnaki) => [
+ q(0564),
+ q(0),
+ ],
+ q(western apache) => [
+ q(0857),
+ q(0),
+ ],
+ q(western arrarnta) => [
+ q(0871),
+ q(0),
+ ],
+ q(western balochi) => [
+ q(1174),
+ q(0),
+ ],
+ q(western bolivian guarani) => [
+ q(2568),
+ q(0),
+ ],
+ q(western bru) => [
+ q(1443),
+ q(0),
+ ],
+ q(western bukidnon manobo) => [
+ q(4103),
+ q(0),
+ ],
+ q(western canadian inuktitut) => [
+ q(2926),
+ q(0),
+ ],
+ q(western cham) => [
+ q(1744),
+ q(0),
+ ],
+ q(western dani) => [
+ q(2107),
+ q(0),
+ ],
+ q(western durango nahuatl) => [
+ q(1019),
+ q(0),
+ ],
+ q(western fijian) => [
+ q(7228),
+ q(0),
+ ],
+ q(western frisian) => [
+ q(0142),
+ q(0),
+ ],
+ q(western gurung) => [
+ q(2661),
+ q(0),
+ ],
+ q(western highland chatino) => [
+ q(1896),
+ q(0),
+ ],
+ q(western highland purepecha) => [
+ q(5615),
+ q(0),
+ ],
+ q(western huasteca nahuatl) => [
+ q(4861),
+ q(0),
+ ],
+ q(western juxtlahuaca mixtec) => [
+ q(3104),
+ q(0),
+ ],
+ q(western kanjobal) => [
+ q(3465),
+ q(0),
+ ],
+ q(western karaboro) => [
+ q(3748),
+ q(0),
+ ],
+ q(western katu) => [
+ q(3628),
+ q(0),
+ ],
+ q(western kayah) => [
+ q(3742),
+ q(0),
+ ],
+ q(western keres) => [
+ q(3372),
+ q(0),
+ ],
+ q(western krahn) => [
+ q(3568),
+ q(0),
+ ],
+ q(western lalu) => [
+ q(7703),
+ q(0),
+ ],
+ q(western lawa) => [
+ q(3823),
+ q(0),
+ ],
+ q(western magar) => [
+ q(4487),
+ q(0),
+ ],
+ q(western malayo-polynesian languages) => [
+ q(0522),
+ q(0),
+ ],
+ q(western maninkakan) => [
+ q(4359),
+ q(0),
+ ],
+ q(western mari) => [
+ q(4492),
+ q(0),
+ ],
+ q(western mashan hmong) => [
+ q(2782),
+ q(0),
+ ],
+ q(western mashan miao) => [
+ q(2782),
+ q(0),
+ ],
+ q(western meohang) => [
+ q(5714),
+ q(0),
+ ],
+ q(western muria) => [
+ q(4573),
+ q(0),
+ ],
+ q(western neo-aramaic) => [
+ q(0788),
+ q(0),
+ ],
+ q(western niger fulfulde) => [
+ q(2376),
+ q(0),
+ ],
+ q(western ojibwa) => [
+ q(5200),
+ q(0),
+ ],
+ q(western pahari languages) => [
+ q(0176),
+ q(0),
+ ],
+ q(western panjabi) => [
+ q(5507),
+ q(0),
+ ],
+ q(western parbate kham) => [
+ q(3367),
+ q(0),
+ ],
+ q(western penan) => [
+ q(5509),
+ q(0),
+ ],
+ q(western sisaala) => [
+ q(6211),
+ q(0),
+ ],
+ q(western subanon) => [
+ q(6249),
+ q(0),
+ ],
+ q(western tamang) => [
+ q(6402),
+ q(0),
+ ],
+ q(western tawbuid) => [
+ q(6762),
+ q(0),
+ ],
+ q(western totonac) => [
+ q(6653),
+ q(0),
+ ],
+ q(western tunebo) => [
+ q(6580),
+ q(0),
+ ],
+ q(western xiangxi miao) => [
+ q(4384),
+ q(0),
+ ],
+ q(western xwla gbe) => [
+ q(7482),
+ q(0),
+ ],
+ q(western yiddish) => [
+ q(7563),
+ q(0),
+ ],
+ q(westphalien) => [
+ q(7071),
+ q(0),
+ ],
+ q(wetamut) => [
+ q(7220),
+ q(0),
+ ],
+ q(wewaw) => [
+ q(7064),
+ q(0),
+ ],
+ q(weyto) => [
+ q(7171),
+ q(0),
+ ],
+ q(white gelao) => [
+ q(2517),
+ q(0),
+ ],
+ q(white lachi) => [
+ q(4076),
+ q(0),
+ ],
+ q(whitesands) => [
+ q(6592),
+ q(0),
+ ],
+ q(wiarumus) => [
+ q(6729),
+ q(0),
+ ],
+ q(wichi lhamtes guisnay) => [
+ q(4681),
+ q(0),
+ ],
+ q(wichi lhamtes nocten) => [
+ q(4548),
+ q(0),
+ ],
+ q(wichi lhamtes vejoz) => [
+ q(7126),
+ q(0),
+ ],
+ q(wichita) => [
+ q(7090),
+ q(0),
+ ],
+ q(wik-epa) => [
+ q(7091),
+ q(0),
+ ],
+ q(wik-iiyanh) => [
+ q(7096),
+ q(0),
+ ],
+ q(wik-keyangan) => [
+ q(7092),
+ q(0),
+ ],
+ q(wik-me'anha) => [
+ q(7094),
+ q(0),
+ ],
+ q(wik-mungkan) => [
+ q(7099),
+ q(0),
+ ],
+ q(wik-ngathana) => [
+ q(7093),
+ q(0),
+ ],
+ q(wikalkan) => [
+ q(7097),
+ q(0),
+ ],
+ q(wikngenchera) => [
+ q(7205),
+ q(0),
+ ],
+ q(wilawila) => [
+ q(7098),
+ q(0),
+ ],
+ q(wintu) => [
+ q(7102),
+ q(0),
+ ],
+ q(winye) => [
+ q(3591),
+ q(0),
+ ],
+ q(wipi) => [
+ q(2458),
+ q(0),
+ ],
+ q(wiradhuri) => [
+ q(7177),
+ q(0),
+ ],
+ q(wirafed) => [
+ q(7101),
+ q(0),
+ ],
+ q(wirangu) => [
+ q(7083),
+ q(0),
+ ],
+ q(wiru) => [
+ q(7103),
+ q(0),
+ ],
+ q(wiyot) => [
+ q(7105),
+ q(0),
+ ],
+ q(woccon) => [
+ q(7479),
+ q(0),
+ ],
+ q(wogamusin) => [
+ q(7162),
+ q(0),
+ ],
+ q(wogeo) => [
+ q(7158),
+ q(0),
+ ],
+ q(woi) => [
+ q(7057),
+ q(0),
+ ],
+ q(wojenaka) => [
+ q(3113),
+ q(0),
+ ],
+ q(wolaitta) => [
+ q(0463),
+ q(2),
+ ],
+ q(wolane) => [
+ q(7116),
+ q(0),
+ ],
+ q(wolani) => [
+ q(7159),
+ q(0),
+ ],
+ q(wolaytta) => [
+ q(0463),
+ q(1),
+ ],
+ q(woleaian) => [
+ q(7160),
+ q(0),
+ ],
+ q(wolio) => [
+ q(7122),
+ q(0),
+ ],
+ q(wolof) => [
+ q(0469),
+ q(0),
+ ],
+ q(wom (nigeria)) => [
+ q(7165),
+ q(0),
+ ],
+ q(wom (papua new guinea)) => [
+ q(7139),
+ q(0),
+ ],
+ q(womo) => [
+ q(7143),
+ q(0),
+ ],
+ q(wongo) => [
+ q(7166),
+ q(0),
+ ],
+ q(woods cree) => [
+ q(1924),
+ q(0),
+ ],
+ q(woria) => [
+ q(7168),
+ q(0),
+ ],
+ q(worimi) => [
+ q(3213),
+ q(0),
+ ],
+ q(worodougou) => [
+ q(3127),
+ q(0),
+ ],
+ q(worrorra) => [
+ q(7183),
+ q(0),
+ ],
+ q(wotapuri-katarqalai) => [
+ q(7199),
+ q(0),
+ ],
+ q(wotu) => [
+ q(7204),
+ q(0),
+ ],
+ q(woun meu) => [
+ q(4994),
+ q(0),
+ ],
+ q(written oirat) => [
+ q(7483),
+ q(0),
+ ],
+ q(wu chinese) => [
+ q(7214),
+ q(0),
+ ],
+ q(wuding-luquan yi) => [
+ q(7705),
+ q(0),
+ ],
+ q(wudu) => [
+ q(7207),
+ q(0),
+ ],
+ q(wuliwuli) => [
+ q(7125),
+ q(0),
+ ],
+ q(wulna) => [
+ q(7216),
+ q(0),
+ ],
+ q(wumboko) => [
+ q(1410),
+ q(0),
+ ],
+ q(wumbvu) => [
+ q(7210),
+ q(0),
+ ],
+ q(wumeng nasu) => [
+ q(7708),
+ q(0),
+ ],
+ q(wunai bunu) => [
+ q(1555),
+ q(0),
+ ],
+ q(wunambal) => [
+ q(7206),
+ q(0),
+ ],
+ q(wurrugu) => [
+ q(7212),
+ q(0),
+ ],
+ q(wusa nasu) => [
+ q(7562),
+ q(0),
+ ],
+ q(wushi) => [
+ q(1451),
+ q(0),
+ ],
+ q(wusi) => [
+ q(7194),
+ q(0),
+ ],
+ q(wutung) => [
+ q(7213),
+ q(0),
+ ],
+ q(wutunhua) => [
+ q(7208),
+ q(0),
+ ],
+ q(wuvulu-aua) => [
+ q(7215),
+ q(0),
+ ],
+ q(wuzlam) => [
+ q(6833),
+ q(0),
+ ],
+ q(wyandot) => [
+ q(7224),
+ q(0),
+ ],
+ q(wymysorys) => [
+ q(7226),
+ q(0),
+ ],
+ q(xaasongaxango) => [
+ q(3156),
+ q(0),
+ ],
+ q(xadani zapotec) => [
+ q(7737),
+ q(0),
+ ],
+ q(xakriaba) => [
+ q(7326),
+ q(0),
+ ],
+ q(xamtanga) => [
+ q(7237),
+ q(0),
+ ],
+ q(xanaguia zapotec) => [
+ q(7865),
+ q(0),
+ ],
+ q(xaracuu) => [
+ q(0796),
+ q(0),
+ ],
+ q(xaragure) => [
+ q(0992),
+ q(0),
+ ],
+ q(xavante) => [
+ q(7245),
+ q(0),
+ ],
+ q(xerente) => [
+ q(7282),
+ q(0),
+ ],
+ q(xeta) => [
+ q(7284),
+ q(0),
+ ],
+ q(xhosa) => [
+ q(0471),
+ q(0),
+ ],
+ q(xiandao) => [
+ q(7301),
+ q(0),
+ ],
+ q(xiang chinese) => [
+ q(2827),
+ q(0),
+ ],
+ q(xibe) => [
+ q(6036),
+ q(0),
+ ],
+ q(xicotepec de juarez totonac) => [
+ q(6613),
+ q(0),
+ ],
+ q(xinca) => [
+ q(7305),
+ q(0),
+ ],
+ q(xingu asurini) => [
+ q(0898),
+ q(0),
+ ],
+ q(xipaya) => [
+ q(7309),
+ q(0),
+ ],
+ q(xipinawa) => [
+ q(7306),
+ q(0),
+ ],
+ q(xiri) => [
+ q(7303),
+ q(0),
+ ],
+ q(xiriana) => [
+ q(7307),
+ q(0),
+ ],
+ q(xishanba lalo) => [
+ q(7707),
+ q(0),
+ ],
+ q(xokleng) => [
+ q(7387),
+ q(0),
+ ],
+ q(xukuru) => [
+ q(7390),
+ q(0),
+ ],
+ q(xwela gbe) => [
+ q(7480),
+ q(0),
+ ],
+ q(yaaku) => [
+ q(4574),
+ q(0),
+ ],
+ q(yabaana) => [
+ q(7527),
+ q(0),
+ ],
+ q(yabarana) => [
+ q(7509),
+ q(0),
+ ],
+ q(yabem) => [
+ q(3024),
+ q(0),
+ ],
+ q(yaben) => [
+ q(7526),
+ q(0),
+ ],
+ q(yabong) => [
+ q(7528),
+ q(0),
+ ],
+ q(yabula yabula) => [
+ q(7711),
+ q(0),
+ ],
+ q(yace) => [
+ q(2235),
+ q(0),
+ ],
+ q(yaeyama) => [
+ q(5854),
+ q(0),
+ ],
+ q(yafi) => [
+ q(7077),
+ q(0),
+ ],
+ q(yagara) => [
+ q(7710),
+ q(0),
+ ],
+ q(yagaria) => [
+ q(7556),
+ q(0),
+ ],
+ q(yagnobi) => [
+ q(7502),
+ q(0),
+ ],
+ q(yagomi) => [
+ q(7554),
+ q(0),
+ ],
+ q(yagua) => [
+ q(7497),
+ q(0),
+ ],
+ q(yagwoia) => [
+ q(7557),
+ q(0),
+ ],
+ q(yahadian) => [
+ q(4804),
+ q(0),
+ ],
+ q(yahang) => [
+ q(5759),
+ q(0),
+ ],
+ q(yahuna) => [
+ q(7634),
+ q(0),
+ ],
+ q(yaka (central african republic)) => [
+ q(0990),
+ q(0),
+ ],
+ q(yaka (congo)) => [
+ q(3016),
+ q(0),
+ ],
+ q(yaka (democratic republic of congo)) => [
+ q(7499),
+ q(0),
+ ],
+ q(yakaikeke) => [
+ q(7583),
+ q(0),
+ ],
+ q(yakama) => [
+ q(7504),
+ q(0),
+ ],
+ q(yakan) => [
+ q(7580),
+ q(0),
+ ],
+ q(yakha) => [
+ q(7521),
+ q(0),
+ ],
+ q(yakoma) => [
+ q(7591),
+ q(0),
+ ],
+ q(yakut) => [
+ q(0366),
+ q(0),
+ ],
+ q(yala) => [
+ q(7518),
+ q(0),
+ ],
+ q(yalahatan) => [
+ q(3029),
+ q(0),
+ ],
+ q(yalakalore) => [
+ q(7489),
+ q(0),
+ ],
+ q(yalalag zapotec) => [
+ q(7845),
+ q(0),
+ ],
+ q(yalarnnga) => [
+ q(7601),
+ q(0),
+ ],
+ q(yale) => [
+ q(4748),
+ q(0),
+ ],
+ q(yaleba) => [
+ q(7593),
+ q(0),
+ ],
+ q(yalunka) => [
+ q(7505),
+ q(0),
+ ],
+ q(yamana) => [
+ q(7500),
+ q(0),
+ ],
+ q(yamap) => [
+ q(7616),
+ q(0),
+ ],
+ q(yamba) => [
+ q(7506),
+ q(0),
+ ],
+ q(yambes) => [
+ q(7604),
+ q(0),
+ ],
+ q(yambeta) => [
+ q(7511),
+ q(0),
+ ],
+ q(yamdena) => [
+ q(3097),
+ q(0),
+ ],
+ q(yameo) => [
+ q(7607),
+ q(0),
+ ],
+ q(yami) => [
+ q(6337),
+ q(0),
+ ],
+ q(yaminahua) => [
+ q(7494),
+ q(0),
+ ],
+ q(yamna) => [
+ q(7614),
+ q(0),
+ ],
+ q(yamongeri) => [
+ q(7608),
+ q(0),
+ ],
+ q(yamphu) => [
+ q(7522),
+ q(0),
+ ],
+ q(yan-nhangu) => [
+ q(3038),
+ q(0),
+ ],
+ q(yana) => [
+ q(7630),
+ q(0),
+ ],
+ q(yanahuanca pasco quechua) => [
+ q(5667),
+ q(0),
+ ],
+ q(yanda dom dogon) => [
+ q(2199),
+ q(0),
+ ],
+ q(yandruwandha) => [
+ q(7624),
+ q(0),
+ ],
+ q(yanesha') => [
+ q(0771),
+ q(0),
+ ],
+ q(yang zhuang) => [
+ q(7882),
+ q(0),
+ ],
+ q(yangben) => [
+ q(7513),
+ q(0),
+ ],
+ q(yangho) => [
+ q(7627),
+ q(0),
+ ],
+ q(yangkam) => [
+ q(1470),
+ q(0),
+ ],
+ q(yangman) => [
+ q(3107),
+ q(0),
+ ],
+ q(yango) => [
+ q(7626),
+ q(0),
+ ],
+ q(yangulam) => [
+ q(7629),
+ q(0),
+ ],
+ q(yangum dey) => [
+ q(7536),
+ q(0),
+ ],
+ q(yangum gel) => [
+ q(7553),
+ q(0),
+ ],
+ q(yangum mon) => [
+ q(7615),
+ q(0),
+ ],
+ q(yankunytjatjara) => [
+ q(3215),
+ q(0),
+ ],
+ q(yanomami) => [
+ q(7058),
+ q(0),
+ ],
+ q(yanomamo) => [
+ q(2646),
+ q(0),
+ ],
+ q(yansi) => [
+ q(7633),
+ q(0),
+ ],
+ q(yanyuwa) => [
+ q(3032),
+ q(0),
+ ],
+ q(yao) => [
+ q(0472),
+ q(0),
+ ],
+ q(yaosakor asmat) => [
+ q(0908),
+ q(0),
+ ],
+ q(yaoure) => [
+ q(7657),
+ q(0),
+ ],
+ q(yapese) => [
+ q(0473),
+ q(0),
+ ],
+ q(yapunda) => [
+ q(7550),
+ q(0),
+ ],
+ q(yaqay) => [
+ q(3033),
+ q(0),
+ ],
+ q(yaqui) => [
+ q(7508),
+ q(0),
+ ],
+ q(yarawata) => [
+ q(7663),
+ q(0),
+ ],
+ q(yareba) => [
+ q(7656),
+ q(0),
+ ],
+ q(yareni zapotec) => [
+ q(7720),
+ q(0),
+ ],
+ q(yari) => [
+ q(7658),
+ q(0),
+ ],
+ q(yarsun) => [
+ q(7662),
+ q(0),
+ ],
+ q(yasa) => [
+ q(7587),
+ q(0),
+ ],
+ q(yassic) => [
+ q(7664),
+ q(0),
+ ],
+ q(yatee zapotec) => [
+ q(7875),
+ q(0),
+ ],
+ q(yatzachi zapotec) => [
+ q(7735),
+ q(0),
+ ],
+ q(yau (morobe province)) => [
+ q(7696),
+ q(0),
+ ],
+ q(yau (sandaun province)) => [
+ q(7712),
+ q(0),
+ ],
+ q(yaul) => [
+ q(7592),
+ q(0),
+ ],
+ q(yauma) => [
+ q(7515),
+ q(0),
+ ],
+ q(yaur) => [
+ q(3036),
+ q(0),
+ ],
+ q(yautepec zapotec) => [
+ q(7826),
+ q(0),
+ ],
+ q(yauyos quechua) => [
+ q(5671),
+ q(0),
+ ],
+ q(yavitero) => [
+ q(7701),
+ q(0),
+ ],
+ q(yawa) => [
+ q(7700),
+ q(0),
+ ],
+ q(yawalapiti) => [
+ q(7514),
+ q(0),
+ ],
+ q(yawanawa) => [
+ q(7704),
+ q(0),
+ ],
+ q(yawarawarga) => [
+ q(7709),
+ q(0),
+ ],
+ q(yaweyuha) => [
+ q(7530),
+ q(0),
+ ],
+ q(yawijibaya) => [
+ q(3047),
+ q(0),
+ ],
+ q(yawiyo) => [
+ q(7529),
+ q(0),
+ ],
+ q(yawuru) => [
+ q(7706),
+ q(0),
+ ],
+ q(yazgulyam) => [
+ q(7501),
+ q(0),
+ ],
+ q(yecuatla totonac) => [
+ q(6536),
+ q(0),
+ ],
+ q(yei) => [
+ q(3057),
+ q(0),
+ ],
+ q(yekhee) => [
+ q(2301),
+ q(0),
+ ],
+ q(yekora) => [
+ q(7588),
+ q(0),
+ ],
+ q(yela) => [
+ q(7545),
+ q(0),
+ ],
+ q(yele) => [
+ q(7594),
+ q(0),
+ ],
+ q(yelmek) => [
+ q(3059),
+ q(0),
+ ],
+ q(yelogu) => [
+ q(7595),
+ q(0),
+ ],
+ q(yemba) => [
+ q(7519),
+ q(0),
+ ],
+ q(yemsa) => [
+ q(3109),
+ q(0),
+ ],
+ q(yendang) => [
+ q(7632),
+ q(0),
+ ],
+ q(yeni) => [
+ q(7543),
+ q(0),
+ ],
+ q(yeniche) => [
+ q(7541),
+ q(0),
+ ],
+ q(yerakai) => [
+ q(7655),
+ q(0),
+ ],
+ q(yeretuar) => [
+ q(2583),
+ q(0),
+ ],
+ q(yerong) => [
+ q(7661),
+ q(0),
+ ],
+ q(yerukula) => [
+ q(7549),
+ q(0),
+ ],
+ q(yessan-mayo) => [
+ q(7672),
+ q(0),
+ ],
+ q(yetfa) => [
+ q(7548),
+ q(0),
+ ],
+ q(yevanic) => [
+ q(7544),
+ q(0),
+ ],
+ q(yeyi) => [
+ q(7551),
+ q(0),
+ ],
+ q(yiddish) => [
+ q(0474),
+ q(0),
+ ],
+ q(yiddish sign language) => [
+ q(7539),
+ q(0),
+ ],
+ q(yidgha) => [
+ q(7537),
+ q(0),
+ ],
+ q(yidiny) => [
+ q(7564),
+ q(0),
+ ],
+ q(yil) => [
+ q(7597),
+ q(0),
+ ],
+ q(yimas) => [
+ q(7542),
+ q(0),
+ ],
+ q(yimchungru naga) => [
+ q(7568),
+ q(0),
+ ],
+ q(yinbaw karen) => [
+ q(3665),
+ q(0),
+ ],
+ q(yinchia) => [
+ q(7569),
+ q(0),
+ ],
+ q(yindjibarndi) => [
+ q(7565),
+ q(0),
+ ],
+ q(yindjilandji) => [
+ q(7567),
+ q(0),
+ ],
+ q(yine) => [
+ q(5425),
+ q(0),
+ ],
+ q(yinggarda) => [
+ q(7561),
+ q(0),
+ ],
+ q(yintale) => [
+ q(3669),
+ q(0),
+ ],
+ q(yintale karen) => [
+ q(3669),
+ q(0),
+ ],
+ q(yipma) => [
+ q(1607),
+ q(0),
+ ],
+ q(yir yoront) => [
+ q(7578),
+ q(0),
+ ],
+ q(yis) => [
+ q(7573),
+ q(0),
+ ],
+ q(yiwom) => [
+ q(2470),
+ q(0),
+ ],
+ q(yoba) => [
+ q(7635),
+ q(0),
+ ],
+ q(yocoboue dida) => [
+ q(2630),
+ q(0),
+ ],
+ q(yogad) => [
+ q(7636),
+ q(0),
+ ],
+ q(yoidik) => [
+ q(7538),
+ q(0),
+ ],
+ q(yoke) => [
+ q(7582),
+ q(0),
+ ],
+ q(yokuts) => [
+ q(7638),
+ q(0),
+ ],
+ q(yola) => [
+ q(7639),
+ q(0),
+ ],
+ q(yoloxochitl mixtec) => [
+ q(7459),
+ q(0),
+ ],
+ q(yom) => [
+ q(5434),
+ q(0),
+ ],
+ q(yombe) => [
+ q(7640),
+ q(0),
+ ],
+ q(yonaguni) => [
+ q(7637),
+ q(0),
+ ],
+ q(yong) => [
+ q(7631),
+ q(0),
+ ],
+ q(yongbei zhuang) => [
+ q(7881),
+ q(0),
+ ],
+ q(yongkom) => [
+ q(7641),
+ q(0),
+ ],
+ q(yongnan zhuang) => [
+ q(7884),
+ q(0),
+ ],
+ q(yopno) => [
+ q(7694),
+ q(0),
+ ],
+ q(yora) => [
+ q(4551),
+ q(0),
+ ],
+ q(yoron) => [
+ q(7644),
+ q(0),
+ ],
+ q(yorta yorta) => [
+ q(7490),
+ q(0),
+ ],
+ q(yoruba) => [
+ q(0475),
+ q(0),
+ ],
+ q(yos) => [
+ q(7642),
+ q(0),
+ ],
+ q(yosondua mixtec) => [
+ q(4445),
+ q(0),
+ ],
+ q(yotti) => [
+ q(7643),
+ q(0),
+ ],
+ q(youjiang zhuang) => [
+ q(7883),
+ q(0),
+ ],
+ q(youle jinuo) => [
+ q(3083),
+ q(0),
+ ],
+ q(younuo bunu) => [
+ q(1501),
+ q(0),
+ ],
+ q(yout wam) => [
+ q(7677),
+ q(0),
+ ],
+ q(yoy) => [
+ q(7645),
+ q(0),
+ ],
+ q(yuaga) => [
+ q(5081),
+ q(0),
+ ],
+ q(yucatec maya) => [
+ q(7678),
+ q(0),
+ ],
+ q(yucatec maya sign language) => [
+ q(4511),
+ q(0),
+ ],
+ q(yucateco) => [
+ q(7678),
+ q(0),
+ ],
+ q(yuchi) => [
+ q(7680),
+ q(0),
+ ],
+ q(yucuane mixtec) => [
+ q(4584),
+ q(0),
+ ],
+ q(yucuna) => [
+ q(7533),
+ q(0),
+ ],
+ q(yue chinese) => [
+ q(7682),
+ q(0),
+ ],
+ q(yug) => [
+ q(7684),
+ q(0),
+ ],
+ q(yugambal) => [
+ q(7679),
+ q(0),
+ ],
+ q(yugh) => [
+ q(7695),
+ q(0),
+ ],
+ q(yugoslavian sign language) => [
+ q(7667),
+ q(0),
+ ],
+ q(yuhup) => [
+ q(7495),
+ q(0),
+ ],
+ q(yuki) => [
+ q(7687),
+ q(0),
+ ],
+ q(yukpa) => [
+ q(7691),
+ q(0),
+ ],
+ q(yukuben) => [
+ q(7525),
+ q(0),
+ ],
+ q(yulu) => [
+ q(7688),
+ q(0),
+ ],
+ q(yupik languages) => [
+ q(0476),
+ q(0),
+ ],
+ q(yuqui) => [
+ q(7692),
+ q(0),
+ ],
+ q(yuracare) => [
+ q(7699),
+ q(0),
+ ],
+ q(yurok) => [
+ q(7693),
+ q(0),
+ ],
+ q(yuruti) => [
+ q(7685),
+ q(0),
+ ],
+ q(yutanduchi mixtec) => [
+ q(4090),
+ q(0),
+ ],
+ q(yuwana) => [
+ q(7512),
+ q(0),
+ ],
+ q(zaachila zapotec) => [
+ q(7874),
+ q(0),
+ ],
+ q(zabana) => [
+ q(3364),
+ q(0),
+ ],
+ q(zacatepec chatino) => [
+ q(1900),
+ q(0),
+ ],
+ q(zacatlan-ahuacatlan-tepetzintla nahuatl) => [
+ q(4850),
+ q(0),
+ ],
+ q(zaghawa) => [
+ q(7722),
+ q(0),
+ ],
+ q(zaiwa) => [
+ q(0911),
+ q(0),
+ ],
+ q(zakhring) => [
+ q(7778),
+ q(0),
+ ],
+ q(zambian sign language) => [
+ q(7860),
+ q(0),
+ ],
+ q(zan gula) => [
+ q(7813),
+ q(0),
+ ],
+ q(zanaki) => [
+ q(7726),
+ q(0),
+ ],
+ q(zande (individual language)) => [
+ q(7814),
+ q(0),
+ ],
+ q(zande languages) => [
+ q(0482),
+ q(0),
+ ],
+ q(zangskari) => [
+ q(7734),
+ q(0),
+ ],
+ q(zangwal) => [
+ q(7723),
+ q(0),
+ ],
+ q(zaniza zapotec) => [
+ q(7847),
+ q(0),
+ ],
+ q(zaparo) => [
+ q(7855),
+ q(0),
+ ],
+ q(zapotec) => [
+ q(0477),
+ q(0),
+ ],
+ q(zaramo) => [
+ q(7725),
+ q(0),
+ ],
+ q(zari) => [
+ q(7739),
+ q(0),
+ ],
+ q(zarma) => [
+ q(2060),
+ q(0),
+ ],
+ q(zarphatic) => [
+ q(7856),
+ q(0),
+ ],
+ q(zauzou) => [
+ q(7727),
+ q(0),
+ ],
+ q(zay) => [
+ q(7880),
+ q(0),
+ ],
+ q(zayein karen) => [
+ q(3706),
+ q(0),
+ ],
+ q(zayse-zergulla) => [
+ q(7738),
+ q(0),
+ ],
+ q(zaysete) => [
+ q(7738),
+ q(0),
+ ],
+ q(zaza) => [
+ q(0486),
+ q(0),
+ ],
+ q(zazaki) => [
+ q(0486),
+ q(0),
+ ],
+ q(zazao) => [
+ q(3027),
+ q(0),
+ ],
+ q(zeem) => [
+ q(7876),
+ q(0),
+ ],
+ q(zeeuws) => [
+ q(7747),
+ q(0),
+ ],
+ q(zemba) => [
+ q(2025),
+ q(0),
+ ],
+ q(zeme naga) => [
+ q(5156),
+ q(0),
+ ],
+ q(zemgalian) => [
+ q(7492),
+ q(0),
+ ],
+ q(zenag) => [
+ q(7748),
+ q(0),
+ ],
+ q(zenaga) => [
+ q(0479),
+ q(0),
+ ],
+ q(zenzontepec chatino) => [
+ q(1933),
+ q(0),
+ ],
+ q(zerenkel) => [
+ q(7854),
+ q(0),
+ ],
+ q(zhaba) => [
+ q(7755),
+ q(0),
+ ],
+ q(zhang-zhung) => [
+ q(7491),
+ q(0),
+ ],
+ q(zhire) => [
+ q(7757),
+ q(0),
+ ],
+ q(zhoa) => [
+ q(7759),
+ q(0),
+ ],
+ q(zhuang) => [
+ q(0481),
+ q(0),
+ ],
+ q(zia) => [
+ q(7760),
+ q(0),
+ ],
+ q(zialo) => [
+ q(7763),
+ q(0),
+ ],
+ q(zigula) => [
+ q(7767),
+ q(0),
+ ],
+ q(zimakani) => [
+ q(7762),
+ q(0),
+ ],
+ q(zimba) => [
+ q(7788),
+ q(0),
+ ],
+ q(zimbabwe sign language) => [
+ q(7761),
+ q(0),
+ ],
+ q(zinza) => [
+ q(7765),
+ q(0),
+ ],
+ q(zire) => [
+ q(6011),
+ q(0),
+ ],
+ q(ziriya) => [
+ q(7766),
+ q(0),
+ ],
+ q(zizilivakan) => [
+ q(7768),
+ q(0),
+ ],
+ q(zo'e) => [
+ q(5607),
+ q(0),
+ ],
+ q(zokhuo) => [
+ q(7715),
+ q(0),
+ ],
+ q(zoogocho zapotec) => [
+ q(7841),
+ q(0),
+ ],
+ q(zoroastrian dari) => [
+ q(2433),
+ q(0),
+ ],
+ q(zorop) => [
+ q(7077),
+ q(0),
+ ],
+ q(zotung chin) => [
+ q(1935),
+ q(0),
+ ],
+ q(zou) => [
+ q(7820),
+ q(0),
+ ],
+ q(zulgo-gemzek) => [
+ q(2554),
+ q(0),
+ ],
+ q(zulu) => [
+ q(0483),
+ q(0),
+ ],
+ q(zumaya) => [
+ q(7879),
+ q(0),
+ ],
+ q(zumbun) => [
+ q(3095),
+ q(0),
+ ],
+ q(zuni) => [
+ q(0484),
+ q(0),
+ ],
+ q(zuojiang zhuang) => [
+ q(7886),
+ q(0),
+ ],
+ q(zyphe) => [
+ q(7885),
+ q(0),
+ ],
+};
+
+$Locale::Codes::Data{'language'}{'code2id'} = {
+ q(alpha-2) => {
+ q(aa) => [
+ q(0001),
+ q(0),
+ ],
+ q(ab) => [
+ q(0002),
+ q(0),
+ ],
+ q(ae) => [
+ q(0034),
+ q(0),
+ ],
+ q(af) => [
+ q(0009),
+ q(0),
+ ],
+ q(ak) => [
+ q(0011),
+ q(0),
+ ],
+ q(am) => [
+ q(0017),
+ q(0),
+ ],
+ q(an) => [
+ q(0023),
+ q(0),
+ ],
+ q(ar) => [
+ q(0021),
+ q(0),
+ ],
+ q(as) => [
+ q(0029),
+ q(0),
+ ],
+ q(av) => [
+ q(0033),
+ q(0),
+ ],
+ q(ay) => [
+ q(0036),
+ q(0),
+ ],
+ q(az) => [
+ q(0037),
+ q(0),
+ ],
+ q(ba) => [
+ q(0040),
+ q(0),
+ ],
+ q(be) => [
+ q(0048),
+ q(0),
+ ],
+ q(bg) => [
+ q(0065),
+ q(0),
+ ],
+ q(bh) => [
+ q(0053),
+ q(0),
+ ],
+ q(bi) => [
+ q(0056),
+ q(0),
+ ],
+ q(bm) => [
+ q(0042),
+ q(0),
+ ],
+ q(bn) => [
+ q(0050),
+ q(0),
+ ],
+ q(bo) => [
+ q(0427),
+ q(0),
+ ],
+ q(br) => [
+ q(0061),
+ q(0),
+ ],
+ q(bs) => [
+ q(0059),
+ q(0),
+ ],
+ q(ca) => [
+ q(0071),
+ q(0),
+ ],
+ q(ce) => [
+ q(0077),
+ q(0),
+ ],
+ q(ch) => [
+ q(0075),
+ q(0),
+ ],
+ q(co) => [
+ q(0092),
+ q(0),
+ ],
+ q(cr) => [
+ q(0096),
+ q(0),
+ ],
+ q(cs) => [
+ q(0101),
+ q(0),
+ ],
+ q(cu) => [
+ q(0086),
+ q(0),
+ ],
+ q(cv) => [
+ q(0087),
+ q(0),
+ ],
+ q(cy) => [
+ q(0466),
+ q(0),
+ ],
+ q(da) => [
+ q(0103),
+ q(0),
+ ],
+ q(de) => [
+ q(0150),
+ q(0),
+ ],
+ q(dv) => [
+ q(0110),
+ q(0),
+ ],
+ q(dz) => [
+ q(0118),
+ q(0),
+ ],
+ q(ee) => [
+ q(0127),
+ q(0),
+ ],
+ q(el) => [
+ q(0164),
+ q(1),
+ ],
+ q(en) => [
+ q(0123),
+ q(0),
+ ],
+ q(eo) => [
+ q(0125),
+ q(0),
+ ],
+ q(es) => [
+ q(0401),
+ q(0),
+ ],
+ q(et) => [
+ q(0126),
+ q(0),
+ ],
+ q(eu) => [
+ q(0044),
+ q(0),
+ ],
+ q(fa) => [
+ q(0342),
+ q(0),
+ ],
+ q(ff) => [
+ q(0143),
+ q(0),
+ ],
+ q(fi) => [
+ q(0134),
+ q(0),
+ ],
+ q(fj) => [
+ q(0132),
+ q(0),
+ ],
+ q(fo) => [
+ q(0130),
+ q(0),
+ ],
+ q(fr) => [
+ q(0137),
+ q(0),
+ ],
+ q(fy) => [
+ q(0142),
+ q(0),
+ ],
+ q(ga) => [
+ q(0154),
+ q(0),
+ ],
+ q(gd) => [
+ q(0153),
+ q(0),
+ ],
+ q(gl) => [
+ q(0155),
+ q(0),
+ ],
+ q(gn) => [
+ q(0165),
+ q(0),
+ ],
+ q(gu) => [
+ q(0167),
+ q(0),
+ ],
+ q(gv) => [
+ q(0156),
+ q(0),
+ ],
+ q(ha) => [
+ q(0171),
+ q(0),
+ ],
+ q(he) => [
+ q(0173),
+ q(0),
+ ],
+ q(hi) => [
+ q(0177),
+ q(0),
+ ],
+ q(ho) => [
+ q(0180),
+ q(0),
+ ],
+ q(hr) => [
+ q(0181),
+ q(0),
+ ],
+ q(ht) => [
+ q(0170),
+ q(0),
+ ],
+ q(hu) => [
+ q(0183),
+ q(0),
+ ],
+ q(hy) => [
+ q(0024),
+ q(0),
+ ],
+ q(hz) => [
+ q(0174),
+ q(0),
+ ],
+ q(ia) => [
+ q(0194),
+ q(0),
+ ],
+ q(id) => [
+ q(0196),
+ q(0),
+ ],
+ q(ie) => [
+ q(0192),
+ q(0),
+ ],
+ q(ig) => [
+ q(0186),
+ q(0),
+ ],
+ q(ii) => [
+ q(0189),
+ q(0),
+ ],
+ q(ik) => [
+ q(0199),
+ q(0),
+ ],
+ q(io) => [
+ q(0188),
+ q(0),
+ ],
+ q(is) => [
+ q(0187),
+ q(0),
+ ],
+ q(it) => [
+ q(0202),
+ q(0),
+ ],
+ q(iu) => [
+ q(0191),
+ q(0),
+ ],
+ q(ja) => [
+ q(0205),
+ q(0),
+ ],
+ q(jv) => [
+ q(0203),
+ q(0),
+ ],
+ q(ka) => [
+ q(0149),
+ q(0),
+ ],
+ q(kg) => [
+ q(0230),
+ q(0),
+ ],
+ q(ki) => [
+ q(0224),
+ q(0),
+ ],
+ q(kj) => [
+ q(0238),
+ q(0),
+ ],
+ q(kk) => [
+ q(0218),
+ q(0),
+ ],
+ q(kl) => [
+ q(0211),
+ q(0),
+ ],
+ q(km) => [
+ q(0222),
+ q(0),
+ ],
+ q(kn) => [
+ q(0213),
+ q(0),
+ ],
+ q(ko) => [
+ q(0231),
+ q(0),
+ ],
+ q(kr) => [
+ q(0216),
+ q(0),
+ ],
+ q(ks) => [
+ q(0215),
+ q(0),
+ ],
+ q(ku) => [
+ q(0240),
+ q(0),
+ ],
+ q(kv) => [
+ q(0229),
+ q(0),
+ ],
+ q(kw) => [
+ q(0091),
+ q(0),
+ ],
+ q(ky) => [
+ q(0226),
+ q(0),
+ ],
+ q(la) => [
+ q(0246),
+ q(0),
+ ],
+ q(lb) => [
+ q(0254),
+ q(0),
+ ],
+ q(lg) => [
+ q(0257),
+ q(0),
+ ],
+ q(li) => [
+ q(0249),
+ q(0),
+ ],
+ q(ln) => [
+ q(0250),
+ q(0),
+ ],
+ q(lo) => [
+ q(0245),
+ q(0),
+ ],
+ q(lt) => [
+ q(0251),
+ q(0),
+ ],
+ q(lu) => [
+ q(0256),
+ q(0),
+ ],
+ q(lv) => [
+ q(0247),
+ q(0),
+ ],
+ q(mg) => [
+ q(0283),
+ q(0),
+ ],
+ q(mh) => [
+ q(0265),
+ q(0),
+ ],
+ q(mi) => [
+ q(0270),
+ q(0),
+ ],
+ q(mk) => [
+ q(0262),
+ q(0),
+ ],
+ q(ml) => [
+ q(0268),
+ q(0),
+ ],
+ q(mn) => [
+ q(0289),
+ q(0),
+ ],
+ q(mr) => [
+ q(0272),
+ q(0),
+ ],
+ q(ms) => [
+ q(0274),
+ q(1),
+ ],
+ q(mt) => [
+ q(0284),
+ q(0),
+ ],
+ q(my) => [
+ q(0066),
+ q(0),
+ ],
+ q(na) => [
+ q(0301),
+ q(0),
+ ],
+ q(nb) => [
+ q(0313),
+ q(0),
+ ],
+ q(nd) => [
+ q(0304),
+ q(0),
+ ],
+ q(ne) => [
+ q(0307),
+ q(1),
+ ],
+ q(ng) => [
+ q(0305),
+ q(0),
+ ],
+ q(nl) => [
+ q(0116),
+ q(0),
+ ],
+ q(nn) => [
+ q(0312),
+ q(0),
+ ],
+ q(no) => [
+ q(0316),
+ q(0),
+ ],
+ q(nr) => [
+ q(0303),
+ q(0),
+ ],
+ q(nv) => [
+ q(0302),
+ q(0),
+ ],
+ q(ny) => [
+ q(0321),
+ q(0),
+ ],
+ q(oc) => [
+ q(0326),
+ q(0),
+ ],
+ q(oj) => [
+ q(0327),
+ q(0),
+ ],
+ q(om) => [
+ q(0329),
+ q(0),
+ ],
+ q(or) => [
+ q(0328),
+ q(1),
+ ],
+ q(os) => [
+ q(0331),
+ q(0),
+ ],
+ q(pa) => [
+ q(0338),
+ q(0),
+ ],
+ q(pi) => [
+ q(0345),
+ q(0),
+ ],
+ q(pl) => [
+ q(0346),
+ q(0),
+ ],
+ q(ps) => [
+ q(0351),
+ q(0),
+ ],
+ q(pt) => [
+ q(0348),
+ q(0),
+ ],
+ q(qu) => [
+ q(0353),
+ q(0),
+ ],
+ q(rm) => [
+ q(0358),
+ q(0),
+ ],
+ q(rn) => [
+ q(0361),
+ q(0),
+ ],
+ q(ro) => [
+ q(0360),
+ q(0),
+ ],
+ q(ru) => [
+ q(0363),
+ q(0),
+ ],
+ q(rw) => [
+ q(0225),
+ q(0),
+ ],
+ q(sa) => [
+ q(0370),
+ q(0),
+ ],
+ q(sc) => [
+ q(0402),
+ q(0),
+ ],
+ q(sd) => [
+ q(0395),
+ q(0),
+ ],
+ q(se) => [
+ q(0388),
+ q(0),
+ ],
+ q(sg) => [
+ q(0365),
+ q(0),
+ ],
+ q(sh) => [
+ q(0537),
+ q(0),
+ ],
+ q(si) => [
+ q(0381),
+ q(0),
+ ],
+ q(sk) => [
+ q(0385),
+ q(0),
+ ],
+ q(sl) => [
+ q(0386),
+ q(0),
+ ],
+ q(sm) => [
+ q(0392),
+ q(0),
+ ],
+ q(sn) => [
+ q(0394),
+ q(0),
+ ],
+ q(so) => [
+ q(0398),
+ q(0),
+ ],
+ q(sq) => [
+ q(0013),
+ q(0),
+ ],
+ q(sr) => [
+ q(0404),
+ q(0),
+ ],
+ q(ss) => [
+ q(0407),
+ q(0),
+ ],
+ q(st) => [
+ q(0400),
+ q(1),
+ ],
+ q(su) => [
+ q(0409),
+ q(0),
+ ],
+ q(sv) => [
+ q(0413),
+ q(0),
+ ],
+ q(sw) => [
+ q(0412),
+ q(1),
+ ],
+ q(ta) => [
+ q(0418),
+ q(0),
+ ],
+ q(te) => [
+ q(0420),
+ q(0),
+ ],
+ q(tg) => [
+ q(0424),
+ q(0),
+ ],
+ q(th) => [
+ q(0426),
+ q(0),
+ ],
+ q(ti) => [
+ q(0429),
+ q(0),
+ ],
+ q(tk) => [
+ q(0441),
+ q(0),
+ ],
+ q(tl) => [
+ q(0425),
+ q(0),
+ ],
+ q(tn) => [
+ q(0439),
+ q(0),
+ ],
+ q(to) => [
+ q(0436),
+ q(0),
+ ],
+ q(tr) => [
+ q(0444),
+ q(0),
+ ],
+ q(ts) => [
+ q(0440),
+ q(0),
+ ],
+ q(tt) => [
+ q(0419),
+ q(0),
+ ],
+ q(tw) => [
+ q(0447),
+ q(0),
+ ],
+ q(ty) => [
+ q(0416),
+ q(0),
+ ],
+ q(ug) => [
+ q(0451),
+ q(0),
+ ],
+ q(uk) => [
+ q(0452),
+ q(0),
+ ],
+ q(ur) => [
+ q(0455),
+ q(0),
+ ],
+ q(uz) => [
+ q(0456),
+ q(0),
+ ],
+ q(ve) => [
+ q(0458),
+ q(0),
+ ],
+ q(vi) => [
+ q(0459),
+ q(0),
+ ],
+ q(vo) => [
+ q(0460),
+ q(0),
+ ],
+ q(wa) => [
+ q(0468),
+ q(0),
+ ],
+ q(wo) => [
+ q(0469),
+ q(0),
+ ],
+ q(xh) => [
+ q(0471),
+ q(0),
+ ],
+ q(yi) => [
+ q(0474),
+ q(0),
+ ],
+ q(yo) => [
+ q(0475),
+ q(0),
+ ],
+ q(za) => [
+ q(0481),
+ q(0),
+ ],
+ q(zh) => [
+ q(0079),
+ q(0),
+ ],
+ q(zu) => [
+ q(0483),
+ q(0),
+ ],
+ },
+ q(alpha-3) => {
+ q(aaa) => [
+ q(0538),
+ q(0),
+ ],
+ q(aab) => [
+ q(0539),
+ q(0),
+ ],
+ q(aac) => [
+ q(0540),
+ q(0),
+ ],
+ q(aad) => [
+ q(0541),
+ q(0),
+ ],
+ q(aae) => [
+ q(0542),
+ q(0),
+ ],
+ q(aaf) => [
+ q(0543),
+ q(0),
+ ],
+ q(aag) => [
+ q(0544),
+ q(0),
+ ],
+ q(aah) => [
+ q(0545),
+ q(0),
+ ],
+ q(aai) => [
+ q(0546),
+ q(0),
+ ],
+ q(aak) => [
+ q(0547),
+ q(0),
+ ],
+ q(aal) => [
+ q(0548),
+ q(0),
+ ],
+ q(aam) => [
+ q(0549),
+ q(0),
+ ],
+ q(aan) => [
+ q(0550),
+ q(0),
+ ],
+ q(aao) => [
+ q(0551),
+ q(0),
+ ],
+ q(aap) => [
+ q(0552),
+ q(0),
+ ],
+ q(aaq) => [
+ q(0553),
+ q(0),
+ ],
+ q(aar) => [
+ q(0001),
+ q(0),
+ ],
+ q(aas) => [
+ q(0554),
+ q(0),
+ ],
+ q(aat) => [
+ q(0555),
+ q(0),
+ ],
+ q(aau) => [
+ q(0556),
+ q(0),
+ ],
+ q(aav) => [
+ q(0487),
+ q(0),
+ ],
+ q(aaw) => [
+ q(0557),
+ q(0),
+ ],
+ q(aax) => [
+ q(0558),
+ q(0),
+ ],
+ q(aaz) => [
+ q(0559),
+ q(0),
+ ],
+ q(aba) => [
+ q(0560),
+ q(0),
+ ],
+ q(abb) => [
+ q(0561),
+ q(0),
+ ],
+ q(abc) => [
+ q(0562),
+ q(0),
+ ],
+ q(abd) => [
+ q(0563),
+ q(0),
+ ],
+ q(abe) => [
+ q(0564),
+ q(0),
+ ],
+ q(abf) => [
+ q(0565),
+ q(0),
+ ],
+ q(abg) => [
+ q(0566),
+ q(0),
+ ],
+ q(abh) => [
+ q(0567),
+ q(0),
+ ],
+ q(abi) => [
+ q(0568),
+ q(0),
+ ],
+ q(abj) => [
+ q(0569),
+ q(0),
+ ],
+ q(abk) => [
+ q(0002),
+ q(0),
+ ],
+ q(abl) => [
+ q(0570),
+ q(0),
+ ],
+ q(abm) => [
+ q(0571),
+ q(0),
+ ],
+ q(abn) => [
+ q(0572),
+ q(0),
+ ],
+ q(abo) => [
+ q(0573),
+ q(0),
+ ],
+ q(abp) => [
+ q(0574),
+ q(0),
+ ],
+ q(abq) => [
+ q(0575),
+ q(0),
+ ],
+ q(abr) => [
+ q(0576),
+ q(0),
+ ],
+ q(abs) => [
+ q(0577),
+ q(0),
+ ],
+ q(abt) => [
+ q(0578),
+ q(0),
+ ],
+ q(abu) => [
+ q(0579),
+ q(0),
+ ],
+ q(abv) => [
+ q(0580),
+ q(0),
+ ],
+ q(abw) => [
+ q(0581),
+ q(0),
+ ],
+ q(abx) => [
+ q(0582),
+ q(0),
+ ],
+ q(aby) => [
+ q(0583),
+ q(0),
+ ],
+ q(abz) => [
+ q(0584),
+ q(0),
+ ],
+ q(aca) => [
+ q(0585),
+ q(0),
+ ],
+ q(acb) => [
+ q(0586),
+ q(0),
+ ],
+ q(acd) => [
+ q(0587),
+ q(0),
+ ],
+ q(ace) => [
+ q(0003),
+ q(0),
+ ],
+ q(acf) => [
+ q(0588),
+ q(0),
+ ],
+ q(ach) => [
+ q(0004),
+ q(0),
+ ],
+ q(aci) => [
+ q(0589),
+ q(0),
+ ],
+ q(ack) => [
+ q(0590),
+ q(0),
+ ],
+ q(acl) => [
+ q(0591),
+ q(0),
+ ],
+ q(acm) => [
+ q(0592),
+ q(0),
+ ],
+ q(acn) => [
+ q(0593),
+ q(0),
+ ],
+ q(acp) => [
+ q(0594),
+ q(0),
+ ],
+ q(acq) => [
+ q(0595),
+ q(0),
+ ],
+ q(acr) => [
+ q(0596),
+ q(0),
+ ],
+ q(acs) => [
+ q(0597),
+ q(0),
+ ],
+ q(act) => [
+ q(0598),
+ q(0),
+ ],
+ q(acu) => [
+ q(0599),
+ q(0),
+ ],
+ q(acv) => [
+ q(0600),
+ q(0),
+ ],
+ q(acw) => [
+ q(0601),
+ q(0),
+ ],
+ q(acx) => [
+ q(0602),
+ q(0),
+ ],
+ q(acy) => [
+ q(0603),
+ q(0),
+ ],
+ q(acz) => [
+ q(0604),
+ q(0),
+ ],
+ q(ada) => [
+ q(0005),
+ q(0),
+ ],
+ q(adb) => [
+ q(0605),
+ q(0),
+ ],
+ q(add) => [
+ q(0606),
+ q(0),
+ ],
+ q(ade) => [
+ q(0607),
+ q(0),
+ ],
+ q(adf) => [
+ q(0608),
+ q(0),
+ ],
+ q(adg) => [
+ q(0609),
+ q(0),
+ ],
+ q(adh) => [
+ q(0610),
+ q(0),
+ ],
+ q(adi) => [
+ q(0611),
+ q(0),
+ ],
+ q(adj) => [
+ q(0612),
+ q(0),
+ ],
+ q(adl) => [
+ q(0613),
+ q(0),
+ ],
+ q(adn) => [
+ q(0614),
+ q(0),
+ ],
+ q(ado) => [
+ q(0615),
+ q(0),
+ ],
+ q(adp) => [
+ q(0616),
+ q(0),
+ ],
+ q(adq) => [
+ q(0617),
+ q(0),
+ ],
+ q(adr) => [
+ q(0618),
+ q(0),
+ ],
+ q(ads) => [
+ q(0619),
+ q(0),
+ ],
+ q(adt) => [
+ q(0620),
+ q(0),
+ ],
+ q(adu) => [
+ q(0621),
+ q(0),
+ ],
+ q(adw) => [
+ q(0622),
+ q(0),
+ ],
+ q(adx) => [
+ q(0623),
+ q(0),
+ ],
+ q(ady) => [
+ q(0006),
+ q(0),
+ ],
+ q(adz) => [
+ q(0624),
+ q(0),
+ ],
+ q(aea) => [
+ q(0625),
+ q(0),
+ ],
+ q(aeb) => [
+ q(0626),
+ q(0),
+ ],
+ q(aec) => [
+ q(0627),
+ q(0),
+ ],
+ q(aed) => [
+ q(0628),
+ q(0),
+ ],
+ q(aee) => [
+ q(0629),
+ q(0),
+ ],
+ q(aek) => [
+ q(0630),
+ q(0),
+ ],
+ q(ael) => [
+ q(0631),
+ q(0),
+ ],
+ q(aem) => [
+ q(0632),
+ q(0),
+ ],
+ q(aen) => [
+ q(0633),
+ q(0),
+ ],
+ q(aeq) => [
+ q(0634),
+ q(0),
+ ],
+ q(aer) => [
+ q(0635),
+ q(0),
+ ],
+ q(aes) => [
+ q(0636),
+ q(0),
+ ],
+ q(aeu) => [
+ q(0637),
+ q(0),
+ ],
+ q(aew) => [
+ q(0638),
+ q(0),
+ ],
+ q(aey) => [
+ q(0639),
+ q(0),
+ ],
+ q(aez) => [
+ q(0640),
+ q(0),
+ ],
+ q(afa) => [
+ q(0007),
+ q(0),
+ ],
+ q(afb) => [
+ q(0641),
+ q(0),
+ ],
+ q(afd) => [
+ q(0642),
+ q(0),
+ ],
+ q(afe) => [
+ q(0643),
+ q(0),
+ ],
+ q(afg) => [
+ q(0644),
+ q(0),
+ ],
+ q(afh) => [
+ q(0008),
+ q(0),
+ ],
+ q(afi) => [
+ q(0645),
+ q(0),
+ ],
+ q(afk) => [
+ q(0646),
+ q(0),
+ ],
+ q(afn) => [
+ q(0647),
+ q(0),
+ ],
+ q(afo) => [
+ q(0648),
+ q(0),
+ ],
+ q(afp) => [
+ q(0649),
+ q(0),
+ ],
+ q(afr) => [
+ q(0009),
+ q(0),
+ ],
+ q(afs) => [
+ q(0650),
+ q(0),
+ ],
+ q(aft) => [
+ q(0651),
+ q(0),
+ ],
+ q(afu) => [
+ q(0652),
+ q(0),
+ ],
+ q(afz) => [
+ q(0653),
+ q(0),
+ ],
+ q(aga) => [
+ q(0654),
+ q(0),
+ ],
+ q(agb) => [
+ q(0655),
+ q(0),
+ ],
+ q(agc) => [
+ q(0656),
+ q(0),
+ ],
+ q(agd) => [
+ q(0657),
+ q(0),
+ ],
+ q(age) => [
+ q(0658),
+ q(0),
+ ],
+ q(agf) => [
+ q(0659),
+ q(0),
+ ],
+ q(agg) => [
+ q(0660),
+ q(0),
+ ],
+ q(agh) => [
+ q(0661),
+ q(0),
+ ],
+ q(agi) => [
+ q(0662),
+ q(0),
+ ],
+ q(agj) => [
+ q(0663),
+ q(0),
+ ],
+ q(agk) => [
+ q(0664),
+ q(0),
+ ],
+ q(agl) => [
+ q(0665),
+ q(0),
+ ],
+ q(agm) => [
+ q(0666),
+ q(0),
+ ],
+ q(agn) => [
+ q(0667),
+ q(0),
+ ],
+ q(ago) => [
+ q(0668),
+ q(0),
+ ],
+ q(agq) => [
+ q(0669),
+ q(0),
+ ],
+ q(agr) => [
+ q(0670),
+ q(0),
+ ],
+ q(ags) => [
+ q(0671),
+ q(0),
+ ],
+ q(agt) => [
+ q(0672),
+ q(0),
+ ],
+ q(agu) => [
+ q(0673),
+ q(0),
+ ],
+ q(agv) => [
+ q(0674),
+ q(0),
+ ],
+ q(agw) => [
+ q(0675),
+ q(0),
+ ],
+ q(agx) => [
+ q(0676),
+ q(0),
+ ],
+ q(agy) => [
+ q(0677),
+ q(0),
+ ],
+ q(agz) => [
+ q(0678),
+ q(0),
+ ],
+ q(aha) => [
+ q(0679),
+ q(0),
+ ],
+ q(ahb) => [
+ q(0680),
+ q(0),
+ ],
+ q(ahg) => [
+ q(0681),
+ q(0),
+ ],
+ q(ahh) => [
+ q(0682),
+ q(0),
+ ],
+ q(ahi) => [
+ q(0683),
+ q(0),
+ ],
+ q(ahk) => [
+ q(0684),
+ q(0),
+ ],
+ q(ahl) => [
+ q(0685),
+ q(0),
+ ],
+ q(ahm) => [
+ q(0686),
+ q(0),
+ ],
+ q(ahn) => [
+ q(0687),
+ q(0),
+ ],
+ q(aho) => [
+ q(0688),
+ q(0),
+ ],
+ q(ahp) => [
+ q(0689),
+ q(0),
+ ],
+ q(ahr) => [
+ q(0690),
+ q(0),
+ ],
+ q(ahs) => [
+ q(0691),
+ q(0),
+ ],
+ q(aht) => [
+ q(0692),
+ q(0),
+ ],
+ q(aia) => [
+ q(0693),
+ q(0),
+ ],
+ q(aib) => [
+ q(0694),
+ q(0),
+ ],
+ q(aic) => [
+ q(0695),
+ q(0),
+ ],
+ q(aid) => [
+ q(0696),
+ q(0),
+ ],
+ q(aie) => [
+ q(0697),
+ q(0),
+ ],
+ q(aif) => [
+ q(0698),
+ q(0),
+ ],
+ q(aig) => [
+ q(0699),
+ q(0),
+ ],
+ q(aih) => [
+ q(0700),
+ q(0),
+ ],
+ q(aii) => [
+ q(0701),
+ q(0),
+ ],
+ q(aij) => [
+ q(0702),
+ q(0),
+ ],
+ q(aik) => [
+ q(0703),
+ q(0),
+ ],
+ q(ail) => [
+ q(0704),
+ q(0),
+ ],
+ q(aim) => [
+ q(0705),
+ q(0),
+ ],
+ q(ain) => [
+ q(0010),
+ q(1),
+ ],
+ q(aio) => [
+ q(0706),
+ q(0),
+ ],
+ q(aip) => [
+ q(0707),
+ q(0),
+ ],
+ q(aiq) => [
+ q(0708),
+ q(0),
+ ],
+ q(air) => [
+ q(0709),
+ q(0),
+ ],
+ q(ais) => [
+ q(0710),
+ q(0),
+ ],
+ q(ait) => [
+ q(0711),
+ q(0),
+ ],
+ q(aiw) => [
+ q(0712),
+ q(0),
+ ],
+ q(aix) => [
+ q(0713),
+ q(0),
+ ],
+ q(aiy) => [
+ q(0714),
+ q(0),
+ ],
+ q(aja) => [
+ q(0715),
+ q(0),
+ ],
+ q(ajg) => [
+ q(0716),
+ q(0),
+ ],
+ q(aji) => [
+ q(0717),
+ q(0),
+ ],
+ q(ajn) => [
+ q(0718),
+ q(0),
+ ],
+ q(ajp) => [
+ q(0719),
+ q(0),
+ ],
+ q(ajt) => [
+ q(0720),
+ q(0),
+ ],
+ q(aju) => [
+ q(0721),
+ q(0),
+ ],
+ q(ajw) => [
+ q(0722),
+ q(0),
+ ],
+ q(ajz) => [
+ q(0723),
+ q(0),
+ ],
+ q(aka) => [
+ q(0011),
+ q(0),
+ ],
+ q(akb) => [
+ q(0724),
+ q(0),
+ ],
+ q(akc) => [
+ q(0725),
+ q(0),
+ ],
+ q(akd) => [
+ q(0726),
+ q(0),
+ ],
+ q(ake) => [
+ q(0727),
+ q(0),
+ ],
+ q(akf) => [
+ q(0728),
+ q(0),
+ ],
+ q(akg) => [
+ q(0729),
+ q(0),
+ ],
+ q(akh) => [
+ q(0730),
+ q(0),
+ ],
+ q(aki) => [
+ q(0731),
+ q(0),
+ ],
+ q(akj) => [
+ q(0732),
+ q(0),
+ ],
+ q(akk) => [
+ q(0012),
+ q(0),
+ ],
+ q(akl) => [
+ q(0733),
+ q(0),
+ ],
+ q(akm) => [
+ q(0734),
+ q(0),
+ ],
+ q(ako) => [
+ q(0735),
+ q(0),
+ ],
+ q(akp) => [
+ q(0736),
+ q(0),
+ ],
+ q(akq) => [
+ q(0737),
+ q(0),
+ ],
+ q(akr) => [
+ q(0738),
+ q(0),
+ ],
+ q(aks) => [
+ q(0739),
+ q(0),
+ ],
+ q(akt) => [
+ q(0740),
+ q(0),
+ ],
+ q(aku) => [
+ q(0741),
+ q(0),
+ ],
+ q(akv) => [
+ q(0742),
+ q(0),
+ ],
+ q(akw) => [
+ q(0743),
+ q(0),
+ ],
+ q(akx) => [
+ q(0744),
+ q(0),
+ ],
+ q(aky) => [
+ q(0745),
+ q(0),
+ ],
+ q(akz) => [
+ q(0746),
+ q(0),
+ ],
+ q(ala) => [
+ q(0747),
+ q(0),
+ ],
+ q(alb) => [
+ q(0013),
+ q(0),
+ ],
+ q(alc) => [
+ q(0748),
+ q(0),
+ ],
+ q(ald) => [
+ q(0749),
+ q(0),
+ ],
+ q(ale) => [
+ q(0014),
+ q(0),
+ ],
+ q(alf) => [
+ q(0750),
+ q(0),
+ ],
+ q(alg) => [
+ q(0015),
+ q(0),
+ ],
+ q(alh) => [
+ q(0751),
+ q(0),
+ ],
+ q(ali) => [
+ q(0752),
+ q(0),
+ ],
+ q(alj) => [
+ q(0753),
+ q(0),
+ ],
+ q(alk) => [
+ q(0754),
+ q(0),
+ ],
+ q(all) => [
+ q(0755),
+ q(0),
+ ],
+ q(alm) => [
+ q(0756),
+ q(0),
+ ],
+ q(aln) => [
+ q(0757),
+ q(0),
+ ],
+ q(alo) => [
+ q(0758),
+ q(0),
+ ],
+ q(alp) => [
+ q(0759),
+ q(0),
+ ],
+ q(alq) => [
+ q(0760),
+ q(0),
+ ],
+ q(alr) => [
+ q(0761),
+ q(0),
+ ],
+ q(als) => [
+ q(0762),
+ q(0),
+ ],
+ q(alt) => [
+ q(0016),
+ q(0),
+ ],
+ q(alu) => [
+ q(0763),
+ q(0),
+ ],
+ q(alv) => [
+ q(0488),
+ q(0),
+ ],
+ q(alw) => [
+ q(0764),
+ q(0),
+ ],
+ q(alx) => [
+ q(0765),
+ q(0),
+ ],
+ q(aly) => [
+ q(0766),
+ q(0),
+ ],
+ q(alz) => [
+ q(0767),
+ q(0),
+ ],
+ q(ama) => [
+ q(0768),
+ q(0),
+ ],
+ q(amb) => [
+ q(0769),
+ q(0),
+ ],
+ q(amc) => [
+ q(0770),
+ q(0),
+ ],
+ q(ame) => [
+ q(0771),
+ q(0),
+ ],
+ q(amf) => [
+ q(0772),
+ q(0),
+ ],
+ q(amg) => [
+ q(0773),
+ q(0),
+ ],
+ q(amh) => [
+ q(0017),
+ q(0),
+ ],
+ q(ami) => [
+ q(0774),
+ q(0),
+ ],
+ q(amj) => [
+ q(0775),
+ q(0),
+ ],
+ q(amk) => [
+ q(0776),
+ q(0),
+ ],
+ q(aml) => [
+ q(0777),
+ q(0),
+ ],
+ q(amm) => [
+ q(0778),
+ q(0),
+ ],
+ q(amn) => [
+ q(0779),
+ q(0),
+ ],
+ q(amo) => [
+ q(0780),
+ q(0),
+ ],
+ q(amp) => [
+ q(0781),
+ q(0),
+ ],
+ q(amq) => [
+ q(0782),
+ q(0),
+ ],
+ q(amr) => [
+ q(0783),
+ q(0),
+ ],
+ q(ams) => [
+ q(0784),
+ q(0),
+ ],
+ q(amt) => [
+ q(0785),
+ q(0),
+ ],
+ q(amu) => [
+ q(0786),
+ q(0),
+ ],
+ q(amv) => [
+ q(0787),
+ q(0),
+ ],
+ q(amw) => [
+ q(0788),
+ q(0),
+ ],
+ q(amx) => [
+ q(0789),
+ q(0),
+ ],
+ q(amy) => [
+ q(0790),
+ q(0),
+ ],
+ q(amz) => [
+ q(0791),
+ q(0),
+ ],
+ q(ana) => [
+ q(0792),
+ q(0),
+ ],
+ q(anb) => [
+ q(0793),
+ q(0),
+ ],
+ q(anc) => [
+ q(0794),
+ q(0),
+ ],
+ q(and) => [
+ q(0795),
+ q(0),
+ ],
+ q(ane) => [
+ q(0796),
+ q(0),
+ ],
+ q(anf) => [
+ q(0797),
+ q(0),
+ ],
+ q(ang) => [
+ q(0018),
+ q(1),
+ ],
+ q(anh) => [
+ q(0798),
+ q(0),
+ ],
+ q(ani) => [
+ q(0799),
+ q(0),
+ ],
+ q(anj) => [
+ q(0800),
+ q(0),
+ ],
+ q(ank) => [
+ q(0801),
+ q(0),
+ ],
+ q(anl) => [
+ q(0802),
+ q(0),
+ ],
+ q(anm) => [
+ q(0803),
+ q(0),
+ ],
+ q(ann) => [
+ q(0804),
+ q(0),
+ ],
+ q(ano) => [
+ q(0805),
+ q(0),
+ ],
+ q(anp) => [
+ q(0019),
+ q(0),
+ ],
+ q(anq) => [
+ q(0806),
+ q(0),
+ ],
+ q(anr) => [
+ q(0807),
+ q(0),
+ ],
+ q(ans) => [
+ q(0808),
+ q(0),
+ ],
+ q(ant) => [
+ q(0809),
+ q(0),
+ ],
+ q(anu) => [
+ q(0810),
+ q(0),
+ ],
+ q(anv) => [
+ q(0811),
+ q(0),
+ ],
+ q(anw) => [
+ q(0812),
+ q(0),
+ ],
+ q(anx) => [
+ q(0813),
+ q(0),
+ ],
+ q(any) => [
+ q(0814),
+ q(0),
+ ],
+ q(anz) => [
+ q(0815),
+ q(0),
+ ],
+ q(aoa) => [
+ q(0816),
+ q(0),
+ ],
+ q(aob) => [
+ q(0817),
+ q(0),
+ ],
+ q(aoc) => [
+ q(0818),
+ q(0),
+ ],
+ q(aod) => [
+ q(0819),
+ q(0),
+ ],
+ q(aoe) => [
+ q(0820),
+ q(0),
+ ],
+ q(aof) => [
+ q(0821),
+ q(0),
+ ],
+ q(aog) => [
+ q(0822),
+ q(0),
+ ],
+ q(aoh) => [
+ q(0823),
+ q(0),
+ ],
+ q(aoi) => [
+ q(0824),
+ q(0),
+ ],
+ q(aoj) => [
+ q(0825),
+ q(0),
+ ],
+ q(aok) => [
+ q(0826),
+ q(0),
+ ],
+ q(aol) => [
+ q(0827),
+ q(0),
+ ],
+ q(aom) => [
+ q(0828),
+ q(0),
+ ],
+ q(aon) => [
+ q(0829),
+ q(0),
+ ],
+ q(aor) => [
+ q(0830),
+ q(0),
+ ],
+ q(aos) => [
+ q(0831),
+ q(0),
+ ],
+ q(aot) => [
+ q(0832),
+ q(0),
+ ],
+ q(aou) => [
+ q(0833),
+ q(0),
+ ],
+ q(aox) => [
+ q(0834),
+ q(0),
+ ],
+ q(aoz) => [
+ q(0835),
+ q(0),
+ ],
+ q(apa) => [
+ q(0020),
+ q(0),
+ ],
+ q(apb) => [
+ q(0836),
+ q(0),
+ ],
+ q(apc) => [
+ q(0837),
+ q(0),
+ ],
+ q(apd) => [
+ q(0838),
+ q(0),
+ ],
+ q(ape) => [
+ q(0839),
+ q(0),
+ ],
+ q(apf) => [
+ q(0840),
+ q(0),
+ ],
+ q(apg) => [
+ q(0841),
+ q(0),
+ ],
+ q(aph) => [
+ q(0842),
+ q(0),
+ ],
+ q(api) => [
+ q(0843),
+ q(0),
+ ],
+ q(apj) => [
+ q(0844),
+ q(0),
+ ],
+ q(apk) => [
+ q(0845),
+ q(0),
+ ],
+ q(apl) => [
+ q(0846),
+ q(0),
+ ],
+ q(apm) => [
+ q(0847),
+ q(0),
+ ],
+ q(apn) => [
+ q(0848),
+ q(0),
+ ],
+ q(apo) => [
+ q(0849),
+ q(0),
+ ],
+ q(app) => [
+ q(0850),
+ q(0),
+ ],
+ q(apq) => [
+ q(0851),
+ q(0),
+ ],
+ q(apr) => [
+ q(0852),
+ q(0),
+ ],
+ q(aps) => [
+ q(0853),
+ q(0),
+ ],
+ q(apt) => [
+ q(0854),
+ q(0),
+ ],
+ q(apu) => [
+ q(0855),
+ q(0),
+ ],
+ q(apv) => [
+ q(0856),
+ q(0),
+ ],
+ q(apw) => [
+ q(0857),
+ q(0),
+ ],
+ q(apx) => [
+ q(0858),
+ q(0),
+ ],
+ q(apy) => [
+ q(0859),
+ q(0),
+ ],
+ q(apz) => [
+ q(0860),
+ q(0),
+ ],
+ q(aqa) => [
+ q(0489),
+ q(0),
+ ],
+ q(aqc) => [
+ q(0861),
+ q(0),
+ ],
+ q(aqd) => [
+ q(0862),
+ q(0),
+ ],
+ q(aqg) => [
+ q(0863),
+ q(0),
+ ],
+ q(aql) => [
+ q(0490),
+ q(0),
+ ],
+ q(aqm) => [
+ q(0864),
+ q(0),
+ ],
+ q(aqn) => [
+ q(0865),
+ q(0),
+ ],
+ q(aqp) => [
+ q(0866),
+ q(0),
+ ],
+ q(aqr) => [
+ q(0867),
+ q(0),
+ ],
+ q(aqz) => [
+ q(0868),
+ q(0),
+ ],
+ q(ara) => [
+ q(0021),
+ q(0),
+ ],
+ q(arb) => [
+ q(0869),
+ q(0),
+ ],
+ q(arc) => [
+ q(0022),
+ q(0),
+ ],
+ q(ard) => [
+ q(0870),
+ q(0),
+ ],
+ q(are) => [
+ q(0871),
+ q(0),
+ ],
+ q(arg) => [
+ q(0023),
+ q(0),
+ ],
+ q(arh) => [
+ q(0872),
+ q(0),
+ ],
+ q(ari) => [
+ q(0873),
+ q(0),
+ ],
+ q(arj) => [
+ q(0874),
+ q(0),
+ ],
+ q(ark) => [
+ q(0875),
+ q(0),
+ ],
+ q(arl) => [
+ q(0876),
+ q(0),
+ ],
+ q(arm) => [
+ q(0024),
+ q(0),
+ ],
+ q(arn) => [
+ q(0025),
+ q(0),
+ ],
+ q(aro) => [
+ q(0877),
+ q(0),
+ ],
+ q(arp) => [
+ q(0026),
+ q(0),
+ ],
+ q(arq) => [
+ q(0878),
+ q(0),
+ ],
+ q(arr) => [
+ q(0879),
+ q(0),
+ ],
+ q(ars) => [
+ q(0880),
+ q(0),
+ ],
+ q(art) => [
+ q(0027),
+ q(0),
+ ],
+ q(aru) => [
+ q(0881),
+ q(0),
+ ],
+ q(arv) => [
+ q(0882),
+ q(0),
+ ],
+ q(arw) => [
+ q(0028),
+ q(0),
+ ],
+ q(arx) => [
+ q(0883),
+ q(0),
+ ],
+ q(ary) => [
+ q(0884),
+ q(0),
+ ],
+ q(arz) => [
+ q(0885),
+ q(0),
+ ],
+ q(asa) => [
+ q(0886),
+ q(0),
+ ],
+ q(asb) => [
+ q(0887),
+ q(0),
+ ],
+ q(asc) => [
+ q(0888),
+ q(0),
+ ],
+ q(asd) => [
+ q(0889),
+ q(0),
+ ],
+ q(ase) => [
+ q(0890),
+ q(0),
+ ],
+ q(asf) => [
+ q(0891),
+ q(0),
+ ],
+ q(asg) => [
+ q(0892),
+ q(0),
+ ],
+ q(ash) => [
+ q(0893),
+ q(0),
+ ],
+ q(asi) => [
+ q(0894),
+ q(0),
+ ],
+ q(asj) => [
+ q(0895),
+ q(0),
+ ],
+ q(ask) => [
+ q(0896),
+ q(0),
+ ],
+ q(asl) => [
+ q(0897),
+ q(0),
+ ],
+ q(asm) => [
+ q(0029),
+ q(0),
+ ],
+ q(asn) => [
+ q(0898),
+ q(0),
+ ],
+ q(aso) => [
+ q(0899),
+ q(0),
+ ],
+ q(asp) => [
+ q(0900),
+ q(0),
+ ],
+ q(asq) => [
+ q(0901),
+ q(0),
+ ],
+ q(asr) => [
+ q(0902),
+ q(0),
+ ],
+ q(ass) => [
+ q(0903),
+ q(0),
+ ],
+ q(ast) => [
+ q(0030),
+ q(0),
+ ],
+ q(asu) => [
+ q(0904),
+ q(0),
+ ],
+ q(asv) => [
+ q(0905),
+ q(0),
+ ],
+ q(asw) => [
+ q(0906),
+ q(0),
+ ],
+ q(asx) => [
+ q(0907),
+ q(0),
+ ],
+ q(asy) => [
+ q(0908),
+ q(0),
+ ],
+ q(asz) => [
+ q(0909),
+ q(0),
+ ],
+ q(ata) => [
+ q(0910),
+ q(0),
+ ],
+ q(atb) => [
+ q(0911),
+ q(0),
+ ],
+ q(atc) => [
+ q(0912),
+ q(0),
+ ],
+ q(atd) => [
+ q(0913),
+ q(0),
+ ],
+ q(ate) => [
+ q(0914),
+ q(0),
+ ],
+ q(atg) => [
+ q(0915),
+ q(0),
+ ],
+ q(ath) => [
+ q(0031),
+ q(0),
+ ],
+ q(ati) => [
+ q(0916),
+ q(0),
+ ],
+ q(atj) => [
+ q(0917),
+ q(0),
+ ],
+ q(atk) => [
+ q(0918),
+ q(0),
+ ],
+ q(atl) => [
+ q(0919),
+ q(0),
+ ],
+ q(atm) => [
+ q(0920),
+ q(0),
+ ],
+ q(atn) => [
+ q(0921),
+ q(0),
+ ],
+ q(ato) => [
+ q(0922),
+ q(0),
+ ],
+ q(atp) => [
+ q(0923),
+ q(0),
+ ],
+ q(atq) => [
+ q(0924),
+ q(0),
+ ],
+ q(atr) => [
+ q(0925),
+ q(0),
+ ],
+ q(ats) => [
+ q(0926),
+ q(0),
+ ],
+ q(att) => [
+ q(0927),
+ q(0),
+ ],
+ q(atu) => [
+ q(0928),
+ q(0),
+ ],
+ q(atv) => [
+ q(0929),
+ q(0),
+ ],
+ q(atw) => [
+ q(0930),
+ q(0),
+ ],
+ q(atx) => [
+ q(0931),
+ q(0),
+ ],
+ q(aty) => [
+ q(0932),
+ q(0),
+ ],
+ q(atz) => [
+ q(0933),
+ q(0),
+ ],
+ q(aua) => [
+ q(0934),
+ q(0),
+ ],
+ q(aub) => [
+ q(0935),
+ q(0),
+ ],
+ q(auc) => [
+ q(0936),
+ q(0),
+ ],
+ q(aud) => [
+ q(0937),
+ q(0),
+ ],
+ q(aue) => [
+ q(0938),
+ q(0),
+ ],
+ q(auf) => [
+ q(0491),
+ q(0),
+ ],
+ q(aug) => [
+ q(0939),
+ q(0),
+ ],
+ q(auh) => [
+ q(0940),
+ q(0),
+ ],
+ q(aui) => [
+ q(0941),
+ q(0),
+ ],
+ q(auj) => [
+ q(0942),
+ q(0),
+ ],
+ q(auk) => [
+ q(0943),
+ q(0),
+ ],
+ q(aul) => [
+ q(0944),
+ q(0),
+ ],
+ q(aum) => [
+ q(0945),
+ q(0),
+ ],
+ q(aun) => [
+ q(0946),
+ q(0),
+ ],
+ q(auo) => [
+ q(0947),
+ q(0),
+ ],
+ q(aup) => [
+ q(0948),
+ q(0),
+ ],
+ q(auq) => [
+ q(0949),
+ q(0),
+ ],
+ q(aur) => [
+ q(0950),
+ q(0),
+ ],
+ q(aus) => [
+ q(0032),
+ q(0),
+ ],
+ q(aut) => [
+ q(0951),
+ q(0),
+ ],
+ q(auu) => [
+ q(0952),
+ q(0),
+ ],
+ q(auw) => [
+ q(0953),
+ q(0),
+ ],
+ q(aux) => [
+ q(0954),
+ q(0),
+ ],
+ q(auy) => [
+ q(0955),
+ q(0),
+ ],
+ q(auz) => [
+ q(0956),
+ q(0),
+ ],
+ q(ava) => [
+ q(0033),
+ q(0),
+ ],
+ q(avb) => [
+ q(0957),
+ q(0),
+ ],
+ q(avd) => [
+ q(0958),
+ q(0),
+ ],
+ q(ave) => [
+ q(0034),
+ q(0),
+ ],
+ q(avi) => [
+ q(0959),
+ q(0),
+ ],
+ q(avk) => [
+ q(0960),
+ q(0),
+ ],
+ q(avl) => [
+ q(0961),
+ q(0),
+ ],
+ q(avm) => [
+ q(0962),
+ q(0),
+ ],
+ q(avn) => [
+ q(0963),
+ q(0),
+ ],
+ q(avo) => [
+ q(0964),
+ q(0),
+ ],
+ q(avs) => [
+ q(0965),
+ q(0),
+ ],
+ q(avt) => [
+ q(0966),
+ q(0),
+ ],
+ q(avu) => [
+ q(0967),
+ q(0),
+ ],
+ q(avv) => [
+ q(0968),
+ q(0),
+ ],
+ q(awa) => [
+ q(0035),
+ q(0),
+ ],
+ q(awb) => [
+ q(0969),
+ q(0),
+ ],
+ q(awc) => [
+ q(0970),
+ q(0),
+ ],
+ q(awd) => [
+ q(0492),
+ q(0),
+ ],
+ q(awe) => [
+ q(0971),
+ q(0),
+ ],
+ q(awg) => [
+ q(0972),
+ q(0),
+ ],
+ q(awh) => [
+ q(0973),
+ q(0),
+ ],
+ q(awi) => [
+ q(0974),
+ q(0),
+ ],
+ q(awk) => [
+ q(0975),
+ q(0),
+ ],
+ q(awm) => [
+ q(0976),
+ q(0),
+ ],
+ q(awn) => [
+ q(0977),
+ q(0),
+ ],
+ q(awo) => [
+ q(0978),
+ q(0),
+ ],
+ q(awr) => [
+ q(0979),
+ q(0),
+ ],
+ q(aws) => [
+ q(0980),
+ q(0),
+ ],
+ q(awt) => [
+ q(0981),
+ q(0),
+ ],
+ q(awu) => [
+ q(0982),
+ q(0),
+ ],
+ q(awv) => [
+ q(0983),
+ q(0),
+ ],
+ q(aww) => [
+ q(0984),
+ q(0),
+ ],
+ q(awx) => [
+ q(0985),
+ q(0),
+ ],
+ q(awy) => [
+ q(0986),
+ q(0),
+ ],
+ q(axb) => [
+ q(0987),
+ q(0),
+ ],
+ q(axe) => [
+ q(0988),
+ q(0),
+ ],
+ q(axg) => [
+ q(0989),
+ q(0),
+ ],
+ q(axk) => [
+ q(0990),
+ q(0),
+ ],
+ q(axm) => [
+ q(0991),
+ q(0),
+ ],
+ q(axx) => [
+ q(0992),
+ q(0),
+ ],
+ q(aya) => [
+ q(0993),
+ q(0),
+ ],
+ q(ayb) => [
+ q(0994),
+ q(0),
+ ],
+ q(ayc) => [
+ q(0995),
+ q(0),
+ ],
+ q(ayd) => [
+ q(0996),
+ q(0),
+ ],
+ q(aye) => [
+ q(0997),
+ q(0),
+ ],
+ q(ayg) => [
+ q(0998),
+ q(0),
+ ],
+ q(ayh) => [
+ q(0999),
+ q(0),
+ ],
+ q(ayi) => [
+ q(1000),
+ q(0),
+ ],
+ q(ayk) => [
+ q(1001),
+ q(0),
+ ],
+ q(ayl) => [
+ q(1002),
+ q(0),
+ ],
+ q(aym) => [
+ q(0036),
+ q(0),
+ ],
+ q(ayn) => [
+ q(1003),
+ q(0),
+ ],
+ q(ayo) => [
+ q(1004),
+ q(0),
+ ],
+ q(ayp) => [
+ q(1005),
+ q(0),
+ ],
+ q(ayq) => [
+ q(1006),
+ q(0),
+ ],
+ q(ayr) => [
+ q(1007),
+ q(0),
+ ],
+ q(ays) => [
+ q(1008),
+ q(0),
+ ],
+ q(ayt) => [
+ q(1009),
+ q(0),
+ ],
+ q(ayu) => [
+ q(1010),
+ q(0),
+ ],
+ q(ayy) => [
+ q(1011),
+ q(0),
+ ],
+ q(ayz) => [
+ q(1012),
+ q(0),
+ ],
+ q(aza) => [
+ q(1013),
+ q(0),
+ ],
+ q(azb) => [
+ q(1014),
+ q(0),
+ ],
+ q(azc) => [
+ q(0493),
+ q(0),
+ ],
+ q(azd) => [
+ q(1015),
+ q(0),
+ ],
+ q(aze) => [
+ q(0037),
+ q(0),
+ ],
+ q(azg) => [
+ q(1016),
+ q(0),
+ ],
+ q(azj) => [
+ q(1017),
+ q(0),
+ ],
+ q(azm) => [
+ q(1018),
+ q(0),
+ ],
+ q(azn) => [
+ q(1019),
+ q(0),
+ ],
+ q(azo) => [
+ q(1020),
+ q(0),
+ ],
+ q(azt) => [
+ q(1021),
+ q(0),
+ ],
+ q(azz) => [
+ q(1022),
+ q(0),
+ ],
+ q(baa) => [
+ q(1023),
+ q(0),
+ ],
+ q(bab) => [
+ q(1024),
+ q(0),
+ ],
+ q(bac) => [
+ q(1025),
+ q(0),
+ ],
+ q(bad) => [
+ q(0038),
+ q(0),
+ ],
+ q(bae) => [
+ q(1026),
+ q(0),
+ ],
+ q(baf) => [
+ q(1027),
+ q(0),
+ ],
+ q(bag) => [
+ q(1028),
+ q(0),
+ ],
+ q(bah) => [
+ q(1029),
+ q(0),
+ ],
+ q(bai) => [
+ q(0039),
+ q(0),
+ ],
+ q(baj) => [
+ q(1030),
+ q(0),
+ ],
+ q(bak) => [
+ q(0040),
+ q(0),
+ ],
+ q(bal) => [
+ q(0041),
+ q(0),
+ ],
+ q(bam) => [
+ q(0042),
+ q(0),
+ ],
+ q(ban) => [
+ q(0043),
+ q(0),
+ ],
+ q(bao) => [
+ q(1031),
+ q(0),
+ ],
+ q(bap) => [
+ q(1032),
+ q(0),
+ ],
+ q(baq) => [
+ q(0044),
+ q(0),
+ ],
+ q(bar) => [
+ q(1033),
+ q(0),
+ ],
+ q(bas) => [
+ q(0045),
+ q(1),
+ ],
+ q(bat) => [
+ q(0046),
+ q(0),
+ ],
+ q(bau) => [
+ q(1034),
+ q(0),
+ ],
+ q(bav) => [
+ q(1035),
+ q(0),
+ ],
+ q(baw) => [
+ q(1036),
+ q(0),
+ ],
+ q(bax) => [
+ q(1037),
+ q(0),
+ ],
+ q(bay) => [
+ q(1038),
+ q(0),
+ ],
+ q(bba) => [
+ q(1039),
+ q(0),
+ ],
+ q(bbb) => [
+ q(1040),
+ q(0),
+ ],
+ q(bbc) => [
+ q(1041),
+ q(0),
+ ],
+ q(bbd) => [
+ q(1042),
+ q(0),
+ ],
+ q(bbe) => [
+ q(1043),
+ q(0),
+ ],
+ q(bbf) => [
+ q(1044),
+ q(0),
+ ],
+ q(bbg) => [
+ q(1045),
+ q(0),
+ ],
+ q(bbh) => [
+ q(1046),
+ q(0),
+ ],
+ q(bbi) => [
+ q(1047),
+ q(0),
+ ],
+ q(bbj) => [
+ q(1048),
+ q(0),
+ ],
+ q(bbk) => [
+ q(1049),
+ q(0),
+ ],
+ q(bbl) => [
+ q(1050),
+ q(0),
+ ],
+ q(bbm) => [
+ q(1051),
+ q(0),
+ ],
+ q(bbn) => [
+ q(1052),
+ q(0),
+ ],
+ q(bbo) => [
+ q(1053),
+ q(0),
+ ],
+ q(bbp) => [
+ q(1054),
+ q(0),
+ ],
+ q(bbq) => [
+ q(1055),
+ q(0),
+ ],
+ q(bbr) => [
+ q(1056),
+ q(0),
+ ],
+ q(bbs) => [
+ q(1057),
+ q(0),
+ ],
+ q(bbt) => [
+ q(1058),
+ q(0),
+ ],
+ q(bbu) => [
+ q(1059),
+ q(0),
+ ],
+ q(bbv) => [
+ q(1060),
+ q(0),
+ ],
+ q(bbw) => [
+ q(1061),
+ q(0),
+ ],
+ q(bbx) => [
+ q(1062),
+ q(0),
+ ],
+ q(bby) => [
+ q(1063),
+ q(0),
+ ],
+ q(bbz) => [
+ q(1064),
+ q(0),
+ ],
+ q(bca) => [
+ q(1065),
+ q(0),
+ ],
+ q(bcb) => [
+ q(1066),
+ q(0),
+ ],
+ q(bcc) => [
+ q(1067),
+ q(0),
+ ],
+ q(bcd) => [
+ q(1068),
+ q(0),
+ ],
+ q(bce) => [
+ q(1069),
+ q(0),
+ ],
+ q(bcf) => [
+ q(1070),
+ q(0),
+ ],
+ q(bcg) => [
+ q(1071),
+ q(0),
+ ],
+ q(bch) => [
+ q(1072),
+ q(0),
+ ],
+ q(bci) => [
+ q(1073),
+ q(0),
+ ],
+ q(bcj) => [
+ q(1074),
+ q(0),
+ ],
+ q(bck) => [
+ q(1075),
+ q(0),
+ ],
+ q(bcl) => [
+ q(1076),
+ q(0),
+ ],
+ q(bcm) => [
+ q(1077),
+ q(0),
+ ],
+ q(bcn) => [
+ q(1078),
+ q(0),
+ ],
+ q(bco) => [
+ q(1079),
+ q(0),
+ ],
+ q(bcp) => [
+ q(1080),
+ q(0),
+ ],
+ q(bcq) => [
+ q(1081),
+ q(0),
+ ],
+ q(bcr) => [
+ q(1082),
+ q(0),
+ ],
+ q(bcs) => [
+ q(1083),
+ q(0),
+ ],
+ q(bct) => [
+ q(1084),
+ q(0),
+ ],
+ q(bcu) => [
+ q(1085),
+ q(0),
+ ],
+ q(bcv) => [
+ q(1086),
+ q(0),
+ ],
+ q(bcw) => [
+ q(1087),
+ q(0),
+ ],
+ q(bcy) => [
+ q(1088),
+ q(0),
+ ],
+ q(bcz) => [
+ q(1089),
+ q(0),
+ ],
+ q(bda) => [
+ q(1090),
+ q(0),
+ ],
+ q(bdb) => [
+ q(1091),
+ q(0),
+ ],
+ q(bdc) => [
+ q(1092),
+ q(0),
+ ],
+ q(bdd) => [
+ q(1093),
+ q(0),
+ ],
+ q(bde) => [
+ q(1094),
+ q(0),
+ ],
+ q(bdf) => [
+ q(1095),
+ q(0),
+ ],
+ q(bdg) => [
+ q(1096),
+ q(0),
+ ],
+ q(bdh) => [
+ q(1097),
+ q(0),
+ ],
+ q(bdi) => [
+ q(1098),
+ q(0),
+ ],
+ q(bdj) => [
+ q(1099),
+ q(0),
+ ],
+ q(bdk) => [
+ q(1100),
+ q(0),
+ ],
+ q(bdl) => [
+ q(1101),
+ q(0),
+ ],
+ q(bdm) => [
+ q(1102),
+ q(0),
+ ],
+ q(bdn) => [
+ q(1103),
+ q(0),
+ ],
+ q(bdo) => [
+ q(1104),
+ q(0),
+ ],
+ q(bdp) => [
+ q(1105),
+ q(0),
+ ],
+ q(bdq) => [
+ q(1106),
+ q(0),
+ ],
+ q(bdr) => [
+ q(1107),
+ q(0),
+ ],
+ q(bds) => [
+ q(1108),
+ q(0),
+ ],
+ q(bdt) => [
+ q(1109),
+ q(0),
+ ],
+ q(bdu) => [
+ q(1110),
+ q(0),
+ ],
+ q(bdv) => [
+ q(1111),
+ q(0),
+ ],
+ q(bdw) => [
+ q(1112),
+ q(0),
+ ],
+ q(bdx) => [
+ q(1113),
+ q(0),
+ ],
+ q(bdy) => [
+ q(1114),
+ q(0),
+ ],
+ q(bdz) => [
+ q(1115),
+ q(0),
+ ],
+ q(bea) => [
+ q(1116),
+ q(0),
+ ],
+ q(beb) => [
+ q(1117),
+ q(0),
+ ],
+ q(bec) => [
+ q(1118),
+ q(0),
+ ],
+ q(bed) => [
+ q(1119),
+ q(0),
+ ],
+ q(bee) => [
+ q(1120),
+ q(0),
+ ],
+ q(bef) => [
+ q(1121),
+ q(0),
+ ],
+ q(beg) => [
+ q(1122),
+ q(0),
+ ],
+ q(beh) => [
+ q(1123),
+ q(0),
+ ],
+ q(bei) => [
+ q(1124),
+ q(0),
+ ],
+ q(bej) => [
+ q(0047),
+ q(0),
+ ],
+ q(bek) => [
+ q(1125),
+ q(0),
+ ],
+ q(bel) => [
+ q(0048),
+ q(0),
+ ],
+ q(bem) => [
+ q(0049),
+ q(1),
+ ],
+ q(ben) => [
+ q(0050),
+ q(0),
+ ],
+ q(beo) => [
+ q(1126),
+ q(0),
+ ],
+ q(bep) => [
+ q(1127),
+ q(0),
+ ],
+ q(beq) => [
+ q(1128),
+ q(0),
+ ],
+ q(ber) => [
+ q(0051),
+ q(0),
+ ],
+ q(bes) => [
+ q(1129),
+ q(0),
+ ],
+ q(bet) => [
+ q(1130),
+ q(0),
+ ],
+ q(beu) => [
+ q(1131),
+ q(0),
+ ],
+ q(bev) => [
+ q(1132),
+ q(0),
+ ],
+ q(bew) => [
+ q(1133),
+ q(0),
+ ],
+ q(bex) => [
+ q(1134),
+ q(0),
+ ],
+ q(bey) => [
+ q(1135),
+ q(0),
+ ],
+ q(bez) => [
+ q(1136),
+ q(0),
+ ],
+ q(bfa) => [
+ q(1137),
+ q(0),
+ ],
+ q(bfb) => [
+ q(1138),
+ q(0),
+ ],
+ q(bfc) => [
+ q(1139),
+ q(0),
+ ],
+ q(bfd) => [
+ q(1140),
+ q(0),
+ ],
+ q(bfe) => [
+ q(1141),
+ q(0),
+ ],
+ q(bff) => [
+ q(1142),
+ q(0),
+ ],
+ q(bfg) => [
+ q(1143),
+ q(0),
+ ],
+ q(bfh) => [
+ q(1144),
+ q(0),
+ ],
+ q(bfi) => [
+ q(1145),
+ q(0),
+ ],
+ q(bfj) => [
+ q(1146),
+ q(0),
+ ],
+ q(bfk) => [
+ q(1147),
+ q(0),
+ ],
+ q(bfl) => [
+ q(1148),
+ q(0),
+ ],
+ q(bfm) => [
+ q(1149),
+ q(0),
+ ],
+ q(bfn) => [
+ q(1150),
+ q(0),
+ ],
+ q(bfo) => [
+ q(1151),
+ q(0),
+ ],
+ q(bfp) => [
+ q(1152),
+ q(0),
+ ],
+ q(bfq) => [
+ q(1153),
+ q(0),
+ ],
+ q(bfr) => [
+ q(1154),
+ q(0),
+ ],
+ q(bfs) => [
+ q(1155),
+ q(0),
+ ],
+ q(bft) => [
+ q(1156),
+ q(0),
+ ],
+ q(bfu) => [
+ q(1157),
+ q(0),
+ ],
+ q(bfw) => [
+ q(1158),
+ q(0),
+ ],
+ q(bfx) => [
+ q(1159),
+ q(0),
+ ],
+ q(bfy) => [
+ q(1160),
+ q(0),
+ ],
+ q(bfz) => [
+ q(1161),
+ q(0),
+ ],
+ q(bga) => [
+ q(1162),
+ q(0),
+ ],
+ q(bgb) => [
+ q(1163),
+ q(0),
+ ],
+ q(bgc) => [
+ q(1164),
+ q(0),
+ ],
+ q(bgd) => [
+ q(1165),
+ q(0),
+ ],
+ q(bge) => [
+ q(1166),
+ q(0),
+ ],
+ q(bgf) => [
+ q(1167),
+ q(0),
+ ],
+ q(bgg) => [
+ q(1168),
+ q(0),
+ ],
+ q(bgi) => [
+ q(1169),
+ q(0),
+ ],
+ q(bgj) => [
+ q(1170),
+ q(0),
+ ],
+ q(bgk) => [
+ q(1171),
+ q(0),
+ ],
+ q(bgl) => [
+ q(1172),
+ q(0),
+ ],
+ q(bgm) => [
+ q(1173),
+ q(0),
+ ],
+ q(bgn) => [
+ q(1174),
+ q(0),
+ ],
+ q(bgo) => [
+ q(1175),
+ q(0),
+ ],
+ q(bgp) => [
+ q(1176),
+ q(0),
+ ],
+ q(bgq) => [
+ q(1177),
+ q(0),
+ ],
+ q(bgr) => [
+ q(1178),
+ q(0),
+ ],
+ q(bgs) => [
+ q(1179),
+ q(0),
+ ],
+ q(bgt) => [
+ q(1180),
+ q(0),
+ ],
+ q(bgu) => [
+ q(1181),
+ q(0),
+ ],
+ q(bgv) => [
+ q(1182),
+ q(0),
+ ],
+ q(bgw) => [
+ q(1183),
+ q(0),
+ ],
+ q(bgx) => [
+ q(1184),
+ q(0),
+ ],
+ q(bgy) => [
+ q(1185),
+ q(0),
+ ],
+ q(bgz) => [
+ q(1186),
+ q(0),
+ ],
+ q(bha) => [
+ q(1187),
+ q(0),
+ ],
+ q(bhb) => [
+ q(1188),
+ q(0),
+ ],
+ q(bhc) => [
+ q(1189),
+ q(0),
+ ],
+ q(bhd) => [
+ q(1190),
+ q(0),
+ ],
+ q(bhe) => [
+ q(1191),
+ q(0),
+ ],
+ q(bhf) => [
+ q(1192),
+ q(0),
+ ],
+ q(bhg) => [
+ q(1193),
+ q(0),
+ ],
+ q(bhh) => [
+ q(1194),
+ q(0),
+ ],
+ q(bhi) => [
+ q(1195),
+ q(0),
+ ],
+ q(bhj) => [
+ q(1196),
+ q(0),
+ ],
+ q(bhl) => [
+ q(1197),
+ q(0),
+ ],
+ q(bhm) => [
+ q(1198),
+ q(0),
+ ],
+ q(bhn) => [
+ q(1199),
+ q(0),
+ ],
+ q(bho) => [
+ q(0052),
+ q(0),
+ ],
+ q(bhp) => [
+ q(1200),
+ q(0),
+ ],
+ q(bhq) => [
+ q(1201),
+ q(0),
+ ],
+ q(bhr) => [
+ q(1202),
+ q(0),
+ ],
+ q(bhs) => [
+ q(1203),
+ q(0),
+ ],
+ q(bht) => [
+ q(1204),
+ q(0),
+ ],
+ q(bhu) => [
+ q(1205),
+ q(0),
+ ],
+ q(bhv) => [
+ q(1206),
+ q(0),
+ ],
+ q(bhw) => [
+ q(1207),
+ q(0),
+ ],
+ q(bhx) => [
+ q(1208),
+ q(0),
+ ],
+ q(bhy) => [
+ q(1209),
+ q(0),
+ ],
+ q(bhz) => [
+ q(1210),
+ q(0),
+ ],
+ q(bia) => [
+ q(1211),
+ q(0),
+ ],
+ q(bib) => [
+ q(1212),
+ q(0),
+ ],
+ q(bic) => [
+ q(1213),
+ q(0),
+ ],
+ q(bid) => [
+ q(1214),
+ q(0),
+ ],
+ q(bie) => [
+ q(1215),
+ q(0),
+ ],
+ q(bif) => [
+ q(1216),
+ q(0),
+ ],
+ q(big) => [
+ q(1217),
+ q(0),
+ ],
+ q(bih) => [
+ q(0053),
+ q(0),
+ ],
+ q(bij) => [
+ q(1218),
+ q(0),
+ ],
+ q(bik) => [
+ q(0054),
+ q(0),
+ ],
+ q(bil) => [
+ q(1219),
+ q(0),
+ ],
+ q(bim) => [
+ q(1220),
+ q(0),
+ ],
+ q(bin) => [
+ q(0055),
+ q(0),
+ ],
+ q(bio) => [
+ q(1221),
+ q(0),
+ ],
+ q(bip) => [
+ q(1222),
+ q(0),
+ ],
+ q(biq) => [
+ q(1223),
+ q(0),
+ ],
+ q(bir) => [
+ q(1224),
+ q(0),
+ ],
+ q(bis) => [
+ q(0056),
+ q(0),
+ ],
+ q(bit) => [
+ q(1225),
+ q(0),
+ ],
+ q(biu) => [
+ q(1226),
+ q(0),
+ ],
+ q(biv) => [
+ q(1227),
+ q(0),
+ ],
+ q(biw) => [
+ q(1228),
+ q(0),
+ ],
+ q(bix) => [
+ q(1229),
+ q(0),
+ ],
+ q(biy) => [
+ q(1230),
+ q(0),
+ ],
+ q(biz) => [
+ q(1231),
+ q(0),
+ ],
+ q(bja) => [
+ q(1232),
+ q(0),
+ ],
+ q(bjb) => [
+ q(1233),
+ q(0),
+ ],
+ q(bjc) => [
+ q(1234),
+ q(0),
+ ],
+ q(bje) => [
+ q(1235),
+ q(0),
+ ],
+ q(bjf) => [
+ q(1236),
+ q(0),
+ ],
+ q(bjg) => [
+ q(1237),
+ q(0),
+ ],
+ q(bjh) => [
+ q(1238),
+ q(0),
+ ],
+ q(bji) => [
+ q(1239),
+ q(0),
+ ],
+ q(bjj) => [
+ q(1240),
+ q(0),
+ ],
+ q(bjk) => [
+ q(1241),
+ q(0),
+ ],
+ q(bjl) => [
+ q(1242),
+ q(0),
+ ],
+ q(bjm) => [
+ q(1243),
+ q(0),
+ ],
+ q(bjn) => [
+ q(1244),
+ q(0),
+ ],
+ q(bjo) => [
+ q(1245),
+ q(0),
+ ],
+ q(bjr) => [
+ q(1246),
+ q(0),
+ ],
+ q(bjs) => [
+ q(1247),
+ q(0),
+ ],
+ q(bjt) => [
+ q(1248),
+ q(0),
+ ],
+ q(bju) => [
+ q(1249),
+ q(0),
+ ],
+ q(bjv) => [
+ q(1250),
+ q(0),
+ ],
+ q(bjw) => [
+ q(1251),
+ q(0),
+ ],
+ q(bjx) => [
+ q(1252),
+ q(0),
+ ],
+ q(bjy) => [
+ q(1253),
+ q(0),
+ ],
+ q(bjz) => [
+ q(1254),
+ q(0),
+ ],
+ q(bka) => [
+ q(1255),
+ q(0),
+ ],
+ q(bkc) => [
+ q(1256),
+ q(0),
+ ],
+ q(bkd) => [
+ q(1257),
+ q(0),
+ ],
+ q(bkf) => [
+ q(1258),
+ q(0),
+ ],
+ q(bkg) => [
+ q(1259),
+ q(0),
+ ],
+ q(bkh) => [
+ q(1260),
+ q(0),
+ ],
+ q(bki) => [
+ q(1261),
+ q(0),
+ ],
+ q(bkj) => [
+ q(1262),
+ q(0),
+ ],
+ q(bkk) => [
+ q(1263),
+ q(0),
+ ],
+ q(bkl) => [
+ q(1264),
+ q(0),
+ ],
+ q(bkm) => [
+ q(1265),
+ q(0),
+ ],
+ q(bkn) => [
+ q(1266),
+ q(0),
+ ],
+ q(bko) => [
+ q(1267),
+ q(0),
+ ],
+ q(bkp) => [
+ q(1268),
+ q(0),
+ ],
+ q(bkq) => [
+ q(1269),
+ q(0),
+ ],
+ q(bkr) => [
+ q(1270),
+ q(0),
+ ],
+ q(bks) => [
+ q(1271),
+ q(0),
+ ],
+ q(bkt) => [
+ q(1272),
+ q(0),
+ ],
+ q(bku) => [
+ q(1273),
+ q(0),
+ ],
+ q(bkv) => [
+ q(1274),
+ q(0),
+ ],
+ q(bkw) => [
+ q(1275),
+ q(0),
+ ],
+ q(bkx) => [
+ q(1276),
+ q(0),
+ ],
+ q(bky) => [
+ q(1277),
+ q(0),
+ ],
+ q(bkz) => [
+ q(1278),
+ q(0),
+ ],
+ q(bla) => [
+ q(0057),
+ q(0),
+ ],
+ q(blb) => [
+ q(1279),
+ q(0),
+ ],
+ q(blc) => [
+ q(1280),
+ q(0),
+ ],
+ q(bld) => [
+ q(1281),
+ q(0),
+ ],
+ q(ble) => [
+ q(1282),
+ q(0),
+ ],
+ q(blf) => [
+ q(1283),
+ q(0),
+ ],
+ q(blg) => [
+ q(1284),
+ q(0),
+ ],
+ q(blh) => [
+ q(1285),
+ q(0),
+ ],
+ q(bli) => [
+ q(1286),
+ q(0),
+ ],
+ q(blj) => [
+ q(1287),
+ q(0),
+ ],
+ q(blk) => [
+ q(1288),
+ q(0),
+ ],
+ q(bll) => [
+ q(1289),
+ q(0),
+ ],
+ q(blm) => [
+ q(1290),
+ q(0),
+ ],
+ q(bln) => [
+ q(1291),
+ q(0),
+ ],
+ q(blo) => [
+ q(1292),
+ q(0),
+ ],
+ q(blp) => [
+ q(1293),
+ q(0),
+ ],
+ q(blq) => [
+ q(1294),
+ q(0),
+ ],
+ q(blr) => [
+ q(1295),
+ q(0),
+ ],
+ q(bls) => [
+ q(1296),
+ q(0),
+ ],
+ q(blt) => [
+ q(1297),
+ q(0),
+ ],
+ q(blv) => [
+ q(1298),
+ q(0),
+ ],
+ q(blw) => [
+ q(1299),
+ q(0),
+ ],
+ q(blx) => [
+ q(1300),
+ q(0),
+ ],
+ q(bly) => [
+ q(1301),
+ q(0),
+ ],
+ q(blz) => [
+ q(1302),
+ q(0),
+ ],
+ q(bma) => [
+ q(1303),
+ q(0),
+ ],
+ q(bmb) => [
+ q(1304),
+ q(0),
+ ],
+ q(bmc) => [
+ q(1305),
+ q(0),
+ ],
+ q(bmd) => [
+ q(1306),
+ q(0),
+ ],
+ q(bme) => [
+ q(1307),
+ q(0),
+ ],
+ q(bmf) => [
+ q(1308),
+ q(0),
+ ],
+ q(bmg) => [
+ q(1309),
+ q(0),
+ ],
+ q(bmh) => [
+ q(1310),
+ q(0),
+ ],
+ q(bmi) => [
+ q(1311),
+ q(0),
+ ],
+ q(bmj) => [
+ q(1312),
+ q(0),
+ ],
+ q(bmk) => [
+ q(1313),
+ q(0),
+ ],
+ q(bml) => [
+ q(1314),
+ q(0),
+ ],
+ q(bmm) => [
+ q(1315),
+ q(0),
+ ],
+ q(bmn) => [
+ q(1316),
+ q(0),
+ ],
+ q(bmo) => [
+ q(1317),
+ q(0),
+ ],
+ q(bmp) => [
+ q(1318),
+ q(0),
+ ],
+ q(bmq) => [
+ q(1319),
+ q(0),
+ ],
+ q(bmr) => [
+ q(1320),
+ q(0),
+ ],
+ q(bms) => [
+ q(1321),
+ q(0),
+ ],
+ q(bmt) => [
+ q(1322),
+ q(0),
+ ],
+ q(bmu) => [
+ q(1323),
+ q(0),
+ ],
+ q(bmv) => [
+ q(1324),
+ q(0),
+ ],
+ q(bmw) => [
+ q(1325),
+ q(0),
+ ],
+ q(bmx) => [
+ q(1326),
+ q(0),
+ ],
+ q(bmy) => [
+ q(1327),
+ q(0),
+ ],
+ q(bmz) => [
+ q(1328),
+ q(0),
+ ],
+ q(bna) => [
+ q(1329),
+ q(0),
+ ],
+ q(bnb) => [
+ q(1330),
+ q(0),
+ ],
+ q(bnc) => [
+ q(1331),
+ q(0),
+ ],
+ q(bnd) => [
+ q(1332),
+ q(0),
+ ],
+ q(bne) => [
+ q(1333),
+ q(0),
+ ],
+ q(bnf) => [
+ q(1334),
+ q(0),
+ ],
+ q(bng) => [
+ q(1335),
+ q(0),
+ ],
+ q(bni) => [
+ q(1336),
+ q(0),
+ ],
+ q(bnj) => [
+ q(1337),
+ q(0),
+ ],
+ q(bnk) => [
+ q(1338),
+ q(0),
+ ],
+ q(bnl) => [
+ q(1339),
+ q(0),
+ ],
+ q(bnm) => [
+ q(1340),
+ q(0),
+ ],
+ q(bnn) => [
+ q(1341),
+ q(0),
+ ],
+ q(bno) => [
+ q(1342),
+ q(0),
+ ],
+ q(bnp) => [
+ q(1343),
+ q(0),
+ ],
+ q(bnq) => [
+ q(1344),
+ q(0),
+ ],
+ q(bnr) => [
+ q(1345),
+ q(0),
+ ],
+ q(bns) => [
+ q(1346),
+ q(0),
+ ],
+ q(bnt) => [
+ q(0058),
+ q(1),
+ ],
+ q(bnu) => [
+ q(1347),
+ q(0),
+ ],
+ q(bnv) => [
+ q(1348),
+ q(0),
+ ],
+ q(bnw) => [
+ q(1349),
+ q(0),
+ ],
+ q(bnx) => [
+ q(1350),
+ q(0),
+ ],
+ q(bny) => [
+ q(1351),
+ q(0),
+ ],
+ q(bnz) => [
+ q(1352),
+ q(0),
+ ],
+ q(boa) => [
+ q(1353),
+ q(0),
+ ],
+ q(bob) => [
+ q(1354),
+ q(0),
+ ],
+ q(boe) => [
+ q(1355),
+ q(0),
+ ],
+ q(bof) => [
+ q(1356),
+ q(0),
+ ],
+ q(bog) => [
+ q(1357),
+ q(0),
+ ],
+ q(boh) => [
+ q(1358),
+ q(0),
+ ],
+ q(boi) => [
+ q(1359),
+ q(0),
+ ],
+ q(boj) => [
+ q(1360),
+ q(0),
+ ],
+ q(bok) => [
+ q(1361),
+ q(0),
+ ],
+ q(bol) => [
+ q(1362),
+ q(0),
+ ],
+ q(bom) => [
+ q(1363),
+ q(0),
+ ],
+ q(bon) => [
+ q(1364),
+ q(0),
+ ],
+ q(boo) => [
+ q(1365),
+ q(0),
+ ],
+ q(bop) => [
+ q(1366),
+ q(0),
+ ],
+ q(boq) => [
+ q(1367),
+ q(0),
+ ],
+ q(bor) => [
+ q(1368),
+ q(0),
+ ],
+ q(bos) => [
+ q(0059),
+ q(0),
+ ],
+ q(bot) => [
+ q(1369),
+ q(0),
+ ],
+ q(bou) => [
+ q(1370),
+ q(0),
+ ],
+ q(bov) => [
+ q(1371),
+ q(0),
+ ],
+ q(bow) => [
+ q(1372),
+ q(0),
+ ],
+ q(box) => [
+ q(1373),
+ q(0),
+ ],
+ q(boy) => [
+ q(1374),
+ q(0),
+ ],
+ q(boz) => [
+ q(1375),
+ q(0),
+ ],
+ q(bpa) => [
+ q(1376),
+ q(0),
+ ],
+ q(bpb) => [
+ q(1377),
+ q(0),
+ ],
+ q(bpd) => [
+ q(1378),
+ q(0),
+ ],
+ q(bpg) => [
+ q(1379),
+ q(0),
+ ],
+ q(bph) => [
+ q(1380),
+ q(0),
+ ],
+ q(bpi) => [
+ q(1381),
+ q(0),
+ ],
+ q(bpj) => [
+ q(1382),
+ q(0),
+ ],
+ q(bpk) => [
+ q(1383),
+ q(0),
+ ],
+ q(bpl) => [
+ q(1384),
+ q(0),
+ ],
+ q(bpm) => [
+ q(1385),
+ q(0),
+ ],
+ q(bpn) => [
+ q(1386),
+ q(0),
+ ],
+ q(bpo) => [
+ q(1387),
+ q(0),
+ ],
+ q(bpp) => [
+ q(1388),
+ q(0),
+ ],
+ q(bpq) => [
+ q(1389),
+ q(0),
+ ],
+ q(bpr) => [
+ q(1390),
+ q(0),
+ ],
+ q(bps) => [
+ q(1391),
+ q(0),
+ ],
+ q(bpt) => [
+ q(1392),
+ q(0),
+ ],
+ q(bpu) => [
+ q(1393),
+ q(0),
+ ],
+ q(bpv) => [
+ q(1394),
+ q(0),
+ ],
+ q(bpw) => [
+ q(1395),
+ q(0),
+ ],
+ q(bpx) => [
+ q(1396),
+ q(0),
+ ],
+ q(bpy) => [
+ q(1397),
+ q(0),
+ ],
+ q(bpz) => [
+ q(1398),
+ q(0),
+ ],
+ q(bqa) => [
+ q(1399),
+ q(0),
+ ],
+ q(bqb) => [
+ q(1400),
+ q(0),
+ ],
+ q(bqc) => [
+ q(1401),
+ q(0),
+ ],
+ q(bqd) => [
+ q(1402),
+ q(0),
+ ],
+ q(bqf) => [
+ q(1403),
+ q(0),
+ ],
+ q(bqg) => [
+ q(1404),
+ q(0),
+ ],
+ q(bqh) => [
+ q(1405),
+ q(0),
+ ],
+ q(bqi) => [
+ q(1406),
+ q(0),
+ ],
+ q(bqj) => [
+ q(1407),
+ q(0),
+ ],
+ q(bqk) => [
+ q(1408),
+ q(0),
+ ],
+ q(bql) => [
+ q(1409),
+ q(0),
+ ],
+ q(bqm) => [
+ q(1410),
+ q(0),
+ ],
+ q(bqn) => [
+ q(1411),
+ q(0),
+ ],
+ q(bqo) => [
+ q(1412),
+ q(0),
+ ],
+ q(bqp) => [
+ q(1413),
+ q(0),
+ ],
+ q(bqq) => [
+ q(1414),
+ q(0),
+ ],
+ q(bqr) => [
+ q(1415),
+ q(0),
+ ],
+ q(bqs) => [
+ q(1416),
+ q(0),
+ ],
+ q(bqt) => [
+ q(1417),
+ q(0),
+ ],
+ q(bqu) => [
+ q(1418),
+ q(0),
+ ],
+ q(bqv) => [
+ q(1419),
+ q(0),
+ ],
+ q(bqw) => [
+ q(1420),
+ q(0),
+ ],
+ q(bqx) => [
+ q(1421),
+ q(0),
+ ],
+ q(bqy) => [
+ q(1422),
+ q(0),
+ ],
+ q(bqz) => [
+ q(1423),
+ q(0),
+ ],
+ q(bra) => [
+ q(0060),
+ q(0),
+ ],
+ q(brb) => [
+ q(1424),
+ q(0),
+ ],
+ q(brc) => [
+ q(1425),
+ q(0),
+ ],
+ q(brd) => [
+ q(1426),
+ q(0),
+ ],
+ q(bre) => [
+ q(0061),
+ q(0),
+ ],
+ q(brf) => [
+ q(1427),
+ q(0),
+ ],
+ q(brg) => [
+ q(1428),
+ q(0),
+ ],
+ q(brh) => [
+ q(1429),
+ q(0),
+ ],
+ q(bri) => [
+ q(1430),
+ q(0),
+ ],
+ q(brj) => [
+ q(1431),
+ q(0),
+ ],
+ q(brk) => [
+ q(1432),
+ q(0),
+ ],
+ q(brl) => [
+ q(1433),
+ q(0),
+ ],
+ q(brm) => [
+ q(1434),
+ q(0),
+ ],
+ q(brn) => [
+ q(1435),
+ q(0),
+ ],
+ q(bro) => [
+ q(1436),
+ q(0),
+ ],
+ q(brp) => [
+ q(1437),
+ q(0),
+ ],
+ q(brq) => [
+ q(1438),
+ q(0),
+ ],
+ q(brr) => [
+ q(1439),
+ q(0),
+ ],
+ q(brs) => [
+ q(1440),
+ q(0),
+ ],
+ q(brt) => [
+ q(1441),
+ q(0),
+ ],
+ q(bru) => [
+ q(1442),
+ q(0),
+ ],
+ q(brv) => [
+ q(1443),
+ q(0),
+ ],
+ q(brw) => [
+ q(1444),
+ q(0),
+ ],
+ q(brx) => [
+ q(1445),
+ q(0),
+ ],
+ q(bry) => [
+ q(1446),
+ q(0),
+ ],
+ q(brz) => [
+ q(1447),
+ q(0),
+ ],
+ q(bsa) => [
+ q(1448),
+ q(0),
+ ],
+ q(bsb) => [
+ q(1449),
+ q(0),
+ ],
+ q(bsc) => [
+ q(1450),
+ q(0),
+ ],
+ q(bse) => [
+ q(1451),
+ q(0),
+ ],
+ q(bsf) => [
+ q(1452),
+ q(0),
+ ],
+ q(bsg) => [
+ q(1453),
+ q(0),
+ ],
+ q(bsh) => [
+ q(1454),
+ q(0),
+ ],
+ q(bsi) => [
+ q(1455),
+ q(0),
+ ],
+ q(bsj) => [
+ q(1456),
+ q(0),
+ ],
+ q(bsk) => [
+ q(1457),
+ q(0),
+ ],
+ q(bsl) => [
+ q(1458),
+ q(0),
+ ],
+ q(bsm) => [
+ q(1459),
+ q(0),
+ ],
+ q(bsn) => [
+ q(1460),
+ q(0),
+ ],
+ q(bso) => [
+ q(1461),
+ q(0),
+ ],
+ q(bsp) => [
+ q(1462),
+ q(0),
+ ],
+ q(bsq) => [
+ q(1463),
+ q(0),
+ ],
+ q(bsr) => [
+ q(1464),
+ q(0),
+ ],
+ q(bss) => [
+ q(1465),
+ q(0),
+ ],
+ q(bst) => [
+ q(1466),
+ q(0),
+ ],
+ q(bsu) => [
+ q(1467),
+ q(0),
+ ],
+ q(bsv) => [
+ q(1468),
+ q(0),
+ ],
+ q(bsw) => [
+ q(1469),
+ q(0),
+ ],
+ q(bsx) => [
+ q(1470),
+ q(0),
+ ],
+ q(bsy) => [
+ q(1471),
+ q(0),
+ ],
+ q(bta) => [
+ q(1472),
+ q(0),
+ ],
+ q(btc) => [
+ q(1473),
+ q(0),
+ ],
+ q(btd) => [
+ q(1474),
+ q(0),
+ ],
+ q(bte) => [
+ q(1475),
+ q(0),
+ ],
+ q(btf) => [
+ q(1476),
+ q(0),
+ ],
+ q(btg) => [
+ q(1477),
+ q(0),
+ ],
+ q(bth) => [
+ q(1478),
+ q(0),
+ ],
+ q(bti) => [
+ q(1479),
+ q(0),
+ ],
+ q(btj) => [
+ q(1480),
+ q(0),
+ ],
+ q(btk) => [
+ q(0062),
+ q(0),
+ ],
+ q(btl) => [
+ q(1481),
+ q(0),
+ ],
+ q(btm) => [
+ q(1482),
+ q(0),
+ ],
+ q(btn) => [
+ q(1483),
+ q(0),
+ ],
+ q(bto) => [
+ q(1484),
+ q(0),
+ ],
+ q(btp) => [
+ q(1485),
+ q(0),
+ ],
+ q(btq) => [
+ q(1486),
+ q(0),
+ ],
+ q(btr) => [
+ q(1487),
+ q(0),
+ ],
+ q(bts) => [
+ q(1488),
+ q(0),
+ ],
+ q(btt) => [
+ q(1489),
+ q(0),
+ ],
+ q(btu) => [
+ q(1490),
+ q(0),
+ ],
+ q(btv) => [
+ q(1491),
+ q(0),
+ ],
+ q(btw) => [
+ q(1492),
+ q(0),
+ ],
+ q(btx) => [
+ q(1493),
+ q(0),
+ ],
+ q(bty) => [
+ q(1494),
+ q(0),
+ ],
+ q(btz) => [
+ q(1495),
+ q(0),
+ ],
+ q(bua) => [
+ q(0063),
+ q(0),
+ ],
+ q(bub) => [
+ q(1496),
+ q(0),
+ ],
+ q(buc) => [
+ q(1497),
+ q(0),
+ ],
+ q(bud) => [
+ q(1498),
+ q(0),
+ ],
+ q(bue) => [
+ q(1499),
+ q(0),
+ ],
+ q(buf) => [
+ q(1500),
+ q(0),
+ ],
+ q(bug) => [
+ q(0064),
+ q(0),
+ ],
+ q(buh) => [
+ q(1501),
+ q(0),
+ ],
+ q(bui) => [
+ q(1502),
+ q(0),
+ ],
+ q(buj) => [
+ q(1503),
+ q(0),
+ ],
+ q(buk) => [
+ q(1504),
+ q(0),
+ ],
+ q(bul) => [
+ q(0065),
+ q(0),
+ ],
+ q(bum) => [
+ q(1505),
+ q(0),
+ ],
+ q(bun) => [
+ q(1506),
+ q(0),
+ ],
+ q(buo) => [
+ q(1507),
+ q(0),
+ ],
+ q(bup) => [
+ q(1508),
+ q(0),
+ ],
+ q(buq) => [
+ q(1509),
+ q(0),
+ ],
+ q(bur) => [
+ q(0066),
+ q(0),
+ ],
+ q(bus) => [
+ q(1510),
+ q(0),
+ ],
+ q(but) => [
+ q(1511),
+ q(0),
+ ],
+ q(buu) => [
+ q(1512),
+ q(0),
+ ],
+ q(buv) => [
+ q(1513),
+ q(0),
+ ],
+ q(buw) => [
+ q(1514),
+ q(0),
+ ],
+ q(bux) => [
+ q(1515),
+ q(0),
+ ],
+ q(buy) => [
+ q(1516),
+ q(0),
+ ],
+ q(buz) => [
+ q(1517),
+ q(0),
+ ],
+ q(bva) => [
+ q(1518),
+ q(0),
+ ],
+ q(bvb) => [
+ q(1519),
+ q(0),
+ ],
+ q(bvc) => [
+ q(1520),
+ q(0),
+ ],
+ q(bvd) => [
+ q(1521),
+ q(0),
+ ],
+ q(bve) => [
+ q(1522),
+ q(0),
+ ],
+ q(bvf) => [
+ q(1523),
+ q(0),
+ ],
+ q(bvg) => [
+ q(1524),
+ q(0),
+ ],
+ q(bvh) => [
+ q(1525),
+ q(0),
+ ],
+ q(bvi) => [
+ q(1526),
+ q(0),
+ ],
+ q(bvj) => [
+ q(1527),
+ q(0),
+ ],
+ q(bvk) => [
+ q(1528),
+ q(0),
+ ],
+ q(bvl) => [
+ q(1529),
+ q(0),
+ ],
+ q(bvm) => [
+ q(1530),
+ q(0),
+ ],
+ q(bvn) => [
+ q(1531),
+ q(0),
+ ],
+ q(bvo) => [
+ q(1532),
+ q(0),
+ ],
+ q(bvq) => [
+ q(1533),
+ q(0),
+ ],
+ q(bvr) => [
+ q(1534),
+ q(0),
+ ],
+ q(bvt) => [
+ q(1535),
+ q(0),
+ ],
+ q(bvu) => [
+ q(1536),
+ q(0),
+ ],
+ q(bvv) => [
+ q(1537),
+ q(0),
+ ],
+ q(bvw) => [
+ q(1538),
+ q(0),
+ ],
+ q(bvx) => [
+ q(1539),
+ q(0),
+ ],
+ q(bvy) => [
+ q(1540),
+ q(0),
+ ],
+ q(bvz) => [
+ q(1541),
+ q(0),
+ ],
+ q(bwa) => [
+ q(1542),
+ q(0),
+ ],
+ q(bwb) => [
+ q(1543),
+ q(0),
+ ],
+ q(bwc) => [
+ q(1544),
+ q(0),
+ ],
+ q(bwd) => [
+ q(1545),
+ q(0),
+ ],
+ q(bwe) => [
+ q(1546),
+ q(0),
+ ],
+ q(bwf) => [
+ q(1547),
+ q(0),
+ ],
+ q(bwg) => [
+ q(1548),
+ q(0),
+ ],
+ q(bwh) => [
+ q(1549),
+ q(0),
+ ],
+ q(bwi) => [
+ q(1550),
+ q(0),
+ ],
+ q(bwj) => [
+ q(1551),
+ q(0),
+ ],
+ q(bwk) => [
+ q(1552),
+ q(0),
+ ],
+ q(bwl) => [
+ q(1553),
+ q(0),
+ ],
+ q(bwm) => [
+ q(1554),
+ q(0),
+ ],
+ q(bwn) => [
+ q(1555),
+ q(0),
+ ],
+ q(bwo) => [
+ q(1556),
+ q(0),
+ ],
+ q(bwp) => [
+ q(1557),
+ q(0),
+ ],
+ q(bwq) => [
+ q(1558),
+ q(0),
+ ],
+ q(bwr) => [
+ q(1559),
+ q(0),
+ ],
+ q(bws) => [
+ q(1560),
+ q(0),
+ ],
+ q(bwt) => [
+ q(1561),
+ q(0),
+ ],
+ q(bwu) => [
+ q(1562),
+ q(0),
+ ],
+ q(bww) => [
+ q(1563),
+ q(0),
+ ],
+ q(bwx) => [
+ q(1564),
+ q(0),
+ ],
+ q(bwy) => [
+ q(1565),
+ q(0),
+ ],
+ q(bwz) => [
+ q(1566),
+ q(0),
+ ],
+ q(bxa) => [
+ q(1567),
+ q(0),
+ ],
+ q(bxb) => [
+ q(1568),
+ q(0),
+ ],
+ q(bxc) => [
+ q(1569),
+ q(0),
+ ],
+ q(bxd) => [
+ q(1570),
+ q(0),
+ ],
+ q(bxe) => [
+ q(1571),
+ q(0),
+ ],
+ q(bxf) => [
+ q(1572),
+ q(0),
+ ],
+ q(bxg) => [
+ q(1573),
+ q(0),
+ ],
+ q(bxh) => [
+ q(1574),
+ q(0),
+ ],
+ q(bxi) => [
+ q(1575),
+ q(0),
+ ],
+ q(bxj) => [
+ q(1576),
+ q(0),
+ ],
+ q(bxk) => [
+ q(1577),
+ q(0),
+ ],
+ q(bxl) => [
+ q(1578),
+ q(0),
+ ],
+ q(bxm) => [
+ q(1579),
+ q(0),
+ ],
+ q(bxn) => [
+ q(1580),
+ q(0),
+ ],
+ q(bxo) => [
+ q(1581),
+ q(0),
+ ],
+ q(bxp) => [
+ q(1582),
+ q(0),
+ ],
+ q(bxq) => [
+ q(1583),
+ q(0),
+ ],
+ q(bxr) => [
+ q(1584),
+ q(0),
+ ],
+ q(bxs) => [
+ q(1585),
+ q(0),
+ ],
+ q(bxu) => [
+ q(1586),
+ q(0),
+ ],
+ q(bxv) => [
+ q(1587),
+ q(0),
+ ],
+ q(bxw) => [
+ q(1588),
+ q(0),
+ ],
+ q(bxx) => [
+ q(1589),
+ q(0),
+ ],
+ q(bxz) => [
+ q(1590),
+ q(0),
+ ],
+ q(bya) => [
+ q(1591),
+ q(0),
+ ],
+ q(byb) => [
+ q(1592),
+ q(0),
+ ],
+ q(byc) => [
+ q(1593),
+ q(0),
+ ],
+ q(byd) => [
+ q(1594),
+ q(0),
+ ],
+ q(bye) => [
+ q(1595),
+ q(0),
+ ],
+ q(byf) => [
+ q(1596),
+ q(0),
+ ],
+ q(byg) => [
+ q(1597),
+ q(0),
+ ],
+ q(byh) => [
+ q(1598),
+ q(0),
+ ],
+ q(byi) => [
+ q(1599),
+ q(0),
+ ],
+ q(byj) => [
+ q(1600),
+ q(0),
+ ],
+ q(byk) => [
+ q(1601),
+ q(0),
+ ],
+ q(byl) => [
+ q(1602),
+ q(0),
+ ],
+ q(bym) => [
+ q(1603),
+ q(0),
+ ],
+ q(byn) => [
+ q(0067),
+ q(0),
+ ],
+ q(byo) => [
+ q(1604),
+ q(0),
+ ],
+ q(byp) => [
+ q(1605),
+ q(0),
+ ],
+ q(byq) => [
+ q(1606),
+ q(0),
+ ],
+ q(byr) => [
+ q(1607),
+ q(0),
+ ],
+ q(bys) => [
+ q(1608),
+ q(0),
+ ],
+ q(byt) => [
+ q(1609),
+ q(0),
+ ],
+ q(byv) => [
+ q(1610),
+ q(0),
+ ],
+ q(byw) => [
+ q(1611),
+ q(0),
+ ],
+ q(byx) => [
+ q(1612),
+ q(0),
+ ],
+ q(byy) => [
+ q(1613),
+ q(0),
+ ],
+ q(byz) => [
+ q(1614),
+ q(0),
+ ],
+ q(bza) => [
+ q(1615),
+ q(0),
+ ],
+ q(bzb) => [
+ q(1616),
+ q(0),
+ ],
+ q(bzc) => [
+ q(1617),
+ q(0),
+ ],
+ q(bzd) => [
+ q(1618),
+ q(0),
+ ],
+ q(bze) => [
+ q(1619),
+ q(0),
+ ],
+ q(bzf) => [
+ q(1620),
+ q(0),
+ ],
+ q(bzg) => [
+ q(1621),
+ q(0),
+ ],
+ q(bzh) => [
+ q(1622),
+ q(0),
+ ],
+ q(bzi) => [
+ q(1623),
+ q(0),
+ ],
+ q(bzj) => [
+ q(1624),
+ q(0),
+ ],
+ q(bzk) => [
+ q(1625),
+ q(0),
+ ],
+ q(bzl) => [
+ q(1626),
+ q(0),
+ ],
+ q(bzm) => [
+ q(1627),
+ q(0),
+ ],
+ q(bzn) => [
+ q(1628),
+ q(0),
+ ],
+ q(bzo) => [
+ q(1629),
+ q(0),
+ ],
+ q(bzp) => [
+ q(1630),
+ q(0),
+ ],
+ q(bzq) => [
+ q(1631),
+ q(0),
+ ],
+ q(bzr) => [
+ q(1632),
+ q(0),
+ ],
+ q(bzs) => [
+ q(1633),
+ q(0),
+ ],
+ q(bzt) => [
+ q(1634),
+ q(0),
+ ],
+ q(bzu) => [
+ q(1635),
+ q(0),
+ ],
+ q(bzv) => [
+ q(1636),
+ q(0),
+ ],
+ q(bzw) => [
+ q(1637),
+ q(0),
+ ],
+ q(bzx) => [
+ q(1638),
+ q(0),
+ ],
+ q(bzy) => [
+ q(1639),
+ q(0),
+ ],
+ q(bzz) => [
+ q(1640),
+ q(0),
+ ],
+ q(caa) => [
+ q(1641),
+ q(0),
+ ],
+ q(cab) => [
+ q(1642),
+ q(0),
+ ],
+ q(cac) => [
+ q(1643),
+ q(0),
+ ],
+ q(cad) => [
+ q(0068),
+ q(0),
+ ],
+ q(cae) => [
+ q(1644),
+ q(0),
+ ],
+ q(caf) => [
+ q(1645),
+ q(0),
+ ],
+ q(cag) => [
+ q(1646),
+ q(0),
+ ],
+ q(cah) => [
+ q(1647),
+ q(0),
+ ],
+ q(cai) => [
+ q(0069),
+ q(0),
+ ],
+ q(caj) => [
+ q(1648),
+ q(0),
+ ],
+ q(cak) => [
+ q(1649),
+ q(0),
+ ],
+ q(cal) => [
+ q(1650),
+ q(0),
+ ],
+ q(cam) => [
+ q(1651),
+ q(0),
+ ],
+ q(can) => [
+ q(1652),
+ q(0),
+ ],
+ q(cao) => [
+ q(1653),
+ q(0),
+ ],
+ q(cap) => [
+ q(1654),
+ q(0),
+ ],
+ q(caq) => [
+ q(1655),
+ q(0),
+ ],
+ q(car) => [
+ q(0070),
+ q(0),
+ ],
+ q(cas) => [
+ q(1656),
+ q(0),
+ ],
+ q(cat) => [
+ q(0071),
+ q(0),
+ ],
+ q(cau) => [
+ q(0072),
+ q(0),
+ ],
+ q(cav) => [
+ q(1657),
+ q(0),
+ ],
+ q(caw) => [
+ q(1658),
+ q(0),
+ ],
+ q(cax) => [
+ q(1659),
+ q(0),
+ ],
+ q(cay) => [
+ q(1660),
+ q(0),
+ ],
+ q(caz) => [
+ q(1661),
+ q(0),
+ ],
+ q(cba) => [
+ q(0494),
+ q(0),
+ ],
+ q(cbb) => [
+ q(1662),
+ q(0),
+ ],
+ q(cbc) => [
+ q(1663),
+ q(0),
+ ],
+ q(cbd) => [
+ q(1664),
+ q(0),
+ ],
+ q(cbe) => [
+ q(1665),
+ q(0),
+ ],
+ q(cbg) => [
+ q(1666),
+ q(0),
+ ],
+ q(cbh) => [
+ q(1667),
+ q(0),
+ ],
+ q(cbi) => [
+ q(1668),
+ q(0),
+ ],
+ q(cbj) => [
+ q(1669),
+ q(0),
+ ],
+ q(cbk) => [
+ q(1670),
+ q(0),
+ ],
+ q(cbl) => [
+ q(1671),
+ q(0),
+ ],
+ q(cbn) => [
+ q(1672),
+ q(0),
+ ],
+ q(cbo) => [
+ q(1673),
+ q(0),
+ ],
+ q(cbr) => [
+ q(1674),
+ q(0),
+ ],
+ q(cbs) => [
+ q(1675),
+ q(0),
+ ],
+ q(cbt) => [
+ q(1676),
+ q(0),
+ ],
+ q(cbu) => [
+ q(1677),
+ q(0),
+ ],
+ q(cbv) => [
+ q(1678),
+ q(0),
+ ],
+ q(cbw) => [
+ q(1679),
+ q(0),
+ ],
+ q(cby) => [
+ q(1680),
+ q(0),
+ ],
+ q(cca) => [
+ q(1681),
+ q(0),
+ ],
+ q(ccc) => [
+ q(1682),
+ q(0),
+ ],
+ q(ccd) => [
+ q(1683),
+ q(0),
+ ],
+ q(cce) => [
+ q(1684),
+ q(0),
+ ],
+ q(ccg) => [
+ q(1685),
+ q(0),
+ ],
+ q(cch) => [
+ q(1686),
+ q(0),
+ ],
+ q(ccj) => [
+ q(1687),
+ q(0),
+ ],
+ q(ccl) => [
+ q(1688),
+ q(0),
+ ],
+ q(ccm) => [
+ q(1689),
+ q(0),
+ ],
+ q(ccn) => [
+ q(0495),
+ q(0),
+ ],
+ q(cco) => [
+ q(1690),
+ q(0),
+ ],
+ q(ccp) => [
+ q(1691),
+ q(0),
+ ],
+ q(ccr) => [
+ q(1692),
+ q(0),
+ ],
+ q(ccs) => [
+ q(0496),
+ q(0),
+ ],
+ q(cda) => [
+ q(1693),
+ q(0),
+ ],
+ q(cdc) => [
+ q(0497),
+ q(0),
+ ],
+ q(cdd) => [
+ q(0498),
+ q(0),
+ ],
+ q(cde) => [
+ q(1694),
+ q(0),
+ ],
+ q(cdf) => [
+ q(1695),
+ q(0),
+ ],
+ q(cdg) => [
+ q(1696),
+ q(0),
+ ],
+ q(cdh) => [
+ q(1697),
+ q(0),
+ ],
+ q(cdi) => [
+ q(1698),
+ q(0),
+ ],
+ q(cdj) => [
+ q(1699),
+ q(0),
+ ],
+ q(cdm) => [
+ q(1700),
+ q(0),
+ ],
+ q(cdn) => [
+ q(1701),
+ q(0),
+ ],
+ q(cdo) => [
+ q(1702),
+ q(0),
+ ],
+ q(cdr) => [
+ q(1703),
+ q(0),
+ ],
+ q(cds) => [
+ q(1704),
+ q(0),
+ ],
+ q(cdy) => [
+ q(1705),
+ q(0),
+ ],
+ q(cdz) => [
+ q(1706),
+ q(0),
+ ],
+ q(cea) => [
+ q(1707),
+ q(0),
+ ],
+ q(ceb) => [
+ q(0073),
+ q(0),
+ ],
+ q(ceg) => [
+ q(1708),
+ q(0),
+ ],
+ q(cek) => [
+ q(1709),
+ q(0),
+ ],
+ q(cel) => [
+ q(0074),
+ q(0),
+ ],
+ q(cen) => [
+ q(1710),
+ q(0),
+ ],
+ q(cet) => [
+ q(1711),
+ q(0),
+ ],
+ q(cfa) => [
+ q(1712),
+ q(0),
+ ],
+ q(cfd) => [
+ q(1713),
+ q(0),
+ ],
+ q(cfg) => [
+ q(1714),
+ q(0),
+ ],
+ q(cfm) => [
+ q(1715),
+ q(0),
+ ],
+ q(cga) => [
+ q(1716),
+ q(0),
+ ],
+ q(cgc) => [
+ q(1717),
+ q(0),
+ ],
+ q(cgg) => [
+ q(1718),
+ q(0),
+ ],
+ q(cgk) => [
+ q(1719),
+ q(0),
+ ],
+ q(cha) => [
+ q(0075),
+ q(0),
+ ],
+ q(chb) => [
+ q(0076),
+ q(0),
+ ],
+ q(chc) => [
+ q(1720),
+ q(0),
+ ],
+ q(chd) => [
+ q(1721),
+ q(0),
+ ],
+ q(che) => [
+ q(0077),
+ q(0),
+ ],
+ q(chf) => [
+ q(1722),
+ q(0),
+ ],
+ q(chg) => [
+ q(0078),
+ q(0),
+ ],
+ q(chh) => [
+ q(1723),
+ q(0),
+ ],
+ q(chi) => [
+ q(0079),
+ q(0),
+ ],
+ q(chj) => [
+ q(1724),
+ q(0),
+ ],
+ q(chk) => [
+ q(0080),
+ q(0),
+ ],
+ q(chl) => [
+ q(1725),
+ q(0),
+ ],
+ q(chm) => [
+ q(0081),
+ q(1),
+ ],
+ q(chn) => [
+ q(0082),
+ q(0),
+ ],
+ q(cho) => [
+ q(0083),
+ q(0),
+ ],
+ q(chp) => [
+ q(0084),
+ q(0),
+ ],
+ q(chq) => [
+ q(1726),
+ q(0),
+ ],
+ q(chr) => [
+ q(0085),
+ q(0),
+ ],
+ q(cht) => [
+ q(1727),
+ q(0),
+ ],
+ q(chu) => [
+ q(0086),
+ q(0),
+ ],
+ q(chv) => [
+ q(0087),
+ q(0),
+ ],
+ q(chw) => [
+ q(1728),
+ q(0),
+ ],
+ q(chx) => [
+ q(1729),
+ q(0),
+ ],
+ q(chy) => [
+ q(0088),
+ q(0),
+ ],
+ q(chz) => [
+ q(1730),
+ q(0),
+ ],
+ q(cia) => [
+ q(1731),
+ q(0),
+ ],
+ q(cib) => [
+ q(1732),
+ q(0),
+ ],
+ q(cic) => [
+ q(1733),
+ q(0),
+ ],
+ q(cid) => [
+ q(1734),
+ q(0),
+ ],
+ q(cie) => [
+ q(1735),
+ q(0),
+ ],
+ q(cih) => [
+ q(1736),
+ q(0),
+ ],
+ q(cik) => [
+ q(1737),
+ q(0),
+ ],
+ q(cim) => [
+ q(1738),
+ q(0),
+ ],
+ q(cin) => [
+ q(1739),
+ q(0),
+ ],
+ q(cip) => [
+ q(1740),
+ q(0),
+ ],
+ q(cir) => [
+ q(1741),
+ q(0),
+ ],
+ q(ciw) => [
+ q(1742),
+ q(0),
+ ],
+ q(ciy) => [
+ q(1743),
+ q(0),
+ ],
+ q(cja) => [
+ q(1744),
+ q(0),
+ ],
+ q(cje) => [
+ q(1745),
+ q(0),
+ ],
+ q(cjh) => [
+ q(1746),
+ q(0),
+ ],
+ q(cji) => [
+ q(1747),
+ q(0),
+ ],
+ q(cjk) => [
+ q(1748),
+ q(0),
+ ],
+ q(cjm) => [
+ q(1749),
+ q(0),
+ ],
+ q(cjn) => [
+ q(1750),
+ q(0),
+ ],
+ q(cjo) => [
+ q(1751),
+ q(0),
+ ],
+ q(cjp) => [
+ q(1752),
+ q(0),
+ ],
+ q(cjs) => [
+ q(1753),
+ q(0),
+ ],
+ q(cjv) => [
+ q(1754),
+ q(0),
+ ],
+ q(cjy) => [
+ q(1755),
+ q(0),
+ ],
+ q(ckb) => [
+ q(1756),
+ q(0),
+ ],
+ q(ckh) => [
+ q(1757),
+ q(0),
+ ],
+ q(ckl) => [
+ q(1758),
+ q(0),
+ ],
+ q(cko) => [
+ q(1759),
+ q(0),
+ ],
+ q(ckq) => [
+ q(1760),
+ q(0),
+ ],
+ q(ckr) => [
+ q(1761),
+ q(0),
+ ],
+ q(cks) => [
+ q(1762),
+ q(0),
+ ],
+ q(ckt) => [
+ q(1763),
+ q(0),
+ ],
+ q(cku) => [
+ q(1764),
+ q(0),
+ ],
+ q(ckv) => [
+ q(1765),
+ q(0),
+ ],
+ q(ckx) => [
+ q(1766),
+ q(0),
+ ],
+ q(cky) => [
+ q(1767),
+ q(0),
+ ],
+ q(ckz) => [
+ q(1768),
+ q(0),
+ ],
+ q(cla) => [
+ q(1769),
+ q(0),
+ ],
+ q(clc) => [
+ q(1770),
+ q(0),
+ ],
+ q(cld) => [
+ q(1771),
+ q(0),
+ ],
+ q(cle) => [
+ q(1772),
+ q(0),
+ ],
+ q(clh) => [
+ q(1773),
+ q(0),
+ ],
+ q(cli) => [
+ q(1774),
+ q(0),
+ ],
+ q(clj) => [
+ q(1775),
+ q(0),
+ ],
+ q(clk) => [
+ q(1776),
+ q(0),
+ ],
+ q(cll) => [
+ q(1777),
+ q(0),
+ ],
+ q(clm) => [
+ q(1778),
+ q(0),
+ ],
+ q(clo) => [
+ q(1779),
+ q(0),
+ ],
+ q(clt) => [
+ q(1780),
+ q(0),
+ ],
+ q(clu) => [
+ q(1781),
+ q(0),
+ ],
+ q(clw) => [
+ q(1782),
+ q(0),
+ ],
+ q(cly) => [
+ q(1783),
+ q(0),
+ ],
+ q(cma) => [
+ q(1784),
+ q(0),
+ ],
+ q(cmc) => [
+ q(0089),
+ q(0),
+ ],
+ q(cme) => [
+ q(1785),
+ q(0),
+ ],
+ q(cmg) => [
+ q(1786),
+ q(0),
+ ],
+ q(cmi) => [
+ q(1787),
+ q(0),
+ ],
+ q(cml) => [
+ q(1788),
+ q(0),
+ ],
+ q(cmm) => [
+ q(1789),
+ q(0),
+ ],
+ q(cmn) => [
+ q(1790),
+ q(0),
+ ],
+ q(cmo) => [
+ q(1791),
+ q(0),
+ ],
+ q(cmr) => [
+ q(1792),
+ q(0),
+ ],
+ q(cms) => [
+ q(1793),
+ q(0),
+ ],
+ q(cmt) => [
+ q(1794),
+ q(0),
+ ],
+ q(cna) => [
+ q(1795),
+ q(0),
+ ],
+ q(cnb) => [
+ q(1796),
+ q(0),
+ ],
+ q(cnc) => [
+ q(1797),
+ q(0),
+ ],
+ q(cng) => [
+ q(1798),
+ q(0),
+ ],
+ q(cnh) => [
+ q(1799),
+ q(0),
+ ],
+ q(cni) => [
+ q(1800),
+ q(0),
+ ],
+ q(cnk) => [
+ q(1801),
+ q(0),
+ ],
+ q(cnl) => [
+ q(1802),
+ q(0),
+ ],
+ q(cno) => [
+ q(1803),
+ q(0),
+ ],
+ q(cns) => [
+ q(1804),
+ q(0),
+ ],
+ q(cnt) => [
+ q(1805),
+ q(0),
+ ],
+ q(cnu) => [
+ q(1806),
+ q(0),
+ ],
+ q(cnw) => [
+ q(1807),
+ q(0),
+ ],
+ q(cnx) => [
+ q(1808),
+ q(0),
+ ],
+ q(coa) => [
+ q(1809),
+ q(0),
+ ],
+ q(cob) => [
+ q(1810),
+ q(0),
+ ],
+ q(coc) => [
+ q(1811),
+ q(0),
+ ],
+ q(cod) => [
+ q(1812),
+ q(0),
+ ],
+ q(coe) => [
+ q(1813),
+ q(0),
+ ],
+ q(cof) => [
+ q(1814),
+ q(0),
+ ],
+ q(cog) => [
+ q(1815),
+ q(0),
+ ],
+ q(coh) => [
+ q(1816),
+ q(0),
+ ],
+ q(coj) => [
+ q(1817),
+ q(0),
+ ],
+ q(cok) => [
+ q(1818),
+ q(0),
+ ],
+ q(col) => [
+ q(1819),
+ q(0),
+ ],
+ q(com) => [
+ q(1820),
+ q(0),
+ ],
+ q(con) => [
+ q(1821),
+ q(0),
+ ],
+ q(coo) => [
+ q(1822),
+ q(0),
+ ],
+ q(cop) => [
+ q(0090),
+ q(0),
+ ],
+ q(coq) => [
+ q(1823),
+ q(0),
+ ],
+ q(cor) => [
+ q(0091),
+ q(0),
+ ],
+ q(cos) => [
+ q(0092),
+ q(0),
+ ],
+ q(cot) => [
+ q(1824),
+ q(0),
+ ],
+ q(cou) => [
+ q(1825),
+ q(0),
+ ],
+ q(cov) => [
+ q(1826),
+ q(0),
+ ],
+ q(cow) => [
+ q(1827),
+ q(0),
+ ],
+ q(cox) => [
+ q(1828),
+ q(0),
+ ],
+ q(coy) => [
+ q(1829),
+ q(0),
+ ],
+ q(coz) => [
+ q(1830),
+ q(0),
+ ],
+ q(cpa) => [
+ q(1831),
+ q(0),
+ ],
+ q(cpb) => [
+ q(1832),
+ q(0),
+ ],
+ q(cpc) => [
+ q(1833),
+ q(0),
+ ],
+ q(cpe) => [
+ q(0093),
+ q(2),
+ ],
+ q(cpf) => [
+ q(0094),
+ q(2),
+ ],
+ q(cpg) => [
+ q(1834),
+ q(0),
+ ],
+ q(cpi) => [
+ q(1835),
+ q(0),
+ ],
+ q(cpn) => [
+ q(1836),
+ q(0),
+ ],
+ q(cpp) => [
+ q(0095),
+ q(2),
+ ],
+ q(cps) => [
+ q(1837),
+ q(0),
+ ],
+ q(cpu) => [
+ q(1838),
+ q(0),
+ ],
+ q(cpx) => [
+ q(1839),
+ q(0),
+ ],
+ q(cpy) => [
+ q(1840),
+ q(0),
+ ],
+ q(cqd) => [
+ q(1841),
+ q(0),
+ ],
+ q(cqu) => [
+ q(1842),
+ q(0),
+ ],
+ q(cra) => [
+ q(1843),
+ q(0),
+ ],
+ q(crb) => [
+ q(1844),
+ q(0),
+ ],
+ q(crc) => [
+ q(1845),
+ q(0),
+ ],
+ q(crd) => [
+ q(1846),
+ q(0),
+ ],
+ q(cre) => [
+ q(0096),
+ q(0),
+ ],
+ q(crf) => [
+ q(1847),
+ q(0),
+ ],
+ q(crg) => [
+ q(1848),
+ q(0),
+ ],
+ q(crh) => [
+ q(0097),
+ q(0),
+ ],
+ q(cri) => [
+ q(1849),
+ q(0),
+ ],
+ q(crj) => [
+ q(1850),
+ q(0),
+ ],
+ q(crk) => [
+ q(1851),
+ q(0),
+ ],
+ q(crl) => [
+ q(1852),
+ q(0),
+ ],
+ q(crm) => [
+ q(1853),
+ q(0),
+ ],
+ q(crn) => [
+ q(1854),
+ q(0),
+ ],
+ q(cro) => [
+ q(1855),
+ q(0),
+ ],
+ q(crp) => [
+ q(0098),
+ q(1),
+ ],
+ q(crq) => [
+ q(1856),
+ q(0),
+ ],
+ q(crr) => [
+ q(1857),
+ q(0),
+ ],
+ q(crs) => [
+ q(1858),
+ q(0),
+ ],
+ q(crt) => [
+ q(1859),
+ q(0),
+ ],
+ q(crv) => [
+ q(1860),
+ q(0),
+ ],
+ q(crw) => [
+ q(1861),
+ q(0),
+ ],
+ q(crx) => [
+ q(1862),
+ q(0),
+ ],
+ q(cry) => [
+ q(1863),
+ q(0),
+ ],
+ q(crz) => [
+ q(1864),
+ q(0),
+ ],
+ q(csa) => [
+ q(1865),
+ q(0),
+ ],
+ q(csb) => [
+ q(0099),
+ q(0),
+ ],
+ q(csc) => [
+ q(1866),
+ q(0),
+ ],
+ q(csd) => [
+ q(1867),
+ q(0),
+ ],
+ q(cse) => [
+ q(1868),
+ q(0),
+ ],
+ q(csf) => [
+ q(1869),
+ q(0),
+ ],
+ q(csg) => [
+ q(1870),
+ q(0),
+ ],
+ q(csh) => [
+ q(1871),
+ q(0),
+ ],
+ q(csi) => [
+ q(1872),
+ q(0),
+ ],
+ q(csk) => [
+ q(1873),
+ q(0),
+ ],
+ q(csl) => [
+ q(1874),
+ q(0),
+ ],
+ q(csm) => [
+ q(1875),
+ q(0),
+ ],
+ q(csn) => [
+ q(1876),
+ q(0),
+ ],
+ q(cso) => [
+ q(1877),
+ q(0),
+ ],
+ q(csq) => [
+ q(1878),
+ q(0),
+ ],
+ q(csr) => [
+ q(1879),
+ q(0),
+ ],
+ q(css) => [
+ q(1880),
+ q(0),
+ ],
+ q(cst) => [
+ q(1881),
+ q(0),
+ ],
+ q(csu) => [
+ q(0499),
+ q(0),
+ ],
+ q(csv) => [
+ q(1882),
+ q(0),
+ ],
+ q(csw) => [
+ q(1883),
+ q(0),
+ ],
+ q(csy) => [
+ q(1884),
+ q(0),
+ ],
+ q(csz) => [
+ q(1885),
+ q(0),
+ ],
+ q(cta) => [
+ q(1886),
+ q(0),
+ ],
+ q(ctc) => [
+ q(1887),
+ q(0),
+ ],
+ q(ctd) => [
+ q(1888),
+ q(0),
+ ],
+ q(cte) => [
+ q(1889),
+ q(0),
+ ],
+ q(ctg) => [
+ q(1890),
+ q(0),
+ ],
+ q(cth) => [
+ q(1891),
+ q(0),
+ ],
+ q(ctl) => [
+ q(1892),
+ q(0),
+ ],
+ q(ctm) => [
+ q(1893),
+ q(0),
+ ],
+ q(ctn) => [
+ q(1894),
+ q(0),
+ ],
+ q(cto) => [
+ q(1895),
+ q(0),
+ ],
+ q(ctp) => [
+ q(1896),
+ q(0),
+ ],
+ q(cts) => [
+ q(1897),
+ q(0),
+ ],
+ q(ctt) => [
+ q(1898),
+ q(0),
+ ],
+ q(ctu) => [
+ q(1899),
+ q(0),
+ ],
+ q(ctz) => [
+ q(1900),
+ q(0),
+ ],
+ q(cua) => [
+ q(1901),
+ q(0),
+ ],
+ q(cub) => [
+ q(1902),
+ q(0),
+ ],
+ q(cuc) => [
+ q(1903),
+ q(0),
+ ],
+ q(cug) => [
+ q(1904),
+ q(0),
+ ],
+ q(cuh) => [
+ q(1905),
+ q(0),
+ ],
+ q(cui) => [
+ q(1906),
+ q(0),
+ ],
+ q(cuj) => [
+ q(1907),
+ q(0),
+ ],
+ q(cuk) => [
+ q(1908),
+ q(0),
+ ],
+ q(cul) => [
+ q(1909),
+ q(0),
+ ],
+ q(cum) => [
+ q(1910),
+ q(0),
+ ],
+ q(cuo) => [
+ q(1911),
+ q(0),
+ ],
+ q(cup) => [
+ q(1912),
+ q(0),
+ ],
+ q(cuq) => [
+ q(1913),
+ q(0),
+ ],
+ q(cur) => [
+ q(1914),
+ q(0),
+ ],
+ q(cus) => [
+ q(0100),
+ q(0),
+ ],
+ q(cut) => [
+ q(1915),
+ q(0),
+ ],
+ q(cuu) => [
+ q(1916),
+ q(0),
+ ],
+ q(cuv) => [
+ q(1917),
+ q(0),
+ ],
+ q(cuw) => [
+ q(1918),
+ q(0),
+ ],
+ q(cux) => [
+ q(1919),
+ q(0),
+ ],
+ q(cvg) => [
+ q(1920),
+ q(0),
+ ],
+ q(cvn) => [
+ q(1921),
+ q(0),
+ ],
+ q(cwa) => [
+ q(1922),
+ q(0),
+ ],
+ q(cwb) => [
+ q(1923),
+ q(0),
+ ],
+ q(cwd) => [
+ q(1924),
+ q(0),
+ ],
+ q(cwe) => [
+ q(1925),
+ q(0),
+ ],
+ q(cwg) => [
+ q(1926),
+ q(0),
+ ],
+ q(cwt) => [
+ q(1927),
+ q(0),
+ ],
+ q(cya) => [
+ q(1928),
+ q(0),
+ ],
+ q(cyb) => [
+ q(1929),
+ q(0),
+ ],
+ q(cyo) => [
+ q(1930),
+ q(0),
+ ],
+ q(cze) => [
+ q(0101),
+ q(0),
+ ],
+ q(czh) => [
+ q(1931),
+ q(0),
+ ],
+ q(czk) => [
+ q(1932),
+ q(0),
+ ],
+ q(czn) => [
+ q(1933),
+ q(0),
+ ],
+ q(czo) => [
+ q(1934),
+ q(0),
+ ],
+ q(czt) => [
+ q(1935),
+ q(0),
+ ],
+ q(daa) => [
+ q(1936),
+ q(0),
+ ],
+ q(dac) => [
+ q(1937),
+ q(0),
+ ],
+ q(dad) => [
+ q(1938),
+ q(0),
+ ],
+ q(dae) => [
+ q(1939),
+ q(0),
+ ],
+ q(daf) => [
+ q(1940),
+ q(0),
+ ],
+ q(dag) => [
+ q(1941),
+ q(0),
+ ],
+ q(dah) => [
+ q(1942),
+ q(0),
+ ],
+ q(dai) => [
+ q(1943),
+ q(0),
+ ],
+ q(daj) => [
+ q(1944),
+ q(0),
+ ],
+ q(dak) => [
+ q(0102),
+ q(0),
+ ],
+ q(dal) => [
+ q(1945),
+ q(0),
+ ],
+ q(dam) => [
+ q(1946),
+ q(0),
+ ],
+ q(dan) => [
+ q(0103),
+ q(0),
+ ],
+ q(dao) => [
+ q(1947),
+ q(0),
+ ],
+ q(daq) => [
+ q(1948),
+ q(0),
+ ],
+ q(dar) => [
+ q(0104),
+ q(0),
+ ],
+ q(das) => [
+ q(1949),
+ q(0),
+ ],
+ q(dau) => [
+ q(1950),
+ q(0),
+ ],
+ q(dav) => [
+ q(1951),
+ q(0),
+ ],
+ q(daw) => [
+ q(1952),
+ q(0),
+ ],
+ q(dax) => [
+ q(1953),
+ q(0),
+ ],
+ q(day) => [
+ q(0105),
+ q(0),
+ ],
+ q(daz) => [
+ q(1954),
+ q(0),
+ ],
+ q(dba) => [
+ q(1955),
+ q(0),
+ ],
+ q(dbb) => [
+ q(1956),
+ q(0),
+ ],
+ q(dbd) => [
+ q(1957),
+ q(0),
+ ],
+ q(dbe) => [
+ q(1958),
+ q(0),
+ ],
+ q(dbf) => [
+ q(1959),
+ q(0),
+ ],
+ q(dbg) => [
+ q(1960),
+ q(0),
+ ],
+ q(dbi) => [
+ q(1961),
+ q(0),
+ ],
+ q(dbj) => [
+ q(1962),
+ q(0),
+ ],
+ q(dbl) => [
+ q(1963),
+ q(0),
+ ],
+ q(dbm) => [
+ q(1964),
+ q(0),
+ ],
+ q(dbn) => [
+ q(1965),
+ q(0),
+ ],
+ q(dbo) => [
+ q(1966),
+ q(0),
+ ],
+ q(dbp) => [
+ q(1967),
+ q(0),
+ ],
+ q(dbq) => [
+ q(1968),
+ q(0),
+ ],
+ q(dbr) => [
+ q(1969),
+ q(0),
+ ],
+ q(dbt) => [
+ q(1970),
+ q(0),
+ ],
+ q(dbu) => [
+ q(1971),
+ q(0),
+ ],
+ q(dbv) => [
+ q(1972),
+ q(0),
+ ],
+ q(dbw) => [
+ q(1973),
+ q(0),
+ ],
+ q(dby) => [
+ q(1974),
+ q(0),
+ ],
+ q(dcc) => [
+ q(1975),
+ q(0),
+ ],
+ q(dcr) => [
+ q(1976),
+ q(0),
+ ],
+ q(dda) => [
+ q(1977),
+ q(0),
+ ],
+ q(ddd) => [
+ q(1978),
+ q(0),
+ ],
+ q(dde) => [
+ q(1979),
+ q(0),
+ ],
+ q(ddg) => [
+ q(1980),
+ q(0),
+ ],
+ q(ddi) => [
+ q(1981),
+ q(0),
+ ],
+ q(ddj) => [
+ q(1982),
+ q(0),
+ ],
+ q(ddn) => [
+ q(1983),
+ q(0),
+ ],
+ q(ddo) => [
+ q(1984),
+ q(0),
+ ],
+ q(ddr) => [
+ q(1985),
+ q(0),
+ ],
+ q(dds) => [
+ q(1986),
+ q(0),
+ ],
+ q(ddw) => [
+ q(1987),
+ q(0),
+ ],
+ q(dec) => [
+ q(1988),
+ q(0),
+ ],
+ q(ded) => [
+ q(1989),
+ q(0),
+ ],
+ q(dee) => [
+ q(1990),
+ q(0),
+ ],
+ q(def) => [
+ q(1991),
+ q(0),
+ ],
+ q(deg) => [
+ q(1992),
+ q(0),
+ ],
+ q(deh) => [
+ q(1993),
+ q(0),
+ ],
+ q(dei) => [
+ q(1994),
+ q(0),
+ ],
+ q(dek) => [
+ q(1995),
+ q(0),
+ ],
+ q(del) => [
+ q(0106),
+ q(0),
+ ],
+ q(dem) => [
+ q(1996),
+ q(0),
+ ],
+ q(den) => [
+ q(0107),
+ q(0),
+ ],
+ q(dep) => [
+ q(1997),
+ q(0),
+ ],
+ q(deq) => [
+ q(1998),
+ q(0),
+ ],
+ q(der) => [
+ q(1999),
+ q(0),
+ ],
+ q(des) => [
+ q(2000),
+ q(0),
+ ],
+ q(dev) => [
+ q(2001),
+ q(0),
+ ],
+ q(dez) => [
+ q(2002),
+ q(0),
+ ],
+ q(dga) => [
+ q(2003),
+ q(0),
+ ],
+ q(dgb) => [
+ q(2004),
+ q(0),
+ ],
+ q(dgc) => [
+ q(2005),
+ q(0),
+ ],
+ q(dgd) => [
+ q(2006),
+ q(0),
+ ],
+ q(dge) => [
+ q(2007),
+ q(0),
+ ],
+ q(dgg) => [
+ q(2008),
+ q(0),
+ ],
+ q(dgh) => [
+ q(2009),
+ q(0),
+ ],
+ q(dgi) => [
+ q(2010),
+ q(0),
+ ],
+ q(dgk) => [
+ q(2011),
+ q(0),
+ ],
+ q(dgl) => [
+ q(2012),
+ q(0),
+ ],
+ q(dgn) => [
+ q(2013),
+ q(0),
+ ],
+ q(dgo) => [
+ q(2014),
+ q(0),
+ ],
+ q(dgr) => [
+ q(0108),
+ q(0),
+ ],
+ q(dgs) => [
+ q(2015),
+ q(0),
+ ],
+ q(dgt) => [
+ q(2016),
+ q(0),
+ ],
+ q(dgu) => [
+ q(2017),
+ q(0),
+ ],
+ q(dgw) => [
+ q(2018),
+ q(0),
+ ],
+ q(dgx) => [
+ q(2019),
+ q(0),
+ ],
+ q(dgz) => [
+ q(2020),
+ q(0),
+ ],
+ q(dhd) => [
+ q(2021),
+ q(0),
+ ],
+ q(dhg) => [
+ q(2022),
+ q(0),
+ ],
+ q(dhi) => [
+ q(2023),
+ q(0),
+ ],
+ q(dhl) => [
+ q(2024),
+ q(0),
+ ],
+ q(dhm) => [
+ q(2025),
+ q(0),
+ ],
+ q(dhn) => [
+ q(2026),
+ q(0),
+ ],
+ q(dho) => [
+ q(2027),
+ q(0),
+ ],
+ q(dhr) => [
+ q(2028),
+ q(0),
+ ],
+ q(dhs) => [
+ q(2029),
+ q(0),
+ ],
+ q(dhu) => [
+ q(2030),
+ q(0),
+ ],
+ q(dhv) => [
+ q(2031),
+ q(0),
+ ],
+ q(dhw) => [
+ q(2032),
+ q(0),
+ ],
+ q(dia) => [
+ q(2033),
+ q(0),
+ ],
+ q(dib) => [
+ q(2034),
+ q(0),
+ ],
+ q(dic) => [
+ q(2035),
+ q(0),
+ ],
+ q(did) => [
+ q(2036),
+ q(0),
+ ],
+ q(dif) => [
+ q(2037),
+ q(0),
+ ],
+ q(dig) => [
+ q(2038),
+ q(0),
+ ],
+ q(dih) => [
+ q(2039),
+ q(0),
+ ],
+ q(dii) => [
+ q(2040),
+ q(0),
+ ],
+ q(dij) => [
+ q(2041),
+ q(0),
+ ],
+ q(dik) => [
+ q(2042),
+ q(0),
+ ],
+ q(dil) => [
+ q(2043),
+ q(0),
+ ],
+ q(dim) => [
+ q(2044),
+ q(0),
+ ],
+ q(din) => [
+ q(0109),
+ q(0),
+ ],
+ q(dio) => [
+ q(2045),
+ q(0),
+ ],
+ q(dip) => [
+ q(2046),
+ q(0),
+ ],
+ q(diq) => [
+ q(2047),
+ q(0),
+ ],
+ q(dir) => [
+ q(2048),
+ q(0),
+ ],
+ q(dis) => [
+ q(2049),
+ q(0),
+ ],
+ q(dit) => [
+ q(2050),
+ q(0),
+ ],
+ q(diu) => [
+ q(2051),
+ q(0),
+ ],
+ q(div) => [
+ q(0110),
+ q(0),
+ ],
+ q(diw) => [
+ q(2052),
+ q(0),
+ ],
+ q(dix) => [
+ q(2053),
+ q(0),
+ ],
+ q(diy) => [
+ q(2054),
+ q(0),
+ ],
+ q(diz) => [
+ q(2055),
+ q(0),
+ ],
+ q(dja) => [
+ q(2056),
+ q(0),
+ ],
+ q(djb) => [
+ q(2057),
+ q(0),
+ ],
+ q(djc) => [
+ q(2058),
+ q(0),
+ ],
+ q(djd) => [
+ q(2059),
+ q(0),
+ ],
+ q(dje) => [
+ q(2060),
+ q(0),
+ ],
+ q(djf) => [
+ q(2061),
+ q(0),
+ ],
+ q(dji) => [
+ q(2062),
+ q(0),
+ ],
+ q(djj) => [
+ q(2063),
+ q(0),
+ ],
+ q(djk) => [
+ q(2064),
+ q(0),
+ ],
+ q(djl) => [
+ q(2065),
+ q(0),
+ ],
+ q(djm) => [
+ q(2066),
+ q(0),
+ ],
+ q(djn) => [
+ q(2067),
+ q(0),
+ ],
+ q(djo) => [
+ q(2068),
+ q(0),
+ ],
+ q(djr) => [
+ q(2069),
+ q(0),
+ ],
+ q(dju) => [
+ q(2070),
+ q(0),
+ ],
+ q(djw) => [
+ q(2071),
+ q(0),
+ ],
+ q(dka) => [
+ q(2072),
+ q(0),
+ ],
+ q(dkk) => [
+ q(2073),
+ q(0),
+ ],
+ q(dkr) => [
+ q(2074),
+ q(0),
+ ],
+ q(dks) => [
+ q(2075),
+ q(0),
+ ],
+ q(dkx) => [
+ q(2076),
+ q(0),
+ ],
+ q(dlg) => [
+ q(2077),
+ q(0),
+ ],
+ q(dlm) => [
+ q(2078),
+ q(0),
+ ],
+ q(dln) => [
+ q(2079),
+ q(0),
+ ],
+ q(dma) => [
+ q(2080),
+ q(0),
+ ],
+ q(dmb) => [
+ q(2081),
+ q(0),
+ ],
+ q(dmc) => [
+ q(2082),
+ q(0),
+ ],
+ q(dmd) => [
+ q(2083),
+ q(0),
+ ],
+ q(dme) => [
+ q(2084),
+ q(0),
+ ],
+ q(dmg) => [
+ q(2085),
+ q(0),
+ ],
+ q(dmk) => [
+ q(2086),
+ q(0),
+ ],
+ q(dml) => [
+ q(2087),
+ q(0),
+ ],
+ q(dmm) => [
+ q(2088),
+ q(0),
+ ],
+ q(dmn) => [
+ q(0500),
+ q(0),
+ ],
+ q(dmo) => [
+ q(2089),
+ q(0),
+ ],
+ q(dmr) => [
+ q(2090),
+ q(0),
+ ],
+ q(dms) => [
+ q(2091),
+ q(0),
+ ],
+ q(dmu) => [
+ q(2092),
+ q(0),
+ ],
+ q(dmv) => [
+ q(2093),
+ q(0),
+ ],
+ q(dmx) => [
+ q(2094),
+ q(0),
+ ],
+ q(dmy) => [
+ q(2095),
+ q(0),
+ ],
+ q(dna) => [
+ q(2096),
+ q(0),
+ ],
+ q(dnd) => [
+ q(2097),
+ q(0),
+ ],
+ q(dne) => [
+ q(2098),
+ q(0),
+ ],
+ q(dng) => [
+ q(2099),
+ q(0),
+ ],
+ q(dni) => [
+ q(2100),
+ q(0),
+ ],
+ q(dnk) => [
+ q(2101),
+ q(0),
+ ],
+ q(dnn) => [
+ q(2102),
+ q(0),
+ ],
+ q(dnr) => [
+ q(2103),
+ q(0),
+ ],
+ q(dnt) => [
+ q(2104),
+ q(0),
+ ],
+ q(dnu) => [
+ q(2105),
+ q(0),
+ ],
+ q(dnv) => [
+ q(2106),
+ q(0),
+ ],
+ q(dnw) => [
+ q(2107),
+ q(0),
+ ],
+ q(dny) => [
+ q(2108),
+ q(0),
+ ],
+ q(doa) => [
+ q(2109),
+ q(0),
+ ],
+ q(dob) => [
+ q(2110),
+ q(0),
+ ],
+ q(doc) => [
+ q(2111),
+ q(0),
+ ],
+ q(doe) => [
+ q(2112),
+ q(0),
+ ],
+ q(dof) => [
+ q(2113),
+ q(0),
+ ],
+ q(doh) => [
+ q(2114),
+ q(0),
+ ],
+ q(doi) => [
+ q(0111),
+ q(1),
+ ],
+ q(dok) => [
+ q(2115),
+ q(0),
+ ],
+ q(dol) => [
+ q(2116),
+ q(0),
+ ],
+ q(don) => [
+ q(2117),
+ q(0),
+ ],
+ q(doo) => [
+ q(2118),
+ q(0),
+ ],
+ q(dop) => [
+ q(2119),
+ q(0),
+ ],
+ q(doq) => [
+ q(2120),
+ q(0),
+ ],
+ q(dor) => [
+ q(2121),
+ q(0),
+ ],
+ q(dos) => [
+ q(2122),
+ q(0),
+ ],
+ q(dot) => [
+ q(2123),
+ q(0),
+ ],
+ q(dov) => [
+ q(2124),
+ q(0),
+ ],
+ q(dow) => [
+ q(2125),
+ q(0),
+ ],
+ q(dox) => [
+ q(2126),
+ q(0),
+ ],
+ q(doy) => [
+ q(2127),
+ q(0),
+ ],
+ q(doz) => [
+ q(2128),
+ q(0),
+ ],
+ q(dpp) => [
+ q(2129),
+ q(0),
+ ],
+ q(dra) => [
+ q(0112),
+ q(0),
+ ],
+ q(drb) => [
+ q(2130),
+ q(0),
+ ],
+ q(drc) => [
+ q(2131),
+ q(0),
+ ],
+ q(drd) => [
+ q(2132),
+ q(0),
+ ],
+ q(dre) => [
+ q(2133),
+ q(0),
+ ],
+ q(drg) => [
+ q(2134),
+ q(0),
+ ],
+ q(dri) => [
+ q(2135),
+ q(0),
+ ],
+ q(drl) => [
+ q(2136),
+ q(0),
+ ],
+ q(drn) => [
+ q(2137),
+ q(0),
+ ],
+ q(dro) => [
+ q(2138),
+ q(0),
+ ],
+ q(drq) => [
+ q(2139),
+ q(0),
+ ],
+ q(drr) => [
+ q(2140),
+ q(0),
+ ],
+ q(drs) => [
+ q(2141),
+ q(0),
+ ],
+ q(drt) => [
+ q(2142),
+ q(0),
+ ],
+ q(dru) => [
+ q(2143),
+ q(0),
+ ],
+ q(dry) => [
+ q(2144),
+ q(0),
+ ],
+ q(dsb) => [
+ q(0113),
+ q(0),
+ ],
+ q(dse) => [
+ q(2145),
+ q(0),
+ ],
+ q(dsh) => [
+ q(2146),
+ q(0),
+ ],
+ q(dsi) => [
+ q(2147),
+ q(0),
+ ],
+ q(dsl) => [
+ q(2148),
+ q(0),
+ ],
+ q(dsn) => [
+ q(2149),
+ q(0),
+ ],
+ q(dso) => [
+ q(2150),
+ q(0),
+ ],
+ q(dsq) => [
+ q(2151),
+ q(0),
+ ],
+ q(dta) => [
+ q(2152),
+ q(0),
+ ],
+ q(dtb) => [
+ q(2153),
+ q(0),
+ ],
+ q(dtd) => [
+ q(2154),
+ q(0),
+ ],
+ q(dth) => [
+ q(2155),
+ q(0),
+ ],
+ q(dti) => [
+ q(2156),
+ q(0),
+ ],
+ q(dtk) => [
+ q(2157),
+ q(0),
+ ],
+ q(dtm) => [
+ q(2158),
+ q(0),
+ ],
+ q(dto) => [
+ q(2159),
+ q(0),
+ ],
+ q(dtp) => [
+ q(2160),
+ q(0),
+ ],
+ q(dtr) => [
+ q(2161),
+ q(0),
+ ],
+ q(dts) => [
+ q(2162),
+ q(0),
+ ],
+ q(dtt) => [
+ q(2163),
+ q(0),
+ ],
+ q(dtu) => [
+ q(2164),
+ q(0),
+ ],
+ q(dty) => [
+ q(2165),
+ q(0),
+ ],
+ q(dua) => [
+ q(0114),
+ q(0),
+ ],
+ q(dub) => [
+ q(2166),
+ q(0),
+ ],
+ q(duc) => [
+ q(2167),
+ q(0),
+ ],
+ q(dud) => [
+ q(2168),
+ q(0),
+ ],
+ q(due) => [
+ q(2169),
+ q(0),
+ ],
+ q(duf) => [
+ q(2170),
+ q(0),
+ ],
+ q(dug) => [
+ q(2171),
+ q(0),
+ ],
+ q(duh) => [
+ q(2172),
+ q(0),
+ ],
+ q(dui) => [
+ q(2173),
+ q(0),
+ ],
+ q(duj) => [
+ q(2174),
+ q(0),
+ ],
+ q(duk) => [
+ q(2175),
+ q(0),
+ ],
+ q(dul) => [
+ q(2176),
+ q(0),
+ ],
+ q(dum) => [
+ q(0115),
+ q(1),
+ ],
+ q(dun) => [
+ q(2177),
+ q(0),
+ ],
+ q(duo) => [
+ q(2178),
+ q(0),
+ ],
+ q(dup) => [
+ q(2179),
+ q(0),
+ ],
+ q(duq) => [
+ q(2180),
+ q(0),
+ ],
+ q(dur) => [
+ q(2181),
+ q(0),
+ ],
+ q(dus) => [
+ q(2182),
+ q(0),
+ ],
+ q(dut) => [
+ q(0116),
+ q(0),
+ ],
+ q(duu) => [
+ q(2183),
+ q(0),
+ ],
+ q(duv) => [
+ q(2184),
+ q(0),
+ ],
+ q(duw) => [
+ q(2185),
+ q(0),
+ ],
+ q(dux) => [
+ q(2186),
+ q(0),
+ ],
+ q(duy) => [
+ q(2187),
+ q(0),
+ ],
+ q(duz) => [
+ q(2188),
+ q(0),
+ ],
+ q(dva) => [
+ q(2189),
+ q(0),
+ ],
+ q(dwa) => [
+ q(2190),
+ q(0),
+ ],
+ q(dwr) => [
+ q(2191),
+ q(0),
+ ],
+ q(dws) => [
+ q(2192),
+ q(0),
+ ],
+ q(dww) => [
+ q(2193),
+ q(0),
+ ],
+ q(dya) => [
+ q(2194),
+ q(0),
+ ],
+ q(dyb) => [
+ q(2195),
+ q(0),
+ ],
+ q(dyd) => [
+ q(2196),
+ q(0),
+ ],
+ q(dyg) => [
+ q(2197),
+ q(0),
+ ],
+ q(dyi) => [
+ q(2198),
+ q(0),
+ ],
+ q(dym) => [
+ q(2199),
+ q(0),
+ ],
+ q(dyn) => [
+ q(2200),
+ q(0),
+ ],
+ q(dyo) => [
+ q(2201),
+ q(0),
+ ],
+ q(dyu) => [
+ q(0117),
+ q(0),
+ ],
+ q(dyy) => [
+ q(2202),
+ q(0),
+ ],
+ q(dza) => [
+ q(2203),
+ q(0),
+ ],
+ q(dzd) => [
+ q(2204),
+ q(0),
+ ],
+ q(dzg) => [
+ q(2205),
+ q(0),
+ ],
+ q(dzl) => [
+ q(2206),
+ q(0),
+ ],
+ q(dzn) => [
+ q(2207),
+ q(0),
+ ],
+ q(dzo) => [
+ q(0118),
+ q(0),
+ ],
+ q(ebg) => [
+ q(2208),
+ q(0),
+ ],
+ q(ebk) => [
+ q(2209),
+ q(0),
+ ],
+ q(ebo) => [
+ q(2210),
+ q(0),
+ ],
+ q(ebr) => [
+ q(2211),
+ q(0),
+ ],
+ q(ebu) => [
+ q(2212),
+ q(0),
+ ],
+ q(ecr) => [
+ q(2213),
+ q(0),
+ ],
+ q(ecs) => [
+ q(2214),
+ q(0),
+ ],
+ q(ecy) => [
+ q(2215),
+ q(0),
+ ],
+ q(eee) => [
+ q(2216),
+ q(0),
+ ],
+ q(efa) => [
+ q(2217),
+ q(0),
+ ],
+ q(efe) => [
+ q(2218),
+ q(0),
+ ],
+ q(efi) => [
+ q(0119),
+ q(0),
+ ],
+ q(ega) => [
+ q(2219),
+ q(0),
+ ],
+ q(egl) => [
+ q(2220),
+ q(0),
+ ],
+ q(ego) => [
+ q(2221),
+ q(0),
+ ],
+ q(egx) => [
+ q(0501),
+ q(0),
+ ],
+ q(egy) => [
+ q(0120),
+ q(0),
+ ],
+ q(ehu) => [
+ q(2222),
+ q(0),
+ ],
+ q(eip) => [
+ q(2223),
+ q(0),
+ ],
+ q(eit) => [
+ q(2224),
+ q(0),
+ ],
+ q(eiv) => [
+ q(2225),
+ q(0),
+ ],
+ q(eja) => [
+ q(2226),
+ q(0),
+ ],
+ q(eka) => [
+ q(0121),
+ q(0),
+ ],
+ q(eke) => [
+ q(2227),
+ q(0),
+ ],
+ q(ekg) => [
+ q(2228),
+ q(0),
+ ],
+ q(eki) => [
+ q(2229),
+ q(0),
+ ],
+ q(ekk) => [
+ q(2230),
+ q(0),
+ ],
+ q(ekl) => [
+ q(2231),
+ q(0),
+ ],
+ q(ekm) => [
+ q(2232),
+ q(0),
+ ],
+ q(eko) => [
+ q(2233),
+ q(0),
+ ],
+ q(ekp) => [
+ q(2234),
+ q(0),
+ ],
+ q(ekr) => [
+ q(2235),
+ q(0),
+ ],
+ q(eky) => [
+ q(2236),
+ q(0),
+ ],
+ q(ele) => [
+ q(2237),
+ q(0),
+ ],
+ q(elh) => [
+ q(2238),
+ q(0),
+ ],
+ q(eli) => [
+ q(2239),
+ q(0),
+ ],
+ q(elk) => [
+ q(2240),
+ q(0),
+ ],
+ q(elm) => [
+ q(2241),
+ q(0),
+ ],
+ q(elo) => [
+ q(2242),
+ q(0),
+ ],
+ q(elu) => [
+ q(2243),
+ q(0),
+ ],
+ q(elx) => [
+ q(0122),
+ q(0),
+ ],
+ q(ema) => [
+ q(2244),
+ q(0),
+ ],
+ q(emb) => [
+ q(2245),
+ q(0),
+ ],
+ q(eme) => [
+ q(2246),
+ q(0),
+ ],
+ q(emg) => [
+ q(2247),
+ q(0),
+ ],
+ q(emi) => [
+ q(2248),
+ q(0),
+ ],
+ q(emk) => [
+ q(2249),
+ q(0),
+ ],
+ q(emm) => [
+ q(2250),
+ q(0),
+ ],
+ q(emn) => [
+ q(2251),
+ q(0),
+ ],
+ q(emo) => [
+ q(2252),
+ q(0),
+ ],
+ q(emp) => [
+ q(2253),
+ q(0),
+ ],
+ q(ems) => [
+ q(2254),
+ q(0),
+ ],
+ q(emu) => [
+ q(2255),
+ q(0),
+ ],
+ q(emw) => [
+ q(2256),
+ q(0),
+ ],
+ q(emx) => [
+ q(2257),
+ q(0),
+ ],
+ q(emy) => [
+ q(2258),
+ q(0),
+ ],
+ q(ena) => [
+ q(2259),
+ q(0),
+ ],
+ q(enb) => [
+ q(2260),
+ q(0),
+ ],
+ q(enc) => [
+ q(2261),
+ q(0),
+ ],
+ q(end) => [
+ q(2262),
+ q(0),
+ ],
+ q(enf) => [
+ q(2263),
+ q(0),
+ ],
+ q(eng) => [
+ q(0123),
+ q(0),
+ ],
+ q(enh) => [
+ q(2264),
+ q(0),
+ ],
+ q(enm) => [
+ q(0124),
+ q(1),
+ ],
+ q(enn) => [
+ q(2265),
+ q(0),
+ ],
+ q(eno) => [
+ q(2266),
+ q(0),
+ ],
+ q(enq) => [
+ q(2267),
+ q(0),
+ ],
+ q(enr) => [
+ q(2268),
+ q(0),
+ ],
+ q(enu) => [
+ q(2269),
+ q(0),
+ ],
+ q(env) => [
+ q(2270),
+ q(0),
+ ],
+ q(enw) => [
+ q(2271),
+ q(0),
+ ],
+ q(eot) => [
+ q(2272),
+ q(0),
+ ],
+ q(epi) => [
+ q(2273),
+ q(0),
+ ],
+ q(epo) => [
+ q(0125),
+ q(0),
+ ],
+ q(era) => [
+ q(2274),
+ q(0),
+ ],
+ q(erg) => [
+ q(2275),
+ q(0),
+ ],
+ q(erh) => [
+ q(2276),
+ q(0),
+ ],
+ q(eri) => [
+ q(2277),
+ q(0),
+ ],
+ q(erk) => [
+ q(2278),
+ q(0),
+ ],
+ q(ero) => [
+ q(2279),
+ q(0),
+ ],
+ q(err) => [
+ q(2280),
+ q(0),
+ ],
+ q(ers) => [
+ q(2281),
+ q(0),
+ ],
+ q(ert) => [
+ q(2282),
+ q(0),
+ ],
+ q(erw) => [
+ q(2283),
+ q(0),
+ ],
+ q(ese) => [
+ q(2284),
+ q(0),
+ ],
+ q(esh) => [
+ q(2285),
+ q(0),
+ ],
+ q(esi) => [
+ q(2286),
+ q(0),
+ ],
+ q(esk) => [
+ q(2287),
+ q(0),
+ ],
+ q(esl) => [
+ q(2288),
+ q(0),
+ ],
+ q(esm) => [
+ q(2289),
+ q(0),
+ ],
+ q(esn) => [
+ q(2290),
+ q(0),
+ ],
+ q(eso) => [
+ q(2291),
+ q(0),
+ ],
+ q(esq) => [
+ q(2292),
+ q(0),
+ ],
+ q(ess) => [
+ q(2293),
+ q(0),
+ ],
+ q(est) => [
+ q(0126),
+ q(0),
+ ],
+ q(esu) => [
+ q(2294),
+ q(0),
+ ],
+ q(esx) => [
+ q(0502),
+ q(0),
+ ],
+ q(etb) => [
+ q(2295),
+ q(0),
+ ],
+ q(etc) => [
+ q(2296),
+ q(0),
+ ],
+ q(eth) => [
+ q(2297),
+ q(0),
+ ],
+ q(etn) => [
+ q(2298),
+ q(0),
+ ],
+ q(eto) => [
+ q(2299),
+ q(0),
+ ],
+ q(etr) => [
+ q(2300),
+ q(0),
+ ],
+ q(ets) => [
+ q(2301),
+ q(0),
+ ],
+ q(ett) => [
+ q(2302),
+ q(0),
+ ],
+ q(etu) => [
+ q(2303),
+ q(0),
+ ],
+ q(etx) => [
+ q(2304),
+ q(0),
+ ],
+ q(etz) => [
+ q(2305),
+ q(0),
+ ],
+ q(euq) => [
+ q(0503),
+ q(0),
+ ],
+ q(eve) => [
+ q(2306),
+ q(0),
+ ],
+ q(evh) => [
+ q(2307),
+ q(0),
+ ],
+ q(evn) => [
+ q(2308),
+ q(0),
+ ],
+ q(ewe) => [
+ q(0127),
+ q(0),
+ ],
+ q(ewo) => [
+ q(0128),
+ q(0),
+ ],
+ q(ext) => [
+ q(2309),
+ q(0),
+ ],
+ q(eya) => [
+ q(2310),
+ q(0),
+ ],
+ q(eyo) => [
+ q(2311),
+ q(0),
+ ],
+ q(eze) => [
+ q(2312),
+ q(0),
+ ],
+ q(faa) => [
+ q(2313),
+ q(0),
+ ],
+ q(fab) => [
+ q(2314),
+ q(0),
+ ],
+ q(fad) => [
+ q(2315),
+ q(0),
+ ],
+ q(faf) => [
+ q(2316),
+ q(0),
+ ],
+ q(fag) => [
+ q(2317),
+ q(0),
+ ],
+ q(fah) => [
+ q(2318),
+ q(0),
+ ],
+ q(fai) => [
+ q(2319),
+ q(0),
+ ],
+ q(faj) => [
+ q(2320),
+ q(0),
+ ],
+ q(fak) => [
+ q(2321),
+ q(0),
+ ],
+ q(fal) => [
+ q(2322),
+ q(0),
+ ],
+ q(fam) => [
+ q(2323),
+ q(0),
+ ],
+ q(fan) => [
+ q(0129),
+ q(1),
+ ],
+ q(fao) => [
+ q(0130),
+ q(0),
+ ],
+ q(fap) => [
+ q(2324),
+ q(0),
+ ],
+ q(far) => [
+ q(2325),
+ q(0),
+ ],
+ q(fat) => [
+ q(0131),
+ q(0),
+ ],
+ q(fau) => [
+ q(2326),
+ q(0),
+ ],
+ q(fax) => [
+ q(2327),
+ q(0),
+ ],
+ q(fay) => [
+ q(2328),
+ q(0),
+ ],
+ q(faz) => [
+ q(2329),
+ q(0),
+ ],
+ q(fbl) => [
+ q(2330),
+ q(0),
+ ],
+ q(fcs) => [
+ q(2331),
+ q(0),
+ ],
+ q(fer) => [
+ q(2332),
+ q(0),
+ ],
+ q(ffi) => [
+ q(2333),
+ q(0),
+ ],
+ q(ffm) => [
+ q(2334),
+ q(0),
+ ],
+ q(fgr) => [
+ q(2335),
+ q(0),
+ ],
+ q(fia) => [
+ q(2336),
+ q(0),
+ ],
+ q(fie) => [
+ q(2337),
+ q(0),
+ ],
+ q(fij) => [
+ q(0132),
+ q(0),
+ ],
+ q(fil) => [
+ q(0133),
+ q(0),
+ ],
+ q(fin) => [
+ q(0134),
+ q(0),
+ ],
+ q(fip) => [
+ q(2338),
+ q(0),
+ ],
+ q(fir) => [
+ q(2339),
+ q(0),
+ ],
+ q(fit) => [
+ q(2340),
+ q(0),
+ ],
+ q(fiu) => [
+ q(0135),
+ q(0),
+ ],
+ q(fiw) => [
+ q(2341),
+ q(0),
+ ],
+ q(fkk) => [
+ q(2342),
+ q(0),
+ ],
+ q(fkv) => [
+ q(2343),
+ q(0),
+ ],
+ q(fla) => [
+ q(2344),
+ q(0),
+ ],
+ q(flh) => [
+ q(2345),
+ q(0),
+ ],
+ q(fli) => [
+ q(2346),
+ q(0),
+ ],
+ q(fll) => [
+ q(2347),
+ q(0),
+ ],
+ q(fln) => [
+ q(2348),
+ q(0),
+ ],
+ q(flr) => [
+ q(2349),
+ q(0),
+ ],
+ q(fly) => [
+ q(2350),
+ q(0),
+ ],
+ q(fmp) => [
+ q(2351),
+ q(0),
+ ],
+ q(fmu) => [
+ q(2352),
+ q(0),
+ ],
+ q(fng) => [
+ q(2353),
+ q(0),
+ ],
+ q(fni) => [
+ q(2354),
+ q(0),
+ ],
+ q(fod) => [
+ q(2355),
+ q(0),
+ ],
+ q(foi) => [
+ q(2356),
+ q(0),
+ ],
+ q(fom) => [
+ q(2357),
+ q(0),
+ ],
+ q(fon) => [
+ q(0136),
+ q(0),
+ ],
+ q(for) => [
+ q(2358),
+ q(0),
+ ],
+ q(fos) => [
+ q(2359),
+ q(0),
+ ],
+ q(fox) => [
+ q(0504),
+ q(0),
+ ],
+ q(fpe) => [
+ q(2360),
+ q(0),
+ ],
+ q(fqs) => [
+ q(2361),
+ q(0),
+ ],
+ q(frc) => [
+ q(2362),
+ q(0),
+ ],
+ q(frd) => [
+ q(2363),
+ q(0),
+ ],
+ q(fre) => [
+ q(0137),
+ q(0),
+ ],
+ q(frk) => [
+ q(2364),
+ q(0),
+ ],
+ q(frm) => [
+ q(0138),
+ q(1),
+ ],
+ q(fro) => [
+ q(0139),
+ q(1),
+ ],
+ q(frp) => [
+ q(2365),
+ q(0),
+ ],
+ q(frq) => [
+ q(2366),
+ q(0),
+ ],
+ q(frr) => [
+ q(0140),
+ q(0),
+ ],
+ q(frs) => [
+ q(0141),
+ q(0),
+ ],
+ q(frt) => [
+ q(2367),
+ q(0),
+ ],
+ q(fry) => [
+ q(0142),
+ q(0),
+ ],
+ q(fse) => [
+ q(2368),
+ q(0),
+ ],
+ q(fsl) => [
+ q(2369),
+ q(0),
+ ],
+ q(fss) => [
+ q(2370),
+ q(0),
+ ],
+ q(fub) => [
+ q(2371),
+ q(0),
+ ],
+ q(fuc) => [
+ q(2372),
+ q(0),
+ ],
+ q(fud) => [
+ q(2373),
+ q(0),
+ ],
+ q(fue) => [
+ q(2374),
+ q(0),
+ ],
+ q(fuf) => [
+ q(2375),
+ q(0),
+ ],
+ q(fuh) => [
+ q(2376),
+ q(0),
+ ],
+ q(fui) => [
+ q(2377),
+ q(0),
+ ],
+ q(fuj) => [
+ q(2378),
+ q(0),
+ ],
+ q(ful) => [
+ q(0143),
+ q(0),
+ ],
+ q(fum) => [
+ q(2379),
+ q(0),
+ ],
+ q(fun) => [
+ q(2380),
+ q(0),
+ ],
+ q(fuq) => [
+ q(2381),
+ q(0),
+ ],
+ q(fur) => [
+ q(0144),
+ q(0),
+ ],
+ q(fut) => [
+ q(2382),
+ q(0),
+ ],
+ q(fuu) => [
+ q(2383),
+ q(0),
+ ],
+ q(fuv) => [
+ q(2384),
+ q(0),
+ ],
+ q(fuy) => [
+ q(2385),
+ q(0),
+ ],
+ q(fvr) => [
+ q(2386),
+ q(0),
+ ],
+ q(fwa) => [
+ q(2387),
+ q(0),
+ ],
+ q(fwe) => [
+ q(2388),
+ q(0),
+ ],
+ q(gaa) => [
+ q(0145),
+ q(0),
+ ],
+ q(gab) => [
+ q(2389),
+ q(0),
+ ],
+ q(gac) => [
+ q(2390),
+ q(0),
+ ],
+ q(gad) => [
+ q(2391),
+ q(0),
+ ],
+ q(gae) => [
+ q(2392),
+ q(0),
+ ],
+ q(gaf) => [
+ q(2393),
+ q(0),
+ ],
+ q(gag) => [
+ q(2394),
+ q(0),
+ ],
+ q(gah) => [
+ q(2395),
+ q(0),
+ ],
+ q(gai) => [
+ q(2396),
+ q(0),
+ ],
+ q(gaj) => [
+ q(2397),
+ q(0),
+ ],
+ q(gak) => [
+ q(2398),
+ q(0),
+ ],
+ q(gal) => [
+ q(2399),
+ q(0),
+ ],
+ q(gam) => [
+ q(2400),
+ q(0),
+ ],
+ q(gan) => [
+ q(2401),
+ q(0),
+ ],
+ q(gao) => [
+ q(2402),
+ q(0),
+ ],
+ q(gap) => [
+ q(2403),
+ q(0),
+ ],
+ q(gaq) => [
+ q(2404),
+ q(0),
+ ],
+ q(gar) => [
+ q(2405),
+ q(0),
+ ],
+ q(gas) => [
+ q(2406),
+ q(0),
+ ],
+ q(gat) => [
+ q(2407),
+ q(0),
+ ],
+ q(gau) => [
+ q(2408),
+ q(0),
+ ],
+ q(gaw) => [
+ q(2409),
+ q(0),
+ ],
+ q(gax) => [
+ q(2410),
+ q(0),
+ ],
+ q(gay) => [
+ q(0146),
+ q(0),
+ ],
+ q(gaz) => [
+ q(2411),
+ q(0),
+ ],
+ q(gba) => [
+ q(0147),
+ q(1),
+ ],
+ q(gbb) => [
+ q(2412),
+ q(0),
+ ],
+ q(gbd) => [
+ q(2413),
+ q(0),
+ ],
+ q(gbe) => [
+ q(2414),
+ q(0),
+ ],
+ q(gbf) => [
+ q(2415),
+ q(0),
+ ],
+ q(gbg) => [
+ q(2416),
+ q(0),
+ ],
+ q(gbh) => [
+ q(2417),
+ q(0),
+ ],
+ q(gbi) => [
+ q(2418),
+ q(0),
+ ],
+ q(gbj) => [
+ q(2419),
+ q(0),
+ ],
+ q(gbk) => [
+ q(2420),
+ q(0),
+ ],
+ q(gbl) => [
+ q(2421),
+ q(0),
+ ],
+ q(gbm) => [
+ q(2422),
+ q(0),
+ ],
+ q(gbn) => [
+ q(2423),
+ q(0),
+ ],
+ q(gbo) => [
+ q(2424),
+ q(0),
+ ],
+ q(gbp) => [
+ q(2425),
+ q(0),
+ ],
+ q(gbq) => [
+ q(2426),
+ q(0),
+ ],
+ q(gbr) => [
+ q(2427),
+ q(0),
+ ],
+ q(gbs) => [
+ q(2428),
+ q(0),
+ ],
+ q(gbu) => [
+ q(2429),
+ q(0),
+ ],
+ q(gbv) => [
+ q(2430),
+ q(0),
+ ],
+ q(gbx) => [
+ q(2431),
+ q(0),
+ ],
+ q(gby) => [
+ q(2432),
+ q(0),
+ ],
+ q(gbz) => [
+ q(2433),
+ q(0),
+ ],
+ q(gcc) => [
+ q(2434),
+ q(0),
+ ],
+ q(gcd) => [
+ q(2435),
+ q(0),
+ ],
+ q(gce) => [
+ q(2436),
+ q(0),
+ ],
+ q(gcf) => [
+ q(2437),
+ q(0),
+ ],
+ q(gcl) => [
+ q(2438),
+ q(0),
+ ],
+ q(gcn) => [
+ q(2439),
+ q(0),
+ ],
+ q(gcr) => [
+ q(2440),
+ q(0),
+ ],
+ q(gct) => [
+ q(2441),
+ q(0),
+ ],
+ q(gda) => [
+ q(2442),
+ q(0),
+ ],
+ q(gdb) => [
+ q(2443),
+ q(0),
+ ],
+ q(gdc) => [
+ q(2444),
+ q(0),
+ ],
+ q(gdd) => [
+ q(2445),
+ q(0),
+ ],
+ q(gde) => [
+ q(2446),
+ q(0),
+ ],
+ q(gdf) => [
+ q(2447),
+ q(0),
+ ],
+ q(gdg) => [
+ q(2448),
+ q(0),
+ ],
+ q(gdh) => [
+ q(2449),
+ q(0),
+ ],
+ q(gdi) => [
+ q(2450),
+ q(0),
+ ],
+ q(gdj) => [
+ q(2451),
+ q(0),
+ ],
+ q(gdk) => [
+ q(2452),
+ q(0),
+ ],
+ q(gdl) => [
+ q(2453),
+ q(0),
+ ],
+ q(gdm) => [
+ q(2454),
+ q(0),
+ ],
+ q(gdn) => [
+ q(2455),
+ q(0),
+ ],
+ q(gdo) => [
+ q(2456),
+ q(0),
+ ],
+ q(gdq) => [
+ q(2457),
+ q(0),
+ ],
+ q(gdr) => [
+ q(2458),
+ q(0),
+ ],
+ q(gds) => [
+ q(2459),
+ q(0),
+ ],
+ q(gdu) => [
+ q(2460),
+ q(0),
+ ],
+ q(gdx) => [
+ q(2461),
+ q(0),
+ ],
+ q(gea) => [
+ q(2462),
+ q(0),
+ ],
+ q(geb) => [
+ q(2463),
+ q(0),
+ ],
+ q(gec) => [
+ q(2464),
+ q(0),
+ ],
+ q(ged) => [
+ q(2465),
+ q(0),
+ ],
+ q(geg) => [
+ q(2466),
+ q(0),
+ ],
+ q(geh) => [
+ q(2467),
+ q(0),
+ ],
+ q(gei) => [
+ q(2468),
+ q(0),
+ ],
+ q(gej) => [
+ q(2469),
+ q(0),
+ ],
+ q(gek) => [
+ q(2470),
+ q(0),
+ ],
+ q(gel) => [
+ q(2471),
+ q(0),
+ ],
+ q(gem) => [
+ q(0148),
+ q(0),
+ ],
+ q(geo) => [
+ q(0149),
+ q(0),
+ ],
+ q(geq) => [
+ q(2472),
+ q(0),
+ ],
+ q(ger) => [
+ q(0150),
+ q(0),
+ ],
+ q(ges) => [
+ q(2473),
+ q(0),
+ ],
+ q(gew) => [
+ q(2474),
+ q(0),
+ ],
+ q(gex) => [
+ q(2475),
+ q(0),
+ ],
+ q(gey) => [
+ q(2476),
+ q(0),
+ ],
+ q(gez) => [
+ q(0151),
+ q(0),
+ ],
+ q(gfk) => [
+ q(2477),
+ q(0),
+ ],
+ q(gft) => [
+ q(2478),
+ q(0),
+ ],
+ q(gfx) => [
+ q(2479),
+ q(0),
+ ],
+ q(gga) => [
+ q(2480),
+ q(0),
+ ],
+ q(ggb) => [
+ q(2481),
+ q(0),
+ ],
+ q(ggd) => [
+ q(2482),
+ q(0),
+ ],
+ q(gge) => [
+ q(2483),
+ q(0),
+ ],
+ q(ggg) => [
+ q(2484),
+ q(0),
+ ],
+ q(ggk) => [
+ q(2485),
+ q(0),
+ ],
+ q(ggl) => [
+ q(2486),
+ q(0),
+ ],
+ q(ggn) => [
+ q(2487),
+ q(0),
+ ],
+ q(ggo) => [
+ q(2488),
+ q(0),
+ ],
+ q(ggr) => [
+ q(2489),
+ q(0),
+ ],
+ q(ggt) => [
+ q(2490),
+ q(0),
+ ],
+ q(ggu) => [
+ q(2491),
+ q(0),
+ ],
+ q(ggw) => [
+ q(2492),
+ q(0),
+ ],
+ q(gha) => [
+ q(2493),
+ q(0),
+ ],
+ q(ghc) => [
+ q(2494),
+ q(0),
+ ],
+ q(ghe) => [
+ q(2495),
+ q(0),
+ ],
+ q(ghh) => [
+ q(2496),
+ q(0),
+ ],
+ q(ghk) => [
+ q(2497),
+ q(0),
+ ],
+ q(ghl) => [
+ q(2498),
+ q(0),
+ ],
+ q(ghn) => [
+ q(2499),
+ q(0),
+ ],
+ q(gho) => [
+ q(2500),
+ q(0),
+ ],
+ q(ghr) => [
+ q(2501),
+ q(0),
+ ],
+ q(ghs) => [
+ q(2502),
+ q(0),
+ ],
+ q(ght) => [
+ q(2503),
+ q(0),
+ ],
+ q(gia) => [
+ q(2504),
+ q(0),
+ ],
+ q(gib) => [
+ q(2505),
+ q(0),
+ ],
+ q(gic) => [
+ q(2506),
+ q(0),
+ ],
+ q(gid) => [
+ q(2507),
+ q(0),
+ ],
+ q(gig) => [
+ q(2508),
+ q(0),
+ ],
+ q(gil) => [
+ q(0152),
+ q(0),
+ ],
+ q(gim) => [
+ q(2509),
+ q(0),
+ ],
+ q(gin) => [
+ q(2510),
+ q(0),
+ ],
+ q(gip) => [
+ q(2511),
+ q(0),
+ ],
+ q(giq) => [
+ q(2512),
+ q(0),
+ ],
+ q(gir) => [
+ q(2513),
+ q(0),
+ ],
+ q(gis) => [
+ q(2514),
+ q(0),
+ ],
+ q(git) => [
+ q(2515),
+ q(0),
+ ],
+ q(giu) => [
+ q(2516),
+ q(0),
+ ],
+ q(giw) => [
+ q(2517),
+ q(0),
+ ],
+ q(gix) => [
+ q(2518),
+ q(0),
+ ],
+ q(giy) => [
+ q(2519),
+ q(0),
+ ],
+ q(giz) => [
+ q(2520),
+ q(0),
+ ],
+ q(gji) => [
+ q(2521),
+ q(0),
+ ],
+ q(gjk) => [
+ q(2522),
+ q(0),
+ ],
+ q(gjn) => [
+ q(2523),
+ q(0),
+ ],
+ q(gju) => [
+ q(2524),
+ q(0),
+ ],
+ q(gka) => [
+ q(2525),
+ q(0),
+ ],
+ q(gke) => [
+ q(2526),
+ q(0),
+ ],
+ q(gkn) => [
+ q(2527),
+ q(0),
+ ],
+ q(gko) => [
+ q(2528),
+ q(0),
+ ],
+ q(gkp) => [
+ q(2529),
+ q(0),
+ ],
+ q(gla) => [
+ q(0153),
+ q(0),
+ ],
+ q(glc) => [
+ q(2530),
+ q(0),
+ ],
+ q(gld) => [
+ q(2531),
+ q(0),
+ ],
+ q(gle) => [
+ q(0154),
+ q(0),
+ ],
+ q(glg) => [
+ q(0155),
+ q(0),
+ ],
+ q(glh) => [
+ q(2532),
+ q(0),
+ ],
+ q(gli) => [
+ q(2533),
+ q(0),
+ ],
+ q(glj) => [
+ q(2534),
+ q(0),
+ ],
+ q(glk) => [
+ q(2535),
+ q(0),
+ ],
+ q(glo) => [
+ q(2536),
+ q(0),
+ ],
+ q(glr) => [
+ q(2537),
+ q(0),
+ ],
+ q(glu) => [
+ q(2538),
+ q(0),
+ ],
+ q(glv) => [
+ q(0156),
+ q(0),
+ ],
+ q(glw) => [
+ q(2539),
+ q(0),
+ ],
+ q(gly) => [
+ q(2540),
+ q(0),
+ ],
+ q(gma) => [
+ q(2541),
+ q(0),
+ ],
+ q(gmb) => [
+ q(2542),
+ q(0),
+ ],
+ q(gmd) => [
+ q(2543),
+ q(0),
+ ],
+ q(gme) => [
+ q(0505),
+ q(0),
+ ],
+ q(gmh) => [
+ q(0157),
+ q(1),
+ ],
+ q(gml) => [
+ q(2544),
+ q(0),
+ ],
+ q(gmm) => [
+ q(2545),
+ q(0),
+ ],
+ q(gmn) => [
+ q(2546),
+ q(0),
+ ],
+ q(gmq) => [
+ q(0506),
+ q(0),
+ ],
+ q(gmu) => [
+ q(2547),
+ q(0),
+ ],
+ q(gmv) => [
+ q(2548),
+ q(0),
+ ],
+ q(gmw) => [
+ q(0507),
+ q(0),
+ ],
+ q(gmx) => [
+ q(2549),
+ q(0),
+ ],
+ q(gmy) => [
+ q(2550),
+ q(0),
+ ],
+ q(gna) => [
+ q(2551),
+ q(0),
+ ],
+ q(gnb) => [
+ q(2552),
+ q(0),
+ ],
+ q(gnc) => [
+ q(2553),
+ q(0),
+ ],
+ q(gnd) => [
+ q(2554),
+ q(0),
+ ],
+ q(gne) => [
+ q(2555),
+ q(0),
+ ],
+ q(gng) => [
+ q(2556),
+ q(0),
+ ],
+ q(gnh) => [
+ q(2557),
+ q(0),
+ ],
+ q(gni) => [
+ q(2558),
+ q(0),
+ ],
+ q(gnk) => [
+ q(2559),
+ q(0),
+ ],
+ q(gnl) => [
+ q(2560),
+ q(0),
+ ],
+ q(gnm) => [
+ q(2561),
+ q(0),
+ ],
+ q(gnn) => [
+ q(2562),
+ q(0),
+ ],
+ q(gno) => [
+ q(2563),
+ q(0),
+ ],
+ q(gnq) => [
+ q(2564),
+ q(0),
+ ],
+ q(gnr) => [
+ q(2565),
+ q(0),
+ ],
+ q(gnt) => [
+ q(2566),
+ q(0),
+ ],
+ q(gnu) => [
+ q(2567),
+ q(0),
+ ],
+ q(gnw) => [
+ q(2568),
+ q(0),
+ ],
+ q(gnz) => [
+ q(2569),
+ q(0),
+ ],
+ q(goa) => [
+ q(2570),
+ q(0),
+ ],
+ q(gob) => [
+ q(2571),
+ q(0),
+ ],
+ q(goc) => [
+ q(2572),
+ q(0),
+ ],
+ q(god) => [
+ q(2573),
+ q(0),
+ ],
+ q(goe) => [
+ q(2574),
+ q(0),
+ ],
+ q(gof) => [
+ q(2575),
+ q(0),
+ ],
+ q(gog) => [
+ q(2576),
+ q(0),
+ ],
+ q(goh) => [
+ q(0158),
+ q(1),
+ ],
+ q(goi) => [
+ q(2577),
+ q(0),
+ ],
+ q(goj) => [
+ q(2578),
+ q(0),
+ ],
+ q(gok) => [
+ q(2579),
+ q(0),
+ ],
+ q(gol) => [
+ q(2580),
+ q(0),
+ ],
+ q(gom) => [
+ q(2581),
+ q(0),
+ ],
+ q(gon) => [
+ q(0159),
+ q(0),
+ ],
+ q(goo) => [
+ q(2582),
+ q(0),
+ ],
+ q(gop) => [
+ q(2583),
+ q(0),
+ ],
+ q(goq) => [
+ q(2584),
+ q(0),
+ ],
+ q(gor) => [
+ q(0160),
+ q(0),
+ ],
+ q(gos) => [
+ q(2585),
+ q(0),
+ ],
+ q(got) => [
+ q(0161),
+ q(0),
+ ],
+ q(gou) => [
+ q(2586),
+ q(0),
+ ],
+ q(gow) => [
+ q(2587),
+ q(0),
+ ],
+ q(gox) => [
+ q(2588),
+ q(0),
+ ],
+ q(goy) => [
+ q(2589),
+ q(0),
+ ],
+ q(goz) => [
+ q(2590),
+ q(0),
+ ],
+ q(gpa) => [
+ q(2591),
+ q(0),
+ ],
+ q(gpe) => [
+ q(2592),
+ q(0),
+ ],
+ q(gpn) => [
+ q(2593),
+ q(0),
+ ],
+ q(gqa) => [
+ q(2594),
+ q(0),
+ ],
+ q(gqi) => [
+ q(2595),
+ q(0),
+ ],
+ q(gqn) => [
+ q(2596),
+ q(0),
+ ],
+ q(gqr) => [
+ q(2597),
+ q(0),
+ ],
+ q(gqu) => [
+ q(2598),
+ q(0),
+ ],
+ q(gra) => [
+ q(2599),
+ q(0),
+ ],
+ q(grb) => [
+ q(0162),
+ q(0),
+ ],
+ q(grc) => [
+ q(0163),
+ q(1),
+ ],
+ q(grd) => [
+ q(2600),
+ q(0),
+ ],
+ q(gre) => [
+ q(0164),
+ q(0),
+ ],
+ q(grg) => [
+ q(2601),
+ q(0),
+ ],
+ q(grh) => [
+ q(2602),
+ q(0),
+ ],
+ q(gri) => [
+ q(2603),
+ q(0),
+ ],
+ q(grj) => [
+ q(2604),
+ q(0),
+ ],
+ q(grk) => [
+ q(0508),
+ q(0),
+ ],
+ q(grm) => [
+ q(2605),
+ q(0),
+ ],
+ q(grn) => [
+ q(0165),
+ q(0),
+ ],
+ q(gro) => [
+ q(2606),
+ q(0),
+ ],
+ q(grq) => [
+ q(2607),
+ q(0),
+ ],
+ q(grr) => [
+ q(2608),
+ q(0),
+ ],
+ q(grs) => [
+ q(2609),
+ q(0),
+ ],
+ q(grt) => [
+ q(2610),
+ q(0),
+ ],
+ q(gru) => [
+ q(2611),
+ q(0),
+ ],
+ q(grv) => [
+ q(2612),
+ q(0),
+ ],
+ q(grw) => [
+ q(2613),
+ q(0),
+ ],
+ q(grx) => [
+ q(2614),
+ q(0),
+ ],
+ q(gry) => [
+ q(2615),
+ q(0),
+ ],
+ q(grz) => [
+ q(2616),
+ q(0),
+ ],
+ q(gse) => [
+ q(2617),
+ q(0),
+ ],
+ q(gsg) => [
+ q(2618),
+ q(0),
+ ],
+ q(gsl) => [
+ q(2619),
+ q(0),
+ ],
+ q(gsm) => [
+ q(2620),
+ q(0),
+ ],
+ q(gsn) => [
+ q(2621),
+ q(0),
+ ],
+ q(gso) => [
+ q(2622),
+ q(0),
+ ],
+ q(gsp) => [
+ q(2623),
+ q(0),
+ ],
+ q(gss) => [
+ q(2624),
+ q(0),
+ ],
+ q(gsw) => [
+ q(0166),
+ q(0),
+ ],
+ q(gta) => [
+ q(2625),
+ q(0),
+ ],
+ q(gti) => [
+ q(2626),
+ q(0),
+ ],
+ q(gua) => [
+ q(2627),
+ q(0),
+ ],
+ q(gub) => [
+ q(2628),
+ q(0),
+ ],
+ q(guc) => [
+ q(2629),
+ q(0),
+ ],
+ q(gud) => [
+ q(2630),
+ q(0),
+ ],
+ q(gue) => [
+ q(2631),
+ q(0),
+ ],
+ q(guf) => [
+ q(2632),
+ q(0),
+ ],
+ q(gug) => [
+ q(2633),
+ q(0),
+ ],
+ q(guh) => [
+ q(2634),
+ q(0),
+ ],
+ q(gui) => [
+ q(2635),
+ q(0),
+ ],
+ q(guj) => [
+ q(0167),
+ q(0),
+ ],
+ q(guk) => [
+ q(2636),
+ q(0),
+ ],
+ q(gul) => [
+ q(2637),
+ q(0),
+ ],
+ q(gum) => [
+ q(2638),
+ q(0),
+ ],
+ q(gun) => [
+ q(2639),
+ q(0),
+ ],
+ q(guo) => [
+ q(2640),
+ q(0),
+ ],
+ q(gup) => [
+ q(2641),
+ q(0),
+ ],
+ q(guq) => [
+ q(2642),
+ q(0),
+ ],
+ q(gur) => [
+ q(2643),
+ q(0),
+ ],
+ q(gus) => [
+ q(2644),
+ q(0),
+ ],
+ q(gut) => [
+ q(2645),
+ q(0),
+ ],
+ q(guu) => [
+ q(2646),
+ q(0),
+ ],
+ q(guv) => [
+ q(2647),
+ q(0),
+ ],
+ q(guw) => [
+ q(2648),
+ q(0),
+ ],
+ q(gux) => [
+ q(2649),
+ q(0),
+ ],
+ q(guz) => [
+ q(2650),
+ q(0),
+ ],
+ q(gva) => [
+ q(2651),
+ q(0),
+ ],
+ q(gvc) => [
+ q(2652),
+ q(0),
+ ],
+ q(gve) => [
+ q(2653),
+ q(0),
+ ],
+ q(gvf) => [
+ q(2654),
+ q(0),
+ ],
+ q(gvj) => [
+ q(2655),
+ q(0),
+ ],
+ q(gvl) => [
+ q(2656),
+ q(0),
+ ],
+ q(gvm) => [
+ q(2657),
+ q(0),
+ ],
+ q(gvn) => [
+ q(2658),
+ q(0),
+ ],
+ q(gvo) => [
+ q(2659),
+ q(0),
+ ],
+ q(gvp) => [
+ q(2660),
+ q(0),
+ ],
+ q(gvr) => [
+ q(2661),
+ q(0),
+ ],
+ q(gvs) => [
+ q(2662),
+ q(0),
+ ],
+ q(gvy) => [
+ q(2663),
+ q(0),
+ ],
+ q(gwa) => [
+ q(2664),
+ q(0),
+ ],
+ q(gwb) => [
+ q(2665),
+ q(0),
+ ],
+ q(gwc) => [
+ q(2666),
+ q(0),
+ ],
+ q(gwd) => [
+ q(2667),
+ q(0),
+ ],
+ q(gwe) => [
+ q(2668),
+ q(0),
+ ],
+ q(gwf) => [
+ q(2669),
+ q(0),
+ ],
+ q(gwg) => [
+ q(2670),
+ q(0),
+ ],
+ q(gwi) => [
+ q(0168),
+ q(0),
+ ],
+ q(gwj) => [
+ q(2671),
+ q(0),
+ ],
+ q(gwm) => [
+ q(2672),
+ q(0),
+ ],
+ q(gwn) => [
+ q(2673),
+ q(0),
+ ],
+ q(gwr) => [
+ q(2674),
+ q(0),
+ ],
+ q(gwt) => [
+ q(2675),
+ q(0),
+ ],
+ q(gwu) => [
+ q(2676),
+ q(0),
+ ],
+ q(gww) => [
+ q(2677),
+ q(0),
+ ],
+ q(gwx) => [
+ q(2678),
+ q(0),
+ ],
+ q(gxx) => [
+ q(2679),
+ q(0),
+ ],
+ q(gya) => [
+ q(2680),
+ q(0),
+ ],
+ q(gyb) => [
+ q(2681),
+ q(0),
+ ],
+ q(gyd) => [
+ q(2682),
+ q(0),
+ ],
+ q(gye) => [
+ q(2683),
+ q(0),
+ ],
+ q(gyf) => [
+ q(2684),
+ q(0),
+ ],
+ q(gyg) => [
+ q(2685),
+ q(0),
+ ],
+ q(gyi) => [
+ q(2686),
+ q(0),
+ ],
+ q(gyl) => [
+ q(2687),
+ q(0),
+ ],
+ q(gym) => [
+ q(2688),
+ q(0),
+ ],
+ q(gyn) => [
+ q(2689),
+ q(0),
+ ],
+ q(gyr) => [
+ q(2690),
+ q(0),
+ ],
+ q(gyy) => [
+ q(2691),
+ q(0),
+ ],
+ q(gza) => [
+ q(2692),
+ q(0),
+ ],
+ q(gzi) => [
+ q(2693),
+ q(0),
+ ],
+ q(gzn) => [
+ q(2694),
+ q(0),
+ ],
+ q(haa) => [
+ q(2695),
+ q(0),
+ ],
+ q(hab) => [
+ q(2696),
+ q(0),
+ ],
+ q(hac) => [
+ q(2697),
+ q(0),
+ ],
+ q(had) => [
+ q(2698),
+ q(0),
+ ],
+ q(hae) => [
+ q(2699),
+ q(0),
+ ],
+ q(haf) => [
+ q(2700),
+ q(0),
+ ],
+ q(hag) => [
+ q(2701),
+ q(0),
+ ],
+ q(hah) => [
+ q(2702),
+ q(0),
+ ],
+ q(hai) => [
+ q(0169),
+ q(0),
+ ],
+ q(haj) => [
+ q(2703),
+ q(0),
+ ],
+ q(hak) => [
+ q(2704),
+ q(0),
+ ],
+ q(hal) => [
+ q(2705),
+ q(0),
+ ],
+ q(ham) => [
+ q(2706),
+ q(0),
+ ],
+ q(han) => [
+ q(2707),
+ q(0),
+ ],
+ q(hao) => [
+ q(2708),
+ q(0),
+ ],
+ q(hap) => [
+ q(2709),
+ q(0),
+ ],
+ q(haq) => [
+ q(2710),
+ q(0),
+ ],
+ q(har) => [
+ q(2711),
+ q(0),
+ ],
+ q(has) => [
+ q(2712),
+ q(0),
+ ],
+ q(hat) => [
+ q(0170),
+ q(0),
+ ],
+ q(hau) => [
+ q(0171),
+ q(0),
+ ],
+ q(hav) => [
+ q(2713),
+ q(0),
+ ],
+ q(haw) => [
+ q(0172),
+ q(0),
+ ],
+ q(hax) => [
+ q(2714),
+ q(0),
+ ],
+ q(hay) => [
+ q(2715),
+ q(0),
+ ],
+ q(haz) => [
+ q(2716),
+ q(0),
+ ],
+ q(hba) => [
+ q(2717),
+ q(0),
+ ],
+ q(hbb) => [
+ q(2718),
+ q(0),
+ ],
+ q(hbn) => [
+ q(2719),
+ q(0),
+ ],
+ q(hbo) => [
+ q(2720),
+ q(0),
+ ],
+ q(hbu) => [
+ q(2721),
+ q(0),
+ ],
+ q(hca) => [
+ q(2722),
+ q(0),
+ ],
+ q(hch) => [
+ q(2723),
+ q(0),
+ ],
+ q(hdn) => [
+ q(2724),
+ q(0),
+ ],
+ q(hds) => [
+ q(2725),
+ q(0),
+ ],
+ q(hdy) => [
+ q(2726),
+ q(0),
+ ],
+ q(hea) => [
+ q(2727),
+ q(0),
+ ],
+ q(heb) => [
+ q(0173),
+ q(0),
+ ],
+ q(hed) => [
+ q(2728),
+ q(0),
+ ],
+ q(heg) => [
+ q(2729),
+ q(0),
+ ],
+ q(heh) => [
+ q(2730),
+ q(0),
+ ],
+ q(hei) => [
+ q(2731),
+ q(0),
+ ],
+ q(hem) => [
+ q(2732),
+ q(0),
+ ],
+ q(her) => [
+ q(0174),
+ q(0),
+ ],
+ q(hgm) => [
+ q(2733),
+ q(0),
+ ],
+ q(hgw) => [
+ q(2734),
+ q(0),
+ ],
+ q(hhi) => [
+ q(2735),
+ q(0),
+ ],
+ q(hhr) => [
+ q(2736),
+ q(0),
+ ],
+ q(hhy) => [
+ q(2737),
+ q(0),
+ ],
+ q(hia) => [
+ q(2738),
+ q(0),
+ ],
+ q(hib) => [
+ q(2739),
+ q(0),
+ ],
+ q(hid) => [
+ q(2740),
+ q(0),
+ ],
+ q(hif) => [
+ q(2741),
+ q(0),
+ ],
+ q(hig) => [
+ q(2742),
+ q(0),
+ ],
+ q(hih) => [
+ q(2743),
+ q(0),
+ ],
+ q(hii) => [
+ q(2744),
+ q(0),
+ ],
+ q(hij) => [
+ q(2745),
+ q(0),
+ ],
+ q(hik) => [
+ q(2746),
+ q(0),
+ ],
+ q(hil) => [
+ q(0175),
+ q(0),
+ ],
+ q(him) => [
+ q(0176),
+ q(0),
+ ],
+ q(hin) => [
+ q(0177),
+ q(0),
+ ],
+ q(hio) => [
+ q(2747),
+ q(0),
+ ],
+ q(hir) => [
+ q(2748),
+ q(0),
+ ],
+ q(hit) => [
+ q(0178),
+ q(0),
+ ],
+ q(hiw) => [
+ q(2749),
+ q(0),
+ ],
+ q(hix) => [
+ q(2750),
+ q(0),
+ ],
+ q(hji) => [
+ q(2751),
+ q(0),
+ ],
+ q(hka) => [
+ q(2752),
+ q(0),
+ ],
+ q(hke) => [
+ q(2753),
+ q(0),
+ ],
+ q(hkk) => [
+ q(2754),
+ q(0),
+ ],
+ q(hks) => [
+ q(2755),
+ q(0),
+ ],
+ q(hla) => [
+ q(2756),
+ q(0),
+ ],
+ q(hlb) => [
+ q(2757),
+ q(0),
+ ],
+ q(hld) => [
+ q(2758),
+ q(0),
+ ],
+ q(hle) => [
+ q(2759),
+ q(0),
+ ],
+ q(hlt) => [
+ q(2760),
+ q(0),
+ ],
+ q(hlu) => [
+ q(2761),
+ q(0),
+ ],
+ q(hma) => [
+ q(2762),
+ q(0),
+ ],
+ q(hmb) => [
+ q(2763),
+ q(0),
+ ],
+ q(hmc) => [
+ q(2764),
+ q(0),
+ ],
+ q(hmd) => [
+ q(2765),
+ q(0),
+ ],
+ q(hme) => [
+ q(2766),
+ q(0),
+ ],
+ q(hmf) => [
+ q(2767),
+ q(0),
+ ],
+ q(hmg) => [
+ q(2768),
+ q(0),
+ ],
+ q(hmh) => [
+ q(2769),
+ q(0),
+ ],
+ q(hmi) => [
+ q(2770),
+ q(0),
+ ],
+ q(hmj) => [
+ q(2771),
+ q(0),
+ ],
+ q(hmk) => [
+ q(2772),
+ q(0),
+ ],
+ q(hml) => [
+ q(2773),
+ q(0),
+ ],
+ q(hmm) => [
+ q(2774),
+ q(0),
+ ],
+ q(hmn) => [
+ q(0179),
+ q(0),
+ ],
+ q(hmo) => [
+ q(0180),
+ q(0),
+ ],
+ q(hmp) => [
+ q(2775),
+ q(0),
+ ],
+ q(hmq) => [
+ q(2776),
+ q(0),
+ ],
+ q(hmr) => [
+ q(2777),
+ q(0),
+ ],
+ q(hms) => [
+ q(2778),
+ q(0),
+ ],
+ q(hmt) => [
+ q(2779),
+ q(0),
+ ],
+ q(hmu) => [
+ q(2780),
+ q(0),
+ ],
+ q(hmv) => [
+ q(2781),
+ q(0),
+ ],
+ q(hmw) => [
+ q(2782),
+ q(0),
+ ],
+ q(hmx) => [
+ q(0509),
+ q(0),
+ ],
+ q(hmy) => [
+ q(2783),
+ q(0),
+ ],
+ q(hmz) => [
+ q(2784),
+ q(0),
+ ],
+ q(hna) => [
+ q(2785),
+ q(0),
+ ],
+ q(hnd) => [
+ q(2786),
+ q(0),
+ ],
+ q(hne) => [
+ q(2787),
+ q(0),
+ ],
+ q(hnh) => [
+ q(2788),
+ q(0),
+ ],
+ q(hni) => [
+ q(2789),
+ q(0),
+ ],
+ q(hnj) => [
+ q(2790),
+ q(0),
+ ],
+ q(hnn) => [
+ q(2791),
+ q(0),
+ ],
+ q(hno) => [
+ q(2792),
+ q(0),
+ ],
+ q(hns) => [
+ q(2793),
+ q(0),
+ ],
+ q(hnu) => [
+ q(2794),
+ q(0),
+ ],
+ q(hoa) => [
+ q(2795),
+ q(0),
+ ],
+ q(hob) => [
+ q(2796),
+ q(0),
+ ],
+ q(hoc) => [
+ q(2797),
+ q(0),
+ ],
+ q(hod) => [
+ q(2798),
+ q(0),
+ ],
+ q(hoe) => [
+ q(2799),
+ q(0),
+ ],
+ q(hoh) => [
+ q(2800),
+ q(0),
+ ],
+ q(hoi) => [
+ q(2801),
+ q(0),
+ ],
+ q(hoj) => [
+ q(2802),
+ q(0),
+ ],
+ q(hok) => [
+ q(0510),
+ q(0),
+ ],
+ q(hol) => [
+ q(2803),
+ q(0),
+ ],
+ q(hom) => [
+ q(2804),
+ q(0),
+ ],
+ q(hoo) => [
+ q(2805),
+ q(0),
+ ],
+ q(hop) => [
+ q(2806),
+ q(0),
+ ],
+ q(hor) => [
+ q(2807),
+ q(0),
+ ],
+ q(hos) => [
+ q(2808),
+ q(0),
+ ],
+ q(hot) => [
+ q(2809),
+ q(0),
+ ],
+ q(hov) => [
+ q(2810),
+ q(0),
+ ],
+ q(how) => [
+ q(2811),
+ q(0),
+ ],
+ q(hoy) => [
+ q(2812),
+ q(0),
+ ],
+ q(hoz) => [
+ q(2813),
+ q(0),
+ ],
+ q(hpo) => [
+ q(2814),
+ q(0),
+ ],
+ q(hps) => [
+ q(2815),
+ q(0),
+ ],
+ q(hra) => [
+ q(2816),
+ q(0),
+ ],
+ q(hre) => [
+ q(2817),
+ q(0),
+ ],
+ q(hrk) => [
+ q(2818),
+ q(0),
+ ],
+ q(hrm) => [
+ q(2819),
+ q(0),
+ ],
+ q(hro) => [
+ q(2820),
+ q(0),
+ ],
+ q(hrt) => [
+ q(2821),
+ q(0),
+ ],
+ q(hru) => [
+ q(2822),
+ q(0),
+ ],
+ q(hrv) => [
+ q(0181),
+ q(0),
+ ],
+ q(hrx) => [
+ q(2823),
+ q(0),
+ ],
+ q(hrz) => [
+ q(2824),
+ q(0),
+ ],
+ q(hsb) => [
+ q(0182),
+ q(0),
+ ],
+ q(hsh) => [
+ q(2825),
+ q(0),
+ ],
+ q(hsl) => [
+ q(2826),
+ q(0),
+ ],
+ q(hsn) => [
+ q(2827),
+ q(0),
+ ],
+ q(hss) => [
+ q(2828),
+ q(0),
+ ],
+ q(hti) => [
+ q(2829),
+ q(0),
+ ],
+ q(hto) => [
+ q(2830),
+ q(0),
+ ],
+ q(hts) => [
+ q(2831),
+ q(0),
+ ],
+ q(htu) => [
+ q(2832),
+ q(0),
+ ],
+ q(htx) => [
+ q(2833),
+ q(0),
+ ],
+ q(hub) => [
+ q(2834),
+ q(0),
+ ],
+ q(huc) => [
+ q(2835),
+ q(0),
+ ],
+ q(hud) => [
+ q(2836),
+ q(0),
+ ],
+ q(hue) => [
+ q(2837),
+ q(0),
+ ],
+ q(huf) => [
+ q(2838),
+ q(0),
+ ],
+ q(hug) => [
+ q(2839),
+ q(0),
+ ],
+ q(huh) => [
+ q(2840),
+ q(0),
+ ],
+ q(hui) => [
+ q(2841),
+ q(0),
+ ],
+ q(huj) => [
+ q(2842),
+ q(0),
+ ],
+ q(huk) => [
+ q(2843),
+ q(0),
+ ],
+ q(hul) => [
+ q(2844),
+ q(0),
+ ],
+ q(hum) => [
+ q(2845),
+ q(0),
+ ],
+ q(hun) => [
+ q(0183),
+ q(0),
+ ],
+ q(huo) => [
+ q(2846),
+ q(0),
+ ],
+ q(hup) => [
+ q(0184),
+ q(0),
+ ],
+ q(huq) => [
+ q(2847),
+ q(0),
+ ],
+ q(hur) => [
+ q(2848),
+ q(0),
+ ],
+ q(hus) => [
+ q(2849),
+ q(0),
+ ],
+ q(hut) => [
+ q(2850),
+ q(0),
+ ],
+ q(huu) => [
+ q(2851),
+ q(0),
+ ],
+ q(huv) => [
+ q(2852),
+ q(0),
+ ],
+ q(huw) => [
+ q(2853),
+ q(0),
+ ],
+ q(hux) => [
+ q(2854),
+ q(0),
+ ],
+ q(huy) => [
+ q(2855),
+ q(0),
+ ],
+ q(huz) => [
+ q(2856),
+ q(0),
+ ],
+ q(hvc) => [
+ q(2857),
+ q(0),
+ ],
+ q(hve) => [
+ q(2858),
+ q(0),
+ ],
+ q(hvk) => [
+ q(2859),
+ q(0),
+ ],
+ q(hvn) => [
+ q(2860),
+ q(0),
+ ],
+ q(hvv) => [
+ q(2861),
+ q(0),
+ ],
+ q(hwa) => [
+ q(2862),
+ q(0),
+ ],
+ q(hwc) => [
+ q(2863),
+ q(0),
+ ],
+ q(hwo) => [
+ q(2864),
+ q(0),
+ ],
+ q(hya) => [
+ q(2865),
+ q(0),
+ ],
+ q(hyx) => [
+ q(0511),
+ q(0),
+ ],
+ q(iai) => [
+ q(2866),
+ q(0),
+ ],
+ q(ian) => [
+ q(2867),
+ q(0),
+ ],
+ q(iap) => [
+ q(2868),
+ q(0),
+ ],
+ q(iar) => [
+ q(2869),
+ q(0),
+ ],
+ q(iba) => [
+ q(0185),
+ q(0),
+ ],
+ q(ibb) => [
+ q(2870),
+ q(0),
+ ],
+ q(ibd) => [
+ q(2871),
+ q(0),
+ ],
+ q(ibe) => [
+ q(2872),
+ q(0),
+ ],
+ q(ibg) => [
+ q(2873),
+ q(0),
+ ],
+ q(ibl) => [
+ q(2874),
+ q(0),
+ ],
+ q(ibm) => [
+ q(2875),
+ q(0),
+ ],
+ q(ibn) => [
+ q(2876),
+ q(0),
+ ],
+ q(ibo) => [
+ q(0186),
+ q(0),
+ ],
+ q(ibr) => [
+ q(2877),
+ q(0),
+ ],
+ q(ibu) => [
+ q(2878),
+ q(0),
+ ],
+ q(iby) => [
+ q(2879),
+ q(0),
+ ],
+ q(ica) => [
+ q(2880),
+ q(0),
+ ],
+ q(ice) => [
+ q(0187),
+ q(0),
+ ],
+ q(ich) => [
+ q(2881),
+ q(0),
+ ],
+ q(icl) => [
+ q(2882),
+ q(0),
+ ],
+ q(icr) => [
+ q(2883),
+ q(0),
+ ],
+ q(ida) => [
+ q(2884),
+ q(0),
+ ],
+ q(idb) => [
+ q(2885),
+ q(0),
+ ],
+ q(idc) => [
+ q(2886),
+ q(0),
+ ],
+ q(idd) => [
+ q(2887),
+ q(0),
+ ],
+ q(ide) => [
+ q(2888),
+ q(0),
+ ],
+ q(idi) => [
+ q(2889),
+ q(0),
+ ],
+ q(ido) => [
+ q(0188),
+ q(0),
+ ],
+ q(idr) => [
+ q(2890),
+ q(0),
+ ],
+ q(ids) => [
+ q(2891),
+ q(0),
+ ],
+ q(idt) => [
+ q(2892),
+ q(0),
+ ],
+ q(idu) => [
+ q(2893),
+ q(0),
+ ],
+ q(ifa) => [
+ q(2894),
+ q(0),
+ ],
+ q(ifb) => [
+ q(2895),
+ q(0),
+ ],
+ q(ife) => [
+ q(2896),
+ q(0),
+ ],
+ q(iff) => [
+ q(2897),
+ q(0),
+ ],
+ q(ifk) => [
+ q(2898),
+ q(0),
+ ],
+ q(ifm) => [
+ q(2899),
+ q(0),
+ ],
+ q(ifu) => [
+ q(2900),
+ q(0),
+ ],
+ q(ify) => [
+ q(2901),
+ q(0),
+ ],
+ q(igb) => [
+ q(2902),
+ q(0),
+ ],
+ q(ige) => [
+ q(2903),
+ q(0),
+ ],
+ q(igg) => [
+ q(2904),
+ q(0),
+ ],
+ q(igl) => [
+ q(2905),
+ q(0),
+ ],
+ q(igm) => [
+ q(2906),
+ q(0),
+ ],
+ q(ign) => [
+ q(2907),
+ q(0),
+ ],
+ q(igo) => [
+ q(2908),
+ q(0),
+ ],
+ q(igs) => [
+ q(2909),
+ q(0),
+ ],
+ q(igw) => [
+ q(2910),
+ q(0),
+ ],
+ q(ihb) => [
+ q(2911),
+ q(0),
+ ],
+ q(ihi) => [
+ q(2912),
+ q(0),
+ ],
+ q(ihp) => [
+ q(2913),
+ q(0),
+ ],
+ q(ihw) => [
+ q(2914),
+ q(0),
+ ],
+ q(iii) => [
+ q(0189),
+ q(0),
+ ],
+ q(iir) => [
+ q(0512),
+ q(0),
+ ],
+ q(ijc) => [
+ q(2915),
+ q(0),
+ ],
+ q(ije) => [
+ q(2916),
+ q(0),
+ ],
+ q(ijj) => [
+ q(2917),
+ q(0),
+ ],
+ q(ijn) => [
+ q(2918),
+ q(0),
+ ],
+ q(ijo) => [
+ q(0190),
+ q(0),
+ ],
+ q(ijs) => [
+ q(2919),
+ q(0),
+ ],
+ q(ike) => [
+ q(2920),
+ q(0),
+ ],
+ q(iki) => [
+ q(2921),
+ q(0),
+ ],
+ q(ikk) => [
+ q(2922),
+ q(0),
+ ],
+ q(ikl) => [
+ q(2923),
+ q(0),
+ ],
+ q(iko) => [
+ q(2924),
+ q(0),
+ ],
+ q(ikp) => [
+ q(2925),
+ q(0),
+ ],
+ q(ikt) => [
+ q(2926),
+ q(0),
+ ],
+ q(iku) => [
+ q(0191),
+ q(0),
+ ],
+ q(ikv) => [
+ q(2927),
+ q(0),
+ ],
+ q(ikw) => [
+ q(2928),
+ q(0),
+ ],
+ q(ikx) => [
+ q(2929),
+ q(0),
+ ],
+ q(ikz) => [
+ q(2930),
+ q(0),
+ ],
+ q(ila) => [
+ q(2931),
+ q(0),
+ ],
+ q(ilb) => [
+ q(2932),
+ q(0),
+ ],
+ q(ile) => [
+ q(0192),
+ q(0),
+ ],
+ q(ilg) => [
+ q(2933),
+ q(0),
+ ],
+ q(ili) => [
+ q(2934),
+ q(0),
+ ],
+ q(ilk) => [
+ q(2935),
+ q(0),
+ ],
+ q(ill) => [
+ q(2936),
+ q(0),
+ ],
+ q(ilo) => [
+ q(0193),
+ q(0),
+ ],
+ q(ils) => [
+ q(2937),
+ q(0),
+ ],
+ q(ilu) => [
+ q(2938),
+ q(0),
+ ],
+ q(ilv) => [
+ q(2939),
+ q(0),
+ ],
+ q(ilw) => [
+ q(2940),
+ q(0),
+ ],
+ q(ima) => [
+ q(2941),
+ q(0),
+ ],
+ q(ime) => [
+ q(2942),
+ q(0),
+ ],
+ q(imi) => [
+ q(2943),
+ q(0),
+ ],
+ q(iml) => [
+ q(2944),
+ q(0),
+ ],
+ q(imn) => [
+ q(2945),
+ q(0),
+ ],
+ q(imo) => [
+ q(2946),
+ q(0),
+ ],
+ q(imr) => [
+ q(2947),
+ q(0),
+ ],
+ q(ims) => [
+ q(2948),
+ q(0),
+ ],
+ q(imy) => [
+ q(2949),
+ q(0),
+ ],
+ q(ina) => [
+ q(0194),
+ q(0),
+ ],
+ q(inb) => [
+ q(2950),
+ q(0),
+ ],
+ q(inc) => [
+ q(0195),
+ q(0),
+ ],
+ q(ind) => [
+ q(0196),
+ q(0),
+ ],
+ q(ine) => [
+ q(0197),
+ q(0),
+ ],
+ q(ing) => [
+ q(2951),
+ q(0),
+ ],
+ q(inh) => [
+ q(0198),
+ q(0),
+ ],
+ q(inj) => [
+ q(2952),
+ q(0),
+ ],
+ q(inl) => [
+ q(2953),
+ q(0),
+ ],
+ q(inm) => [
+ q(2954),
+ q(0),
+ ],
+ q(inn) => [
+ q(2955),
+ q(0),
+ ],
+ q(ino) => [
+ q(2956),
+ q(0),
+ ],
+ q(inp) => [
+ q(2957),
+ q(0),
+ ],
+ q(ins) => [
+ q(2958),
+ q(0),
+ ],
+ q(int) => [
+ q(2959),
+ q(0),
+ ],
+ q(inz) => [
+ q(2960),
+ q(0),
+ ],
+ q(ior) => [
+ q(2961),
+ q(0),
+ ],
+ q(iou) => [
+ q(2962),
+ q(0),
+ ],
+ q(iow) => [
+ q(2963),
+ q(0),
+ ],
+ q(ipi) => [
+ q(2964),
+ q(0),
+ ],
+ q(ipk) => [
+ q(0199),
+ q(0),
+ ],
+ q(ipo) => [
+ q(2965),
+ q(0),
+ ],
+ q(iqu) => [
+ q(2966),
+ q(0),
+ ],
+ q(ira) => [
+ q(0200),
+ q(0),
+ ],
+ q(ire) => [
+ q(2967),
+ q(0),
+ ],
+ q(irh) => [
+ q(2968),
+ q(0),
+ ],
+ q(iri) => [
+ q(2969),
+ q(0),
+ ],
+ q(irk) => [
+ q(2970),
+ q(0),
+ ],
+ q(irn) => [
+ q(2971),
+ q(0),
+ ],
+ q(iro) => [
+ q(0201),
+ q(0),
+ ],
+ q(irr) => [
+ q(2972),
+ q(0),
+ ],
+ q(iru) => [
+ q(2973),
+ q(0),
+ ],
+ q(irx) => [
+ q(2974),
+ q(0),
+ ],
+ q(iry) => [
+ q(2975),
+ q(0),
+ ],
+ q(isa) => [
+ q(2976),
+ q(0),
+ ],
+ q(isc) => [
+ q(2977),
+ q(0),
+ ],
+ q(isd) => [
+ q(2978),
+ q(0),
+ ],
+ q(ise) => [
+ q(2979),
+ q(0),
+ ],
+ q(isg) => [
+ q(2980),
+ q(0),
+ ],
+ q(ish) => [
+ q(2981),
+ q(0),
+ ],
+ q(isi) => [
+ q(2982),
+ q(0),
+ ],
+ q(isk) => [
+ q(2983),
+ q(0),
+ ],
+ q(ism) => [
+ q(2984),
+ q(0),
+ ],
+ q(isn) => [
+ q(2985),
+ q(0),
+ ],
+ q(iso) => [
+ q(2986),
+ q(0),
+ ],
+ q(isr) => [
+ q(2987),
+ q(0),
+ ],
+ q(ist) => [
+ q(2988),
+ q(0),
+ ],
+ q(isu) => [
+ q(2989),
+ q(0),
+ ],
+ q(ita) => [
+ q(0202),
+ q(0),
+ ],
+ q(itb) => [
+ q(2990),
+ q(0),
+ ],
+ q(itc) => [
+ q(0513),
+ q(0),
+ ],
+ q(ite) => [
+ q(2991),
+ q(0),
+ ],
+ q(iti) => [
+ q(2992),
+ q(0),
+ ],
+ q(itk) => [
+ q(2993),
+ q(0),
+ ],
+ q(itl) => [
+ q(2994),
+ q(0),
+ ],
+ q(itm) => [
+ q(2995),
+ q(0),
+ ],
+ q(ito) => [
+ q(2996),
+ q(0),
+ ],
+ q(itr) => [
+ q(2997),
+ q(0),
+ ],
+ q(its) => [
+ q(2998),
+ q(0),
+ ],
+ q(itt) => [
+ q(2999),
+ q(0),
+ ],
+ q(itv) => [
+ q(3000),
+ q(0),
+ ],
+ q(itw) => [
+ q(3001),
+ q(0),
+ ],
+ q(itx) => [
+ q(3002),
+ q(0),
+ ],
+ q(ity) => [
+ q(3003),
+ q(0),
+ ],
+ q(itz) => [
+ q(3004),
+ q(0),
+ ],
+ q(ium) => [
+ q(3005),
+ q(0),
+ ],
+ q(ivb) => [
+ q(3006),
+ q(0),
+ ],
+ q(ivv) => [
+ q(3007),
+ q(0),
+ ],
+ q(iwk) => [
+ q(3008),
+ q(0),
+ ],
+ q(iwm) => [
+ q(3009),
+ q(0),
+ ],
+ q(iwo) => [
+ q(3010),
+ q(0),
+ ],
+ q(iws) => [
+ q(3011),
+ q(0),
+ ],
+ q(ixc) => [
+ q(3012),
+ q(0),
+ ],
+ q(ixl) => [
+ q(3013),
+ q(0),
+ ],
+ q(iya) => [
+ q(3014),
+ q(0),
+ ],
+ q(iyo) => [
+ q(3015),
+ q(0),
+ ],
+ q(iyx) => [
+ q(3016),
+ q(0),
+ ],
+ q(izh) => [
+ q(3017),
+ q(0),
+ ],
+ q(izi) => [
+ q(3018),
+ q(0),
+ ],
+ q(izr) => [
+ q(3019),
+ q(0),
+ ],
+ q(jaa) => [
+ q(3020),
+ q(0),
+ ],
+ q(jab) => [
+ q(3021),
+ q(0),
+ ],
+ q(jac) => [
+ q(3022),
+ q(0),
+ ],
+ q(jad) => [
+ q(3023),
+ q(0),
+ ],
+ q(jae) => [
+ q(3024),
+ q(0),
+ ],
+ q(jaf) => [
+ q(3025),
+ q(0),
+ ],
+ q(jah) => [
+ q(3026),
+ q(0),
+ ],
+ q(jaj) => [
+ q(3027),
+ q(0),
+ ],
+ q(jak) => [
+ q(3028),
+ q(0),
+ ],
+ q(jal) => [
+ q(3029),
+ q(0),
+ ],
+ q(jam) => [
+ q(3030),
+ q(0),
+ ],
+ q(jan) => [
+ q(3031),
+ q(0),
+ ],
+ q(jao) => [
+ q(3032),
+ q(0),
+ ],
+ q(jaq) => [
+ q(3033),
+ q(0),
+ ],
+ q(jas) => [
+ q(3034),
+ q(0),
+ ],
+ q(jat) => [
+ q(3035),
+ q(0),
+ ],
+ q(jau) => [
+ q(3036),
+ q(0),
+ ],
+ q(jav) => [
+ q(0203),
+ q(0),
+ ],
+ q(jax) => [
+ q(3037),
+ q(0),
+ ],
+ q(jay) => [
+ q(3038),
+ q(0),
+ ],
+ q(jaz) => [
+ q(3039),
+ q(0),
+ ],
+ q(jbe) => [
+ q(3040),
+ q(0),
+ ],
+ q(jbj) => [
+ q(3041),
+ q(0),
+ ],
+ q(jbk) => [
+ q(3042),
+ q(0),
+ ],
+ q(jbn) => [
+ q(3043),
+ q(0),
+ ],
+ q(jbo) => [
+ q(0204),
+ q(0),
+ ],
+ q(jbr) => [
+ q(3044),
+ q(0),
+ ],
+ q(jbt) => [
+ q(3045),
+ q(0),
+ ],
+ q(jbu) => [
+ q(3046),
+ q(0),
+ ],
+ q(jbw) => [
+ q(3047),
+ q(0),
+ ],
+ q(jcs) => [
+ q(3048),
+ q(0),
+ ],
+ q(jct) => [
+ q(3049),
+ q(0),
+ ],
+ q(jda) => [
+ q(3050),
+ q(0),
+ ],
+ q(jdg) => [
+ q(3051),
+ q(0),
+ ],
+ q(jdt) => [
+ q(3052),
+ q(0),
+ ],
+ q(jeb) => [
+ q(3053),
+ q(0),
+ ],
+ q(jee) => [
+ q(3054),
+ q(0),
+ ],
+ q(jeg) => [
+ q(3055),
+ q(0),
+ ],
+ q(jeh) => [
+ q(3056),
+ q(0),
+ ],
+ q(jei) => [
+ q(3057),
+ q(0),
+ ],
+ q(jek) => [
+ q(3058),
+ q(0),
+ ],
+ q(jel) => [
+ q(3059),
+ q(0),
+ ],
+ q(jen) => [
+ q(3060),
+ q(0),
+ ],
+ q(jer) => [
+ q(3061),
+ q(0),
+ ],
+ q(jet) => [
+ q(3062),
+ q(0),
+ ],
+ q(jeu) => [
+ q(3063),
+ q(0),
+ ],
+ q(jgb) => [
+ q(3064),
+ q(0),
+ ],
+ q(jge) => [
+ q(3065),
+ q(0),
+ ],
+ q(jgk) => [
+ q(3066),
+ q(0),
+ ],
+ q(jgo) => [
+ q(3067),
+ q(0),
+ ],
+ q(jhi) => [
+ q(3068),
+ q(0),
+ ],
+ q(jhs) => [
+ q(3069),
+ q(0),
+ ],
+ q(jia) => [
+ q(3070),
+ q(0),
+ ],
+ q(jib) => [
+ q(3071),
+ q(0),
+ ],
+ q(jic) => [
+ q(3072),
+ q(0),
+ ],
+ q(jid) => [
+ q(3073),
+ q(0),
+ ],
+ q(jie) => [
+ q(3074),
+ q(0),
+ ],
+ q(jig) => [
+ q(3075),
+ q(0),
+ ],
+ q(jih) => [
+ q(3076),
+ q(0),
+ ],
+ q(jii) => [
+ q(3077),
+ q(0),
+ ],
+ q(jil) => [
+ q(3078),
+ q(0),
+ ],
+ q(jim) => [
+ q(3079),
+ q(0),
+ ],
+ q(jio) => [
+ q(3080),
+ q(0),
+ ],
+ q(jiq) => [
+ q(3081),
+ q(0),
+ ],
+ q(jit) => [
+ q(3082),
+ q(0),
+ ],
+ q(jiu) => [
+ q(3083),
+ q(0),
+ ],
+ q(jiv) => [
+ q(3084),
+ q(0),
+ ],
+ q(jiy) => [
+ q(3085),
+ q(0),
+ ],
+ q(jjr) => [
+ q(3086),
+ q(0),
+ ],
+ q(jkm) => [
+ q(3087),
+ q(0),
+ ],
+ q(jko) => [
+ q(3088),
+ q(0),
+ ],
+ q(jkp) => [
+ q(3089),
+ q(0),
+ ],
+ q(jkr) => [
+ q(3090),
+ q(0),
+ ],
+ q(jku) => [
+ q(3091),
+ q(0),
+ ],
+ q(jle) => [
+ q(3092),
+ q(0),
+ ],
+ q(jls) => [
+ q(3093),
+ q(0),
+ ],
+ q(jma) => [
+ q(3094),
+ q(0),
+ ],
+ q(jmb) => [
+ q(3095),
+ q(0),
+ ],
+ q(jmc) => [
+ q(3096),
+ q(0),
+ ],
+ q(jmd) => [
+ q(3097),
+ q(0),
+ ],
+ q(jmi) => [
+ q(3098),
+ q(0),
+ ],
+ q(jml) => [
+ q(3099),
+ q(0),
+ ],
+ q(jmn) => [
+ q(3100),
+ q(0),
+ ],
+ q(jmr) => [
+ q(3101),
+ q(0),
+ ],
+ q(jms) => [
+ q(3102),
+ q(0),
+ ],
+ q(jmw) => [
+ q(3103),
+ q(0),
+ ],
+ q(jmx) => [
+ q(3104),
+ q(0),
+ ],
+ q(jna) => [
+ q(3105),
+ q(0),
+ ],
+ q(jnd) => [
+ q(3106),
+ q(0),
+ ],
+ q(jng) => [
+ q(3107),
+ q(0),
+ ],
+ q(jni) => [
+ q(3108),
+ q(0),
+ ],
+ q(jnj) => [
+ q(3109),
+ q(0),
+ ],
+ q(jnl) => [
+ q(3110),
+ q(0),
+ ],
+ q(jns) => [
+ q(3111),
+ q(0),
+ ],
+ q(job) => [
+ q(3112),
+ q(0),
+ ],
+ q(jod) => [
+ q(3113),
+ q(0),
+ ],
+ q(jor) => [
+ q(3114),
+ q(0),
+ ],
+ q(jos) => [
+ q(3115),
+ q(0),
+ ],
+ q(jow) => [
+ q(3116),
+ q(0),
+ ],
+ q(jpa) => [
+ q(3117),
+ q(0),
+ ],
+ q(jpn) => [
+ q(0205),
+ q(0),
+ ],
+ q(jpr) => [
+ q(0206),
+ q(0),
+ ],
+ q(jpx) => [
+ q(0514),
+ q(0),
+ ],
+ q(jqr) => [
+ q(3118),
+ q(0),
+ ],
+ q(jra) => [
+ q(3119),
+ q(0),
+ ],
+ q(jrb) => [
+ q(0207),
+ q(0),
+ ],
+ q(jrr) => [
+ q(3120),
+ q(0),
+ ],
+ q(jrt) => [
+ q(3121),
+ q(0),
+ ],
+ q(jru) => [
+ q(3122),
+ q(0),
+ ],
+ q(jsl) => [
+ q(3123),
+ q(0),
+ ],
+ q(jua) => [
+ q(3124),
+ q(0),
+ ],
+ q(jub) => [
+ q(3125),
+ q(0),
+ ],
+ q(juc) => [
+ q(3126),
+ q(0),
+ ],
+ q(jud) => [
+ q(3127),
+ q(0),
+ ],
+ q(juh) => [
+ q(3128),
+ q(0),
+ ],
+ q(jui) => [
+ q(3129),
+ q(0),
+ ],
+ q(juk) => [
+ q(3130),
+ q(0),
+ ],
+ q(jul) => [
+ q(3131),
+ q(0),
+ ],
+ q(jum) => [
+ q(3132),
+ q(0),
+ ],
+ q(jun) => [
+ q(3133),
+ q(0),
+ ],
+ q(juo) => [
+ q(3134),
+ q(0),
+ ],
+ q(jup) => [
+ q(3135),
+ q(0),
+ ],
+ q(jur) => [
+ q(3136),
+ q(0),
+ ],
+ q(jus) => [
+ q(3137),
+ q(0),
+ ],
+ q(jut) => [
+ q(3138),
+ q(0),
+ ],
+ q(juu) => [
+ q(3139),
+ q(0),
+ ],
+ q(juw) => [
+ q(3140),
+ q(0),
+ ],
+ q(juy) => [
+ q(3141),
+ q(0),
+ ],
+ q(jvd) => [
+ q(3142),
+ q(0),
+ ],
+ q(jvn) => [
+ q(3143),
+ q(0),
+ ],
+ q(jwi) => [
+ q(3144),
+ q(0),
+ ],
+ q(jya) => [
+ q(3145),
+ q(0),
+ ],
+ q(jye) => [
+ q(3146),
+ q(0),
+ ],
+ q(jyy) => [
+ q(3147),
+ q(0),
+ ],
+ q(kaa) => [
+ q(0208),
+ q(0),
+ ],
+ q(kab) => [
+ q(0209),
+ q(0),
+ ],
+ q(kac) => [
+ q(0210),
+ q(0),
+ ],
+ q(kad) => [
+ q(3148),
+ q(0),
+ ],
+ q(kae) => [
+ q(3149),
+ q(0),
+ ],
+ q(kaf) => [
+ q(3150),
+ q(0),
+ ],
+ q(kag) => [
+ q(3151),
+ q(0),
+ ],
+ q(kah) => [
+ q(3152),
+ q(0),
+ ],
+ q(kai) => [
+ q(3153),
+ q(0),
+ ],
+ q(kaj) => [
+ q(3154),
+ q(0),
+ ],
+ q(kak) => [
+ q(3155),
+ q(0),
+ ],
+ q(kal) => [
+ q(0211),
+ q(0),
+ ],
+ q(kam) => [
+ q(0212),
+ q(1),
+ ],
+ q(kan) => [
+ q(0213),
+ q(0),
+ ],
+ q(kao) => [
+ q(3156),
+ q(0),
+ ],
+ q(kap) => [
+ q(3157),
+ q(0),
+ ],
+ q(kaq) => [
+ q(3158),
+ q(0),
+ ],
+ q(kar) => [
+ q(0214),
+ q(0),
+ ],
+ q(kas) => [
+ q(0215),
+ q(0),
+ ],
+ q(kau) => [
+ q(0216),
+ q(0),
+ ],
+ q(kav) => [
+ q(3159),
+ q(0),
+ ],
+ q(kaw) => [
+ q(0217),
+ q(0),
+ ],
+ q(kax) => [
+ q(3160),
+ q(0),
+ ],
+ q(kay) => [
+ q(3161),
+ q(0),
+ ],
+ q(kaz) => [
+ q(0218),
+ q(0),
+ ],
+ q(kba) => [
+ q(3162),
+ q(0),
+ ],
+ q(kbb) => [
+ q(3163),
+ q(0),
+ ],
+ q(kbc) => [
+ q(3164),
+ q(0),
+ ],
+ q(kbd) => [
+ q(0219),
+ q(0),
+ ],
+ q(kbe) => [
+ q(3165),
+ q(0),
+ ],
+ q(kbf) => [
+ q(3166),
+ q(0),
+ ],
+ q(kbg) => [
+ q(3167),
+ q(0),
+ ],
+ q(kbh) => [
+ q(3168),
+ q(0),
+ ],
+ q(kbi) => [
+ q(3169),
+ q(0),
+ ],
+ q(kbj) => [
+ q(3170),
+ q(0),
+ ],
+ q(kbk) => [
+ q(3171),
+ q(0),
+ ],
+ q(kbl) => [
+ q(3172),
+ q(0),
+ ],
+ q(kbm) => [
+ q(3173),
+ q(0),
+ ],
+ q(kbn) => [
+ q(3174),
+ q(0),
+ ],
+ q(kbo) => [
+ q(3175),
+ q(0),
+ ],
+ q(kbp) => [
+ q(3176),
+ q(0),
+ ],
+ q(kbq) => [
+ q(3177),
+ q(0),
+ ],
+ q(kbr) => [
+ q(3178),
+ q(0),
+ ],
+ q(kbs) => [
+ q(3179),
+ q(0),
+ ],
+ q(kbt) => [
+ q(3180),
+ q(0),
+ ],
+ q(kbu) => [
+ q(3181),
+ q(0),
+ ],
+ q(kbv) => [
+ q(3182),
+ q(0),
+ ],
+ q(kbw) => [
+ q(3183),
+ q(0),
+ ],
+ q(kbx) => [
+ q(3184),
+ q(0),
+ ],
+ q(kby) => [
+ q(3185),
+ q(0),
+ ],
+ q(kbz) => [
+ q(3186),
+ q(0),
+ ],
+ q(kca) => [
+ q(3187),
+ q(0),
+ ],
+ q(kcb) => [
+ q(3188),
+ q(0),
+ ],
+ q(kcc) => [
+ q(3189),
+ q(0),
+ ],
+ q(kcd) => [
+ q(3190),
+ q(0),
+ ],
+ q(kce) => [
+ q(3191),
+ q(0),
+ ],
+ q(kcf) => [
+ q(3192),
+ q(0),
+ ],
+ q(kcg) => [
+ q(3193),
+ q(0),
+ ],
+ q(kch) => [
+ q(3194),
+ q(0),
+ ],
+ q(kci) => [
+ q(3195),
+ q(0),
+ ],
+ q(kcj) => [
+ q(3196),
+ q(0),
+ ],
+ q(kck) => [
+ q(3197),
+ q(0),
+ ],
+ q(kcl) => [
+ q(3198),
+ q(0),
+ ],
+ q(kcm) => [
+ q(3199),
+ q(0),
+ ],
+ q(kcn) => [
+ q(3200),
+ q(0),
+ ],
+ q(kco) => [
+ q(3201),
+ q(0),
+ ],
+ q(kcp) => [
+ q(3202),
+ q(0),
+ ],
+ q(kcq) => [
+ q(3203),
+ q(0),
+ ],
+ q(kcr) => [
+ q(3204),
+ q(0),
+ ],
+ q(kcs) => [
+ q(3205),
+ q(0),
+ ],
+ q(kct) => [
+ q(3206),
+ q(0),
+ ],
+ q(kcu) => [
+ q(3207),
+ q(0),
+ ],
+ q(kcv) => [
+ q(3208),
+ q(0),
+ ],
+ q(kcw) => [
+ q(3209),
+ q(0),
+ ],
+ q(kcx) => [
+ q(3210),
+ q(0),
+ ],
+ q(kcy) => [
+ q(3211),
+ q(0),
+ ],
+ q(kcz) => [
+ q(3212),
+ q(0),
+ ],
+ q(kda) => [
+ q(3213),
+ q(0),
+ ],
+ q(kdc) => [
+ q(3214),
+ q(0),
+ ],
+ q(kdd) => [
+ q(3215),
+ q(0),
+ ],
+ q(kde) => [
+ q(3216),
+ q(0),
+ ],
+ q(kdf) => [
+ q(3217),
+ q(0),
+ ],
+ q(kdg) => [
+ q(3218),
+ q(0),
+ ],
+ q(kdh) => [
+ q(3219),
+ q(0),
+ ],
+ q(kdi) => [
+ q(3220),
+ q(0),
+ ],
+ q(kdj) => [
+ q(3221),
+ q(0),
+ ],
+ q(kdk) => [
+ q(3222),
+ q(0),
+ ],
+ q(kdl) => [
+ q(3223),
+ q(0),
+ ],
+ q(kdm) => [
+ q(3224),
+ q(0),
+ ],
+ q(kdn) => [
+ q(3225),
+ q(0),
+ ],
+ q(kdo) => [
+ q(0515),
+ q(0),
+ ],
+ q(kdp) => [
+ q(3226),
+ q(0),
+ ],
+ q(kdq) => [
+ q(3227),
+ q(0),
+ ],
+ q(kdr) => [
+ q(3228),
+ q(0),
+ ],
+ q(kdt) => [
+ q(3229),
+ q(0),
+ ],
+ q(kdu) => [
+ q(3230),
+ q(0),
+ ],
+ q(kdw) => [
+ q(3231),
+ q(0),
+ ],
+ q(kdx) => [
+ q(3232),
+ q(0),
+ ],
+ q(kdy) => [
+ q(3233),
+ q(0),
+ ],
+ q(kdz) => [
+ q(3234),
+ q(0),
+ ],
+ q(kea) => [
+ q(3235),
+ q(0),
+ ],
+ q(keb) => [
+ q(3236),
+ q(0),
+ ],
+ q(kec) => [
+ q(3237),
+ q(0),
+ ],
+ q(ked) => [
+ q(3238),
+ q(0),
+ ],
+ q(kee) => [
+ q(3239),
+ q(0),
+ ],
+ q(kef) => [
+ q(3240),
+ q(0),
+ ],
+ q(keg) => [
+ q(3241),
+ q(0),
+ ],
+ q(keh) => [
+ q(3242),
+ q(0),
+ ],
+ q(kei) => [
+ q(3243),
+ q(0),
+ ],
+ q(kej) => [
+ q(3244),
+ q(0),
+ ],
+ q(kek) => [
+ q(3245),
+ q(0),
+ ],
+ q(kel) => [
+ q(3246),
+ q(0),
+ ],
+ q(kem) => [
+ q(3247),
+ q(0),
+ ],
+ q(ken) => [
+ q(3248),
+ q(0),
+ ],
+ q(keo) => [
+ q(3249),
+ q(0),
+ ],
+ q(kep) => [
+ q(3250),
+ q(0),
+ ],
+ q(keq) => [
+ q(3251),
+ q(0),
+ ],
+ q(ker) => [
+ q(3252),
+ q(0),
+ ],
+ q(kes) => [
+ q(3253),
+ q(0),
+ ],
+ q(ket) => [
+ q(3254),
+ q(0),
+ ],
+ q(keu) => [
+ q(3255),
+ q(0),
+ ],
+ q(kev) => [
+ q(3256),
+ q(0),
+ ],
+ q(kew) => [
+ q(3257),
+ q(0),
+ ],
+ q(kex) => [
+ q(3258),
+ q(0),
+ ],
+ q(key) => [
+ q(3259),
+ q(0),
+ ],
+ q(kez) => [
+ q(3260),
+ q(0),
+ ],
+ q(kfa) => [
+ q(3261),
+ q(0),
+ ],
+ q(kfb) => [
+ q(3262),
+ q(0),
+ ],
+ q(kfc) => [
+ q(3263),
+ q(0),
+ ],
+ q(kfd) => [
+ q(3264),
+ q(0),
+ ],
+ q(kfe) => [
+ q(3265),
+ q(0),
+ ],
+ q(kff) => [
+ q(3266),
+ q(0),
+ ],
+ q(kfg) => [
+ q(3267),
+ q(0),
+ ],
+ q(kfh) => [
+ q(3268),
+ q(0),
+ ],
+ q(kfi) => [
+ q(3269),
+ q(0),
+ ],
+ q(kfj) => [
+ q(3270),
+ q(0),
+ ],
+ q(kfk) => [
+ q(3271),
+ q(0),
+ ],
+ q(kfl) => [
+ q(3272),
+ q(0),
+ ],
+ q(kfm) => [
+ q(3273),
+ q(0),
+ ],
+ q(kfn) => [
+ q(3274),
+ q(0),
+ ],
+ q(kfo) => [
+ q(3275),
+ q(0),
+ ],
+ q(kfp) => [
+ q(3276),
+ q(0),
+ ],
+ q(kfq) => [
+ q(3277),
+ q(0),
+ ],
+ q(kfr) => [
+ q(3278),
+ q(0),
+ ],
+ q(kfs) => [
+ q(3279),
+ q(0),
+ ],
+ q(kft) => [
+ q(3280),
+ q(0),
+ ],
+ q(kfu) => [
+ q(3281),
+ q(0),
+ ],
+ q(kfv) => [
+ q(3282),
+ q(0),
+ ],
+ q(kfw) => [
+ q(3283),
+ q(0),
+ ],
+ q(kfx) => [
+ q(3284),
+ q(0),
+ ],
+ q(kfy) => [
+ q(3285),
+ q(0),
+ ],
+ q(kfz) => [
+ q(3286),
+ q(0),
+ ],
+ q(kga) => [
+ q(3287),
+ q(0),
+ ],
+ q(kgb) => [
+ q(3288),
+ q(0),
+ ],
+ q(kgc) => [
+ q(3289),
+ q(0),
+ ],
+ q(kgd) => [
+ q(3290),
+ q(0),
+ ],
+ q(kge) => [
+ q(3291),
+ q(0),
+ ],
+ q(kgf) => [
+ q(3292),
+ q(0),
+ ],
+ q(kgg) => [
+ q(3293),
+ q(0),
+ ],
+ q(kgi) => [
+ q(3294),
+ q(0),
+ ],
+ q(kgj) => [
+ q(3295),
+ q(0),
+ ],
+ q(kgk) => [
+ q(3296),
+ q(0),
+ ],
+ q(kgl) => [
+ q(3297),
+ q(0),
+ ],
+ q(kgm) => [
+ q(3298),
+ q(0),
+ ],
+ q(kgn) => [
+ q(3299),
+ q(0),
+ ],
+ q(kgo) => [
+ q(3300),
+ q(0),
+ ],
+ q(kgp) => [
+ q(3301),
+ q(0),
+ ],
+ q(kgq) => [
+ q(3302),
+ q(0),
+ ],
+ q(kgr) => [
+ q(3303),
+ q(0),
+ ],
+ q(kgs) => [
+ q(3304),
+ q(0),
+ ],
+ q(kgt) => [
+ q(3305),
+ q(0),
+ ],
+ q(kgu) => [
+ q(3306),
+ q(0),
+ ],
+ q(kgv) => [
+ q(3307),
+ q(0),
+ ],
+ q(kgw) => [
+ q(3308),
+ q(0),
+ ],
+ q(kgx) => [
+ q(3309),
+ q(0),
+ ],
+ q(kgy) => [
+ q(3310),
+ q(0),
+ ],
+ q(kha) => [
+ q(0220),
+ q(0),
+ ],
+ q(khb) => [
+ q(3311),
+ q(0),
+ ],
+ q(khc) => [
+ q(3312),
+ q(0),
+ ],
+ q(khd) => [
+ q(3313),
+ q(0),
+ ],
+ q(khe) => [
+ q(3314),
+ q(0),
+ ],
+ q(khf) => [
+ q(3315),
+ q(0),
+ ],
+ q(khg) => [
+ q(3316),
+ q(0),
+ ],
+ q(khh) => [
+ q(3317),
+ q(0),
+ ],
+ q(khi) => [
+ q(0221),
+ q(0),
+ ],
+ q(khj) => [
+ q(3318),
+ q(0),
+ ],
+ q(khk) => [
+ q(3319),
+ q(0),
+ ],
+ q(khl) => [
+ q(3320),
+ q(0),
+ ],
+ q(khm) => [
+ q(0222),
+ q(0),
+ ],
+ q(khn) => [
+ q(3321),
+ q(0),
+ ],
+ q(kho) => [
+ q(0223),
+ q(0),
+ ],
+ q(khp) => [
+ q(3322),
+ q(0),
+ ],
+ q(khq) => [
+ q(3323),
+ q(0),
+ ],
+ q(khr) => [
+ q(3324),
+ q(0),
+ ],
+ q(khs) => [
+ q(3325),
+ q(0),
+ ],
+ q(kht) => [
+ q(3326),
+ q(0),
+ ],
+ q(khu) => [
+ q(3327),
+ q(0),
+ ],
+ q(khv) => [
+ q(3328),
+ q(0),
+ ],
+ q(khw) => [
+ q(3329),
+ q(0),
+ ],
+ q(khx) => [
+ q(3330),
+ q(0),
+ ],
+ q(khy) => [
+ q(3331),
+ q(0),
+ ],
+ q(khz) => [
+ q(3332),
+ q(0),
+ ],
+ q(kia) => [
+ q(3333),
+ q(0),
+ ],
+ q(kib) => [
+ q(3334),
+ q(0),
+ ],
+ q(kic) => [
+ q(3335),
+ q(0),
+ ],
+ q(kid) => [
+ q(3336),
+ q(0),
+ ],
+ q(kie) => [
+ q(3337),
+ q(0),
+ ],
+ q(kif) => [
+ q(3338),
+ q(0),
+ ],
+ q(kig) => [
+ q(3339),
+ q(0),
+ ],
+ q(kih) => [
+ q(3340),
+ q(0),
+ ],
+ q(kii) => [
+ q(3341),
+ q(0),
+ ],
+ q(kij) => [
+ q(3342),
+ q(0),
+ ],
+ q(kik) => [
+ q(0224),
+ q(0),
+ ],
+ q(kil) => [
+ q(3343),
+ q(0),
+ ],
+ q(kim) => [
+ q(3344),
+ q(0),
+ ],
+ q(kin) => [
+ q(0225),
+ q(0),
+ ],
+ q(kio) => [
+ q(3345),
+ q(0),
+ ],
+ q(kip) => [
+ q(3346),
+ q(0),
+ ],
+ q(kiq) => [
+ q(3347),
+ q(0),
+ ],
+ q(kir) => [
+ q(0226),
+ q(0),
+ ],
+ q(kis) => [
+ q(3348),
+ q(0),
+ ],
+ q(kit) => [
+ q(3349),
+ q(0),
+ ],
+ q(kiu) => [
+ q(3350),
+ q(0),
+ ],
+ q(kiv) => [
+ q(3351),
+ q(0),
+ ],
+ q(kiw) => [
+ q(3352),
+ q(0),
+ ],
+ q(kix) => [
+ q(3353),
+ q(0),
+ ],
+ q(kiy) => [
+ q(3354),
+ q(0),
+ ],
+ q(kiz) => [
+ q(3355),
+ q(0),
+ ],
+ q(kja) => [
+ q(3356),
+ q(0),
+ ],
+ q(kjb) => [
+ q(3357),
+ q(0),
+ ],
+ q(kjc) => [
+ q(3358),
+ q(0),
+ ],
+ q(kjd) => [
+ q(3359),
+ q(0),
+ ],
+ q(kje) => [
+ q(3360),
+ q(0),
+ ],
+ q(kjf) => [
+ q(3361),
+ q(0),
+ ],
+ q(kjg) => [
+ q(3362),
+ q(0),
+ ],
+ q(kjh) => [
+ q(3363),
+ q(0),
+ ],
+ q(kji) => [
+ q(3364),
+ q(0),
+ ],
+ q(kjj) => [
+ q(3365),
+ q(0),
+ ],
+ q(kjk) => [
+ q(3366),
+ q(0),
+ ],
+ q(kjl) => [
+ q(3367),
+ q(0),
+ ],
+ q(kjm) => [
+ q(3368),
+ q(0),
+ ],
+ q(kjn) => [
+ q(3369),
+ q(0),
+ ],
+ q(kjo) => [
+ q(3370),
+ q(0),
+ ],
+ q(kjp) => [
+ q(3371),
+ q(0),
+ ],
+ q(kjq) => [
+ q(3372),
+ q(0),
+ ],
+ q(kjr) => [
+ q(3373),
+ q(0),
+ ],
+ q(kjs) => [
+ q(3374),
+ q(0),
+ ],
+ q(kjt) => [
+ q(3375),
+ q(0),
+ ],
+ q(kju) => [
+ q(3376),
+ q(0),
+ ],
+ q(kjx) => [
+ q(3377),
+ q(0),
+ ],
+ q(kjy) => [
+ q(3378),
+ q(0),
+ ],
+ q(kjz) => [
+ q(3379),
+ q(0),
+ ],
+ q(kka) => [
+ q(3380),
+ q(0),
+ ],
+ q(kkb) => [
+ q(3381),
+ q(0),
+ ],
+ q(kkc) => [
+ q(3382),
+ q(0),
+ ],
+ q(kkd) => [
+ q(3383),
+ q(0),
+ ],
+ q(kke) => [
+ q(3384),
+ q(0),
+ ],
+ q(kkf) => [
+ q(3385),
+ q(0),
+ ],
+ q(kkg) => [
+ q(3386),
+ q(0),
+ ],
+ q(kkh) => [
+ q(3387),
+ q(0),
+ ],
+ q(kki) => [
+ q(3388),
+ q(0),
+ ],
+ q(kkj) => [
+ q(3389),
+ q(0),
+ ],
+ q(kkk) => [
+ q(3390),
+ q(0),
+ ],
+ q(kkl) => [
+ q(3391),
+ q(0),
+ ],
+ q(kkm) => [
+ q(3392),
+ q(0),
+ ],
+ q(kkn) => [
+ q(3393),
+ q(0),
+ ],
+ q(kko) => [
+ q(3394),
+ q(0),
+ ],
+ q(kkp) => [
+ q(3395),
+ q(0),
+ ],
+ q(kkq) => [
+ q(3396),
+ q(0),
+ ],
+ q(kkr) => [
+ q(3397),
+ q(0),
+ ],
+ q(kks) => [
+ q(3398),
+ q(0),
+ ],
+ q(kkt) => [
+ q(3399),
+ q(0),
+ ],
+ q(kku) => [
+ q(3400),
+ q(0),
+ ],
+ q(kkv) => [
+ q(3401),
+ q(0),
+ ],
+ q(kkw) => [
+ q(3402),
+ q(0),
+ ],
+ q(kkx) => [
+ q(3403),
+ q(0),
+ ],
+ q(kky) => [
+ q(3404),
+ q(0),
+ ],
+ q(kkz) => [
+ q(3405),
+ q(0),
+ ],
+ q(kla) => [
+ q(3406),
+ q(0),
+ ],
+ q(klb) => [
+ q(3407),
+ q(0),
+ ],
+ q(klc) => [
+ q(3408),
+ q(0),
+ ],
+ q(kld) => [
+ q(3409),
+ q(0),
+ ],
+ q(kle) => [
+ q(3410),
+ q(0),
+ ],
+ q(klf) => [
+ q(3411),
+ q(0),
+ ],
+ q(klg) => [
+ q(3412),
+ q(0),
+ ],
+ q(klh) => [
+ q(3413),
+ q(0),
+ ],
+ q(kli) => [
+ q(3414),
+ q(0),
+ ],
+ q(klj) => [
+ q(3415),
+ q(0),
+ ],
+ q(klk) => [
+ q(3416),
+ q(0),
+ ],
+ q(kll) => [
+ q(3417),
+ q(0),
+ ],
+ q(klm) => [
+ q(3418),
+ q(0),
+ ],
+ q(kln) => [
+ q(3419),
+ q(0),
+ ],
+ q(klo) => [
+ q(3420),
+ q(0),
+ ],
+ q(klp) => [
+ q(3421),
+ q(0),
+ ],
+ q(klq) => [
+ q(3422),
+ q(0),
+ ],
+ q(klr) => [
+ q(3423),
+ q(0),
+ ],
+ q(kls) => [
+ q(3424),
+ q(0),
+ ],
+ q(klt) => [
+ q(3425),
+ q(0),
+ ],
+ q(klu) => [
+ q(3426),
+ q(0),
+ ],
+ q(klv) => [
+ q(3427),
+ q(0),
+ ],
+ q(klw) => [
+ q(3428),
+ q(0),
+ ],
+ q(klx) => [
+ q(3429),
+ q(0),
+ ],
+ q(kly) => [
+ q(3430),
+ q(0),
+ ],
+ q(klz) => [
+ q(3431),
+ q(0),
+ ],
+ q(kma) => [
+ q(3432),
+ q(0),
+ ],
+ q(kmb) => [
+ q(0227),
+ q(0),
+ ],
+ q(kmc) => [
+ q(3433),
+ q(0),
+ ],
+ q(kmd) => [
+ q(3434),
+ q(0),
+ ],
+ q(kme) => [
+ q(3435),
+ q(0),
+ ],
+ q(kmf) => [
+ q(3436),
+ q(0),
+ ],
+ q(kmg) => [
+ q(3437),
+ q(0),
+ ],
+ q(kmh) => [
+ q(3438),
+ q(0),
+ ],
+ q(kmi) => [
+ q(3439),
+ q(0),
+ ],
+ q(kmj) => [
+ q(3440),
+ q(0),
+ ],
+ q(kmk) => [
+ q(3441),
+ q(0),
+ ],
+ q(kml) => [
+ q(3442),
+ q(0),
+ ],
+ q(kmm) => [
+ q(3443),
+ q(0),
+ ],
+ q(kmn) => [
+ q(3444),
+ q(0),
+ ],
+ q(kmo) => [
+ q(3445),
+ q(0),
+ ],
+ q(kmp) => [
+ q(3446),
+ q(0),
+ ],
+ q(kmq) => [
+ q(3447),
+ q(0),
+ ],
+ q(kmr) => [
+ q(3448),
+ q(0),
+ ],
+ q(kms) => [
+ q(3449),
+ q(0),
+ ],
+ q(kmt) => [
+ q(3450),
+ q(0),
+ ],
+ q(kmu) => [
+ q(3451),
+ q(0),
+ ],
+ q(kmv) => [
+ q(3452),
+ q(0),
+ ],
+ q(kmw) => [
+ q(3453),
+ q(0),
+ ],
+ q(kmx) => [
+ q(3454),
+ q(0),
+ ],
+ q(kmy) => [
+ q(3455),
+ q(0),
+ ],
+ q(kmz) => [
+ q(3456),
+ q(0),
+ ],
+ q(kna) => [
+ q(3457),
+ q(0),
+ ],
+ q(knb) => [
+ q(3458),
+ q(0),
+ ],
+ q(knc) => [
+ q(3459),
+ q(0),
+ ],
+ q(knd) => [
+ q(3460),
+ q(0),
+ ],
+ q(kne) => [
+ q(3461),
+ q(0),
+ ],
+ q(knf) => [
+ q(3462),
+ q(0),
+ ],
+ q(kng) => [
+ q(3463),
+ q(0),
+ ],
+ q(kni) => [
+ q(3464),
+ q(0),
+ ],
+ q(knj) => [
+ q(3465),
+ q(0),
+ ],
+ q(knk) => [
+ q(3466),
+ q(0),
+ ],
+ q(knl) => [
+ q(3467),
+ q(0),
+ ],
+ q(knm) => [
+ q(3468),
+ q(0),
+ ],
+ q(knn) => [
+ q(3469),
+ q(0),
+ ],
+ q(kno) => [
+ q(3470),
+ q(0),
+ ],
+ q(knp) => [
+ q(3471),
+ q(0),
+ ],
+ q(knq) => [
+ q(3472),
+ q(0),
+ ],
+ q(knr) => [
+ q(3473),
+ q(0),
+ ],
+ q(kns) => [
+ q(3474),
+ q(0),
+ ],
+ q(knt) => [
+ q(3475),
+ q(0),
+ ],
+ q(knu) => [
+ q(3476),
+ q(0),
+ ],
+ q(knv) => [
+ q(3477),
+ q(0),
+ ],
+ q(knw) => [
+ q(3478),
+ q(0),
+ ],
+ q(knx) => [
+ q(3479),
+ q(0),
+ ],
+ q(kny) => [
+ q(3480),
+ q(0),
+ ],
+ q(knz) => [
+ q(3481),
+ q(0),
+ ],
+ q(koa) => [
+ q(3482),
+ q(0),
+ ],
+ q(koc) => [
+ q(3483),
+ q(0),
+ ],
+ q(kod) => [
+ q(3484),
+ q(0),
+ ],
+ q(koe) => [
+ q(3485),
+ q(0),
+ ],
+ q(kof) => [
+ q(3486),
+ q(0),
+ ],
+ q(kog) => [
+ q(3487),
+ q(0),
+ ],
+ q(koh) => [
+ q(3488),
+ q(0),
+ ],
+ q(koi) => [
+ q(3489),
+ q(0),
+ ],
+ q(koj) => [
+ q(3490),
+ q(0),
+ ],
+ q(kok) => [
+ q(0228),
+ q(1),
+ ],
+ q(kol) => [
+ q(3491),
+ q(0),
+ ],
+ q(kom) => [
+ q(0229),
+ q(0),
+ ],
+ q(kon) => [
+ q(0230),
+ q(0),
+ ],
+ q(koo) => [
+ q(3492),
+ q(0),
+ ],
+ q(kop) => [
+ q(3493),
+ q(0),
+ ],
+ q(koq) => [
+ q(3494),
+ q(0),
+ ],
+ q(kor) => [
+ q(0231),
+ q(0),
+ ],
+ q(kos) => [
+ q(0232),
+ q(0),
+ ],
+ q(kot) => [
+ q(3495),
+ q(0),
+ ],
+ q(kou) => [
+ q(3496),
+ q(0),
+ ],
+ q(kov) => [
+ q(3497),
+ q(0),
+ ],
+ q(kow) => [
+ q(3498),
+ q(0),
+ ],
+ q(kox) => [
+ q(3499),
+ q(0),
+ ],
+ q(koy) => [
+ q(3500),
+ q(0),
+ ],
+ q(koz) => [
+ q(3501),
+ q(0),
+ ],
+ q(kpa) => [
+ q(3502),
+ q(0),
+ ],
+ q(kpb) => [
+ q(3503),
+ q(0),
+ ],
+ q(kpc) => [
+ q(3504),
+ q(0),
+ ],
+ q(kpd) => [
+ q(3505),
+ q(0),
+ ],
+ q(kpe) => [
+ q(0233),
+ q(0),
+ ],
+ q(kpf) => [
+ q(3506),
+ q(0),
+ ],
+ q(kpg) => [
+ q(3507),
+ q(0),
+ ],
+ q(kph) => [
+ q(3508),
+ q(0),
+ ],
+ q(kpi) => [
+ q(3509),
+ q(0),
+ ],
+ q(kpj) => [
+ q(3510),
+ q(0),
+ ],
+ q(kpk) => [
+ q(3511),
+ q(0),
+ ],
+ q(kpl) => [
+ q(3512),
+ q(0),
+ ],
+ q(kpm) => [
+ q(3513),
+ q(0),
+ ],
+ q(kpn) => [
+ q(3514),
+ q(0),
+ ],
+ q(kpo) => [
+ q(3515),
+ q(0),
+ ],
+ q(kpq) => [
+ q(3516),
+ q(0),
+ ],
+ q(kpr) => [
+ q(3517),
+ q(0),
+ ],
+ q(kps) => [
+ q(3518),
+ q(0),
+ ],
+ q(kpt) => [
+ q(3519),
+ q(0),
+ ],
+ q(kpu) => [
+ q(3520),
+ q(0),
+ ],
+ q(kpv) => [
+ q(3521),
+ q(0),
+ ],
+ q(kpw) => [
+ q(3522),
+ q(0),
+ ],
+ q(kpx) => [
+ q(3523),
+ q(0),
+ ],
+ q(kpy) => [
+ q(3524),
+ q(0),
+ ],
+ q(kpz) => [
+ q(3525),
+ q(0),
+ ],
+ q(kqa) => [
+ q(3526),
+ q(0),
+ ],
+ q(kqb) => [
+ q(3527),
+ q(0),
+ ],
+ q(kqc) => [
+ q(3528),
+ q(0),
+ ],
+ q(kqd) => [
+ q(3529),
+ q(0),
+ ],
+ q(kqe) => [
+ q(3530),
+ q(0),
+ ],
+ q(kqf) => [
+ q(3531),
+ q(0),
+ ],
+ q(kqg) => [
+ q(3532),
+ q(0),
+ ],
+ q(kqh) => [
+ q(3533),
+ q(0),
+ ],
+ q(kqi) => [
+ q(3534),
+ q(0),
+ ],
+ q(kqj) => [
+ q(3535),
+ q(0),
+ ],
+ q(kqk) => [
+ q(3536),
+ q(0),
+ ],
+ q(kql) => [
+ q(3537),
+ q(0),
+ ],
+ q(kqm) => [
+ q(3538),
+ q(0),
+ ],
+ q(kqn) => [
+ q(3539),
+ q(0),
+ ],
+ q(kqo) => [
+ q(3540),
+ q(0),
+ ],
+ q(kqp) => [
+ q(3541),
+ q(0),
+ ],
+ q(kqq) => [
+ q(3542),
+ q(0),
+ ],
+ q(kqr) => [
+ q(3543),
+ q(0),
+ ],
+ q(kqs) => [
+ q(3544),
+ q(0),
+ ],
+ q(kqt) => [
+ q(3545),
+ q(0),
+ ],
+ q(kqu) => [
+ q(3546),
+ q(0),
+ ],
+ q(kqv) => [
+ q(3547),
+ q(0),
+ ],
+ q(kqw) => [
+ q(3548),
+ q(0),
+ ],
+ q(kqx) => [
+ q(3549),
+ q(0),
+ ],
+ q(kqy) => [
+ q(3550),
+ q(0),
+ ],
+ q(kqz) => [
+ q(3551),
+ q(0),
+ ],
+ q(kra) => [
+ q(3552),
+ q(0),
+ ],
+ q(krb) => [
+ q(3553),
+ q(0),
+ ],
+ q(krc) => [
+ q(0234),
+ q(0),
+ ],
+ q(krd) => [
+ q(3554),
+ q(0),
+ ],
+ q(kre) => [
+ q(3555),
+ q(0),
+ ],
+ q(krf) => [
+ q(3556),
+ q(0),
+ ],
+ q(krh) => [
+ q(3557),
+ q(0),
+ ],
+ q(kri) => [
+ q(3558),
+ q(0),
+ ],
+ q(krj) => [
+ q(3559),
+ q(0),
+ ],
+ q(krk) => [
+ q(3560),
+ q(0),
+ ],
+ q(krl) => [
+ q(0235),
+ q(0),
+ ],
+ q(krm) => [
+ q(3561),
+ q(0),
+ ],
+ q(krn) => [
+ q(3562),
+ q(0),
+ ],
+ q(kro) => [
+ q(0236),
+ q(0),
+ ],
+ q(krp) => [
+ q(3563),
+ q(0),
+ ],
+ q(krr) => [
+ q(3564),
+ q(0),
+ ],
+ q(krs) => [
+ q(3565),
+ q(0),
+ ],
+ q(krt) => [
+ q(3566),
+ q(0),
+ ],
+ q(kru) => [
+ q(0237),
+ q(0),
+ ],
+ q(krv) => [
+ q(3567),
+ q(0),
+ ],
+ q(krw) => [
+ q(3568),
+ q(0),
+ ],
+ q(krx) => [
+ q(3569),
+ q(0),
+ ],
+ q(kry) => [
+ q(3570),
+ q(0),
+ ],
+ q(krz) => [
+ q(3571),
+ q(0),
+ ],
+ q(ksa) => [
+ q(3572),
+ q(0),
+ ],
+ q(ksb) => [
+ q(3573),
+ q(0),
+ ],
+ q(ksc) => [
+ q(3574),
+ q(0),
+ ],
+ q(ksd) => [
+ q(3575),
+ q(0),
+ ],
+ q(kse) => [
+ q(3576),
+ q(0),
+ ],
+ q(ksf) => [
+ q(3577),
+ q(0),
+ ],
+ q(ksg) => [
+ q(3578),
+ q(0),
+ ],
+ q(ksh) => [
+ q(3579),
+ q(0),
+ ],
+ q(ksi) => [
+ q(3580),
+ q(0),
+ ],
+ q(ksj) => [
+ q(3581),
+ q(0),
+ ],
+ q(ksk) => [
+ q(3582),
+ q(0),
+ ],
+ q(ksl) => [
+ q(3583),
+ q(0),
+ ],
+ q(ksm) => [
+ q(3584),
+ q(0),
+ ],
+ q(ksn) => [
+ q(3585),
+ q(0),
+ ],
+ q(kso) => [
+ q(3586),
+ q(0),
+ ],
+ q(ksp) => [
+ q(3587),
+ q(0),
+ ],
+ q(ksq) => [
+ q(3588),
+ q(0),
+ ],
+ q(ksr) => [
+ q(3589),
+ q(0),
+ ],
+ q(kss) => [
+ q(3590),
+ q(0),
+ ],
+ q(kst) => [
+ q(3591),
+ q(0),
+ ],
+ q(ksu) => [
+ q(3592),
+ q(0),
+ ],
+ q(ksv) => [
+ q(3593),
+ q(0),
+ ],
+ q(ksw) => [
+ q(3594),
+ q(0),
+ ],
+ q(ksx) => [
+ q(3595),
+ q(0),
+ ],
+ q(ksy) => [
+ q(3596),
+ q(0),
+ ],
+ q(ksz) => [
+ q(3597),
+ q(0),
+ ],
+ q(kta) => [
+ q(3598),
+ q(0),
+ ],
+ q(ktb) => [
+ q(3599),
+ q(0),
+ ],
+ q(ktc) => [
+ q(3600),
+ q(0),
+ ],
+ q(ktd) => [
+ q(3601),
+ q(0),
+ ],
+ q(kte) => [
+ q(3602),
+ q(0),
+ ],
+ q(ktf) => [
+ q(3603),
+ q(0),
+ ],
+ q(ktg) => [
+ q(3604),
+ q(0),
+ ],
+ q(kth) => [
+ q(3605),
+ q(0),
+ ],
+ q(kti) => [
+ q(3606),
+ q(0),
+ ],
+ q(ktj) => [
+ q(3607),
+ q(0),
+ ],
+ q(ktk) => [
+ q(3608),
+ q(0),
+ ],
+ q(ktl) => [
+ q(3609),
+ q(0),
+ ],
+ q(ktm) => [
+ q(3610),
+ q(0),
+ ],
+ q(ktn) => [
+ q(3611),
+ q(0),
+ ],
+ q(kto) => [
+ q(3612),
+ q(0),
+ ],
+ q(ktp) => [
+ q(3613),
+ q(0),
+ ],
+ q(ktq) => [
+ q(3614),
+ q(0),
+ ],
+ q(ktr) => [
+ q(3615),
+ q(0),
+ ],
+ q(kts) => [
+ q(3616),
+ q(0),
+ ],
+ q(ktt) => [
+ q(3617),
+ q(0),
+ ],
+ q(ktu) => [
+ q(3618),
+ q(0),
+ ],
+ q(ktv) => [
+ q(3619),
+ q(0),
+ ],
+ q(ktw) => [
+ q(3620),
+ q(0),
+ ],
+ q(ktx) => [
+ q(3621),
+ q(0),
+ ],
+ q(kty) => [
+ q(3622),
+ q(0),
+ ],
+ q(ktz) => [
+ q(3623),
+ q(0),
+ ],
+ q(kua) => [
+ q(0238),
+ q(0),
+ ],
+ q(kub) => [
+ q(3624),
+ q(0),
+ ],
+ q(kuc) => [
+ q(3625),
+ q(0),
+ ],
+ q(kud) => [
+ q(3626),
+ q(0),
+ ],
+ q(kue) => [
+ q(3627),
+ q(0),
+ ],
+ q(kuf) => [
+ q(3628),
+ q(0),
+ ],
+ q(kug) => [
+ q(3629),
+ q(0),
+ ],
+ q(kuh) => [
+ q(3630),
+ q(0),
+ ],
+ q(kui) => [
+ q(3631),
+ q(0),
+ ],
+ q(kuj) => [
+ q(3632),
+ q(0),
+ ],
+ q(kuk) => [
+ q(3633),
+ q(0),
+ ],
+ q(kul) => [
+ q(3634),
+ q(0),
+ ],
+ q(kum) => [
+ q(0239),
+ q(0),
+ ],
+ q(kun) => [
+ q(3635),
+ q(0),
+ ],
+ q(kuo) => [
+ q(3636),
+ q(0),
+ ],
+ q(kup) => [
+ q(3637),
+ q(0),
+ ],
+ q(kuq) => [
+ q(3298),
+ q(0),
+ ],
+ q(kur) => [
+ q(0240),
+ q(0),
+ ],
+ q(kus) => [
+ q(3638),
+ q(0),
+ ],
+ q(kut) => [
+ q(0241),
+ q(0),
+ ],
+ q(kuu) => [
+ q(3639),
+ q(0),
+ ],
+ q(kuv) => [
+ q(3640),
+ q(0),
+ ],
+ q(kuw) => [
+ q(3641),
+ q(0),
+ ],
+ q(kux) => [
+ q(3642),
+ q(0),
+ ],
+ q(kuy) => [
+ q(3643),
+ q(0),
+ ],
+ q(kuz) => [
+ q(3644),
+ q(0),
+ ],
+ q(kva) => [
+ q(3645),
+ q(0),
+ ],
+ q(kvb) => [
+ q(3646),
+ q(0),
+ ],
+ q(kvc) => [
+ q(3647),
+ q(0),
+ ],
+ q(kvd) => [
+ q(3648),
+ q(0),
+ ],
+ q(kve) => [
+ q(3649),
+ q(0),
+ ],
+ q(kvf) => [
+ q(3650),
+ q(0),
+ ],
+ q(kvg) => [
+ q(3651),
+ q(0),
+ ],
+ q(kvh) => [
+ q(3652),
+ q(0),
+ ],
+ q(kvi) => [
+ q(3653),
+ q(0),
+ ],
+ q(kvj) => [
+ q(3654),
+ q(0),
+ ],
+ q(kvk) => [
+ q(3655),
+ q(0),
+ ],
+ q(kvl) => [
+ q(3656),
+ q(0),
+ ],
+ q(kvm) => [
+ q(3657),
+ q(0),
+ ],
+ q(kvn) => [
+ q(3658),
+ q(0),
+ ],
+ q(kvo) => [
+ q(3659),
+ q(0),
+ ],
+ q(kvp) => [
+ q(3660),
+ q(0),
+ ],
+ q(kvq) => [
+ q(3661),
+ q(0),
+ ],
+ q(kvr) => [
+ q(3662),
+ q(0),
+ ],
+ q(kvs) => [
+ q(3663),
+ q(0),
+ ],
+ q(kvt) => [
+ q(3664),
+ q(0),
+ ],
+ q(kvu) => [
+ q(3665),
+ q(0),
+ ],
+ q(kvv) => [
+ q(3666),
+ q(0),
+ ],
+ q(kvw) => [
+ q(3667),
+ q(0),
+ ],
+ q(kvx) => [
+ q(3668),
+ q(0),
+ ],
+ q(kvy) => [
+ q(3669),
+ q(0),
+ ],
+ q(kvz) => [
+ q(3670),
+ q(0),
+ ],
+ q(kwa) => [
+ q(3671),
+ q(0),
+ ],
+ q(kwb) => [
+ q(3672),
+ q(0),
+ ],
+ q(kwc) => [
+ q(3673),
+ q(0),
+ ],
+ q(kwd) => [
+ q(3674),
+ q(0),
+ ],
+ q(kwe) => [
+ q(3675),
+ q(0),
+ ],
+ q(kwf) => [
+ q(3676),
+ q(0),
+ ],
+ q(kwg) => [
+ q(3677),
+ q(0),
+ ],
+ q(kwh) => [
+ q(3678),
+ q(0),
+ ],
+ q(kwi) => [
+ q(3679),
+ q(0),
+ ],
+ q(kwj) => [
+ q(3680),
+ q(0),
+ ],
+ q(kwk) => [
+ q(3681),
+ q(0),
+ ],
+ q(kwl) => [
+ q(3682),
+ q(0),
+ ],
+ q(kwm) => [
+ q(3683),
+ q(0),
+ ],
+ q(kwn) => [
+ q(3684),
+ q(0),
+ ],
+ q(kwo) => [
+ q(3685),
+ q(0),
+ ],
+ q(kwp) => [
+ q(3686),
+ q(0),
+ ],
+ q(kwq) => [
+ q(3687),
+ q(0),
+ ],
+ q(kwr) => [
+ q(3688),
+ q(0),
+ ],
+ q(kws) => [
+ q(3689),
+ q(0),
+ ],
+ q(kwt) => [
+ q(3690),
+ q(0),
+ ],
+ q(kwu) => [
+ q(3691),
+ q(0),
+ ],
+ q(kwv) => [
+ q(3692),
+ q(0),
+ ],
+ q(kww) => [
+ q(3693),
+ q(0),
+ ],
+ q(kwx) => [
+ q(3694),
+ q(0),
+ ],
+ q(kwy) => [
+ q(3695),
+ q(0),
+ ],
+ q(kwz) => [
+ q(3696),
+ q(0),
+ ],
+ q(kxa) => [
+ q(3697),
+ q(0),
+ ],
+ q(kxb) => [
+ q(3698),
+ q(0),
+ ],
+ q(kxc) => [
+ q(3699),
+ q(0),
+ ],
+ q(kxd) => [
+ q(3700),
+ q(0),
+ ],
+ q(kxe) => [
+ q(3701),
+ q(0),
+ ],
+ q(kxf) => [
+ q(3702),
+ q(0),
+ ],
+ q(kxh) => [
+ q(3703),
+ q(0),
+ ],
+ q(kxi) => [
+ q(3704),
+ q(0),
+ ],
+ q(kxj) => [
+ q(3705),
+ q(0),
+ ],
+ q(kxk) => [
+ q(3706),
+ q(0),
+ ],
+ q(kxl) => [
+ q(3707),
+ q(0),
+ ],
+ q(kxm) => [
+ q(3708),
+ q(0),
+ ],
+ q(kxn) => [
+ q(3709),
+ q(0),
+ ],
+ q(kxo) => [
+ q(3710),
+ q(0),
+ ],
+ q(kxp) => [
+ q(3711),
+ q(0),
+ ],
+ q(kxq) => [
+ q(3712),
+ q(0),
+ ],
+ q(kxr) => [
+ q(3713),
+ q(0),
+ ],
+ q(kxs) => [
+ q(3714),
+ q(0),
+ ],
+ q(kxt) => [
+ q(3715),
+ q(0),
+ ],
+ q(kxu) => [
+ q(3716),
+ q(0),
+ ],
+ q(kxv) => [
+ q(3717),
+ q(0),
+ ],
+ q(kxw) => [
+ q(3718),
+ q(0),
+ ],
+ q(kxx) => [
+ q(3719),
+ q(0),
+ ],
+ q(kxy) => [
+ q(3720),
+ q(0),
+ ],
+ q(kxz) => [
+ q(3721),
+ q(0),
+ ],
+ q(kya) => [
+ q(3722),
+ q(0),
+ ],
+ q(kyb) => [
+ q(3723),
+ q(0),
+ ],
+ q(kyc) => [
+ q(3724),
+ q(0),
+ ],
+ q(kyd) => [
+ q(3725),
+ q(0),
+ ],
+ q(kye) => [
+ q(3726),
+ q(0),
+ ],
+ q(kyf) => [
+ q(3727),
+ q(0),
+ ],
+ q(kyg) => [
+ q(3728),
+ q(0),
+ ],
+ q(kyh) => [
+ q(3729),
+ q(0),
+ ],
+ q(kyi) => [
+ q(3730),
+ q(0),
+ ],
+ q(kyj) => [
+ q(3731),
+ q(0),
+ ],
+ q(kyk) => [
+ q(3732),
+ q(0),
+ ],
+ q(kyl) => [
+ q(3733),
+ q(0),
+ ],
+ q(kym) => [
+ q(3734),
+ q(0),
+ ],
+ q(kyn) => [
+ q(3735),
+ q(0),
+ ],
+ q(kyo) => [
+ q(3736),
+ q(0),
+ ],
+ q(kyp) => [
+ q(3737),
+ q(0),
+ ],
+ q(kyq) => [
+ q(3738),
+ q(0),
+ ],
+ q(kyr) => [
+ q(3739),
+ q(0),
+ ],
+ q(kys) => [
+ q(3740),
+ q(0),
+ ],
+ q(kyt) => [
+ q(3741),
+ q(0),
+ ],
+ q(kyu) => [
+ q(3742),
+ q(0),
+ ],
+ q(kyv) => [
+ q(3743),
+ q(0),
+ ],
+ q(kyw) => [
+ q(3744),
+ q(0),
+ ],
+ q(kyx) => [
+ q(3745),
+ q(0),
+ ],
+ q(kyy) => [
+ q(3746),
+ q(0),
+ ],
+ q(kyz) => [
+ q(3747),
+ q(0),
+ ],
+ q(kza) => [
+ q(3748),
+ q(0),
+ ],
+ q(kzb) => [
+ q(3749),
+ q(0),
+ ],
+ q(kzc) => [
+ q(3750),
+ q(0),
+ ],
+ q(kzd) => [
+ q(3751),
+ q(0),
+ ],
+ q(kze) => [
+ q(3752),
+ q(0),
+ ],
+ q(kzf) => [
+ q(3753),
+ q(0),
+ ],
+ q(kzg) => [
+ q(3754),
+ q(0),
+ ],
+ q(kzi) => [
+ q(3755),
+ q(0),
+ ],
+ q(kzj) => [
+ q(3756),
+ q(0),
+ ],
+ q(kzk) => [
+ q(3757),
+ q(0),
+ ],
+ q(kzl) => [
+ q(3758),
+ q(0),
+ ],
+ q(kzm) => [
+ q(3759),
+ q(0),
+ ],
+ q(kzn) => [
+ q(3760),
+ q(0),
+ ],
+ q(kzo) => [
+ q(3761),
+ q(0),
+ ],
+ q(kzp) => [
+ q(3762),
+ q(0),
+ ],
+ q(kzq) => [
+ q(3763),
+ q(0),
+ ],
+ q(kzr) => [
+ q(3764),
+ q(0),
+ ],
+ q(kzs) => [
+ q(3765),
+ q(0),
+ ],
+ q(kzt) => [
+ q(3766),
+ q(0),
+ ],
+ q(kzu) => [
+ q(3767),
+ q(0),
+ ],
+ q(kzv) => [
+ q(3768),
+ q(0),
+ ],
+ q(kzw) => [
+ q(3769),
+ q(0),
+ ],
+ q(kzx) => [
+ q(3770),
+ q(0),
+ ],
+ q(kzy) => [
+ q(3771),
+ q(0),
+ ],
+ q(kzz) => [
+ q(3772),
+ q(0),
+ ],
+ q(laa) => [
+ q(3773),
+ q(0),
+ ],
+ q(lab) => [
+ q(3774),
+ q(0),
+ ],
+ q(lac) => [
+ q(3775),
+ q(0),
+ ],
+ q(lad) => [
+ q(0242),
+ q(0),
+ ],
+ q(lae) => [
+ q(3776),
+ q(0),
+ ],
+ q(laf) => [
+ q(3777),
+ q(0),
+ ],
+ q(lag) => [
+ q(3778),
+ q(0),
+ ],
+ q(lah) => [
+ q(0243),
+ q(0),
+ ],
+ q(lai) => [
+ q(3779),
+ q(0),
+ ],
+ q(laj) => [
+ q(3780),
+ q(0),
+ ],
+ q(lak) => [
+ q(3781),
+ q(0),
+ ],
+ q(lal) => [
+ q(3782),
+ q(0),
+ ],
+ q(lam) => [
+ q(0244),
+ q(0),
+ ],
+ q(lan) => [
+ q(3783),
+ q(0),
+ ],
+ q(lao) => [
+ q(0245),
+ q(0),
+ ],
+ q(lap) => [
+ q(3784),
+ q(0),
+ ],
+ q(laq) => [
+ q(3785),
+ q(0),
+ ],
+ q(lar) => [
+ q(3786),
+ q(0),
+ ],
+ q(las) => [
+ q(3787),
+ q(0),
+ ],
+ q(lat) => [
+ q(0246),
+ q(0),
+ ],
+ q(lau) => [
+ q(3788),
+ q(0),
+ ],
+ q(lav) => [
+ q(0247),
+ q(0),
+ ],
+ q(law) => [
+ q(3789),
+ q(0),
+ ],
+ q(lax) => [
+ q(3790),
+ q(0),
+ ],
+ q(lay) => [
+ q(3791),
+ q(0),
+ ],
+ q(laz) => [
+ q(3792),
+ q(0),
+ ],
+ q(lba) => [
+ q(3793),
+ q(0),
+ ],
+ q(lbb) => [
+ q(3794),
+ q(0),
+ ],
+ q(lbc) => [
+ q(3795),
+ q(0),
+ ],
+ q(lbe) => [
+ q(3796),
+ q(0),
+ ],
+ q(lbf) => [
+ q(3797),
+ q(0),
+ ],
+ q(lbg) => [
+ q(3798),
+ q(0),
+ ],
+ q(lbi) => [
+ q(3799),
+ q(0),
+ ],
+ q(lbj) => [
+ q(3800),
+ q(0),
+ ],
+ q(lbk) => [
+ q(3801),
+ q(0),
+ ],
+ q(lbl) => [
+ q(3802),
+ q(0),
+ ],
+ q(lbm) => [
+ q(3803),
+ q(0),
+ ],
+ q(lbn) => [
+ q(3804),
+ q(0),
+ ],
+ q(lbo) => [
+ q(3805),
+ q(0),
+ ],
+ q(lbq) => [
+ q(3806),
+ q(0),
+ ],
+ q(lbr) => [
+ q(3807),
+ q(0),
+ ],
+ q(lbs) => [
+ q(3808),
+ q(0),
+ ],
+ q(lbt) => [
+ q(3809),
+ q(0),
+ ],
+ q(lbu) => [
+ q(3810),
+ q(0),
+ ],
+ q(lbv) => [
+ q(3811),
+ q(0),
+ ],
+ q(lbw) => [
+ q(3812),
+ q(0),
+ ],
+ q(lbx) => [
+ q(3813),
+ q(0),
+ ],
+ q(lby) => [
+ q(3814),
+ q(0),
+ ],
+ q(lbz) => [
+ q(3815),
+ q(0),
+ ],
+ q(lcc) => [
+ q(3816),
+ q(0),
+ ],
+ q(lcd) => [
+ q(3817),
+ q(0),
+ ],
+ q(lce) => [
+ q(3818),
+ q(0),
+ ],
+ q(lcf) => [
+ q(3819),
+ q(0),
+ ],
+ q(lch) => [
+ q(3820),
+ q(0),
+ ],
+ q(lcl) => [
+ q(3821),
+ q(0),
+ ],
+ q(lcm) => [
+ q(3822),
+ q(0),
+ ],
+ q(lcp) => [
+ q(3823),
+ q(0),
+ ],
+ q(lcs) => [
+ q(3824),
+ q(0),
+ ],
+ q(ldb) => [
+ q(3825),
+ q(0),
+ ],
+ q(ldd) => [
+ q(3826),
+ q(0),
+ ],
+ q(ldg) => [
+ q(3827),
+ q(0),
+ ],
+ q(ldh) => [
+ q(3828),
+ q(0),
+ ],
+ q(ldi) => [
+ q(3829),
+ q(0),
+ ],
+ q(ldj) => [
+ q(3830),
+ q(0),
+ ],
+ q(ldk) => [
+ q(3831),
+ q(0),
+ ],
+ q(ldl) => [
+ q(3832),
+ q(0),
+ ],
+ q(ldm) => [
+ q(3833),
+ q(0),
+ ],
+ q(ldn) => [
+ q(3834),
+ q(0),
+ ],
+ q(ldo) => [
+ q(3835),
+ q(0),
+ ],
+ q(ldp) => [
+ q(3836),
+ q(0),
+ ],
+ q(ldq) => [
+ q(3837),
+ q(0),
+ ],
+ q(lea) => [
+ q(3838),
+ q(0),
+ ],
+ q(leb) => [
+ q(3839),
+ q(0),
+ ],
+ q(lec) => [
+ q(3840),
+ q(0),
+ ],
+ q(led) => [
+ q(3841),
+ q(0),
+ ],
+ q(lee) => [
+ q(3842),
+ q(0),
+ ],
+ q(lef) => [
+ q(3843),
+ q(0),
+ ],
+ q(leg) => [
+ q(3844),
+ q(0),
+ ],
+ q(leh) => [
+ q(3845),
+ q(0),
+ ],
+ q(lei) => [
+ q(3846),
+ q(0),
+ ],
+ q(lej) => [
+ q(3847),
+ q(0),
+ ],
+ q(lek) => [
+ q(3848),
+ q(0),
+ ],
+ q(lel) => [
+ q(3849),
+ q(0),
+ ],
+ q(lem) => [
+ q(3850),
+ q(0),
+ ],
+ q(len) => [
+ q(3851),
+ q(0),
+ ],
+ q(leo) => [
+ q(3852),
+ q(0),
+ ],
+ q(lep) => [
+ q(3853),
+ q(0),
+ ],
+ q(leq) => [
+ q(3854),
+ q(0),
+ ],
+ q(ler) => [
+ q(3855),
+ q(0),
+ ],
+ q(les) => [
+ q(3856),
+ q(0),
+ ],
+ q(let) => [
+ q(3857),
+ q(0),
+ ],
+ q(leu) => [
+ q(3858),
+ q(0),
+ ],
+ q(lev) => [
+ q(3859),
+ q(0),
+ ],
+ q(lew) => [
+ q(3860),
+ q(0),
+ ],
+ q(lex) => [
+ q(3861),
+ q(0),
+ ],
+ q(ley) => [
+ q(3862),
+ q(0),
+ ],
+ q(lez) => [
+ q(0248),
+ q(0),
+ ],
+ q(lfa) => [
+ q(3863),
+ q(0),
+ ],
+ q(lfn) => [
+ q(3864),
+ q(0),
+ ],
+ q(lga) => [
+ q(3865),
+ q(0),
+ ],
+ q(lgb) => [
+ q(3866),
+ q(0),
+ ],
+ q(lgg) => [
+ q(3867),
+ q(0),
+ ],
+ q(lgh) => [
+ q(3868),
+ q(0),
+ ],
+ q(lgi) => [
+ q(3869),
+ q(0),
+ ],
+ q(lgk) => [
+ q(3870),
+ q(0),
+ ],
+ q(lgl) => [
+ q(3871),
+ q(0),
+ ],
+ q(lgm) => [
+ q(3872),
+ q(0),
+ ],
+ q(lgn) => [
+ q(3873),
+ q(0),
+ ],
+ q(lgq) => [
+ q(3874),
+ q(0),
+ ],
+ q(lgr) => [
+ q(3875),
+ q(0),
+ ],
+ q(lgt) => [
+ q(3876),
+ q(0),
+ ],
+ q(lgu) => [
+ q(3877),
+ q(0),
+ ],
+ q(lgz) => [
+ q(3878),
+ q(0),
+ ],
+ q(lha) => [
+ q(3879),
+ q(0),
+ ],
+ q(lhh) => [
+ q(3880),
+ q(0),
+ ],
+ q(lhi) => [
+ q(3881),
+ q(0),
+ ],
+ q(lhl) => [
+ q(3882),
+ q(0),
+ ],
+ q(lhm) => [
+ q(3883),
+ q(0),
+ ],
+ q(lhn) => [
+ q(3884),
+ q(0),
+ ],
+ q(lhp) => [
+ q(3885),
+ q(0),
+ ],
+ q(lhs) => [
+ q(3886),
+ q(0),
+ ],
+ q(lht) => [
+ q(3887),
+ q(0),
+ ],
+ q(lhu) => [
+ q(3888),
+ q(0),
+ ],
+ q(lia) => [
+ q(3889),
+ q(0),
+ ],
+ q(lib) => [
+ q(3890),
+ q(0),
+ ],
+ q(lic) => [
+ q(3891),
+ q(0),
+ ],
+ q(lid) => [
+ q(3892),
+ q(0),
+ ],
+ q(lie) => [
+ q(3893),
+ q(0),
+ ],
+ q(lif) => [
+ q(3894),
+ q(0),
+ ],
+ q(lig) => [
+ q(3895),
+ q(0),
+ ],
+ q(lih) => [
+ q(3896),
+ q(0),
+ ],
+ q(lii) => [
+ q(3897),
+ q(0),
+ ],
+ q(lij) => [
+ q(3898),
+ q(0),
+ ],
+ q(lik) => [
+ q(3899),
+ q(0),
+ ],
+ q(lil) => [
+ q(3900),
+ q(0),
+ ],
+ q(lim) => [
+ q(0249),
+ q(0),
+ ],
+ q(lin) => [
+ q(0250),
+ q(0),
+ ],
+ q(lio) => [
+ q(3901),
+ q(0),
+ ],
+ q(lip) => [
+ q(3902),
+ q(0),
+ ],
+ q(liq) => [
+ q(3903),
+ q(0),
+ ],
+ q(lir) => [
+ q(3904),
+ q(0),
+ ],
+ q(lis) => [
+ q(3905),
+ q(0),
+ ],
+ q(lit) => [
+ q(0251),
+ q(0),
+ ],
+ q(liu) => [
+ q(3906),
+ q(0),
+ ],
+ q(liv) => [
+ q(3907),
+ q(0),
+ ],
+ q(liw) => [
+ q(3908),
+ q(0),
+ ],
+ q(lix) => [
+ q(3909),
+ q(0),
+ ],
+ q(liy) => [
+ q(3910),
+ q(0),
+ ],
+ q(liz) => [
+ q(3911),
+ q(0),
+ ],
+ q(lje) => [
+ q(3912),
+ q(0),
+ ],
+ q(lji) => [
+ q(3913),
+ q(0),
+ ],
+ q(ljl) => [
+ q(3914),
+ q(0),
+ ],
+ q(ljp) => [
+ q(3915),
+ q(0),
+ ],
+ q(lka) => [
+ q(3916),
+ q(0),
+ ],
+ q(lkb) => [
+ q(3917),
+ q(0),
+ ],
+ q(lkc) => [
+ q(3918),
+ q(0),
+ ],
+ q(lkd) => [
+ q(3919),
+ q(0),
+ ],
+ q(lke) => [
+ q(3920),
+ q(0),
+ ],
+ q(lkh) => [
+ q(3921),
+ q(0),
+ ],
+ q(lki) => [
+ q(3922),
+ q(0),
+ ],
+ q(lkj) => [
+ q(3923),
+ q(0),
+ ],
+ q(lkl) => [
+ q(3924),
+ q(0),
+ ],
+ q(lkn) => [
+ q(3925),
+ q(0),
+ ],
+ q(lko) => [
+ q(3926),
+ q(0),
+ ],
+ q(lkr) => [
+ q(3927),
+ q(0),
+ ],
+ q(lks) => [
+ q(3928),
+ q(0),
+ ],
+ q(lkt) => [
+ q(3929),
+ q(0),
+ ],
+ q(lky) => [
+ q(3930),
+ q(0),
+ ],
+ q(lla) => [
+ q(3931),
+ q(0),
+ ],
+ q(llb) => [
+ q(3932),
+ q(0),
+ ],
+ q(llc) => [
+ q(3933),
+ q(0),
+ ],
+ q(lld) => [
+ q(3934),
+ q(0),
+ ],
+ q(lle) => [
+ q(3935),
+ q(0),
+ ],
+ q(llf) => [
+ q(3936),
+ q(0),
+ ],
+ q(llg) => [
+ q(3937),
+ q(0),
+ ],
+ q(llh) => [
+ q(3938),
+ q(0),
+ ],
+ q(lli) => [
+ q(3939),
+ q(0),
+ ],
+ q(llj) => [
+ q(3940),
+ q(0),
+ ],
+ q(llk) => [
+ q(3941),
+ q(0),
+ ],
+ q(lll) => [
+ q(3942),
+ q(0),
+ ],
+ q(llm) => [
+ q(3943),
+ q(0),
+ ],
+ q(lln) => [
+ q(3944),
+ q(0),
+ ],
+ q(llo) => [
+ q(3945),
+ q(0),
+ ],
+ q(llp) => [
+ q(3946),
+ q(0),
+ ],
+ q(llq) => [
+ q(3947),
+ q(0),
+ ],
+ q(lls) => [
+ q(3948),
+ q(0),
+ ],
+ q(llu) => [
+ q(3949),
+ q(0),
+ ],
+ q(llx) => [
+ q(3950),
+ q(0),
+ ],
+ q(lma) => [
+ q(3951),
+ q(0),
+ ],
+ q(lmb) => [
+ q(3952),
+ q(0),
+ ],
+ q(lmc) => [
+ q(3953),
+ q(0),
+ ],
+ q(lmd) => [
+ q(3954),
+ q(0),
+ ],
+ q(lme) => [
+ q(3955),
+ q(0),
+ ],
+ q(lmf) => [
+ q(3956),
+ q(0),
+ ],
+ q(lmg) => [
+ q(3957),
+ q(0),
+ ],
+ q(lmh) => [
+ q(3958),
+ q(0),
+ ],
+ q(lmi) => [
+ q(3959),
+ q(0),
+ ],
+ q(lmj) => [
+ q(3960),
+ q(0),
+ ],
+ q(lmk) => [
+ q(3961),
+ q(0),
+ ],
+ q(lml) => [
+ q(3962),
+ q(0),
+ ],
+ q(lmm) => [
+ q(3963),
+ q(0),
+ ],
+ q(lmn) => [
+ q(3964),
+ q(0),
+ ],
+ q(lmo) => [
+ q(3965),
+ q(0),
+ ],
+ q(lmp) => [
+ q(3966),
+ q(0),
+ ],
+ q(lmq) => [
+ q(3967),
+ q(0),
+ ],
+ q(lmr) => [
+ q(3968),
+ q(0),
+ ],
+ q(lmu) => [
+ q(3969),
+ q(0),
+ ],
+ q(lmv) => [
+ q(3970),
+ q(0),
+ ],
+ q(lmw) => [
+ q(3971),
+ q(0),
+ ],
+ q(lmx) => [
+ q(3972),
+ q(0),
+ ],
+ q(lmy) => [
+ q(3973),
+ q(0),
+ ],
+ q(lmz) => [
+ q(3974),
+ q(0),
+ ],
+ q(lna) => [
+ q(3975),
+ q(0),
+ ],
+ q(lnb) => [
+ q(3976),
+ q(0),
+ ],
+ q(lnd) => [
+ q(3977),
+ q(0),
+ ],
+ q(lng) => [
+ q(3978),
+ q(0),
+ ],
+ q(lnh) => [
+ q(3979),
+ q(0),
+ ],
+ q(lni) => [
+ q(3980),
+ q(0),
+ ],
+ q(lnj) => [
+ q(3981),
+ q(0),
+ ],
+ q(lnl) => [
+ q(3982),
+ q(0),
+ ],
+ q(lnm) => [
+ q(3983),
+ q(0),
+ ],
+ q(lnn) => [
+ q(3984),
+ q(0),
+ ],
+ q(lno) => [
+ q(3985),
+ q(0),
+ ],
+ q(lns) => [
+ q(3986),
+ q(0),
+ ],
+ q(lnu) => [
+ q(3987),
+ q(0),
+ ],
+ q(lnz) => [
+ q(3988),
+ q(0),
+ ],
+ q(loa) => [
+ q(3989),
+ q(0),
+ ],
+ q(lob) => [
+ q(3990),
+ q(0),
+ ],
+ q(loc) => [
+ q(3991),
+ q(0),
+ ],
+ q(loe) => [
+ q(3992),
+ q(0),
+ ],
+ q(lof) => [
+ q(3993),
+ q(0),
+ ],
+ q(log) => [
+ q(3994),
+ q(0),
+ ],
+ q(loh) => [
+ q(3995),
+ q(0),
+ ],
+ q(loi) => [
+ q(3996),
+ q(0),
+ ],
+ q(loj) => [
+ q(3997),
+ q(0),
+ ],
+ q(lok) => [
+ q(3998),
+ q(0),
+ ],
+ q(lol) => [
+ q(0252),
+ q(0),
+ ],
+ q(lom) => [
+ q(3999),
+ q(0),
+ ],
+ q(lon) => [
+ q(4000),
+ q(0),
+ ],
+ q(loo) => [
+ q(4001),
+ q(0),
+ ],
+ q(lop) => [
+ q(4002),
+ q(0),
+ ],
+ q(loq) => [
+ q(4003),
+ q(0),
+ ],
+ q(lor) => [
+ q(4004),
+ q(0),
+ ],
+ q(los) => [
+ q(4005),
+ q(0),
+ ],
+ q(lot) => [
+ q(4006),
+ q(0),
+ ],
+ q(lou) => [
+ q(4007),
+ q(0),
+ ],
+ q(lov) => [
+ q(4008),
+ q(0),
+ ],
+ q(low) => [
+ q(4009),
+ q(0),
+ ],
+ q(lox) => [
+ q(4010),
+ q(0),
+ ],
+ q(loy) => [
+ q(4011),
+ q(0),
+ ],
+ q(loz) => [
+ q(0253),
+ q(0),
+ ],
+ q(lpa) => [
+ q(4012),
+ q(0),
+ ],
+ q(lpe) => [
+ q(4013),
+ q(0),
+ ],
+ q(lpn) => [
+ q(4014),
+ q(0),
+ ],
+ q(lpo) => [
+ q(4015),
+ q(0),
+ ],
+ q(lpx) => [
+ q(4016),
+ q(0),
+ ],
+ q(lra) => [
+ q(4017),
+ q(0),
+ ],
+ q(lrc) => [
+ q(4018),
+ q(0),
+ ],
+ q(lre) => [
+ q(4019),
+ q(0),
+ ],
+ q(lrg) => [
+ q(4020),
+ q(0),
+ ],
+ q(lri) => [
+ q(4021),
+ q(0),
+ ],
+ q(lrk) => [
+ q(4022),
+ q(0),
+ ],
+ q(lrl) => [
+ q(4023),
+ q(0),
+ ],
+ q(lrm) => [
+ q(4024),
+ q(0),
+ ],
+ q(lrn) => [
+ q(4025),
+ q(0),
+ ],
+ q(lro) => [
+ q(4026),
+ q(0),
+ ],
+ q(lrr) => [
+ q(4027),
+ q(0),
+ ],
+ q(lrt) => [
+ q(4028),
+ q(0),
+ ],
+ q(lrv) => [
+ q(4029),
+ q(0),
+ ],
+ q(lrz) => [
+ q(4030),
+ q(0),
+ ],
+ q(lsa) => [
+ q(4031),
+ q(0),
+ ],
+ q(lsd) => [
+ q(4032),
+ q(0),
+ ],
+ q(lse) => [
+ q(4033),
+ q(0),
+ ],
+ q(lsg) => [
+ q(4034),
+ q(0),
+ ],
+ q(lsh) => [
+ q(4035),
+ q(0),
+ ],
+ q(lsi) => [
+ q(4036),
+ q(0),
+ ],
+ q(lsl) => [
+ q(4037),
+ q(0),
+ ],
+ q(lsm) => [
+ q(4038),
+ q(0),
+ ],
+ q(lso) => [
+ q(4039),
+ q(0),
+ ],
+ q(lsp) => [
+ q(4040),
+ q(0),
+ ],
+ q(lsr) => [
+ q(4041),
+ q(0),
+ ],
+ q(lss) => [
+ q(4042),
+ q(0),
+ ],
+ q(lst) => [
+ q(4043),
+ q(0),
+ ],
+ q(lsy) => [
+ q(4044),
+ q(0),
+ ],
+ q(ltc) => [
+ q(4045),
+ q(0),
+ ],
+ q(ltg) => [
+ q(4046),
+ q(0),
+ ],
+ q(lti) => [
+ q(4047),
+ q(0),
+ ],
+ q(ltn) => [
+ q(4048),
+ q(0),
+ ],
+ q(lto) => [
+ q(4049),
+ q(0),
+ ],
+ q(lts) => [
+ q(4050),
+ q(0),
+ ],
+ q(ltu) => [
+ q(4051),
+ q(0),
+ ],
+ q(ltz) => [
+ q(0254),
+ q(0),
+ ],
+ q(lua) => [
+ q(0255),
+ q(0),
+ ],
+ q(lub) => [
+ q(0256),
+ q(0),
+ ],
+ q(luc) => [
+ q(4052),
+ q(0),
+ ],
+ q(lud) => [
+ q(4053),
+ q(0),
+ ],
+ q(lue) => [
+ q(4054),
+ q(0),
+ ],
+ q(luf) => [
+ q(4055),
+ q(0),
+ ],
+ q(lug) => [
+ q(0257),
+ q(0),
+ ],
+ q(lui) => [
+ q(0258),
+ q(0),
+ ],
+ q(luj) => [
+ q(4056),
+ q(0),
+ ],
+ q(luk) => [
+ q(4057),
+ q(0),
+ ],
+ q(lul) => [
+ q(4058),
+ q(0),
+ ],
+ q(lum) => [
+ q(4059),
+ q(0),
+ ],
+ q(lun) => [
+ q(0259),
+ q(0),
+ ],
+ q(luo) => [
+ q(0260),
+ q(0),
+ ],
+ q(lup) => [
+ q(4060),
+ q(0),
+ ],
+ q(luq) => [
+ q(4061),
+ q(0),
+ ],
+ q(lur) => [
+ q(4062),
+ q(0),
+ ],
+ q(lus) => [
+ q(0261),
+ q(0),
+ ],
+ q(lut) => [
+ q(4063),
+ q(0),
+ ],
+ q(luu) => [
+ q(4064),
+ q(0),
+ ],
+ q(luv) => [
+ q(4065),
+ q(0),
+ ],
+ q(luw) => [
+ q(4066),
+ q(0),
+ ],
+ q(luy) => [
+ q(4067),
+ q(0),
+ ],
+ q(luz) => [
+ q(4068),
+ q(0),
+ ],
+ q(lva) => [
+ q(4069),
+ q(0),
+ ],
+ q(lvk) => [
+ q(4070),
+ q(0),
+ ],
+ q(lvs) => [
+ q(4071),
+ q(0),
+ ],
+ q(lvu) => [
+ q(4072),
+ q(0),
+ ],
+ q(lwa) => [
+ q(4073),
+ q(0),
+ ],
+ q(lwe) => [
+ q(4074),
+ q(0),
+ ],
+ q(lwg) => [
+ q(4075),
+ q(0),
+ ],
+ q(lwh) => [
+ q(4076),
+ q(0),
+ ],
+ q(lwl) => [
+ q(4077),
+ q(0),
+ ],
+ q(lwm) => [
+ q(4078),
+ q(0),
+ ],
+ q(lwo) => [
+ q(4079),
+ q(0),
+ ],
+ q(lwt) => [
+ q(4080),
+ q(0),
+ ],
+ q(lww) => [
+ q(4081),
+ q(0),
+ ],
+ q(lya) => [
+ q(4082),
+ q(0),
+ ],
+ q(lyg) => [
+ q(4083),
+ q(0),
+ ],
+ q(lyn) => [
+ q(4084),
+ q(0),
+ ],
+ q(lzh) => [
+ q(4085),
+ q(0),
+ ],
+ q(lzl) => [
+ q(4086),
+ q(0),
+ ],
+ q(lzn) => [
+ q(4087),
+ q(0),
+ ],
+ q(lzz) => [
+ q(4088),
+ q(0),
+ ],
+ q(maa) => [
+ q(4089),
+ q(0),
+ ],
+ q(mab) => [
+ q(4090),
+ q(0),
+ ],
+ q(mac) => [
+ q(0262),
+ q(0),
+ ],
+ q(mad) => [
+ q(0263),
+ q(0),
+ ],
+ q(mae) => [
+ q(4091),
+ q(0),
+ ],
+ q(maf) => [
+ q(4092),
+ q(0),
+ ],
+ q(mag) => [
+ q(0264),
+ q(0),
+ ],
+ q(mah) => [
+ q(0265),
+ q(0),
+ ],
+ q(mai) => [
+ q(0266),
+ q(0),
+ ],
+ q(maj) => [
+ q(4093),
+ q(0),
+ ],
+ q(mak) => [
+ q(0267),
+ q(0),
+ ],
+ q(mal) => [
+ q(0268),
+ q(0),
+ ],
+ q(mam) => [
+ q(4094),
+ q(0),
+ ],
+ q(man) => [
+ q(0269),
+ q(0),
+ ],
+ q(mao) => [
+ q(0270),
+ q(0),
+ ],
+ q(map) => [
+ q(0271),
+ q(0),
+ ],
+ q(maq) => [
+ q(4095),
+ q(0),
+ ],
+ q(mar) => [
+ q(0272),
+ q(0),
+ ],
+ q(mas) => [
+ q(0273),
+ q(0),
+ ],
+ q(mat) => [
+ q(4096),
+ q(0),
+ ],
+ q(mau) => [
+ q(4097),
+ q(0),
+ ],
+ q(mav) => [
+ q(4098),
+ q(0),
+ ],
+ q(maw) => [
+ q(4099),
+ q(0),
+ ],
+ q(max) => [
+ q(4100),
+ q(0),
+ ],
+ q(may) => [
+ q(0274),
+ q(0),
+ ],
+ q(maz) => [
+ q(4101),
+ q(0),
+ ],
+ q(mba) => [
+ q(4102),
+ q(0),
+ ],
+ q(mbb) => [
+ q(4103),
+ q(0),
+ ],
+ q(mbc) => [
+ q(4104),
+ q(0),
+ ],
+ q(mbd) => [
+ q(4105),
+ q(0),
+ ],
+ q(mbe) => [
+ q(4106),
+ q(0),
+ ],
+ q(mbf) => [
+ q(4107),
+ q(0),
+ ],
+ q(mbh) => [
+ q(4108),
+ q(0),
+ ],
+ q(mbi) => [
+ q(4109),
+ q(0),
+ ],
+ q(mbj) => [
+ q(4110),
+ q(0),
+ ],
+ q(mbk) => [
+ q(4111),
+ q(0),
+ ],
+ q(mbl) => [
+ q(4112),
+ q(0),
+ ],
+ q(mbm) => [
+ q(4113),
+ q(0),
+ ],
+ q(mbn) => [
+ q(4114),
+ q(0),
+ ],
+ q(mbo) => [
+ q(4115),
+ q(0),
+ ],
+ q(mbp) => [
+ q(4116),
+ q(0),
+ ],
+ q(mbq) => [
+ q(4117),
+ q(0),
+ ],
+ q(mbr) => [
+ q(4118),
+ q(0),
+ ],
+ q(mbs) => [
+ q(4119),
+ q(0),
+ ],
+ q(mbt) => [
+ q(4120),
+ q(0),
+ ],
+ q(mbu) => [
+ q(4121),
+ q(0),
+ ],
+ q(mbv) => [
+ q(4122),
+ q(0),
+ ],
+ q(mbw) => [
+ q(4123),
+ q(0),
+ ],
+ q(mbx) => [
+ q(4124),
+ q(0),
+ ],
+ q(mby) => [
+ q(4125),
+ q(0),
+ ],
+ q(mbz) => [
+ q(4126),
+ q(0),
+ ],
+ q(mca) => [
+ q(4127),
+ q(0),
+ ],
+ q(mcb) => [
+ q(4128),
+ q(0),
+ ],
+ q(mcc) => [
+ q(4129),
+ q(0),
+ ],
+ q(mcd) => [
+ q(4130),
+ q(0),
+ ],
+ q(mce) => [
+ q(4131),
+ q(0),
+ ],
+ q(mcf) => [
+ q(4132),
+ q(0),
+ ],
+ q(mcg) => [
+ q(4133),
+ q(0),
+ ],
+ q(mch) => [
+ q(4134),
+ q(0),
+ ],
+ q(mci) => [
+ q(4135),
+ q(0),
+ ],
+ q(mcj) => [
+ q(4136),
+ q(0),
+ ],
+ q(mck) => [
+ q(4137),
+ q(0),
+ ],
+ q(mcl) => [
+ q(4138),
+ q(0),
+ ],
+ q(mcm) => [
+ q(4139),
+ q(0),
+ ],
+ q(mcn) => [
+ q(4140),
+ q(0),
+ ],
+ q(mco) => [
+ q(4141),
+ q(0),
+ ],
+ q(mcp) => [
+ q(4142),
+ q(0),
+ ],
+ q(mcq) => [
+ q(4143),
+ q(0),
+ ],
+ q(mcr) => [
+ q(4144),
+ q(0),
+ ],
+ q(mcs) => [
+ q(4145),
+ q(0),
+ ],
+ q(mct) => [
+ q(4146),
+ q(0),
+ ],
+ q(mcu) => [
+ q(4147),
+ q(0),
+ ],
+ q(mcv) => [
+ q(4148),
+ q(0),
+ ],
+ q(mcw) => [
+ q(4149),
+ q(0),
+ ],
+ q(mcx) => [
+ q(4150),
+ q(0),
+ ],
+ q(mcy) => [
+ q(4151),
+ q(0),
+ ],
+ q(mcz) => [
+ q(4152),
+ q(0),
+ ],
+ q(mda) => [
+ q(4153),
+ q(0),
+ ],
+ q(mdb) => [
+ q(4154),
+ q(0),
+ ],
+ q(mdc) => [
+ q(4155),
+ q(0),
+ ],
+ q(mdd) => [
+ q(4156),
+ q(0),
+ ],
+ q(mde) => [
+ q(4157),
+ q(0),
+ ],
+ q(mdf) => [
+ q(0275),
+ q(0),
+ ],
+ q(mdg) => [
+ q(4158),
+ q(0),
+ ],
+ q(mdh) => [
+ q(4159),
+ q(0),
+ ],
+ q(mdi) => [
+ q(4160),
+ q(0),
+ ],
+ q(mdj) => [
+ q(4161),
+ q(0),
+ ],
+ q(mdk) => [
+ q(4162),
+ q(0),
+ ],
+ q(mdl) => [
+ q(4163),
+ q(0),
+ ],
+ q(mdm) => [
+ q(4164),
+ q(0),
+ ],
+ q(mdn) => [
+ q(4165),
+ q(0),
+ ],
+ q(mdp) => [
+ q(4166),
+ q(0),
+ ],
+ q(mdq) => [
+ q(4167),
+ q(0),
+ ],
+ q(mdr) => [
+ q(0276),
+ q(0),
+ ],
+ q(mds) => [
+ q(4168),
+ q(0),
+ ],
+ q(mdt) => [
+ q(4169),
+ q(0),
+ ],
+ q(mdu) => [
+ q(4170),
+ q(0),
+ ],
+ q(mdv) => [
+ q(4171),
+ q(0),
+ ],
+ q(mdw) => [
+ q(4172),
+ q(0),
+ ],
+ q(mdx) => [
+ q(4173),
+ q(0),
+ ],
+ q(mdy) => [
+ q(4174),
+ q(0),
+ ],
+ q(mdz) => [
+ q(4175),
+ q(0),
+ ],
+ q(mea) => [
+ q(4176),
+ q(0),
+ ],
+ q(meb) => [
+ q(4177),
+ q(0),
+ ],
+ q(mec) => [
+ q(4178),
+ q(0),
+ ],
+ q(med) => [
+ q(4179),
+ q(0),
+ ],
+ q(mee) => [
+ q(4180),
+ q(0),
+ ],
+ q(mef) => [
+ q(4181),
+ q(0),
+ ],
+ q(meg) => [
+ q(4182),
+ q(0),
+ ],
+ q(meh) => [
+ q(4183),
+ q(0),
+ ],
+ q(mei) => [
+ q(4184),
+ q(0),
+ ],
+ q(mej) => [
+ q(4185),
+ q(0),
+ ],
+ q(mek) => [
+ q(4186),
+ q(0),
+ ],
+ q(mel) => [
+ q(4187),
+ q(0),
+ ],
+ q(mem) => [
+ q(4188),
+ q(0),
+ ],
+ q(men) => [
+ q(0277),
+ q(1),
+ ],
+ q(meo) => [
+ q(4189),
+ q(0),
+ ],
+ q(mep) => [
+ q(4190),
+ q(0),
+ ],
+ q(meq) => [
+ q(4191),
+ q(0),
+ ],
+ q(mer) => [
+ q(4192),
+ q(0),
+ ],
+ q(mes) => [
+ q(4193),
+ q(0),
+ ],
+ q(met) => [
+ q(4194),
+ q(0),
+ ],
+ q(meu) => [
+ q(4195),
+ q(0),
+ ],
+ q(mev) => [
+ q(4196),
+ q(0),
+ ],
+ q(mew) => [
+ q(4197),
+ q(0),
+ ],
+ q(mey) => [
+ q(4198),
+ q(0),
+ ],
+ q(mez) => [
+ q(4199),
+ q(0),
+ ],
+ q(mfa) => [
+ q(4200),
+ q(0),
+ ],
+ q(mfb) => [
+ q(4201),
+ q(0),
+ ],
+ q(mfc) => [
+ q(4202),
+ q(0),
+ ],
+ q(mfd) => [
+ q(4203),
+ q(0),
+ ],
+ q(mfe) => [
+ q(4204),
+ q(0),
+ ],
+ q(mff) => [
+ q(4205),
+ q(0),
+ ],
+ q(mfg) => [
+ q(4206),
+ q(0),
+ ],
+ q(mfh) => [
+ q(4207),
+ q(0),
+ ],
+ q(mfi) => [
+ q(4208),
+ q(0),
+ ],
+ q(mfj) => [
+ q(4209),
+ q(0),
+ ],
+ q(mfk) => [
+ q(4210),
+ q(0),
+ ],
+ q(mfl) => [
+ q(4211),
+ q(0),
+ ],
+ q(mfm) => [
+ q(4212),
+ q(0),
+ ],
+ q(mfn) => [
+ q(4213),
+ q(0),
+ ],
+ q(mfo) => [
+ q(4214),
+ q(0),
+ ],
+ q(mfp) => [
+ q(4215),
+ q(0),
+ ],
+ q(mfq) => [
+ q(4216),
+ q(0),
+ ],
+ q(mfr) => [
+ q(4217),
+ q(0),
+ ],
+ q(mfs) => [
+ q(4218),
+ q(0),
+ ],
+ q(mft) => [
+ q(4219),
+ q(0),
+ ],
+ q(mfu) => [
+ q(4220),
+ q(0),
+ ],
+ q(mfv) => [
+ q(4221),
+ q(0),
+ ],
+ q(mfw) => [
+ q(4222),
+ q(0),
+ ],
+ q(mfx) => [
+ q(4223),
+ q(0),
+ ],
+ q(mfy) => [
+ q(4224),
+ q(0),
+ ],
+ q(mfz) => [
+ q(4225),
+ q(0),
+ ],
+ q(mga) => [
+ q(0278),
+ q(1),
+ ],
+ q(mgb) => [
+ q(4226),
+ q(0),
+ ],
+ q(mgc) => [
+ q(4227),
+ q(0),
+ ],
+ q(mgd) => [
+ q(4228),
+ q(0),
+ ],
+ q(mge) => [
+ q(4229),
+ q(0),
+ ],
+ q(mgf) => [
+ q(4230),
+ q(0),
+ ],
+ q(mgg) => [
+ q(4231),
+ q(0),
+ ],
+ q(mgh) => [
+ q(4232),
+ q(0),
+ ],
+ q(mgi) => [
+ q(4233),
+ q(0),
+ ],
+ q(mgj) => [
+ q(4234),
+ q(0),
+ ],
+ q(mgk) => [
+ q(4235),
+ q(0),
+ ],
+ q(mgl) => [
+ q(4236),
+ q(0),
+ ],
+ q(mgm) => [
+ q(4237),
+ q(0),
+ ],
+ q(mgn) => [
+ q(4238),
+ q(0),
+ ],
+ q(mgo) => [
+ q(4239),
+ q(0),
+ ],
+ q(mgp) => [
+ q(4240),
+ q(0),
+ ],
+ q(mgq) => [
+ q(4241),
+ q(0),
+ ],
+ q(mgr) => [
+ q(4242),
+ q(0),
+ ],
+ q(mgs) => [
+ q(4243),
+ q(0),
+ ],
+ q(mgt) => [
+ q(4244),
+ q(0),
+ ],
+ q(mgu) => [
+ q(4245),
+ q(0),
+ ],
+ q(mgv) => [
+ q(4246),
+ q(0),
+ ],
+ q(mgw) => [
+ q(4247),
+ q(0),
+ ],
+ q(mgy) => [
+ q(4248),
+ q(0),
+ ],
+ q(mgz) => [
+ q(4249),
+ q(0),
+ ],
+ q(mha) => [
+ q(4250),
+ q(0),
+ ],
+ q(mhb) => [
+ q(4251),
+ q(0),
+ ],
+ q(mhc) => [
+ q(4252),
+ q(0),
+ ],
+ q(mhd) => [
+ q(4253),
+ q(0),
+ ],
+ q(mhe) => [
+ q(4254),
+ q(0),
+ ],
+ q(mhf) => [
+ q(4255),
+ q(0),
+ ],
+ q(mhg) => [
+ q(4256),
+ q(0),
+ ],
+ q(mhh) => [
+ q(4257),
+ q(0),
+ ],
+ q(mhi) => [
+ q(4258),
+ q(0),
+ ],
+ q(mhj) => [
+ q(4259),
+ q(0),
+ ],
+ q(mhk) => [
+ q(4260),
+ q(0),
+ ],
+ q(mhl) => [
+ q(4261),
+ q(0),
+ ],
+ q(mhm) => [
+ q(4262),
+ q(0),
+ ],
+ q(mhn) => [
+ q(4263),
+ q(0),
+ ],
+ q(mho) => [
+ q(4264),
+ q(0),
+ ],
+ q(mhp) => [
+ q(4265),
+ q(0),
+ ],
+ q(mhq) => [
+ q(4266),
+ q(0),
+ ],
+ q(mhr) => [
+ q(4267),
+ q(0),
+ ],
+ q(mhs) => [
+ q(4268),
+ q(0),
+ ],
+ q(mht) => [
+ q(4269),
+ q(0),
+ ],
+ q(mhu) => [
+ q(4270),
+ q(0),
+ ],
+ q(mhw) => [
+ q(4271),
+ q(0),
+ ],
+ q(mhx) => [
+ q(4272),
+ q(0),
+ ],
+ q(mhy) => [
+ q(4273),
+ q(0),
+ ],
+ q(mhz) => [
+ q(4274),
+ q(0),
+ ],
+ q(mia) => [
+ q(4275),
+ q(0),
+ ],
+ q(mib) => [
+ q(4276),
+ q(0),
+ ],
+ q(mic) => [
+ q(0279),
+ q(0),
+ ],
+ q(mid) => [
+ q(4277),
+ q(0),
+ ],
+ q(mie) => [
+ q(4278),
+ q(0),
+ ],
+ q(mif) => [
+ q(4279),
+ q(0),
+ ],
+ q(mig) => [
+ q(4280),
+ q(0),
+ ],
+ q(mih) => [
+ q(4281),
+ q(0),
+ ],
+ q(mii) => [
+ q(4282),
+ q(0),
+ ],
+ q(mij) => [
+ q(4283),
+ q(0),
+ ],
+ q(mik) => [
+ q(4284),
+ q(0),
+ ],
+ q(mil) => [
+ q(4285),
+ q(0),
+ ],
+ q(mim) => [
+ q(4286),
+ q(0),
+ ],
+ q(min) => [
+ q(0280),
+ q(0),
+ ],
+ q(mio) => [
+ q(4287),
+ q(0),
+ ],
+ q(mip) => [
+ q(4288),
+ q(0),
+ ],
+ q(miq) => [
+ q(4289),
+ q(0),
+ ],
+ q(mir) => [
+ q(4290),
+ q(0),
+ ],
+ q(mis) => [
+ q(0281),
+ q(0),
+ ],
+ q(mit) => [
+ q(4291),
+ q(0),
+ ],
+ q(miu) => [
+ q(4292),
+ q(0),
+ ],
+ q(miw) => [
+ q(4293),
+ q(0),
+ ],
+ q(mix) => [
+ q(4294),
+ q(0),
+ ],
+ q(miy) => [
+ q(4295),
+ q(0),
+ ],
+ q(miz) => [
+ q(4296),
+ q(0),
+ ],
+ q(mjc) => [
+ q(4297),
+ q(0),
+ ],
+ q(mjd) => [
+ q(4298),
+ q(0),
+ ],
+ q(mje) => [
+ q(4299),
+ q(0),
+ ],
+ q(mjg) => [
+ q(4300),
+ q(0),
+ ],
+ q(mjh) => [
+ q(4301),
+ q(0),
+ ],
+ q(mji) => [
+ q(4302),
+ q(0),
+ ],
+ q(mjj) => [
+ q(4303),
+ q(0),
+ ],
+ q(mjk) => [
+ q(4304),
+ q(0),
+ ],
+ q(mjl) => [
+ q(4305),
+ q(0),
+ ],
+ q(mjm) => [
+ q(4306),
+ q(0),
+ ],
+ q(mjn) => [
+ q(4307),
+ q(0),
+ ],
+ q(mjo) => [
+ q(4308),
+ q(0),
+ ],
+ q(mjp) => [
+ q(4309),
+ q(0),
+ ],
+ q(mjq) => [
+ q(4310),
+ q(0),
+ ],
+ q(mjr) => [
+ q(4311),
+ q(0),
+ ],
+ q(mjs) => [
+ q(4312),
+ q(0),
+ ],
+ q(mjt) => [
+ q(4313),
+ q(0),
+ ],
+ q(mju) => [
+ q(4314),
+ q(0),
+ ],
+ q(mjv) => [
+ q(4315),
+ q(0),
+ ],
+ q(mjw) => [
+ q(4316),
+ q(0),
+ ],
+ q(mjx) => [
+ q(4317),
+ q(0),
+ ],
+ q(mjy) => [
+ q(4318),
+ q(0),
+ ],
+ q(mjz) => [
+ q(4319),
+ q(0),
+ ],
+ q(mka) => [
+ q(4320),
+ q(0),
+ ],
+ q(mkb) => [
+ q(4321),
+ q(0),
+ ],
+ q(mkc) => [
+ q(4322),
+ q(0),
+ ],
+ q(mke) => [
+ q(4323),
+ q(0),
+ ],
+ q(mkf) => [
+ q(4324),
+ q(0),
+ ],
+ q(mkg) => [
+ q(4325),
+ q(0),
+ ],
+ q(mkh) => [
+ q(0282),
+ q(0),
+ ],
+ q(mki) => [
+ q(4326),
+ q(0),
+ ],
+ q(mkj) => [
+ q(4327),
+ q(0),
+ ],
+ q(mkk) => [
+ q(4328),
+ q(0),
+ ],
+ q(mkl) => [
+ q(4329),
+ q(0),
+ ],
+ q(mkm) => [
+ q(4330),
+ q(0),
+ ],
+ q(mkn) => [
+ q(4331),
+ q(0),
+ ],
+ q(mko) => [
+ q(4332),
+ q(0),
+ ],
+ q(mkp) => [
+ q(4333),
+ q(0),
+ ],
+ q(mkq) => [
+ q(4334),
+ q(0),
+ ],
+ q(mkr) => [
+ q(4335),
+ q(0),
+ ],
+ q(mks) => [
+ q(4336),
+ q(0),
+ ],
+ q(mkt) => [
+ q(4337),
+ q(0),
+ ],
+ q(mku) => [
+ q(4338),
+ q(0),
+ ],
+ q(mkv) => [
+ q(4339),
+ q(0),
+ ],
+ q(mkw) => [
+ q(4340),
+ q(0),
+ ],
+ q(mkx) => [
+ q(4341),
+ q(0),
+ ],
+ q(mky) => [
+ q(4342),
+ q(0),
+ ],
+ q(mkz) => [
+ q(4343),
+ q(0),
+ ],
+ q(mla) => [
+ q(4344),
+ q(0),
+ ],
+ q(mlb) => [
+ q(4345),
+ q(0),
+ ],
+ q(mlc) => [
+ q(4346),
+ q(0),
+ ],
+ q(mld) => [
+ q(4347),
+ q(0),
+ ],
+ q(mle) => [
+ q(4348),
+ q(0),
+ ],
+ q(mlf) => [
+ q(4349),
+ q(0),
+ ],
+ q(mlg) => [
+ q(0283),
+ q(0),
+ ],
+ q(mlh) => [
+ q(4350),
+ q(0),
+ ],
+ q(mli) => [
+ q(4351),
+ q(0),
+ ],
+ q(mlj) => [
+ q(4352),
+ q(0),
+ ],
+ q(mlk) => [
+ q(4353),
+ q(0),
+ ],
+ q(mll) => [
+ q(4354),
+ q(0),
+ ],
+ q(mlm) => [
+ q(4355),
+ q(0),
+ ],
+ q(mln) => [
+ q(4356),
+ q(0),
+ ],
+ q(mlo) => [
+ q(4357),
+ q(0),
+ ],
+ q(mlp) => [
+ q(4358),
+ q(0),
+ ],
+ q(mlq) => [
+ q(4359),
+ q(0),
+ ],
+ q(mlr) => [
+ q(4360),
+ q(0),
+ ],
+ q(mls) => [
+ q(4361),
+ q(0),
+ ],
+ q(mlt) => [
+ q(0284),
+ q(0),
+ ],
+ q(mlu) => [
+ q(4362),
+ q(0),
+ ],
+ q(mlv) => [
+ q(4363),
+ q(0),
+ ],
+ q(mlw) => [
+ q(4364),
+ q(0),
+ ],
+ q(mlx) => [
+ q(4365),
+ q(0),
+ ],
+ q(mlz) => [
+ q(4366),
+ q(0),
+ ],
+ q(mma) => [
+ q(4367),
+ q(0),
+ ],
+ q(mmb) => [
+ q(4368),
+ q(0),
+ ],
+ q(mmc) => [
+ q(4369),
+ q(0),
+ ],
+ q(mmd) => [
+ q(4370),
+ q(0),
+ ],
+ q(mme) => [
+ q(4371),
+ q(0),
+ ],
+ q(mmf) => [
+ q(4372),
+ q(0),
+ ],
+ q(mmg) => [
+ q(4373),
+ q(0),
+ ],
+ q(mmh) => [
+ q(4374),
+ q(0),
+ ],
+ q(mmi) => [
+ q(4375),
+ q(0),
+ ],
+ q(mmj) => [
+ q(4376),
+ q(0),
+ ],
+ q(mmk) => [
+ q(4377),
+ q(0),
+ ],
+ q(mml) => [
+ q(4378),
+ q(0),
+ ],
+ q(mmm) => [
+ q(4379),
+ q(0),
+ ],
+ q(mmn) => [
+ q(4380),
+ q(0),
+ ],
+ q(mmo) => [
+ q(4381),
+ q(0),
+ ],
+ q(mmp) => [
+ q(4382),
+ q(0),
+ ],
+ q(mmq) => [
+ q(4383),
+ q(0),
+ ],
+ q(mmr) => [
+ q(4384),
+ q(0),
+ ],
+ q(mmt) => [
+ q(4385),
+ q(0),
+ ],
+ q(mmu) => [
+ q(4386),
+ q(0),
+ ],
+ q(mmv) => [
+ q(4387),
+ q(0),
+ ],
+ q(mmw) => [
+ q(4388),
+ q(0),
+ ],
+ q(mmx) => [
+ q(4389),
+ q(0),
+ ],
+ q(mmy) => [
+ q(4390),
+ q(0),
+ ],
+ q(mmz) => [
+ q(4391),
+ q(0),
+ ],
+ q(mna) => [
+ q(4392),
+ q(0),
+ ],
+ q(mnb) => [
+ q(4393),
+ q(0),
+ ],
+ q(mnc) => [
+ q(0285),
+ q(0),
+ ],
+ q(mnd) => [
+ q(4394),
+ q(0),
+ ],
+ q(mne) => [
+ q(4395),
+ q(0),
+ ],
+ q(mnf) => [
+ q(4396),
+ q(0),
+ ],
+ q(mng) => [
+ q(4397),
+ q(0),
+ ],
+ q(mnh) => [
+ q(4398),
+ q(0),
+ ],
+ q(mni) => [
+ q(0286),
+ q(0),
+ ],
+ q(mnj) => [
+ q(4399),
+ q(0),
+ ],
+ q(mnk) => [
+ q(4400),
+ q(0),
+ ],
+ q(mnl) => [
+ q(4401),
+ q(0),
+ ],
+ q(mnm) => [
+ q(4402),
+ q(0),
+ ],
+ q(mnn) => [
+ q(4403),
+ q(0),
+ ],
+ q(mno) => [
+ q(0287),
+ q(0),
+ ],
+ q(mnp) => [
+ q(4404),
+ q(0),
+ ],
+ q(mnq) => [
+ q(4405),
+ q(0),
+ ],
+ q(mnr) => [
+ q(4406),
+ q(0),
+ ],
+ q(mns) => [
+ q(4407),
+ q(0),
+ ],
+ q(mnt) => [
+ q(4408),
+ q(0),
+ ],
+ q(mnu) => [
+ q(4409),
+ q(0),
+ ],
+ q(mnv) => [
+ q(4410),
+ q(0),
+ ],
+ q(mnw) => [
+ q(4411),
+ q(0),
+ ],
+ q(mnx) => [
+ q(4412),
+ q(0),
+ ],
+ q(mny) => [
+ q(4413),
+ q(0),
+ ],
+ q(mnz) => [
+ q(4414),
+ q(0),
+ ],
+ q(moa) => [
+ q(4415),
+ q(0),
+ ],
+ q(moc) => [
+ q(4416),
+ q(0),
+ ],
+ q(mod) => [
+ q(4417),
+ q(0),
+ ],
+ q(moe) => [
+ q(4418),
+ q(0),
+ ],
+ q(mog) => [
+ q(4419),
+ q(0),
+ ],
+ q(moh) => [
+ q(0288),
+ q(0),
+ ],
+ q(moi) => [
+ q(4420),
+ q(0),
+ ],
+ q(moj) => [
+ q(4421),
+ q(0),
+ ],
+ q(mok) => [
+ q(4422),
+ q(0),
+ ],
+ q(mom) => [
+ q(4423),
+ q(0),
+ ],
+ q(mon) => [
+ q(0289),
+ q(0),
+ ],
+ q(moo) => [
+ q(4424),
+ q(0),
+ ],
+ q(mop) => [
+ q(4425),
+ q(0),
+ ],
+ q(moq) => [
+ q(4426),
+ q(0),
+ ],
+ q(mor) => [
+ q(4427),
+ q(0),
+ ],
+ q(mos) => [
+ q(0290),
+ q(0),
+ ],
+ q(mot) => [
+ q(1137),
+ q(0),
+ ],
+ q(mou) => [
+ q(4428),
+ q(0),
+ ],
+ q(mov) => [
+ q(4429),
+ q(0),
+ ],
+ q(mow) => [
+ q(4430),
+ q(0),
+ ],
+ q(mox) => [
+ q(4431),
+ q(0),
+ ],
+ q(moy) => [
+ q(4432),
+ q(0),
+ ],
+ q(moz) => [
+ q(4433),
+ q(0),
+ ],
+ q(mpa) => [
+ q(4434),
+ q(0),
+ ],
+ q(mpb) => [
+ q(4435),
+ q(0),
+ ],
+ q(mpc) => [
+ q(4436),
+ q(0),
+ ],
+ q(mpd) => [
+ q(4437),
+ q(0),
+ ],
+ q(mpe) => [
+ q(4438),
+ q(0),
+ ],
+ q(mpg) => [
+ q(4439),
+ q(0),
+ ],
+ q(mph) => [
+ q(4440),
+ q(0),
+ ],
+ q(mpi) => [
+ q(4441),
+ q(0),
+ ],
+ q(mpj) => [
+ q(4442),
+ q(0),
+ ],
+ q(mpk) => [
+ q(4443),
+ q(0),
+ ],
+ q(mpl) => [
+ q(4444),
+ q(0),
+ ],
+ q(mpm) => [
+ q(4445),
+ q(0),
+ ],
+ q(mpn) => [
+ q(4446),
+ q(0),
+ ],
+ q(mpo) => [
+ q(4447),
+ q(0),
+ ],
+ q(mpp) => [
+ q(4448),
+ q(0),
+ ],
+ q(mpq) => [
+ q(4449),
+ q(0),
+ ],
+ q(mpr) => [
+ q(4450),
+ q(0),
+ ],
+ q(mps) => [
+ q(4451),
+ q(0),
+ ],
+ q(mpt) => [
+ q(4452),
+ q(0),
+ ],
+ q(mpu) => [
+ q(4453),
+ q(0),
+ ],
+ q(mpv) => [
+ q(4454),
+ q(0),
+ ],
+ q(mpw) => [
+ q(4455),
+ q(0),
+ ],
+ q(mpx) => [
+ q(4456),
+ q(0),
+ ],
+ q(mpy) => [
+ q(4457),
+ q(0),
+ ],
+ q(mpz) => [
+ q(4458),
+ q(0),
+ ],
+ q(mqa) => [
+ q(4459),
+ q(0),
+ ],
+ q(mqb) => [
+ q(4460),
+ q(0),
+ ],
+ q(mqc) => [
+ q(4461),
+ q(0),
+ ],
+ q(mqe) => [
+ q(4462),
+ q(0),
+ ],
+ q(mqf) => [
+ q(4463),
+ q(0),
+ ],
+ q(mqg) => [
+ q(4464),
+ q(0),
+ ],
+ q(mqh) => [
+ q(4465),
+ q(0),
+ ],
+ q(mqi) => [
+ q(4466),
+ q(0),
+ ],
+ q(mqj) => [
+ q(4467),
+ q(0),
+ ],
+ q(mqk) => [
+ q(4468),
+ q(0),
+ ],
+ q(mql) => [
+ q(4469),
+ q(0),
+ ],
+ q(mqm) => [
+ q(4470),
+ q(0),
+ ],
+ q(mqn) => [
+ q(4471),
+ q(0),
+ ],
+ q(mqo) => [
+ q(4472),
+ q(0),
+ ],
+ q(mqp) => [
+ q(4473),
+ q(0),
+ ],
+ q(mqq) => [
+ q(4474),
+ q(0),
+ ],
+ q(mqr) => [
+ q(4475),
+ q(0),
+ ],
+ q(mqs) => [
+ q(4476),
+ q(0),
+ ],
+ q(mqt) => [
+ q(4477),
+ q(0),
+ ],
+ q(mqu) => [
+ q(4478),
+ q(0),
+ ],
+ q(mqv) => [
+ q(4479),
+ q(0),
+ ],
+ q(mqw) => [
+ q(4480),
+ q(0),
+ ],
+ q(mqx) => [
+ q(4481),
+ q(0),
+ ],
+ q(mqy) => [
+ q(4482),
+ q(0),
+ ],
+ q(mqz) => [
+ q(4483),
+ q(0),
+ ],
+ q(mra) => [
+ q(4484),
+ q(0),
+ ],
+ q(mrb) => [
+ q(4485),
+ q(0),
+ ],
+ q(mrc) => [
+ q(4486),
+ q(0),
+ ],
+ q(mrd) => [
+ q(4487),
+ q(0),
+ ],
+ q(mre) => [
+ q(4488),
+ q(0),
+ ],
+ q(mrf) => [
+ q(4489),
+ q(0),
+ ],
+ q(mrg) => [
+ q(4490),
+ q(0),
+ ],
+ q(mrh) => [
+ q(4491),
+ q(0),
+ ],
+ q(mrj) => [
+ q(4492),
+ q(0),
+ ],
+ q(mrk) => [
+ q(4493),
+ q(0),
+ ],
+ q(mrl) => [
+ q(4494),
+ q(0),
+ ],
+ q(mrm) => [
+ q(4495),
+ q(0),
+ ],
+ q(mrn) => [
+ q(4496),
+ q(0),
+ ],
+ q(mro) => [
+ q(4497),
+ q(0),
+ ],
+ q(mrp) => [
+ q(4498),
+ q(0),
+ ],
+ q(mrq) => [
+ q(4499),
+ q(0),
+ ],
+ q(mrr) => [
+ q(4500),
+ q(0),
+ ],
+ q(mrs) => [
+ q(4501),
+ q(0),
+ ],
+ q(mrt) => [
+ q(4502),
+ q(0),
+ ],
+ q(mru) => [
+ q(4503),
+ q(0),
+ ],
+ q(mrv) => [
+ q(4504),
+ q(0),
+ ],
+ q(mrw) => [
+ q(4505),
+ q(0),
+ ],
+ q(mrx) => [
+ q(4506),
+ q(0),
+ ],
+ q(mry) => [
+ q(4507),
+ q(0),
+ ],
+ q(mrz) => [
+ q(4508),
+ q(0),
+ ],
+ q(msb) => [
+ q(4509),
+ q(0),
+ ],
+ q(msc) => [
+ q(4510),
+ q(0),
+ ],
+ q(msd) => [
+ q(4511),
+ q(0),
+ ],
+ q(mse) => [
+ q(4512),
+ q(0),
+ ],
+ q(msf) => [
+ q(4513),
+ q(0),
+ ],
+ q(msg) => [
+ q(4514),
+ q(0),
+ ],
+ q(msh) => [
+ q(4515),
+ q(0),
+ ],
+ q(msi) => [
+ q(4516),
+ q(0),
+ ],
+ q(msj) => [
+ q(4517),
+ q(0),
+ ],
+ q(msk) => [
+ q(4518),
+ q(0),
+ ],
+ q(msl) => [
+ q(4519),
+ q(0),
+ ],
+ q(msm) => [
+ q(4520),
+ q(0),
+ ],
+ q(msn) => [
+ q(4521),
+ q(0),
+ ],
+ q(mso) => [
+ q(4522),
+ q(0),
+ ],
+ q(msp) => [
+ q(4523),
+ q(0),
+ ],
+ q(msq) => [
+ q(4524),
+ q(0),
+ ],
+ q(msr) => [
+ q(4525),
+ q(0),
+ ],
+ q(mss) => [
+ q(4526),
+ q(0),
+ ],
+ q(msu) => [
+ q(4527),
+ q(0),
+ ],
+ q(msv) => [
+ q(4528),
+ q(0),
+ ],
+ q(msw) => [
+ q(4529),
+ q(0),
+ ],
+ q(msx) => [
+ q(4530),
+ q(0),
+ ],
+ q(msy) => [
+ q(4531),
+ q(0),
+ ],
+ q(msz) => [
+ q(4532),
+ q(0),
+ ],
+ q(mta) => [
+ q(4533),
+ q(0),
+ ],
+ q(mtb) => [
+ q(4534),
+ q(0),
+ ],
+ q(mtc) => [
+ q(4535),
+ q(0),
+ ],
+ q(mtd) => [
+ q(4536),
+ q(0),
+ ],
+ q(mte) => [
+ q(4537),
+ q(0),
+ ],
+ q(mtf) => [
+ q(4538),
+ q(0),
+ ],
+ q(mtg) => [
+ q(4539),
+ q(0),
+ ],
+ q(mth) => [
+ q(4540),
+ q(0),
+ ],
+ q(mti) => [
+ q(4541),
+ q(0),
+ ],
+ q(mtj) => [
+ q(4542),
+ q(0),
+ ],
+ q(mtk) => [
+ q(4543),
+ q(0),
+ ],
+ q(mtl) => [
+ q(4544),
+ q(0),
+ ],
+ q(mtm) => [
+ q(4545),
+ q(0),
+ ],
+ q(mtn) => [
+ q(4546),
+ q(0),
+ ],
+ q(mto) => [
+ q(4547),
+ q(0),
+ ],
+ q(mtp) => [
+ q(4548),
+ q(0),
+ ],
+ q(mtq) => [
+ q(4549),
+ q(0),
+ ],
+ q(mtr) => [
+ q(4550),
+ q(0),
+ ],
+ q(mts) => [
+ q(4551),
+ q(0),
+ ],
+ q(mtt) => [
+ q(4552),
+ q(0),
+ ],
+ q(mtu) => [
+ q(4553),
+ q(0),
+ ],
+ q(mtv) => [
+ q(4554),
+ q(0),
+ ],
+ q(mtw) => [
+ q(4555),
+ q(0),
+ ],
+ q(mtx) => [
+ q(4556),
+ q(0),
+ ],
+ q(mty) => [
+ q(4557),
+ q(0),
+ ],
+ q(mua) => [
+ q(4558),
+ q(0),
+ ],
+ q(mub) => [
+ q(4559),
+ q(0),
+ ],
+ q(muc) => [
+ q(4560),
+ q(0),
+ ],
+ q(mud) => [
+ q(4561),
+ q(0),
+ ],
+ q(mue) => [
+ q(4562),
+ q(0),
+ ],
+ q(mug) => [
+ q(4563),
+ q(0),
+ ],
+ q(muh) => [
+ q(4564),
+ q(0),
+ ],
+ q(mui) => [
+ q(4565),
+ q(0),
+ ],
+ q(muj) => [
+ q(4566),
+ q(0),
+ ],
+ q(muk) => [
+ q(4567),
+ q(0),
+ ],
+ q(mul) => [
+ q(0291),
+ q(0),
+ ],
+ q(mum) => [
+ q(4568),
+ q(0),
+ ],
+ q(mun) => [
+ q(0292),
+ q(0),
+ ],
+ q(muo) => [
+ q(4569),
+ q(0),
+ ],
+ q(mup) => [
+ q(4570),
+ q(0),
+ ],
+ q(muq) => [
+ q(4571),
+ q(0),
+ ],
+ q(mur) => [
+ q(4572),
+ q(0),
+ ],
+ q(mus) => [
+ q(0293),
+ q(0),
+ ],
+ q(mut) => [
+ q(4573),
+ q(0),
+ ],
+ q(muu) => [
+ q(4574),
+ q(0),
+ ],
+ q(muv) => [
+ q(4575),
+ q(0),
+ ],
+ q(mux) => [
+ q(4576),
+ q(0),
+ ],
+ q(muy) => [
+ q(4577),
+ q(0),
+ ],
+ q(muz) => [
+ q(4578),
+ q(0),
+ ],
+ q(mva) => [
+ q(4579),
+ q(0),
+ ],
+ q(mvb) => [
+ q(4580),
+ q(0),
+ ],
+ q(mvd) => [
+ q(4581),
+ q(0),
+ ],
+ q(mve) => [
+ q(4582),
+ q(0),
+ ],
+ q(mvf) => [
+ q(4583),
+ q(0),
+ ],
+ q(mvg) => [
+ q(4584),
+ q(0),
+ ],
+ q(mvh) => [
+ q(4585),
+ q(0),
+ ],
+ q(mvi) => [
+ q(4586),
+ q(0),
+ ],
+ q(mvk) => [
+ q(4587),
+ q(0),
+ ],
+ q(mvl) => [
+ q(4588),
+ q(0),
+ ],
+ q(mvm) => [
+ q(4589),
+ q(0),
+ ],
+ q(mvn) => [
+ q(4590),
+ q(0),
+ ],
+ q(mvo) => [
+ q(4591),
+ q(0),
+ ],
+ q(mvp) => [
+ q(4592),
+ q(0),
+ ],
+ q(mvq) => [
+ q(4593),
+ q(0),
+ ],
+ q(mvr) => [
+ q(4594),
+ q(0),
+ ],
+ q(mvs) => [
+ q(4595),
+ q(0),
+ ],
+ q(mvt) => [
+ q(4596),
+ q(0),
+ ],
+ q(mvu) => [
+ q(4597),
+ q(0),
+ ],
+ q(mvv) => [
+ q(4598),
+ q(0),
+ ],
+ q(mvw) => [
+ q(4599),
+ q(0),
+ ],
+ q(mvx) => [
+ q(4600),
+ q(0),
+ ],
+ q(mvy) => [
+ q(4601),
+ q(0),
+ ],
+ q(mvz) => [
+ q(4602),
+ q(0),
+ ],
+ q(mwa) => [
+ q(4603),
+ q(0),
+ ],
+ q(mwb) => [
+ q(4604),
+ q(0),
+ ],
+ q(mwc) => [
+ q(4605),
+ q(0),
+ ],
+ q(mwd) => [
+ q(4606),
+ q(0),
+ ],
+ q(mwe) => [
+ q(4607),
+ q(0),
+ ],
+ q(mwf) => [
+ q(4608),
+ q(0),
+ ],
+ q(mwg) => [
+ q(4609),
+ q(0),
+ ],
+ q(mwh) => [
+ q(4610),
+ q(0),
+ ],
+ q(mwi) => [
+ q(4611),
+ q(0),
+ ],
+ q(mwj) => [
+ q(4612),
+ q(0),
+ ],
+ q(mwk) => [
+ q(4613),
+ q(0),
+ ],
+ q(mwl) => [
+ q(0294),
+ q(0),
+ ],
+ q(mwm) => [
+ q(4614),
+ q(0),
+ ],
+ q(mwn) => [
+ q(4615),
+ q(0),
+ ],
+ q(mwo) => [
+ q(4616),
+ q(0),
+ ],
+ q(mwp) => [
+ q(4617),
+ q(0),
+ ],
+ q(mwq) => [
+ q(4618),
+ q(0),
+ ],
+ q(mwr) => [
+ q(0295),
+ q(0),
+ ],
+ q(mws) => [
+ q(4619),
+ q(0),
+ ],
+ q(mwt) => [
+ q(4620),
+ q(0),
+ ],
+ q(mwu) => [
+ q(4621),
+ q(0),
+ ],
+ q(mwv) => [
+ q(4622),
+ q(0),
+ ],
+ q(mww) => [
+ q(4623),
+ q(0),
+ ],
+ q(mwx) => [
+ q(4624),
+ q(0),
+ ],
+ q(mwy) => [
+ q(4625),
+ q(0),
+ ],
+ q(mwz) => [
+ q(4626),
+ q(0),
+ ],
+ q(mxa) => [
+ q(4627),
+ q(0),
+ ],
+ q(mxb) => [
+ q(4628),
+ q(0),
+ ],
+ q(mxc) => [
+ q(4629),
+ q(0),
+ ],
+ q(mxd) => [
+ q(4630),
+ q(0),
+ ],
+ q(mxe) => [
+ q(4631),
+ q(0),
+ ],
+ q(mxf) => [
+ q(4632),
+ q(0),
+ ],
+ q(mxg) => [
+ q(4633),
+ q(0),
+ ],
+ q(mxh) => [
+ q(4634),
+ q(0),
+ ],
+ q(mxi) => [
+ q(4635),
+ q(0),
+ ],
+ q(mxj) => [
+ q(4636),
+ q(0),
+ ],
+ q(mxk) => [
+ q(4637),
+ q(0),
+ ],
+ q(mxl) => [
+ q(4638),
+ q(0),
+ ],
+ q(mxm) => [
+ q(4639),
+ q(0),
+ ],
+ q(mxn) => [
+ q(4640),
+ q(0),
+ ],
+ q(mxo) => [
+ q(4641),
+ q(0),
+ ],
+ q(mxp) => [
+ q(4642),
+ q(0),
+ ],
+ q(mxq) => [
+ q(4643),
+ q(0),
+ ],
+ q(mxr) => [
+ q(4644),
+ q(0),
+ ],
+ q(mxs) => [
+ q(4645),
+ q(0),
+ ],
+ q(mxt) => [
+ q(4646),
+ q(0),
+ ],
+ q(mxu) => [
+ q(4647),
+ q(0),
+ ],
+ q(mxv) => [
+ q(4648),
+ q(0),
+ ],
+ q(mxw) => [
+ q(4649),
+ q(0),
+ ],
+ q(mxx) => [
+ q(4650),
+ q(0),
+ ],
+ q(mxy) => [
+ q(4651),
+ q(0),
+ ],
+ q(mxz) => [
+ q(4652),
+ q(0),
+ ],
+ q(myb) => [
+ q(4653),
+ q(0),
+ ],
+ q(myc) => [
+ q(4654),
+ q(0),
+ ],
+ q(myd) => [
+ q(4655),
+ q(0),
+ ],
+ q(mye) => [
+ q(4656),
+ q(0),
+ ],
+ q(myf) => [
+ q(4657),
+ q(0),
+ ],
+ q(myg) => [
+ q(4658),
+ q(0),
+ ],
+ q(myh) => [
+ q(4659),
+ q(0),
+ ],
+ q(myi) => [
+ q(4660),
+ q(0),
+ ],
+ q(myj) => [
+ q(4661),
+ q(0),
+ ],
+ q(myk) => [
+ q(4662),
+ q(0),
+ ],
+ q(myl) => [
+ q(4663),
+ q(0),
+ ],
+ q(mym) => [
+ q(4664),
+ q(0),
+ ],
+ q(myn) => [
+ q(0296),
+ q(0),
+ ],
+ q(myo) => [
+ q(4665),
+ q(0),
+ ],
+ q(myp) => [
+ q(4666),
+ q(0),
+ ],
+ q(myq) => [
+ q(4667),
+ q(0),
+ ],
+ q(myr) => [
+ q(4668),
+ q(0),
+ ],
+ q(mys) => [
+ q(4669),
+ q(0),
+ ],
+ q(myu) => [
+ q(4670),
+ q(0),
+ ],
+ q(myv) => [
+ q(0297),
+ q(0),
+ ],
+ q(myw) => [
+ q(4671),
+ q(0),
+ ],
+ q(myx) => [
+ q(4672),
+ q(0),
+ ],
+ q(myy) => [
+ q(4673),
+ q(0),
+ ],
+ q(myz) => [
+ q(4674),
+ q(0),
+ ],
+ q(mza) => [
+ q(4675),
+ q(0),
+ ],
+ q(mzb) => [
+ q(4676),
+ q(0),
+ ],
+ q(mzc) => [
+ q(4677),
+ q(0),
+ ],
+ q(mzd) => [
+ q(4678),
+ q(0),
+ ],
+ q(mze) => [
+ q(4679),
+ q(0),
+ ],
+ q(mzg) => [
+ q(4680),
+ q(0),
+ ],
+ q(mzh) => [
+ q(4681),
+ q(0),
+ ],
+ q(mzi) => [
+ q(4682),
+ q(0),
+ ],
+ q(mzj) => [
+ q(4683),
+ q(0),
+ ],
+ q(mzk) => [
+ q(4684),
+ q(0),
+ ],
+ q(mzl) => [
+ q(4685),
+ q(0),
+ ],
+ q(mzm) => [
+ q(4686),
+ q(0),
+ ],
+ q(mzn) => [
+ q(4687),
+ q(0),
+ ],
+ q(mzo) => [
+ q(4688),
+ q(0),
+ ],
+ q(mzp) => [
+ q(4689),
+ q(0),
+ ],
+ q(mzq) => [
+ q(4690),
+ q(0),
+ ],
+ q(mzr) => [
+ q(4691),
+ q(0),
+ ],
+ q(mzs) => [
+ q(4692),
+ q(0),
+ ],
+ q(mzt) => [
+ q(4693),
+ q(0),
+ ],
+ q(mzu) => [
+ q(4694),
+ q(0),
+ ],
+ q(mzv) => [
+ q(4695),
+ q(0),
+ ],
+ q(mzw) => [
+ q(4696),
+ q(0),
+ ],
+ q(mzx) => [
+ q(4697),
+ q(0),
+ ],
+ q(mzy) => [
+ q(4698),
+ q(0),
+ ],
+ q(mzz) => [
+ q(4699),
+ q(0),
+ ],
+ q(naa) => [
+ q(4700),
+ q(0),
+ ],
+ q(nab) => [
+ q(4701),
+ q(0),
+ ],
+ q(nac) => [
+ q(4702),
+ q(0),
+ ],
+ q(nad) => [
+ q(4703),
+ q(0),
+ ],
+ q(nae) => [
+ q(4704),
+ q(0),
+ ],
+ q(naf) => [
+ q(4705),
+ q(0),
+ ],
+ q(nag) => [
+ q(4706),
+ q(0),
+ ],
+ q(nah) => [
+ q(0298),
+ q(0),
+ ],
+ q(nai) => [
+ q(0299),
+ q(0),
+ ],
+ q(naj) => [
+ q(4707),
+ q(0),
+ ],
+ q(nak) => [
+ q(4708),
+ q(0),
+ ],
+ q(nal) => [
+ q(4709),
+ q(0),
+ ],
+ q(nam) => [
+ q(4710),
+ q(0),
+ ],
+ q(nan) => [
+ q(4711),
+ q(0),
+ ],
+ q(nao) => [
+ q(4712),
+ q(0),
+ ],
+ q(nap) => [
+ q(0300),
+ q(0),
+ ],
+ q(naq) => [
+ q(4713),
+ q(0),
+ ],
+ q(nar) => [
+ q(4714),
+ q(0),
+ ],
+ q(nas) => [
+ q(4715),
+ q(0),
+ ],
+ q(nat) => [
+ q(4716),
+ q(0),
+ ],
+ q(nau) => [
+ q(0301),
+ q(0),
+ ],
+ q(nav) => [
+ q(0302),
+ q(0),
+ ],
+ q(naw) => [
+ q(4717),
+ q(0),
+ ],
+ q(nax) => [
+ q(4718),
+ q(0),
+ ],
+ q(nay) => [
+ q(4719),
+ q(0),
+ ],
+ q(naz) => [
+ q(4720),
+ q(0),
+ ],
+ q(nba) => [
+ q(4721),
+ q(0),
+ ],
+ q(nbb) => [
+ q(4722),
+ q(0),
+ ],
+ q(nbc) => [
+ q(4723),
+ q(0),
+ ],
+ q(nbd) => [
+ q(4724),
+ q(0),
+ ],
+ q(nbe) => [
+ q(4725),
+ q(0),
+ ],
+ q(nbg) => [
+ q(4726),
+ q(0),
+ ],
+ q(nbh) => [
+ q(4727),
+ q(0),
+ ],
+ q(nbi) => [
+ q(4728),
+ q(0),
+ ],
+ q(nbj) => [
+ q(4729),
+ q(0),
+ ],
+ q(nbk) => [
+ q(4730),
+ q(0),
+ ],
+ q(nbl) => [
+ q(0303),
+ q(0),
+ ],
+ q(nbm) => [
+ q(4731),
+ q(0),
+ ],
+ q(nbn) => [
+ q(4732),
+ q(0),
+ ],
+ q(nbo) => [
+ q(4733),
+ q(0),
+ ],
+ q(nbp) => [
+ q(4734),
+ q(0),
+ ],
+ q(nbq) => [
+ q(4735),
+ q(0),
+ ],
+ q(nbr) => [
+ q(4736),
+ q(0),
+ ],
+ q(nbs) => [
+ q(4737),
+ q(0),
+ ],
+ q(nbt) => [
+ q(4738),
+ q(0),
+ ],
+ q(nbu) => [
+ q(4739),
+ q(0),
+ ],
+ q(nbv) => [
+ q(4740),
+ q(0),
+ ],
+ q(nbw) => [
+ q(4741),
+ q(0),
+ ],
+ q(nbx) => [
+ q(4742),
+ q(0),
+ ],
+ q(nby) => [
+ q(4743),
+ q(0),
+ ],
+ q(nca) => [
+ q(4744),
+ q(0),
+ ],
+ q(ncb) => [
+ q(4745),
+ q(0),
+ ],
+ q(ncc) => [
+ q(4746),
+ q(0),
+ ],
+ q(ncd) => [
+ q(4747),
+ q(0),
+ ],
+ q(nce) => [
+ q(4748),
+ q(0),
+ ],
+ q(ncf) => [
+ q(4749),
+ q(0),
+ ],
+ q(ncg) => [
+ q(4750),
+ q(0),
+ ],
+ q(nch) => [
+ q(4751),
+ q(0),
+ ],
+ q(nci) => [
+ q(4752),
+ q(0),
+ ],
+ q(ncj) => [
+ q(4753),
+ q(0),
+ ],
+ q(nck) => [
+ q(4754),
+ q(0),
+ ],
+ q(ncl) => [
+ q(4755),
+ q(0),
+ ],
+ q(ncm) => [
+ q(4756),
+ q(0),
+ ],
+ q(ncn) => [
+ q(4757),
+ q(0),
+ ],
+ q(nco) => [
+ q(4758),
+ q(0),
+ ],
+ q(ncp) => [
+ q(4759),
+ q(0),
+ ],
+ q(ncr) => [
+ q(4760),
+ q(0),
+ ],
+ q(ncs) => [
+ q(4761),
+ q(0),
+ ],
+ q(nct) => [
+ q(4762),
+ q(0),
+ ],
+ q(ncu) => [
+ q(4763),
+ q(0),
+ ],
+ q(ncx) => [
+ q(4764),
+ q(0),
+ ],
+ q(ncz) => [
+ q(4765),
+ q(0),
+ ],
+ q(nda) => [
+ q(4766),
+ q(0),
+ ],
+ q(ndb) => [
+ q(4767),
+ q(0),
+ ],
+ q(ndc) => [
+ q(4768),
+ q(0),
+ ],
+ q(ndd) => [
+ q(4769),
+ q(0),
+ ],
+ q(nde) => [
+ q(0304),
+ q(0),
+ ],
+ q(ndf) => [
+ q(4770),
+ q(0),
+ ],
+ q(ndg) => [
+ q(4771),
+ q(0),
+ ],
+ q(ndh) => [
+ q(4772),
+ q(0),
+ ],
+ q(ndi) => [
+ q(4773),
+ q(0),
+ ],
+ q(ndj) => [
+ q(4774),
+ q(0),
+ ],
+ q(ndk) => [
+ q(4775),
+ q(0),
+ ],
+ q(ndl) => [
+ q(4776),
+ q(0),
+ ],
+ q(ndm) => [
+ q(4777),
+ q(0),
+ ],
+ q(ndn) => [
+ q(4778),
+ q(0),
+ ],
+ q(ndo) => [
+ q(0305),
+ q(0),
+ ],
+ q(ndp) => [
+ q(4779),
+ q(0),
+ ],
+ q(ndq) => [
+ q(4780),
+ q(0),
+ ],
+ q(ndr) => [
+ q(4781),
+ q(0),
+ ],
+ q(nds) => [
+ q(0306),
+ q(0),
+ ],
+ q(ndt) => [
+ q(4782),
+ q(0),
+ ],
+ q(ndu) => [
+ q(4783),
+ q(0),
+ ],
+ q(ndv) => [
+ q(4784),
+ q(0),
+ ],
+ q(ndw) => [
+ q(4785),
+ q(0),
+ ],
+ q(ndx) => [
+ q(4786),
+ q(0),
+ ],
+ q(ndy) => [
+ q(4787),
+ q(0),
+ ],
+ q(ndz) => [
+ q(4788),
+ q(0),
+ ],
+ q(nea) => [
+ q(4789),
+ q(0),
+ ],
+ q(neb) => [
+ q(4790),
+ q(0),
+ ],
+ q(nec) => [
+ q(4791),
+ q(0),
+ ],
+ q(ned) => [
+ q(4792),
+ q(0),
+ ],
+ q(nee) => [
+ q(4793),
+ q(0),
+ ],
+ q(nef) => [
+ q(4794),
+ q(0),
+ ],
+ q(neg) => [
+ q(4795),
+ q(0),
+ ],
+ q(neh) => [
+ q(4796),
+ q(0),
+ ],
+ q(nei) => [
+ q(4797),
+ q(0),
+ ],
+ q(nej) => [
+ q(4798),
+ q(0),
+ ],
+ q(nek) => [
+ q(4799),
+ q(0),
+ ],
+ q(nem) => [
+ q(4800),
+ q(0),
+ ],
+ q(nen) => [
+ q(4801),
+ q(0),
+ ],
+ q(neo) => [
+ q(4802),
+ q(0),
+ ],
+ q(nep) => [
+ q(0307),
+ q(0),
+ ],
+ q(neq) => [
+ q(4803),
+ q(0),
+ ],
+ q(ner) => [
+ q(4804),
+ q(0),
+ ],
+ q(nes) => [
+ q(4805),
+ q(0),
+ ],
+ q(net) => [
+ q(4806),
+ q(0),
+ ],
+ q(neu) => [
+ q(4807),
+ q(0),
+ ],
+ q(nev) => [
+ q(4808),
+ q(0),
+ ],
+ q(new) => [
+ q(0308),
+ q(0),
+ ],
+ q(nex) => [
+ q(4809),
+ q(0),
+ ],
+ q(ney) => [
+ q(4810),
+ q(0),
+ ],
+ q(nez) => [
+ q(4811),
+ q(0),
+ ],
+ q(nfa) => [
+ q(4812),
+ q(0),
+ ],
+ q(nfd) => [
+ q(4813),
+ q(0),
+ ],
+ q(nfl) => [
+ q(4814),
+ q(0),
+ ],
+ q(nfr) => [
+ q(4815),
+ q(0),
+ ],
+ q(nfu) => [
+ q(4816),
+ q(0),
+ ],
+ q(nga) => [
+ q(4817),
+ q(0),
+ ],
+ q(ngb) => [
+ q(4818),
+ q(0),
+ ],
+ q(ngc) => [
+ q(4819),
+ q(0),
+ ],
+ q(ngd) => [
+ q(4820),
+ q(0),
+ ],
+ q(nge) => [
+ q(4821),
+ q(0),
+ ],
+ q(ngf) => [
+ q(0516),
+ q(0),
+ ],
+ q(ngg) => [
+ q(4822),
+ q(0),
+ ],
+ q(ngh) => [
+ q(4823),
+ q(0),
+ ],
+ q(ngi) => [
+ q(4824),
+ q(0),
+ ],
+ q(ngj) => [
+ q(4825),
+ q(0),
+ ],
+ q(ngk) => [
+ q(4826),
+ q(0),
+ ],
+ q(ngl) => [
+ q(4827),
+ q(0),
+ ],
+ q(ngm) => [
+ q(4828),
+ q(0),
+ ],
+ q(ngn) => [
+ q(4829),
+ q(0),
+ ],
+ q(ngo) => [
+ q(4830),
+ q(0),
+ ],
+ q(ngp) => [
+ q(4831),
+ q(0),
+ ],
+ q(ngq) => [
+ q(4832),
+ q(0),
+ ],
+ q(ngr) => [
+ q(4833),
+ q(0),
+ ],
+ q(ngs) => [
+ q(4834),
+ q(0),
+ ],
+ q(ngt) => [
+ q(4835),
+ q(0),
+ ],
+ q(ngu) => [
+ q(4836),
+ q(0),
+ ],
+ q(ngv) => [
+ q(4837),
+ q(0),
+ ],
+ q(ngw) => [
+ q(4838),
+ q(0),
+ ],
+ q(ngx) => [
+ q(4839),
+ q(0),
+ ],
+ q(ngy) => [
+ q(4840),
+ q(0),
+ ],
+ q(ngz) => [
+ q(4841),
+ q(0),
+ ],
+ q(nha) => [
+ q(4842),
+ q(0),
+ ],
+ q(nhb) => [
+ q(4843),
+ q(0),
+ ],
+ q(nhc) => [
+ q(4844),
+ q(0),
+ ],
+ q(nhd) => [
+ q(4845),
+ q(0),
+ ],
+ q(nhe) => [
+ q(4846),
+ q(0),
+ ],
+ q(nhf) => [
+ q(4847),
+ q(0),
+ ],
+ q(nhg) => [
+ q(4848),
+ q(0),
+ ],
+ q(nhh) => [
+ q(4849),
+ q(0),
+ ],
+ q(nhi) => [
+ q(4850),
+ q(0),
+ ],
+ q(nhk) => [
+ q(4851),
+ q(0),
+ ],
+ q(nhm) => [
+ q(4852),
+ q(0),
+ ],
+ q(nhn) => [
+ q(4853),
+ q(0),
+ ],
+ q(nho) => [
+ q(4854),
+ q(0),
+ ],
+ q(nhp) => [
+ q(4855),
+ q(0),
+ ],
+ q(nhq) => [
+ q(4856),
+ q(0),
+ ],
+ q(nhr) => [
+ q(4857),
+ q(0),
+ ],
+ q(nht) => [
+ q(4858),
+ q(0),
+ ],
+ q(nhu) => [
+ q(4859),
+ q(0),
+ ],
+ q(nhv) => [
+ q(4860),
+ q(0),
+ ],
+ q(nhw) => [
+ q(4861),
+ q(0),
+ ],
+ q(nhx) => [
+ q(4862),
+ q(0),
+ ],
+ q(nhy) => [
+ q(4863),
+ q(0),
+ ],
+ q(nhz) => [
+ q(4864),
+ q(0),
+ ],
+ q(nia) => [
+ q(0309),
+ q(0),
+ ],
+ q(nib) => [
+ q(4865),
+ q(0),
+ ],
+ q(nic) => [
+ q(0310),
+ q(0),
+ ],
+ q(nid) => [
+ q(4866),
+ q(0),
+ ],
+ q(nie) => [
+ q(4867),
+ q(0),
+ ],
+ q(nif) => [
+ q(4868),
+ q(0),
+ ],
+ q(nig) => [
+ q(4869),
+ q(0),
+ ],
+ q(nih) => [
+ q(4870),
+ q(0),
+ ],
+ q(nii) => [
+ q(4871),
+ q(0),
+ ],
+ q(nij) => [
+ q(4872),
+ q(0),
+ ],
+ q(nik) => [
+ q(4873),
+ q(0),
+ ],
+ q(nil) => [
+ q(4874),
+ q(0),
+ ],
+ q(nim) => [
+ q(4875),
+ q(0),
+ ],
+ q(nin) => [
+ q(4876),
+ q(0),
+ ],
+ q(nio) => [
+ q(4877),
+ q(0),
+ ],
+ q(niq) => [
+ q(4878),
+ q(0),
+ ],
+ q(nir) => [
+ q(4879),
+ q(0),
+ ],
+ q(nis) => [
+ q(4880),
+ q(0),
+ ],
+ q(nit) => [
+ q(4881),
+ q(0),
+ ],
+ q(niu) => [
+ q(0311),
+ q(0),
+ ],
+ q(niv) => [
+ q(4882),
+ q(0),
+ ],
+ q(niw) => [
+ q(4883),
+ q(0),
+ ],
+ q(nix) => [
+ q(4884),
+ q(0),
+ ],
+ q(niy) => [
+ q(4885),
+ q(0),
+ ],
+ q(niz) => [
+ q(4886),
+ q(0),
+ ],
+ q(nja) => [
+ q(4887),
+ q(0),
+ ],
+ q(njb) => [
+ q(4888),
+ q(0),
+ ],
+ q(njd) => [
+ q(4889),
+ q(0),
+ ],
+ q(njh) => [
+ q(4890),
+ q(0),
+ ],
+ q(nji) => [
+ q(4891),
+ q(0),
+ ],
+ q(njj) => [
+ q(4892),
+ q(0),
+ ],
+ q(njl) => [
+ q(4893),
+ q(0),
+ ],
+ q(njm) => [
+ q(4894),
+ q(0),
+ ],
+ q(njn) => [
+ q(4895),
+ q(0),
+ ],
+ q(njo) => [
+ q(4896),
+ q(0),
+ ],
+ q(njr) => [
+ q(4897),
+ q(0),
+ ],
+ q(njs) => [
+ q(4898),
+ q(0),
+ ],
+ q(njt) => [
+ q(4899),
+ q(0),
+ ],
+ q(nju) => [
+ q(4900),
+ q(0),
+ ],
+ q(njx) => [
+ q(4901),
+ q(0),
+ ],
+ q(njy) => [
+ q(4902),
+ q(0),
+ ],
+ q(njz) => [
+ q(4903),
+ q(0),
+ ],
+ q(nka) => [
+ q(4904),
+ q(0),
+ ],
+ q(nkb) => [
+ q(4905),
+ q(0),
+ ],
+ q(nkc) => [
+ q(4906),
+ q(0),
+ ],
+ q(nkd) => [
+ q(4907),
+ q(0),
+ ],
+ q(nke) => [
+ q(4908),
+ q(0),
+ ],
+ q(nkf) => [
+ q(4909),
+ q(0),
+ ],
+ q(nkg) => [
+ q(4910),
+ q(0),
+ ],
+ q(nkh) => [
+ q(4911),
+ q(0),
+ ],
+ q(nki) => [
+ q(4912),
+ q(0),
+ ],
+ q(nkj) => [
+ q(4913),
+ q(0),
+ ],
+ q(nkk) => [
+ q(4914),
+ q(0),
+ ],
+ q(nkm) => [
+ q(4915),
+ q(0),
+ ],
+ q(nkn) => [
+ q(4916),
+ q(0),
+ ],
+ q(nko) => [
+ q(4917),
+ q(0),
+ ],
+ q(nkp) => [
+ q(4918),
+ q(0),
+ ],
+ q(nkq) => [
+ q(4919),
+ q(0),
+ ],
+ q(nkr) => [
+ q(4920),
+ q(0),
+ ],
+ q(nks) => [
+ q(4921),
+ q(0),
+ ],
+ q(nkt) => [
+ q(4922),
+ q(0),
+ ],
+ q(nku) => [
+ q(4923),
+ q(0),
+ ],
+ q(nkv) => [
+ q(4924),
+ q(0),
+ ],
+ q(nkw) => [
+ q(4925),
+ q(0),
+ ],
+ q(nkx) => [
+ q(4926),
+ q(0),
+ ],
+ q(nkz) => [
+ q(4927),
+ q(0),
+ ],
+ q(nla) => [
+ q(4928),
+ q(0),
+ ],
+ q(nlc) => [
+ q(4929),
+ q(0),
+ ],
+ q(nle) => [
+ q(4930),
+ q(0),
+ ],
+ q(nlg) => [
+ q(4931),
+ q(0),
+ ],
+ q(nli) => [
+ q(4932),
+ q(0),
+ ],
+ q(nlj) => [
+ q(4933),
+ q(0),
+ ],
+ q(nlk) => [
+ q(4934),
+ q(0),
+ ],
+ q(nll) => [
+ q(4935),
+ q(0),
+ ],
+ q(nlo) => [
+ q(4936),
+ q(0),
+ ],
+ q(nlr) => [
+ q(4937),
+ q(0),
+ ],
+ q(nlu) => [
+ q(4938),
+ q(0),
+ ],
+ q(nlv) => [
+ q(4939),
+ q(0),
+ ],
+ q(nlx) => [
+ q(4940),
+ q(0),
+ ],
+ q(nly) => [
+ q(4941),
+ q(0),
+ ],
+ q(nlz) => [
+ q(4942),
+ q(0),
+ ],
+ q(nma) => [
+ q(4943),
+ q(0),
+ ],
+ q(nmb) => [
+ q(4944),
+ q(0),
+ ],
+ q(nmc) => [
+ q(4945),
+ q(0),
+ ],
+ q(nmd) => [
+ q(4946),
+ q(0),
+ ],
+ q(nme) => [
+ q(4947),
+ q(0),
+ ],
+ q(nmf) => [
+ q(4948),
+ q(0),
+ ],
+ q(nmg) => [
+ q(4949),
+ q(0),
+ ],
+ q(nmh) => [
+ q(4950),
+ q(0),
+ ],
+ q(nmi) => [
+ q(4951),
+ q(0),
+ ],
+ q(nmj) => [
+ q(4952),
+ q(0),
+ ],
+ q(nmk) => [
+ q(4953),
+ q(0),
+ ],
+ q(nml) => [
+ q(4954),
+ q(0),
+ ],
+ q(nmm) => [
+ q(4955),
+ q(0),
+ ],
+ q(nmn) => [
+ q(4956),
+ q(0),
+ ],
+ q(nmo) => [
+ q(4957),
+ q(0),
+ ],
+ q(nmp) => [
+ q(4958),
+ q(0),
+ ],
+ q(nmq) => [
+ q(4959),
+ q(0),
+ ],
+ q(nmr) => [
+ q(4960),
+ q(0),
+ ],
+ q(nms) => [
+ q(4961),
+ q(0),
+ ],
+ q(nmt) => [
+ q(4962),
+ q(0),
+ ],
+ q(nmu) => [
+ q(4963),
+ q(0),
+ ],
+ q(nmv) => [
+ q(4964),
+ q(0),
+ ],
+ q(nmw) => [
+ q(4965),
+ q(0),
+ ],
+ q(nmx) => [
+ q(4966),
+ q(0),
+ ],
+ q(nmy) => [
+ q(4967),
+ q(0),
+ ],
+ q(nmz) => [
+ q(4968),
+ q(0),
+ ],
+ q(nna) => [
+ q(4969),
+ q(0),
+ ],
+ q(nnb) => [
+ q(4970),
+ q(0),
+ ],
+ q(nnc) => [
+ q(4971),
+ q(0),
+ ],
+ q(nnd) => [
+ q(4972),
+ q(0),
+ ],
+ q(nne) => [
+ q(4973),
+ q(0),
+ ],
+ q(nnf) => [
+ q(4974),
+ q(0),
+ ],
+ q(nng) => [
+ q(4975),
+ q(0),
+ ],
+ q(nnh) => [
+ q(4976),
+ q(0),
+ ],
+ q(nni) => [
+ q(4977),
+ q(0),
+ ],
+ q(nnj) => [
+ q(4978),
+ q(0),
+ ],
+ q(nnk) => [
+ q(4979),
+ q(0),
+ ],
+ q(nnl) => [
+ q(4980),
+ q(0),
+ ],
+ q(nnm) => [
+ q(4981),
+ q(0),
+ ],
+ q(nnn) => [
+ q(4982),
+ q(0),
+ ],
+ q(nno) => [
+ q(0312),
+ q(0),
+ ],
+ q(nnp) => [
+ q(4983),
+ q(0),
+ ],
+ q(nnq) => [
+ q(4984),
+ q(0),
+ ],
+ q(nnr) => [
+ q(4985),
+ q(0),
+ ],
+ q(nns) => [
+ q(4986),
+ q(0),
+ ],
+ q(nnt) => [
+ q(4987),
+ q(0),
+ ],
+ q(nnu) => [
+ q(4988),
+ q(0),
+ ],
+ q(nnv) => [
+ q(4989),
+ q(0),
+ ],
+ q(nnw) => [
+ q(4990),
+ q(0),
+ ],
+ q(nnx) => [
+ q(4991),
+ q(0),
+ ],
+ q(nny) => [
+ q(4992),
+ q(0),
+ ],
+ q(nnz) => [
+ q(4993),
+ q(0),
+ ],
+ q(noa) => [
+ q(4994),
+ q(0),
+ ],
+ q(nob) => [
+ q(0313),
+ q(0),
+ ],
+ q(noc) => [
+ q(4995),
+ q(0),
+ ],
+ q(nod) => [
+ q(4996),
+ q(0),
+ ],
+ q(noe) => [
+ q(4997),
+ q(0),
+ ],
+ q(nof) => [
+ q(4998),
+ q(0),
+ ],
+ q(nog) => [
+ q(0314),
+ q(0),
+ ],
+ q(noh) => [
+ q(4999),
+ q(0),
+ ],
+ q(noi) => [
+ q(5000),
+ q(0),
+ ],
+ q(noj) => [
+ q(5001),
+ q(0),
+ ],
+ q(nok) => [
+ q(5002),
+ q(0),
+ ],
+ q(nom) => [
+ q(5003),
+ q(0),
+ ],
+ q(non) => [
+ q(0315),
+ q(1),
+ ],
+ q(nop) => [
+ q(5004),
+ q(0),
+ ],
+ q(noq) => [
+ q(5005),
+ q(0),
+ ],
+ q(nor) => [
+ q(0316),
+ q(0),
+ ],
+ q(nos) => [
+ q(5006),
+ q(0),
+ ],
+ q(not) => [
+ q(5007),
+ q(0),
+ ],
+ q(nou) => [
+ q(5008),
+ q(0),
+ ],
+ q(nov) => [
+ q(5009),
+ q(0),
+ ],
+ q(now) => [
+ q(5010),
+ q(0),
+ ],
+ q(noy) => [
+ q(5011),
+ q(0),
+ ],
+ q(noz) => [
+ q(5012),
+ q(0),
+ ],
+ q(npa) => [
+ q(5013),
+ q(0),
+ ],
+ q(npb) => [
+ q(5014),
+ q(0),
+ ],
+ q(npg) => [
+ q(5015),
+ q(0),
+ ],
+ q(nph) => [
+ q(5016),
+ q(0),
+ ],
+ q(npi) => [
+ q(5017),
+ q(0),
+ ],
+ q(npl) => [
+ q(5018),
+ q(0),
+ ],
+ q(npn) => [
+ q(5019),
+ q(0),
+ ],
+ q(npo) => [
+ q(5020),
+ q(0),
+ ],
+ q(nps) => [
+ q(5021),
+ q(0),
+ ],
+ q(npu) => [
+ q(5022),
+ q(0),
+ ],
+ q(npy) => [
+ q(5023),
+ q(0),
+ ],
+ q(nqg) => [
+ q(5024),
+ q(0),
+ ],
+ q(nqk) => [
+ q(5025),
+ q(0),
+ ],
+ q(nqm) => [
+ q(5026),
+ q(0),
+ ],
+ q(nqn) => [
+ q(5027),
+ q(0),
+ ],
+ q(nqo) => [
+ q(0317),
+ q(0),
+ ],
+ q(nqy) => [
+ q(5028),
+ q(0),
+ ],
+ q(nra) => [
+ q(5029),
+ q(0),
+ ],
+ q(nrb) => [
+ q(5030),
+ q(0),
+ ],
+ q(nrc) => [
+ q(5031),
+ q(0),
+ ],
+ q(nre) => [
+ q(5032),
+ q(0),
+ ],
+ q(nrg) => [
+ q(5033),
+ q(0),
+ ],
+ q(nri) => [
+ q(5034),
+ q(0),
+ ],
+ q(nrl) => [
+ q(5035),
+ q(0),
+ ],
+ q(nrm) => [
+ q(5036),
+ q(0),
+ ],
+ q(nrn) => [
+ q(5037),
+ q(0),
+ ],
+ q(nrp) => [
+ q(5038),
+ q(0),
+ ],
+ q(nrr) => [
+ q(5039),
+ q(0),
+ ],
+ q(nrt) => [
+ q(5040),
+ q(0),
+ ],
+ q(nru) => [
+ q(5041),
+ q(0),
+ ],
+ q(nrx) => [
+ q(5042),
+ q(0),
+ ],
+ q(nrz) => [
+ q(5043),
+ q(0),
+ ],
+ q(nsa) => [
+ q(5044),
+ q(0),
+ ],
+ q(nsc) => [
+ q(5045),
+ q(0),
+ ],
+ q(nsd) => [
+ q(5046),
+ q(0),
+ ],
+ q(nse) => [
+ q(5047),
+ q(0),
+ ],
+ q(nsf) => [
+ q(5048),
+ q(0),
+ ],
+ q(nsg) => [
+ q(5049),
+ q(0),
+ ],
+ q(nsh) => [
+ q(5050),
+ q(0),
+ ],
+ q(nsi) => [
+ q(5051),
+ q(0),
+ ],
+ q(nsk) => [
+ q(5052),
+ q(0),
+ ],
+ q(nsl) => [
+ q(5053),
+ q(0),
+ ],
+ q(nsm) => [
+ q(5054),
+ q(0),
+ ],
+ q(nsn) => [
+ q(5055),
+ q(0),
+ ],
+ q(nso) => [
+ q(0318),
+ q(0),
+ ],
+ q(nsp) => [
+ q(5056),
+ q(0),
+ ],
+ q(nsq) => [
+ q(5057),
+ q(0),
+ ],
+ q(nsr) => [
+ q(5058),
+ q(0),
+ ],
+ q(nss) => [
+ q(5059),
+ q(0),
+ ],
+ q(nst) => [
+ q(5060),
+ q(0),
+ ],
+ q(nsu) => [
+ q(5061),
+ q(0),
+ ],
+ q(nsv) => [
+ q(5062),
+ q(0),
+ ],
+ q(nsw) => [
+ q(5063),
+ q(0),
+ ],
+ q(nsx) => [
+ q(5064),
+ q(0),
+ ],
+ q(nsy) => [
+ q(5065),
+ q(0),
+ ],
+ q(nsz) => [
+ q(5066),
+ q(0),
+ ],
+ q(nte) => [
+ q(5067),
+ q(0),
+ ],
+ q(nti) => [
+ q(5068),
+ q(0),
+ ],
+ q(ntj) => [
+ q(5069),
+ q(0),
+ ],
+ q(ntk) => [
+ q(5070),
+ q(0),
+ ],
+ q(ntm) => [
+ q(5071),
+ q(0),
+ ],
+ q(nto) => [
+ q(5072),
+ q(0),
+ ],
+ q(ntp) => [
+ q(5073),
+ q(0),
+ ],
+ q(ntr) => [
+ q(5074),
+ q(0),
+ ],
+ q(nts) => [
+ q(5075),
+ q(0),
+ ],
+ q(ntu) => [
+ q(5076),
+ q(0),
+ ],
+ q(ntw) => [
+ q(5077),
+ q(0),
+ ],
+ q(ntx) => [
+ q(5078),
+ q(0),
+ ],
+ q(nty) => [
+ q(5079),
+ q(0),
+ ],
+ q(ntz) => [
+ q(5080),
+ q(0),
+ ],
+ q(nua) => [
+ q(5081),
+ q(0),
+ ],
+ q(nub) => [
+ q(0319),
+ q(0),
+ ],
+ q(nuc) => [
+ q(5082),
+ q(0),
+ ],
+ q(nud) => [
+ q(5083),
+ q(0),
+ ],
+ q(nue) => [
+ q(5084),
+ q(0),
+ ],
+ q(nuf) => [
+ q(5085),
+ q(0),
+ ],
+ q(nug) => [
+ q(5086),
+ q(0),
+ ],
+ q(nuh) => [
+ q(5087),
+ q(0),
+ ],
+ q(nui) => [
+ q(5088),
+ q(0),
+ ],
+ q(nuj) => [
+ q(5089),
+ q(0),
+ ],
+ q(nuk) => [
+ q(5090),
+ q(0),
+ ],
+ q(nul) => [
+ q(5091),
+ q(0),
+ ],
+ q(num) => [
+ q(5092),
+ q(0),
+ ],
+ q(nun) => [
+ q(5093),
+ q(0),
+ ],
+ q(nuo) => [
+ q(5094),
+ q(0),
+ ],
+ q(nup) => [
+ q(5095),
+ q(0),
+ ],
+ q(nuq) => [
+ q(5096),
+ q(0),
+ ],
+ q(nur) => [
+ q(5097),
+ q(0),
+ ],
+ q(nus) => [
+ q(5098),
+ q(0),
+ ],
+ q(nut) => [
+ q(5099),
+ q(0),
+ ],
+ q(nuu) => [
+ q(5100),
+ q(0),
+ ],
+ q(nuv) => [
+ q(5101),
+ q(0),
+ ],
+ q(nuw) => [
+ q(5102),
+ q(0),
+ ],
+ q(nux) => [
+ q(5103),
+ q(0),
+ ],
+ q(nuy) => [
+ q(5104),
+ q(0),
+ ],
+ q(nuz) => [
+ q(5105),
+ q(0),
+ ],
+ q(nvh) => [
+ q(5106),
+ q(0),
+ ],
+ q(nvm) => [
+ q(5107),
+ q(0),
+ ],
+ q(nvo) => [
+ q(5108),
+ q(0),
+ ],
+ q(nwa) => [
+ q(5109),
+ q(0),
+ ],
+ q(nwb) => [
+ q(5110),
+ q(0),
+ ],
+ q(nwc) => [
+ q(0320),
+ q(0),
+ ],
+ q(nwe) => [
+ q(5111),
+ q(0),
+ ],
+ q(nwg) => [
+ q(5112),
+ q(0),
+ ],
+ q(nwi) => [
+ q(5113),
+ q(0),
+ ],
+ q(nwm) => [
+ q(5114),
+ q(0),
+ ],
+ q(nwo) => [
+ q(5115),
+ q(0),
+ ],
+ q(nwr) => [
+ q(5116),
+ q(0),
+ ],
+ q(nwx) => [
+ q(5117),
+ q(0),
+ ],
+ q(nwy) => [
+ q(5118),
+ q(0),
+ ],
+ q(nxa) => [
+ q(5119),
+ q(0),
+ ],
+ q(nxd) => [
+ q(5120),
+ q(0),
+ ],
+ q(nxe) => [
+ q(5121),
+ q(0),
+ ],
+ q(nxg) => [
+ q(5122),
+ q(0),
+ ],
+ q(nxi) => [
+ q(5123),
+ q(0),
+ ],
+ q(nxk) => [
+ q(5124),
+ q(0),
+ ],
+ q(nxl) => [
+ q(5125),
+ q(0),
+ ],
+ q(nxm) => [
+ q(5126),
+ q(0),
+ ],
+ q(nxn) => [
+ q(5127),
+ q(0),
+ ],
+ q(nxq) => [
+ q(5128),
+ q(0),
+ ],
+ q(nxr) => [
+ q(5129),
+ q(0),
+ ],
+ q(nxu) => [
+ q(5130),
+ q(0),
+ ],
+ q(nxx) => [
+ q(5131),
+ q(0),
+ ],
+ q(nya) => [
+ q(0321),
+ q(0),
+ ],
+ q(nyb) => [
+ q(5132),
+ q(0),
+ ],
+ q(nyc) => [
+ q(5133),
+ q(0),
+ ],
+ q(nyd) => [
+ q(5134),
+ q(0),
+ ],
+ q(nye) => [
+ q(5135),
+ q(0),
+ ],
+ q(nyf) => [
+ q(5136),
+ q(0),
+ ],
+ q(nyg) => [
+ q(5137),
+ q(0),
+ ],
+ q(nyh) => [
+ q(5138),
+ q(0),
+ ],
+ q(nyi) => [
+ q(5139),
+ q(0),
+ ],
+ q(nyj) => [
+ q(5140),
+ q(0),
+ ],
+ q(nyk) => [
+ q(5141),
+ q(0),
+ ],
+ q(nyl) => [
+ q(5142),
+ q(0),
+ ],
+ q(nym) => [
+ q(0322),
+ q(0),
+ ],
+ q(nyn) => [
+ q(0323),
+ q(0),
+ ],
+ q(nyo) => [
+ q(0324),
+ q(0),
+ ],
+ q(nyp) => [
+ q(5143),
+ q(0),
+ ],
+ q(nyq) => [
+ q(5144),
+ q(0),
+ ],
+ q(nyr) => [
+ q(5145),
+ q(0),
+ ],
+ q(nys) => [
+ q(5146),
+ q(0),
+ ],
+ q(nyt) => [
+ q(5147),
+ q(0),
+ ],
+ q(nyu) => [
+ q(5148),
+ q(0),
+ ],
+ q(nyv) => [
+ q(5149),
+ q(0),
+ ],
+ q(nyw) => [
+ q(5150),
+ q(0),
+ ],
+ q(nyx) => [
+ q(5151),
+ q(0),
+ ],
+ q(nyy) => [
+ q(5152),
+ q(0),
+ ],
+ q(nza) => [
+ q(5153),
+ q(0),
+ ],
+ q(nzb) => [
+ q(5154),
+ q(0),
+ ],
+ q(nzi) => [
+ q(0325),
+ q(0),
+ ],
+ q(nzk) => [
+ q(5155),
+ q(0),
+ ],
+ q(nzm) => [
+ q(5156),
+ q(0),
+ ],
+ q(nzs) => [
+ q(5157),
+ q(0),
+ ],
+ q(nzu) => [
+ q(5158),
+ q(0),
+ ],
+ q(nzy) => [
+ q(5159),
+ q(0),
+ ],
+ q(nzz) => [
+ q(5160),
+ q(0),
+ ],
+ q(oaa) => [
+ q(5161),
+ q(0),
+ ],
+ q(oac) => [
+ q(5162),
+ q(0),
+ ],
+ q(oar) => [
+ q(5163),
+ q(0),
+ ],
+ q(oav) => [
+ q(5164),
+ q(0),
+ ],
+ q(obi) => [
+ q(5165),
+ q(0),
+ ],
+ q(obk) => [
+ q(5166),
+ q(0),
+ ],
+ q(obl) => [
+ q(5167),
+ q(0),
+ ],
+ q(obm) => [
+ q(5168),
+ q(0),
+ ],
+ q(obo) => [
+ q(5169),
+ q(0),
+ ],
+ q(obr) => [
+ q(5170),
+ q(0),
+ ],
+ q(obt) => [
+ q(5171),
+ q(0),
+ ],
+ q(obu) => [
+ q(5172),
+ q(0),
+ ],
+ q(oca) => [
+ q(5173),
+ q(0),
+ ],
+ q(och) => [
+ q(5174),
+ q(0),
+ ],
+ q(oci) => [
+ q(0326),
+ q(0),
+ ],
+ q(oco) => [
+ q(5175),
+ q(0),
+ ],
+ q(ocu) => [
+ q(5176),
+ q(0),
+ ],
+ q(oda) => [
+ q(5177),
+ q(0),
+ ],
+ q(odk) => [
+ q(5178),
+ q(0),
+ ],
+ q(odt) => [
+ q(5179),
+ q(0),
+ ],
+ q(odu) => [
+ q(5180),
+ q(0),
+ ],
+ q(ofo) => [
+ q(5181),
+ q(0),
+ ],
+ q(ofs) => [
+ q(5182),
+ q(0),
+ ],
+ q(ofu) => [
+ q(5183),
+ q(0),
+ ],
+ q(ogb) => [
+ q(5184),
+ q(0),
+ ],
+ q(ogc) => [
+ q(5185),
+ q(0),
+ ],
+ q(oge) => [
+ q(5186),
+ q(0),
+ ],
+ q(ogg) => [
+ q(5187),
+ q(0),
+ ],
+ q(ogo) => [
+ q(5188),
+ q(0),
+ ],
+ q(ogu) => [
+ q(5189),
+ q(0),
+ ],
+ q(oht) => [
+ q(5190),
+ q(0),
+ ],
+ q(ohu) => [
+ q(5191),
+ q(0),
+ ],
+ q(oia) => [
+ q(5192),
+ q(0),
+ ],
+ q(oin) => [
+ q(5193),
+ q(0),
+ ],
+ q(ojb) => [
+ q(5194),
+ q(0),
+ ],
+ q(ojc) => [
+ q(5195),
+ q(0),
+ ],
+ q(ojg) => [
+ q(5196),
+ q(0),
+ ],
+ q(oji) => [
+ q(0327),
+ q(0),
+ ],
+ q(ojp) => [
+ q(5197),
+ q(0),
+ ],
+ q(ojs) => [
+ q(5198),
+ q(0),
+ ],
+ q(ojv) => [
+ q(5199),
+ q(0),
+ ],
+ q(ojw) => [
+ q(5200),
+ q(0),
+ ],
+ q(oka) => [
+ q(5201),
+ q(0),
+ ],
+ q(okb) => [
+ q(5202),
+ q(0),
+ ],
+ q(okd) => [
+ q(5203),
+ q(0),
+ ],
+ q(oke) => [
+ q(5204),
+ q(0),
+ ],
+ q(okg) => [
+ q(5205),
+ q(0),
+ ],
+ q(okh) => [
+ q(5206),
+ q(0),
+ ],
+ q(oki) => [
+ q(5207),
+ q(0),
+ ],
+ q(okj) => [
+ q(5208),
+ q(0),
+ ],
+ q(okk) => [
+ q(5209),
+ q(0),
+ ],
+ q(okl) => [
+ q(5210),
+ q(0),
+ ],
+ q(okm) => [
+ q(5211),
+ q(0),
+ ],
+ q(okn) => [
+ q(5212),
+ q(0),
+ ],
+ q(oko) => [
+ q(5213),
+ q(0),
+ ],
+ q(okr) => [
+ q(5214),
+ q(0),
+ ],
+ q(oks) => [
+ q(5215),
+ q(0),
+ ],
+ q(oku) => [
+ q(5216),
+ q(0),
+ ],
+ q(okv) => [
+ q(5217),
+ q(0),
+ ],
+ q(okx) => [
+ q(5218),
+ q(0),
+ ],
+ q(ola) => [
+ q(5219),
+ q(0),
+ ],
+ q(old) => [
+ q(5220),
+ q(0),
+ ],
+ q(ole) => [
+ q(5221),
+ q(0),
+ ],
+ q(olm) => [
+ q(5222),
+ q(0),
+ ],
+ q(olo) => [
+ q(5223),
+ q(0),
+ ],
+ q(olr) => [
+ q(5224),
+ q(0),
+ ],
+ q(oma) => [
+ q(5225),
+ q(0),
+ ],
+ q(omb) => [
+ q(5226),
+ q(0),
+ ],
+ q(omc) => [
+ q(5227),
+ q(0),
+ ],
+ q(ome) => [
+ q(5228),
+ q(0),
+ ],
+ q(omg) => [
+ q(5229),
+ q(0),
+ ],
+ q(omi) => [
+ q(5230),
+ q(0),
+ ],
+ q(omk) => [
+ q(5231),
+ q(0),
+ ],
+ q(oml) => [
+ q(5232),
+ q(0),
+ ],
+ q(omn) => [
+ q(5233),
+ q(0),
+ ],
+ q(omo) => [
+ q(5234),
+ q(0),
+ ],
+ q(omp) => [
+ q(5235),
+ q(0),
+ ],
+ q(omq) => [
+ q(0517),
+ q(0),
+ ],
+ q(omr) => [
+ q(5236),
+ q(0),
+ ],
+ q(omt) => [
+ q(5237),
+ q(0),
+ ],
+ q(omu) => [
+ q(5238),
+ q(0),
+ ],
+ q(omv) => [
+ q(0518),
+ q(0),
+ ],
+ q(omw) => [
+ q(5239),
+ q(0),
+ ],
+ q(omx) => [
+ q(5240),
+ q(0),
+ ],
+ q(ona) => [
+ q(5241),
+ q(0),
+ ],
+ q(onb) => [
+ q(5242),
+ q(0),
+ ],
+ q(one) => [
+ q(5243),
+ q(0),
+ ],
+ q(ong) => [
+ q(5244),
+ q(0),
+ ],
+ q(oni) => [
+ q(5245),
+ q(0),
+ ],
+ q(onj) => [
+ q(5246),
+ q(0),
+ ],
+ q(onk) => [
+ q(5247),
+ q(0),
+ ],
+ q(onn) => [
+ q(5248),
+ q(0),
+ ],
+ q(ono) => [
+ q(5249),
+ q(0),
+ ],
+ q(onp) => [
+ q(5250),
+ q(0),
+ ],
+ q(onr) => [
+ q(5251),
+ q(0),
+ ],
+ q(ons) => [
+ q(5252),
+ q(0),
+ ],
+ q(ont) => [
+ q(5253),
+ q(0),
+ ],
+ q(onu) => [
+ q(5254),
+ q(0),
+ ],
+ q(onw) => [
+ q(5255),
+ q(0),
+ ],
+ q(onx) => [
+ q(5256),
+ q(0),
+ ],
+ q(ood) => [
+ q(5257),
+ q(0),
+ ],
+ q(oog) => [
+ q(5258),
+ q(0),
+ ],
+ q(oon) => [
+ q(5259),
+ q(0),
+ ],
+ q(oor) => [
+ q(5260),
+ q(0),
+ ],
+ q(oos) => [
+ q(5261),
+ q(0),
+ ],
+ q(opa) => [
+ q(5262),
+ q(0),
+ ],
+ q(opk) => [
+ q(5263),
+ q(0),
+ ],
+ q(opm) => [
+ q(5264),
+ q(0),
+ ],
+ q(opo) => [
+ q(5265),
+ q(0),
+ ],
+ q(opt) => [
+ q(5266),
+ q(0),
+ ],
+ q(opy) => [
+ q(5267),
+ q(0),
+ ],
+ q(ora) => [
+ q(5268),
+ q(0),
+ ],
+ q(orc) => [
+ q(5269),
+ q(0),
+ ],
+ q(ore) => [
+ q(5270),
+ q(0),
+ ],
+ q(org) => [
+ q(5271),
+ q(0),
+ ],
+ q(orh) => [
+ q(5272),
+ q(0),
+ ],
+ q(ori) => [
+ q(0328),
+ q(0),
+ ],
+ q(orm) => [
+ q(0329),
+ q(0),
+ ],
+ q(orn) => [
+ q(5273),
+ q(0),
+ ],
+ q(oro) => [
+ q(5274),
+ q(0),
+ ],
+ q(orr) => [
+ q(5275),
+ q(0),
+ ],
+ q(ors) => [
+ q(5276),
+ q(0),
+ ],
+ q(ort) => [
+ q(5277),
+ q(0),
+ ],
+ q(oru) => [
+ q(5278),
+ q(0),
+ ],
+ q(orv) => [
+ q(5279),
+ q(0),
+ ],
+ q(orw) => [
+ q(5280),
+ q(0),
+ ],
+ q(orx) => [
+ q(5281),
+ q(0),
+ ],
+ q(ory) => [
+ q(5282),
+ q(0),
+ ],
+ q(orz) => [
+ q(5283),
+ q(0),
+ ],
+ q(osa) => [
+ q(0330),
+ q(0),
+ ],
+ q(osc) => [
+ q(5284),
+ q(0),
+ ],
+ q(osi) => [
+ q(5285),
+ q(0),
+ ],
+ q(oso) => [
+ q(5286),
+ q(0),
+ ],
+ q(osp) => [
+ q(5287),
+ q(0),
+ ],
+ q(oss) => [
+ q(0331),
+ q(0),
+ ],
+ q(ost) => [
+ q(5288),
+ q(0),
+ ],
+ q(osu) => [
+ q(5289),
+ q(0),
+ ],
+ q(osx) => [
+ q(5290),
+ q(0),
+ ],
+ q(ota) => [
+ q(0332),
+ q(1),
+ ],
+ q(otb) => [
+ q(5291),
+ q(0),
+ ],
+ q(otd) => [
+ q(5292),
+ q(0),
+ ],
+ q(ote) => [
+ q(5293),
+ q(0),
+ ],
+ q(oti) => [
+ q(5294),
+ q(0),
+ ],
+ q(otk) => [
+ q(5295),
+ q(0),
+ ],
+ q(otl) => [
+ q(5296),
+ q(0),
+ ],
+ q(otm) => [
+ q(5297),
+ q(0),
+ ],
+ q(otn) => [
+ q(5298),
+ q(0),
+ ],
+ q(oto) => [
+ q(0333),
+ q(0),
+ ],
+ q(otq) => [
+ q(5299),
+ q(0),
+ ],
+ q(otr) => [
+ q(5300),
+ q(0),
+ ],
+ q(ots) => [
+ q(5301),
+ q(0),
+ ],
+ q(ott) => [
+ q(5302),
+ q(0),
+ ],
+ q(otu) => [
+ q(5303),
+ q(0),
+ ],
+ q(otw) => [
+ q(5304),
+ q(0),
+ ],
+ q(otx) => [
+ q(5305),
+ q(0),
+ ],
+ q(oty) => [
+ q(5306),
+ q(0),
+ ],
+ q(otz) => [
+ q(5307),
+ q(0),
+ ],
+ q(oua) => [
+ q(5308),
+ q(0),
+ ],
+ q(oub) => [
+ q(5309),
+ q(0),
+ ],
+ q(oue) => [
+ q(5310),
+ q(0),
+ ],
+ q(oui) => [
+ q(5311),
+ q(0),
+ ],
+ q(oum) => [
+ q(5312),
+ q(0),
+ ],
+ q(oun) => [
+ q(5313),
+ q(0),
+ ],
+ q(owi) => [
+ q(5314),
+ q(0),
+ ],
+ q(owl) => [
+ q(5315),
+ q(0),
+ ],
+ q(oyb) => [
+ q(5316),
+ q(0),
+ ],
+ q(oyd) => [
+ q(5317),
+ q(0),
+ ],
+ q(oym) => [
+ q(5318),
+ q(0),
+ ],
+ q(oyy) => [
+ q(5319),
+ q(0),
+ ],
+ q(ozm) => [
+ q(5320),
+ q(0),
+ ],
+ q(paa) => [
+ q(0334),
+ q(0),
+ ],
+ q(pab) => [
+ q(5321),
+ q(0),
+ ],
+ q(pac) => [
+ q(5322),
+ q(0),
+ ],
+ q(pad) => [
+ q(5323),
+ q(0),
+ ],
+ q(pae) => [
+ q(5324),
+ q(0),
+ ],
+ q(paf) => [
+ q(5325),
+ q(0),
+ ],
+ q(pag) => [
+ q(0335),
+ q(0),
+ ],
+ q(pah) => [
+ q(5326),
+ q(0),
+ ],
+ q(pai) => [
+ q(5327),
+ q(0),
+ ],
+ q(pak) => [
+ q(5328),
+ q(0),
+ ],
+ q(pal) => [
+ q(0336),
+ q(0),
+ ],
+ q(pam) => [
+ q(0337),
+ q(0),
+ ],
+ q(pan) => [
+ q(0338),
+ q(0),
+ ],
+ q(pao) => [
+ q(5329),
+ q(0),
+ ],
+ q(pap) => [
+ q(0339),
+ q(0),
+ ],
+ q(paq) => [
+ q(5330),
+ q(0),
+ ],
+ q(par) => [
+ q(5331),
+ q(0),
+ ],
+ q(pas) => [
+ q(5332),
+ q(0),
+ ],
+ q(pat) => [
+ q(5333),
+ q(0),
+ ],
+ q(pau) => [
+ q(0340),
+ q(0),
+ ],
+ q(pav) => [
+ q(5334),
+ q(0),
+ ],
+ q(paw) => [
+ q(5335),
+ q(0),
+ ],
+ q(pax) => [
+ q(5336),
+ q(0),
+ ],
+ q(pay) => [
+ q(5337),
+ q(0),
+ ],
+ q(paz) => [
+ q(5338),
+ q(0),
+ ],
+ q(pbb) => [
+ q(5339),
+ q(0),
+ ],
+ q(pbc) => [
+ q(5340),
+ q(0),
+ ],
+ q(pbe) => [
+ q(5341),
+ q(0),
+ ],
+ q(pbf) => [
+ q(5342),
+ q(0),
+ ],
+ q(pbg) => [
+ q(5343),
+ q(0),
+ ],
+ q(pbh) => [
+ q(5344),
+ q(0),
+ ],
+ q(pbi) => [
+ q(5345),
+ q(0),
+ ],
+ q(pbl) => [
+ q(5346),
+ q(0),
+ ],
+ q(pbn) => [
+ q(5347),
+ q(0),
+ ],
+ q(pbo) => [
+ q(5348),
+ q(0),
+ ],
+ q(pbp) => [
+ q(5349),
+ q(0),
+ ],
+ q(pbr) => [
+ q(5350),
+ q(0),
+ ],
+ q(pbs) => [
+ q(5351),
+ q(0),
+ ],
+ q(pbt) => [
+ q(5352),
+ q(0),
+ ],
+ q(pbu) => [
+ q(5353),
+ q(0),
+ ],
+ q(pbv) => [
+ q(5354),
+ q(0),
+ ],
+ q(pby) => [
+ q(5355),
+ q(0),
+ ],
+ q(pca) => [
+ q(5356),
+ q(0),
+ ],
+ q(pcb) => [
+ q(5357),
+ q(0),
+ ],
+ q(pcc) => [
+ q(5358),
+ q(0),
+ ],
+ q(pcd) => [
+ q(5359),
+ q(0),
+ ],
+ q(pce) => [
+ q(5360),
+ q(0),
+ ],
+ q(pcf) => [
+ q(5361),
+ q(0),
+ ],
+ q(pcg) => [
+ q(5362),
+ q(0),
+ ],
+ q(pch) => [
+ q(5363),
+ q(0),
+ ],
+ q(pci) => [
+ q(5364),
+ q(0),
+ ],
+ q(pcj) => [
+ q(5365),
+ q(0),
+ ],
+ q(pck) => [
+ q(5366),
+ q(0),
+ ],
+ q(pcl) => [
+ q(5367),
+ q(0),
+ ],
+ q(pcm) => [
+ q(5368),
+ q(0),
+ ],
+ q(pcn) => [
+ q(5369),
+ q(0),
+ ],
+ q(pcp) => [
+ q(5370),
+ q(0),
+ ],
+ q(pcr) => [
+ q(5371),
+ q(0),
+ ],
+ q(pcw) => [
+ q(5372),
+ q(0),
+ ],
+ q(pda) => [
+ q(5373),
+ q(0),
+ ],
+ q(pdc) => [
+ q(5374),
+ q(0),
+ ],
+ q(pdi) => [
+ q(5375),
+ q(0),
+ ],
+ q(pdn) => [
+ q(5376),
+ q(0),
+ ],
+ q(pdo) => [
+ q(5377),
+ q(0),
+ ],
+ q(pdt) => [
+ q(5378),
+ q(0),
+ ],
+ q(pdu) => [
+ q(5379),
+ q(0),
+ ],
+ q(pea) => [
+ q(5380),
+ q(0),
+ ],
+ q(peb) => [
+ q(5381),
+ q(0),
+ ],
+ q(ped) => [
+ q(5382),
+ q(0),
+ ],
+ q(pee) => [
+ q(5383),
+ q(0),
+ ],
+ q(pef) => [
+ q(5384),
+ q(0),
+ ],
+ q(peg) => [
+ q(5385),
+ q(0),
+ ],
+ q(peh) => [
+ q(5386),
+ q(0),
+ ],
+ q(pei) => [
+ q(5387),
+ q(0),
+ ],
+ q(pej) => [
+ q(5388),
+ q(0),
+ ],
+ q(pek) => [
+ q(5389),
+ q(0),
+ ],
+ q(pel) => [
+ q(5390),
+ q(0),
+ ],
+ q(pem) => [
+ q(5391),
+ q(0),
+ ],
+ q(peo) => [
+ q(0341),
+ q(1),
+ ],
+ q(pep) => [
+ q(5392),
+ q(0),
+ ],
+ q(peq) => [
+ q(5393),
+ q(0),
+ ],
+ q(per) => [
+ q(0342),
+ q(0),
+ ],
+ q(pes) => [
+ q(5394),
+ q(0),
+ ],
+ q(pev) => [
+ q(5395),
+ q(0),
+ ],
+ q(pex) => [
+ q(5396),
+ q(0),
+ ],
+ q(pey) => [
+ q(5397),
+ q(0),
+ ],
+ q(pez) => [
+ q(5398),
+ q(0),
+ ],
+ q(pfa) => [
+ q(5399),
+ q(0),
+ ],
+ q(pfe) => [
+ q(5400),
+ q(0),
+ ],
+ q(pfl) => [
+ q(5401),
+ q(0),
+ ],
+ q(pga) => [
+ q(5402),
+ q(0),
+ ],
+ q(pgg) => [
+ q(5403),
+ q(0),
+ ],
+ q(pgi) => [
+ q(5404),
+ q(0),
+ ],
+ q(pgk) => [
+ q(5405),
+ q(0),
+ ],
+ q(pgl) => [
+ q(5406),
+ q(0),
+ ],
+ q(pgn) => [
+ q(5407),
+ q(0),
+ ],
+ q(pgs) => [
+ q(5408),
+ q(0),
+ ],
+ q(pgu) => [
+ q(5409),
+ q(0),
+ ],
+ q(pha) => [
+ q(5410),
+ q(0),
+ ],
+ q(phd) => [
+ q(5411),
+ q(0),
+ ],
+ q(phg) => [
+ q(5412),
+ q(0),
+ ],
+ q(phh) => [
+ q(5413),
+ q(0),
+ ],
+ q(phi) => [
+ q(0343),
+ q(0),
+ ],
+ q(phk) => [
+ q(5414),
+ q(0),
+ ],
+ q(phl) => [
+ q(5415),
+ q(0),
+ ],
+ q(phm) => [
+ q(5416),
+ q(0),
+ ],
+ q(phn) => [
+ q(0344),
+ q(0),
+ ],
+ q(pho) => [
+ q(5417),
+ q(0),
+ ],
+ q(phq) => [
+ q(5418),
+ q(0),
+ ],
+ q(phr) => [
+ q(5419),
+ q(0),
+ ],
+ q(pht) => [
+ q(5420),
+ q(0),
+ ],
+ q(phu) => [
+ q(5421),
+ q(0),
+ ],
+ q(phv) => [
+ q(5422),
+ q(0),
+ ],
+ q(phw) => [
+ q(5423),
+ q(0),
+ ],
+ q(pia) => [
+ q(5424),
+ q(0),
+ ],
+ q(pib) => [
+ q(5425),
+ q(0),
+ ],
+ q(pic) => [
+ q(5426),
+ q(0),
+ ],
+ q(pid) => [
+ q(5427),
+ q(0),
+ ],
+ q(pie) => [
+ q(5428),
+ q(0),
+ ],
+ q(pif) => [
+ q(5429),
+ q(0),
+ ],
+ q(pig) => [
+ q(5430),
+ q(0),
+ ],
+ q(pih) => [
+ q(5431),
+ q(0),
+ ],
+ q(pii) => [
+ q(5432),
+ q(0),
+ ],
+ q(pij) => [
+ q(5433),
+ q(0),
+ ],
+ q(pil) => [
+ q(5434),
+ q(0),
+ ],
+ q(pim) => [
+ q(5435),
+ q(0),
+ ],
+ q(pin) => [
+ q(5436),
+ q(0),
+ ],
+ q(pio) => [
+ q(5437),
+ q(0),
+ ],
+ q(pip) => [
+ q(5438),
+ q(0),
+ ],
+ q(pir) => [
+ q(5439),
+ q(0),
+ ],
+ q(pis) => [
+ q(5440),
+ q(0),
+ ],
+ q(pit) => [
+ q(5441),
+ q(0),
+ ],
+ q(piu) => [
+ q(5442),
+ q(0),
+ ],
+ q(piv) => [
+ q(5443),
+ q(0),
+ ],
+ q(piw) => [
+ q(5444),
+ q(0),
+ ],
+ q(pix) => [
+ q(5445),
+ q(0),
+ ],
+ q(piy) => [
+ q(5446),
+ q(0),
+ ],
+ q(piz) => [
+ q(5447),
+ q(0),
+ ],
+ q(pjt) => [
+ q(5448),
+ q(0),
+ ],
+ q(pka) => [
+ q(5449),
+ q(0),
+ ],
+ q(pkb) => [
+ q(5450),
+ q(0),
+ ],
+ q(pkc) => [
+ q(5451),
+ q(0),
+ ],
+ q(pkg) => [
+ q(5452),
+ q(0),
+ ],
+ q(pkh) => [
+ q(5453),
+ q(0),
+ ],
+ q(pkn) => [
+ q(5454),
+ q(0),
+ ],
+ q(pko) => [
+ q(5455),
+ q(0),
+ ],
+ q(pkp) => [
+ q(5456),
+ q(0),
+ ],
+ q(pkr) => [
+ q(5457),
+ q(0),
+ ],
+ q(pks) => [
+ q(5458),
+ q(0),
+ ],
+ q(pkt) => [
+ q(5459),
+ q(0),
+ ],
+ q(pku) => [
+ q(5460),
+ q(0),
+ ],
+ q(pla) => [
+ q(5461),
+ q(0),
+ ],
+ q(plb) => [
+ q(5462),
+ q(0),
+ ],
+ q(plc) => [
+ q(5463),
+ q(0),
+ ],
+ q(pld) => [
+ q(5464),
+ q(0),
+ ],
+ q(ple) => [
+ q(5465),
+ q(0),
+ ],
+ q(plf) => [
+ q(0519),
+ q(0),
+ ],
+ q(plg) => [
+ q(5466),
+ q(0),
+ ],
+ q(plh) => [
+ q(5467),
+ q(0),
+ ],
+ q(pli) => [
+ q(0345),
+ q(0),
+ ],
+ q(plj) => [
+ q(5468),
+ q(0),
+ ],
+ q(plk) => [
+ q(5469),
+ q(0),
+ ],
+ q(pll) => [
+ q(5470),
+ q(0),
+ ],
+ q(pln) => [
+ q(5471),
+ q(0),
+ ],
+ q(plo) => [
+ q(5472),
+ q(0),
+ ],
+ q(plp) => [
+ q(5473),
+ q(0),
+ ],
+ q(plq) => [
+ q(5474),
+ q(0),
+ ],
+ q(plr) => [
+ q(5475),
+ q(0),
+ ],
+ q(pls) => [
+ q(5476),
+ q(0),
+ ],
+ q(plt) => [
+ q(5477),
+ q(0),
+ ],
+ q(plu) => [
+ q(5478),
+ q(0),
+ ],
+ q(plv) => [
+ q(5479),
+ q(0),
+ ],
+ q(plw) => [
+ q(5480),
+ q(0),
+ ],
+ q(ply) => [
+ q(5481),
+ q(0),
+ ],
+ q(plz) => [
+ q(5482),
+ q(0),
+ ],
+ q(pma) => [
+ q(5483),
+ q(0),
+ ],
+ q(pmb) => [
+ q(5484),
+ q(0),
+ ],
+ q(pmc) => [
+ q(5485),
+ q(0),
+ ],
+ q(pmd) => [
+ q(5486),
+ q(0),
+ ],
+ q(pme) => [
+ q(5487),
+ q(0),
+ ],
+ q(pmf) => [
+ q(5488),
+ q(0),
+ ],
+ q(pmh) => [
+ q(5489),
+ q(0),
+ ],
+ q(pmi) => [
+ q(5490),
+ q(0),
+ ],
+ q(pmj) => [
+ q(5491),
+ q(0),
+ ],
+ q(pmk) => [
+ q(5492),
+ q(0),
+ ],
+ q(pml) => [
+ q(5493),
+ q(0),
+ ],
+ q(pmm) => [
+ q(5494),
+ q(0),
+ ],
+ q(pmn) => [
+ q(5495),
+ q(0),
+ ],
+ q(pmo) => [
+ q(5496),
+ q(0),
+ ],
+ q(pmq) => [
+ q(5497),
+ q(0),
+ ],
+ q(pmr) => [
+ q(5498),
+ q(0),
+ ],
+ q(pms) => [
+ q(5499),
+ q(0),
+ ],
+ q(pmt) => [
+ q(5500),
+ q(0),
+ ],
+ q(pmu) => [
+ q(5501),
+ q(0),
+ ],
+ q(pmw) => [
+ q(5502),
+ q(0),
+ ],
+ q(pmx) => [
+ q(5503),
+ q(0),
+ ],
+ q(pmy) => [
+ q(5504),
+ q(0),
+ ],
+ q(pmz) => [
+ q(5505),
+ q(0),
+ ],
+ q(pna) => [
+ q(5506),
+ q(0),
+ ],
+ q(pnb) => [
+ q(5507),
+ q(0),
+ ],
+ q(pnc) => [
+ q(5508),
+ q(0),
+ ],
+ q(pne) => [
+ q(5509),
+ q(0),
+ ],
+ q(png) => [
+ q(5510),
+ q(0),
+ ],
+ q(pnh) => [
+ q(5511),
+ q(0),
+ ],
+ q(pni) => [
+ q(5512),
+ q(0),
+ ],
+ q(pnk) => [
+ q(5513),
+ q(0),
+ ],
+ q(pnm) => [
+ q(5514),
+ q(0),
+ ],
+ q(pnn) => [
+ q(5515),
+ q(0),
+ ],
+ q(pno) => [
+ q(5516),
+ q(0),
+ ],
+ q(pnp) => [
+ q(5517),
+ q(0),
+ ],
+ q(pnq) => [
+ q(5518),
+ q(0),
+ ],
+ q(pnr) => [
+ q(5519),
+ q(0),
+ ],
+ q(pns) => [
+ q(5520),
+ q(0),
+ ],
+ q(pnt) => [
+ q(5521),
+ q(0),
+ ],
+ q(pnu) => [
+ q(5522),
+ q(0),
+ ],
+ q(pnv) => [
+ q(5523),
+ q(0),
+ ],
+ q(pnw) => [
+ q(5524),
+ q(0),
+ ],
+ q(pnx) => [
+ q(5525),
+ q(0),
+ ],
+ q(pny) => [
+ q(5526),
+ q(0),
+ ],
+ q(pnz) => [
+ q(5527),
+ q(0),
+ ],
+ q(poc) => [
+ q(5528),
+ q(0),
+ ],
+ q(pod) => [
+ q(5529),
+ q(0),
+ ],
+ q(poe) => [
+ q(5530),
+ q(0),
+ ],
+ q(pof) => [
+ q(5531),
+ q(0),
+ ],
+ q(pog) => [
+ q(5532),
+ q(0),
+ ],
+ q(poh) => [
+ q(5533),
+ q(0),
+ ],
+ q(poi) => [
+ q(5534),
+ q(0),
+ ],
+ q(pok) => [
+ q(5535),
+ q(0),
+ ],
+ q(pol) => [
+ q(0346),
+ q(0),
+ ],
+ q(pom) => [
+ q(5536),
+ q(0),
+ ],
+ q(pon) => [
+ q(0347),
+ q(0),
+ ],
+ q(poo) => [
+ q(5537),
+ q(0),
+ ],
+ q(pop) => [
+ q(5538),
+ q(0),
+ ],
+ q(poq) => [
+ q(5539),
+ q(0),
+ ],
+ q(por) => [
+ q(0348),
+ q(0),
+ ],
+ q(pos) => [
+ q(5540),
+ q(0),
+ ],
+ q(pot) => [
+ q(5541),
+ q(0),
+ ],
+ q(pov) => [
+ q(5542),
+ q(0),
+ ],
+ q(pow) => [
+ q(5543),
+ q(0),
+ ],
+ q(pox) => [
+ q(5544),
+ q(0),
+ ],
+ q(poy) => [
+ q(5545),
+ q(0),
+ ],
+ q(poz) => [
+ q(0520),
+ q(0),
+ ],
+ q(ppa) => [
+ q(5546),
+ q(0),
+ ],
+ q(ppe) => [
+ q(5547),
+ q(0),
+ ],
+ q(ppi) => [
+ q(5548),
+ q(0),
+ ],
+ q(ppk) => [
+ q(5549),
+ q(0),
+ ],
+ q(ppl) => [
+ q(5550),
+ q(0),
+ ],
+ q(ppm) => [
+ q(5551),
+ q(0),
+ ],
+ q(ppn) => [
+ q(5552),
+ q(0),
+ ],
+ q(ppo) => [
+ q(5553),
+ q(0),
+ ],
+ q(ppp) => [
+ q(5554),
+ q(0),
+ ],
+ q(ppq) => [
+ q(5555),
+ q(0),
+ ],
+ q(ppr) => [
+ q(5556),
+ q(0),
+ ],
+ q(pps) => [
+ q(5557),
+ q(0),
+ ],
+ q(ppt) => [
+ q(5558),
+ q(0),
+ ],
+ q(ppu) => [
+ q(5559),
+ q(0),
+ ],
+ q(pqa) => [
+ q(5560),
+ q(0),
+ ],
+ q(pqe) => [
+ q(0521),
+ q(0),
+ ],
+ q(pqm) => [
+ q(5561),
+ q(0),
+ ],
+ q(pqw) => [
+ q(0522),
+ q(0),
+ ],
+ q(pra) => [
+ q(0349),
+ q(0),
+ ],
+ q(prb) => [
+ q(5562),
+ q(0),
+ ],
+ q(prc) => [
+ q(5563),
+ q(0),
+ ],
+ q(prd) => [
+ q(5564),
+ q(0),
+ ],
+ q(pre) => [
+ q(5565),
+ q(0),
+ ],
+ q(prf) => [
+ q(5566),
+ q(0),
+ ],
+ q(prg) => [
+ q(5567),
+ q(0),
+ ],
+ q(prh) => [
+ q(5568),
+ q(0),
+ ],
+ q(pri) => [
+ q(5569),
+ q(0),
+ ],
+ q(prk) => [
+ q(5570),
+ q(0),
+ ],
+ q(prl) => [
+ q(5571),
+ q(0),
+ ],
+ q(prm) => [
+ q(5572),
+ q(0),
+ ],
+ q(prn) => [
+ q(5573),
+ q(0),
+ ],
+ q(pro) => [
+ q(0350),
+ q(1),
+ ],
+ q(prp) => [
+ q(5574),
+ q(0),
+ ],
+ q(prq) => [
+ q(5575),
+ q(0),
+ ],
+ q(prr) => [
+ q(5576),
+ q(0),
+ ],
+ q(prs) => [
+ q(5577),
+ q(0),
+ ],
+ q(prt) => [
+ q(5578),
+ q(0),
+ ],
+ q(pru) => [
+ q(5579),
+ q(0),
+ ],
+ q(prw) => [
+ q(5580),
+ q(0),
+ ],
+ q(prx) => [
+ q(5581),
+ q(0),
+ ],
+ q(pry) => [
+ q(5582),
+ q(0),
+ ],
+ q(prz) => [
+ q(5583),
+ q(0),
+ ],
+ q(psa) => [
+ q(5584),
+ q(0),
+ ],
+ q(psc) => [
+ q(5585),
+ q(0),
+ ],
+ q(psd) => [
+ q(5586),
+ q(0),
+ ],
+ q(pse) => [
+ q(5587),
+ q(0),
+ ],
+ q(psg) => [
+ q(5588),
+ q(0),
+ ],
+ q(psh) => [
+ q(5589),
+ q(0),
+ ],
+ q(psi) => [
+ q(5590),
+ q(0),
+ ],
+ q(psl) => [
+ q(5591),
+ q(0),
+ ],
+ q(psm) => [
+ q(5592),
+ q(0),
+ ],
+ q(psn) => [
+ q(5593),
+ q(0),
+ ],
+ q(pso) => [
+ q(5594),
+ q(0),
+ ],
+ q(psp) => [
+ q(5595),
+ q(0),
+ ],
+ q(psq) => [
+ q(5596),
+ q(0),
+ ],
+ q(psr) => [
+ q(5597),
+ q(0),
+ ],
+ q(pss) => [
+ q(5598),
+ q(0),
+ ],
+ q(pst) => [
+ q(5599),
+ q(0),
+ ],
+ q(psu) => [
+ q(5600),
+ q(0),
+ ],
+ q(psw) => [
+ q(5601),
+ q(0),
+ ],
+ q(psy) => [
+ q(5602),
+ q(0),
+ ],
+ q(pta) => [
+ q(5603),
+ q(0),
+ ],
+ q(pth) => [
+ q(5604),
+ q(0),
+ ],
+ q(pti) => [
+ q(5605),
+ q(0),
+ ],
+ q(ptn) => [
+ q(5606),
+ q(0),
+ ],
+ q(pto) => [
+ q(5607),
+ q(0),
+ ],
+ q(ptp) => [
+ q(5608),
+ q(0),
+ ],
+ q(ptr) => [
+ q(5609),
+ q(0),
+ ],
+ q(ptt) => [
+ q(5610),
+ q(0),
+ ],
+ q(ptu) => [
+ q(5611),
+ q(0),
+ ],
+ q(ptv) => [
+ q(5612),
+ q(0),
+ ],
+ q(ptw) => [
+ q(5613),
+ q(0),
+ ],
+ q(pty) => [
+ q(5614),
+ q(0),
+ ],
+ q(pua) => [
+ q(5615),
+ q(0),
+ ],
+ q(pub) => [
+ q(5616),
+ q(0),
+ ],
+ q(puc) => [
+ q(5617),
+ q(0),
+ ],
+ q(pud) => [
+ q(5618),
+ q(0),
+ ],
+ q(pue) => [
+ q(5619),
+ q(0),
+ ],
+ q(puf) => [
+ q(5620),
+ q(0),
+ ],
+ q(pug) => [
+ q(5621),
+ q(0),
+ ],
+ q(pui) => [
+ q(5622),
+ q(0),
+ ],
+ q(puj) => [
+ q(5623),
+ q(0),
+ ],
+ q(puk) => [
+ q(5624),
+ q(0),
+ ],
+ q(pum) => [
+ q(5625),
+ q(0),
+ ],
+ q(puo) => [
+ q(5626),
+ q(0),
+ ],
+ q(pup) => [
+ q(5627),
+ q(0),
+ ],
+ q(puq) => [
+ q(5628),
+ q(0),
+ ],
+ q(pur) => [
+ q(5629),
+ q(0),
+ ],
+ q(pus) => [
+ q(0351),
+ q(0),
+ ],
+ q(put) => [
+ q(5630),
+ q(0),
+ ],
+ q(puu) => [
+ q(5631),
+ q(0),
+ ],
+ q(puw) => [
+ q(5632),
+ q(0),
+ ],
+ q(pux) => [
+ q(5633),
+ q(0),
+ ],
+ q(puy) => [
+ q(5634),
+ q(0),
+ ],
+ q(puz) => [
+ q(5635),
+ q(0),
+ ],
+ q(pwa) => [
+ q(5636),
+ q(0),
+ ],
+ q(pwb) => [
+ q(5637),
+ q(0),
+ ],
+ q(pwg) => [
+ q(5638),
+ q(0),
+ ],
+ q(pwm) => [
+ q(5639),
+ q(0),
+ ],
+ q(pwn) => [
+ q(5640),
+ q(0),
+ ],
+ q(pwo) => [
+ q(5641),
+ q(0),
+ ],
+ q(pwr) => [
+ q(5642),
+ q(0),
+ ],
+ q(pww) => [
+ q(5643),
+ q(0),
+ ],
+ q(pxm) => [
+ q(5644),
+ q(0),
+ ],
+ q(pye) => [
+ q(5645),
+ q(0),
+ ],
+ q(pym) => [
+ q(5646),
+ q(0),
+ ],
+ q(pyn) => [
+ q(5647),
+ q(0),
+ ],
+ q(pys) => [
+ q(5648),
+ q(0),
+ ],
+ q(pyu) => [
+ q(5649),
+ q(0),
+ ],
+ q(pyx) => [
+ q(5650),
+ q(0),
+ ],
+ q(pyy) => [
+ q(5651),
+ q(0),
+ ],
+ q(pzn) => [
+ q(5652),
+ q(0),
+ ],
+ q(qtz) => [
+ q(0352),
+ q(0),
+ ],
+ q(qua) => [
+ q(5653),
+ q(0),
+ ],
+ q(qub) => [
+ q(5654),
+ q(0),
+ ],
+ q(quc) => [
+ q(5655),
+ q(0),
+ ],
+ q(qud) => [
+ q(5656),
+ q(0),
+ ],
+ q(que) => [
+ q(0353),
+ q(0),
+ ],
+ q(quf) => [
+ q(5657),
+ q(0),
+ ],
+ q(qug) => [
+ q(5658),
+ q(0),
+ ],
+ q(quh) => [
+ q(5659),
+ q(0),
+ ],
+ q(qui) => [
+ q(5660),
+ q(0),
+ ],
+ q(quk) => [
+ q(5661),
+ q(0),
+ ],
+ q(qul) => [
+ q(5662),
+ q(0),
+ ],
+ q(qum) => [
+ q(5663),
+ q(0),
+ ],
+ q(qun) => [
+ q(5664),
+ q(0),
+ ],
+ q(qup) => [
+ q(5665),
+ q(0),
+ ],
+ q(quq) => [
+ q(5666),
+ q(0),
+ ],
+ q(qur) => [
+ q(5667),
+ q(0),
+ ],
+ q(qus) => [
+ q(5668),
+ q(0),
+ ],
+ q(quv) => [
+ q(5669),
+ q(0),
+ ],
+ q(quw) => [
+ q(5670),
+ q(0),
+ ],
+ q(qux) => [
+ q(5671),
+ q(0),
+ ],
+ q(quy) => [
+ q(5672),
+ q(0),
+ ],
+ q(quz) => [
+ q(5673),
+ q(0),
+ ],
+ q(qva) => [
+ q(5674),
+ q(0),
+ ],
+ q(qvc) => [
+ q(5675),
+ q(0),
+ ],
+ q(qve) => [
+ q(5676),
+ q(0),
+ ],
+ q(qvh) => [
+ q(5677),
+ q(0),
+ ],
+ q(qvi) => [
+ q(5678),
+ q(0),
+ ],
+ q(qvj) => [
+ q(5679),
+ q(0),
+ ],
+ q(qvl) => [
+ q(5680),
+ q(0),
+ ],
+ q(qvm) => [
+ q(5681),
+ q(0),
+ ],
+ q(qvn) => [
+ q(5682),
+ q(0),
+ ],
+ q(qvo) => [
+ q(5683),
+ q(0),
+ ],
+ q(qvp) => [
+ q(5684),
+ q(0),
+ ],
+ q(qvs) => [
+ q(5685),
+ q(0),
+ ],
+ q(qvw) => [
+ q(5686),
+ q(0),
+ ],
+ q(qvy) => [
+ q(5687),
+ q(0),
+ ],
+ q(qvz) => [
+ q(5688),
+ q(0),
+ ],
+ q(qwa) => [
+ q(5689),
+ q(0),
+ ],
+ q(qwc) => [
+ q(5690),
+ q(0),
+ ],
+ q(qwe) => [
+ q(0523),
+ q(0),
+ ],
+ q(qwh) => [
+ q(5691),
+ q(0),
+ ],
+ q(qwm) => [
+ q(5692),
+ q(0),
+ ],
+ q(qws) => [
+ q(5693),
+ q(0),
+ ],
+ q(qwt) => [
+ q(5694),
+ q(0),
+ ],
+ q(qxa) => [
+ q(5695),
+ q(0),
+ ],
+ q(qxc) => [
+ q(5696),
+ q(0),
+ ],
+ q(qxh) => [
+ q(5697),
+ q(0),
+ ],
+ q(qxl) => [
+ q(5698),
+ q(0),
+ ],
+ q(qxn) => [
+ q(5699),
+ q(0),
+ ],
+ q(qxo) => [
+ q(5700),
+ q(0),
+ ],
+ q(qxp) => [
+ q(5701),
+ q(0),
+ ],
+ q(qxq) => [
+ q(5702),
+ q(0),
+ ],
+ q(qxr) => [
+ q(5703),
+ q(0),
+ ],
+ q(qxs) => [
+ q(5704),
+ q(0),
+ ],
+ q(qxt) => [
+ q(5705),
+ q(0),
+ ],
+ q(qxu) => [
+ q(5706),
+ q(0),
+ ],
+ q(qxw) => [
+ q(5707),
+ q(0),
+ ],
+ q(qya) => [
+ q(5708),
+ q(0),
+ ],
+ q(qyp) => [
+ q(5709),
+ q(0),
+ ],
+ q(raa) => [
+ q(5710),
+ q(0),
+ ],
+ q(rab) => [
+ q(5711),
+ q(0),
+ ],
+ q(rac) => [
+ q(5712),
+ q(0),
+ ],
+ q(rad) => [
+ q(5713),
+ q(0),
+ ],
+ q(raf) => [
+ q(5714),
+ q(0),
+ ],
+ q(rag) => [
+ q(5715),
+ q(0),
+ ],
+ q(rah) => [
+ q(5716),
+ q(0),
+ ],
+ q(rai) => [
+ q(5717),
+ q(0),
+ ],
+ q(raj) => [
+ q(0354),
+ q(0),
+ ],
+ q(rak) => [
+ q(5718),
+ q(0),
+ ],
+ q(ral) => [
+ q(5719),
+ q(0),
+ ],
+ q(ram) => [
+ q(5720),
+ q(0),
+ ],
+ q(ran) => [
+ q(5721),
+ q(0),
+ ],
+ q(rao) => [
+ q(5722),
+ q(0),
+ ],
+ q(rap) => [
+ q(0355),
+ q(0),
+ ],
+ q(raq) => [
+ q(5723),
+ q(0),
+ ],
+ q(rar) => [
+ q(0356),
+ q(0),
+ ],
+ q(ras) => [
+ q(5724),
+ q(0),
+ ],
+ q(rat) => [
+ q(5725),
+ q(0),
+ ],
+ q(rau) => [
+ q(5726),
+ q(0),
+ ],
+ q(rav) => [
+ q(5727),
+ q(0),
+ ],
+ q(raw) => [
+ q(5728),
+ q(0),
+ ],
+ q(rax) => [
+ q(5729),
+ q(0),
+ ],
+ q(ray) => [
+ q(5730),
+ q(0),
+ ],
+ q(raz) => [
+ q(5731),
+ q(0),
+ ],
+ q(rbb) => [
+ q(5732),
+ q(0),
+ ],
+ q(rbk) => [
+ q(5733),
+ q(0),
+ ],
+ q(rbl) => [
+ q(5734),
+ q(0),
+ ],
+ q(rbp) => [
+ q(5735),
+ q(0),
+ ],
+ q(rcf) => [
+ q(5736),
+ q(0),
+ ],
+ q(rdb) => [
+ q(5737),
+ q(0),
+ ],
+ q(rea) => [
+ q(5738),
+ q(0),
+ ],
+ q(reb) => [
+ q(5739),
+ q(0),
+ ],
+ q(ree) => [
+ q(5740),
+ q(0),
+ ],
+ q(reg) => [
+ q(5741),
+ q(0),
+ ],
+ q(rei) => [
+ q(5742),
+ q(0),
+ ],
+ q(rej) => [
+ q(5743),
+ q(0),
+ ],
+ q(rel) => [
+ q(5744),
+ q(0),
+ ],
+ q(rem) => [
+ q(5745),
+ q(0),
+ ],
+ q(ren) => [
+ q(5746),
+ q(0),
+ ],
+ q(rer) => [
+ q(5747),
+ q(0),
+ ],
+ q(res) => [
+ q(5748),
+ q(0),
+ ],
+ q(ret) => [
+ q(5749),
+ q(0),
+ ],
+ q(rey) => [
+ q(5750),
+ q(0),
+ ],
+ q(rga) => [
+ q(5751),
+ q(0),
+ ],
+ q(rge) => [
+ q(5752),
+ q(0),
+ ],
+ q(rgk) => [
+ q(5753),
+ q(0),
+ ],
+ q(rgn) => [
+ q(5754),
+ q(0),
+ ],
+ q(rgr) => [
+ q(5755),
+ q(0),
+ ],
+ q(rgs) => [
+ q(5756),
+ q(0),
+ ],
+ q(rgu) => [
+ q(5757),
+ q(0),
+ ],
+ q(rhg) => [
+ q(5758),
+ q(0),
+ ],
+ q(rhp) => [
+ q(5759),
+ q(0),
+ ],
+ q(ria) => [
+ q(5760),
+ q(0),
+ ],
+ q(rie) => [
+ q(5761),
+ q(0),
+ ],
+ q(rif) => [
+ q(5762),
+ q(0),
+ ],
+ q(ril) => [
+ q(5763),
+ q(0),
+ ],
+ q(rim) => [
+ q(5764),
+ q(0),
+ ],
+ q(rin) => [
+ q(5765),
+ q(0),
+ ],
+ q(rir) => [
+ q(5766),
+ q(0),
+ ],
+ q(rit) => [
+ q(5767),
+ q(0),
+ ],
+ q(riu) => [
+ q(5768),
+ q(0),
+ ],
+ q(rjg) => [
+ q(5769),
+ q(0),
+ ],
+ q(rji) => [
+ q(5770),
+ q(0),
+ ],
+ q(rjs) => [
+ q(5771),
+ q(0),
+ ],
+ q(rka) => [
+ q(5772),
+ q(0),
+ ],
+ q(rkb) => [
+ q(5773),
+ q(0),
+ ],
+ q(rkh) => [
+ q(5774),
+ q(0),
+ ],
+ q(rki) => [
+ q(5775),
+ q(0),
+ ],
+ q(rkm) => [
+ q(5776),
+ q(0),
+ ],
+ q(rkt) => [
+ q(5777),
+ q(0),
+ ],
+ q(rma) => [
+ q(5778),
+ q(0),
+ ],
+ q(rmb) => [
+ q(5779),
+ q(0),
+ ],
+ q(rmc) => [
+ q(5780),
+ q(0),
+ ],
+ q(rmd) => [
+ q(5781),
+ q(0),
+ ],
+ q(rme) => [
+ q(5782),
+ q(0),
+ ],
+ q(rmf) => [
+ q(5783),
+ q(0),
+ ],
+ q(rmg) => [
+ q(5784),
+ q(0),
+ ],
+ q(rmh) => [
+ q(5785),
+ q(0),
+ ],
+ q(rmi) => [
+ q(5786),
+ q(0),
+ ],
+ q(rmk) => [
+ q(5787),
+ q(0),
+ ],
+ q(rml) => [
+ q(5788),
+ q(0),
+ ],
+ q(rmm) => [
+ q(5789),
+ q(0),
+ ],
+ q(rmn) => [
+ q(5790),
+ q(0),
+ ],
+ q(rmo) => [
+ q(5791),
+ q(0),
+ ],
+ q(rmp) => [
+ q(5792),
+ q(0),
+ ],
+ q(rmq) => [
+ q(5793),
+ q(0),
+ ],
+ q(rms) => [
+ q(5794),
+ q(0),
+ ],
+ q(rmt) => [
+ q(5795),
+ q(0),
+ ],
+ q(rmu) => [
+ q(5796),
+ q(0),
+ ],
+ q(rmv) => [
+ q(5797),
+ q(0),
+ ],
+ q(rmw) => [
+ q(5798),
+ q(0),
+ ],
+ q(rmx) => [
+ q(5799),
+ q(0),
+ ],
+ q(rmy) => [
+ q(5800),
+ q(0),
+ ],
+ q(rmz) => [
+ q(5801),
+ q(0),
+ ],
+ q(rna) => [
+ q(5802),
+ q(0),
+ ],
+ q(rnd) => [
+ q(5803),
+ q(0),
+ ],
+ q(rng) => [
+ q(5804),
+ q(0),
+ ],
+ q(rnl) => [
+ q(5805),
+ q(0),
+ ],
+ q(rnn) => [
+ q(5806),
+ q(0),
+ ],
+ q(rnp) => [
+ q(5807),
+ q(0),
+ ],
+ q(rnr) => [
+ q(5808),
+ q(0),
+ ],
+ q(rnw) => [
+ q(5809),
+ q(0),
+ ],
+ q(roa) => [
+ q(0357),
+ q(0),
+ ],
+ q(rob) => [
+ q(5810),
+ q(0),
+ ],
+ q(roc) => [
+ q(5811),
+ q(0),
+ ],
+ q(rod) => [
+ q(5812),
+ q(0),
+ ],
+ q(roe) => [
+ q(5813),
+ q(0),
+ ],
+ q(rof) => [
+ q(5814),
+ q(0),
+ ],
+ q(rog) => [
+ q(5815),
+ q(0),
+ ],
+ q(roh) => [
+ q(0358),
+ q(0),
+ ],
+ q(rol) => [
+ q(5816),
+ q(0),
+ ],
+ q(rom) => [
+ q(0359),
+ q(0),
+ ],
+ q(roo) => [
+ q(5817),
+ q(0),
+ ],
+ q(rop) => [
+ q(5818),
+ q(0),
+ ],
+ q(ror) => [
+ q(5819),
+ q(0),
+ ],
+ q(rou) => [
+ q(5820),
+ q(0),
+ ],
+ q(row) => [
+ q(5821),
+ q(0),
+ ],
+ q(rpn) => [
+ q(5822),
+ q(0),
+ ],
+ q(rpt) => [
+ q(5823),
+ q(0),
+ ],
+ q(rri) => [
+ q(5824),
+ q(0),
+ ],
+ q(rro) => [
+ q(5825),
+ q(0),
+ ],
+ q(rrt) => [
+ q(5826),
+ q(0),
+ ],
+ q(rsb) => [
+ q(5827),
+ q(0),
+ ],
+ q(rsi) => [
+ q(5828),
+ q(0),
+ ],
+ q(rsl) => [
+ q(5829),
+ q(0),
+ ],
+ q(rtc) => [
+ q(5830),
+ q(0),
+ ],
+ q(rth) => [
+ q(5831),
+ q(0),
+ ],
+ q(rtm) => [
+ q(5832),
+ q(0),
+ ],
+ q(rtw) => [
+ q(5833),
+ q(0),
+ ],
+ q(rub) => [
+ q(5834),
+ q(0),
+ ],
+ q(ruc) => [
+ q(5835),
+ q(0),
+ ],
+ q(rue) => [
+ q(5836),
+ q(0),
+ ],
+ q(ruf) => [
+ q(5837),
+ q(0),
+ ],
+ q(rug) => [
+ q(5838),
+ q(0),
+ ],
+ q(ruh) => [
+ q(5839),
+ q(0),
+ ],
+ q(rui) => [
+ q(5840),
+ q(0),
+ ],
+ q(ruk) => [
+ q(5841),
+ q(0),
+ ],
+ q(rum) => [
+ q(0360),
+ q(0),
+ ],
+ q(run) => [
+ q(0361),
+ q(0),
+ ],
+ q(ruo) => [
+ q(5842),
+ q(0),
+ ],
+ q(rup) => [
+ q(0362),
+ q(0),
+ ],
+ q(ruq) => [
+ q(5843),
+ q(0),
+ ],
+ q(rus) => [
+ q(0363),
+ q(0),
+ ],
+ q(rut) => [
+ q(5844),
+ q(0),
+ ],
+ q(ruu) => [
+ q(5845),
+ q(0),
+ ],
+ q(ruy) => [
+ q(5846),
+ q(0),
+ ],
+ q(ruz) => [
+ q(5847),
+ q(0),
+ ],
+ q(rwa) => [
+ q(5848),
+ q(0),
+ ],
+ q(rwk) => [
+ q(5849),
+ q(0),
+ ],
+ q(rwm) => [
+ q(5850),
+ q(0),
+ ],
+ q(rwo) => [
+ q(5851),
+ q(0),
+ ],
+ q(rwr) => [
+ q(5852),
+ q(0),
+ ],
+ q(ryn) => [
+ q(5853),
+ q(0),
+ ],
+ q(rys) => [
+ q(5854),
+ q(0),
+ ],
+ q(ryu) => [
+ q(5855),
+ q(0),
+ ],
+ q(saa) => [
+ q(5856),
+ q(0),
+ ],
+ q(sab) => [
+ q(5857),
+ q(0),
+ ],
+ q(sac) => [
+ q(5858),
+ q(0),
+ ],
+ q(sad) => [
+ q(0364),
+ q(0),
+ ],
+ q(sae) => [
+ q(5859),
+ q(0),
+ ],
+ q(saf) => [
+ q(5860),
+ q(0),
+ ],
+ q(sag) => [
+ q(0365),
+ q(0),
+ ],
+ q(sah) => [
+ q(0366),
+ q(0),
+ ],
+ q(sai) => [
+ q(0367),
+ q(1),
+ ],
+ q(saj) => [
+ q(5861),
+ q(0),
+ ],
+ q(sak) => [
+ q(5862),
+ q(0),
+ ],
+ q(sal) => [
+ q(0368),
+ q(0),
+ ],
+ q(sam) => [
+ q(0369),
+ q(0),
+ ],
+ q(san) => [
+ q(0370),
+ q(0),
+ ],
+ q(sao) => [
+ q(5863),
+ q(0),
+ ],
+ q(sap) => [
+ q(5864),
+ q(0),
+ ],
+ q(saq) => [
+ q(5865),
+ q(0),
+ ],
+ q(sar) => [
+ q(5866),
+ q(0),
+ ],
+ q(sas) => [
+ q(0371),
+ q(0),
+ ],
+ q(sat) => [
+ q(0372),
+ q(0),
+ ],
+ q(sau) => [
+ q(5867),
+ q(0),
+ ],
+ q(sav) => [
+ q(5868),
+ q(0),
+ ],
+ q(saw) => [
+ q(5869),
+ q(0),
+ ],
+ q(sax) => [
+ q(5870),
+ q(0),
+ ],
+ q(say) => [
+ q(5871),
+ q(0),
+ ],
+ q(saz) => [
+ q(5872),
+ q(0),
+ ],
+ q(sba) => [
+ q(5873),
+ q(0),
+ ],
+ q(sbb) => [
+ q(5874),
+ q(0),
+ ],
+ q(sbc) => [
+ q(5875),
+ q(0),
+ ],
+ q(sbd) => [
+ q(5876),
+ q(0),
+ ],
+ q(sbe) => [
+ q(5877),
+ q(0),
+ ],
+ q(sbf) => [
+ q(5878),
+ q(0),
+ ],
+ q(sbg) => [
+ q(5879),
+ q(0),
+ ],
+ q(sbh) => [
+ q(5880),
+ q(0),
+ ],
+ q(sbi) => [
+ q(5881),
+ q(0),
+ ],
+ q(sbj) => [
+ q(5882),
+ q(0),
+ ],
+ q(sbk) => [
+ q(5883),
+ q(0),
+ ],
+ q(sbl) => [
+ q(5884),
+ q(0),
+ ],
+ q(sbm) => [
+ q(5885),
+ q(0),
+ ],
+ q(sbn) => [
+ q(5886),
+ q(0),
+ ],
+ q(sbo) => [
+ q(5887),
+ q(0),
+ ],
+ q(sbp) => [
+ q(5888),
+ q(0),
+ ],
+ q(sbq) => [
+ q(5889),
+ q(0),
+ ],
+ q(sbr) => [
+ q(5890),
+ q(0),
+ ],
+ q(sbs) => [
+ q(5891),
+ q(0),
+ ],
+ q(sbt) => [
+ q(5892),
+ q(0),
+ ],
+ q(sbu) => [
+ q(5893),
+ q(0),
+ ],
+ q(sbv) => [
+ q(5894),
+ q(0),
+ ],
+ q(sbw) => [
+ q(5895),
+ q(0),
+ ],
+ q(sbx) => [
+ q(5896),
+ q(0),
+ ],
+ q(sby) => [
+ q(5897),
+ q(0),
+ ],
+ q(sbz) => [
+ q(5898),
+ q(0),
+ ],
+ q(scb) => [
+ q(5899),
+ q(0),
+ ],
+ q(sce) => [
+ q(5900),
+ q(0),
+ ],
+ q(scf) => [
+ q(5901),
+ q(0),
+ ],
+ q(scg) => [
+ q(5902),
+ q(0),
+ ],
+ q(sch) => [
+ q(5903),
+ q(0),
+ ],
+ q(sci) => [
+ q(5904),
+ q(0),
+ ],
+ q(sck) => [
+ q(5905),
+ q(0),
+ ],
+ q(scl) => [
+ q(5906),
+ q(0),
+ ],
+ q(scn) => [
+ q(0373),
+ q(0),
+ ],
+ q(sco) => [
+ q(0374),
+ q(0),
+ ],
+ q(scp) => [
+ q(5907),
+ q(0),
+ ],
+ q(scq) => [
+ q(5908),
+ q(0),
+ ],
+ q(scs) => [
+ q(5909),
+ q(0),
+ ],
+ q(scu) => [
+ q(5910),
+ q(0),
+ ],
+ q(scv) => [
+ q(5911),
+ q(0),
+ ],
+ q(scw) => [
+ q(5912),
+ q(0),
+ ],
+ q(scx) => [
+ q(5913),
+ q(0),
+ ],
+ q(sda) => [
+ q(5914),
+ q(0),
+ ],
+ q(sdb) => [
+ q(5915),
+ q(0),
+ ],
+ q(sdc) => [
+ q(5916),
+ q(0),
+ ],
+ q(sde) => [
+ q(5917),
+ q(0),
+ ],
+ q(sdf) => [
+ q(5918),
+ q(0),
+ ],
+ q(sdg) => [
+ q(5919),
+ q(0),
+ ],
+ q(sdh) => [
+ q(5920),
+ q(0),
+ ],
+ q(sdj) => [
+ q(5921),
+ q(0),
+ ],
+ q(sdk) => [
+ q(5922),
+ q(0),
+ ],
+ q(sdl) => [
+ q(5923),
+ q(0),
+ ],
+ q(sdm) => [
+ q(5924),
+ q(0),
+ ],
+ q(sdn) => [
+ q(5925),
+ q(0),
+ ],
+ q(sdo) => [
+ q(5926),
+ q(0),
+ ],
+ q(sdp) => [
+ q(5927),
+ q(0),
+ ],
+ q(sdr) => [
+ q(5928),
+ q(0),
+ ],
+ q(sds) => [
+ q(5929),
+ q(0),
+ ],
+ q(sdt) => [
+ q(5930),
+ q(0),
+ ],
+ q(sdu) => [
+ q(5931),
+ q(0),
+ ],
+ q(sdv) => [
+ q(0524),
+ q(0),
+ ],
+ q(sdx) => [
+ q(5932),
+ q(0),
+ ],
+ q(sdz) => [
+ q(5933),
+ q(0),
+ ],
+ q(sea) => [
+ q(5934),
+ q(0),
+ ],
+ q(seb) => [
+ q(5935),
+ q(0),
+ ],
+ q(sec) => [
+ q(5936),
+ q(0),
+ ],
+ q(sed) => [
+ q(5937),
+ q(0),
+ ],
+ q(see) => [
+ q(5938),
+ q(0),
+ ],
+ q(sef) => [
+ q(5939),
+ q(0),
+ ],
+ q(seg) => [
+ q(5940),
+ q(0),
+ ],
+ q(seh) => [
+ q(5941),
+ q(0),
+ ],
+ q(sei) => [
+ q(5942),
+ q(0),
+ ],
+ q(sej) => [
+ q(5943),
+ q(0),
+ ],
+ q(sek) => [
+ q(5944),
+ q(0),
+ ],
+ q(sel) => [
+ q(0375),
+ q(0),
+ ],
+ q(sem) => [
+ q(0376),
+ q(0),
+ ],
+ q(sen) => [
+ q(5945),
+ q(0),
+ ],
+ q(seo) => [
+ q(5946),
+ q(0),
+ ],
+ q(sep) => [
+ q(5947),
+ q(0),
+ ],
+ q(seq) => [
+ q(5948),
+ q(0),
+ ],
+ q(ser) => [
+ q(5949),
+ q(0),
+ ],
+ q(ses) => [
+ q(5950),
+ q(0),
+ ],
+ q(set) => [
+ q(5951),
+ q(0),
+ ],
+ q(seu) => [
+ q(5952),
+ q(0),
+ ],
+ q(sev) => [
+ q(5953),
+ q(0),
+ ],
+ q(sew) => [
+ q(5954),
+ q(0),
+ ],
+ q(sey) => [
+ q(5955),
+ q(0),
+ ],
+ q(sez) => [
+ q(5956),
+ q(0),
+ ],
+ q(sfb) => [
+ q(5957),
+ q(0),
+ ],
+ q(sfe) => [
+ q(5958),
+ q(0),
+ ],
+ q(sfm) => [
+ q(5959),
+ q(0),
+ ],
+ q(sfs) => [
+ q(5960),
+ q(0),
+ ],
+ q(sfw) => [
+ q(5961),
+ q(0),
+ ],
+ q(sga) => [
+ q(0377),
+ q(1),
+ ],
+ q(sgb) => [
+ q(5962),
+ q(0),
+ ],
+ q(sgc) => [
+ q(5963),
+ q(0),
+ ],
+ q(sgd) => [
+ q(5964),
+ q(0),
+ ],
+ q(sge) => [
+ q(5965),
+ q(0),
+ ],
+ q(sgg) => [
+ q(5966),
+ q(0),
+ ],
+ q(sgh) => [
+ q(5967),
+ q(0),
+ ],
+ q(sgi) => [
+ q(5968),
+ q(0),
+ ],
+ q(sgj) => [
+ q(5969),
+ q(0),
+ ],
+ q(sgk) => [
+ q(5970),
+ q(0),
+ ],
+ q(sgm) => [
+ q(5971),
+ q(0),
+ ],
+ q(sgn) => [
+ q(0378),
+ q(0),
+ ],
+ q(sgo) => [
+ q(5972),
+ q(0),
+ ],
+ q(sgp) => [
+ q(5973),
+ q(0),
+ ],
+ q(sgr) => [
+ q(5974),
+ q(0),
+ ],
+ q(sgs) => [
+ q(5975),
+ q(0),
+ ],
+ q(sgt) => [
+ q(5976),
+ q(0),
+ ],
+ q(sgu) => [
+ q(5977),
+ q(0),
+ ],
+ q(sgw) => [
+ q(5978),
+ q(0),
+ ],
+ q(sgx) => [
+ q(5979),
+ q(0),
+ ],
+ q(sgy) => [
+ q(5980),
+ q(0),
+ ],
+ q(sgz) => [
+ q(5981),
+ q(0),
+ ],
+ q(sha) => [
+ q(5982),
+ q(0),
+ ],
+ q(shb) => [
+ q(5983),
+ q(0),
+ ],
+ q(shc) => [
+ q(5984),
+ q(0),
+ ],
+ q(shd) => [
+ q(5985),
+ q(0),
+ ],
+ q(she) => [
+ q(5986),
+ q(0),
+ ],
+ q(shg) => [
+ q(5987),
+ q(0),
+ ],
+ q(shh) => [
+ q(5988),
+ q(0),
+ ],
+ q(shi) => [
+ q(5989),
+ q(0),
+ ],
+ q(shj) => [
+ q(5990),
+ q(0),
+ ],
+ q(shk) => [
+ q(5991),
+ q(0),
+ ],
+ q(shl) => [
+ q(5992),
+ q(0),
+ ],
+ q(shm) => [
+ q(5993),
+ q(0),
+ ],
+ q(shn) => [
+ q(0379),
+ q(0),
+ ],
+ q(sho) => [
+ q(5994),
+ q(0),
+ ],
+ q(shp) => [
+ q(5995),
+ q(0),
+ ],
+ q(shq) => [
+ q(5996),
+ q(0),
+ ],
+ q(shr) => [
+ q(5997),
+ q(0),
+ ],
+ q(shs) => [
+ q(5998),
+ q(0),
+ ],
+ q(sht) => [
+ q(5999),
+ q(0),
+ ],
+ q(shu) => [
+ q(6000),
+ q(0),
+ ],
+ q(shv) => [
+ q(6001),
+ q(0),
+ ],
+ q(shw) => [
+ q(6002),
+ q(0),
+ ],
+ q(shx) => [
+ q(6003),
+ q(0),
+ ],
+ q(shy) => [
+ q(6004),
+ q(0),
+ ],
+ q(shz) => [
+ q(6005),
+ q(0),
+ ],
+ q(sia) => [
+ q(6006),
+ q(0),
+ ],
+ q(sib) => [
+ q(6007),
+ q(0),
+ ],
+ q(sid) => [
+ q(0380),
+ q(0),
+ ],
+ q(sie) => [
+ q(6008),
+ q(0),
+ ],
+ q(sif) => [
+ q(6009),
+ q(0),
+ ],
+ q(sig) => [
+ q(6010),
+ q(0),
+ ],
+ q(sih) => [
+ q(6011),
+ q(0),
+ ],
+ q(sii) => [
+ q(6012),
+ q(0),
+ ],
+ q(sij) => [
+ q(6013),
+ q(0),
+ ],
+ q(sik) => [
+ q(6014),
+ q(0),
+ ],
+ q(sil) => [
+ q(6015),
+ q(0),
+ ],
+ q(sim) => [
+ q(6016),
+ q(0),
+ ],
+ q(sin) => [
+ q(0381),
+ q(0),
+ ],
+ q(sio) => [
+ q(0382),
+ q(0),
+ ],
+ q(sip) => [
+ q(6017),
+ q(0),
+ ],
+ q(siq) => [
+ q(6018),
+ q(0),
+ ],
+ q(sir) => [
+ q(6019),
+ q(0),
+ ],
+ q(sis) => [
+ q(6020),
+ q(0),
+ ],
+ q(sit) => [
+ q(0383),
+ q(0),
+ ],
+ q(siu) => [
+ q(6021),
+ q(0),
+ ],
+ q(siv) => [
+ q(6022),
+ q(0),
+ ],
+ q(siw) => [
+ q(6023),
+ q(0),
+ ],
+ q(six) => [
+ q(6024),
+ q(0),
+ ],
+ q(siy) => [
+ q(6025),
+ q(0),
+ ],
+ q(siz) => [
+ q(6026),
+ q(0),
+ ],
+ q(sja) => [
+ q(6027),
+ q(0),
+ ],
+ q(sjb) => [
+ q(6028),
+ q(0),
+ ],
+ q(sjd) => [
+ q(6029),
+ q(0),
+ ],
+ q(sje) => [
+ q(6030),
+ q(0),
+ ],
+ q(sjg) => [
+ q(6031),
+ q(0),
+ ],
+ q(sjk) => [
+ q(6032),
+ q(0),
+ ],
+ q(sjl) => [
+ q(6033),
+ q(0),
+ ],
+ q(sjm) => [
+ q(6034),
+ q(0),
+ ],
+ q(sjn) => [
+ q(6035),
+ q(0),
+ ],
+ q(sjo) => [
+ q(6036),
+ q(0),
+ ],
+ q(sjp) => [
+ q(6037),
+ q(0),
+ ],
+ q(sjr) => [
+ q(6038),
+ q(0),
+ ],
+ q(sjs) => [
+ q(6039),
+ q(0),
+ ],
+ q(sjt) => [
+ q(6040),
+ q(0),
+ ],
+ q(sju) => [
+ q(6041),
+ q(0),
+ ],
+ q(sjw) => [
+ q(6042),
+ q(0),
+ ],
+ q(ska) => [
+ q(6043),
+ q(0),
+ ],
+ q(skb) => [
+ q(6044),
+ q(0),
+ ],
+ q(skc) => [
+ q(6045),
+ q(0),
+ ],
+ q(skd) => [
+ q(6046),
+ q(0),
+ ],
+ q(ske) => [
+ q(6047),
+ q(0),
+ ],
+ q(skf) => [
+ q(6048),
+ q(0),
+ ],
+ q(skg) => [
+ q(6049),
+ q(0),
+ ],
+ q(skh) => [
+ q(6050),
+ q(0),
+ ],
+ q(ski) => [
+ q(6051),
+ q(0),
+ ],
+ q(skj) => [
+ q(6052),
+ q(0),
+ ],
+ q(skk) => [
+ q(6053),
+ q(0),
+ ],
+ q(skm) => [
+ q(6054),
+ q(0),
+ ],
+ q(skn) => [
+ q(6055),
+ q(0),
+ ],
+ q(sko) => [
+ q(6056),
+ q(0),
+ ],
+ q(skp) => [
+ q(6057),
+ q(0),
+ ],
+ q(skq) => [
+ q(6058),
+ q(0),
+ ],
+ q(skr) => [
+ q(6059),
+ q(0),
+ ],
+ q(sks) => [
+ q(6060),
+ q(0),
+ ],
+ q(skt) => [
+ q(6061),
+ q(0),
+ ],
+ q(sku) => [
+ q(6062),
+ q(0),
+ ],
+ q(skv) => [
+ q(6063),
+ q(0),
+ ],
+ q(skw) => [
+ q(6064),
+ q(0),
+ ],
+ q(skx) => [
+ q(6065),
+ q(0),
+ ],
+ q(sky) => [
+ q(6066),
+ q(0),
+ ],
+ q(skz) => [
+ q(6067),
+ q(0),
+ ],
+ q(sla) => [
+ q(0384),
+ q(0),
+ ],
+ q(slc) => [
+ q(5877),
+ q(0),
+ ],
+ q(sld) => [
+ q(6068),
+ q(0),
+ ],
+ q(sle) => [
+ q(6069),
+ q(0),
+ ],
+ q(slf) => [
+ q(6070),
+ q(0),
+ ],
+ q(slg) => [
+ q(6071),
+ q(0),
+ ],
+ q(slh) => [
+ q(6072),
+ q(0),
+ ],
+ q(sli) => [
+ q(6073),
+ q(0),
+ ],
+ q(slj) => [
+ q(6074),
+ q(0),
+ ],
+ q(sll) => [
+ q(6075),
+ q(0),
+ ],
+ q(slm) => [
+ q(6076),
+ q(0),
+ ],
+ q(sln) => [
+ q(6077),
+ q(0),
+ ],
+ q(slo) => [
+ q(0385),
+ q(0),
+ ],
+ q(slp) => [
+ q(6078),
+ q(0),
+ ],
+ q(slq) => [
+ q(6079),
+ q(0),
+ ],
+ q(slr) => [
+ q(6080),
+ q(0),
+ ],
+ q(sls) => [
+ q(6081),
+ q(0),
+ ],
+ q(slt) => [
+ q(6082),
+ q(0),
+ ],
+ q(slu) => [
+ q(6083),
+ q(0),
+ ],
+ q(slv) => [
+ q(0386),
+ q(0),
+ ],
+ q(slw) => [
+ q(6084),
+ q(0),
+ ],
+ q(slx) => [
+ q(6085),
+ q(0),
+ ],
+ q(sly) => [
+ q(6086),
+ q(0),
+ ],
+ q(slz) => [
+ q(6087),
+ q(0),
+ ],
+ q(sma) => [
+ q(0387),
+ q(0),
+ ],
+ q(smb) => [
+ q(6088),
+ q(0),
+ ],
+ q(smc) => [
+ q(6089),
+ q(0),
+ ],
+ q(smd) => [
+ q(6090),
+ q(0),
+ ],
+ q(sme) => [
+ q(0388),
+ q(0),
+ ],
+ q(smf) => [
+ q(6091),
+ q(0),
+ ],
+ q(smg) => [
+ q(6092),
+ q(0),
+ ],
+ q(smh) => [
+ q(6093),
+ q(0),
+ ],
+ q(smi) => [
+ q(0389),
+ q(0),
+ ],
+ q(smj) => [
+ q(0390),
+ q(0),
+ ],
+ q(smk) => [
+ q(6094),
+ q(0),
+ ],
+ q(sml) => [
+ q(6095),
+ q(0),
+ ],
+ q(smm) => [
+ q(6096),
+ q(0),
+ ],
+ q(smn) => [
+ q(0391),
+ q(0),
+ ],
+ q(smo) => [
+ q(0392),
+ q(0),
+ ],
+ q(smp) => [
+ q(6097),
+ q(0),
+ ],
+ q(smq) => [
+ q(6098),
+ q(0),
+ ],
+ q(smr) => [
+ q(6099),
+ q(0),
+ ],
+ q(sms) => [
+ q(0393),
+ q(0),
+ ],
+ q(smt) => [
+ q(6100),
+ q(0),
+ ],
+ q(smu) => [
+ q(6101),
+ q(0),
+ ],
+ q(smv) => [
+ q(6102),
+ q(0),
+ ],
+ q(smw) => [
+ q(6103),
+ q(0),
+ ],
+ q(smx) => [
+ q(6104),
+ q(0),
+ ],
+ q(smy) => [
+ q(6105),
+ q(0),
+ ],
+ q(smz) => [
+ q(6106),
+ q(0),
+ ],
+ q(sna) => [
+ q(0394),
+ q(0),
+ ],
+ q(snb) => [
+ q(6107),
+ q(0),
+ ],
+ q(snc) => [
+ q(6108),
+ q(0),
+ ],
+ q(snd) => [
+ q(0395),
+ q(0),
+ ],
+ q(sne) => [
+ q(6109),
+ q(0),
+ ],
+ q(snf) => [
+ q(6110),
+ q(0),
+ ],
+ q(sng) => [
+ q(6111),
+ q(0),
+ ],
+ q(snh) => [
+ q(6112),
+ q(0),
+ ],
+ q(sni) => [
+ q(6113),
+ q(0),
+ ],
+ q(snj) => [
+ q(6114),
+ q(0),
+ ],
+ q(snk) => [
+ q(0396),
+ q(0),
+ ],
+ q(snl) => [
+ q(6115),
+ q(0),
+ ],
+ q(snm) => [
+ q(6116),
+ q(0),
+ ],
+ q(snn) => [
+ q(6117),
+ q(0),
+ ],
+ q(sno) => [
+ q(6118),
+ q(0),
+ ],
+ q(snp) => [
+ q(6119),
+ q(0),
+ ],
+ q(snq) => [
+ q(6120),
+ q(0),
+ ],
+ q(snr) => [
+ q(6121),
+ q(0),
+ ],
+ q(sns) => [
+ q(6122),
+ q(0),
+ ],
+ q(snu) => [
+ q(6123),
+ q(0),
+ ],
+ q(snv) => [
+ q(6124),
+ q(0),
+ ],
+ q(snw) => [
+ q(6125),
+ q(0),
+ ],
+ q(snx) => [
+ q(6126),
+ q(0),
+ ],
+ q(sny) => [
+ q(6127),
+ q(0),
+ ],
+ q(snz) => [
+ q(6128),
+ q(0),
+ ],
+ q(soa) => [
+ q(6129),
+ q(0),
+ ],
+ q(sob) => [
+ q(6130),
+ q(0),
+ ],
+ q(soc) => [
+ q(6131),
+ q(0),
+ ],
+ q(sod) => [
+ q(6132),
+ q(0),
+ ],
+ q(soe) => [
+ q(6133),
+ q(0),
+ ],
+ q(sog) => [
+ q(0397),
+ q(0),
+ ],
+ q(soh) => [
+ q(6134),
+ q(0),
+ ],
+ q(soi) => [
+ q(6135),
+ q(0),
+ ],
+ q(soj) => [
+ q(6136),
+ q(0),
+ ],
+ q(sok) => [
+ q(6137),
+ q(0),
+ ],
+ q(sol) => [
+ q(6138),
+ q(0),
+ ],
+ q(som) => [
+ q(0398),
+ q(0),
+ ],
+ q(son) => [
+ q(0399),
+ q(0),
+ ],
+ q(soo) => [
+ q(6139),
+ q(0),
+ ],
+ q(sop) => [
+ q(6140),
+ q(0),
+ ],
+ q(soq) => [
+ q(6141),
+ q(0),
+ ],
+ q(sor) => [
+ q(6142),
+ q(0),
+ ],
+ q(sos) => [
+ q(6143),
+ q(0),
+ ],
+ q(sot) => [
+ q(0400),
+ q(0),
+ ],
+ q(sou) => [
+ q(6144),
+ q(0),
+ ],
+ q(sov) => [
+ q(6145),
+ q(0),
+ ],
+ q(sow) => [
+ q(6146),
+ q(0),
+ ],
+ q(sox) => [
+ q(6147),
+ q(0),
+ ],
+ q(soy) => [
+ q(6148),
+ q(0),
+ ],
+ q(soz) => [
+ q(6149),
+ q(0),
+ ],
+ q(spa) => [
+ q(0401),
+ q(0),
+ ],
+ q(spb) => [
+ q(6150),
+ q(0),
+ ],
+ q(spc) => [
+ q(6151),
+ q(0),
+ ],
+ q(spd) => [
+ q(6152),
+ q(0),
+ ],
+ q(spe) => [
+ q(6153),
+ q(0),
+ ],
+ q(spg) => [
+ q(6154),
+ q(0),
+ ],
+ q(spi) => [
+ q(6155),
+ q(0),
+ ],
+ q(spk) => [
+ q(6156),
+ q(0),
+ ],
+ q(spl) => [
+ q(6157),
+ q(0),
+ ],
+ q(spm) => [
+ q(6158),
+ q(0),
+ ],
+ q(spo) => [
+ q(6159),
+ q(0),
+ ],
+ q(spp) => [
+ q(6160),
+ q(0),
+ ],
+ q(spq) => [
+ q(6161),
+ q(0),
+ ],
+ q(spr) => [
+ q(6162),
+ q(0),
+ ],
+ q(sps) => [
+ q(6163),
+ q(0),
+ ],
+ q(spt) => [
+ q(6164),
+ q(0),
+ ],
+ q(spu) => [
+ q(6165),
+ q(0),
+ ],
+ q(spv) => [
+ q(6166),
+ q(0),
+ ],
+ q(spx) => [
+ q(6167),
+ q(0),
+ ],
+ q(spy) => [
+ q(6168),
+ q(0),
+ ],
+ q(sqa) => [
+ q(6169),
+ q(0),
+ ],
+ q(sqh) => [
+ q(6170),
+ q(0),
+ ],
+ q(sqj) => [
+ q(0525),
+ q(0),
+ ],
+ q(sqk) => [
+ q(6171),
+ q(0),
+ ],
+ q(sqm) => [
+ q(6172),
+ q(0),
+ ],
+ q(sqn) => [
+ q(6173),
+ q(0),
+ ],
+ q(sqo) => [
+ q(6174),
+ q(0),
+ ],
+ q(sqq) => [
+ q(6175),
+ q(0),
+ ],
+ q(sqr) => [
+ q(6176),
+ q(0),
+ ],
+ q(sqs) => [
+ q(6177),
+ q(0),
+ ],
+ q(sqt) => [
+ q(6178),
+ q(0),
+ ],
+ q(squ) => [
+ q(6179),
+ q(0),
+ ],
+ q(sra) => [
+ q(6180),
+ q(0),
+ ],
+ q(srb) => [
+ q(6181),
+ q(0),
+ ],
+ q(src) => [
+ q(6182),
+ q(0),
+ ],
+ q(srd) => [
+ q(0402),
+ q(0),
+ ],
+ q(sre) => [
+ q(6183),
+ q(0),
+ ],
+ q(srf) => [
+ q(6184),
+ q(0),
+ ],
+ q(srg) => [
+ q(6185),
+ q(0),
+ ],
+ q(srh) => [
+ q(6186),
+ q(0),
+ ],
+ q(sri) => [
+ q(6187),
+ q(0),
+ ],
+ q(srk) => [
+ q(6188),
+ q(0),
+ ],
+ q(srl) => [
+ q(6189),
+ q(0),
+ ],
+ q(srm) => [
+ q(6190),
+ q(0),
+ ],
+ q(srn) => [
+ q(0403),
+ q(0),
+ ],
+ q(sro) => [
+ q(6191),
+ q(0),
+ ],
+ q(srp) => [
+ q(0404),
+ q(0),
+ ],
+ q(srq) => [
+ q(6192),
+ q(0),
+ ],
+ q(srr) => [
+ q(0405),
+ q(0),
+ ],
+ q(srs) => [
+ q(6193),
+ q(0),
+ ],
+ q(srt) => [
+ q(6194),
+ q(0),
+ ],
+ q(sru) => [
+ q(6195),
+ q(0),
+ ],
+ q(srv) => [
+ q(6196),
+ q(0),
+ ],
+ q(srw) => [
+ q(6197),
+ q(0),
+ ],
+ q(srx) => [
+ q(6198),
+ q(0),
+ ],
+ q(sry) => [
+ q(6199),
+ q(0),
+ ],
+ q(srz) => [
+ q(6200),
+ q(0),
+ ],
+ q(ssa) => [
+ q(0406),
+ q(0),
+ ],
+ q(ssb) => [
+ q(6201),
+ q(0),
+ ],
+ q(ssc) => [
+ q(6202),
+ q(0),
+ ],
+ q(ssd) => [
+ q(6203),
+ q(0),
+ ],
+ q(sse) => [
+ q(6204),
+ q(0),
+ ],
+ q(ssf) => [
+ q(6205),
+ q(0),
+ ],
+ q(ssg) => [
+ q(6206),
+ q(0),
+ ],
+ q(ssh) => [
+ q(6207),
+ q(0),
+ ],
+ q(ssi) => [
+ q(6208),
+ q(0),
+ ],
+ q(ssj) => [
+ q(6209),
+ q(0),
+ ],
+ q(ssk) => [
+ q(6210),
+ q(0),
+ ],
+ q(ssl) => [
+ q(6211),
+ q(0),
+ ],
+ q(ssm) => [
+ q(6212),
+ q(0),
+ ],
+ q(ssn) => [
+ q(6213),
+ q(0),
+ ],
+ q(sso) => [
+ q(6214),
+ q(0),
+ ],
+ q(ssp) => [
+ q(6215),
+ q(0),
+ ],
+ q(ssq) => [
+ q(6216),
+ q(0),
+ ],
+ q(ssr) => [
+ q(6217),
+ q(0),
+ ],
+ q(sss) => [
+ q(6218),
+ q(0),
+ ],
+ q(sst) => [
+ q(6219),
+ q(0),
+ ],
+ q(ssu) => [
+ q(6220),
+ q(0),
+ ],
+ q(ssv) => [
+ q(6221),
+ q(0),
+ ],
+ q(ssw) => [
+ q(0407),
+ q(0),
+ ],
+ q(ssx) => [
+ q(6222),
+ q(0),
+ ],
+ q(ssy) => [
+ q(6223),
+ q(0),
+ ],
+ q(ssz) => [
+ q(6224),
+ q(0),
+ ],
+ q(sta) => [
+ q(6225),
+ q(0),
+ ],
+ q(stb) => [
+ q(6226),
+ q(0),
+ ],
+ q(std) => [
+ q(6227),
+ q(0),
+ ],
+ q(ste) => [
+ q(6228),
+ q(0),
+ ],
+ q(stf) => [
+ q(6229),
+ q(0),
+ ],
+ q(stg) => [
+ q(6230),
+ q(0),
+ ],
+ q(sth) => [
+ q(6231),
+ q(0),
+ ],
+ q(sti) => [
+ q(6232),
+ q(0),
+ ],
+ q(stj) => [
+ q(6233),
+ q(0),
+ ],
+ q(stk) => [
+ q(6234),
+ q(0),
+ ],
+ q(stl) => [
+ q(6235),
+ q(0),
+ ],
+ q(stm) => [
+ q(6236),
+ q(0),
+ ],
+ q(stn) => [
+ q(6237),
+ q(0),
+ ],
+ q(sto) => [
+ q(6238),
+ q(0),
+ ],
+ q(stp) => [
+ q(6239),
+ q(0),
+ ],
+ q(stq) => [
+ q(6240),
+ q(0),
+ ],
+ q(str) => [
+ q(6241),
+ q(0),
+ ],
+ q(sts) => [
+ q(6242),
+ q(0),
+ ],
+ q(stt) => [
+ q(6243),
+ q(0),
+ ],
+ q(stu) => [
+ q(6244),
+ q(0),
+ ],
+ q(stv) => [
+ q(6245),
+ q(0),
+ ],
+ q(stw) => [
+ q(6246),
+ q(0),
+ ],
+ q(sua) => [
+ q(6247),
+ q(0),
+ ],
+ q(sub) => [
+ q(6248),
+ q(0),
+ ],
+ q(suc) => [
+ q(6249),
+ q(0),
+ ],
+ q(sue) => [
+ q(6250),
+ q(0),
+ ],
+ q(sug) => [
+ q(6251),
+ q(0),
+ ],
+ q(sui) => [
+ q(6252),
+ q(0),
+ ],
+ q(suj) => [
+ q(6253),
+ q(0),
+ ],
+ q(suk) => [
+ q(0408),
+ q(0),
+ ],
+ q(sun) => [
+ q(0409),
+ q(0),
+ ],
+ q(suq) => [
+ q(6254),
+ q(0),
+ ],
+ q(sur) => [
+ q(6255),
+ q(0),
+ ],
+ q(sus) => [
+ q(0410),
+ q(0),
+ ],
+ q(sut) => [
+ q(6256),
+ q(0),
+ ],
+ q(suv) => [
+ q(6257),
+ q(0),
+ ],
+ q(suw) => [
+ q(6258),
+ q(0),
+ ],
+ q(sux) => [
+ q(0411),
+ q(0),
+ ],
+ q(suy) => [
+ q(6259),
+ q(0),
+ ],
+ q(suz) => [
+ q(6260),
+ q(0),
+ ],
+ q(sva) => [
+ q(6261),
+ q(0),
+ ],
+ q(svb) => [
+ q(6262),
+ q(0),
+ ],
+ q(svc) => [
+ q(6263),
+ q(0),
+ ],
+ q(sve) => [
+ q(6264),
+ q(0),
+ ],
+ q(svk) => [
+ q(6265),
+ q(0),
+ ],
+ q(svr) => [
+ q(6266),
+ q(0),
+ ],
+ q(svs) => [
+ q(6267),
+ q(0),
+ ],
+ q(svx) => [
+ q(6268),
+ q(0),
+ ],
+ q(swa) => [
+ q(0412),
+ q(0),
+ ],
+ q(swb) => [
+ q(6269),
+ q(0),
+ ],
+ q(swc) => [
+ q(6270),
+ q(0),
+ ],
+ q(swe) => [
+ q(0413),
+ q(0),
+ ],
+ q(swf) => [
+ q(6271),
+ q(0),
+ ],
+ q(swg) => [
+ q(6272),
+ q(0),
+ ],
+ q(swh) => [
+ q(6273),
+ q(0),
+ ],
+ q(swi) => [
+ q(6274),
+ q(0),
+ ],
+ q(swj) => [
+ q(6275),
+ q(0),
+ ],
+ q(swk) => [
+ q(6276),
+ q(0),
+ ],
+ q(swl) => [
+ q(6277),
+ q(0),
+ ],
+ q(swm) => [
+ q(6278),
+ q(0),
+ ],
+ q(swn) => [
+ q(6279),
+ q(0),
+ ],
+ q(swo) => [
+ q(6280),
+ q(0),
+ ],
+ q(swp) => [
+ q(6281),
+ q(0),
+ ],
+ q(swq) => [
+ q(6282),
+ q(0),
+ ],
+ q(swr) => [
+ q(6283),
+ q(0),
+ ],
+ q(sws) => [
+ q(6284),
+ q(0),
+ ],
+ q(swt) => [
+ q(6285),
+ q(0),
+ ],
+ q(swu) => [
+ q(6286),
+ q(0),
+ ],
+ q(swv) => [
+ q(6287),
+ q(0),
+ ],
+ q(sww) => [
+ q(6288),
+ q(0),
+ ],
+ q(swx) => [
+ q(6289),
+ q(0),
+ ],
+ q(swy) => [
+ q(6290),
+ q(0),
+ ],
+ q(sxb) => [
+ q(6291),
+ q(0),
+ ],
+ q(sxc) => [
+ q(6292),
+ q(0),
+ ],
+ q(sxe) => [
+ q(6293),
+ q(0),
+ ],
+ q(sxg) => [
+ q(6294),
+ q(0),
+ ],
+ q(sxk) => [
+ q(6295),
+ q(0),
+ ],
+ q(sxl) => [
+ q(6296),
+ q(0),
+ ],
+ q(sxm) => [
+ q(6297),
+ q(0),
+ ],
+ q(sxn) => [
+ q(6298),
+ q(0),
+ ],
+ q(sxo) => [
+ q(6299),
+ q(0),
+ ],
+ q(sxr) => [
+ q(6300),
+ q(0),
+ ],
+ q(sxs) => [
+ q(6301),
+ q(0),
+ ],
+ q(sxu) => [
+ q(6302),
+ q(0),
+ ],
+ q(sxw) => [
+ q(6303),
+ q(0),
+ ],
+ q(sya) => [
+ q(6304),
+ q(0),
+ ],
+ q(syb) => [
+ q(6305),
+ q(0),
+ ],
+ q(syc) => [
+ q(0414),
+ q(0),
+ ],
+ q(syd) => [
+ q(0526),
+ q(0),
+ ],
+ q(syi) => [
+ q(6306),
+ q(0),
+ ],
+ q(syk) => [
+ q(6307),
+ q(0),
+ ],
+ q(syl) => [
+ q(6308),
+ q(0),
+ ],
+ q(sym) => [
+ q(6309),
+ q(0),
+ ],
+ q(syn) => [
+ q(6310),
+ q(0),
+ ],
+ q(syo) => [
+ q(6311),
+ q(0),
+ ],
+ q(syr) => [
+ q(0415),
+ q(0),
+ ],
+ q(sys) => [
+ q(6312),
+ q(0),
+ ],
+ q(syw) => [
+ q(6313),
+ q(0),
+ ],
+ q(syy) => [
+ q(6314),
+ q(0),
+ ],
+ q(sza) => [
+ q(6315),
+ q(0),
+ ],
+ q(szb) => [
+ q(6316),
+ q(0),
+ ],
+ q(szc) => [
+ q(6317),
+ q(0),
+ ],
+ q(szd) => [
+ q(6318),
+ q(0),
+ ],
+ q(sze) => [
+ q(6319),
+ q(0),
+ ],
+ q(szg) => [
+ q(6320),
+ q(0),
+ ],
+ q(szl) => [
+ q(6321),
+ q(0),
+ ],
+ q(szn) => [
+ q(6322),
+ q(0),
+ ],
+ q(szp) => [
+ q(6323),
+ q(0),
+ ],
+ q(szv) => [
+ q(6324),
+ q(0),
+ ],
+ q(szw) => [
+ q(6325),
+ q(0),
+ ],
+ q(taa) => [
+ q(6326),
+ q(0),
+ ],
+ q(tab) => [
+ q(6327),
+ q(0),
+ ],
+ q(tac) => [
+ q(6328),
+ q(0),
+ ],
+ q(tad) => [
+ q(6329),
+ q(0),
+ ],
+ q(tae) => [
+ q(6330),
+ q(0),
+ ],
+ q(taf) => [
+ q(6331),
+ q(0),
+ ],
+ q(tag) => [
+ q(6332),
+ q(0),
+ ],
+ q(tah) => [
+ q(0416),
+ q(0),
+ ],
+ q(tai) => [
+ q(0417),
+ q(0),
+ ],
+ q(taj) => [
+ q(6333),
+ q(0),
+ ],
+ q(tak) => [
+ q(6334),
+ q(0),
+ ],
+ q(tal) => [
+ q(6335),
+ q(0),
+ ],
+ q(tam) => [
+ q(0418),
+ q(0),
+ ],
+ q(tan) => [
+ q(6336),
+ q(0),
+ ],
+ q(tao) => [
+ q(6337),
+ q(0),
+ ],
+ q(tap) => [
+ q(6338),
+ q(0),
+ ],
+ q(taq) => [
+ q(6339),
+ q(0),
+ ],
+ q(tar) => [
+ q(6340),
+ q(0),
+ ],
+ q(tas) => [
+ q(6341),
+ q(0),
+ ],
+ q(tat) => [
+ q(0419),
+ q(0),
+ ],
+ q(tau) => [
+ q(6342),
+ q(0),
+ ],
+ q(tav) => [
+ q(6343),
+ q(0),
+ ],
+ q(taw) => [
+ q(6344),
+ q(0),
+ ],
+ q(tax) => [
+ q(6345),
+ q(0),
+ ],
+ q(tay) => [
+ q(6346),
+ q(0),
+ ],
+ q(taz) => [
+ q(6347),
+ q(0),
+ ],
+ q(tba) => [
+ q(6348),
+ q(0),
+ ],
+ q(tbb) => [
+ q(6349),
+ q(0),
+ ],
+ q(tbc) => [
+ q(6350),
+ q(0),
+ ],
+ q(tbd) => [
+ q(6351),
+ q(0),
+ ],
+ q(tbe) => [
+ q(6352),
+ q(0),
+ ],
+ q(tbf) => [
+ q(6353),
+ q(0),
+ ],
+ q(tbg) => [
+ q(6354),
+ q(0),
+ ],
+ q(tbh) => [
+ q(6355),
+ q(0),
+ ],
+ q(tbi) => [
+ q(6356),
+ q(0),
+ ],
+ q(tbj) => [
+ q(6357),
+ q(0),
+ ],
+ q(tbk) => [
+ q(6358),
+ q(0),
+ ],
+ q(tbl) => [
+ q(6359),
+ q(0),
+ ],
+ q(tbm) => [
+ q(6360),
+ q(0),
+ ],
+ q(tbn) => [
+ q(6361),
+ q(0),
+ ],
+ q(tbo) => [
+ q(6362),
+ q(0),
+ ],
+ q(tbp) => [
+ q(6363),
+ q(0),
+ ],
+ q(tbq) => [
+ q(0527),
+ q(0),
+ ],
+ q(tbr) => [
+ q(6364),
+ q(0),
+ ],
+ q(tbs) => [
+ q(6365),
+ q(0),
+ ],
+ q(tbt) => [
+ q(6366),
+ q(0),
+ ],
+ q(tbu) => [
+ q(6367),
+ q(0),
+ ],
+ q(tbv) => [
+ q(6368),
+ q(0),
+ ],
+ q(tbw) => [
+ q(6369),
+ q(0),
+ ],
+ q(tbx) => [
+ q(6370),
+ q(0),
+ ],
+ q(tby) => [
+ q(6371),
+ q(0),
+ ],
+ q(tbz) => [
+ q(6372),
+ q(0),
+ ],
+ q(tca) => [
+ q(6373),
+ q(0),
+ ],
+ q(tcb) => [
+ q(6374),
+ q(0),
+ ],
+ q(tcc) => [
+ q(6375),
+ q(0),
+ ],
+ q(tcd) => [
+ q(6376),
+ q(0),
+ ],
+ q(tce) => [
+ q(6377),
+ q(0),
+ ],
+ q(tcf) => [
+ q(6378),
+ q(0),
+ ],
+ q(tcg) => [
+ q(6379),
+ q(0),
+ ],
+ q(tch) => [
+ q(6380),
+ q(0),
+ ],
+ q(tci) => [
+ q(6381),
+ q(0),
+ ],
+ q(tck) => [
+ q(6382),
+ q(0),
+ ],
+ q(tcl) => [
+ q(6383),
+ q(0),
+ ],
+ q(tcm) => [
+ q(6384),
+ q(0),
+ ],
+ q(tcn) => [
+ q(6385),
+ q(0),
+ ],
+ q(tco) => [
+ q(6386),
+ q(0),
+ ],
+ q(tcp) => [
+ q(6387),
+ q(0),
+ ],
+ q(tcq) => [
+ q(6388),
+ q(0),
+ ],
+ q(tcs) => [
+ q(6389),
+ q(0),
+ ],
+ q(tct) => [
+ q(6390),
+ q(0),
+ ],
+ q(tcu) => [
+ q(6391),
+ q(0),
+ ],
+ q(tcw) => [
+ q(6392),
+ q(0),
+ ],
+ q(tcx) => [
+ q(6393),
+ q(0),
+ ],
+ q(tcy) => [
+ q(6394),
+ q(0),
+ ],
+ q(tcz) => [
+ q(6395),
+ q(0),
+ ],
+ q(tda) => [
+ q(6396),
+ q(0),
+ ],
+ q(tdb) => [
+ q(6397),
+ q(0),
+ ],
+ q(tdc) => [
+ q(6398),
+ q(0),
+ ],
+ q(tdd) => [
+ q(6399),
+ q(0),
+ ],
+ q(tde) => [
+ q(6400),
+ q(0),
+ ],
+ q(tdf) => [
+ q(6401),
+ q(0),
+ ],
+ q(tdg) => [
+ q(6402),
+ q(0),
+ ],
+ q(tdh) => [
+ q(6403),
+ q(0),
+ ],
+ q(tdi) => [
+ q(6404),
+ q(0),
+ ],
+ q(tdj) => [
+ q(6405),
+ q(0),
+ ],
+ q(tdk) => [
+ q(6406),
+ q(0),
+ ],
+ q(tdl) => [
+ q(6407),
+ q(0),
+ ],
+ q(tdn) => [
+ q(6408),
+ q(0),
+ ],
+ q(tdo) => [
+ q(6409),
+ q(0),
+ ],
+ q(tdq) => [
+ q(6410),
+ q(0),
+ ],
+ q(tdr) => [
+ q(6411),
+ q(0),
+ ],
+ q(tds) => [
+ q(6412),
+ q(0),
+ ],
+ q(tdt) => [
+ q(6413),
+ q(0),
+ ],
+ q(tdu) => [
+ q(6414),
+ q(0),
+ ],
+ q(tdv) => [
+ q(6415),
+ q(0),
+ ],
+ q(tdx) => [
+ q(6416),
+ q(0),
+ ],
+ q(tdy) => [
+ q(6417),
+ q(0),
+ ],
+ q(tea) => [
+ q(6418),
+ q(0),
+ ],
+ q(teb) => [
+ q(6419),
+ q(0),
+ ],
+ q(tec) => [
+ q(6420),
+ q(0),
+ ],
+ q(ted) => [
+ q(6421),
+ q(0),
+ ],
+ q(tee) => [
+ q(6422),
+ q(0),
+ ],
+ q(tef) => [
+ q(6423),
+ q(0),
+ ],
+ q(teg) => [
+ q(6424),
+ q(0),
+ ],
+ q(teh) => [
+ q(6425),
+ q(0),
+ ],
+ q(tei) => [
+ q(6426),
+ q(0),
+ ],
+ q(tek) => [
+ q(6427),
+ q(0),
+ ],
+ q(tel) => [
+ q(0420),
+ q(0),
+ ],
+ q(tem) => [
+ q(0421),
+ q(0),
+ ],
+ q(ten) => [
+ q(6428),
+ q(0),
+ ],
+ q(teo) => [
+ q(6429),
+ q(0),
+ ],
+ q(tep) => [
+ q(6430),
+ q(0),
+ ],
+ q(teq) => [
+ q(6431),
+ q(0),
+ ],
+ q(ter) => [
+ q(0422),
+ q(0),
+ ],
+ q(tes) => [
+ q(6432),
+ q(0),
+ ],
+ q(tet) => [
+ q(0423),
+ q(0),
+ ],
+ q(teu) => [
+ q(6433),
+ q(0),
+ ],
+ q(tev) => [
+ q(6434),
+ q(0),
+ ],
+ q(tew) => [
+ q(6435),
+ q(0),
+ ],
+ q(tex) => [
+ q(6436),
+ q(0),
+ ],
+ q(tey) => [
+ q(6437),
+ q(0),
+ ],
+ q(tfi) => [
+ q(6438),
+ q(0),
+ ],
+ q(tfn) => [
+ q(6439),
+ q(0),
+ ],
+ q(tfo) => [
+ q(6440),
+ q(0),
+ ],
+ q(tfr) => [
+ q(6441),
+ q(0),
+ ],
+ q(tft) => [
+ q(6442),
+ q(0),
+ ],
+ q(tga) => [
+ q(6443),
+ q(0),
+ ],
+ q(tgb) => [
+ q(6444),
+ q(0),
+ ],
+ q(tgc) => [
+ q(6445),
+ q(0),
+ ],
+ q(tgd) => [
+ q(6446),
+ q(0),
+ ],
+ q(tge) => [
+ q(6447),
+ q(0),
+ ],
+ q(tgf) => [
+ q(6448),
+ q(0),
+ ],
+ q(tgg) => [
+ q(6449),
+ q(0),
+ ],
+ q(tgh) => [
+ q(6450),
+ q(0),
+ ],
+ q(tgi) => [
+ q(6451),
+ q(0),
+ ],
+ q(tgj) => [
+ q(6452),
+ q(0),
+ ],
+ q(tgk) => [
+ q(0424),
+ q(0),
+ ],
+ q(tgl) => [
+ q(0425),
+ q(0),
+ ],
+ q(tgn) => [
+ q(6453),
+ q(0),
+ ],
+ q(tgo) => [
+ q(6454),
+ q(0),
+ ],
+ q(tgp) => [
+ q(6455),
+ q(0),
+ ],
+ q(tgq) => [
+ q(6456),
+ q(0),
+ ],
+ q(tgr) => [
+ q(6457),
+ q(0),
+ ],
+ q(tgs) => [
+ q(6458),
+ q(0),
+ ],
+ q(tgt) => [
+ q(6459),
+ q(0),
+ ],
+ q(tgu) => [
+ q(6460),
+ q(0),
+ ],
+ q(tgv) => [
+ q(6461),
+ q(0),
+ ],
+ q(tgw) => [
+ q(6462),
+ q(0),
+ ],
+ q(tgx) => [
+ q(6463),
+ q(0),
+ ],
+ q(tgy) => [
+ q(6464),
+ q(0),
+ ],
+ q(tgz) => [
+ q(6465),
+ q(0),
+ ],
+ q(tha) => [
+ q(0426),
+ q(0),
+ ],
+ q(thc) => [
+ q(6466),
+ q(0),
+ ],
+ q(thd) => [
+ q(6467),
+ q(0),
+ ],
+ q(the) => [
+ q(6468),
+ q(0),
+ ],
+ q(thf) => [
+ q(6469),
+ q(0),
+ ],
+ q(thh) => [
+ q(6470),
+ q(0),
+ ],
+ q(thi) => [
+ q(6471),
+ q(0),
+ ],
+ q(thk) => [
+ q(6472),
+ q(0),
+ ],
+ q(thl) => [
+ q(6473),
+ q(0),
+ ],
+ q(thm) => [
+ q(6474),
+ q(0),
+ ],
+ q(thn) => [
+ q(6475),
+ q(0),
+ ],
+ q(thp) => [
+ q(6476),
+ q(0),
+ ],
+ q(thq) => [
+ q(6477),
+ q(0),
+ ],
+ q(thr) => [
+ q(6478),
+ q(0),
+ ],
+ q(ths) => [
+ q(6479),
+ q(0),
+ ],
+ q(tht) => [
+ q(6480),
+ q(0),
+ ],
+ q(thu) => [
+ q(6481),
+ q(0),
+ ],
+ q(thv) => [
+ q(6482),
+ q(0),
+ ],
+ q(thw) => [
+ q(6483),
+ q(0),
+ ],
+ q(thx) => [
+ q(6484),
+ q(0),
+ ],
+ q(thy) => [
+ q(6485),
+ q(0),
+ ],
+ q(thz) => [
+ q(6486),
+ q(0),
+ ],
+ q(tia) => [
+ q(6487),
+ q(0),
+ ],
+ q(tib) => [
+ q(0427),
+ q(0),
+ ],
+ q(tic) => [
+ q(6488),
+ q(0),
+ ],
+ q(tid) => [
+ q(6489),
+ q(0),
+ ],
+ q(tif) => [
+ q(6490),
+ q(0),
+ ],
+ q(tig) => [
+ q(0428),
+ q(0),
+ ],
+ q(tih) => [
+ q(6491),
+ q(0),
+ ],
+ q(tii) => [
+ q(6492),
+ q(0),
+ ],
+ q(tij) => [
+ q(6493),
+ q(0),
+ ],
+ q(tik) => [
+ q(6494),
+ q(0),
+ ],
+ q(til) => [
+ q(6495),
+ q(0),
+ ],
+ q(tim) => [
+ q(6496),
+ q(0),
+ ],
+ q(tin) => [
+ q(6497),
+ q(0),
+ ],
+ q(tio) => [
+ q(6498),
+ q(0),
+ ],
+ q(tip) => [
+ q(6499),
+ q(0),
+ ],
+ q(tiq) => [
+ q(6500),
+ q(0),
+ ],
+ q(tir) => [
+ q(0429),
+ q(0),
+ ],
+ q(tis) => [
+ q(6501),
+ q(0),
+ ],
+ q(tit) => [
+ q(6502),
+ q(0),
+ ],
+ q(tiu) => [
+ q(6503),
+ q(0),
+ ],
+ q(tiv) => [
+ q(0430),
+ q(0),
+ ],
+ q(tiw) => [
+ q(6504),
+ q(0),
+ ],
+ q(tix) => [
+ q(6505),
+ q(0),
+ ],
+ q(tiy) => [
+ q(6506),
+ q(0),
+ ],
+ q(tiz) => [
+ q(6507),
+ q(0),
+ ],
+ q(tja) => [
+ q(6508),
+ q(0),
+ ],
+ q(tjg) => [
+ q(6509),
+ q(0),
+ ],
+ q(tji) => [
+ q(6510),
+ q(0),
+ ],
+ q(tjl) => [
+ q(6511),
+ q(0),
+ ],
+ q(tjm) => [
+ q(6512),
+ q(0),
+ ],
+ q(tjn) => [
+ q(6513),
+ q(0),
+ ],
+ q(tjo) => [
+ q(6514),
+ q(0),
+ ],
+ q(tjs) => [
+ q(6515),
+ q(0),
+ ],
+ q(tju) => [
+ q(6516),
+ q(0),
+ ],
+ q(tka) => [
+ q(6517),
+ q(0),
+ ],
+ q(tkb) => [
+ q(6518),
+ q(0),
+ ],
+ q(tkd) => [
+ q(6519),
+ q(0),
+ ],
+ q(tke) => [
+ q(6520),
+ q(0),
+ ],
+ q(tkf) => [
+ q(6521),
+ q(0),
+ ],
+ q(tkg) => [
+ q(6522),
+ q(0),
+ ],
+ q(tkl) => [
+ q(0431),
+ q(0),
+ ],
+ q(tkm) => [
+ q(6523),
+ q(0),
+ ],
+ q(tkn) => [
+ q(6524),
+ q(0),
+ ],
+ q(tkp) => [
+ q(6525),
+ q(0),
+ ],
+ q(tkq) => [
+ q(6526),
+ q(0),
+ ],
+ q(tkr) => [
+ q(6527),
+ q(0),
+ ],
+ q(tks) => [
+ q(6528),
+ q(0),
+ ],
+ q(tkt) => [
+ q(6529),
+ q(0),
+ ],
+ q(tku) => [
+ q(6530),
+ q(0),
+ ],
+ q(tkw) => [
+ q(6531),
+ q(0),
+ ],
+ q(tkx) => [
+ q(6532),
+ q(0),
+ ],
+ q(tkz) => [
+ q(6533),
+ q(0),
+ ],
+ q(tla) => [
+ q(6534),
+ q(0),
+ ],
+ q(tlb) => [
+ q(6535),
+ q(0),
+ ],
+ q(tlc) => [
+ q(6536),
+ q(0),
+ ],
+ q(tld) => [
+ q(6537),
+ q(0),
+ ],
+ q(tlf) => [
+ q(6538),
+ q(0),
+ ],
+ q(tlg) => [
+ q(6539),
+ q(0),
+ ],
+ q(tlh) => [
+ q(0432),
+ q(0),
+ ],
+ q(tli) => [
+ q(0433),
+ q(0),
+ ],
+ q(tlj) => [
+ q(6540),
+ q(0),
+ ],
+ q(tlk) => [
+ q(6541),
+ q(0),
+ ],
+ q(tll) => [
+ q(6542),
+ q(0),
+ ],
+ q(tlm) => [
+ q(6543),
+ q(0),
+ ],
+ q(tln) => [
+ q(6544),
+ q(0),
+ ],
+ q(tlo) => [
+ q(6545),
+ q(0),
+ ],
+ q(tlp) => [
+ q(6546),
+ q(0),
+ ],
+ q(tlq) => [
+ q(6547),
+ q(0),
+ ],
+ q(tlr) => [
+ q(6548),
+ q(0),
+ ],
+ q(tls) => [
+ q(6549),
+ q(0),
+ ],
+ q(tlt) => [
+ q(6550),
+ q(0),
+ ],
+ q(tlu) => [
+ q(6551),
+ q(0),
+ ],
+ q(tlv) => [
+ q(6552),
+ q(0),
+ ],
+ q(tlx) => [
+ q(6553),
+ q(0),
+ ],
+ q(tly) => [
+ q(6554),
+ q(0),
+ ],
+ q(tma) => [
+ q(6555),
+ q(0),
+ ],
+ q(tmb) => [
+ q(6556),
+ q(0),
+ ],
+ q(tmc) => [
+ q(6557),
+ q(0),
+ ],
+ q(tmd) => [
+ q(6558),
+ q(0),
+ ],
+ q(tme) => [
+ q(6559),
+ q(0),
+ ],
+ q(tmf) => [
+ q(6560),
+ q(0),
+ ],
+ q(tmg) => [
+ q(6561),
+ q(0),
+ ],
+ q(tmh) => [
+ q(0434),
+ q(0),
+ ],
+ q(tmi) => [
+ q(6562),
+ q(0),
+ ],
+ q(tmj) => [
+ q(6563),
+ q(0),
+ ],
+ q(tmk) => [
+ q(6564),
+ q(0),
+ ],
+ q(tml) => [
+ q(6565),
+ q(0),
+ ],
+ q(tmm) => [
+ q(6566),
+ q(0),
+ ],
+ q(tmn) => [
+ q(6567),
+ q(0),
+ ],
+ q(tmo) => [
+ q(6568),
+ q(0),
+ ],
+ q(tmp) => [
+ q(6569),
+ q(0),
+ ],
+ q(tmq) => [
+ q(6570),
+ q(0),
+ ],
+ q(tmr) => [
+ q(6571),
+ q(0),
+ ],
+ q(tms) => [
+ q(6572),
+ q(0),
+ ],
+ q(tmt) => [
+ q(6573),
+ q(0),
+ ],
+ q(tmu) => [
+ q(6574),
+ q(0),
+ ],
+ q(tmv) => [
+ q(6575),
+ q(0),
+ ],
+ q(tmw) => [
+ q(6576),
+ q(0),
+ ],
+ q(tmy) => [
+ q(6577),
+ q(0),
+ ],
+ q(tmz) => [
+ q(6578),
+ q(0),
+ ],
+ q(tna) => [
+ q(6579),
+ q(0),
+ ],
+ q(tnb) => [
+ q(6580),
+ q(0),
+ ],
+ q(tnc) => [
+ q(6581),
+ q(0),
+ ],
+ q(tnd) => [
+ q(6582),
+ q(0),
+ ],
+ q(tne) => [
+ q(6583),
+ q(0),
+ ],
+ q(tng) => [
+ q(6584),
+ q(0),
+ ],
+ q(tnh) => [
+ q(6585),
+ q(0),
+ ],
+ q(tni) => [
+ q(6586),
+ q(0),
+ ],
+ q(tnk) => [
+ q(6587),
+ q(0),
+ ],
+ q(tnl) => [
+ q(6588),
+ q(0),
+ ],
+ q(tnm) => [
+ q(6589),
+ q(0),
+ ],
+ q(tnn) => [
+ q(6590),
+ q(0),
+ ],
+ q(tno) => [
+ q(6591),
+ q(0),
+ ],
+ q(tnp) => [
+ q(6592),
+ q(0),
+ ],
+ q(tnq) => [
+ q(6593),
+ q(0),
+ ],
+ q(tnr) => [
+ q(6594),
+ q(0),
+ ],
+ q(tns) => [
+ q(6595),
+ q(0),
+ ],
+ q(tnt) => [
+ q(6596),
+ q(0),
+ ],
+ q(tnu) => [
+ q(6597),
+ q(0),
+ ],
+ q(tnv) => [
+ q(6598),
+ q(0),
+ ],
+ q(tnw) => [
+ q(6599),
+ q(0),
+ ],
+ q(tnx) => [
+ q(6600),
+ q(0),
+ ],
+ q(tny) => [
+ q(6601),
+ q(0),
+ ],
+ q(tnz) => [
+ q(6602),
+ q(0),
+ ],
+ q(tob) => [
+ q(6603),
+ q(0),
+ ],
+ q(toc) => [
+ q(6604),
+ q(0),
+ ],
+ q(tod) => [
+ q(6605),
+ q(0),
+ ],
+ q(toe) => [
+ q(6606),
+ q(0),
+ ],
+ q(tof) => [
+ q(6607),
+ q(0),
+ ],
+ q(tog) => [
+ q(0435),
+ q(0),
+ ],
+ q(toh) => [
+ q(6608),
+ q(0),
+ ],
+ q(toi) => [
+ q(6609),
+ q(0),
+ ],
+ q(toj) => [
+ q(6610),
+ q(0),
+ ],
+ q(tol) => [
+ q(6611),
+ q(0),
+ ],
+ q(tom) => [
+ q(6612),
+ q(0),
+ ],
+ q(ton) => [
+ q(0436),
+ q(0),
+ ],
+ q(too) => [
+ q(6613),
+ q(0),
+ ],
+ q(top) => [
+ q(6614),
+ q(0),
+ ],
+ q(toq) => [
+ q(6615),
+ q(0),
+ ],
+ q(tor) => [
+ q(6616),
+ q(0),
+ ],
+ q(tos) => [
+ q(6617),
+ q(0),
+ ],
+ q(tou) => [
+ q(6618),
+ q(0),
+ ],
+ q(tov) => [
+ q(6619),
+ q(0),
+ ],
+ q(tow) => [
+ q(6620),
+ q(0),
+ ],
+ q(tox) => [
+ q(6621),
+ q(0),
+ ],
+ q(toy) => [
+ q(6622),
+ q(0),
+ ],
+ q(toz) => [
+ q(6623),
+ q(0),
+ ],
+ q(tpa) => [
+ q(6624),
+ q(0),
+ ],
+ q(tpc) => [
+ q(6625),
+ q(0),
+ ],
+ q(tpe) => [
+ q(6626),
+ q(0),
+ ],
+ q(tpf) => [
+ q(6627),
+ q(0),
+ ],
+ q(tpg) => [
+ q(6628),
+ q(0),
+ ],
+ q(tpi) => [
+ q(0437),
+ q(0),
+ ],
+ q(tpj) => [
+ q(6629),
+ q(0),
+ ],
+ q(tpk) => [
+ q(6630),
+ q(0),
+ ],
+ q(tpl) => [
+ q(6631),
+ q(0),
+ ],
+ q(tpm) => [
+ q(6632),
+ q(0),
+ ],
+ q(tpn) => [
+ q(6633),
+ q(0),
+ ],
+ q(tpo) => [
+ q(6634),
+ q(0),
+ ],
+ q(tpp) => [
+ q(6635),
+ q(0),
+ ],
+ q(tpq) => [
+ q(6636),
+ q(0),
+ ],
+ q(tpr) => [
+ q(6637),
+ q(0),
+ ],
+ q(tpt) => [
+ q(6638),
+ q(0),
+ ],
+ q(tpu) => [
+ q(6639),
+ q(0),
+ ],
+ q(tpv) => [
+ q(6640),
+ q(0),
+ ],
+ q(tpw) => [
+ q(6641),
+ q(0),
+ ],
+ q(tpx) => [
+ q(6642),
+ q(0),
+ ],
+ q(tpy) => [
+ q(6643),
+ q(0),
+ ],
+ q(tpz) => [
+ q(6644),
+ q(0),
+ ],
+ q(tqb) => [
+ q(6645),
+ q(0),
+ ],
+ q(tql) => [
+ q(6646),
+ q(0),
+ ],
+ q(tqm) => [
+ q(6647),
+ q(0),
+ ],
+ q(tqn) => [
+ q(6648),
+ q(0),
+ ],
+ q(tqo) => [
+ q(6649),
+ q(0),
+ ],
+ q(tqp) => [
+ q(6650),
+ q(0),
+ ],
+ q(tqq) => [
+ q(6651),
+ q(0),
+ ],
+ q(tqr) => [
+ q(6652),
+ q(0),
+ ],
+ q(tqt) => [
+ q(6653),
+ q(0),
+ ],
+ q(tqu) => [
+ q(6654),
+ q(0),
+ ],
+ q(tqw) => [
+ q(6655),
+ q(0),
+ ],
+ q(tra) => [
+ q(6656),
+ q(0),
+ ],
+ q(trb) => [
+ q(6657),
+ q(0),
+ ],
+ q(trc) => [
+ q(6658),
+ q(0),
+ ],
+ q(trd) => [
+ q(6659),
+ q(0),
+ ],
+ q(tre) => [
+ q(6660),
+ q(0),
+ ],
+ q(trf) => [
+ q(6661),
+ q(0),
+ ],
+ q(trg) => [
+ q(6662),
+ q(0),
+ ],
+ q(trh) => [
+ q(6663),
+ q(0),
+ ],
+ q(tri) => [
+ q(6664),
+ q(0),
+ ],
+ q(trj) => [
+ q(6665),
+ q(0),
+ ],
+ q(trk) => [
+ q(0528),
+ q(0),
+ ],
+ q(trl) => [
+ q(6666),
+ q(0),
+ ],
+ q(trm) => [
+ q(6667),
+ q(0),
+ ],
+ q(trn) => [
+ q(6668),
+ q(0),
+ ],
+ q(tro) => [
+ q(6669),
+ q(0),
+ ],
+ q(trp) => [
+ q(6670),
+ q(0),
+ ],
+ q(trq) => [
+ q(6671),
+ q(0),
+ ],
+ q(trr) => [
+ q(6672),
+ q(0),
+ ],
+ q(trs) => [
+ q(6673),
+ q(0),
+ ],
+ q(trt) => [
+ q(6674),
+ q(0),
+ ],
+ q(tru) => [
+ q(6675),
+ q(0),
+ ],
+ q(trv) => [
+ q(6676),
+ q(0),
+ ],
+ q(trw) => [
+ q(6677),
+ q(0),
+ ],
+ q(trx) => [
+ q(6678),
+ q(0),
+ ],
+ q(try) => [
+ q(6679),
+ q(0),
+ ],
+ q(trz) => [
+ q(6680),
+ q(0),
+ ],
+ q(tsa) => [
+ q(6681),
+ q(0),
+ ],
+ q(tsb) => [
+ q(6682),
+ q(0),
+ ],
+ q(tsc) => [
+ q(6683),
+ q(0),
+ ],
+ q(tsd) => [
+ q(6684),
+ q(0),
+ ],
+ q(tse) => [
+ q(6685),
+ q(0),
+ ],
+ q(tsf) => [
+ q(6686),
+ q(0),
+ ],
+ q(tsg) => [
+ q(6687),
+ q(0),
+ ],
+ q(tsh) => [
+ q(6688),
+ q(0),
+ ],
+ q(tsi) => [
+ q(0438),
+ q(0),
+ ],
+ q(tsj) => [
+ q(6689),
+ q(0),
+ ],
+ q(tsk) => [
+ q(6690),
+ q(0),
+ ],
+ q(tsl) => [
+ q(6691),
+ q(0),
+ ],
+ q(tsm) => [
+ q(6692),
+ q(0),
+ ],
+ q(tsn) => [
+ q(0439),
+ q(0),
+ ],
+ q(tso) => [
+ q(0440),
+ q(0),
+ ],
+ q(tsp) => [
+ q(6693),
+ q(0),
+ ],
+ q(tsq) => [
+ q(6694),
+ q(0),
+ ],
+ q(tsr) => [
+ q(6695),
+ q(0),
+ ],
+ q(tss) => [
+ q(6696),
+ q(0),
+ ],
+ q(tst) => [
+ q(6697),
+ q(0),
+ ],
+ q(tsu) => [
+ q(6698),
+ q(0),
+ ],
+ q(tsv) => [
+ q(6699),
+ q(0),
+ ],
+ q(tsw) => [
+ q(6700),
+ q(0),
+ ],
+ q(tsx) => [
+ q(6701),
+ q(0),
+ ],
+ q(tsy) => [
+ q(6702),
+ q(0),
+ ],
+ q(tsz) => [
+ q(6703),
+ q(0),
+ ],
+ q(tta) => [
+ q(6704),
+ q(0),
+ ],
+ q(ttb) => [
+ q(6705),
+ q(0),
+ ],
+ q(ttc) => [
+ q(6706),
+ q(0),
+ ],
+ q(ttd) => [
+ q(6707),
+ q(0),
+ ],
+ q(tte) => [
+ q(6708),
+ q(0),
+ ],
+ q(ttf) => [
+ q(6709),
+ q(0),
+ ],
+ q(ttg) => [
+ q(6710),
+ q(0),
+ ],
+ q(tth) => [
+ q(6711),
+ q(0),
+ ],
+ q(tti) => [
+ q(6712),
+ q(0),
+ ],
+ q(ttj) => [
+ q(6713),
+ q(0),
+ ],
+ q(ttk) => [
+ q(6714),
+ q(0),
+ ],
+ q(ttl) => [
+ q(6715),
+ q(0),
+ ],
+ q(ttm) => [
+ q(6716),
+ q(0),
+ ],
+ q(ttn) => [
+ q(6717),
+ q(0),
+ ],
+ q(tto) => [
+ q(6718),
+ q(0),
+ ],
+ q(ttp) => [
+ q(6719),
+ q(0),
+ ],
+ q(ttq) => [
+ q(6720),
+ q(0),
+ ],
+ q(ttr) => [
+ q(6721),
+ q(0),
+ ],
+ q(tts) => [
+ q(6722),
+ q(0),
+ ],
+ q(ttt) => [
+ q(6723),
+ q(0),
+ ],
+ q(ttu) => [
+ q(6724),
+ q(0),
+ ],
+ q(ttv) => [
+ q(6725),
+ q(0),
+ ],
+ q(ttw) => [
+ q(6726),
+ q(0),
+ ],
+ q(tty) => [
+ q(6727),
+ q(0),
+ ],
+ q(ttz) => [
+ q(6728),
+ q(0),
+ ],
+ q(tua) => [
+ q(6729),
+ q(0),
+ ],
+ q(tub) => [
+ q(6730),
+ q(0),
+ ],
+ q(tuc) => [
+ q(6731),
+ q(0),
+ ],
+ q(tud) => [
+ q(6732),
+ q(0),
+ ],
+ q(tue) => [
+ q(6733),
+ q(0),
+ ],
+ q(tuf) => [
+ q(6734),
+ q(0),
+ ],
+ q(tug) => [
+ q(6735),
+ q(0),
+ ],
+ q(tuh) => [
+ q(6736),
+ q(0),
+ ],
+ q(tui) => [
+ q(6737),
+ q(0),
+ ],
+ q(tuj) => [
+ q(6738),
+ q(0),
+ ],
+ q(tuk) => [
+ q(0441),
+ q(0),
+ ],
+ q(tul) => [
+ q(6739),
+ q(0),
+ ],
+ q(tum) => [
+ q(0442),
+ q(0),
+ ],
+ q(tun) => [
+ q(6740),
+ q(0),
+ ],
+ q(tuo) => [
+ q(6741),
+ q(0),
+ ],
+ q(tup) => [
+ q(0443),
+ q(0),
+ ],
+ q(tuq) => [
+ q(6742),
+ q(0),
+ ],
+ q(tur) => [
+ q(0444),
+ q(0),
+ ],
+ q(tus) => [
+ q(6743),
+ q(0),
+ ],
+ q(tut) => [
+ q(0445),
+ q(0),
+ ],
+ q(tuu) => [
+ q(6744),
+ q(0),
+ ],
+ q(tuv) => [
+ q(6745),
+ q(0),
+ ],
+ q(tuw) => [
+ q(0529),
+ q(0),
+ ],
+ q(tux) => [
+ q(6746),
+ q(0),
+ ],
+ q(tuy) => [
+ q(6747),
+ q(0),
+ ],
+ q(tuz) => [
+ q(6748),
+ q(0),
+ ],
+ q(tva) => [
+ q(6749),
+ q(0),
+ ],
+ q(tvd) => [
+ q(6750),
+ q(0),
+ ],
+ q(tve) => [
+ q(6751),
+ q(0),
+ ],
+ q(tvk) => [
+ q(6752),
+ q(0),
+ ],
+ q(tvl) => [
+ q(0446),
+ q(0),
+ ],
+ q(tvm) => [
+ q(6753),
+ q(0),
+ ],
+ q(tvn) => [
+ q(6754),
+ q(0),
+ ],
+ q(tvo) => [
+ q(6755),
+ q(0),
+ ],
+ q(tvs) => [
+ q(6756),
+ q(0),
+ ],
+ q(tvt) => [
+ q(6757),
+ q(0),
+ ],
+ q(tvu) => [
+ q(6758),
+ q(0),
+ ],
+ q(tvw) => [
+ q(6759),
+ q(0),
+ ],
+ q(tvy) => [
+ q(6760),
+ q(0),
+ ],
+ q(twa) => [
+ q(6761),
+ q(0),
+ ],
+ q(twb) => [
+ q(6762),
+ q(0),
+ ],
+ q(twc) => [
+ q(6763),
+ q(0),
+ ],
+ q(twd) => [
+ q(6764),
+ q(0),
+ ],
+ q(twe) => [
+ q(6765),
+ q(0),
+ ],
+ q(twf) => [
+ q(6766),
+ q(0),
+ ],
+ q(twg) => [
+ q(6767),
+ q(0),
+ ],
+ q(twh) => [
+ q(6768),
+ q(0),
+ ],
+ q(twi) => [
+ q(0447),
+ q(0),
+ ],
+ q(twl) => [
+ q(6769),
+ q(0),
+ ],
+ q(twm) => [
+ q(6770),
+ q(0),
+ ],
+ q(twn) => [
+ q(6771),
+ q(0),
+ ],
+ q(two) => [
+ q(6772),
+ q(0),
+ ],
+ q(twp) => [
+ q(6773),
+ q(0),
+ ],
+ q(twq) => [
+ q(6774),
+ q(0),
+ ],
+ q(twr) => [
+ q(6775),
+ q(0),
+ ],
+ q(twt) => [
+ q(6776),
+ q(0),
+ ],
+ q(twu) => [
+ q(6777),
+ q(0),
+ ],
+ q(tww) => [
+ q(6778),
+ q(0),
+ ],
+ q(twx) => [
+ q(6779),
+ q(0),
+ ],
+ q(twy) => [
+ q(6780),
+ q(0),
+ ],
+ q(txa) => [
+ q(6781),
+ q(0),
+ ],
+ q(txb) => [
+ q(6782),
+ q(0),
+ ],
+ q(txc) => [
+ q(6783),
+ q(0),
+ ],
+ q(txe) => [
+ q(6784),
+ q(0),
+ ],
+ q(txg) => [
+ q(6785),
+ q(0),
+ ],
+ q(txh) => [
+ q(6786),
+ q(0),
+ ],
+ q(txi) => [
+ q(6787),
+ q(0),
+ ],
+ q(txm) => [
+ q(6788),
+ q(0),
+ ],
+ q(txn) => [
+ q(6789),
+ q(0),
+ ],
+ q(txo) => [
+ q(6790),
+ q(0),
+ ],
+ q(txq) => [
+ q(6791),
+ q(0),
+ ],
+ q(txr) => [
+ q(6792),
+ q(0),
+ ],
+ q(txs) => [
+ q(6793),
+ q(0),
+ ],
+ q(txt) => [
+ q(6794),
+ q(0),
+ ],
+ q(txu) => [
+ q(6795),
+ q(0),
+ ],
+ q(txx) => [
+ q(6796),
+ q(0),
+ ],
+ q(txy) => [
+ q(6797),
+ q(0),
+ ],
+ q(tya) => [
+ q(6798),
+ q(0),
+ ],
+ q(tye) => [
+ q(6799),
+ q(0),
+ ],
+ q(tyh) => [
+ q(6800),
+ q(0),
+ ],
+ q(tyi) => [
+ q(6801),
+ q(0),
+ ],
+ q(tyj) => [
+ q(6802),
+ q(0),
+ ],
+ q(tyl) => [
+ q(6803),
+ q(0),
+ ],
+ q(tyn) => [
+ q(6804),
+ q(0),
+ ],
+ q(typ) => [
+ q(6805),
+ q(0),
+ ],
+ q(tyr) => [
+ q(6806),
+ q(0),
+ ],
+ q(tys) => [
+ q(6807),
+ q(0),
+ ],
+ q(tyt) => [
+ q(6808),
+ q(0),
+ ],
+ q(tyu) => [
+ q(6809),
+ q(0),
+ ],
+ q(tyv) => [
+ q(0448),
+ q(0),
+ ],
+ q(tyx) => [
+ q(6810),
+ q(0),
+ ],
+ q(tyz) => [
+ q(6811),
+ q(0),
+ ],
+ q(tza) => [
+ q(6812),
+ q(0),
+ ],
+ q(tzh) => [
+ q(6813),
+ q(0),
+ ],
+ q(tzj) => [
+ q(6814),
+ q(0),
+ ],
+ q(tzm) => [
+ q(6815),
+ q(0),
+ ],
+ q(tzn) => [
+ q(6816),
+ q(0),
+ ],
+ q(tzo) => [
+ q(6817),
+ q(0),
+ ],
+ q(tzx) => [
+ q(6818),
+ q(0),
+ ],
+ q(uam) => [
+ q(6819),
+ q(0),
+ ],
+ q(uan) => [
+ q(6820),
+ q(0),
+ ],
+ q(uar) => [
+ q(6821),
+ q(0),
+ ],
+ q(uba) => [
+ q(6822),
+ q(0),
+ ],
+ q(ubi) => [
+ q(6823),
+ q(0),
+ ],
+ q(ubl) => [
+ q(6824),
+ q(0),
+ ],
+ q(ubr) => [
+ q(6825),
+ q(0),
+ ],
+ q(ubu) => [
+ q(6826),
+ q(0),
+ ],
+ q(uby) => [
+ q(6827),
+ q(0),
+ ],
+ q(uda) => [
+ q(6828),
+ q(0),
+ ],
+ q(ude) => [
+ q(6829),
+ q(0),
+ ],
+ q(udg) => [
+ q(6830),
+ q(0),
+ ],
+ q(udi) => [
+ q(6831),
+ q(0),
+ ],
+ q(udj) => [
+ q(6832),
+ q(0),
+ ],
+ q(udl) => [
+ q(6833),
+ q(0),
+ ],
+ q(udm) => [
+ q(0449),
+ q(0),
+ ],
+ q(udu) => [
+ q(6834),
+ q(0),
+ ],
+ q(ues) => [
+ q(6835),
+ q(0),
+ ],
+ q(ufi) => [
+ q(6836),
+ q(0),
+ ],
+ q(uga) => [
+ q(0450),
+ q(0),
+ ],
+ q(ugb) => [
+ q(6837),
+ q(0),
+ ],
+ q(uge) => [
+ q(6838),
+ q(0),
+ ],
+ q(ugn) => [
+ q(6839),
+ q(0),
+ ],
+ q(ugo) => [
+ q(6840),
+ q(0),
+ ],
+ q(ugy) => [
+ q(6841),
+ q(0),
+ ],
+ q(uha) => [
+ q(6842),
+ q(0),
+ ],
+ q(uhn) => [
+ q(6843),
+ q(0),
+ ],
+ q(uig) => [
+ q(0451),
+ q(0),
+ ],
+ q(uis) => [
+ q(6844),
+ q(0),
+ ],
+ q(uiv) => [
+ q(6845),
+ q(0),
+ ],
+ q(uji) => [
+ q(6846),
+ q(0),
+ ],
+ q(uka) => [
+ q(6847),
+ q(0),
+ ],
+ q(ukg) => [
+ q(6848),
+ q(0),
+ ],
+ q(ukh) => [
+ q(6849),
+ q(0),
+ ],
+ q(ukl) => [
+ q(6850),
+ q(0),
+ ],
+ q(ukp) => [
+ q(6851),
+ q(0),
+ ],
+ q(ukq) => [
+ q(6852),
+ q(0),
+ ],
+ q(ukr) => [
+ q(0452),
+ q(0),
+ ],
+ q(uks) => [
+ q(6853),
+ q(0),
+ ],
+ q(uku) => [
+ q(6854),
+ q(0),
+ ],
+ q(ukw) => [
+ q(6855),
+ q(0),
+ ],
+ q(uky) => [
+ q(6856),
+ q(0),
+ ],
+ q(ula) => [
+ q(6857),
+ q(0),
+ ],
+ q(ulb) => [
+ q(6858),
+ q(0),
+ ],
+ q(ulc) => [
+ q(6859),
+ q(0),
+ ],
+ q(ulf) => [
+ q(6860),
+ q(0),
+ ],
+ q(uli) => [
+ q(6861),
+ q(0),
+ ],
+ q(ulk) => [
+ q(6862),
+ q(0),
+ ],
+ q(ull) => [
+ q(6863),
+ q(0),
+ ],
+ q(ulm) => [
+ q(6864),
+ q(0),
+ ],
+ q(uln) => [
+ q(6865),
+ q(0),
+ ],
+ q(ulu) => [
+ q(6866),
+ q(0),
+ ],
+ q(ulw) => [
+ q(6867),
+ q(0),
+ ],
+ q(uma) => [
+ q(6868),
+ q(0),
+ ],
+ q(umb) => [
+ q(0453),
+ q(0),
+ ],
+ q(umc) => [
+ q(6869),
+ q(0),
+ ],
+ q(umd) => [
+ q(6870),
+ q(0),
+ ],
+ q(umg) => [
+ q(6871),
+ q(0),
+ ],
+ q(umi) => [
+ q(6872),
+ q(0),
+ ],
+ q(umm) => [
+ q(6873),
+ q(0),
+ ],
+ q(umn) => [
+ q(6874),
+ q(0),
+ ],
+ q(umo) => [
+ q(6875),
+ q(0),
+ ],
+ q(ump) => [
+ q(6876),
+ q(0),
+ ],
+ q(umr) => [
+ q(6877),
+ q(0),
+ ],
+ q(ums) => [
+ q(6878),
+ q(0),
+ ],
+ q(umu) => [
+ q(6879),
+ q(0),
+ ],
+ q(una) => [
+ q(6880),
+ q(0),
+ ],
+ q(und) => [
+ q(0454),
+ q(0),
+ ],
+ q(une) => [
+ q(6881),
+ q(0),
+ ],
+ q(ung) => [
+ q(6882),
+ q(0),
+ ],
+ q(unk) => [
+ q(6883),
+ q(0),
+ ],
+ q(unm) => [
+ q(6884),
+ q(0),
+ ],
+ q(unr) => [
+ q(6885),
+ q(0),
+ ],
+ q(unx) => [
+ q(6886),
+ q(0),
+ ],
+ q(unz) => [
+ q(6887),
+ q(0),
+ ],
+ q(uok) => [
+ q(6888),
+ q(0),
+ ],
+ q(upi) => [
+ q(6889),
+ q(0),
+ ],
+ q(upv) => [
+ q(6890),
+ q(0),
+ ],
+ q(ura) => [
+ q(6891),
+ q(0),
+ ],
+ q(urb) => [
+ q(6892),
+ q(0),
+ ],
+ q(urc) => [
+ q(6893),
+ q(0),
+ ],
+ q(urd) => [
+ q(0455),
+ q(0),
+ ],
+ q(ure) => [
+ q(6894),
+ q(0),
+ ],
+ q(urf) => [
+ q(6895),
+ q(0),
+ ],
+ q(urg) => [
+ q(6896),
+ q(0),
+ ],
+ q(urh) => [
+ q(6897),
+ q(0),
+ ],
+ q(uri) => [
+ q(6898),
+ q(0),
+ ],
+ q(urj) => [
+ q(0530),
+ q(0),
+ ],
+ q(urk) => [
+ q(6899),
+ q(0),
+ ],
+ q(url) => [
+ q(6900),
+ q(0),
+ ],
+ q(urm) => [
+ q(6901),
+ q(0),
+ ],
+ q(urn) => [
+ q(6902),
+ q(0),
+ ],
+ q(uro) => [
+ q(6903),
+ q(0),
+ ],
+ q(urp) => [
+ q(6904),
+ q(0),
+ ],
+ q(urr) => [
+ q(6905),
+ q(0),
+ ],
+ q(urt) => [
+ q(6906),
+ q(0),
+ ],
+ q(uru) => [
+ q(6907),
+ q(0),
+ ],
+ q(urv) => [
+ q(6908),
+ q(0),
+ ],
+ q(urw) => [
+ q(6909),
+ q(0),
+ ],
+ q(urx) => [
+ q(6910),
+ q(0),
+ ],
+ q(ury) => [
+ q(6911),
+ q(0),
+ ],
+ q(urz) => [
+ q(6912),
+ q(0),
+ ],
+ q(usa) => [
+ q(6913),
+ q(0),
+ ],
+ q(ush) => [
+ q(6914),
+ q(0),
+ ],
+ q(usi) => [
+ q(6915),
+ q(0),
+ ],
+ q(usk) => [
+ q(6916),
+ q(0),
+ ],
+ q(usp) => [
+ q(6917),
+ q(0),
+ ],
+ q(usu) => [
+ q(6918),
+ q(0),
+ ],
+ q(uta) => [
+ q(6919),
+ q(0),
+ ],
+ q(ute) => [
+ q(6920),
+ q(0),
+ ],
+ q(utp) => [
+ q(6921),
+ q(0),
+ ],
+ q(utr) => [
+ q(6922),
+ q(0),
+ ],
+ q(utu) => [
+ q(6923),
+ q(0),
+ ],
+ q(uum) => [
+ q(6924),
+ q(0),
+ ],
+ q(uun) => [
+ q(6925),
+ q(0),
+ ],
+ q(uur) => [
+ q(6926),
+ q(0),
+ ],
+ q(uuu) => [
+ q(6927),
+ q(0),
+ ],
+ q(uve) => [
+ q(6928),
+ q(0),
+ ],
+ q(uvh) => [
+ q(6929),
+ q(0),
+ ],
+ q(uvl) => [
+ q(6930),
+ q(0),
+ ],
+ q(uwa) => [
+ q(6931),
+ q(0),
+ ],
+ q(uya) => [
+ q(6932),
+ q(0),
+ ],
+ q(uzb) => [
+ q(0456),
+ q(0),
+ ],
+ q(uzn) => [
+ q(6933),
+ q(0),
+ ],
+ q(uzs) => [
+ q(6934),
+ q(0),
+ ],
+ q(vaa) => [
+ q(6935),
+ q(0),
+ ],
+ q(vae) => [
+ q(6936),
+ q(0),
+ ],
+ q(vaf) => [
+ q(6937),
+ q(0),
+ ],
+ q(vag) => [
+ q(6938),
+ q(0),
+ ],
+ q(vah) => [
+ q(6939),
+ q(0),
+ ],
+ q(vai) => [
+ q(0457),
+ q(0),
+ ],
+ q(vaj) => [
+ q(6940),
+ q(0),
+ ],
+ q(val) => [
+ q(6941),
+ q(0),
+ ],
+ q(vam) => [
+ q(6942),
+ q(0),
+ ],
+ q(van) => [
+ q(6943),
+ q(0),
+ ],
+ q(vao) => [
+ q(6944),
+ q(0),
+ ],
+ q(vap) => [
+ q(6945),
+ q(0),
+ ],
+ q(var) => [
+ q(6946),
+ q(0),
+ ],
+ q(vas) => [
+ q(6947),
+ q(0),
+ ],
+ q(vau) => [
+ q(6948),
+ q(0),
+ ],
+ q(vav) => [
+ q(6949),
+ q(0),
+ ],
+ q(vay) => [
+ q(6950),
+ q(0),
+ ],
+ q(vbb) => [
+ q(6951),
+ q(0),
+ ],
+ q(vbk) => [
+ q(6952),
+ q(0),
+ ],
+ q(vec) => [
+ q(6953),
+ q(0),
+ ],
+ q(ved) => [
+ q(6954),
+ q(0),
+ ],
+ q(vel) => [
+ q(6955),
+ q(0),
+ ],
+ q(vem) => [
+ q(6956),
+ q(0),
+ ],
+ q(ven) => [
+ q(0458),
+ q(0),
+ ],
+ q(veo) => [
+ q(6957),
+ q(0),
+ ],
+ q(vep) => [
+ q(6958),
+ q(0),
+ ],
+ q(ver) => [
+ q(6959),
+ q(0),
+ ],
+ q(vgr) => [
+ q(6960),
+ q(0),
+ ],
+ q(vgt) => [
+ q(6961),
+ q(0),
+ ],
+ q(vic) => [
+ q(6962),
+ q(0),
+ ],
+ q(vid) => [
+ q(6963),
+ q(0),
+ ],
+ q(vie) => [
+ q(0459),
+ q(0),
+ ],
+ q(vif) => [
+ q(6964),
+ q(0),
+ ],
+ q(vig) => [
+ q(6965),
+ q(0),
+ ],
+ q(vil) => [
+ q(6966),
+ q(0),
+ ],
+ q(vin) => [
+ q(6967),
+ q(0),
+ ],
+ q(vis) => [
+ q(6968),
+ q(0),
+ ],
+ q(vit) => [
+ q(6969),
+ q(0),
+ ],
+ q(viv) => [
+ q(6970),
+ q(0),
+ ],
+ q(vka) => [
+ q(6971),
+ q(0),
+ ],
+ q(vki) => [
+ q(6972),
+ q(0),
+ ],
+ q(vkj) => [
+ q(6973),
+ q(0),
+ ],
+ q(vkk) => [
+ q(6974),
+ q(0),
+ ],
+ q(vkl) => [
+ q(6975),
+ q(0),
+ ],
+ q(vkm) => [
+ q(6976),
+ q(0),
+ ],
+ q(vko) => [
+ q(6977),
+ q(0),
+ ],
+ q(vkp) => [
+ q(6978),
+ q(0),
+ ],
+ q(vkt) => [
+ q(6979),
+ q(0),
+ ],
+ q(vku) => [
+ q(6980),
+ q(0),
+ ],
+ q(vlp) => [
+ q(6981),
+ q(0),
+ ],
+ q(vls) => [
+ q(6982),
+ q(0),
+ ],
+ q(vma) => [
+ q(6983),
+ q(0),
+ ],
+ q(vmb) => [
+ q(6984),
+ q(0),
+ ],
+ q(vmc) => [
+ q(6985),
+ q(0),
+ ],
+ q(vmd) => [
+ q(6986),
+ q(0),
+ ],
+ q(vme) => [
+ q(6987),
+ q(0),
+ ],
+ q(vmf) => [
+ q(6988),
+ q(0),
+ ],
+ q(vmg) => [
+ q(6989),
+ q(0),
+ ],
+ q(vmh) => [
+ q(6990),
+ q(0),
+ ],
+ q(vmi) => [
+ q(6991),
+ q(0),
+ ],
+ q(vmj) => [
+ q(6992),
+ q(0),
+ ],
+ q(vmk) => [
+ q(6993),
+ q(0),
+ ],
+ q(vml) => [
+ q(6994),
+ q(0),
+ ],
+ q(vmm) => [
+ q(6995),
+ q(0),
+ ],
+ q(vmp) => [
+ q(6996),
+ q(0),
+ ],
+ q(vmq) => [
+ q(6997),
+ q(0),
+ ],
+ q(vmr) => [
+ q(6998),
+ q(0),
+ ],
+ q(vms) => [
+ q(6999),
+ q(0),
+ ],
+ q(vmu) => [
+ q(7000),
+ q(0),
+ ],
+ q(vmv) => [
+ q(7001),
+ q(0),
+ ],
+ q(vmw) => [
+ q(7002),
+ q(0),
+ ],
+ q(vmx) => [
+ q(7003),
+ q(0),
+ ],
+ q(vmy) => [
+ q(7004),
+ q(0),
+ ],
+ q(vmz) => [
+ q(7005),
+ q(0),
+ ],
+ q(vnk) => [
+ q(7006),
+ q(0),
+ ],
+ q(vnm) => [
+ q(7007),
+ q(0),
+ ],
+ q(vnp) => [
+ q(7008),
+ q(0),
+ ],
+ q(vol) => [
+ q(0460),
+ q(0),
+ ],
+ q(vor) => [
+ q(7009),
+ q(0),
+ ],
+ q(vot) => [
+ q(0461),
+ q(0),
+ ],
+ q(vra) => [
+ q(7010),
+ q(0),
+ ],
+ q(vro) => [
+ q(7009),
+ q(0),
+ ],
+ q(vrs) => [
+ q(7011),
+ q(0),
+ ],
+ q(vrt) => [
+ q(7012),
+ q(0),
+ ],
+ q(vsi) => [
+ q(7013),
+ q(0),
+ ],
+ q(vsl) => [
+ q(7014),
+ q(0),
+ ],
+ q(vsv) => [
+ q(7015),
+ q(0),
+ ],
+ q(vto) => [
+ q(7016),
+ q(0),
+ ],
+ q(vum) => [
+ q(7017),
+ q(0),
+ ],
+ q(vun) => [
+ q(7018),
+ q(0),
+ ],
+ q(vut) => [
+ q(7019),
+ q(0),
+ ],
+ q(vwa) => [
+ q(7020),
+ q(0),
+ ],
+ q(waa) => [
+ q(7021),
+ q(0),
+ ],
+ q(wab) => [
+ q(7022),
+ q(0),
+ ],
+ q(wac) => [
+ q(7023),
+ q(0),
+ ],
+ q(wad) => [
+ q(7024),
+ q(0),
+ ],
+ q(wae) => [
+ q(7025),
+ q(0),
+ ],
+ q(waf) => [
+ q(7026),
+ q(0),
+ ],
+ q(wag) => [
+ q(7027),
+ q(0),
+ ],
+ q(wah) => [
+ q(7028),
+ q(0),
+ ],
+ q(wai) => [
+ q(7029),
+ q(0),
+ ],
+ q(waj) => [
+ q(7030),
+ q(0),
+ ],
+ q(wak) => [
+ q(0462),
+ q(0),
+ ],
+ q(wal) => [
+ q(0463),
+ q(1),
+ ],
+ q(wam) => [
+ q(7031),
+ q(0),
+ ],
+ q(wan) => [
+ q(7032),
+ q(0),
+ ],
+ q(wao) => [
+ q(7033),
+ q(0),
+ ],
+ q(wap) => [
+ q(7034),
+ q(0),
+ ],
+ q(waq) => [
+ q(7035),
+ q(0),
+ ],
+ q(war) => [
+ q(0464),
+ q(1),
+ ],
+ q(was) => [
+ q(0465),
+ q(0),
+ ],
+ q(wat) => [
+ q(7036),
+ q(0),
+ ],
+ q(wau) => [
+ q(7037),
+ q(0),
+ ],
+ q(wav) => [
+ q(7038),
+ q(0),
+ ],
+ q(waw) => [
+ q(7039),
+ q(0),
+ ],
+ q(wax) => [
+ q(7040),
+ q(0),
+ ],
+ q(way) => [
+ q(7041),
+ q(0),
+ ],
+ q(waz) => [
+ q(7042),
+ q(0),
+ ],
+ q(wba) => [
+ q(7043),
+ q(0),
+ ],
+ q(wbb) => [
+ q(7044),
+ q(0),
+ ],
+ q(wbe) => [
+ q(7045),
+ q(0),
+ ],
+ q(wbf) => [
+ q(6381),
+ q(0),
+ ],
+ q(wbh) => [
+ q(7046),
+ q(0),
+ ],
+ q(wbi) => [
+ q(7047),
+ q(0),
+ ],
+ q(wbj) => [
+ q(7048),
+ q(0),
+ ],
+ q(wbk) => [
+ q(7049),
+ q(0),
+ ],
+ q(wbl) => [
+ q(7050),
+ q(0),
+ ],
+ q(wbm) => [
+ q(7051),
+ q(0),
+ ],
+ q(wbp) => [
+ q(7052),
+ q(0),
+ ],
+ q(wbq) => [
+ q(7053),
+ q(0),
+ ],
+ q(wbr) => [
+ q(7054),
+ q(0),
+ ],
+ q(wbt) => [
+ q(7055),
+ q(0),
+ ],
+ q(wbv) => [
+ q(7056),
+ q(0),
+ ],
+ q(wbw) => [
+ q(7057),
+ q(0),
+ ],
+ q(wca) => [
+ q(7058),
+ q(0),
+ ],
+ q(wci) => [
+ q(7059),
+ q(0),
+ ],
+ q(wdd) => [
+ q(7060),
+ q(0),
+ ],
+ q(wdg) => [
+ q(7061),
+ q(0),
+ ],
+ q(wdj) => [
+ q(7062),
+ q(0),
+ ],
+ q(wdu) => [
+ q(7063),
+ q(0),
+ ],
+ q(wea) => [
+ q(7064),
+ q(0),
+ ],
+ q(wec) => [
+ q(7065),
+ q(0),
+ ],
+ q(wed) => [
+ q(7066),
+ q(0),
+ ],
+ q(weh) => [
+ q(7067),
+ q(0),
+ ],
+ q(wei) => [
+ q(7068),
+ q(0),
+ ],
+ q(wel) => [
+ q(0466),
+ q(0),
+ ],
+ q(wem) => [
+ q(7069),
+ q(0),
+ ],
+ q(wen) => [
+ q(0467),
+ q(0),
+ ],
+ q(weo) => [
+ q(7070),
+ q(0),
+ ],
+ q(wep) => [
+ q(7071),
+ q(0),
+ ],
+ q(wer) => [
+ q(7072),
+ q(0),
+ ],
+ q(wes) => [
+ q(7073),
+ q(0),
+ ],
+ q(wet) => [
+ q(7074),
+ q(0),
+ ],
+ q(weu) => [
+ q(7075),
+ q(0),
+ ],
+ q(wew) => [
+ q(7076),
+ q(0),
+ ],
+ q(wfg) => [
+ q(7077),
+ q(0),
+ ],
+ q(wga) => [
+ q(7078),
+ q(0),
+ ],
+ q(wgb) => [
+ q(7079),
+ q(0),
+ ],
+ q(wgg) => [
+ q(7080),
+ q(0),
+ ],
+ q(wgi) => [
+ q(7081),
+ q(0),
+ ],
+ q(wgo) => [
+ q(7082),
+ q(0),
+ ],
+ q(wgu) => [
+ q(7083),
+ q(0),
+ ],
+ q(wgy) => [
+ q(7084),
+ q(0),
+ ],
+ q(wha) => [
+ q(7085),
+ q(0),
+ ],
+ q(whg) => [
+ q(7086),
+ q(0),
+ ],
+ q(whk) => [
+ q(7087),
+ q(0),
+ ],
+ q(whu) => [
+ q(7088),
+ q(0),
+ ],
+ q(wib) => [
+ q(7089),
+ q(0),
+ ],
+ q(wic) => [
+ q(7090),
+ q(0),
+ ],
+ q(wie) => [
+ q(7091),
+ q(0),
+ ],
+ q(wif) => [
+ q(7092),
+ q(0),
+ ],
+ q(wig) => [
+ q(7093),
+ q(0),
+ ],
+ q(wih) => [
+ q(7094),
+ q(0),
+ ],
+ q(wii) => [
+ q(7095),
+ q(0),
+ ],
+ q(wij) => [
+ q(7096),
+ q(0),
+ ],
+ q(wik) => [
+ q(7097),
+ q(0),
+ ],
+ q(wil) => [
+ q(7098),
+ q(0),
+ ],
+ q(wim) => [
+ q(7099),
+ q(0),
+ ],
+ q(win) => [
+ q(7100),
+ q(0),
+ ],
+ q(wir) => [
+ q(7101),
+ q(0),
+ ],
+ q(wit) => [
+ q(7102),
+ q(0),
+ ],
+ q(wiu) => [
+ q(7103),
+ q(0),
+ ],
+ q(wiv) => [
+ q(7104),
+ q(0),
+ ],
+ q(wiy) => [
+ q(7105),
+ q(0),
+ ],
+ q(wja) => [
+ q(7106),
+ q(0),
+ ],
+ q(wji) => [
+ q(7107),
+ q(0),
+ ],
+ q(wka) => [
+ q(7108),
+ q(0),
+ ],
+ q(wkb) => [
+ q(7109),
+ q(0),
+ ],
+ q(wkd) => [
+ q(7110),
+ q(0),
+ ],
+ q(wkl) => [
+ q(7111),
+ q(0),
+ ],
+ q(wku) => [
+ q(7112),
+ q(0),
+ ],
+ q(wkw) => [
+ q(7113),
+ q(0),
+ ],
+ q(wla) => [
+ q(7114),
+ q(0),
+ ],
+ q(wlc) => [
+ q(7115),
+ q(0),
+ ],
+ q(wle) => [
+ q(7116),
+ q(0),
+ ],
+ q(wlg) => [
+ q(7117),
+ q(0),
+ ],
+ q(wli) => [
+ q(7118),
+ q(0),
+ ],
+ q(wlk) => [
+ q(7119),
+ q(0),
+ ],
+ q(wll) => [
+ q(7120),
+ q(0),
+ ],
+ q(wlm) => [
+ q(7121),
+ q(0),
+ ],
+ q(wln) => [
+ q(0468),
+ q(0),
+ ],
+ q(wlo) => [
+ q(7122),
+ q(0),
+ ],
+ q(wlr) => [
+ q(7123),
+ q(0),
+ ],
+ q(wls) => [
+ q(7124),
+ q(0),
+ ],
+ q(wlu) => [
+ q(7125),
+ q(0),
+ ],
+ q(wlv) => [
+ q(7126),
+ q(0),
+ ],
+ q(wlw) => [
+ q(7127),
+ q(0),
+ ],
+ q(wlx) => [
+ q(7128),
+ q(0),
+ ],
+ q(wly) => [
+ q(7129),
+ q(0),
+ ],
+ q(wma) => [
+ q(7130),
+ q(0),
+ ],
+ q(wmb) => [
+ q(7131),
+ q(0),
+ ],
+ q(wmc) => [
+ q(7132),
+ q(0),
+ ],
+ q(wmd) => [
+ q(7133),
+ q(0),
+ ],
+ q(wme) => [
+ q(7134),
+ q(0),
+ ],
+ q(wmh) => [
+ q(7135),
+ q(0),
+ ],
+ q(wmi) => [
+ q(7136),
+ q(0),
+ ],
+ q(wmm) => [
+ q(7137),
+ q(0),
+ ],
+ q(wmn) => [
+ q(7138),
+ q(0),
+ ],
+ q(wmo) => [
+ q(7139),
+ q(0),
+ ],
+ q(wms) => [
+ q(7140),
+ q(0),
+ ],
+ q(wmt) => [
+ q(7141),
+ q(0),
+ ],
+ q(wmw) => [
+ q(7142),
+ q(0),
+ ],
+ q(wmx) => [
+ q(7143),
+ q(0),
+ ],
+ q(wnb) => [
+ q(7144),
+ q(0),
+ ],
+ q(wnc) => [
+ q(7145),
+ q(0),
+ ],
+ q(wnd) => [
+ q(7146),
+ q(0),
+ ],
+ q(wne) => [
+ q(7147),
+ q(0),
+ ],
+ q(wng) => [
+ q(7148),
+ q(0),
+ ],
+ q(wni) => [
+ q(7149),
+ q(0),
+ ],
+ q(wnk) => [
+ q(7150),
+ q(0),
+ ],
+ q(wnm) => [
+ q(7151),
+ q(0),
+ ],
+ q(wno) => [
+ q(7152),
+ q(0),
+ ],
+ q(wnp) => [
+ q(7153),
+ q(0),
+ ],
+ q(wnu) => [
+ q(7154),
+ q(0),
+ ],
+ q(wny) => [
+ q(7155),
+ q(0),
+ ],
+ q(woa) => [
+ q(7156),
+ q(0),
+ ],
+ q(wob) => [
+ q(7157),
+ q(0),
+ ],
+ q(woc) => [
+ q(7158),
+ q(0),
+ ],
+ q(wod) => [
+ q(7159),
+ q(0),
+ ],
+ q(woe) => [
+ q(7160),
+ q(0),
+ ],
+ q(wof) => [
+ q(7161),
+ q(0),
+ ],
+ q(wog) => [
+ q(7162),
+ q(0),
+ ],
+ q(woi) => [
+ q(7163),
+ q(0),
+ ],
+ q(wok) => [
+ q(7164),
+ q(0),
+ ],
+ q(wol) => [
+ q(0469),
+ q(0),
+ ],
+ q(wom) => [
+ q(7165),
+ q(0),
+ ],
+ q(won) => [
+ q(7166),
+ q(0),
+ ],
+ q(woo) => [
+ q(7167),
+ q(0),
+ ],
+ q(wor) => [
+ q(7168),
+ q(0),
+ ],
+ q(wos) => [
+ q(7169),
+ q(0),
+ ],
+ q(wow) => [
+ q(7170),
+ q(0),
+ ],
+ q(woy) => [
+ q(7171),
+ q(0),
+ ],
+ q(wpc) => [
+ q(7172),
+ q(0),
+ ],
+ q(wra) => [
+ q(7173),
+ q(0),
+ ],
+ q(wrb) => [
+ q(7174),
+ q(0),
+ ],
+ q(wrd) => [
+ q(7175),
+ q(0),
+ ],
+ q(wrg) => [
+ q(7176),
+ q(0),
+ ],
+ q(wrh) => [
+ q(7177),
+ q(0),
+ ],
+ q(wri) => [
+ q(7178),
+ q(0),
+ ],
+ q(wrk) => [
+ q(7179),
+ q(0),
+ ],
+ q(wrl) => [
+ q(7180),
+ q(0),
+ ],
+ q(wrm) => [
+ q(7181),
+ q(0),
+ ],
+ q(wrn) => [
+ q(7182),
+ q(0),
+ ],
+ q(wro) => [
+ q(7183),
+ q(0),
+ ],
+ q(wrp) => [
+ q(7184),
+ q(0),
+ ],
+ q(wrr) => [
+ q(7185),
+ q(0),
+ ],
+ q(wrs) => [
+ q(7186),
+ q(0),
+ ],
+ q(wru) => [
+ q(7187),
+ q(0),
+ ],
+ q(wrv) => [
+ q(7188),
+ q(0),
+ ],
+ q(wrw) => [
+ q(7189),
+ q(0),
+ ],
+ q(wrx) => [
+ q(7190),
+ q(0),
+ ],
+ q(wry) => [
+ q(7191),
+ q(0),
+ ],
+ q(wrz) => [
+ q(7192),
+ q(0),
+ ],
+ q(wsa) => [
+ q(7193),
+ q(0),
+ ],
+ q(wsi) => [
+ q(7194),
+ q(0),
+ ],
+ q(wsk) => [
+ q(7195),
+ q(0),
+ ],
+ q(wsr) => [
+ q(7196),
+ q(0),
+ ],
+ q(wss) => [
+ q(7197),
+ q(0),
+ ],
+ q(wsu) => [
+ q(7198),
+ q(0),
+ ],
+ q(wsv) => [
+ q(7199),
+ q(0),
+ ],
+ q(wtf) => [
+ q(7200),
+ q(0),
+ ],
+ q(wti) => [
+ q(7201),
+ q(0),
+ ],
+ q(wtk) => [
+ q(7202),
+ q(0),
+ ],
+ q(wtm) => [
+ q(7203),
+ q(0),
+ ],
+ q(wtw) => [
+ q(7204),
+ q(0),
+ ],
+ q(wua) => [
+ q(7205),
+ q(0),
+ ],
+ q(wub) => [
+ q(7206),
+ q(0),
+ ],
+ q(wud) => [
+ q(7207),
+ q(0),
+ ],
+ q(wuh) => [
+ q(7208),
+ q(0),
+ ],
+ q(wul) => [
+ q(7209),
+ q(0),
+ ],
+ q(wum) => [
+ q(7210),
+ q(0),
+ ],
+ q(wun) => [
+ q(7211),
+ q(0),
+ ],
+ q(wur) => [
+ q(7212),
+ q(0),
+ ],
+ q(wut) => [
+ q(7213),
+ q(0),
+ ],
+ q(wuu) => [
+ q(7214),
+ q(0),
+ ],
+ q(wuv) => [
+ q(7215),
+ q(0),
+ ],
+ q(wux) => [
+ q(7216),
+ q(0),
+ ],
+ q(wuy) => [
+ q(7217),
+ q(0),
+ ],
+ q(wwa) => [
+ q(7218),
+ q(0),
+ ],
+ q(wwb) => [
+ q(7219),
+ q(0),
+ ],
+ q(wwo) => [
+ q(7220),
+ q(0),
+ ],
+ q(wwr) => [
+ q(7221),
+ q(0),
+ ],
+ q(www) => [
+ q(7222),
+ q(0),
+ ],
+ q(wxa) => [
+ q(7223),
+ q(0),
+ ],
+ q(wya) => [
+ q(7224),
+ q(0),
+ ],
+ q(wyb) => [
+ q(7225),
+ q(0),
+ ],
+ q(wym) => [
+ q(7226),
+ q(0),
+ ],
+ q(wyr) => [
+ q(7227),
+ q(0),
+ ],
+ q(wyy) => [
+ q(7228),
+ q(0),
+ ],
+ q(xaa) => [
+ q(7229),
+ q(0),
+ ],
+ q(xab) => [
+ q(7230),
+ q(0),
+ ],
+ q(xac) => [
+ q(7231),
+ q(0),
+ ],
+ q(xad) => [
+ q(7232),
+ q(0),
+ ],
+ q(xae) => [
+ q(7233),
+ q(0),
+ ],
+ q(xag) => [
+ q(7234),
+ q(0),
+ ],
+ q(xai) => [
+ q(7235),
+ q(0),
+ ],
+ q(xal) => [
+ q(0470),
+ q(0),
+ ],
+ q(xam) => [
+ q(7236),
+ q(0),
+ ],
+ q(xan) => [
+ q(7237),
+ q(0),
+ ],
+ q(xao) => [
+ q(7238),
+ q(0),
+ ],
+ q(xap) => [
+ q(7239),
+ q(0),
+ ],
+ q(xaq) => [
+ q(7240),
+ q(0),
+ ],
+ q(xar) => [
+ q(7241),
+ q(0),
+ ],
+ q(xas) => [
+ q(7242),
+ q(0),
+ ],
+ q(xat) => [
+ q(7243),
+ q(0),
+ ],
+ q(xau) => [
+ q(7244),
+ q(0),
+ ],
+ q(xav) => [
+ q(7245),
+ q(0),
+ ],
+ q(xaw) => [
+ q(7246),
+ q(0),
+ ],
+ q(xay) => [
+ q(7247),
+ q(0),
+ ],
+ q(xba) => [
+ q(7248),
+ q(0),
+ ],
+ q(xbb) => [
+ q(7249),
+ q(0),
+ ],
+ q(xbc) => [
+ q(7250),
+ q(0),
+ ],
+ q(xbi) => [
+ q(7251),
+ q(0),
+ ],
+ q(xbm) => [
+ q(7252),
+ q(0),
+ ],
+ q(xbn) => [
+ q(7253),
+ q(0),
+ ],
+ q(xbo) => [
+ q(7254),
+ q(0),
+ ],
+ q(xbr) => [
+ q(7255),
+ q(0),
+ ],
+ q(xbw) => [
+ q(7256),
+ q(0),
+ ],
+ q(xbx) => [
+ q(7257),
+ q(0),
+ ],
+ q(xcb) => [
+ q(7258),
+ q(0),
+ ],
+ q(xcc) => [
+ q(7259),
+ q(0),
+ ],
+ q(xce) => [
+ q(7260),
+ q(0),
+ ],
+ q(xcg) => [
+ q(7261),
+ q(0),
+ ],
+ q(xch) => [
+ q(7262),
+ q(0),
+ ],
+ q(xcl) => [
+ q(7263),
+ q(0),
+ ],
+ q(xcm) => [
+ q(7264),
+ q(0),
+ ],
+ q(xcn) => [
+ q(7265),
+ q(0),
+ ],
+ q(xco) => [
+ q(7266),
+ q(0),
+ ],
+ q(xcr) => [
+ q(7267),
+ q(0),
+ ],
+ q(xct) => [
+ q(7268),
+ q(0),
+ ],
+ q(xcu) => [
+ q(7269),
+ q(0),
+ ],
+ q(xcv) => [
+ q(7270),
+ q(0),
+ ],
+ q(xcw) => [
+ q(7271),
+ q(0),
+ ],
+ q(xcy) => [
+ q(7272),
+ q(0),
+ ],
+ q(xdc) => [
+ q(7273),
+ q(0),
+ ],
+ q(xdm) => [
+ q(7274),
+ q(0),
+ ],
+ q(xdy) => [
+ q(7275),
+ q(0),
+ ],
+ q(xeb) => [
+ q(7276),
+ q(0),
+ ],
+ q(xed) => [
+ q(7277),
+ q(0),
+ ],
+ q(xeg) => [
+ q(7278),
+ q(0),
+ ],
+ q(xel) => [
+ q(7279),
+ q(0),
+ ],
+ q(xem) => [
+ q(7280),
+ q(0),
+ ],
+ q(xep) => [
+ q(7281),
+ q(0),
+ ],
+ q(xer) => [
+ q(7282),
+ q(0),
+ ],
+ q(xes) => [
+ q(7283),
+ q(0),
+ ],
+ q(xet) => [
+ q(7284),
+ q(0),
+ ],
+ q(xeu) => [
+ q(7285),
+ q(0),
+ ],
+ q(xfa) => [
+ q(7286),
+ q(0),
+ ],
+ q(xga) => [
+ q(7287),
+ q(0),
+ ],
+ q(xgb) => [
+ q(7288),
+ q(0),
+ ],
+ q(xgf) => [
+ q(7289),
+ q(0),
+ ],
+ q(xgl) => [
+ q(7290),
+ q(0),
+ ],
+ q(xgn) => [
+ q(0531),
+ q(0),
+ ],
+ q(xgr) => [
+ q(7291),
+ q(0),
+ ],
+ q(xgu) => [
+ q(7292),
+ q(0),
+ ],
+ q(xha) => [
+ q(7293),
+ q(0),
+ ],
+ q(xhc) => [
+ q(7294),
+ q(0),
+ ],
+ q(xhd) => [
+ q(7295),
+ q(0),
+ ],
+ q(xhe) => [
+ q(7296),
+ q(0),
+ ],
+ q(xho) => [
+ q(0471),
+ q(0),
+ ],
+ q(xhr) => [
+ q(7297),
+ q(0),
+ ],
+ q(xht) => [
+ q(7298),
+ q(0),
+ ],
+ q(xhu) => [
+ q(7299),
+ q(0),
+ ],
+ q(xhv) => [
+ q(7300),
+ q(0),
+ ],
+ q(xia) => [
+ q(7301),
+ q(0),
+ ],
+ q(xib) => [
+ q(7302),
+ q(0),
+ ],
+ q(xii) => [
+ q(7303),
+ q(0),
+ ],
+ q(xil) => [
+ q(7304),
+ q(0),
+ ],
+ q(xin) => [
+ q(7305),
+ q(0),
+ ],
+ q(xip) => [
+ q(7306),
+ q(0),
+ ],
+ q(xir) => [
+ q(7307),
+ q(0),
+ ],
+ q(xiv) => [
+ q(7308),
+ q(0),
+ ],
+ q(xiy) => [
+ q(7309),
+ q(0),
+ ],
+ q(xka) => [
+ q(7310),
+ q(0),
+ ],
+ q(xkb) => [
+ q(7311),
+ q(0),
+ ],
+ q(xkc) => [
+ q(7312),
+ q(0),
+ ],
+ q(xkd) => [
+ q(7313),
+ q(0),
+ ],
+ q(xke) => [
+ q(7314),
+ q(0),
+ ],
+ q(xkf) => [
+ q(7315),
+ q(0),
+ ],
+ q(xkg) => [
+ q(7316),
+ q(0),
+ ],
+ q(xkh) => [
+ q(7317),
+ q(0),
+ ],
+ q(xki) => [
+ q(7318),
+ q(0),
+ ],
+ q(xkj) => [
+ q(7319),
+ q(0),
+ ],
+ q(xkk) => [
+ q(7320),
+ q(0),
+ ],
+ q(xkl) => [
+ q(7321),
+ q(0),
+ ],
+ q(xkn) => [
+ q(7322),
+ q(0),
+ ],
+ q(xko) => [
+ q(7323),
+ q(0),
+ ],
+ q(xkp) => [
+ q(7324),
+ q(0),
+ ],
+ q(xkq) => [
+ q(7325),
+ q(0),
+ ],
+ q(xkr) => [
+ q(7326),
+ q(0),
+ ],
+ q(xks) => [
+ q(7327),
+ q(0),
+ ],
+ q(xkt) => [
+ q(7328),
+ q(0),
+ ],
+ q(xku) => [
+ q(7329),
+ q(0),
+ ],
+ q(xkv) => [
+ q(7330),
+ q(0),
+ ],
+ q(xkw) => [
+ q(7331),
+ q(0),
+ ],
+ q(xkx) => [
+ q(7332),
+ q(0),
+ ],
+ q(xky) => [
+ q(7333),
+ q(0),
+ ],
+ q(xkz) => [
+ q(7334),
+ q(0),
+ ],
+ q(xla) => [
+ q(7335),
+ q(0),
+ ],
+ q(xlb) => [
+ q(7336),
+ q(0),
+ ],
+ q(xlc) => [
+ q(7337),
+ q(0),
+ ],
+ q(xld) => [
+ q(7338),
+ q(0),
+ ],
+ q(xle) => [
+ q(7339),
+ q(0),
+ ],
+ q(xlg) => [
+ q(7340),
+ q(0),
+ ],
+ q(xli) => [
+ q(7341),
+ q(0),
+ ],
+ q(xln) => [
+ q(7342),
+ q(0),
+ ],
+ q(xlo) => [
+ q(7343),
+ q(0),
+ ],
+ q(xlp) => [
+ q(7344),
+ q(0),
+ ],
+ q(xls) => [
+ q(7345),
+ q(0),
+ ],
+ q(xlu) => [
+ q(7346),
+ q(0),
+ ],
+ q(xly) => [
+ q(7347),
+ q(0),
+ ],
+ q(xma) => [
+ q(7348),
+ q(0),
+ ],
+ q(xmb) => [
+ q(7349),
+ q(0),
+ ],
+ q(xmc) => [
+ q(7350),
+ q(0),
+ ],
+ q(xmd) => [
+ q(7351),
+ q(0),
+ ],
+ q(xme) => [
+ q(7352),
+ q(0),
+ ],
+ q(xmf) => [
+ q(7353),
+ q(0),
+ ],
+ q(xmg) => [
+ q(7354),
+ q(0),
+ ],
+ q(xmh) => [
+ q(7355),
+ q(0),
+ ],
+ q(xmj) => [
+ q(7356),
+ q(0),
+ ],
+ q(xmk) => [
+ q(7357),
+ q(0),
+ ],
+ q(xml) => [
+ q(7358),
+ q(0),
+ ],
+ q(xmm) => [
+ q(7359),
+ q(0),
+ ],
+ q(xmn) => [
+ q(7360),
+ q(0),
+ ],
+ q(xmo) => [
+ q(7361),
+ q(0),
+ ],
+ q(xmp) => [
+ q(7362),
+ q(0),
+ ],
+ q(xmq) => [
+ q(7363),
+ q(0),
+ ],
+ q(xmr) => [
+ q(7364),
+ q(0),
+ ],
+ q(xms) => [
+ q(7365),
+ q(0),
+ ],
+ q(xmt) => [
+ q(7366),
+ q(0),
+ ],
+ q(xmu) => [
+ q(7367),
+ q(0),
+ ],
+ q(xmv) => [
+ q(7368),
+ q(0),
+ ],
+ q(xmw) => [
+ q(7369),
+ q(0),
+ ],
+ q(xmx) => [
+ q(7370),
+ q(0),
+ ],
+ q(xmy) => [
+ q(7371),
+ q(0),
+ ],
+ q(xmz) => [
+ q(7372),
+ q(0),
+ ],
+ q(xna) => [
+ q(7373),
+ q(0),
+ ],
+ q(xnb) => [
+ q(7374),
+ q(0),
+ ],
+ q(xnd) => [
+ q(0532),
+ q(0),
+ ],
+ q(xng) => [
+ q(7375),
+ q(0),
+ ],
+ q(xnh) => [
+ q(7376),
+ q(0),
+ ],
+ q(xnn) => [
+ q(7377),
+ q(0),
+ ],
+ q(xno) => [
+ q(7378),
+ q(0),
+ ],
+ q(xnr) => [
+ q(7379),
+ q(0),
+ ],
+ q(xns) => [
+ q(7380),
+ q(0),
+ ],
+ q(xnt) => [
+ q(7381),
+ q(0),
+ ],
+ q(xnz) => [
+ q(7382),
+ q(0),
+ ],
+ q(xoc) => [
+ q(7383),
+ q(0),
+ ],
+ q(xod) => [
+ q(7384),
+ q(0),
+ ],
+ q(xog) => [
+ q(7385),
+ q(0),
+ ],
+ q(xoi) => [
+ q(7386),
+ q(0),
+ ],
+ q(xok) => [
+ q(7387),
+ q(0),
+ ],
+ q(xom) => [
+ q(7388),
+ q(0),
+ ],
+ q(xon) => [
+ q(7389),
+ q(0),
+ ],
+ q(xoo) => [
+ q(7390),
+ q(0),
+ ],
+ q(xop) => [
+ q(7391),
+ q(0),
+ ],
+ q(xor) => [
+ q(7392),
+ q(0),
+ ],
+ q(xow) => [
+ q(7393),
+ q(0),
+ ],
+ q(xpc) => [
+ q(7394),
+ q(0),
+ ],
+ q(xpe) => [
+ q(7395),
+ q(0),
+ ],
+ q(xpg) => [
+ q(7396),
+ q(0),
+ ],
+ q(xpi) => [
+ q(7397),
+ q(0),
+ ],
+ q(xpj) => [
+ q(7398),
+ q(0),
+ ],
+ q(xpk) => [
+ q(7399),
+ q(0),
+ ],
+ q(xpm) => [
+ q(7400),
+ q(0),
+ ],
+ q(xpn) => [
+ q(7401),
+ q(0),
+ ],
+ q(xpo) => [
+ q(7402),
+ q(0),
+ ],
+ q(xpp) => [
+ q(7403),
+ q(0),
+ ],
+ q(xpq) => [
+ q(7404),
+ q(0),
+ ],
+ q(xpr) => [
+ q(7405),
+ q(0),
+ ],
+ q(xps) => [
+ q(7406),
+ q(0),
+ ],
+ q(xpu) => [
+ q(7407),
+ q(0),
+ ],
+ q(xpy) => [
+ q(7408),
+ q(0),
+ ],
+ q(xqa) => [
+ q(7409),
+ q(0),
+ ],
+ q(xqt) => [
+ q(7410),
+ q(0),
+ ],
+ q(xra) => [
+ q(7411),
+ q(0),
+ ],
+ q(xrb) => [
+ q(7412),
+ q(0),
+ ],
+ q(xre) => [
+ q(7413),
+ q(0),
+ ],
+ q(xri) => [
+ q(7414),
+ q(0),
+ ],
+ q(xrm) => [
+ q(7415),
+ q(0),
+ ],
+ q(xrn) => [
+ q(7416),
+ q(0),
+ ],
+ q(xrr) => [
+ q(7417),
+ q(0),
+ ],
+ q(xrt) => [
+ q(7418),
+ q(0),
+ ],
+ q(xru) => [
+ q(7419),
+ q(0),
+ ],
+ q(xrw) => [
+ q(7420),
+ q(0),
+ ],
+ q(xsa) => [
+ q(7421),
+ q(0),
+ ],
+ q(xsb) => [
+ q(7422),
+ q(0),
+ ],
+ q(xsc) => [
+ q(7423),
+ q(0),
+ ],
+ q(xsd) => [
+ q(7424),
+ q(0),
+ ],
+ q(xse) => [
+ q(7425),
+ q(0),
+ ],
+ q(xsh) => [
+ q(7426),
+ q(0),
+ ],
+ q(xsi) => [
+ q(7427),
+ q(0),
+ ],
+ q(xsj) => [
+ q(7428),
+ q(0),
+ ],
+ q(xsl) => [
+ q(7429),
+ q(0),
+ ],
+ q(xsm) => [
+ q(7430),
+ q(0),
+ ],
+ q(xsn) => [
+ q(7431),
+ q(0),
+ ],
+ q(xso) => [
+ q(7432),
+ q(0),
+ ],
+ q(xsp) => [
+ q(7433),
+ q(0),
+ ],
+ q(xsq) => [
+ q(7434),
+ q(0),
+ ],
+ q(xsr) => [
+ q(7435),
+ q(0),
+ ],
+ q(xss) => [
+ q(7436),
+ q(0),
+ ],
+ q(xsu) => [
+ q(7437),
+ q(0),
+ ],
+ q(xsv) => [
+ q(7438),
+ q(0),
+ ],
+ q(xsy) => [
+ q(7439),
+ q(0),
+ ],
+ q(xta) => [
+ q(7440),
+ q(0),
+ ],
+ q(xtb) => [
+ q(7441),
+ q(0),
+ ],
+ q(xtc) => [
+ q(7442),
+ q(0),
+ ],
+ q(xtd) => [
+ q(7443),
+ q(0),
+ ],
+ q(xte) => [
+ q(7444),
+ q(0),
+ ],
+ q(xtg) => [
+ q(7445),
+ q(0),
+ ],
+ q(xti) => [
+ q(7446),
+ q(0),
+ ],
+ q(xtj) => [
+ q(7447),
+ q(0),
+ ],
+ q(xtl) => [
+ q(7448),
+ q(0),
+ ],
+ q(xtm) => [
+ q(7449),
+ q(0),
+ ],
+ q(xtn) => [
+ q(7450),
+ q(0),
+ ],
+ q(xto) => [
+ q(7451),
+ q(0),
+ ],
+ q(xtp) => [
+ q(7452),
+ q(0),
+ ],
+ q(xtq) => [
+ q(7453),
+ q(0),
+ ],
+ q(xtr) => [
+ q(7454),
+ q(0),
+ ],
+ q(xts) => [
+ q(7455),
+ q(0),
+ ],
+ q(xtt) => [
+ q(7456),
+ q(0),
+ ],
+ q(xtu) => [
+ q(7457),
+ q(0),
+ ],
+ q(xtw) => [
+ q(7458),
+ q(0),
+ ],
+ q(xty) => [
+ q(7459),
+ q(0),
+ ],
+ q(xtz) => [
+ q(7460),
+ q(0),
+ ],
+ q(xua) => [
+ q(7461),
+ q(0),
+ ],
+ q(xub) => [
+ q(7462),
+ q(0),
+ ],
+ q(xud) => [
+ q(7463),
+ q(0),
+ ],
+ q(xug) => [
+ q(7464),
+ q(0),
+ ],
+ q(xuj) => [
+ q(7465),
+ q(0),
+ ],
+ q(xum) => [
+ q(7466),
+ q(0),
+ ],
+ q(xun) => [
+ q(7467),
+ q(0),
+ ],
+ q(xuo) => [
+ q(7468),
+ q(0),
+ ],
+ q(xup) => [
+ q(7469),
+ q(0),
+ ],
+ q(xur) => [
+ q(7470),
+ q(0),
+ ],
+ q(xut) => [
+ q(7471),
+ q(0),
+ ],
+ q(xuu) => [
+ q(7472),
+ q(0),
+ ],
+ q(xve) => [
+ q(7473),
+ q(0),
+ ],
+ q(xvi) => [
+ q(7474),
+ q(0),
+ ],
+ q(xvn) => [
+ q(7475),
+ q(0),
+ ],
+ q(xvo) => [
+ q(7476),
+ q(0),
+ ],
+ q(xvs) => [
+ q(7477),
+ q(0),
+ ],
+ q(xwa) => [
+ q(7478),
+ q(0),
+ ],
+ q(xwc) => [
+ q(7479),
+ q(0),
+ ],
+ q(xwe) => [
+ q(7480),
+ q(0),
+ ],
+ q(xwg) => [
+ q(7481),
+ q(0),
+ ],
+ q(xwl) => [
+ q(7482),
+ q(0),
+ ],
+ q(xwo) => [
+ q(7483),
+ q(0),
+ ],
+ q(xwr) => [
+ q(7484),
+ q(0),
+ ],
+ q(xxb) => [
+ q(7485),
+ q(0),
+ ],
+ q(xxk) => [
+ q(7486),
+ q(0),
+ ],
+ q(xxr) => [
+ q(7487),
+ q(0),
+ ],
+ q(xxt) => [
+ q(7488),
+ q(0),
+ ],
+ q(xyl) => [
+ q(7489),
+ q(0),
+ ],
+ q(xyy) => [
+ q(7490),
+ q(0),
+ ],
+ q(xzh) => [
+ q(7491),
+ q(0),
+ ],
+ q(xzm) => [
+ q(7492),
+ q(0),
+ ],
+ q(xzp) => [
+ q(7493),
+ q(0),
+ ],
+ q(yaa) => [
+ q(7494),
+ q(0),
+ ],
+ q(yab) => [
+ q(7495),
+ q(0),
+ ],
+ q(yac) => [
+ q(7496),
+ q(0),
+ ],
+ q(yad) => [
+ q(7497),
+ q(0),
+ ],
+ q(yae) => [
+ q(7498),
+ q(0),
+ ],
+ q(yaf) => [
+ q(7499),
+ q(0),
+ ],
+ q(yag) => [
+ q(7500),
+ q(0),
+ ],
+ q(yah) => [
+ q(7501),
+ q(0),
+ ],
+ q(yai) => [
+ q(7502),
+ q(0),
+ ],
+ q(yaj) => [
+ q(7503),
+ q(0),
+ ],
+ q(yak) => [
+ q(7504),
+ q(0),
+ ],
+ q(yal) => [
+ q(7505),
+ q(0),
+ ],
+ q(yam) => [
+ q(7506),
+ q(0),
+ ],
+ q(yan) => [
+ q(7507),
+ q(0),
+ ],
+ q(yao) => [
+ q(0472),
+ q(0),
+ ],
+ q(yap) => [
+ q(0473),
+ q(0),
+ ],
+ q(yaq) => [
+ q(7508),
+ q(0),
+ ],
+ q(yar) => [
+ q(7509),
+ q(0),
+ ],
+ q(yas) => [
+ q(7510),
+ q(0),
+ ],
+ q(yat) => [
+ q(7511),
+ q(0),
+ ],
+ q(yau) => [
+ q(7512),
+ q(0),
+ ],
+ q(yav) => [
+ q(7513),
+ q(0),
+ ],
+ q(yaw) => [
+ q(7514),
+ q(0),
+ ],
+ q(yax) => [
+ q(7515),
+ q(0),
+ ],
+ q(yay) => [
+ q(7516),
+ q(0),
+ ],
+ q(yaz) => [
+ q(7517),
+ q(0),
+ ],
+ q(yba) => [
+ q(7518),
+ q(0),
+ ],
+ q(ybb) => [
+ q(7519),
+ q(0),
+ ],
+ q(ybe) => [
+ q(7520),
+ q(0),
+ ],
+ q(ybh) => [
+ q(7521),
+ q(0),
+ ],
+ q(ybi) => [
+ q(7522),
+ q(0),
+ ],
+ q(ybj) => [
+ q(7523),
+ q(0),
+ ],
+ q(ybk) => [
+ q(7524),
+ q(0),
+ ],
+ q(ybl) => [
+ q(7525),
+ q(0),
+ ],
+ q(ybm) => [
+ q(7526),
+ q(0),
+ ],
+ q(ybn) => [
+ q(7527),
+ q(0),
+ ],
+ q(ybo) => [
+ q(7528),
+ q(0),
+ ],
+ q(ybx) => [
+ q(7529),
+ q(0),
+ ],
+ q(yby) => [
+ q(7530),
+ q(0),
+ ],
+ q(ych) => [
+ q(7531),
+ q(0),
+ ],
+ q(ycl) => [
+ q(7532),
+ q(0),
+ ],
+ q(ycn) => [
+ q(7533),
+ q(0),
+ ],
+ q(ycp) => [
+ q(7534),
+ q(0),
+ ],
+ q(ydd) => [
+ q(7535),
+ q(0),
+ ],
+ q(yde) => [
+ q(7536),
+ q(0),
+ ],
+ q(ydg) => [
+ q(7537),
+ q(0),
+ ],
+ q(ydk) => [
+ q(7538),
+ q(0),
+ ],
+ q(yds) => [
+ q(7539),
+ q(0),
+ ],
+ q(yea) => [
+ q(7540),
+ q(0),
+ ],
+ q(yec) => [
+ q(7541),
+ q(0),
+ ],
+ q(yee) => [
+ q(7542),
+ q(0),
+ ],
+ q(yei) => [
+ q(7543),
+ q(0),
+ ],
+ q(yej) => [
+ q(7544),
+ q(0),
+ ],
+ q(yel) => [
+ q(7545),
+ q(0),
+ ],
+ q(yer) => [
+ q(7546),
+ q(0),
+ ],
+ q(yes) => [
+ q(7547),
+ q(0),
+ ],
+ q(yet) => [
+ q(7548),
+ q(0),
+ ],
+ q(yeu) => [
+ q(7549),
+ q(0),
+ ],
+ q(yev) => [
+ q(7550),
+ q(0),
+ ],
+ q(yey) => [
+ q(7551),
+ q(0),
+ ],
+ q(yga) => [
+ q(7552),
+ q(0),
+ ],
+ q(ygl) => [
+ q(7553),
+ q(0),
+ ],
+ q(ygm) => [
+ q(7554),
+ q(0),
+ ],
+ q(ygp) => [
+ q(7555),
+ q(0),
+ ],
+ q(ygr) => [
+ q(7556),
+ q(0),
+ ],
+ q(ygw) => [
+ q(7557),
+ q(0),
+ ],
+ q(yha) => [
+ q(7558),
+ q(0),
+ ],
+ q(yhd) => [
+ q(7559),
+ q(0),
+ ],
+ q(yhl) => [
+ q(7560),
+ q(0),
+ ],
+ q(yia) => [
+ q(7561),
+ q(0),
+ ],
+ q(yid) => [
+ q(0474),
+ q(0),
+ ],
+ q(yif) => [
+ q(2642),
+ q(0),
+ ],
+ q(yig) => [
+ q(7562),
+ q(0),
+ ],
+ q(yih) => [
+ q(7563),
+ q(0),
+ ],
+ q(yii) => [
+ q(7564),
+ q(0),
+ ],
+ q(yij) => [
+ q(7565),
+ q(0),
+ ],
+ q(yik) => [
+ q(7566),
+ q(0),
+ ],
+ q(yil) => [
+ q(7567),
+ q(0),
+ ],
+ q(yim) => [
+ q(7568),
+ q(0),
+ ],
+ q(yin) => [
+ q(7569),
+ q(0),
+ ],
+ q(yip) => [
+ q(7570),
+ q(0),
+ ],
+ q(yiq) => [
+ q(7571),
+ q(0),
+ ],
+ q(yir) => [
+ q(7572),
+ q(0),
+ ],
+ q(yis) => [
+ q(7573),
+ q(0),
+ ],
+ q(yit) => [
+ q(7574),
+ q(0),
+ ],
+ q(yiu) => [
+ q(7575),
+ q(0),
+ ],
+ q(yiv) => [
+ q(7576),
+ q(0),
+ ],
+ q(yix) => [
+ q(7577),
+ q(0),
+ ],
+ q(yiy) => [
+ q(7578),
+ q(0),
+ ],
+ q(yiz) => [
+ q(7579),
+ q(0),
+ ],
+ q(yka) => [
+ q(7580),
+ q(0),
+ ],
+ q(ykg) => [
+ q(7581),
+ q(0),
+ ],
+ q(yki) => [
+ q(7582),
+ q(0),
+ ],
+ q(ykk) => [
+ q(7583),
+ q(0),
+ ],
+ q(ykl) => [
+ q(7584),
+ q(0),
+ ],
+ q(ykm) => [
+ q(7585),
+ q(0),
+ ],
+ q(ykn) => [
+ q(7586),
+ q(0),
+ ],
+ q(yko) => [
+ q(7587),
+ q(0),
+ ],
+ q(ykr) => [
+ q(7588),
+ q(0),
+ ],
+ q(ykt) => [
+ q(7589),
+ q(0),
+ ],
+ q(yku) => [
+ q(7590),
+ q(0),
+ ],
+ q(yky) => [
+ q(7591),
+ q(0),
+ ],
+ q(yla) => [
+ q(7592),
+ q(0),
+ ],
+ q(ylb) => [
+ q(7593),
+ q(0),
+ ],
+ q(yle) => [
+ q(7594),
+ q(0),
+ ],
+ q(ylg) => [
+ q(7595),
+ q(0),
+ ],
+ q(yli) => [
+ q(7596),
+ q(0),
+ ],
+ q(yll) => [
+ q(7597),
+ q(0),
+ ],
+ q(ylm) => [
+ q(7598),
+ q(0),
+ ],
+ q(yln) => [
+ q(7599),
+ q(0),
+ ],
+ q(ylo) => [
+ q(7600),
+ q(0),
+ ],
+ q(ylr) => [
+ q(7601),
+ q(0),
+ ],
+ q(ylu) => [
+ q(7602),
+ q(0),
+ ],
+ q(yly) => [
+ q(7603),
+ q(0),
+ ],
+ q(ymb) => [
+ q(7604),
+ q(0),
+ ],
+ q(ymc) => [
+ q(7605),
+ q(0),
+ ],
+ q(ymd) => [
+ q(7606),
+ q(0),
+ ],
+ q(yme) => [
+ q(7607),
+ q(0),
+ ],
+ q(ymg) => [
+ q(7608),
+ q(0),
+ ],
+ q(ymh) => [
+ q(7609),
+ q(0),
+ ],
+ q(ymi) => [
+ q(7610),
+ q(0),
+ ],
+ q(ymk) => [
+ q(7611),
+ q(0),
+ ],
+ q(yml) => [
+ q(7612),
+ q(0),
+ ],
+ q(ymm) => [
+ q(7613),
+ q(0),
+ ],
+ q(ymn) => [
+ q(7614),
+ q(0),
+ ],
+ q(ymo) => [
+ q(7615),
+ q(0),
+ ],
+ q(ymp) => [
+ q(7616),
+ q(0),
+ ],
+ q(ymq) => [
+ q(7617),
+ q(0),
+ ],
+ q(ymr) => [
+ q(7618),
+ q(0),
+ ],
+ q(yms) => [
+ q(7619),
+ q(0),
+ ],
+ q(ymt) => [
+ q(7620),
+ q(0),
+ ],
+ q(ymx) => [
+ q(7621),
+ q(0),
+ ],
+ q(ymz) => [
+ q(7622),
+ q(0),
+ ],
+ q(yna) => [
+ q(7623),
+ q(0),
+ ],
+ q(ynd) => [
+ q(7624),
+ q(0),
+ ],
+ q(yne) => [
+ q(7625),
+ q(0),
+ ],
+ q(yng) => [
+ q(7626),
+ q(0),
+ ],
+ q(ynh) => [
+ q(7627),
+ q(0),
+ ],
+ q(ynk) => [
+ q(7628),
+ q(0),
+ ],
+ q(ynl) => [
+ q(7629),
+ q(0),
+ ],
+ q(ynn) => [
+ q(7630),
+ q(0),
+ ],
+ q(yno) => [
+ q(7631),
+ q(0),
+ ],
+ q(ynq) => [
+ q(7632),
+ q(0),
+ ],
+ q(yns) => [
+ q(7633),
+ q(0),
+ ],
+ q(ynu) => [
+ q(7634),
+ q(0),
+ ],
+ q(yob) => [
+ q(7635),
+ q(0),
+ ],
+ q(yog) => [
+ q(7636),
+ q(0),
+ ],
+ q(yoi) => [
+ q(7637),
+ q(0),
+ ],
+ q(yok) => [
+ q(7638),
+ q(0),
+ ],
+ q(yol) => [
+ q(7639),
+ q(0),
+ ],
+ q(yom) => [
+ q(7640),
+ q(0),
+ ],
+ q(yon) => [
+ q(7641),
+ q(0),
+ ],
+ q(yor) => [
+ q(0475),
+ q(0),
+ ],
+ q(yos) => [
+ q(7642),
+ q(0),
+ ],
+ q(yot) => [
+ q(7643),
+ q(0),
+ ],
+ q(yox) => [
+ q(7644),
+ q(0),
+ ],
+ q(yoy) => [
+ q(7645),
+ q(0),
+ ],
+ q(ypa) => [
+ q(7646),
+ q(0),
+ ],
+ q(ypb) => [
+ q(7647),
+ q(0),
+ ],
+ q(ypg) => [
+ q(7648),
+ q(0),
+ ],
+ q(yph) => [
+ q(7649),
+ q(0),
+ ],
+ q(ypk) => [
+ q(0476),
+ q(0),
+ ],
+ q(ypm) => [
+ q(7650),
+ q(0),
+ ],
+ q(ypn) => [
+ q(7651),
+ q(0),
+ ],
+ q(ypo) => [
+ q(7652),
+ q(0),
+ ],
+ q(ypp) => [
+ q(7653),
+ q(0),
+ ],
+ q(ypz) => [
+ q(7654),
+ q(0),
+ ],
+ q(yra) => [
+ q(7655),
+ q(0),
+ ],
+ q(yrb) => [
+ q(7656),
+ q(0),
+ ],
+ q(yre) => [
+ q(7657),
+ q(0),
+ ],
+ q(yri) => [
+ q(7658),
+ q(0),
+ ],
+ q(yrk) => [
+ q(7659),
+ q(0),
+ ],
+ q(yrl) => [
+ q(7660),
+ q(0),
+ ],
+ q(yrn) => [
+ q(7661),
+ q(0),
+ ],
+ q(yrs) => [
+ q(7662),
+ q(0),
+ ],
+ q(yrw) => [
+ q(7663),
+ q(0),
+ ],
+ q(ysc) => [
+ q(7664),
+ q(0),
+ ],
+ q(ysd) => [
+ q(7665),
+ q(0),
+ ],
+ q(ysg) => [
+ q(7666),
+ q(0),
+ ],
+ q(ysl) => [
+ q(7667),
+ q(0),
+ ],
+ q(ysn) => [
+ q(7668),
+ q(0),
+ ],
+ q(yso) => [
+ q(7669),
+ q(0),
+ ],
+ q(ysp) => [
+ q(7670),
+ q(0),
+ ],
+ q(ysr) => [
+ q(7671),
+ q(0),
+ ],
+ q(yss) => [
+ q(7672),
+ q(0),
+ ],
+ q(ysy) => [
+ q(7673),
+ q(0),
+ ],
+ q(yta) => [
+ q(7674),
+ q(0),
+ ],
+ q(ytl) => [
+ q(7675),
+ q(0),
+ ],
+ q(ytp) => [
+ q(7676),
+ q(0),
+ ],
+ q(ytw) => [
+ q(7677),
+ q(0),
+ ],
+ q(yua) => [
+ q(7678),
+ q(0),
+ ],
+ q(yub) => [
+ q(7679),
+ q(0),
+ ],
+ q(yuc) => [
+ q(7680),
+ q(0),
+ ],
+ q(yud) => [
+ q(7681),
+ q(0),
+ ],
+ q(yue) => [
+ q(7682),
+ q(0),
+ ],
+ q(yuf) => [
+ q(7683),
+ q(0),
+ ],
+ q(yug) => [
+ q(7684),
+ q(0),
+ ],
+ q(yui) => [
+ q(7685),
+ q(0),
+ ],
+ q(yuj) => [
+ q(7686),
+ q(0),
+ ],
+ q(yuk) => [
+ q(7687),
+ q(0),
+ ],
+ q(yul) => [
+ q(7688),
+ q(0),
+ ],
+ q(yum) => [
+ q(7689),
+ q(0),
+ ],
+ q(yun) => [
+ q(7690),
+ q(0),
+ ],
+ q(yup) => [
+ q(7691),
+ q(0),
+ ],
+ q(yuq) => [
+ q(7692),
+ q(0),
+ ],
+ q(yur) => [
+ q(7693),
+ q(0),
+ ],
+ q(yut) => [
+ q(7694),
+ q(0),
+ ],
+ q(yuu) => [
+ q(7695),
+ q(0),
+ ],
+ q(yuw) => [
+ q(7696),
+ q(0),
+ ],
+ q(yux) => [
+ q(7697),
+ q(0),
+ ],
+ q(yuy) => [
+ q(7698),
+ q(0),
+ ],
+ q(yuz) => [
+ q(7699),
+ q(0),
+ ],
+ q(yva) => [
+ q(7700),
+ q(0),
+ ],
+ q(yvt) => [
+ q(7701),
+ q(0),
+ ],
+ q(ywa) => [
+ q(7702),
+ q(0),
+ ],
+ q(ywl) => [
+ q(7703),
+ q(0),
+ ],
+ q(ywn) => [
+ q(7704),
+ q(0),
+ ],
+ q(ywq) => [
+ q(7705),
+ q(0),
+ ],
+ q(ywr) => [
+ q(7706),
+ q(0),
+ ],
+ q(ywt) => [
+ q(7707),
+ q(0),
+ ],
+ q(ywu) => [
+ q(7708),
+ q(0),
+ ],
+ q(yww) => [
+ q(7709),
+ q(0),
+ ],
+ q(yxg) => [
+ q(7710),
+ q(0),
+ ],
+ q(yxy) => [
+ q(7711),
+ q(0),
+ ],
+ q(yyu) => [
+ q(7712),
+ q(0),
+ ],
+ q(yyz) => [
+ q(7713),
+ q(0),
+ ],
+ q(yzg) => [
+ q(7714),
+ q(0),
+ ],
+ q(yzk) => [
+ q(7715),
+ q(0),
+ ],
+ q(zaa) => [
+ q(7716),
+ q(0),
+ ],
+ q(zab) => [
+ q(7717),
+ q(0),
+ ],
+ q(zac) => [
+ q(7718),
+ q(0),
+ ],
+ q(zad) => [
+ q(7719),
+ q(0),
+ ],
+ q(zae) => [
+ q(7720),
+ q(0),
+ ],
+ q(zaf) => [
+ q(7721),
+ q(0),
+ ],
+ q(zag) => [
+ q(7722),
+ q(0),
+ ],
+ q(zah) => [
+ q(7723),
+ q(0),
+ ],
+ q(zai) => [
+ q(7724),
+ q(0),
+ ],
+ q(zaj) => [
+ q(7725),
+ q(0),
+ ],
+ q(zak) => [
+ q(7726),
+ q(0),
+ ],
+ q(zal) => [
+ q(7727),
+ q(0),
+ ],
+ q(zam) => [
+ q(7728),
+ q(0),
+ ],
+ q(zao) => [
+ q(7729),
+ q(0),
+ ],
+ q(zap) => [
+ q(0477),
+ q(0),
+ ],
+ q(zaq) => [
+ q(7730),
+ q(0),
+ ],
+ q(zar) => [
+ q(7731),
+ q(0),
+ ],
+ q(zas) => [
+ q(7732),
+ q(0),
+ ],
+ q(zat) => [
+ q(7733),
+ q(0),
+ ],
+ q(zau) => [
+ q(7734),
+ q(0),
+ ],
+ q(zav) => [
+ q(7735),
+ q(0),
+ ],
+ q(zaw) => [
+ q(7736),
+ q(0),
+ ],
+ q(zax) => [
+ q(7737),
+ q(0),
+ ],
+ q(zay) => [
+ q(7738),
+ q(0),
+ ],
+ q(zaz) => [
+ q(7739),
+ q(0),
+ ],
+ q(zbc) => [
+ q(7740),
+ q(0),
+ ],
+ q(zbe) => [
+ q(7741),
+ q(0),
+ ],
+ q(zbl) => [
+ q(0478),
+ q(0),
+ ],
+ q(zbt) => [
+ q(7742),
+ q(0),
+ ],
+ q(zbw) => [
+ q(7743),
+ q(0),
+ ],
+ q(zca) => [
+ q(7744),
+ q(0),
+ ],
+ q(zch) => [
+ q(7745),
+ q(0),
+ ],
+ q(zdj) => [
+ q(7746),
+ q(0),
+ ],
+ q(zea) => [
+ q(7747),
+ q(0),
+ ],
+ q(zeg) => [
+ q(7748),
+ q(0),
+ ],
+ q(zeh) => [
+ q(7749),
+ q(0),
+ ],
+ q(zen) => [
+ q(0479),
+ q(0),
+ ],
+ q(zga) => [
+ q(7750),
+ q(0),
+ ],
+ q(zgb) => [
+ q(7751),
+ q(0),
+ ],
+ q(zgh) => [
+ q(0480),
+ q(0),
+ ],
+ q(zgm) => [
+ q(7752),
+ q(0),
+ ],
+ q(zgn) => [
+ q(7753),
+ q(0),
+ ],
+ q(zgr) => [
+ q(7754),
+ q(0),
+ ],
+ q(zha) => [
+ q(0481),
+ q(0),
+ ],
+ q(zhb) => [
+ q(7755),
+ q(0),
+ ],
+ q(zhd) => [
+ q(7756),
+ q(0),
+ ],
+ q(zhi) => [
+ q(7757),
+ q(0),
+ ],
+ q(zhn) => [
+ q(7758),
+ q(0),
+ ],
+ q(zhw) => [
+ q(7759),
+ q(0),
+ ],
+ q(zhx) => [
+ q(0533),
+ q(0),
+ ],
+ q(zia) => [
+ q(7760),
+ q(0),
+ ],
+ q(zib) => [
+ q(7761),
+ q(0),
+ ],
+ q(zik) => [
+ q(7762),
+ q(0),
+ ],
+ q(zil) => [
+ q(7763),
+ q(0),
+ ],
+ q(zim) => [
+ q(7764),
+ q(0),
+ ],
+ q(zin) => [
+ q(7765),
+ q(0),
+ ],
+ q(zir) => [
+ q(7766),
+ q(0),
+ ],
+ q(ziw) => [
+ q(7767),
+ q(0),
+ ],
+ q(ziz) => [
+ q(7768),
+ q(0),
+ ],
+ q(zka) => [
+ q(7769),
+ q(0),
+ ],
+ q(zkb) => [
+ q(7770),
+ q(0),
+ ],
+ q(zkd) => [
+ q(7771),
+ q(0),
+ ],
+ q(zkg) => [
+ q(7772),
+ q(0),
+ ],
+ q(zkh) => [
+ q(7773),
+ q(0),
+ ],
+ q(zkk) => [
+ q(7774),
+ q(0),
+ ],
+ q(zkn) => [
+ q(7775),
+ q(0),
+ ],
+ q(zko) => [
+ q(7776),
+ q(0),
+ ],
+ q(zkp) => [
+ q(7777),
+ q(0),
+ ],
+ q(zkr) => [
+ q(7778),
+ q(0),
+ ],
+ q(zkt) => [
+ q(7779),
+ q(0),
+ ],
+ q(zku) => [
+ q(7780),
+ q(0),
+ ],
+ q(zkv) => [
+ q(7781),
+ q(0),
+ ],
+ q(zkz) => [
+ q(7782),
+ q(0),
+ ],
+ q(zle) => [
+ q(0534),
+ q(0),
+ ],
+ q(zlj) => [
+ q(7783),
+ q(0),
+ ],
+ q(zlm) => [
+ q(7784),
+ q(0),
+ ],
+ q(zln) => [
+ q(7785),
+ q(0),
+ ],
+ q(zlq) => [
+ q(7786),
+ q(0),
+ ],
+ q(zls) => [
+ q(0535),
+ q(0),
+ ],
+ q(zlw) => [
+ q(0536),
+ q(0),
+ ],
+ q(zma) => [
+ q(7787),
+ q(0),
+ ],
+ q(zmb) => [
+ q(7788),
+ q(0),
+ ],
+ q(zmc) => [
+ q(7789),
+ q(0),
+ ],
+ q(zmd) => [
+ q(7790),
+ q(0),
+ ],
+ q(zme) => [
+ q(7791),
+ q(0),
+ ],
+ q(zmf) => [
+ q(7792),
+ q(0),
+ ],
+ q(zmg) => [
+ q(7793),
+ q(0),
+ ],
+ q(zmh) => [
+ q(7794),
+ q(0),
+ ],
+ q(zmi) => [
+ q(7795),
+ q(0),
+ ],
+ q(zmj) => [
+ q(7796),
+ q(0),
+ ],
+ q(zmk) => [
+ q(7797),
+ q(0),
+ ],
+ q(zml) => [
+ q(7798),
+ q(0),
+ ],
+ q(zmm) => [
+ q(7799),
+ q(0),
+ ],
+ q(zmn) => [
+ q(7800),
+ q(0),
+ ],
+ q(zmo) => [
+ q(7801),
+ q(0),
+ ],
+ q(zmp) => [
+ q(7802),
+ q(0),
+ ],
+ q(zmq) => [
+ q(7803),
+ q(0),
+ ],
+ q(zmr) => [
+ q(7804),
+ q(0),
+ ],
+ q(zms) => [
+ q(7805),
+ q(0),
+ ],
+ q(zmt) => [
+ q(7806),
+ q(0),
+ ],
+ q(zmu) => [
+ q(7807),
+ q(0),
+ ],
+ q(zmv) => [
+ q(7808),
+ q(0),
+ ],
+ q(zmw) => [
+ q(7809),
+ q(0),
+ ],
+ q(zmx) => [
+ q(7810),
+ q(0),
+ ],
+ q(zmy) => [
+ q(7811),
+ q(0),
+ ],
+ q(zmz) => [
+ q(7812),
+ q(0),
+ ],
+ q(zna) => [
+ q(7813),
+ q(0),
+ ],
+ q(znd) => [
+ q(0482),
+ q(0),
+ ],
+ q(zne) => [
+ q(7814),
+ q(0),
+ ],
+ q(zng) => [
+ q(7815),
+ q(0),
+ ],
+ q(znk) => [
+ q(7816),
+ q(0),
+ ],
+ q(zns) => [
+ q(7817),
+ q(0),
+ ],
+ q(zoc) => [
+ q(7818),
+ q(0),
+ ],
+ q(zoh) => [
+ q(7819),
+ q(0),
+ ],
+ q(zom) => [
+ q(7820),
+ q(0),
+ ],
+ q(zoo) => [
+ q(7821),
+ q(0),
+ ],
+ q(zoq) => [
+ q(7822),
+ q(0),
+ ],
+ q(zor) => [
+ q(7823),
+ q(0),
+ ],
+ q(zos) => [
+ q(7824),
+ q(0),
+ ],
+ q(zpa) => [
+ q(7825),
+ q(0),
+ ],
+ q(zpb) => [
+ q(7826),
+ q(0),
+ ],
+ q(zpc) => [
+ q(7827),
+ q(0),
+ ],
+ q(zpd) => [
+ q(7828),
+ q(0),
+ ],
+ q(zpe) => [
+ q(7829),
+ q(0),
+ ],
+ q(zpf) => [
+ q(7830),
+ q(0),
+ ],
+ q(zpg) => [
+ q(7831),
+ q(0),
+ ],
+ q(zph) => [
+ q(7832),
+ q(0),
+ ],
+ q(zpi) => [
+ q(7833),
+ q(0),
+ ],
+ q(zpj) => [
+ q(7834),
+ q(0),
+ ],
+ q(zpk) => [
+ q(7835),
+ q(0),
+ ],
+ q(zpl) => [
+ q(7836),
+ q(0),
+ ],
+ q(zpm) => [
+ q(7837),
+ q(0),
+ ],
+ q(zpn) => [
+ q(7838),
+ q(0),
+ ],
+ q(zpo) => [
+ q(7839),
+ q(0),
+ ],
+ q(zpp) => [
+ q(7840),
+ q(0),
+ ],
+ q(zpq) => [
+ q(7841),
+ q(0),
+ ],
+ q(zpr) => [
+ q(7842),
+ q(0),
+ ],
+ q(zps) => [
+ q(7843),
+ q(0),
+ ],
+ q(zpt) => [
+ q(7844),
+ q(0),
+ ],
+ q(zpu) => [
+ q(7845),
+ q(0),
+ ],
+ q(zpv) => [
+ q(7846),
+ q(0),
+ ],
+ q(zpw) => [
+ q(7847),
+ q(0),
+ ],
+ q(zpx) => [
+ q(7848),
+ q(0),
+ ],
+ q(zpy) => [
+ q(7849),
+ q(0),
+ ],
+ q(zpz) => [
+ q(7850),
+ q(0),
+ ],
+ q(zqe) => [
+ q(7851),
+ q(0),
+ ],
+ q(zra) => [
+ q(7852),
+ q(0),
+ ],
+ q(zrg) => [
+ q(7853),
+ q(0),
+ ],
+ q(zrn) => [
+ q(7854),
+ q(0),
+ ],
+ q(zro) => [
+ q(7855),
+ q(0),
+ ],
+ q(zrp) => [
+ q(7856),
+ q(0),
+ ],
+ q(zrs) => [
+ q(7857),
+ q(0),
+ ],
+ q(zsa) => [
+ q(7858),
+ q(0),
+ ],
+ q(zsk) => [
+ q(7859),
+ q(0),
+ ],
+ q(zsl) => [
+ q(7860),
+ q(0),
+ ],
+ q(zsm) => [
+ q(7861),
+ q(0),
+ ],
+ q(zsr) => [
+ q(7862),
+ q(0),
+ ],
+ q(zsu) => [
+ q(7863),
+ q(0),
+ ],
+ q(zte) => [
+ q(7864),
+ q(0),
+ ],
+ q(ztg) => [
+ q(7865),
+ q(0),
+ ],
+ q(ztl) => [
+ q(7866),
+ q(0),
+ ],
+ q(ztm) => [
+ q(7867),
+ q(0),
+ ],
+ q(ztn) => [
+ q(7868),
+ q(0),
+ ],
+ q(ztp) => [
+ q(7869),
+ q(0),
+ ],
+ q(ztq) => [
+ q(7870),
+ q(0),
+ ],
+ q(zts) => [
+ q(7871),
+ q(0),
+ ],
+ q(ztt) => [
+ q(7872),
+ q(0),
+ ],
+ q(ztu) => [
+ q(7873),
+ q(0),
+ ],
+ q(ztx) => [
+ q(7874),
+ q(0),
+ ],
+ q(zty) => [
+ q(7875),
+ q(0),
+ ],
+ q(zua) => [
+ q(7876),
+ q(0),
+ ],
+ q(zuh) => [
+ q(7877),
+ q(0),
+ ],
+ q(zul) => [
+ q(0483),
+ q(0),
+ ],
+ q(zum) => [
+ q(7878),
+ q(0),
+ ],
+ q(zun) => [
+ q(0484),
+ q(0),
+ ],
+ q(zuy) => [
+ q(7879),
+ q(0),
+ ],
+ q(zwa) => [
+ q(7880),
+ q(0),
+ ],
+ q(zxx) => [
+ q(0485),
+ q(0),
+ ],
+ q(zyb) => [
+ q(7881),
+ q(0),
+ ],
+ q(zyg) => [
+ q(7882),
+ q(0),
+ ],
+ q(zyj) => [
+ q(7883),
+ q(0),
+ ],
+ q(zyn) => [
+ q(7884),
+ q(0),
+ ],
+ q(zyp) => [
+ q(7885),
+ q(0),
+ ],
+ q(zza) => [
+ q(0486),
+ q(0),
+ ],
+ q(zzj) => [
+ q(7886),
+ q(0),
+ ],
+ },
+ q(term) => {
+ q(bod) => [
+ q(0427),
+ q(0),
+ ],
+ q(ces) => [
+ q(0101),
+ q(0),
+ ],
+ q(cym) => [
+ q(0466),
+ q(0),
+ ],
+ q(deu) => [
+ q(0150),
+ q(0),
+ ],
+ q(ell) => [
+ q(0164),
+ q(0),
+ ],
+ q(eus) => [
+ q(0044),
+ q(0),
+ ],
+ q(fas) => [
+ q(0342),
+ q(0),
+ ],
+ q(fra) => [
+ q(0137),
+ q(0),
+ ],
+ q(hye) => [
+ q(0024),
+ q(0),
+ ],
+ q(isl) => [
+ q(0187),
+ q(0),
+ ],
+ q(kat) => [
+ q(0149),
+ q(0),
+ ],
+ q(mkd) => [
+ q(0262),
+ q(0),
+ ],
+ q(mri) => [
+ q(0270),
+ q(0),
+ ],
+ q(msa) => [
+ q(0274),
+ q(0),
+ ],
+ q(mya) => [
+ q(0066),
+ q(0),
+ ],
+ q(nld) => [
+ q(0116),
+ q(0),
+ ],
+ q(ron) => [
+ q(0360),
+ q(0),
+ ],
+ q(slk) => [
+ q(0385),
+ q(0),
+ ],
+ q(sqi) => [
+ q(0013),
+ q(0),
+ ],
+ q(zho) => [
+ q(0079),
+ q(0),
+ ],
+ },
+};
+
+$Locale::Codes::Data{'language'}{'id2code'} = {
+ q(alpha-2) => {
+ q(0001) => q(aa),
+ q(0002) => q(ab),
+ q(0009) => q(af),
+ q(0011) => q(ak),
+ q(0013) => q(sq),
+ q(0017) => q(am),
+ q(0021) => q(ar),
+ q(0023) => q(an),
+ q(0024) => q(hy),
+ q(0029) => q(as),
+ q(0033) => q(av),
+ q(0034) => q(ae),
+ q(0036) => q(ay),
+ q(0037) => q(az),
+ q(0040) => q(ba),
+ q(0042) => q(bm),
+ q(0044) => q(eu),
+ q(0048) => q(be),
+ q(0050) => q(bn),
+ q(0053) => q(bh),
+ q(0056) => q(bi),
+ q(0059) => q(bs),
+ q(0061) => q(br),
+ q(0065) => q(bg),
+ q(0066) => q(my),
+ q(0071) => q(ca),
+ q(0075) => q(ch),
+ q(0077) => q(ce),
+ q(0079) => q(zh),
+ q(0086) => q(cu),
+ q(0087) => q(cv),
+ q(0091) => q(kw),
+ q(0092) => q(co),
+ q(0096) => q(cr),
+ q(0101) => q(cs),
+ q(0103) => q(da),
+ q(0110) => q(dv),
+ q(0116) => q(nl),
+ q(0118) => q(dz),
+ q(0123) => q(en),
+ q(0125) => q(eo),
+ q(0126) => q(et),
+ q(0127) => q(ee),
+ q(0130) => q(fo),
+ q(0132) => q(fj),
+ q(0134) => q(fi),
+ q(0137) => q(fr),
+ q(0142) => q(fy),
+ q(0143) => q(ff),
+ q(0149) => q(ka),
+ q(0150) => q(de),
+ q(0153) => q(gd),
+ q(0154) => q(ga),
+ q(0155) => q(gl),
+ q(0156) => q(gv),
+ q(0164) => q(el),
+ q(0165) => q(gn),
+ q(0167) => q(gu),
+ q(0170) => q(ht),
+ q(0171) => q(ha),
+ q(0173) => q(he),
+ q(0174) => q(hz),
+ q(0177) => q(hi),
+ q(0180) => q(ho),
+ q(0181) => q(hr),
+ q(0183) => q(hu),
+ q(0186) => q(ig),
+ q(0187) => q(is),
+ q(0188) => q(io),
+ q(0189) => q(ii),
+ q(0191) => q(iu),
+ q(0192) => q(ie),
+ q(0194) => q(ia),
+ q(0196) => q(id),
+ q(0199) => q(ik),
+ q(0202) => q(it),
+ q(0203) => q(jv),
+ q(0205) => q(ja),
+ q(0211) => q(kl),
+ q(0213) => q(kn),
+ q(0215) => q(ks),
+ q(0216) => q(kr),
+ q(0218) => q(kk),
+ q(0222) => q(km),
+ q(0224) => q(ki),
+ q(0225) => q(rw),
+ q(0226) => q(ky),
+ q(0229) => q(kv),
+ q(0230) => q(kg),
+ q(0231) => q(ko),
+ q(0238) => q(kj),
+ q(0240) => q(ku),
+ q(0245) => q(lo),
+ q(0246) => q(la),
+ q(0247) => q(lv),
+ q(0249) => q(li),
+ q(0250) => q(ln),
+ q(0251) => q(lt),
+ q(0254) => q(lb),
+ q(0256) => q(lu),
+ q(0257) => q(lg),
+ q(0262) => q(mk),
+ q(0265) => q(mh),
+ q(0268) => q(ml),
+ q(0270) => q(mi),
+ q(0272) => q(mr),
+ q(0274) => q(ms),
+ q(0283) => q(mg),
+ q(0284) => q(mt),
+ q(0289) => q(mn),
+ q(0301) => q(na),
+ q(0302) => q(nv),
+ q(0303) => q(nr),
+ q(0304) => q(nd),
+ q(0305) => q(ng),
+ q(0307) => q(ne),
+ q(0312) => q(nn),
+ q(0313) => q(nb),
+ q(0316) => q(no),
+ q(0321) => q(ny),
+ q(0326) => q(oc),
+ q(0327) => q(oj),
+ q(0328) => q(or),
+ q(0329) => q(om),
+ q(0331) => q(os),
+ q(0338) => q(pa),
+ q(0342) => q(fa),
+ q(0345) => q(pi),
+ q(0346) => q(pl),
+ q(0348) => q(pt),
+ q(0351) => q(ps),
+ q(0353) => q(qu),
+ q(0358) => q(rm),
+ q(0360) => q(ro),
+ q(0361) => q(rn),
+ q(0363) => q(ru),
+ q(0365) => q(sg),
+ q(0370) => q(sa),
+ q(0381) => q(si),
+ q(0385) => q(sk),
+ q(0386) => q(sl),
+ q(0388) => q(se),
+ q(0392) => q(sm),
+ q(0394) => q(sn),
+ q(0395) => q(sd),
+ q(0398) => q(so),
+ q(0400) => q(st),
+ q(0401) => q(es),
+ q(0402) => q(sc),
+ q(0404) => q(sr),
+ q(0407) => q(ss),
+ q(0409) => q(su),
+ q(0412) => q(sw),
+ q(0413) => q(sv),
+ q(0416) => q(ty),
+ q(0418) => q(ta),
+ q(0419) => q(tt),
+ q(0420) => q(te),
+ q(0424) => q(tg),
+ q(0425) => q(tl),
+ q(0426) => q(th),
+ q(0427) => q(bo),
+ q(0429) => q(ti),
+ q(0436) => q(to),
+ q(0439) => q(tn),
+ q(0440) => q(ts),
+ q(0441) => q(tk),
+ q(0444) => q(tr),
+ q(0447) => q(tw),
+ q(0451) => q(ug),
+ q(0452) => q(uk),
+ q(0455) => q(ur),
+ q(0456) => q(uz),
+ q(0458) => q(ve),
+ q(0459) => q(vi),
+ q(0460) => q(vo),
+ q(0466) => q(cy),
+ q(0468) => q(wa),
+ q(0469) => q(wo),
+ q(0471) => q(xh),
+ q(0474) => q(yi),
+ q(0475) => q(yo),
+ q(0481) => q(za),
+ q(0483) => q(zu),
+ q(0537) => q(sh),
+ },
+ q(alpha-3) => {
+ q(0001) => q(aar),
+ q(0002) => q(abk),
+ q(0003) => q(ace),
+ q(0004) => q(ach),
+ q(0005) => q(ada),
+ q(0006) => q(ady),
+ q(0007) => q(afa),
+ q(0008) => q(afh),
+ q(0009) => q(afr),
+ q(0010) => q(ain),
+ q(0011) => q(aka),
+ q(0012) => q(akk),
+ q(0013) => q(alb),
+ q(0014) => q(ale),
+ q(0015) => q(alg),
+ q(0016) => q(alt),
+ q(0017) => q(amh),
+ q(0018) => q(ang),
+ q(0019) => q(anp),
+ q(0020) => q(apa),
+ q(0021) => q(ara),
+ q(0022) => q(arc),
+ q(0023) => q(arg),
+ q(0024) => q(arm),
+ q(0025) => q(arn),
+ q(0026) => q(arp),
+ q(0027) => q(art),
+ q(0028) => q(arw),
+ q(0029) => q(asm),
+ q(0030) => q(ast),
+ q(0031) => q(ath),
+ q(0032) => q(aus),
+ q(0033) => q(ava),
+ q(0034) => q(ave),
+ q(0035) => q(awa),
+ q(0036) => q(aym),
+ q(0037) => q(aze),
+ q(0038) => q(bad),
+ q(0039) => q(bai),
+ q(0040) => q(bak),
+ q(0041) => q(bal),
+ q(0042) => q(bam),
+ q(0043) => q(ban),
+ q(0044) => q(baq),
+ q(0045) => q(bas),
+ q(0046) => q(bat),
+ q(0047) => q(bej),
+ q(0048) => q(bel),
+ q(0049) => q(bem),
+ q(0050) => q(ben),
+ q(0051) => q(ber),
+ q(0052) => q(bho),
+ q(0053) => q(bih),
+ q(0054) => q(bik),
+ q(0055) => q(bin),
+ q(0056) => q(bis),
+ q(0057) => q(bla),
+ q(0058) => q(bnt),
+ q(0059) => q(bos),
+ q(0060) => q(bra),
+ q(0061) => q(bre),
+ q(0062) => q(btk),
+ q(0063) => q(bua),
+ q(0064) => q(bug),
+ q(0065) => q(bul),
+ q(0066) => q(bur),
+ q(0067) => q(byn),
+ q(0068) => q(cad),
+ q(0069) => q(cai),
+ q(0070) => q(car),
+ q(0071) => q(cat),
+ q(0072) => q(cau),
+ q(0073) => q(ceb),
+ q(0074) => q(cel),
+ q(0075) => q(cha),
+ q(0076) => q(chb),
+ q(0077) => q(che),
+ q(0078) => q(chg),
+ q(0079) => q(chi),
+ q(0080) => q(chk),
+ q(0081) => q(chm),
+ q(0082) => q(chn),
+ q(0083) => q(cho),
+ q(0084) => q(chp),
+ q(0085) => q(chr),
+ q(0086) => q(chu),
+ q(0087) => q(chv),
+ q(0088) => q(chy),
+ q(0089) => q(cmc),
+ q(0090) => q(cop),
+ q(0091) => q(cor),
+ q(0092) => q(cos),
+ q(0093) => q(cpe),
+ q(0094) => q(cpf),
+ q(0095) => q(cpp),
+ q(0096) => q(cre),
+ q(0097) => q(crh),
+ q(0098) => q(crp),
+ q(0099) => q(csb),
+ q(0100) => q(cus),
+ q(0101) => q(cze),
+ q(0102) => q(dak),
+ q(0103) => q(dan),
+ q(0104) => q(dar),
+ q(0105) => q(day),
+ q(0106) => q(del),
+ q(0107) => q(den),
+ q(0108) => q(dgr),
+ q(0109) => q(din),
+ q(0110) => q(div),
+ q(0111) => q(doi),
+ q(0112) => q(dra),
+ q(0113) => q(dsb),
+ q(0114) => q(dua),
+ q(0115) => q(dum),
+ q(0116) => q(dut),
+ q(0117) => q(dyu),
+ q(0118) => q(dzo),
+ q(0119) => q(efi),
+ q(0120) => q(egy),
+ q(0121) => q(eka),
+ q(0122) => q(elx),
+ q(0123) => q(eng),
+ q(0124) => q(enm),
+ q(0125) => q(epo),
+ q(0126) => q(est),
+ q(0127) => q(ewe),
+ q(0128) => q(ewo),
+ q(0129) => q(fan),
+ q(0130) => q(fao),
+ q(0131) => q(fat),
+ q(0132) => q(fij),
+ q(0133) => q(fil),
+ q(0134) => q(fin),
+ q(0135) => q(fiu),
+ q(0136) => q(fon),
+ q(0137) => q(fre),
+ q(0138) => q(frm),
+ q(0139) => q(fro),
+ q(0140) => q(frr),
+ q(0141) => q(frs),
+ q(0142) => q(fry),
+ q(0143) => q(ful),
+ q(0144) => q(fur),
+ q(0145) => q(gaa),
+ q(0146) => q(gay),
+ q(0147) => q(gba),
+ q(0148) => q(gem),
+ q(0149) => q(geo),
+ q(0150) => q(ger),
+ q(0151) => q(gez),
+ q(0152) => q(gil),
+ q(0153) => q(gla),
+ q(0154) => q(gle),
+ q(0155) => q(glg),
+ q(0156) => q(glv),
+ q(0157) => q(gmh),
+ q(0158) => q(goh),
+ q(0159) => q(gon),
+ q(0160) => q(gor),
+ q(0161) => q(got),
+ q(0162) => q(grb),
+ q(0163) => q(grc),
+ q(0164) => q(gre),
+ q(0165) => q(grn),
+ q(0166) => q(gsw),
+ q(0167) => q(guj),
+ q(0168) => q(gwi),
+ q(0169) => q(hai),
+ q(0170) => q(hat),
+ q(0171) => q(hau),
+ q(0172) => q(haw),
+ q(0173) => q(heb),
+ q(0174) => q(her),
+ q(0175) => q(hil),
+ q(0176) => q(him),
+ q(0177) => q(hin),
+ q(0178) => q(hit),
+ q(0179) => q(hmn),
+ q(0180) => q(hmo),
+ q(0181) => q(hrv),
+ q(0182) => q(hsb),
+ q(0183) => q(hun),
+ q(0184) => q(hup),
+ q(0185) => q(iba),
+ q(0186) => q(ibo),
+ q(0187) => q(ice),
+ q(0188) => q(ido),
+ q(0189) => q(iii),
+ q(0190) => q(ijo),
+ q(0191) => q(iku),
+ q(0192) => q(ile),
+ q(0193) => q(ilo),
+ q(0194) => q(ina),
+ q(0195) => q(inc),
+ q(0196) => q(ind),
+ q(0197) => q(ine),
+ q(0198) => q(inh),
+ q(0199) => q(ipk),
+ q(0200) => q(ira),
+ q(0201) => q(iro),
+ q(0202) => q(ita),
+ q(0203) => q(jav),
+ q(0204) => q(jbo),
+ q(0205) => q(jpn),
+ q(0206) => q(jpr),
+ q(0207) => q(jrb),
+ q(0208) => q(kaa),
+ q(0209) => q(kab),
+ q(0210) => q(kac),
+ q(0211) => q(kal),
+ q(0212) => q(kam),
+ q(0213) => q(kan),
+ q(0214) => q(kar),
+ q(0215) => q(kas),
+ q(0216) => q(kau),
+ q(0217) => q(kaw),
+ q(0218) => q(kaz),
+ q(0219) => q(kbd),
+ q(0220) => q(kha),
+ q(0221) => q(khi),
+ q(0222) => q(khm),
+ q(0223) => q(kho),
+ q(0224) => q(kik),
+ q(0225) => q(kin),
+ q(0226) => q(kir),
+ q(0227) => q(kmb),
+ q(0228) => q(kok),
+ q(0229) => q(kom),
+ q(0230) => q(kon),
+ q(0231) => q(kor),
+ q(0232) => q(kos),
+ q(0233) => q(kpe),
+ q(0234) => q(krc),
+ q(0235) => q(krl),
+ q(0236) => q(kro),
+ q(0237) => q(kru),
+ q(0238) => q(kua),
+ q(0239) => q(kum),
+ q(0240) => q(kur),
+ q(0241) => q(kut),
+ q(0242) => q(lad),
+ q(0243) => q(lah),
+ q(0244) => q(lam),
+ q(0245) => q(lao),
+ q(0246) => q(lat),
+ q(0247) => q(lav),
+ q(0248) => q(lez),
+ q(0249) => q(lim),
+ q(0250) => q(lin),
+ q(0251) => q(lit),
+ q(0252) => q(lol),
+ q(0253) => q(loz),
+ q(0254) => q(ltz),
+ q(0255) => q(lua),
+ q(0256) => q(lub),
+ q(0257) => q(lug),
+ q(0258) => q(lui),
+ q(0259) => q(lun),
+ q(0260) => q(luo),
+ q(0261) => q(lus),
+ q(0262) => q(mac),
+ q(0263) => q(mad),
+ q(0264) => q(mag),
+ q(0265) => q(mah),
+ q(0266) => q(mai),
+ q(0267) => q(mak),
+ q(0268) => q(mal),
+ q(0269) => q(man),
+ q(0270) => q(mao),
+ q(0271) => q(map),
+ q(0272) => q(mar),
+ q(0273) => q(mas),
+ q(0274) => q(may),
+ q(0275) => q(mdf),
+ q(0276) => q(mdr),
+ q(0277) => q(men),
+ q(0278) => q(mga),
+ q(0279) => q(mic),
+ q(0280) => q(min),
+ q(0281) => q(mis),
+ q(0282) => q(mkh),
+ q(0283) => q(mlg),
+ q(0284) => q(mlt),
+ q(0285) => q(mnc),
+ q(0286) => q(mni),
+ q(0287) => q(mno),
+ q(0288) => q(moh),
+ q(0289) => q(mon),
+ q(0290) => q(mos),
+ q(0291) => q(mul),
+ q(0292) => q(mun),
+ q(0293) => q(mus),
+ q(0294) => q(mwl),
+ q(0295) => q(mwr),
+ q(0296) => q(myn),
+ q(0297) => q(myv),
+ q(0298) => q(nah),
+ q(0299) => q(nai),
+ q(0300) => q(nap),
+ q(0301) => q(nau),
+ q(0302) => q(nav),
+ q(0303) => q(nbl),
+ q(0304) => q(nde),
+ q(0305) => q(ndo),
+ q(0306) => q(nds),
+ q(0307) => q(nep),
+ q(0308) => q(new),
+ q(0309) => q(nia),
+ q(0310) => q(nic),
+ q(0311) => q(niu),
+ q(0312) => q(nno),
+ q(0313) => q(nob),
+ q(0314) => q(nog),
+ q(0315) => q(non),
+ q(0316) => q(nor),
+ q(0317) => q(nqo),
+ q(0318) => q(nso),
+ q(0319) => q(nub),
+ q(0320) => q(nwc),
+ q(0321) => q(nya),
+ q(0322) => q(nym),
+ q(0323) => q(nyn),
+ q(0324) => q(nyo),
+ q(0325) => q(nzi),
+ q(0326) => q(oci),
+ q(0327) => q(oji),
+ q(0328) => q(ori),
+ q(0329) => q(orm),
+ q(0330) => q(osa),
+ q(0331) => q(oss),
+ q(0332) => q(ota),
+ q(0333) => q(oto),
+ q(0334) => q(paa),
+ q(0335) => q(pag),
+ q(0336) => q(pal),
+ q(0337) => q(pam),
+ q(0338) => q(pan),
+ q(0339) => q(pap),
+ q(0340) => q(pau),
+ q(0341) => q(peo),
+ q(0342) => q(per),
+ q(0343) => q(phi),
+ q(0344) => q(phn),
+ q(0345) => q(pli),
+ q(0346) => q(pol),
+ q(0347) => q(pon),
+ q(0348) => q(por),
+ q(0349) => q(pra),
+ q(0350) => q(pro),
+ q(0351) => q(pus),
+ q(0352) => q(qtz),
+ q(0353) => q(que),
+ q(0354) => q(raj),
+ q(0355) => q(rap),
+ q(0356) => q(rar),
+ q(0357) => q(roa),
+ q(0358) => q(roh),
+ q(0359) => q(rom),
+ q(0360) => q(rum),
+ q(0361) => q(run),
+ q(0362) => q(rup),
+ q(0363) => q(rus),
+ q(0364) => q(sad),
+ q(0365) => q(sag),
+ q(0366) => q(sah),
+ q(0367) => q(sai),
+ q(0368) => q(sal),
+ q(0369) => q(sam),
+ q(0370) => q(san),
+ q(0371) => q(sas),
+ q(0372) => q(sat),
+ q(0373) => q(scn),
+ q(0374) => q(sco),
+ q(0375) => q(sel),
+ q(0376) => q(sem),
+ q(0377) => q(sga),
+ q(0378) => q(sgn),
+ q(0379) => q(shn),
+ q(0380) => q(sid),
+ q(0381) => q(sin),
+ q(0382) => q(sio),
+ q(0383) => q(sit),
+ q(0384) => q(sla),
+ q(0385) => q(slo),
+ q(0386) => q(slv),
+ q(0387) => q(sma),
+ q(0388) => q(sme),
+ q(0389) => q(smi),
+ q(0390) => q(smj),
+ q(0391) => q(smn),
+ q(0392) => q(smo),
+ q(0393) => q(sms),
+ q(0394) => q(sna),
+ q(0395) => q(snd),
+ q(0396) => q(snk),
+ q(0397) => q(sog),
+ q(0398) => q(som),
+ q(0399) => q(son),
+ q(0400) => q(sot),
+ q(0401) => q(spa),
+ q(0402) => q(srd),
+ q(0403) => q(srn),
+ q(0404) => q(srp),
+ q(0405) => q(srr),
+ q(0406) => q(ssa),
+ q(0407) => q(ssw),
+ q(0408) => q(suk),
+ q(0409) => q(sun),
+ q(0410) => q(sus),
+ q(0411) => q(sux),
+ q(0412) => q(swa),
+ q(0413) => q(swe),
+ q(0414) => q(syc),
+ q(0415) => q(syr),
+ q(0416) => q(tah),
+ q(0417) => q(tai),
+ q(0418) => q(tam),
+ q(0419) => q(tat),
+ q(0420) => q(tel),
+ q(0421) => q(tem),
+ q(0422) => q(ter),
+ q(0423) => q(tet),
+ q(0424) => q(tgk),
+ q(0425) => q(tgl),
+ q(0426) => q(tha),
+ q(0427) => q(tib),
+ q(0428) => q(tig),
+ q(0429) => q(tir),
+ q(0430) => q(tiv),
+ q(0431) => q(tkl),
+ q(0432) => q(tlh),
+ q(0433) => q(tli),
+ q(0434) => q(tmh),
+ q(0435) => q(tog),
+ q(0436) => q(ton),
+ q(0437) => q(tpi),
+ q(0438) => q(tsi),
+ q(0439) => q(tsn),
+ q(0440) => q(tso),
+ q(0441) => q(tuk),
+ q(0442) => q(tum),
+ q(0443) => q(tup),
+ q(0444) => q(tur),
+ q(0445) => q(tut),
+ q(0446) => q(tvl),
+ q(0447) => q(twi),
+ q(0448) => q(tyv),
+ q(0449) => q(udm),
+ q(0450) => q(uga),
+ q(0451) => q(uig),
+ q(0452) => q(ukr),
+ q(0453) => q(umb),
+ q(0454) => q(und),
+ q(0455) => q(urd),
+ q(0456) => q(uzb),
+ q(0457) => q(vai),
+ q(0458) => q(ven),
+ q(0459) => q(vie),
+ q(0460) => q(vol),
+ q(0461) => q(vot),
+ q(0462) => q(wak),
+ q(0463) => q(wal),
+ q(0464) => q(war),
+ q(0465) => q(was),
+ q(0466) => q(wel),
+ q(0467) => q(wen),
+ q(0468) => q(wln),
+ q(0469) => q(wol),
+ q(0470) => q(xal),
+ q(0471) => q(xho),
+ q(0472) => q(yao),
+ q(0473) => q(yap),
+ q(0474) => q(yid),
+ q(0475) => q(yor),
+ q(0476) => q(ypk),
+ q(0477) => q(zap),
+ q(0478) => q(zbl),
+ q(0479) => q(zen),
+ q(0480) => q(zgh),
+ q(0481) => q(zha),
+ q(0482) => q(znd),
+ q(0483) => q(zul),
+ q(0484) => q(zun),
+ q(0485) => q(zxx),
+ q(0486) => q(zza),
+ q(0487) => q(aav),
+ q(0488) => q(alv),
+ q(0489) => q(aqa),
+ q(0490) => q(aql),
+ q(0491) => q(auf),
+ q(0492) => q(awd),
+ q(0493) => q(azc),
+ q(0494) => q(cba),
+ q(0495) => q(ccn),
+ q(0496) => q(ccs),
+ q(0497) => q(cdc),
+ q(0498) => q(cdd),
+ q(0499) => q(csu),
+ q(0500) => q(dmn),
+ q(0501) => q(egx),
+ q(0502) => q(esx),
+ q(0503) => q(euq),
+ q(0504) => q(fox),
+ q(0505) => q(gme),
+ q(0506) => q(gmq),
+ q(0507) => q(gmw),
+ q(0508) => q(grk),
+ q(0509) => q(hmx),
+ q(0510) => q(hok),
+ q(0511) => q(hyx),
+ q(0512) => q(iir),
+ q(0513) => q(itc),
+ q(0514) => q(jpx),
+ q(0515) => q(kdo),
+ q(0516) => q(ngf),
+ q(0517) => q(omq),
+ q(0518) => q(omv),
+ q(0519) => q(plf),
+ q(0520) => q(poz),
+ q(0521) => q(pqe),
+ q(0522) => q(pqw),
+ q(0523) => q(qwe),
+ q(0524) => q(sdv),
+ q(0525) => q(sqj),
+ q(0526) => q(syd),
+ q(0527) => q(tbq),
+ q(0528) => q(trk),
+ q(0529) => q(tuw),
+ q(0530) => q(urj),
+ q(0531) => q(xgn),
+ q(0532) => q(xnd),
+ q(0533) => q(zhx),
+ q(0534) => q(zle),
+ q(0535) => q(zls),
+ q(0536) => q(zlw),
+ q(0538) => q(aaa),
+ q(0539) => q(aab),
+ q(0540) => q(aac),
+ q(0541) => q(aad),
+ q(0542) => q(aae),
+ q(0543) => q(aaf),
+ q(0544) => q(aag),
+ q(0545) => q(aah),
+ q(0546) => q(aai),
+ q(0547) => q(aak),
+ q(0548) => q(aal),
+ q(0549) => q(aam),
+ q(0550) => q(aan),
+ q(0551) => q(aao),
+ q(0552) => q(aap),
+ q(0553) => q(aaq),
+ q(0554) => q(aas),
+ q(0555) => q(aat),
+ q(0556) => q(aau),
+ q(0557) => q(aaw),
+ q(0558) => q(aax),
+ q(0559) => q(aaz),
+ q(0560) => q(aba),
+ q(0561) => q(abb),
+ q(0562) => q(abc),
+ q(0563) => q(abd),
+ q(0564) => q(abe),
+ q(0565) => q(abf),
+ q(0566) => q(abg),
+ q(0567) => q(abh),
+ q(0568) => q(abi),
+ q(0569) => q(abj),
+ q(0570) => q(abl),
+ q(0571) => q(abm),
+ q(0572) => q(abn),
+ q(0573) => q(abo),
+ q(0574) => q(abp),
+ q(0575) => q(abq),
+ q(0576) => q(abr),
+ q(0577) => q(abs),
+ q(0578) => q(abt),
+ q(0579) => q(abu),
+ q(0580) => q(abv),
+ q(0581) => q(abw),
+ q(0582) => q(abx),
+ q(0583) => q(aby),
+ q(0584) => q(abz),
+ q(0585) => q(aca),
+ q(0586) => q(acb),
+ q(0587) => q(acd),
+ q(0588) => q(acf),
+ q(0589) => q(aci),
+ q(0590) => q(ack),
+ q(0591) => q(acl),
+ q(0592) => q(acm),
+ q(0593) => q(acn),
+ q(0594) => q(acp),
+ q(0595) => q(acq),
+ q(0596) => q(acr),
+ q(0597) => q(acs),
+ q(0598) => q(act),
+ q(0599) => q(acu),
+ q(0600) => q(acv),
+ q(0601) => q(acw),
+ q(0602) => q(acx),
+ q(0603) => q(acy),
+ q(0604) => q(acz),
+ q(0605) => q(adb),
+ q(0606) => q(add),
+ q(0607) => q(ade),
+ q(0608) => q(adf),
+ q(0609) => q(adg),
+ q(0610) => q(adh),
+ q(0611) => q(adi),
+ q(0612) => q(adj),
+ q(0613) => q(adl),
+ q(0614) => q(adn),
+ q(0615) => q(ado),
+ q(0616) => q(adp),
+ q(0617) => q(adq),
+ q(0618) => q(adr),
+ q(0619) => q(ads),
+ q(0620) => q(adt),
+ q(0621) => q(adu),
+ q(0622) => q(adw),
+ q(0623) => q(adx),
+ q(0624) => q(adz),
+ q(0625) => q(aea),
+ q(0626) => q(aeb),
+ q(0627) => q(aec),
+ q(0628) => q(aed),
+ q(0629) => q(aee),
+ q(0630) => q(aek),
+ q(0631) => q(ael),
+ q(0632) => q(aem),
+ q(0633) => q(aen),
+ q(0634) => q(aeq),
+ q(0635) => q(aer),
+ q(0636) => q(aes),
+ q(0637) => q(aeu),
+ q(0638) => q(aew),
+ q(0639) => q(aey),
+ q(0640) => q(aez),
+ q(0641) => q(afb),
+ q(0642) => q(afd),
+ q(0643) => q(afe),
+ q(0644) => q(afg),
+ q(0645) => q(afi),
+ q(0646) => q(afk),
+ q(0647) => q(afn),
+ q(0648) => q(afo),
+ q(0649) => q(afp),
+ q(0650) => q(afs),
+ q(0651) => q(aft),
+ q(0652) => q(afu),
+ q(0653) => q(afz),
+ q(0654) => q(aga),
+ q(0655) => q(agb),
+ q(0656) => q(agc),
+ q(0657) => q(agd),
+ q(0658) => q(age),
+ q(0659) => q(agf),
+ q(0660) => q(agg),
+ q(0661) => q(agh),
+ q(0662) => q(agi),
+ q(0663) => q(agj),
+ q(0664) => q(agk),
+ q(0665) => q(agl),
+ q(0666) => q(agm),
+ q(0667) => q(agn),
+ q(0668) => q(ago),
+ q(0669) => q(agq),
+ q(0670) => q(agr),
+ q(0671) => q(ags),
+ q(0672) => q(agt),
+ q(0673) => q(agu),
+ q(0674) => q(agv),
+ q(0675) => q(agw),
+ q(0676) => q(agx),
+ q(0677) => q(agy),
+ q(0678) => q(agz),
+ q(0679) => q(aha),
+ q(0680) => q(ahb),
+ q(0681) => q(ahg),
+ q(0682) => q(ahh),
+ q(0683) => q(ahi),
+ q(0684) => q(ahk),
+ q(0685) => q(ahl),
+ q(0686) => q(ahm),
+ q(0687) => q(ahn),
+ q(0688) => q(aho),
+ q(0689) => q(ahp),
+ q(0690) => q(ahr),
+ q(0691) => q(ahs),
+ q(0692) => q(aht),
+ q(0693) => q(aia),
+ q(0694) => q(aib),
+ q(0695) => q(aic),
+ q(0696) => q(aid),
+ q(0697) => q(aie),
+ q(0698) => q(aif),
+ q(0699) => q(aig),
+ q(0700) => q(aih),
+ q(0701) => q(aii),
+ q(0702) => q(aij),
+ q(0703) => q(aik),
+ q(0704) => q(ail),
+ q(0705) => q(aim),
+ q(0706) => q(aio),
+ q(0707) => q(aip),
+ q(0708) => q(aiq),
+ q(0709) => q(air),
+ q(0710) => q(ais),
+ q(0711) => q(ait),
+ q(0712) => q(aiw),
+ q(0713) => q(aix),
+ q(0714) => q(aiy),
+ q(0715) => q(aja),
+ q(0716) => q(ajg),
+ q(0717) => q(aji),
+ q(0718) => q(ajn),
+ q(0719) => q(ajp),
+ q(0720) => q(ajt),
+ q(0721) => q(aju),
+ q(0722) => q(ajw),
+ q(0723) => q(ajz),
+ q(0724) => q(akb),
+ q(0725) => q(akc),
+ q(0726) => q(akd),
+ q(0727) => q(ake),
+ q(0728) => q(akf),
+ q(0729) => q(akg),
+ q(0730) => q(akh),
+ q(0731) => q(aki),
+ q(0732) => q(akj),
+ q(0733) => q(akl),
+ q(0734) => q(akm),
+ q(0735) => q(ako),
+ q(0736) => q(akp),
+ q(0737) => q(akq),
+ q(0738) => q(akr),
+ q(0739) => q(aks),
+ q(0740) => q(akt),
+ q(0741) => q(aku),
+ q(0742) => q(akv),
+ q(0743) => q(akw),
+ q(0744) => q(akx),
+ q(0745) => q(aky),
+ q(0746) => q(akz),
+ q(0747) => q(ala),
+ q(0748) => q(alc),
+ q(0749) => q(ald),
+ q(0750) => q(alf),
+ q(0751) => q(alh),
+ q(0752) => q(ali),
+ q(0753) => q(alj),
+ q(0754) => q(alk),
+ q(0755) => q(all),
+ q(0756) => q(alm),
+ q(0757) => q(aln),
+ q(0758) => q(alo),
+ q(0759) => q(alp),
+ q(0760) => q(alq),
+ q(0761) => q(alr),
+ q(0762) => q(als),
+ q(0763) => q(alu),
+ q(0764) => q(alw),
+ q(0765) => q(alx),
+ q(0766) => q(aly),
+ q(0767) => q(alz),
+ q(0768) => q(ama),
+ q(0769) => q(amb),
+ q(0770) => q(amc),
+ q(0771) => q(ame),
+ q(0772) => q(amf),
+ q(0773) => q(amg),
+ q(0774) => q(ami),
+ q(0775) => q(amj),
+ q(0776) => q(amk),
+ q(0777) => q(aml),
+ q(0778) => q(amm),
+ q(0779) => q(amn),
+ q(0780) => q(amo),
+ q(0781) => q(amp),
+ q(0782) => q(amq),
+ q(0783) => q(amr),
+ q(0784) => q(ams),
+ q(0785) => q(amt),
+ q(0786) => q(amu),
+ q(0787) => q(amv),
+ q(0788) => q(amw),
+ q(0789) => q(amx),
+ q(0790) => q(amy),
+ q(0791) => q(amz),
+ q(0792) => q(ana),
+ q(0793) => q(anb),
+ q(0794) => q(anc),
+ q(0795) => q(and),
+ q(0796) => q(ane),
+ q(0797) => q(anf),
+ q(0798) => q(anh),
+ q(0799) => q(ani),
+ q(0800) => q(anj),
+ q(0801) => q(ank),
+ q(0802) => q(anl),
+ q(0803) => q(anm),
+ q(0804) => q(ann),
+ q(0805) => q(ano),
+ q(0806) => q(anq),
+ q(0807) => q(anr),
+ q(0808) => q(ans),
+ q(0809) => q(ant),
+ q(0810) => q(anu),
+ q(0811) => q(anv),
+ q(0812) => q(anw),
+ q(0813) => q(anx),
+ q(0814) => q(any),
+ q(0815) => q(anz),
+ q(0816) => q(aoa),
+ q(0817) => q(aob),
+ q(0818) => q(aoc),
+ q(0819) => q(aod),
+ q(0820) => q(aoe),
+ q(0821) => q(aof),
+ q(0822) => q(aog),
+ q(0823) => q(aoh),
+ q(0824) => q(aoi),
+ q(0825) => q(aoj),
+ q(0826) => q(aok),
+ q(0827) => q(aol),
+ q(0828) => q(aom),
+ q(0829) => q(aon),
+ q(0830) => q(aor),
+ q(0831) => q(aos),
+ q(0832) => q(aot),
+ q(0833) => q(aou),
+ q(0834) => q(aox),
+ q(0835) => q(aoz),
+ q(0836) => q(apb),
+ q(0837) => q(apc),
+ q(0838) => q(apd),
+ q(0839) => q(ape),
+ q(0840) => q(apf),
+ q(0841) => q(apg),
+ q(0842) => q(aph),
+ q(0843) => q(api),
+ q(0844) => q(apj),
+ q(0845) => q(apk),
+ q(0846) => q(apl),
+ q(0847) => q(apm),
+ q(0848) => q(apn),
+ q(0849) => q(apo),
+ q(0850) => q(app),
+ q(0851) => q(apq),
+ q(0852) => q(apr),
+ q(0853) => q(aps),
+ q(0854) => q(apt),
+ q(0855) => q(apu),
+ q(0856) => q(apv),
+ q(0857) => q(apw),
+ q(0858) => q(apx),
+ q(0859) => q(apy),
+ q(0860) => q(apz),
+ q(0861) => q(aqc),
+ q(0862) => q(aqd),
+ q(0863) => q(aqg),
+ q(0864) => q(aqm),
+ q(0865) => q(aqn),
+ q(0866) => q(aqp),
+ q(0867) => q(aqr),
+ q(0868) => q(aqz),
+ q(0869) => q(arb),
+ q(0870) => q(ard),
+ q(0871) => q(are),
+ q(0872) => q(arh),
+ q(0873) => q(ari),
+ q(0874) => q(arj),
+ q(0875) => q(ark),
+ q(0876) => q(arl),
+ q(0877) => q(aro),
+ q(0878) => q(arq),
+ q(0879) => q(arr),
+ q(0880) => q(ars),
+ q(0881) => q(aru),
+ q(0882) => q(arv),
+ q(0883) => q(arx),
+ q(0884) => q(ary),
+ q(0885) => q(arz),
+ q(0886) => q(asa),
+ q(0887) => q(asb),
+ q(0888) => q(asc),
+ q(0889) => q(asd),
+ q(0890) => q(ase),
+ q(0891) => q(asf),
+ q(0892) => q(asg),
+ q(0893) => q(ash),
+ q(0894) => q(asi),
+ q(0895) => q(asj),
+ q(0896) => q(ask),
+ q(0897) => q(asl),
+ q(0898) => q(asn),
+ q(0899) => q(aso),
+ q(0900) => q(asp),
+ q(0901) => q(asq),
+ q(0902) => q(asr),
+ q(0903) => q(ass),
+ q(0904) => q(asu),
+ q(0905) => q(asv),
+ q(0906) => q(asw),
+ q(0907) => q(asx),
+ q(0908) => q(asy),
+ q(0909) => q(asz),
+ q(0910) => q(ata),
+ q(0911) => q(atb),
+ q(0912) => q(atc),
+ q(0913) => q(atd),
+ q(0914) => q(ate),
+ q(0915) => q(atg),
+ q(0916) => q(ati),
+ q(0917) => q(atj),
+ q(0918) => q(atk),
+ q(0919) => q(atl),
+ q(0920) => q(atm),
+ q(0921) => q(atn),
+ q(0922) => q(ato),
+ q(0923) => q(atp),
+ q(0924) => q(atq),
+ q(0925) => q(atr),
+ q(0926) => q(ats),
+ q(0927) => q(att),
+ q(0928) => q(atu),
+ q(0929) => q(atv),
+ q(0930) => q(atw),
+ q(0931) => q(atx),
+ q(0932) => q(aty),
+ q(0933) => q(atz),
+ q(0934) => q(aua),
+ q(0935) => q(aub),
+ q(0936) => q(auc),
+ q(0937) => q(aud),
+ q(0938) => q(aue),
+ q(0939) => q(aug),
+ q(0940) => q(auh),
+ q(0941) => q(aui),
+ q(0942) => q(auj),
+ q(0943) => q(auk),
+ q(0944) => q(aul),
+ q(0945) => q(aum),
+ q(0946) => q(aun),
+ q(0947) => q(auo),
+ q(0948) => q(aup),
+ q(0949) => q(auq),
+ q(0950) => q(aur),
+ q(0951) => q(aut),
+ q(0952) => q(auu),
+ q(0953) => q(auw),
+ q(0954) => q(aux),
+ q(0955) => q(auy),
+ q(0956) => q(auz),
+ q(0957) => q(avb),
+ q(0958) => q(avd),
+ q(0959) => q(avi),
+ q(0960) => q(avk),
+ q(0961) => q(avl),
+ q(0962) => q(avm),
+ q(0963) => q(avn),
+ q(0964) => q(avo),
+ q(0965) => q(avs),
+ q(0966) => q(avt),
+ q(0967) => q(avu),
+ q(0968) => q(avv),
+ q(0969) => q(awb),
+ q(0970) => q(awc),
+ q(0971) => q(awe),
+ q(0972) => q(awg),
+ q(0973) => q(awh),
+ q(0974) => q(awi),
+ q(0975) => q(awk),
+ q(0976) => q(awm),
+ q(0977) => q(awn),
+ q(0978) => q(awo),
+ q(0979) => q(awr),
+ q(0980) => q(aws),
+ q(0981) => q(awt),
+ q(0982) => q(awu),
+ q(0983) => q(awv),
+ q(0984) => q(aww),
+ q(0985) => q(awx),
+ q(0986) => q(awy),
+ q(0987) => q(axb),
+ q(0988) => q(axe),
+ q(0989) => q(axg),
+ q(0990) => q(axk),
+ q(0991) => q(axm),
+ q(0992) => q(axx),
+ q(0993) => q(aya),
+ q(0994) => q(ayb),
+ q(0995) => q(ayc),
+ q(0996) => q(ayd),
+ q(0997) => q(aye),
+ q(0998) => q(ayg),
+ q(0999) => q(ayh),
+ q(1000) => q(ayi),
+ q(1001) => q(ayk),
+ q(1002) => q(ayl),
+ q(1003) => q(ayn),
+ q(1004) => q(ayo),
+ q(1005) => q(ayp),
+ q(1006) => q(ayq),
+ q(1007) => q(ayr),
+ q(1008) => q(ays),
+ q(1009) => q(ayt),
+ q(1010) => q(ayu),
+ q(1011) => q(ayy),
+ q(1012) => q(ayz),
+ q(1013) => q(aza),
+ q(1014) => q(azb),
+ q(1015) => q(azd),
+ q(1016) => q(azg),
+ q(1017) => q(azj),
+ q(1018) => q(azm),
+ q(1019) => q(azn),
+ q(1020) => q(azo),
+ q(1021) => q(azt),
+ q(1022) => q(azz),
+ q(1023) => q(baa),
+ q(1024) => q(bab),
+ q(1025) => q(bac),
+ q(1026) => q(bae),
+ q(1027) => q(baf),
+ q(1028) => q(bag),
+ q(1029) => q(bah),
+ q(1030) => q(baj),
+ q(1031) => q(bao),
+ q(1032) => q(bap),
+ q(1033) => q(bar),
+ q(1034) => q(bau),
+ q(1035) => q(bav),
+ q(1036) => q(baw),
+ q(1037) => q(bax),
+ q(1038) => q(bay),
+ q(1039) => q(bba),
+ q(1040) => q(bbb),
+ q(1041) => q(bbc),
+ q(1042) => q(bbd),
+ q(1043) => q(bbe),
+ q(1044) => q(bbf),
+ q(1045) => q(bbg),
+ q(1046) => q(bbh),
+ q(1047) => q(bbi),
+ q(1048) => q(bbj),
+ q(1049) => q(bbk),
+ q(1050) => q(bbl),
+ q(1051) => q(bbm),
+ q(1052) => q(bbn),
+ q(1053) => q(bbo),
+ q(1054) => q(bbp),
+ q(1055) => q(bbq),
+ q(1056) => q(bbr),
+ q(1057) => q(bbs),
+ q(1058) => q(bbt),
+ q(1059) => q(bbu),
+ q(1060) => q(bbv),
+ q(1061) => q(bbw),
+ q(1062) => q(bbx),
+ q(1063) => q(bby),
+ q(1064) => q(bbz),
+ q(1065) => q(bca),
+ q(1066) => q(bcb),
+ q(1067) => q(bcc),
+ q(1068) => q(bcd),
+ q(1069) => q(bce),
+ q(1070) => q(bcf),
+ q(1071) => q(bcg),
+ q(1072) => q(bch),
+ q(1073) => q(bci),
+ q(1074) => q(bcj),
+ q(1075) => q(bck),
+ q(1076) => q(bcl),
+ q(1077) => q(bcm),
+ q(1078) => q(bcn),
+ q(1079) => q(bco),
+ q(1080) => q(bcp),
+ q(1081) => q(bcq),
+ q(1082) => q(bcr),
+ q(1083) => q(bcs),
+ q(1084) => q(bct),
+ q(1085) => q(bcu),
+ q(1086) => q(bcv),
+ q(1087) => q(bcw),
+ q(1088) => q(bcy),
+ q(1089) => q(bcz),
+ q(1090) => q(bda),
+ q(1091) => q(bdb),
+ q(1092) => q(bdc),
+ q(1093) => q(bdd),
+ q(1094) => q(bde),
+ q(1095) => q(bdf),
+ q(1096) => q(bdg),
+ q(1097) => q(bdh),
+ q(1098) => q(bdi),
+ q(1099) => q(bdj),
+ q(1100) => q(bdk),
+ q(1101) => q(bdl),
+ q(1102) => q(bdm),
+ q(1103) => q(bdn),
+ q(1104) => q(bdo),
+ q(1105) => q(bdp),
+ q(1106) => q(bdq),
+ q(1107) => q(bdr),
+ q(1108) => q(bds),
+ q(1109) => q(bdt),
+ q(1110) => q(bdu),
+ q(1111) => q(bdv),
+ q(1112) => q(bdw),
+ q(1113) => q(bdx),
+ q(1114) => q(bdy),
+ q(1115) => q(bdz),
+ q(1116) => q(bea),
+ q(1117) => q(beb),
+ q(1118) => q(bec),
+ q(1119) => q(bed),
+ q(1120) => q(bee),
+ q(1121) => q(bef),
+ q(1122) => q(beg),
+ q(1123) => q(beh),
+ q(1124) => q(bei),
+ q(1125) => q(bek),
+ q(1126) => q(beo),
+ q(1127) => q(bep),
+ q(1128) => q(beq),
+ q(1129) => q(bes),
+ q(1130) => q(bet),
+ q(1131) => q(beu),
+ q(1132) => q(bev),
+ q(1133) => q(bew),
+ q(1134) => q(bex),
+ q(1135) => q(bey),
+ q(1136) => q(bez),
+ q(1137) => q(mot),
+ q(1138) => q(bfb),
+ q(1139) => q(bfc),
+ q(1140) => q(bfd),
+ q(1141) => q(bfe),
+ q(1142) => q(bff),
+ q(1143) => q(bfg),
+ q(1144) => q(bfh),
+ q(1145) => q(bfi),
+ q(1146) => q(bfj),
+ q(1147) => q(bfk),
+ q(1148) => q(bfl),
+ q(1149) => q(bfm),
+ q(1150) => q(bfn),
+ q(1151) => q(bfo),
+ q(1152) => q(bfp),
+ q(1153) => q(bfq),
+ q(1154) => q(bfr),
+ q(1155) => q(bfs),
+ q(1156) => q(bft),
+ q(1157) => q(bfu),
+ q(1158) => q(bfw),
+ q(1159) => q(bfx),
+ q(1160) => q(bfy),
+ q(1161) => q(bfz),
+ q(1162) => q(bga),
+ q(1163) => q(bgb),
+ q(1164) => q(bgc),
+ q(1165) => q(bgd),
+ q(1166) => q(bge),
+ q(1167) => q(bgf),
+ q(1168) => q(bgg),
+ q(1169) => q(bgi),
+ q(1170) => q(bgj),
+ q(1171) => q(bgk),
+ q(1172) => q(bgl),
+ q(1173) => q(bgm),
+ q(1174) => q(bgn),
+ q(1175) => q(bgo),
+ q(1176) => q(bgp),
+ q(1177) => q(bgq),
+ q(1178) => q(bgr),
+ q(1179) => q(bgs),
+ q(1180) => q(bgt),
+ q(1181) => q(bgu),
+ q(1182) => q(bgv),
+ q(1183) => q(bgw),
+ q(1184) => q(bgx),
+ q(1185) => q(bgy),
+ q(1186) => q(bgz),
+ q(1187) => q(bha),
+ q(1188) => q(bhb),
+ q(1189) => q(bhc),
+ q(1190) => q(bhd),
+ q(1191) => q(bhe),
+ q(1192) => q(bhf),
+ q(1193) => q(bhg),
+ q(1194) => q(bhh),
+ q(1195) => q(bhi),
+ q(1196) => q(bhj),
+ q(1197) => q(bhl),
+ q(1198) => q(bhm),
+ q(1199) => q(bhn),
+ q(1200) => q(bhp),
+ q(1201) => q(bhq),
+ q(1202) => q(bhr),
+ q(1203) => q(bhs),
+ q(1204) => q(bht),
+ q(1205) => q(bhu),
+ q(1206) => q(bhv),
+ q(1207) => q(bhw),
+ q(1208) => q(bhx),
+ q(1209) => q(bhy),
+ q(1210) => q(bhz),
+ q(1211) => q(bia),
+ q(1212) => q(bib),
+ q(1213) => q(bic),
+ q(1214) => q(bid),
+ q(1215) => q(bie),
+ q(1216) => q(bif),
+ q(1217) => q(big),
+ q(1218) => q(bij),
+ q(1219) => q(bil),
+ q(1220) => q(bim),
+ q(1221) => q(bio),
+ q(1222) => q(bip),
+ q(1223) => q(biq),
+ q(1224) => q(bir),
+ q(1225) => q(bit),
+ q(1226) => q(biu),
+ q(1227) => q(biv),
+ q(1228) => q(biw),
+ q(1229) => q(bix),
+ q(1230) => q(biy),
+ q(1231) => q(biz),
+ q(1232) => q(bja),
+ q(1233) => q(bjb),
+ q(1234) => q(bjc),
+ q(1235) => q(bje),
+ q(1236) => q(bjf),
+ q(1237) => q(bjg),
+ q(1238) => q(bjh),
+ q(1239) => q(bji),
+ q(1240) => q(bjj),
+ q(1241) => q(bjk),
+ q(1242) => q(bjl),
+ q(1243) => q(bjm),
+ q(1244) => q(bjn),
+ q(1245) => q(bjo),
+ q(1246) => q(bjr),
+ q(1247) => q(bjs),
+ q(1248) => q(bjt),
+ q(1249) => q(bju),
+ q(1250) => q(bjv),
+ q(1251) => q(bjw),
+ q(1252) => q(bjx),
+ q(1253) => q(bjy),
+ q(1254) => q(bjz),
+ q(1255) => q(bka),
+ q(1256) => q(bkc),
+ q(1257) => q(bkd),
+ q(1258) => q(bkf),
+ q(1259) => q(bkg),
+ q(1260) => q(bkh),
+ q(1261) => q(bki),
+ q(1262) => q(bkj),
+ q(1263) => q(bkk),
+ q(1264) => q(bkl),
+ q(1265) => q(bkm),
+ q(1266) => q(bkn),
+ q(1267) => q(bko),
+ q(1268) => q(bkp),
+ q(1269) => q(bkq),
+ q(1270) => q(bkr),
+ q(1271) => q(bks),
+ q(1272) => q(bkt),
+ q(1273) => q(bku),
+ q(1274) => q(bkv),
+ q(1275) => q(bkw),
+ q(1276) => q(bkx),
+ q(1277) => q(bky),
+ q(1278) => q(bkz),
+ q(1279) => q(blb),
+ q(1280) => q(blc),
+ q(1281) => q(bld),
+ q(1282) => q(ble),
+ q(1283) => q(blf),
+ q(1284) => q(blg),
+ q(1285) => q(blh),
+ q(1286) => q(bli),
+ q(1287) => q(blj),
+ q(1288) => q(blk),
+ q(1289) => q(bll),
+ q(1290) => q(blm),
+ q(1291) => q(bln),
+ q(1292) => q(blo),
+ q(1293) => q(blp),
+ q(1294) => q(blq),
+ q(1295) => q(blr),
+ q(1296) => q(bls),
+ q(1297) => q(blt),
+ q(1298) => q(blv),
+ q(1299) => q(blw),
+ q(1300) => q(blx),
+ q(1301) => q(bly),
+ q(1302) => q(blz),
+ q(1303) => q(bma),
+ q(1304) => q(bmb),
+ q(1305) => q(bmc),
+ q(1306) => q(bmd),
+ q(1307) => q(bme),
+ q(1308) => q(bmf),
+ q(1309) => q(bmg),
+ q(1310) => q(bmh),
+ q(1311) => q(bmi),
+ q(1312) => q(bmj),
+ q(1313) => q(bmk),
+ q(1314) => q(bml),
+ q(1315) => q(bmm),
+ q(1316) => q(bmn),
+ q(1317) => q(bmo),
+ q(1318) => q(bmp),
+ q(1319) => q(bmq),
+ q(1320) => q(bmr),
+ q(1321) => q(bms),
+ q(1322) => q(bmt),
+ q(1323) => q(bmu),
+ q(1324) => q(bmv),
+ q(1325) => q(bmw),
+ q(1326) => q(bmx),
+ q(1327) => q(bmy),
+ q(1328) => q(bmz),
+ q(1329) => q(bna),
+ q(1330) => q(bnb),
+ q(1331) => q(bnc),
+ q(1332) => q(bnd),
+ q(1333) => q(bne),
+ q(1334) => q(bnf),
+ q(1335) => q(bng),
+ q(1336) => q(bni),
+ q(1337) => q(bnj),
+ q(1338) => q(bnk),
+ q(1339) => q(bnl),
+ q(1340) => q(bnm),
+ q(1341) => q(bnn),
+ q(1342) => q(bno),
+ q(1343) => q(bnp),
+ q(1344) => q(bnq),
+ q(1345) => q(bnr),
+ q(1346) => q(bns),
+ q(1347) => q(bnu),
+ q(1348) => q(bnv),
+ q(1349) => q(bnw),
+ q(1350) => q(bnx),
+ q(1351) => q(bny),
+ q(1352) => q(bnz),
+ q(1353) => q(boa),
+ q(1354) => q(bob),
+ q(1355) => q(boe),
+ q(1356) => q(bof),
+ q(1357) => q(bog),
+ q(1358) => q(boh),
+ q(1359) => q(boi),
+ q(1360) => q(boj),
+ q(1361) => q(bok),
+ q(1362) => q(bol),
+ q(1363) => q(bom),
+ q(1364) => q(bon),
+ q(1365) => q(boo),
+ q(1366) => q(bop),
+ q(1367) => q(boq),
+ q(1368) => q(bor),
+ q(1369) => q(bot),
+ q(1370) => q(bou),
+ q(1371) => q(bov),
+ q(1372) => q(bow),
+ q(1373) => q(box),
+ q(1374) => q(boy),
+ q(1375) => q(boz),
+ q(1376) => q(bpa),
+ q(1377) => q(bpb),
+ q(1378) => q(bpd),
+ q(1379) => q(bpg),
+ q(1380) => q(bph),
+ q(1381) => q(bpi),
+ q(1382) => q(bpj),
+ q(1383) => q(bpk),
+ q(1384) => q(bpl),
+ q(1385) => q(bpm),
+ q(1386) => q(bpn),
+ q(1387) => q(bpo),
+ q(1388) => q(bpp),
+ q(1389) => q(bpq),
+ q(1390) => q(bpr),
+ q(1391) => q(bps),
+ q(1392) => q(bpt),
+ q(1393) => q(bpu),
+ q(1394) => q(bpv),
+ q(1395) => q(bpw),
+ q(1396) => q(bpx),
+ q(1397) => q(bpy),
+ q(1398) => q(bpz),
+ q(1399) => q(bqa),
+ q(1400) => q(bqb),
+ q(1401) => q(bqc),
+ q(1402) => q(bqd),
+ q(1403) => q(bqf),
+ q(1404) => q(bqg),
+ q(1405) => q(bqh),
+ q(1406) => q(bqi),
+ q(1407) => q(bqj),
+ q(1408) => q(bqk),
+ q(1409) => q(bql),
+ q(1410) => q(bqm),
+ q(1411) => q(bqn),
+ q(1412) => q(bqo),
+ q(1413) => q(bqp),
+ q(1414) => q(bqq),
+ q(1415) => q(bqr),
+ q(1416) => q(bqs),
+ q(1417) => q(bqt),
+ q(1418) => q(bqu),
+ q(1419) => q(bqv),
+ q(1420) => q(bqw),
+ q(1421) => q(bqx),
+ q(1422) => q(bqy),
+ q(1423) => q(bqz),
+ q(1424) => q(brb),
+ q(1425) => q(brc),
+ q(1426) => q(brd),
+ q(1427) => q(brf),
+ q(1428) => q(brg),
+ q(1429) => q(brh),
+ q(1430) => q(bri),
+ q(1431) => q(brj),
+ q(1432) => q(brk),
+ q(1433) => q(brl),
+ q(1434) => q(brm),
+ q(1435) => q(brn),
+ q(1436) => q(bro),
+ q(1437) => q(brp),
+ q(1438) => q(brq),
+ q(1439) => q(brr),
+ q(1440) => q(brs),
+ q(1441) => q(brt),
+ q(1442) => q(bru),
+ q(1443) => q(brv),
+ q(1444) => q(brw),
+ q(1445) => q(brx),
+ q(1446) => q(bry),
+ q(1447) => q(brz),
+ q(1448) => q(bsa),
+ q(1449) => q(bsb),
+ q(1450) => q(bsc),
+ q(1451) => q(bse),
+ q(1452) => q(bsf),
+ q(1453) => q(bsg),
+ q(1454) => q(bsh),
+ q(1455) => q(bsi),
+ q(1456) => q(bsj),
+ q(1457) => q(bsk),
+ q(1458) => q(bsl),
+ q(1459) => q(bsm),
+ q(1460) => q(bsn),
+ q(1461) => q(bso),
+ q(1462) => q(bsp),
+ q(1463) => q(bsq),
+ q(1464) => q(bsr),
+ q(1465) => q(bss),
+ q(1466) => q(bst),
+ q(1467) => q(bsu),
+ q(1468) => q(bsv),
+ q(1469) => q(bsw),
+ q(1470) => q(bsx),
+ q(1471) => q(bsy),
+ q(1472) => q(bta),
+ q(1473) => q(btc),
+ q(1474) => q(btd),
+ q(1475) => q(bte),
+ q(1476) => q(btf),
+ q(1477) => q(btg),
+ q(1478) => q(bth),
+ q(1479) => q(bti),
+ q(1480) => q(btj),
+ q(1481) => q(btl),
+ q(1482) => q(btm),
+ q(1483) => q(btn),
+ q(1484) => q(bto),
+ q(1485) => q(btp),
+ q(1486) => q(btq),
+ q(1487) => q(btr),
+ q(1488) => q(bts),
+ q(1489) => q(btt),
+ q(1490) => q(btu),
+ q(1491) => q(btv),
+ q(1492) => q(btw),
+ q(1493) => q(btx),
+ q(1494) => q(bty),
+ q(1495) => q(btz),
+ q(1496) => q(bub),
+ q(1497) => q(buc),
+ q(1498) => q(bud),
+ q(1499) => q(bue),
+ q(1500) => q(buf),
+ q(1501) => q(buh),
+ q(1502) => q(bui),
+ q(1503) => q(buj),
+ q(1504) => q(buk),
+ q(1505) => q(bum),
+ q(1506) => q(bun),
+ q(1507) => q(buo),
+ q(1508) => q(bup),
+ q(1509) => q(buq),
+ q(1510) => q(bus),
+ q(1511) => q(but),
+ q(1512) => q(buu),
+ q(1513) => q(buv),
+ q(1514) => q(buw),
+ q(1515) => q(bux),
+ q(1516) => q(buy),
+ q(1517) => q(buz),
+ q(1518) => q(bva),
+ q(1519) => q(bvb),
+ q(1520) => q(bvc),
+ q(1521) => q(bvd),
+ q(1522) => q(bve),
+ q(1523) => q(bvf),
+ q(1524) => q(bvg),
+ q(1525) => q(bvh),
+ q(1526) => q(bvi),
+ q(1527) => q(bvj),
+ q(1528) => q(bvk),
+ q(1529) => q(bvl),
+ q(1530) => q(bvm),
+ q(1531) => q(bvn),
+ q(1532) => q(bvo),
+ q(1533) => q(bvq),
+ q(1534) => q(bvr),
+ q(1535) => q(bvt),
+ q(1536) => q(bvu),
+ q(1537) => q(bvv),
+ q(1538) => q(bvw),
+ q(1539) => q(bvx),
+ q(1540) => q(bvy),
+ q(1541) => q(bvz),
+ q(1542) => q(bwa),
+ q(1543) => q(bwb),
+ q(1544) => q(bwc),
+ q(1545) => q(bwd),
+ q(1546) => q(bwe),
+ q(1547) => q(bwf),
+ q(1548) => q(bwg),
+ q(1549) => q(bwh),
+ q(1550) => q(bwi),
+ q(1551) => q(bwj),
+ q(1552) => q(bwk),
+ q(1553) => q(bwl),
+ q(1554) => q(bwm),
+ q(1555) => q(bwn),
+ q(1556) => q(bwo),
+ q(1557) => q(bwp),
+ q(1558) => q(bwq),
+ q(1559) => q(bwr),
+ q(1560) => q(bws),
+ q(1561) => q(bwt),
+ q(1562) => q(bwu),
+ q(1563) => q(bww),
+ q(1564) => q(bwx),
+ q(1565) => q(bwy),
+ q(1566) => q(bwz),
+ q(1567) => q(bxa),
+ q(1568) => q(bxb),
+ q(1569) => q(bxc),
+ q(1570) => q(bxd),
+ q(1571) => q(bxe),
+ q(1572) => q(bxf),
+ q(1573) => q(bxg),
+ q(1574) => q(bxh),
+ q(1575) => q(bxi),
+ q(1576) => q(bxj),
+ q(1577) => q(bxk),
+ q(1578) => q(bxl),
+ q(1579) => q(bxm),
+ q(1580) => q(bxn),
+ q(1581) => q(bxo),
+ q(1582) => q(bxp),
+ q(1583) => q(bxq),
+ q(1584) => q(bxr),
+ q(1585) => q(bxs),
+ q(1586) => q(bxu),
+ q(1587) => q(bxv),
+ q(1588) => q(bxw),
+ q(1589) => q(bxx),
+ q(1590) => q(bxz),
+ q(1591) => q(bya),
+ q(1592) => q(byb),
+ q(1593) => q(byc),
+ q(1594) => q(byd),
+ q(1595) => q(bye),
+ q(1596) => q(byf),
+ q(1597) => q(byg),
+ q(1598) => q(byh),
+ q(1599) => q(byi),
+ q(1600) => q(byj),
+ q(1601) => q(byk),
+ q(1602) => q(byl),
+ q(1603) => q(bym),
+ q(1604) => q(byo),
+ q(1605) => q(byp),
+ q(1606) => q(byq),
+ q(1607) => q(byr),
+ q(1608) => q(bys),
+ q(1609) => q(byt),
+ q(1610) => q(byv),
+ q(1611) => q(byw),
+ q(1612) => q(byx),
+ q(1613) => q(byy),
+ q(1614) => q(byz),
+ q(1615) => q(bza),
+ q(1616) => q(bzb),
+ q(1617) => q(bzc),
+ q(1618) => q(bzd),
+ q(1619) => q(bze),
+ q(1620) => q(bzf),
+ q(1621) => q(bzg),
+ q(1622) => q(bzh),
+ q(1623) => q(bzi),
+ q(1624) => q(bzj),
+ q(1625) => q(bzk),
+ q(1626) => q(bzl),
+ q(1627) => q(bzm),
+ q(1628) => q(bzn),
+ q(1629) => q(bzo),
+ q(1630) => q(bzp),
+ q(1631) => q(bzq),
+ q(1632) => q(bzr),
+ q(1633) => q(bzs),
+ q(1634) => q(bzt),
+ q(1635) => q(bzu),
+ q(1636) => q(bzv),
+ q(1637) => q(bzw),
+ q(1638) => q(bzx),
+ q(1639) => q(bzy),
+ q(1640) => q(bzz),
+ q(1641) => q(caa),
+ q(1642) => q(cab),
+ q(1643) => q(cac),
+ q(1644) => q(cae),
+ q(1645) => q(caf),
+ q(1646) => q(cag),
+ q(1647) => q(cah),
+ q(1648) => q(caj),
+ q(1649) => q(cak),
+ q(1650) => q(cal),
+ q(1651) => q(cam),
+ q(1652) => q(can),
+ q(1653) => q(cao),
+ q(1654) => q(cap),
+ q(1655) => q(caq),
+ q(1656) => q(cas),
+ q(1657) => q(cav),
+ q(1658) => q(caw),
+ q(1659) => q(cax),
+ q(1660) => q(cay),
+ q(1661) => q(caz),
+ q(1662) => q(cbb),
+ q(1663) => q(cbc),
+ q(1664) => q(cbd),
+ q(1665) => q(cbe),
+ q(1666) => q(cbg),
+ q(1667) => q(cbh),
+ q(1668) => q(cbi),
+ q(1669) => q(cbj),
+ q(1670) => q(cbk),
+ q(1671) => q(cbl),
+ q(1672) => q(cbn),
+ q(1673) => q(cbo),
+ q(1674) => q(cbr),
+ q(1675) => q(cbs),
+ q(1676) => q(cbt),
+ q(1677) => q(cbu),
+ q(1678) => q(cbv),
+ q(1679) => q(cbw),
+ q(1680) => q(cby),
+ q(1681) => q(cca),
+ q(1682) => q(ccc),
+ q(1683) => q(ccd),
+ q(1684) => q(cce),
+ q(1685) => q(ccg),
+ q(1686) => q(cch),
+ q(1687) => q(ccj),
+ q(1688) => q(ccl),
+ q(1689) => q(ccm),
+ q(1690) => q(cco),
+ q(1691) => q(ccp),
+ q(1692) => q(ccr),
+ q(1693) => q(cda),
+ q(1694) => q(cde),
+ q(1695) => q(cdf),
+ q(1696) => q(cdg),
+ q(1697) => q(cdh),
+ q(1698) => q(cdi),
+ q(1699) => q(cdj),
+ q(1700) => q(cdm),
+ q(1701) => q(cdn),
+ q(1702) => q(cdo),
+ q(1703) => q(cdr),
+ q(1704) => q(cds),
+ q(1705) => q(cdy),
+ q(1706) => q(cdz),
+ q(1707) => q(cea),
+ q(1708) => q(ceg),
+ q(1709) => q(cek),
+ q(1710) => q(cen),
+ q(1711) => q(cet),
+ q(1712) => q(cfa),
+ q(1713) => q(cfd),
+ q(1714) => q(cfg),
+ q(1715) => q(cfm),
+ q(1716) => q(cga),
+ q(1717) => q(cgc),
+ q(1718) => q(cgg),
+ q(1719) => q(cgk),
+ q(1720) => q(chc),
+ q(1721) => q(chd),
+ q(1722) => q(chf),
+ q(1723) => q(chh),
+ q(1724) => q(chj),
+ q(1725) => q(chl),
+ q(1726) => q(chq),
+ q(1727) => q(cht),
+ q(1728) => q(chw),
+ q(1729) => q(chx),
+ q(1730) => q(chz),
+ q(1731) => q(cia),
+ q(1732) => q(cib),
+ q(1733) => q(cic),
+ q(1734) => q(cid),
+ q(1735) => q(cie),
+ q(1736) => q(cih),
+ q(1737) => q(cik),
+ q(1738) => q(cim),
+ q(1739) => q(cin),
+ q(1740) => q(cip),
+ q(1741) => q(cir),
+ q(1742) => q(ciw),
+ q(1743) => q(ciy),
+ q(1744) => q(cja),
+ q(1745) => q(cje),
+ q(1746) => q(cjh),
+ q(1747) => q(cji),
+ q(1748) => q(cjk),
+ q(1749) => q(cjm),
+ q(1750) => q(cjn),
+ q(1751) => q(cjo),
+ q(1752) => q(cjp),
+ q(1753) => q(cjs),
+ q(1754) => q(cjv),
+ q(1755) => q(cjy),
+ q(1756) => q(ckb),
+ q(1757) => q(ckh),
+ q(1758) => q(ckl),
+ q(1759) => q(cko),
+ q(1760) => q(ckq),
+ q(1761) => q(ckr),
+ q(1762) => q(cks),
+ q(1763) => q(ckt),
+ q(1764) => q(cku),
+ q(1765) => q(ckv),
+ q(1766) => q(ckx),
+ q(1767) => q(cky),
+ q(1768) => q(ckz),
+ q(1769) => q(cla),
+ q(1770) => q(clc),
+ q(1771) => q(cld),
+ q(1772) => q(cle),
+ q(1773) => q(clh),
+ q(1774) => q(cli),
+ q(1775) => q(clj),
+ q(1776) => q(clk),
+ q(1777) => q(cll),
+ q(1778) => q(clm),
+ q(1779) => q(clo),
+ q(1780) => q(clt),
+ q(1781) => q(clu),
+ q(1782) => q(clw),
+ q(1783) => q(cly),
+ q(1784) => q(cma),
+ q(1785) => q(cme),
+ q(1786) => q(cmg),
+ q(1787) => q(cmi),
+ q(1788) => q(cml),
+ q(1789) => q(cmm),
+ q(1790) => q(cmn),
+ q(1791) => q(cmo),
+ q(1792) => q(cmr),
+ q(1793) => q(cms),
+ q(1794) => q(cmt),
+ q(1795) => q(cna),
+ q(1796) => q(cnb),
+ q(1797) => q(cnc),
+ q(1798) => q(cng),
+ q(1799) => q(cnh),
+ q(1800) => q(cni),
+ q(1801) => q(cnk),
+ q(1802) => q(cnl),
+ q(1803) => q(cno),
+ q(1804) => q(cns),
+ q(1805) => q(cnt),
+ q(1806) => q(cnu),
+ q(1807) => q(cnw),
+ q(1808) => q(cnx),
+ q(1809) => q(coa),
+ q(1810) => q(cob),
+ q(1811) => q(coc),
+ q(1812) => q(cod),
+ q(1813) => q(coe),
+ q(1814) => q(cof),
+ q(1815) => q(cog),
+ q(1816) => q(coh),
+ q(1817) => q(coj),
+ q(1818) => q(cok),
+ q(1819) => q(col),
+ q(1820) => q(com),
+ q(1821) => q(con),
+ q(1822) => q(coo),
+ q(1823) => q(coq),
+ q(1824) => q(cot),
+ q(1825) => q(cou),
+ q(1826) => q(cov),
+ q(1827) => q(cow),
+ q(1828) => q(cox),
+ q(1829) => q(coy),
+ q(1830) => q(coz),
+ q(1831) => q(cpa),
+ q(1832) => q(cpb),
+ q(1833) => q(cpc),
+ q(1834) => q(cpg),
+ q(1835) => q(cpi),
+ q(1836) => q(cpn),
+ q(1837) => q(cps),
+ q(1838) => q(cpu),
+ q(1839) => q(cpx),
+ q(1840) => q(cpy),
+ q(1841) => q(cqd),
+ q(1842) => q(cqu),
+ q(1843) => q(cra),
+ q(1844) => q(crb),
+ q(1845) => q(crc),
+ q(1846) => q(crd),
+ q(1847) => q(crf),
+ q(1848) => q(crg),
+ q(1849) => q(cri),
+ q(1850) => q(crj),
+ q(1851) => q(crk),
+ q(1852) => q(crl),
+ q(1853) => q(crm),
+ q(1854) => q(crn),
+ q(1855) => q(cro),
+ q(1856) => q(crq),
+ q(1857) => q(crr),
+ q(1858) => q(crs),
+ q(1859) => q(crt),
+ q(1860) => q(crv),
+ q(1861) => q(crw),
+ q(1862) => q(crx),
+ q(1863) => q(cry),
+ q(1864) => q(crz),
+ q(1865) => q(csa),
+ q(1866) => q(csc),
+ q(1867) => q(csd),
+ q(1868) => q(cse),
+ q(1869) => q(csf),
+ q(1870) => q(csg),
+ q(1871) => q(csh),
+ q(1872) => q(csi),
+ q(1873) => q(csk),
+ q(1874) => q(csl),
+ q(1875) => q(csm),
+ q(1876) => q(csn),
+ q(1877) => q(cso),
+ q(1878) => q(csq),
+ q(1879) => q(csr),
+ q(1880) => q(css),
+ q(1881) => q(cst),
+ q(1882) => q(csv),
+ q(1883) => q(csw),
+ q(1884) => q(csy),
+ q(1885) => q(csz),
+ q(1886) => q(cta),
+ q(1887) => q(ctc),
+ q(1888) => q(ctd),
+ q(1889) => q(cte),
+ q(1890) => q(ctg),
+ q(1891) => q(cth),
+ q(1892) => q(ctl),
+ q(1893) => q(ctm),
+ q(1894) => q(ctn),
+ q(1895) => q(cto),
+ q(1896) => q(ctp),
+ q(1897) => q(cts),
+ q(1898) => q(ctt),
+ q(1899) => q(ctu),
+ q(1900) => q(ctz),
+ q(1901) => q(cua),
+ q(1902) => q(cub),
+ q(1903) => q(cuc),
+ q(1904) => q(cug),
+ q(1905) => q(cuh),
+ q(1906) => q(cui),
+ q(1907) => q(cuj),
+ q(1908) => q(cuk),
+ q(1909) => q(cul),
+ q(1910) => q(cum),
+ q(1911) => q(cuo),
+ q(1912) => q(cup),
+ q(1913) => q(cuq),
+ q(1914) => q(cur),
+ q(1915) => q(cut),
+ q(1916) => q(cuu),
+ q(1917) => q(cuv),
+ q(1918) => q(cuw),
+ q(1919) => q(cux),
+ q(1920) => q(cvg),
+ q(1921) => q(cvn),
+ q(1922) => q(cwa),
+ q(1923) => q(cwb),
+ q(1924) => q(cwd),
+ q(1925) => q(cwe),
+ q(1926) => q(cwg),
+ q(1927) => q(cwt),
+ q(1928) => q(cya),
+ q(1929) => q(cyb),
+ q(1930) => q(cyo),
+ q(1931) => q(czh),
+ q(1932) => q(czk),
+ q(1933) => q(czn),
+ q(1934) => q(czo),
+ q(1935) => q(czt),
+ q(1936) => q(daa),
+ q(1937) => q(dac),
+ q(1938) => q(dad),
+ q(1939) => q(dae),
+ q(1940) => q(daf),
+ q(1941) => q(dag),
+ q(1942) => q(dah),
+ q(1943) => q(dai),
+ q(1944) => q(daj),
+ q(1945) => q(dal),
+ q(1946) => q(dam),
+ q(1947) => q(dao),
+ q(1948) => q(daq),
+ q(1949) => q(das),
+ q(1950) => q(dau),
+ q(1951) => q(dav),
+ q(1952) => q(daw),
+ q(1953) => q(dax),
+ q(1954) => q(daz),
+ q(1955) => q(dba),
+ q(1956) => q(dbb),
+ q(1957) => q(dbd),
+ q(1958) => q(dbe),
+ q(1959) => q(dbf),
+ q(1960) => q(dbg),
+ q(1961) => q(dbi),
+ q(1962) => q(dbj),
+ q(1963) => q(dbl),
+ q(1964) => q(dbm),
+ q(1965) => q(dbn),
+ q(1966) => q(dbo),
+ q(1967) => q(dbp),
+ q(1968) => q(dbq),
+ q(1969) => q(dbr),
+ q(1970) => q(dbt),
+ q(1971) => q(dbu),
+ q(1972) => q(dbv),
+ q(1973) => q(dbw),
+ q(1974) => q(dby),
+ q(1975) => q(dcc),
+ q(1976) => q(dcr),
+ q(1977) => q(dda),
+ q(1978) => q(ddd),
+ q(1979) => q(dde),
+ q(1980) => q(ddg),
+ q(1981) => q(ddi),
+ q(1982) => q(ddj),
+ q(1983) => q(ddn),
+ q(1984) => q(ddo),
+ q(1985) => q(ddr),
+ q(1986) => q(dds),
+ q(1987) => q(ddw),
+ q(1988) => q(dec),
+ q(1989) => q(ded),
+ q(1990) => q(dee),
+ q(1991) => q(def),
+ q(1992) => q(deg),
+ q(1993) => q(deh),
+ q(1994) => q(dei),
+ q(1995) => q(dek),
+ q(1996) => q(dem),
+ q(1997) => q(dep),
+ q(1998) => q(deq),
+ q(1999) => q(der),
+ q(2000) => q(des),
+ q(2001) => q(dev),
+ q(2002) => q(dez),
+ q(2003) => q(dga),
+ q(2004) => q(dgb),
+ q(2005) => q(dgc),
+ q(2006) => q(dgd),
+ q(2007) => q(dge),
+ q(2008) => q(dgg),
+ q(2009) => q(dgh),
+ q(2010) => q(dgi),
+ q(2011) => q(dgk),
+ q(2012) => q(dgl),
+ q(2013) => q(dgn),
+ q(2014) => q(dgo),
+ q(2015) => q(dgs),
+ q(2016) => q(dgt),
+ q(2017) => q(dgu),
+ q(2018) => q(dgw),
+ q(2019) => q(dgx),
+ q(2020) => q(dgz),
+ q(2021) => q(dhd),
+ q(2022) => q(dhg),
+ q(2023) => q(dhi),
+ q(2024) => q(dhl),
+ q(2025) => q(dhm),
+ q(2026) => q(dhn),
+ q(2027) => q(dho),
+ q(2028) => q(dhr),
+ q(2029) => q(dhs),
+ q(2030) => q(dhu),
+ q(2031) => q(dhv),
+ q(2032) => q(dhw),
+ q(2033) => q(dia),
+ q(2034) => q(dib),
+ q(2035) => q(dic),
+ q(2036) => q(did),
+ q(2037) => q(dif),
+ q(2038) => q(dig),
+ q(2039) => q(dih),
+ q(2040) => q(dii),
+ q(2041) => q(dij),
+ q(2042) => q(dik),
+ q(2043) => q(dil),
+ q(2044) => q(dim),
+ q(2045) => q(dio),
+ q(2046) => q(dip),
+ q(2047) => q(diq),
+ q(2048) => q(dir),
+ q(2049) => q(dis),
+ q(2050) => q(dit),
+ q(2051) => q(diu),
+ q(2052) => q(diw),
+ q(2053) => q(dix),
+ q(2054) => q(diy),
+ q(2055) => q(diz),
+ q(2056) => q(dja),
+ q(2057) => q(djb),
+ q(2058) => q(djc),
+ q(2059) => q(djd),
+ q(2060) => q(dje),
+ q(2061) => q(djf),
+ q(2062) => q(dji),
+ q(2063) => q(djj),
+ q(2064) => q(djk),
+ q(2065) => q(djl),
+ q(2066) => q(djm),
+ q(2067) => q(djn),
+ q(2068) => q(djo),
+ q(2069) => q(djr),
+ q(2070) => q(dju),
+ q(2071) => q(djw),
+ q(2072) => q(dka),
+ q(2073) => q(dkk),
+ q(2074) => q(dkr),
+ q(2075) => q(dks),
+ q(2076) => q(dkx),
+ q(2077) => q(dlg),
+ q(2078) => q(dlm),
+ q(2079) => q(dln),
+ q(2080) => q(dma),
+ q(2081) => q(dmb),
+ q(2082) => q(dmc),
+ q(2083) => q(dmd),
+ q(2084) => q(dme),
+ q(2085) => q(dmg),
+ q(2086) => q(dmk),
+ q(2087) => q(dml),
+ q(2088) => q(dmm),
+ q(2089) => q(dmo),
+ q(2090) => q(dmr),
+ q(2091) => q(dms),
+ q(2092) => q(dmu),
+ q(2093) => q(dmv),
+ q(2094) => q(dmx),
+ q(2095) => q(dmy),
+ q(2096) => q(dna),
+ q(2097) => q(dnd),
+ q(2098) => q(dne),
+ q(2099) => q(dng),
+ q(2100) => q(dni),
+ q(2101) => q(dnk),
+ q(2102) => q(dnn),
+ q(2103) => q(dnr),
+ q(2104) => q(dnt),
+ q(2105) => q(dnu),
+ q(2106) => q(dnv),
+ q(2107) => q(dnw),
+ q(2108) => q(dny),
+ q(2109) => q(doa),
+ q(2110) => q(dob),
+ q(2111) => q(doc),
+ q(2112) => q(doe),
+ q(2113) => q(dof),
+ q(2114) => q(doh),
+ q(2115) => q(dok),
+ q(2116) => q(dol),
+ q(2117) => q(don),
+ q(2118) => q(doo),
+ q(2119) => q(dop),
+ q(2120) => q(doq),
+ q(2121) => q(dor),
+ q(2122) => q(dos),
+ q(2123) => q(dot),
+ q(2124) => q(dov),
+ q(2125) => q(dow),
+ q(2126) => q(dox),
+ q(2127) => q(doy),
+ q(2128) => q(doz),
+ q(2129) => q(dpp),
+ q(2130) => q(drb),
+ q(2131) => q(drc),
+ q(2132) => q(drd),
+ q(2133) => q(dre),
+ q(2134) => q(drg),
+ q(2135) => q(dri),
+ q(2136) => q(drl),
+ q(2137) => q(drn),
+ q(2138) => q(dro),
+ q(2139) => q(drq),
+ q(2140) => q(drr),
+ q(2141) => q(drs),
+ q(2142) => q(drt),
+ q(2143) => q(dru),
+ q(2144) => q(dry),
+ q(2145) => q(dse),
+ q(2146) => q(dsh),
+ q(2147) => q(dsi),
+ q(2148) => q(dsl),
+ q(2149) => q(dsn),
+ q(2150) => q(dso),
+ q(2151) => q(dsq),
+ q(2152) => q(dta),
+ q(2153) => q(dtb),
+ q(2154) => q(dtd),
+ q(2155) => q(dth),
+ q(2156) => q(dti),
+ q(2157) => q(dtk),
+ q(2158) => q(dtm),
+ q(2159) => q(dto),
+ q(2160) => q(dtp),
+ q(2161) => q(dtr),
+ q(2162) => q(dts),
+ q(2163) => q(dtt),
+ q(2164) => q(dtu),
+ q(2165) => q(dty),
+ q(2166) => q(dub),
+ q(2167) => q(duc),
+ q(2168) => q(dud),
+ q(2169) => q(due),
+ q(2170) => q(duf),
+ q(2171) => q(dug),
+ q(2172) => q(duh),
+ q(2173) => q(dui),
+ q(2174) => q(duj),
+ q(2175) => q(duk),
+ q(2176) => q(dul),
+ q(2177) => q(dun),
+ q(2178) => q(duo),
+ q(2179) => q(dup),
+ q(2180) => q(duq),
+ q(2181) => q(dur),
+ q(2182) => q(dus),
+ q(2183) => q(duu),
+ q(2184) => q(duv),
+ q(2185) => q(duw),
+ q(2186) => q(dux),
+ q(2187) => q(duy),
+ q(2188) => q(duz),
+ q(2189) => q(dva),
+ q(2190) => q(dwa),
+ q(2191) => q(dwr),
+ q(2192) => q(dws),
+ q(2193) => q(dww),
+ q(2194) => q(dya),
+ q(2195) => q(dyb),
+ q(2196) => q(dyd),
+ q(2197) => q(dyg),
+ q(2198) => q(dyi),
+ q(2199) => q(dym),
+ q(2200) => q(dyn),
+ q(2201) => q(dyo),
+ q(2202) => q(dyy),
+ q(2203) => q(dza),
+ q(2204) => q(dzd),
+ q(2205) => q(dzg),
+ q(2206) => q(dzl),
+ q(2207) => q(dzn),
+ q(2208) => q(ebg),
+ q(2209) => q(ebk),
+ q(2210) => q(ebo),
+ q(2211) => q(ebr),
+ q(2212) => q(ebu),
+ q(2213) => q(ecr),
+ q(2214) => q(ecs),
+ q(2215) => q(ecy),
+ q(2216) => q(eee),
+ q(2217) => q(efa),
+ q(2218) => q(efe),
+ q(2219) => q(ega),
+ q(2220) => q(egl),
+ q(2221) => q(ego),
+ q(2222) => q(ehu),
+ q(2223) => q(eip),
+ q(2224) => q(eit),
+ q(2225) => q(eiv),
+ q(2226) => q(eja),
+ q(2227) => q(eke),
+ q(2228) => q(ekg),
+ q(2229) => q(eki),
+ q(2230) => q(ekk),
+ q(2231) => q(ekl),
+ q(2232) => q(ekm),
+ q(2233) => q(eko),
+ q(2234) => q(ekp),
+ q(2235) => q(ekr),
+ q(2236) => q(eky),
+ q(2237) => q(ele),
+ q(2238) => q(elh),
+ q(2239) => q(eli),
+ q(2240) => q(elk),
+ q(2241) => q(elm),
+ q(2242) => q(elo),
+ q(2243) => q(elu),
+ q(2244) => q(ema),
+ q(2245) => q(emb),
+ q(2246) => q(eme),
+ q(2247) => q(emg),
+ q(2248) => q(emi),
+ q(2249) => q(emk),
+ q(2250) => q(emm),
+ q(2251) => q(emn),
+ q(2252) => q(emo),
+ q(2253) => q(emp),
+ q(2254) => q(ems),
+ q(2255) => q(emu),
+ q(2256) => q(emw),
+ q(2257) => q(emx),
+ q(2258) => q(emy),
+ q(2259) => q(ena),
+ q(2260) => q(enb),
+ q(2261) => q(enc),
+ q(2262) => q(end),
+ q(2263) => q(enf),
+ q(2264) => q(enh),
+ q(2265) => q(enn),
+ q(2266) => q(eno),
+ q(2267) => q(enq),
+ q(2268) => q(enr),
+ q(2269) => q(enu),
+ q(2270) => q(env),
+ q(2271) => q(enw),
+ q(2272) => q(eot),
+ q(2273) => q(epi),
+ q(2274) => q(era),
+ q(2275) => q(erg),
+ q(2276) => q(erh),
+ q(2277) => q(eri),
+ q(2278) => q(erk),
+ q(2279) => q(ero),
+ q(2280) => q(err),
+ q(2281) => q(ers),
+ q(2282) => q(ert),
+ q(2283) => q(erw),
+ q(2284) => q(ese),
+ q(2285) => q(esh),
+ q(2286) => q(esi),
+ q(2287) => q(esk),
+ q(2288) => q(esl),
+ q(2289) => q(esm),
+ q(2290) => q(esn),
+ q(2291) => q(eso),
+ q(2292) => q(esq),
+ q(2293) => q(ess),
+ q(2294) => q(esu),
+ q(2295) => q(etb),
+ q(2296) => q(etc),
+ q(2297) => q(eth),
+ q(2298) => q(etn),
+ q(2299) => q(eto),
+ q(2300) => q(etr),
+ q(2301) => q(ets),
+ q(2302) => q(ett),
+ q(2303) => q(etu),
+ q(2304) => q(etx),
+ q(2305) => q(etz),
+ q(2306) => q(eve),
+ q(2307) => q(evh),
+ q(2308) => q(evn),
+ q(2309) => q(ext),
+ q(2310) => q(eya),
+ q(2311) => q(eyo),
+ q(2312) => q(eze),
+ q(2313) => q(faa),
+ q(2314) => q(fab),
+ q(2315) => q(fad),
+ q(2316) => q(faf),
+ q(2317) => q(fag),
+ q(2318) => q(fah),
+ q(2319) => q(fai),
+ q(2320) => q(faj),
+ q(2321) => q(fak),
+ q(2322) => q(fal),
+ q(2323) => q(fam),
+ q(2324) => q(fap),
+ q(2325) => q(far),
+ q(2326) => q(fau),
+ q(2327) => q(fax),
+ q(2328) => q(fay),
+ q(2329) => q(faz),
+ q(2330) => q(fbl),
+ q(2331) => q(fcs),
+ q(2332) => q(fer),
+ q(2333) => q(ffi),
+ q(2334) => q(ffm),
+ q(2335) => q(fgr),
+ q(2336) => q(fia),
+ q(2337) => q(fie),
+ q(2338) => q(fip),
+ q(2339) => q(fir),
+ q(2340) => q(fit),
+ q(2341) => q(fiw),
+ q(2342) => q(fkk),
+ q(2343) => q(fkv),
+ q(2344) => q(fla),
+ q(2345) => q(flh),
+ q(2346) => q(fli),
+ q(2347) => q(fll),
+ q(2348) => q(fln),
+ q(2349) => q(flr),
+ q(2350) => q(fly),
+ q(2351) => q(fmp),
+ q(2352) => q(fmu),
+ q(2353) => q(fng),
+ q(2354) => q(fni),
+ q(2355) => q(fod),
+ q(2356) => q(foi),
+ q(2357) => q(fom),
+ q(2358) => q(for),
+ q(2359) => q(fos),
+ q(2360) => q(fpe),
+ q(2361) => q(fqs),
+ q(2362) => q(frc),
+ q(2363) => q(frd),
+ q(2364) => q(frk),
+ q(2365) => q(frp),
+ q(2366) => q(frq),
+ q(2367) => q(frt),
+ q(2368) => q(fse),
+ q(2369) => q(fsl),
+ q(2370) => q(fss),
+ q(2371) => q(fub),
+ q(2372) => q(fuc),
+ q(2373) => q(fud),
+ q(2374) => q(fue),
+ q(2375) => q(fuf),
+ q(2376) => q(fuh),
+ q(2377) => q(fui),
+ q(2378) => q(fuj),
+ q(2379) => q(fum),
+ q(2380) => q(fun),
+ q(2381) => q(fuq),
+ q(2382) => q(fut),
+ q(2383) => q(fuu),
+ q(2384) => q(fuv),
+ q(2385) => q(fuy),
+ q(2386) => q(fvr),
+ q(2387) => q(fwa),
+ q(2388) => q(fwe),
+ q(2389) => q(gab),
+ q(2390) => q(gac),
+ q(2391) => q(gad),
+ q(2392) => q(gae),
+ q(2393) => q(gaf),
+ q(2394) => q(gag),
+ q(2395) => q(gah),
+ q(2396) => q(gai),
+ q(2397) => q(gaj),
+ q(2398) => q(gak),
+ q(2399) => q(gal),
+ q(2400) => q(gam),
+ q(2401) => q(gan),
+ q(2402) => q(gao),
+ q(2403) => q(gap),
+ q(2404) => q(gaq),
+ q(2405) => q(gar),
+ q(2406) => q(gas),
+ q(2407) => q(gat),
+ q(2408) => q(gau),
+ q(2409) => q(gaw),
+ q(2410) => q(gax),
+ q(2411) => q(gaz),
+ q(2412) => q(gbb),
+ q(2413) => q(gbd),
+ q(2414) => q(gbe),
+ q(2415) => q(gbf),
+ q(2416) => q(gbg),
+ q(2417) => q(gbh),
+ q(2418) => q(gbi),
+ q(2419) => q(gbj),
+ q(2420) => q(gbk),
+ q(2421) => q(gbl),
+ q(2422) => q(gbm),
+ q(2423) => q(gbn),
+ q(2424) => q(gbo),
+ q(2425) => q(gbp),
+ q(2426) => q(gbq),
+ q(2427) => q(gbr),
+ q(2428) => q(gbs),
+ q(2429) => q(gbu),
+ q(2430) => q(gbv),
+ q(2431) => q(gbx),
+ q(2432) => q(gby),
+ q(2433) => q(gbz),
+ q(2434) => q(gcc),
+ q(2435) => q(gcd),
+ q(2436) => q(gce),
+ q(2437) => q(gcf),
+ q(2438) => q(gcl),
+ q(2439) => q(gcn),
+ q(2440) => q(gcr),
+ q(2441) => q(gct),
+ q(2442) => q(gda),
+ q(2443) => q(gdb),
+ q(2444) => q(gdc),
+ q(2445) => q(gdd),
+ q(2446) => q(gde),
+ q(2447) => q(gdf),
+ q(2448) => q(gdg),
+ q(2449) => q(gdh),
+ q(2450) => q(gdi),
+ q(2451) => q(gdj),
+ q(2452) => q(gdk),
+ q(2453) => q(gdl),
+ q(2454) => q(gdm),
+ q(2455) => q(gdn),
+ q(2456) => q(gdo),
+ q(2457) => q(gdq),
+ q(2458) => q(gdr),
+ q(2459) => q(gds),
+ q(2460) => q(gdu),
+ q(2461) => q(gdx),
+ q(2462) => q(gea),
+ q(2463) => q(geb),
+ q(2464) => q(gec),
+ q(2465) => q(ged),
+ q(2466) => q(geg),
+ q(2467) => q(geh),
+ q(2468) => q(gei),
+ q(2469) => q(gej),
+ q(2470) => q(gek),
+ q(2471) => q(gel),
+ q(2472) => q(geq),
+ q(2473) => q(ges),
+ q(2474) => q(gew),
+ q(2475) => q(gex),
+ q(2476) => q(gey),
+ q(2477) => q(gfk),
+ q(2478) => q(gft),
+ q(2479) => q(gfx),
+ q(2480) => q(gga),
+ q(2481) => q(ggb),
+ q(2482) => q(ggd),
+ q(2483) => q(gge),
+ q(2484) => q(ggg),
+ q(2485) => q(ggk),
+ q(2486) => q(ggl),
+ q(2487) => q(ggn),
+ q(2488) => q(ggo),
+ q(2489) => q(ggr),
+ q(2490) => q(ggt),
+ q(2491) => q(ggu),
+ q(2492) => q(ggw),
+ q(2493) => q(gha),
+ q(2494) => q(ghc),
+ q(2495) => q(ghe),
+ q(2496) => q(ghh),
+ q(2497) => q(ghk),
+ q(2498) => q(ghl),
+ q(2499) => q(ghn),
+ q(2500) => q(gho),
+ q(2501) => q(ghr),
+ q(2502) => q(ghs),
+ q(2503) => q(ght),
+ q(2504) => q(gia),
+ q(2505) => q(gib),
+ q(2506) => q(gic),
+ q(2507) => q(gid),
+ q(2508) => q(gig),
+ q(2509) => q(gim),
+ q(2510) => q(gin),
+ q(2511) => q(gip),
+ q(2512) => q(giq),
+ q(2513) => q(gir),
+ q(2514) => q(gis),
+ q(2515) => q(git),
+ q(2516) => q(giu),
+ q(2517) => q(giw),
+ q(2518) => q(gix),
+ q(2519) => q(giy),
+ q(2520) => q(giz),
+ q(2521) => q(gji),
+ q(2522) => q(gjk),
+ q(2523) => q(gjn),
+ q(2524) => q(gju),
+ q(2525) => q(gka),
+ q(2526) => q(gke),
+ q(2527) => q(gkn),
+ q(2528) => q(gko),
+ q(2529) => q(gkp),
+ q(2530) => q(glc),
+ q(2531) => q(gld),
+ q(2532) => q(glh),
+ q(2533) => q(gli),
+ q(2534) => q(glj),
+ q(2535) => q(glk),
+ q(2536) => q(glo),
+ q(2537) => q(glr),
+ q(2538) => q(glu),
+ q(2539) => q(glw),
+ q(2540) => q(gly),
+ q(2541) => q(gma),
+ q(2542) => q(gmb),
+ q(2543) => q(gmd),
+ q(2544) => q(gml),
+ q(2545) => q(gmm),
+ q(2546) => q(gmn),
+ q(2547) => q(gmu),
+ q(2548) => q(gmv),
+ q(2549) => q(gmx),
+ q(2550) => q(gmy),
+ q(2551) => q(gna),
+ q(2552) => q(gnb),
+ q(2553) => q(gnc),
+ q(2554) => q(gnd),
+ q(2555) => q(gne),
+ q(2556) => q(gng),
+ q(2557) => q(gnh),
+ q(2558) => q(gni),
+ q(2559) => q(gnk),
+ q(2560) => q(gnl),
+ q(2561) => q(gnm),
+ q(2562) => q(gnn),
+ q(2563) => q(gno),
+ q(2564) => q(gnq),
+ q(2565) => q(gnr),
+ q(2566) => q(gnt),
+ q(2567) => q(gnu),
+ q(2568) => q(gnw),
+ q(2569) => q(gnz),
+ q(2570) => q(goa),
+ q(2571) => q(gob),
+ q(2572) => q(goc),
+ q(2573) => q(god),
+ q(2574) => q(goe),
+ q(2575) => q(gof),
+ q(2576) => q(gog),
+ q(2577) => q(goi),
+ q(2578) => q(goj),
+ q(2579) => q(gok),
+ q(2580) => q(gol),
+ q(2581) => q(gom),
+ q(2582) => q(goo),
+ q(2583) => q(gop),
+ q(2584) => q(goq),
+ q(2585) => q(gos),
+ q(2586) => q(gou),
+ q(2587) => q(gow),
+ q(2588) => q(gox),
+ q(2589) => q(goy),
+ q(2590) => q(goz),
+ q(2591) => q(gpa),
+ q(2592) => q(gpe),
+ q(2593) => q(gpn),
+ q(2594) => q(gqa),
+ q(2595) => q(gqi),
+ q(2596) => q(gqn),
+ q(2597) => q(gqr),
+ q(2598) => q(gqu),
+ q(2599) => q(gra),
+ q(2600) => q(grd),
+ q(2601) => q(grg),
+ q(2602) => q(grh),
+ q(2603) => q(gri),
+ q(2604) => q(grj),
+ q(2605) => q(grm),
+ q(2606) => q(gro),
+ q(2607) => q(grq),
+ q(2608) => q(grr),
+ q(2609) => q(grs),
+ q(2610) => q(grt),
+ q(2611) => q(gru),
+ q(2612) => q(grv),
+ q(2613) => q(grw),
+ q(2614) => q(grx),
+ q(2615) => q(gry),
+ q(2616) => q(grz),
+ q(2617) => q(gse),
+ q(2618) => q(gsg),
+ q(2619) => q(gsl),
+ q(2620) => q(gsm),
+ q(2621) => q(gsn),
+ q(2622) => q(gso),
+ q(2623) => q(gsp),
+ q(2624) => q(gss),
+ q(2625) => q(gta),
+ q(2626) => q(gti),
+ q(2627) => q(gua),
+ q(2628) => q(gub),
+ q(2629) => q(guc),
+ q(2630) => q(gud),
+ q(2631) => q(gue),
+ q(2632) => q(guf),
+ q(2633) => q(gug),
+ q(2634) => q(guh),
+ q(2635) => q(gui),
+ q(2636) => q(guk),
+ q(2637) => q(gul),
+ q(2638) => q(gum),
+ q(2639) => q(gun),
+ q(2640) => q(guo),
+ q(2641) => q(gup),
+ q(2642) => q(yif),
+ q(2643) => q(gur),
+ q(2644) => q(gus),
+ q(2645) => q(gut),
+ q(2646) => q(guu),
+ q(2647) => q(guv),
+ q(2648) => q(guw),
+ q(2649) => q(gux),
+ q(2650) => q(guz),
+ q(2651) => q(gva),
+ q(2652) => q(gvc),
+ q(2653) => q(gve),
+ q(2654) => q(gvf),
+ q(2655) => q(gvj),
+ q(2656) => q(gvl),
+ q(2657) => q(gvm),
+ q(2658) => q(gvn),
+ q(2659) => q(gvo),
+ q(2660) => q(gvp),
+ q(2661) => q(gvr),
+ q(2662) => q(gvs),
+ q(2663) => q(gvy),
+ q(2664) => q(gwa),
+ q(2665) => q(gwb),
+ q(2666) => q(gwc),
+ q(2667) => q(gwd),
+ q(2668) => q(gwe),
+ q(2669) => q(gwf),
+ q(2670) => q(gwg),
+ q(2671) => q(gwj),
+ q(2672) => q(gwm),
+ q(2673) => q(gwn),
+ q(2674) => q(gwr),
+ q(2675) => q(gwt),
+ q(2676) => q(gwu),
+ q(2677) => q(gww),
+ q(2678) => q(gwx),
+ q(2679) => q(gxx),
+ q(2680) => q(gya),
+ q(2681) => q(gyb),
+ q(2682) => q(gyd),
+ q(2683) => q(gye),
+ q(2684) => q(gyf),
+ q(2685) => q(gyg),
+ q(2686) => q(gyi),
+ q(2687) => q(gyl),
+ q(2688) => q(gym),
+ q(2689) => q(gyn),
+ q(2690) => q(gyr),
+ q(2691) => q(gyy),
+ q(2692) => q(gza),
+ q(2693) => q(gzi),
+ q(2694) => q(gzn),
+ q(2695) => q(haa),
+ q(2696) => q(hab),
+ q(2697) => q(hac),
+ q(2698) => q(had),
+ q(2699) => q(hae),
+ q(2700) => q(haf),
+ q(2701) => q(hag),
+ q(2702) => q(hah),
+ q(2703) => q(haj),
+ q(2704) => q(hak),
+ q(2705) => q(hal),
+ q(2706) => q(ham),
+ q(2707) => q(han),
+ q(2708) => q(hao),
+ q(2709) => q(hap),
+ q(2710) => q(haq),
+ q(2711) => q(har),
+ q(2712) => q(has),
+ q(2713) => q(hav),
+ q(2714) => q(hax),
+ q(2715) => q(hay),
+ q(2716) => q(haz),
+ q(2717) => q(hba),
+ q(2718) => q(hbb),
+ q(2719) => q(hbn),
+ q(2720) => q(hbo),
+ q(2721) => q(hbu),
+ q(2722) => q(hca),
+ q(2723) => q(hch),
+ q(2724) => q(hdn),
+ q(2725) => q(hds),
+ q(2726) => q(hdy),
+ q(2727) => q(hea),
+ q(2728) => q(hed),
+ q(2729) => q(heg),
+ q(2730) => q(heh),
+ q(2731) => q(hei),
+ q(2732) => q(hem),
+ q(2733) => q(hgm),
+ q(2734) => q(hgw),
+ q(2735) => q(hhi),
+ q(2736) => q(hhr),
+ q(2737) => q(hhy),
+ q(2738) => q(hia),
+ q(2739) => q(hib),
+ q(2740) => q(hid),
+ q(2741) => q(hif),
+ q(2742) => q(hig),
+ q(2743) => q(hih),
+ q(2744) => q(hii),
+ q(2745) => q(hij),
+ q(2746) => q(hik),
+ q(2747) => q(hio),
+ q(2748) => q(hir),
+ q(2749) => q(hiw),
+ q(2750) => q(hix),
+ q(2751) => q(hji),
+ q(2752) => q(hka),
+ q(2753) => q(hke),
+ q(2754) => q(hkk),
+ q(2755) => q(hks),
+ q(2756) => q(hla),
+ q(2757) => q(hlb),
+ q(2758) => q(hld),
+ q(2759) => q(hle),
+ q(2760) => q(hlt),
+ q(2761) => q(hlu),
+ q(2762) => q(hma),
+ q(2763) => q(hmb),
+ q(2764) => q(hmc),
+ q(2765) => q(hmd),
+ q(2766) => q(hme),
+ q(2767) => q(hmf),
+ q(2768) => q(hmg),
+ q(2769) => q(hmh),
+ q(2770) => q(hmi),
+ q(2771) => q(hmj),
+ q(2772) => q(hmk),
+ q(2773) => q(hml),
+ q(2774) => q(hmm),
+ q(2775) => q(hmp),
+ q(2776) => q(hmq),
+ q(2777) => q(hmr),
+ q(2778) => q(hms),
+ q(2779) => q(hmt),
+ q(2780) => q(hmu),
+ q(2781) => q(hmv),
+ q(2782) => q(hmw),
+ q(2783) => q(hmy),
+ q(2784) => q(hmz),
+ q(2785) => q(hna),
+ q(2786) => q(hnd),
+ q(2787) => q(hne),
+ q(2788) => q(hnh),
+ q(2789) => q(hni),
+ q(2790) => q(hnj),
+ q(2791) => q(hnn),
+ q(2792) => q(hno),
+ q(2793) => q(hns),
+ q(2794) => q(hnu),
+ q(2795) => q(hoa),
+ q(2796) => q(hob),
+ q(2797) => q(hoc),
+ q(2798) => q(hod),
+ q(2799) => q(hoe),
+ q(2800) => q(hoh),
+ q(2801) => q(hoi),
+ q(2802) => q(hoj),
+ q(2803) => q(hol),
+ q(2804) => q(hom),
+ q(2805) => q(hoo),
+ q(2806) => q(hop),
+ q(2807) => q(hor),
+ q(2808) => q(hos),
+ q(2809) => q(hot),
+ q(2810) => q(hov),
+ q(2811) => q(how),
+ q(2812) => q(hoy),
+ q(2813) => q(hoz),
+ q(2814) => q(hpo),
+ q(2815) => q(hps),
+ q(2816) => q(hra),
+ q(2817) => q(hre),
+ q(2818) => q(hrk),
+ q(2819) => q(hrm),
+ q(2820) => q(hro),
+ q(2821) => q(hrt),
+ q(2822) => q(hru),
+ q(2823) => q(hrx),
+ q(2824) => q(hrz),
+ q(2825) => q(hsh),
+ q(2826) => q(hsl),
+ q(2827) => q(hsn),
+ q(2828) => q(hss),
+ q(2829) => q(hti),
+ q(2830) => q(hto),
+ q(2831) => q(hts),
+ q(2832) => q(htu),
+ q(2833) => q(htx),
+ q(2834) => q(hub),
+ q(2835) => q(huc),
+ q(2836) => q(hud),
+ q(2837) => q(hue),
+ q(2838) => q(huf),
+ q(2839) => q(hug),
+ q(2840) => q(huh),
+ q(2841) => q(hui),
+ q(2842) => q(huj),
+ q(2843) => q(huk),
+ q(2844) => q(hul),
+ q(2845) => q(hum),
+ q(2846) => q(huo),
+ q(2847) => q(huq),
+ q(2848) => q(hur),
+ q(2849) => q(hus),
+ q(2850) => q(hut),
+ q(2851) => q(huu),
+ q(2852) => q(huv),
+ q(2853) => q(huw),
+ q(2854) => q(hux),
+ q(2855) => q(huy),
+ q(2856) => q(huz),
+ q(2857) => q(hvc),
+ q(2858) => q(hve),
+ q(2859) => q(hvk),
+ q(2860) => q(hvn),
+ q(2861) => q(hvv),
+ q(2862) => q(hwa),
+ q(2863) => q(hwc),
+ q(2864) => q(hwo),
+ q(2865) => q(hya),
+ q(2866) => q(iai),
+ q(2867) => q(ian),
+ q(2868) => q(iap),
+ q(2869) => q(iar),
+ q(2870) => q(ibb),
+ q(2871) => q(ibd),
+ q(2872) => q(ibe),
+ q(2873) => q(ibg),
+ q(2874) => q(ibl),
+ q(2875) => q(ibm),
+ q(2876) => q(ibn),
+ q(2877) => q(ibr),
+ q(2878) => q(ibu),
+ q(2879) => q(iby),
+ q(2880) => q(ica),
+ q(2881) => q(ich),
+ q(2882) => q(icl),
+ q(2883) => q(icr),
+ q(2884) => q(ida),
+ q(2885) => q(idb),
+ q(2886) => q(idc),
+ q(2887) => q(idd),
+ q(2888) => q(ide),
+ q(2889) => q(idi),
+ q(2890) => q(idr),
+ q(2891) => q(ids),
+ q(2892) => q(idt),
+ q(2893) => q(idu),
+ q(2894) => q(ifa),
+ q(2895) => q(ifb),
+ q(2896) => q(ife),
+ q(2897) => q(iff),
+ q(2898) => q(ifk),
+ q(2899) => q(ifm),
+ q(2900) => q(ifu),
+ q(2901) => q(ify),
+ q(2902) => q(igb),
+ q(2903) => q(ige),
+ q(2904) => q(igg),
+ q(2905) => q(igl),
+ q(2906) => q(igm),
+ q(2907) => q(ign),
+ q(2908) => q(igo),
+ q(2909) => q(igs),
+ q(2910) => q(igw),
+ q(2911) => q(ihb),
+ q(2912) => q(ihi),
+ q(2913) => q(ihp),
+ q(2914) => q(ihw),
+ q(2915) => q(ijc),
+ q(2916) => q(ije),
+ q(2917) => q(ijj),
+ q(2918) => q(ijn),
+ q(2919) => q(ijs),
+ q(2920) => q(ike),
+ q(2921) => q(iki),
+ q(2922) => q(ikk),
+ q(2923) => q(ikl),
+ q(2924) => q(iko),
+ q(2925) => q(ikp),
+ q(2926) => q(ikt),
+ q(2927) => q(ikv),
+ q(2928) => q(ikw),
+ q(2929) => q(ikx),
+ q(2930) => q(ikz),
+ q(2931) => q(ila),
+ q(2932) => q(ilb),
+ q(2933) => q(ilg),
+ q(2934) => q(ili),
+ q(2935) => q(ilk),
+ q(2936) => q(ill),
+ q(2937) => q(ils),
+ q(2938) => q(ilu),
+ q(2939) => q(ilv),
+ q(2940) => q(ilw),
+ q(2941) => q(ima),
+ q(2942) => q(ime),
+ q(2943) => q(imi),
+ q(2944) => q(iml),
+ q(2945) => q(imn),
+ q(2946) => q(imo),
+ q(2947) => q(imr),
+ q(2948) => q(ims),
+ q(2949) => q(imy),
+ q(2950) => q(inb),
+ q(2951) => q(ing),
+ q(2952) => q(inj),
+ q(2953) => q(inl),
+ q(2954) => q(inm),
+ q(2955) => q(inn),
+ q(2956) => q(ino),
+ q(2957) => q(inp),
+ q(2958) => q(ins),
+ q(2959) => q(int),
+ q(2960) => q(inz),
+ q(2961) => q(ior),
+ q(2962) => q(iou),
+ q(2963) => q(iow),
+ q(2964) => q(ipi),
+ q(2965) => q(ipo),
+ q(2966) => q(iqu),
+ q(2967) => q(ire),
+ q(2968) => q(irh),
+ q(2969) => q(iri),
+ q(2970) => q(irk),
+ q(2971) => q(irn),
+ q(2972) => q(irr),
+ q(2973) => q(iru),
+ q(2974) => q(irx),
+ q(2975) => q(iry),
+ q(2976) => q(isa),
+ q(2977) => q(isc),
+ q(2978) => q(isd),
+ q(2979) => q(ise),
+ q(2980) => q(isg),
+ q(2981) => q(ish),
+ q(2982) => q(isi),
+ q(2983) => q(isk),
+ q(2984) => q(ism),
+ q(2985) => q(isn),
+ q(2986) => q(iso),
+ q(2987) => q(isr),
+ q(2988) => q(ist),
+ q(2989) => q(isu),
+ q(2990) => q(itb),
+ q(2991) => q(ite),
+ q(2992) => q(iti),
+ q(2993) => q(itk),
+ q(2994) => q(itl),
+ q(2995) => q(itm),
+ q(2996) => q(ito),
+ q(2997) => q(itr),
+ q(2998) => q(its),
+ q(2999) => q(itt),
+ q(3000) => q(itv),
+ q(3001) => q(itw),
+ q(3002) => q(itx),
+ q(3003) => q(ity),
+ q(3004) => q(itz),
+ q(3005) => q(ium),
+ q(3006) => q(ivb),
+ q(3007) => q(ivv),
+ q(3008) => q(iwk),
+ q(3009) => q(iwm),
+ q(3010) => q(iwo),
+ q(3011) => q(iws),
+ q(3012) => q(ixc),
+ q(3013) => q(ixl),
+ q(3014) => q(iya),
+ q(3015) => q(iyo),
+ q(3016) => q(iyx),
+ q(3017) => q(izh),
+ q(3018) => q(izi),
+ q(3019) => q(izr),
+ q(3020) => q(jaa),
+ q(3021) => q(jab),
+ q(3022) => q(jac),
+ q(3023) => q(jad),
+ q(3024) => q(jae),
+ q(3025) => q(jaf),
+ q(3026) => q(jah),
+ q(3027) => q(jaj),
+ q(3028) => q(jak),
+ q(3029) => q(jal),
+ q(3030) => q(jam),
+ q(3031) => q(jan),
+ q(3032) => q(jao),
+ q(3033) => q(jaq),
+ q(3034) => q(jas),
+ q(3035) => q(jat),
+ q(3036) => q(jau),
+ q(3037) => q(jax),
+ q(3038) => q(jay),
+ q(3039) => q(jaz),
+ q(3040) => q(jbe),
+ q(3041) => q(jbj),
+ q(3042) => q(jbk),
+ q(3043) => q(jbn),
+ q(3044) => q(jbr),
+ q(3045) => q(jbt),
+ q(3046) => q(jbu),
+ q(3047) => q(jbw),
+ q(3048) => q(jcs),
+ q(3049) => q(jct),
+ q(3050) => q(jda),
+ q(3051) => q(jdg),
+ q(3052) => q(jdt),
+ q(3053) => q(jeb),
+ q(3054) => q(jee),
+ q(3055) => q(jeg),
+ q(3056) => q(jeh),
+ q(3057) => q(jei),
+ q(3058) => q(jek),
+ q(3059) => q(jel),
+ q(3060) => q(jen),
+ q(3061) => q(jer),
+ q(3062) => q(jet),
+ q(3063) => q(jeu),
+ q(3064) => q(jgb),
+ q(3065) => q(jge),
+ q(3066) => q(jgk),
+ q(3067) => q(jgo),
+ q(3068) => q(jhi),
+ q(3069) => q(jhs),
+ q(3070) => q(jia),
+ q(3071) => q(jib),
+ q(3072) => q(jic),
+ q(3073) => q(jid),
+ q(3074) => q(jie),
+ q(3075) => q(jig),
+ q(3076) => q(jih),
+ q(3077) => q(jii),
+ q(3078) => q(jil),
+ q(3079) => q(jim),
+ q(3080) => q(jio),
+ q(3081) => q(jiq),
+ q(3082) => q(jit),
+ q(3083) => q(jiu),
+ q(3084) => q(jiv),
+ q(3085) => q(jiy),
+ q(3086) => q(jjr),
+ q(3087) => q(jkm),
+ q(3088) => q(jko),
+ q(3089) => q(jkp),
+ q(3090) => q(jkr),
+ q(3091) => q(jku),
+ q(3092) => q(jle),
+ q(3093) => q(jls),
+ q(3094) => q(jma),
+ q(3095) => q(jmb),
+ q(3096) => q(jmc),
+ q(3097) => q(jmd),
+ q(3098) => q(jmi),
+ q(3099) => q(jml),
+ q(3100) => q(jmn),
+ q(3101) => q(jmr),
+ q(3102) => q(jms),
+ q(3103) => q(jmw),
+ q(3104) => q(jmx),
+ q(3105) => q(jna),
+ q(3106) => q(jnd),
+ q(3107) => q(jng),
+ q(3108) => q(jni),
+ q(3109) => q(jnj),
+ q(3110) => q(jnl),
+ q(3111) => q(jns),
+ q(3112) => q(job),
+ q(3113) => q(jod),
+ q(3114) => q(jor),
+ q(3115) => q(jos),
+ q(3116) => q(jow),
+ q(3117) => q(jpa),
+ q(3118) => q(jqr),
+ q(3119) => q(jra),
+ q(3120) => q(jrr),
+ q(3121) => q(jrt),
+ q(3122) => q(jru),
+ q(3123) => q(jsl),
+ q(3124) => q(jua),
+ q(3125) => q(jub),
+ q(3126) => q(juc),
+ q(3127) => q(jud),
+ q(3128) => q(juh),
+ q(3129) => q(jui),
+ q(3130) => q(juk),
+ q(3131) => q(jul),
+ q(3132) => q(jum),
+ q(3133) => q(jun),
+ q(3134) => q(juo),
+ q(3135) => q(jup),
+ q(3136) => q(jur),
+ q(3137) => q(jus),
+ q(3138) => q(jut),
+ q(3139) => q(juu),
+ q(3140) => q(juw),
+ q(3141) => q(juy),
+ q(3142) => q(jvd),
+ q(3143) => q(jvn),
+ q(3144) => q(jwi),
+ q(3145) => q(jya),
+ q(3146) => q(jye),
+ q(3147) => q(jyy),
+ q(3148) => q(kad),
+ q(3149) => q(kae),
+ q(3150) => q(kaf),
+ q(3151) => q(kag),
+ q(3152) => q(kah),
+ q(3153) => q(kai),
+ q(3154) => q(kaj),
+ q(3155) => q(kak),
+ q(3156) => q(kao),
+ q(3157) => q(kap),
+ q(3158) => q(kaq),
+ q(3159) => q(kav),
+ q(3160) => q(kax),
+ q(3161) => q(kay),
+ q(3162) => q(kba),
+ q(3163) => q(kbb),
+ q(3164) => q(kbc),
+ q(3165) => q(kbe),
+ q(3166) => q(kbf),
+ q(3167) => q(kbg),
+ q(3168) => q(kbh),
+ q(3169) => q(kbi),
+ q(3170) => q(kbj),
+ q(3171) => q(kbk),
+ q(3172) => q(kbl),
+ q(3173) => q(kbm),
+ q(3174) => q(kbn),
+ q(3175) => q(kbo),
+ q(3176) => q(kbp),
+ q(3177) => q(kbq),
+ q(3178) => q(kbr),
+ q(3179) => q(kbs),
+ q(3180) => q(kbt),
+ q(3181) => q(kbu),
+ q(3182) => q(kbv),
+ q(3183) => q(kbw),
+ q(3184) => q(kbx),
+ q(3185) => q(kby),
+ q(3186) => q(kbz),
+ q(3187) => q(kca),
+ q(3188) => q(kcb),
+ q(3189) => q(kcc),
+ q(3190) => q(kcd),
+ q(3191) => q(kce),
+ q(3192) => q(kcf),
+ q(3193) => q(kcg),
+ q(3194) => q(kch),
+ q(3195) => q(kci),
+ q(3196) => q(kcj),
+ q(3197) => q(kck),
+ q(3198) => q(kcl),
+ q(3199) => q(kcm),
+ q(3200) => q(kcn),
+ q(3201) => q(kco),
+ q(3202) => q(kcp),
+ q(3203) => q(kcq),
+ q(3204) => q(kcr),
+ q(3205) => q(kcs),
+ q(3206) => q(kct),
+ q(3207) => q(kcu),
+ q(3208) => q(kcv),
+ q(3209) => q(kcw),
+ q(3210) => q(kcx),
+ q(3211) => q(kcy),
+ q(3212) => q(kcz),
+ q(3213) => q(kda),
+ q(3214) => q(kdc),
+ q(3215) => q(kdd),
+ q(3216) => q(kde),
+ q(3217) => q(kdf),
+ q(3218) => q(kdg),
+ q(3219) => q(kdh),
+ q(3220) => q(kdi),
+ q(3221) => q(kdj),
+ q(3222) => q(kdk),
+ q(3223) => q(kdl),
+ q(3224) => q(kdm),
+ q(3225) => q(kdn),
+ q(3226) => q(kdp),
+ q(3227) => q(kdq),
+ q(3228) => q(kdr),
+ q(3229) => q(kdt),
+ q(3230) => q(kdu),
+ q(3231) => q(kdw),
+ q(3232) => q(kdx),
+ q(3233) => q(kdy),
+ q(3234) => q(kdz),
+ q(3235) => q(kea),
+ q(3236) => q(keb),
+ q(3237) => q(kec),
+ q(3238) => q(ked),
+ q(3239) => q(kee),
+ q(3240) => q(kef),
+ q(3241) => q(keg),
+ q(3242) => q(keh),
+ q(3243) => q(kei),
+ q(3244) => q(kej),
+ q(3245) => q(kek),
+ q(3246) => q(kel),
+ q(3247) => q(kem),
+ q(3248) => q(ken),
+ q(3249) => q(keo),
+ q(3250) => q(kep),
+ q(3251) => q(keq),
+ q(3252) => q(ker),
+ q(3253) => q(kes),
+ q(3254) => q(ket),
+ q(3255) => q(keu),
+ q(3256) => q(kev),
+ q(3257) => q(kew),
+ q(3258) => q(kex),
+ q(3259) => q(key),
+ q(3260) => q(kez),
+ q(3261) => q(kfa),
+ q(3262) => q(kfb),
+ q(3263) => q(kfc),
+ q(3264) => q(kfd),
+ q(3265) => q(kfe),
+ q(3266) => q(kff),
+ q(3267) => q(kfg),
+ q(3268) => q(kfh),
+ q(3269) => q(kfi),
+ q(3270) => q(kfj),
+ q(3271) => q(kfk),
+ q(3272) => q(kfl),
+ q(3273) => q(kfm),
+ q(3274) => q(kfn),
+ q(3275) => q(kfo),
+ q(3276) => q(kfp),
+ q(3277) => q(kfq),
+ q(3278) => q(kfr),
+ q(3279) => q(kfs),
+ q(3280) => q(kft),
+ q(3281) => q(kfu),
+ q(3282) => q(kfv),
+ q(3283) => q(kfw),
+ q(3284) => q(kfx),
+ q(3285) => q(kfy),
+ q(3286) => q(kfz),
+ q(3287) => q(kga),
+ q(3288) => q(kgb),
+ q(3289) => q(kgc),
+ q(3290) => q(kgd),
+ q(3291) => q(kge),
+ q(3292) => q(kgf),
+ q(3293) => q(kgg),
+ q(3294) => q(kgi),
+ q(3295) => q(kgj),
+ q(3296) => q(kgk),
+ q(3297) => q(kgl),
+ q(3298) => q(kuq),
+ q(3299) => q(kgn),
+ q(3300) => q(kgo),
+ q(3301) => q(kgp),
+ q(3302) => q(kgq),
+ q(3303) => q(kgr),
+ q(3304) => q(kgs),
+ q(3305) => q(kgt),
+ q(3306) => q(kgu),
+ q(3307) => q(kgv),
+ q(3308) => q(kgw),
+ q(3309) => q(kgx),
+ q(3310) => q(kgy),
+ q(3311) => q(khb),
+ q(3312) => q(khc),
+ q(3313) => q(khd),
+ q(3314) => q(khe),
+ q(3315) => q(khf),
+ q(3316) => q(khg),
+ q(3317) => q(khh),
+ q(3318) => q(khj),
+ q(3319) => q(khk),
+ q(3320) => q(khl),
+ q(3321) => q(khn),
+ q(3322) => q(khp),
+ q(3323) => q(khq),
+ q(3324) => q(khr),
+ q(3325) => q(khs),
+ q(3326) => q(kht),
+ q(3327) => q(khu),
+ q(3328) => q(khv),
+ q(3329) => q(khw),
+ q(3330) => q(khx),
+ q(3331) => q(khy),
+ q(3332) => q(khz),
+ q(3333) => q(kia),
+ q(3334) => q(kib),
+ q(3335) => q(kic),
+ q(3336) => q(kid),
+ q(3337) => q(kie),
+ q(3338) => q(kif),
+ q(3339) => q(kig),
+ q(3340) => q(kih),
+ q(3341) => q(kii),
+ q(3342) => q(kij),
+ q(3343) => q(kil),
+ q(3344) => q(kim),
+ q(3345) => q(kio),
+ q(3346) => q(kip),
+ q(3347) => q(kiq),
+ q(3348) => q(kis),
+ q(3349) => q(kit),
+ q(3350) => q(kiu),
+ q(3351) => q(kiv),
+ q(3352) => q(kiw),
+ q(3353) => q(kix),
+ q(3354) => q(kiy),
+ q(3355) => q(kiz),
+ q(3356) => q(kja),
+ q(3357) => q(kjb),
+ q(3358) => q(kjc),
+ q(3359) => q(kjd),
+ q(3360) => q(kje),
+ q(3361) => q(kjf),
+ q(3362) => q(kjg),
+ q(3363) => q(kjh),
+ q(3364) => q(kji),
+ q(3365) => q(kjj),
+ q(3366) => q(kjk),
+ q(3367) => q(kjl),
+ q(3368) => q(kjm),
+ q(3369) => q(kjn),
+ q(3370) => q(kjo),
+ q(3371) => q(kjp),
+ q(3372) => q(kjq),
+ q(3373) => q(kjr),
+ q(3374) => q(kjs),
+ q(3375) => q(kjt),
+ q(3376) => q(kju),
+ q(3377) => q(kjx),
+ q(3378) => q(kjy),
+ q(3379) => q(kjz),
+ q(3380) => q(kka),
+ q(3381) => q(kkb),
+ q(3382) => q(kkc),
+ q(3383) => q(kkd),
+ q(3384) => q(kke),
+ q(3385) => q(kkf),
+ q(3386) => q(kkg),
+ q(3387) => q(kkh),
+ q(3388) => q(kki),
+ q(3389) => q(kkj),
+ q(3390) => q(kkk),
+ q(3391) => q(kkl),
+ q(3392) => q(kkm),
+ q(3393) => q(kkn),
+ q(3394) => q(kko),
+ q(3395) => q(kkp),
+ q(3396) => q(kkq),
+ q(3397) => q(kkr),
+ q(3398) => q(kks),
+ q(3399) => q(kkt),
+ q(3400) => q(kku),
+ q(3401) => q(kkv),
+ q(3402) => q(kkw),
+ q(3403) => q(kkx),
+ q(3404) => q(kky),
+ q(3405) => q(kkz),
+ q(3406) => q(kla),
+ q(3407) => q(klb),
+ q(3408) => q(klc),
+ q(3409) => q(kld),
+ q(3410) => q(kle),
+ q(3411) => q(klf),
+ q(3412) => q(klg),
+ q(3413) => q(klh),
+ q(3414) => q(kli),
+ q(3415) => q(klj),
+ q(3416) => q(klk),
+ q(3417) => q(kll),
+ q(3418) => q(klm),
+ q(3419) => q(kln),
+ q(3420) => q(klo),
+ q(3421) => q(klp),
+ q(3422) => q(klq),
+ q(3423) => q(klr),
+ q(3424) => q(kls),
+ q(3425) => q(klt),
+ q(3426) => q(klu),
+ q(3427) => q(klv),
+ q(3428) => q(klw),
+ q(3429) => q(klx),
+ q(3430) => q(kly),
+ q(3431) => q(klz),
+ q(3432) => q(kma),
+ q(3433) => q(kmc),
+ q(3434) => q(kmd),
+ q(3435) => q(kme),
+ q(3436) => q(kmf),
+ q(3437) => q(kmg),
+ q(3438) => q(kmh),
+ q(3439) => q(kmi),
+ q(3440) => q(kmj),
+ q(3441) => q(kmk),
+ q(3442) => q(kml),
+ q(3443) => q(kmm),
+ q(3444) => q(kmn),
+ q(3445) => q(kmo),
+ q(3446) => q(kmp),
+ q(3447) => q(kmq),
+ q(3448) => q(kmr),
+ q(3449) => q(kms),
+ q(3450) => q(kmt),
+ q(3451) => q(kmu),
+ q(3452) => q(kmv),
+ q(3453) => q(kmw),
+ q(3454) => q(kmx),
+ q(3455) => q(kmy),
+ q(3456) => q(kmz),
+ q(3457) => q(kna),
+ q(3458) => q(knb),
+ q(3459) => q(knc),
+ q(3460) => q(knd),
+ q(3461) => q(kne),
+ q(3462) => q(knf),
+ q(3463) => q(kng),
+ q(3464) => q(kni),
+ q(3465) => q(knj),
+ q(3466) => q(knk),
+ q(3467) => q(knl),
+ q(3468) => q(knm),
+ q(3469) => q(knn),
+ q(3470) => q(kno),
+ q(3471) => q(knp),
+ q(3472) => q(knq),
+ q(3473) => q(knr),
+ q(3474) => q(kns),
+ q(3475) => q(knt),
+ q(3476) => q(knu),
+ q(3477) => q(knv),
+ q(3478) => q(knw),
+ q(3479) => q(knx),
+ q(3480) => q(kny),
+ q(3481) => q(knz),
+ q(3482) => q(koa),
+ q(3483) => q(koc),
+ q(3484) => q(kod),
+ q(3485) => q(koe),
+ q(3486) => q(kof),
+ q(3487) => q(kog),
+ q(3488) => q(koh),
+ q(3489) => q(koi),
+ q(3490) => q(koj),
+ q(3491) => q(kol),
+ q(3492) => q(koo),
+ q(3493) => q(kop),
+ q(3494) => q(koq),
+ q(3495) => q(kot),
+ q(3496) => q(kou),
+ q(3497) => q(kov),
+ q(3498) => q(kow),
+ q(3499) => q(kox),
+ q(3500) => q(koy),
+ q(3501) => q(koz),
+ q(3502) => q(kpa),
+ q(3503) => q(kpb),
+ q(3504) => q(kpc),
+ q(3505) => q(kpd),
+ q(3506) => q(kpf),
+ q(3507) => q(kpg),
+ q(3508) => q(kph),
+ q(3509) => q(kpi),
+ q(3510) => q(kpj),
+ q(3511) => q(kpk),
+ q(3512) => q(kpl),
+ q(3513) => q(kpm),
+ q(3514) => q(kpn),
+ q(3515) => q(kpo),
+ q(3516) => q(kpq),
+ q(3517) => q(kpr),
+ q(3518) => q(kps),
+ q(3519) => q(kpt),
+ q(3520) => q(kpu),
+ q(3521) => q(kpv),
+ q(3522) => q(kpw),
+ q(3523) => q(kpx),
+ q(3524) => q(kpy),
+ q(3525) => q(kpz),
+ q(3526) => q(kqa),
+ q(3527) => q(kqb),
+ q(3528) => q(kqc),
+ q(3529) => q(kqd),
+ q(3530) => q(kqe),
+ q(3531) => q(kqf),
+ q(3532) => q(kqg),
+ q(3533) => q(kqh),
+ q(3534) => q(kqi),
+ q(3535) => q(kqj),
+ q(3536) => q(kqk),
+ q(3537) => q(kql),
+ q(3538) => q(kqm),
+ q(3539) => q(kqn),
+ q(3540) => q(kqo),
+ q(3541) => q(kqp),
+ q(3542) => q(kqq),
+ q(3543) => q(kqr),
+ q(3544) => q(kqs),
+ q(3545) => q(kqt),
+ q(3546) => q(kqu),
+ q(3547) => q(kqv),
+ q(3548) => q(kqw),
+ q(3549) => q(kqx),
+ q(3550) => q(kqy),
+ q(3551) => q(kqz),
+ q(3552) => q(kra),
+ q(3553) => q(krb),
+ q(3554) => q(krd),
+ q(3555) => q(kre),
+ q(3556) => q(krf),
+ q(3557) => q(krh),
+ q(3558) => q(kri),
+ q(3559) => q(krj),
+ q(3560) => q(krk),
+ q(3561) => q(krm),
+ q(3562) => q(krn),
+ q(3563) => q(krp),
+ q(3564) => q(krr),
+ q(3565) => q(krs),
+ q(3566) => q(krt),
+ q(3567) => q(krv),
+ q(3568) => q(krw),
+ q(3569) => q(krx),
+ q(3570) => q(kry),
+ q(3571) => q(krz),
+ q(3572) => q(ksa),
+ q(3573) => q(ksb),
+ q(3574) => q(ksc),
+ q(3575) => q(ksd),
+ q(3576) => q(kse),
+ q(3577) => q(ksf),
+ q(3578) => q(ksg),
+ q(3579) => q(ksh),
+ q(3580) => q(ksi),
+ q(3581) => q(ksj),
+ q(3582) => q(ksk),
+ q(3583) => q(ksl),
+ q(3584) => q(ksm),
+ q(3585) => q(ksn),
+ q(3586) => q(kso),
+ q(3587) => q(ksp),
+ q(3588) => q(ksq),
+ q(3589) => q(ksr),
+ q(3590) => q(kss),
+ q(3591) => q(kst),
+ q(3592) => q(ksu),
+ q(3593) => q(ksv),
+ q(3594) => q(ksw),
+ q(3595) => q(ksx),
+ q(3596) => q(ksy),
+ q(3597) => q(ksz),
+ q(3598) => q(kta),
+ q(3599) => q(ktb),
+ q(3600) => q(ktc),
+ q(3601) => q(ktd),
+ q(3602) => q(kte),
+ q(3603) => q(ktf),
+ q(3604) => q(ktg),
+ q(3605) => q(kth),
+ q(3606) => q(kti),
+ q(3607) => q(ktj),
+ q(3608) => q(ktk),
+ q(3609) => q(ktl),
+ q(3610) => q(ktm),
+ q(3611) => q(ktn),
+ q(3612) => q(kto),
+ q(3613) => q(ktp),
+ q(3614) => q(ktq),
+ q(3615) => q(ktr),
+ q(3616) => q(kts),
+ q(3617) => q(ktt),
+ q(3618) => q(ktu),
+ q(3619) => q(ktv),
+ q(3620) => q(ktw),
+ q(3621) => q(ktx),
+ q(3622) => q(kty),
+ q(3623) => q(ktz),
+ q(3624) => q(kub),
+ q(3625) => q(kuc),
+ q(3626) => q(kud),
+ q(3627) => q(kue),
+ q(3628) => q(kuf),
+ q(3629) => q(kug),
+ q(3630) => q(kuh),
+ q(3631) => q(kui),
+ q(3632) => q(kuj),
+ q(3633) => q(kuk),
+ q(3634) => q(kul),
+ q(3635) => q(kun),
+ q(3636) => q(kuo),
+ q(3637) => q(kup),
+ q(3638) => q(kus),
+ q(3639) => q(kuu),
+ q(3640) => q(kuv),
+ q(3641) => q(kuw),
+ q(3642) => q(kux),
+ q(3643) => q(kuy),
+ q(3644) => q(kuz),
+ q(3645) => q(kva),
+ q(3646) => q(kvb),
+ q(3647) => q(kvc),
+ q(3648) => q(kvd),
+ q(3649) => q(kve),
+ q(3650) => q(kvf),
+ q(3651) => q(kvg),
+ q(3652) => q(kvh),
+ q(3653) => q(kvi),
+ q(3654) => q(kvj),
+ q(3655) => q(kvk),
+ q(3656) => q(kvl),
+ q(3657) => q(kvm),
+ q(3658) => q(kvn),
+ q(3659) => q(kvo),
+ q(3660) => q(kvp),
+ q(3661) => q(kvq),
+ q(3662) => q(kvr),
+ q(3663) => q(kvs),
+ q(3664) => q(kvt),
+ q(3665) => q(kvu),
+ q(3666) => q(kvv),
+ q(3667) => q(kvw),
+ q(3668) => q(kvx),
+ q(3669) => q(kvy),
+ q(3670) => q(kvz),
+ q(3671) => q(kwa),
+ q(3672) => q(kwb),
+ q(3673) => q(kwc),
+ q(3674) => q(kwd),
+ q(3675) => q(kwe),
+ q(3676) => q(kwf),
+ q(3677) => q(kwg),
+ q(3678) => q(kwh),
+ q(3679) => q(kwi),
+ q(3680) => q(kwj),
+ q(3681) => q(kwk),
+ q(3682) => q(kwl),
+ q(3683) => q(kwm),
+ q(3684) => q(kwn),
+ q(3685) => q(kwo),
+ q(3686) => q(kwp),
+ q(3687) => q(kwq),
+ q(3688) => q(kwr),
+ q(3689) => q(kws),
+ q(3690) => q(kwt),
+ q(3691) => q(kwu),
+ q(3692) => q(kwv),
+ q(3693) => q(kww),
+ q(3694) => q(kwx),
+ q(3695) => q(kwy),
+ q(3696) => q(kwz),
+ q(3697) => q(kxa),
+ q(3698) => q(kxb),
+ q(3699) => q(kxc),
+ q(3700) => q(kxd),
+ q(3701) => q(kxe),
+ q(3702) => q(kxf),
+ q(3703) => q(kxh),
+ q(3704) => q(kxi),
+ q(3705) => q(kxj),
+ q(3706) => q(kxk),
+ q(3707) => q(kxl),
+ q(3708) => q(kxm),
+ q(3709) => q(kxn),
+ q(3710) => q(kxo),
+ q(3711) => q(kxp),
+ q(3712) => q(kxq),
+ q(3713) => q(kxr),
+ q(3714) => q(kxs),
+ q(3715) => q(kxt),
+ q(3716) => q(kxu),
+ q(3717) => q(kxv),
+ q(3718) => q(kxw),
+ q(3719) => q(kxx),
+ q(3720) => q(kxy),
+ q(3721) => q(kxz),
+ q(3722) => q(kya),
+ q(3723) => q(kyb),
+ q(3724) => q(kyc),
+ q(3725) => q(kyd),
+ q(3726) => q(kye),
+ q(3727) => q(kyf),
+ q(3728) => q(kyg),
+ q(3729) => q(kyh),
+ q(3730) => q(kyi),
+ q(3731) => q(kyj),
+ q(3732) => q(kyk),
+ q(3733) => q(kyl),
+ q(3734) => q(kym),
+ q(3735) => q(kyn),
+ q(3736) => q(kyo),
+ q(3737) => q(kyp),
+ q(3738) => q(kyq),
+ q(3739) => q(kyr),
+ q(3740) => q(kys),
+ q(3741) => q(kyt),
+ q(3742) => q(kyu),
+ q(3743) => q(kyv),
+ q(3744) => q(kyw),
+ q(3745) => q(kyx),
+ q(3746) => q(kyy),
+ q(3747) => q(kyz),
+ q(3748) => q(kza),
+ q(3749) => q(kzb),
+ q(3750) => q(kzc),
+ q(3751) => q(kzd),
+ q(3752) => q(kze),
+ q(3753) => q(kzf),
+ q(3754) => q(kzg),
+ q(3755) => q(kzi),
+ q(3756) => q(kzj),
+ q(3757) => q(kzk),
+ q(3758) => q(kzl),
+ q(3759) => q(kzm),
+ q(3760) => q(kzn),
+ q(3761) => q(kzo),
+ q(3762) => q(kzp),
+ q(3763) => q(kzq),
+ q(3764) => q(kzr),
+ q(3765) => q(kzs),
+ q(3766) => q(kzt),
+ q(3767) => q(kzu),
+ q(3768) => q(kzv),
+ q(3769) => q(kzw),
+ q(3770) => q(kzx),
+ q(3771) => q(kzy),
+ q(3772) => q(kzz),
+ q(3773) => q(laa),
+ q(3774) => q(lab),
+ q(3775) => q(lac),
+ q(3776) => q(lae),
+ q(3777) => q(laf),
+ q(3778) => q(lag),
+ q(3779) => q(lai),
+ q(3780) => q(laj),
+ q(3781) => q(lak),
+ q(3782) => q(lal),
+ q(3783) => q(lan),
+ q(3784) => q(lap),
+ q(3785) => q(laq),
+ q(3786) => q(lar),
+ q(3787) => q(las),
+ q(3788) => q(lau),
+ q(3789) => q(law),
+ q(3790) => q(lax),
+ q(3791) => q(lay),
+ q(3792) => q(laz),
+ q(3793) => q(lba),
+ q(3794) => q(lbb),
+ q(3795) => q(lbc),
+ q(3796) => q(lbe),
+ q(3797) => q(lbf),
+ q(3798) => q(lbg),
+ q(3799) => q(lbi),
+ q(3800) => q(lbj),
+ q(3801) => q(lbk),
+ q(3802) => q(lbl),
+ q(3803) => q(lbm),
+ q(3804) => q(lbn),
+ q(3805) => q(lbo),
+ q(3806) => q(lbq),
+ q(3807) => q(lbr),
+ q(3808) => q(lbs),
+ q(3809) => q(lbt),
+ q(3810) => q(lbu),
+ q(3811) => q(lbv),
+ q(3812) => q(lbw),
+ q(3813) => q(lbx),
+ q(3814) => q(lby),
+ q(3815) => q(lbz),
+ q(3816) => q(lcc),
+ q(3817) => q(lcd),
+ q(3818) => q(lce),
+ q(3819) => q(lcf),
+ q(3820) => q(lch),
+ q(3821) => q(lcl),
+ q(3822) => q(lcm),
+ q(3823) => q(lcp),
+ q(3824) => q(lcs),
+ q(3825) => q(ldb),
+ q(3826) => q(ldd),
+ q(3827) => q(ldg),
+ q(3828) => q(ldh),
+ q(3829) => q(ldi),
+ q(3830) => q(ldj),
+ q(3831) => q(ldk),
+ q(3832) => q(ldl),
+ q(3833) => q(ldm),
+ q(3834) => q(ldn),
+ q(3835) => q(ldo),
+ q(3836) => q(ldp),
+ q(3837) => q(ldq),
+ q(3838) => q(lea),
+ q(3839) => q(leb),
+ q(3840) => q(lec),
+ q(3841) => q(led),
+ q(3842) => q(lee),
+ q(3843) => q(lef),
+ q(3844) => q(leg),
+ q(3845) => q(leh),
+ q(3846) => q(lei),
+ q(3847) => q(lej),
+ q(3848) => q(lek),
+ q(3849) => q(lel),
+ q(3850) => q(lem),
+ q(3851) => q(len),
+ q(3852) => q(leo),
+ q(3853) => q(lep),
+ q(3854) => q(leq),
+ q(3855) => q(ler),
+ q(3856) => q(les),
+ q(3857) => q(let),
+ q(3858) => q(leu),
+ q(3859) => q(lev),
+ q(3860) => q(lew),
+ q(3861) => q(lex),
+ q(3862) => q(ley),
+ q(3863) => q(lfa),
+ q(3864) => q(lfn),
+ q(3865) => q(lga),
+ q(3866) => q(lgb),
+ q(3867) => q(lgg),
+ q(3868) => q(lgh),
+ q(3869) => q(lgi),
+ q(3870) => q(lgk),
+ q(3871) => q(lgl),
+ q(3872) => q(lgm),
+ q(3873) => q(lgn),
+ q(3874) => q(lgq),
+ q(3875) => q(lgr),
+ q(3876) => q(lgt),
+ q(3877) => q(lgu),
+ q(3878) => q(lgz),
+ q(3879) => q(lha),
+ q(3880) => q(lhh),
+ q(3881) => q(lhi),
+ q(3882) => q(lhl),
+ q(3883) => q(lhm),
+ q(3884) => q(lhn),
+ q(3885) => q(lhp),
+ q(3886) => q(lhs),
+ q(3887) => q(lht),
+ q(3888) => q(lhu),
+ q(3889) => q(lia),
+ q(3890) => q(lib),
+ q(3891) => q(lic),
+ q(3892) => q(lid),
+ q(3893) => q(lie),
+ q(3894) => q(lif),
+ q(3895) => q(lig),
+ q(3896) => q(lih),
+ q(3897) => q(lii),
+ q(3898) => q(lij),
+ q(3899) => q(lik),
+ q(3900) => q(lil),
+ q(3901) => q(lio),
+ q(3902) => q(lip),
+ q(3903) => q(liq),
+ q(3904) => q(lir),
+ q(3905) => q(lis),
+ q(3906) => q(liu),
+ q(3907) => q(liv),
+ q(3908) => q(liw),
+ q(3909) => q(lix),
+ q(3910) => q(liy),
+ q(3911) => q(liz),
+ q(3912) => q(lje),
+ q(3913) => q(lji),
+ q(3914) => q(ljl),
+ q(3915) => q(ljp),
+ q(3916) => q(lka),
+ q(3917) => q(lkb),
+ q(3918) => q(lkc),
+ q(3919) => q(lkd),
+ q(3920) => q(lke),
+ q(3921) => q(lkh),
+ q(3922) => q(lki),
+ q(3923) => q(lkj),
+ q(3924) => q(lkl),
+ q(3925) => q(lkn),
+ q(3926) => q(lko),
+ q(3927) => q(lkr),
+ q(3928) => q(lks),
+ q(3929) => q(lkt),
+ q(3930) => q(lky),
+ q(3931) => q(lla),
+ q(3932) => q(llb),
+ q(3933) => q(llc),
+ q(3934) => q(lld),
+ q(3935) => q(lle),
+ q(3936) => q(llf),
+ q(3937) => q(llg),
+ q(3938) => q(llh),
+ q(3939) => q(lli),
+ q(3940) => q(llj),
+ q(3941) => q(llk),
+ q(3942) => q(lll),
+ q(3943) => q(llm),
+ q(3944) => q(lln),
+ q(3945) => q(llo),
+ q(3946) => q(llp),
+ q(3947) => q(llq),
+ q(3948) => q(lls),
+ q(3949) => q(llu),
+ q(3950) => q(llx),
+ q(3951) => q(lma),
+ q(3952) => q(lmb),
+ q(3953) => q(lmc),
+ q(3954) => q(lmd),
+ q(3955) => q(lme),
+ q(3956) => q(lmf),
+ q(3957) => q(lmg),
+ q(3958) => q(lmh),
+ q(3959) => q(lmi),
+ q(3960) => q(lmj),
+ q(3961) => q(lmk),
+ q(3962) => q(lml),
+ q(3963) => q(lmm),
+ q(3964) => q(lmn),
+ q(3965) => q(lmo),
+ q(3966) => q(lmp),
+ q(3967) => q(lmq),
+ q(3968) => q(lmr),
+ q(3969) => q(lmu),
+ q(3970) => q(lmv),
+ q(3971) => q(lmw),
+ q(3972) => q(lmx),
+ q(3973) => q(lmy),
+ q(3974) => q(lmz),
+ q(3975) => q(lna),
+ q(3976) => q(lnb),
+ q(3977) => q(lnd),
+ q(3978) => q(lng),
+ q(3979) => q(lnh),
+ q(3980) => q(lni),
+ q(3981) => q(lnj),
+ q(3982) => q(lnl),
+ q(3983) => q(lnm),
+ q(3984) => q(lnn),
+ q(3985) => q(lno),
+ q(3986) => q(lns),
+ q(3987) => q(lnu),
+ q(3988) => q(lnz),
+ q(3989) => q(loa),
+ q(3990) => q(lob),
+ q(3991) => q(loc),
+ q(3992) => q(loe),
+ q(3993) => q(lof),
+ q(3994) => q(log),
+ q(3995) => q(loh),
+ q(3996) => q(loi),
+ q(3997) => q(loj),
+ q(3998) => q(lok),
+ q(3999) => q(lom),
+ q(4000) => q(lon),
+ q(4001) => q(loo),
+ q(4002) => q(lop),
+ q(4003) => q(loq),
+ q(4004) => q(lor),
+ q(4005) => q(los),
+ q(4006) => q(lot),
+ q(4007) => q(lou),
+ q(4008) => q(lov),
+ q(4009) => q(low),
+ q(4010) => q(lox),
+ q(4011) => q(loy),
+ q(4012) => q(lpa),
+ q(4013) => q(lpe),
+ q(4014) => q(lpn),
+ q(4015) => q(lpo),
+ q(4016) => q(lpx),
+ q(4017) => q(lra),
+ q(4018) => q(lrc),
+ q(4019) => q(lre),
+ q(4020) => q(lrg),
+ q(4021) => q(lri),
+ q(4022) => q(lrk),
+ q(4023) => q(lrl),
+ q(4024) => q(lrm),
+ q(4025) => q(lrn),
+ q(4026) => q(lro),
+ q(4027) => q(lrr),
+ q(4028) => q(lrt),
+ q(4029) => q(lrv),
+ q(4030) => q(lrz),
+ q(4031) => q(lsa),
+ q(4032) => q(lsd),
+ q(4033) => q(lse),
+ q(4034) => q(lsg),
+ q(4035) => q(lsh),
+ q(4036) => q(lsi),
+ q(4037) => q(lsl),
+ q(4038) => q(lsm),
+ q(4039) => q(lso),
+ q(4040) => q(lsp),
+ q(4041) => q(lsr),
+ q(4042) => q(lss),
+ q(4043) => q(lst),
+ q(4044) => q(lsy),
+ q(4045) => q(ltc),
+ q(4046) => q(ltg),
+ q(4047) => q(lti),
+ q(4048) => q(ltn),
+ q(4049) => q(lto),
+ q(4050) => q(lts),
+ q(4051) => q(ltu),
+ q(4052) => q(luc),
+ q(4053) => q(lud),
+ q(4054) => q(lue),
+ q(4055) => q(luf),
+ q(4056) => q(luj),
+ q(4057) => q(luk),
+ q(4058) => q(lul),
+ q(4059) => q(lum),
+ q(4060) => q(lup),
+ q(4061) => q(luq),
+ q(4062) => q(lur),
+ q(4063) => q(lut),
+ q(4064) => q(luu),
+ q(4065) => q(luv),
+ q(4066) => q(luw),
+ q(4067) => q(luy),
+ q(4068) => q(luz),
+ q(4069) => q(lva),
+ q(4070) => q(lvk),
+ q(4071) => q(lvs),
+ q(4072) => q(lvu),
+ q(4073) => q(lwa),
+ q(4074) => q(lwe),
+ q(4075) => q(lwg),
+ q(4076) => q(lwh),
+ q(4077) => q(lwl),
+ q(4078) => q(lwm),
+ q(4079) => q(lwo),
+ q(4080) => q(lwt),
+ q(4081) => q(lww),
+ q(4082) => q(lya),
+ q(4083) => q(lyg),
+ q(4084) => q(lyn),
+ q(4085) => q(lzh),
+ q(4086) => q(lzl),
+ q(4087) => q(lzn),
+ q(4088) => q(lzz),
+ q(4089) => q(maa),
+ q(4090) => q(mab),
+ q(4091) => q(mae),
+ q(4092) => q(maf),
+ q(4093) => q(maj),
+ q(4094) => q(mam),
+ q(4095) => q(maq),
+ q(4096) => q(mat),
+ q(4097) => q(mau),
+ q(4098) => q(mav),
+ q(4099) => q(maw),
+ q(4100) => q(max),
+ q(4101) => q(maz),
+ q(4102) => q(mba),
+ q(4103) => q(mbb),
+ q(4104) => q(mbc),
+ q(4105) => q(mbd),
+ q(4106) => q(mbe),
+ q(4107) => q(mbf),
+ q(4108) => q(mbh),
+ q(4109) => q(mbi),
+ q(4110) => q(mbj),
+ q(4111) => q(mbk),
+ q(4112) => q(mbl),
+ q(4113) => q(mbm),
+ q(4114) => q(mbn),
+ q(4115) => q(mbo),
+ q(4116) => q(mbp),
+ q(4117) => q(mbq),
+ q(4118) => q(mbr),
+ q(4119) => q(mbs),
+ q(4120) => q(mbt),
+ q(4121) => q(mbu),
+ q(4122) => q(mbv),
+ q(4123) => q(mbw),
+ q(4124) => q(mbx),
+ q(4125) => q(mby),
+ q(4126) => q(mbz),
+ q(4127) => q(mca),
+ q(4128) => q(mcb),
+ q(4129) => q(mcc),
+ q(4130) => q(mcd),
+ q(4131) => q(mce),
+ q(4132) => q(mcf),
+ q(4133) => q(mcg),
+ q(4134) => q(mch),
+ q(4135) => q(mci),
+ q(4136) => q(mcj),
+ q(4137) => q(mck),
+ q(4138) => q(mcl),
+ q(4139) => q(mcm),
+ q(4140) => q(mcn),
+ q(4141) => q(mco),
+ q(4142) => q(mcp),
+ q(4143) => q(mcq),
+ q(4144) => q(mcr),
+ q(4145) => q(mcs),
+ q(4146) => q(mct),
+ q(4147) => q(mcu),
+ q(4148) => q(mcv),
+ q(4149) => q(mcw),
+ q(4150) => q(mcx),
+ q(4151) => q(mcy),
+ q(4152) => q(mcz),
+ q(4153) => q(mda),
+ q(4154) => q(mdb),
+ q(4155) => q(mdc),
+ q(4156) => q(mdd),
+ q(4157) => q(mde),
+ q(4158) => q(mdg),
+ q(4159) => q(mdh),
+ q(4160) => q(mdi),
+ q(4161) => q(mdj),
+ q(4162) => q(mdk),
+ q(4163) => q(mdl),
+ q(4164) => q(mdm),
+ q(4165) => q(mdn),
+ q(4166) => q(mdp),
+ q(4167) => q(mdq),
+ q(4168) => q(mds),
+ q(4169) => q(mdt),
+ q(4170) => q(mdu),
+ q(4171) => q(mdv),
+ q(4172) => q(mdw),
+ q(4173) => q(mdx),
+ q(4174) => q(mdy),
+ q(4175) => q(mdz),
+ q(4176) => q(mea),
+ q(4177) => q(meb),
+ q(4178) => q(mec),
+ q(4179) => q(med),
+ q(4180) => q(mee),
+ q(4181) => q(mef),
+ q(4182) => q(meg),
+ q(4183) => q(meh),
+ q(4184) => q(mei),
+ q(4185) => q(mej),
+ q(4186) => q(mek),
+ q(4187) => q(mel),
+ q(4188) => q(mem),
+ q(4189) => q(meo),
+ q(4190) => q(mep),
+ q(4191) => q(meq),
+ q(4192) => q(mer),
+ q(4193) => q(mes),
+ q(4194) => q(met),
+ q(4195) => q(meu),
+ q(4196) => q(mev),
+ q(4197) => q(mew),
+ q(4198) => q(mey),
+ q(4199) => q(mez),
+ q(4200) => q(mfa),
+ q(4201) => q(mfb),
+ q(4202) => q(mfc),
+ q(4203) => q(mfd),
+ q(4204) => q(mfe),
+ q(4205) => q(mff),
+ q(4206) => q(mfg),
+ q(4207) => q(mfh),
+ q(4208) => q(mfi),
+ q(4209) => q(mfj),
+ q(4210) => q(mfk),
+ q(4211) => q(mfl),
+ q(4212) => q(mfm),
+ q(4213) => q(mfn),
+ q(4214) => q(mfo),
+ q(4215) => q(mfp),
+ q(4216) => q(mfq),
+ q(4217) => q(mfr),
+ q(4218) => q(mfs),
+ q(4219) => q(mft),
+ q(4220) => q(mfu),
+ q(4221) => q(mfv),
+ q(4222) => q(mfw),
+ q(4223) => q(mfx),
+ q(4224) => q(mfy),
+ q(4225) => q(mfz),
+ q(4226) => q(mgb),
+ q(4227) => q(mgc),
+ q(4228) => q(mgd),
+ q(4229) => q(mge),
+ q(4230) => q(mgf),
+ q(4231) => q(mgg),
+ q(4232) => q(mgh),
+ q(4233) => q(mgi),
+ q(4234) => q(mgj),
+ q(4235) => q(mgk),
+ q(4236) => q(mgl),
+ q(4237) => q(mgm),
+ q(4238) => q(mgn),
+ q(4239) => q(mgo),
+ q(4240) => q(mgp),
+ q(4241) => q(mgq),
+ q(4242) => q(mgr),
+ q(4243) => q(mgs),
+ q(4244) => q(mgt),
+ q(4245) => q(mgu),
+ q(4246) => q(mgv),
+ q(4247) => q(mgw),
+ q(4248) => q(mgy),
+ q(4249) => q(mgz),
+ q(4250) => q(mha),
+ q(4251) => q(mhb),
+ q(4252) => q(mhc),
+ q(4253) => q(mhd),
+ q(4254) => q(mhe),
+ q(4255) => q(mhf),
+ q(4256) => q(mhg),
+ q(4257) => q(mhh),
+ q(4258) => q(mhi),
+ q(4259) => q(mhj),
+ q(4260) => q(mhk),
+ q(4261) => q(mhl),
+ q(4262) => q(mhm),
+ q(4263) => q(mhn),
+ q(4264) => q(mho),
+ q(4265) => q(mhp),
+ q(4266) => q(mhq),
+ q(4267) => q(mhr),
+ q(4268) => q(mhs),
+ q(4269) => q(mht),
+ q(4270) => q(mhu),
+ q(4271) => q(mhw),
+ q(4272) => q(mhx),
+ q(4273) => q(mhy),
+ q(4274) => q(mhz),
+ q(4275) => q(mia),
+ q(4276) => q(mib),
+ q(4277) => q(mid),
+ q(4278) => q(mie),
+ q(4279) => q(mif),
+ q(4280) => q(mig),
+ q(4281) => q(mih),
+ q(4282) => q(mii),
+ q(4283) => q(mij),
+ q(4284) => q(mik),
+ q(4285) => q(mil),
+ q(4286) => q(mim),
+ q(4287) => q(mio),
+ q(4288) => q(mip),
+ q(4289) => q(miq),
+ q(4290) => q(mir),
+ q(4291) => q(mit),
+ q(4292) => q(miu),
+ q(4293) => q(miw),
+ q(4294) => q(mix),
+ q(4295) => q(miy),
+ q(4296) => q(miz),
+ q(4297) => q(mjc),
+ q(4298) => q(mjd),
+ q(4299) => q(mje),
+ q(4300) => q(mjg),
+ q(4301) => q(mjh),
+ q(4302) => q(mji),
+ q(4303) => q(mjj),
+ q(4304) => q(mjk),
+ q(4305) => q(mjl),
+ q(4306) => q(mjm),
+ q(4307) => q(mjn),
+ q(4308) => q(mjo),
+ q(4309) => q(mjp),
+ q(4310) => q(mjq),
+ q(4311) => q(mjr),
+ q(4312) => q(mjs),
+ q(4313) => q(mjt),
+ q(4314) => q(mju),
+ q(4315) => q(mjv),
+ q(4316) => q(mjw),
+ q(4317) => q(mjx),
+ q(4318) => q(mjy),
+ q(4319) => q(mjz),
+ q(4320) => q(mka),
+ q(4321) => q(mkb),
+ q(4322) => q(mkc),
+ q(4323) => q(mke),
+ q(4324) => q(mkf),
+ q(4325) => q(mkg),
+ q(4326) => q(mki),
+ q(4327) => q(mkj),
+ q(4328) => q(mkk),
+ q(4329) => q(mkl),
+ q(4330) => q(mkm),
+ q(4331) => q(mkn),
+ q(4332) => q(mko),
+ q(4333) => q(mkp),
+ q(4334) => q(mkq),
+ q(4335) => q(mkr),
+ q(4336) => q(mks),
+ q(4337) => q(mkt),
+ q(4338) => q(mku),
+ q(4339) => q(mkv),
+ q(4340) => q(mkw),
+ q(4341) => q(mkx),
+ q(4342) => q(mky),
+ q(4343) => q(mkz),
+ q(4344) => q(mla),
+ q(4345) => q(mlb),
+ q(4346) => q(mlc),
+ q(4347) => q(mld),
+ q(4348) => q(mle),
+ q(4349) => q(mlf),
+ q(4350) => q(mlh),
+ q(4351) => q(mli),
+ q(4352) => q(mlj),
+ q(4353) => q(mlk),
+ q(4354) => q(mll),
+ q(4355) => q(mlm),
+ q(4356) => q(mln),
+ q(4357) => q(mlo),
+ q(4358) => q(mlp),
+ q(4359) => q(mlq),
+ q(4360) => q(mlr),
+ q(4361) => q(mls),
+ q(4362) => q(mlu),
+ q(4363) => q(mlv),
+ q(4364) => q(mlw),
+ q(4365) => q(mlx),
+ q(4366) => q(mlz),
+ q(4367) => q(mma),
+ q(4368) => q(mmb),
+ q(4369) => q(mmc),
+ q(4370) => q(mmd),
+ q(4371) => q(mme),
+ q(4372) => q(mmf),
+ q(4373) => q(mmg),
+ q(4374) => q(mmh),
+ q(4375) => q(mmi),
+ q(4376) => q(mmj),
+ q(4377) => q(mmk),
+ q(4378) => q(mml),
+ q(4379) => q(mmm),
+ q(4380) => q(mmn),
+ q(4381) => q(mmo),
+ q(4382) => q(mmp),
+ q(4383) => q(mmq),
+ q(4384) => q(mmr),
+ q(4385) => q(mmt),
+ q(4386) => q(mmu),
+ q(4387) => q(mmv),
+ q(4388) => q(mmw),
+ q(4389) => q(mmx),
+ q(4390) => q(mmy),
+ q(4391) => q(mmz),
+ q(4392) => q(mna),
+ q(4393) => q(mnb),
+ q(4394) => q(mnd),
+ q(4395) => q(mne),
+ q(4396) => q(mnf),
+ q(4397) => q(mng),
+ q(4398) => q(mnh),
+ q(4399) => q(mnj),
+ q(4400) => q(mnk),
+ q(4401) => q(mnl),
+ q(4402) => q(mnm),
+ q(4403) => q(mnn),
+ q(4404) => q(mnp),
+ q(4405) => q(mnq),
+ q(4406) => q(mnr),
+ q(4407) => q(mns),
+ q(4408) => q(mnt),
+ q(4409) => q(mnu),
+ q(4410) => q(mnv),
+ q(4411) => q(mnw),
+ q(4412) => q(mnx),
+ q(4413) => q(mny),
+ q(4414) => q(mnz),
+ q(4415) => q(moa),
+ q(4416) => q(moc),
+ q(4417) => q(mod),
+ q(4418) => q(moe),
+ q(4419) => q(mog),
+ q(4420) => q(moi),
+ q(4421) => q(moj),
+ q(4422) => q(mok),
+ q(4423) => q(mom),
+ q(4424) => q(moo),
+ q(4425) => q(mop),
+ q(4426) => q(moq),
+ q(4427) => q(mor),
+ q(4428) => q(mou),
+ q(4429) => q(mov),
+ q(4430) => q(mow),
+ q(4431) => q(mox),
+ q(4432) => q(moy),
+ q(4433) => q(moz),
+ q(4434) => q(mpa),
+ q(4435) => q(mpb),
+ q(4436) => q(mpc),
+ q(4437) => q(mpd),
+ q(4438) => q(mpe),
+ q(4439) => q(mpg),
+ q(4440) => q(mph),
+ q(4441) => q(mpi),
+ q(4442) => q(mpj),
+ q(4443) => q(mpk),
+ q(4444) => q(mpl),
+ q(4445) => q(mpm),
+ q(4446) => q(mpn),
+ q(4447) => q(mpo),
+ q(4448) => q(mpp),
+ q(4449) => q(mpq),
+ q(4450) => q(mpr),
+ q(4451) => q(mps),
+ q(4452) => q(mpt),
+ q(4453) => q(mpu),
+ q(4454) => q(mpv),
+ q(4455) => q(mpw),
+ q(4456) => q(mpx),
+ q(4457) => q(mpy),
+ q(4458) => q(mpz),
+ q(4459) => q(mqa),
+ q(4460) => q(mqb),
+ q(4461) => q(mqc),
+ q(4462) => q(mqe),
+ q(4463) => q(mqf),
+ q(4464) => q(mqg),
+ q(4465) => q(mqh),
+ q(4466) => q(mqi),
+ q(4467) => q(mqj),
+ q(4468) => q(mqk),
+ q(4469) => q(mql),
+ q(4470) => q(mqm),
+ q(4471) => q(mqn),
+ q(4472) => q(mqo),
+ q(4473) => q(mqp),
+ q(4474) => q(mqq),
+ q(4475) => q(mqr),
+ q(4476) => q(mqs),
+ q(4477) => q(mqt),
+ q(4478) => q(mqu),
+ q(4479) => q(mqv),
+ q(4480) => q(mqw),
+ q(4481) => q(mqx),
+ q(4482) => q(mqy),
+ q(4483) => q(mqz),
+ q(4484) => q(mra),
+ q(4485) => q(mrb),
+ q(4486) => q(mrc),
+ q(4487) => q(mrd),
+ q(4488) => q(mre),
+ q(4489) => q(mrf),
+ q(4490) => q(mrg),
+ q(4491) => q(mrh),
+ q(4492) => q(mrj),
+ q(4493) => q(mrk),
+ q(4494) => q(mrl),
+ q(4495) => q(mrm),
+ q(4496) => q(mrn),
+ q(4497) => q(mro),
+ q(4498) => q(mrp),
+ q(4499) => q(mrq),
+ q(4500) => q(mrr),
+ q(4501) => q(mrs),
+ q(4502) => q(mrt),
+ q(4503) => q(mru),
+ q(4504) => q(mrv),
+ q(4505) => q(mrw),
+ q(4506) => q(mrx),
+ q(4507) => q(mry),
+ q(4508) => q(mrz),
+ q(4509) => q(msb),
+ q(4510) => q(msc),
+ q(4511) => q(msd),
+ q(4512) => q(mse),
+ q(4513) => q(msf),
+ q(4514) => q(msg),
+ q(4515) => q(msh),
+ q(4516) => q(msi),
+ q(4517) => q(msj),
+ q(4518) => q(msk),
+ q(4519) => q(msl),
+ q(4520) => q(msm),
+ q(4521) => q(msn),
+ q(4522) => q(mso),
+ q(4523) => q(msp),
+ q(4524) => q(msq),
+ q(4525) => q(msr),
+ q(4526) => q(mss),
+ q(4527) => q(msu),
+ q(4528) => q(msv),
+ q(4529) => q(msw),
+ q(4530) => q(msx),
+ q(4531) => q(msy),
+ q(4532) => q(msz),
+ q(4533) => q(mta),
+ q(4534) => q(mtb),
+ q(4535) => q(mtc),
+ q(4536) => q(mtd),
+ q(4537) => q(mte),
+ q(4538) => q(mtf),
+ q(4539) => q(mtg),
+ q(4540) => q(mth),
+ q(4541) => q(mti),
+ q(4542) => q(mtj),
+ q(4543) => q(mtk),
+ q(4544) => q(mtl),
+ q(4545) => q(mtm),
+ q(4546) => q(mtn),
+ q(4547) => q(mto),
+ q(4548) => q(mtp),
+ q(4549) => q(mtq),
+ q(4550) => q(mtr),
+ q(4551) => q(mts),
+ q(4552) => q(mtt),
+ q(4553) => q(mtu),
+ q(4554) => q(mtv),
+ q(4555) => q(mtw),
+ q(4556) => q(mtx),
+ q(4557) => q(mty),
+ q(4558) => q(mua),
+ q(4559) => q(mub),
+ q(4560) => q(muc),
+ q(4561) => q(mud),
+ q(4562) => q(mue),
+ q(4563) => q(mug),
+ q(4564) => q(muh),
+ q(4565) => q(mui),
+ q(4566) => q(muj),
+ q(4567) => q(muk),
+ q(4568) => q(mum),
+ q(4569) => q(muo),
+ q(4570) => q(mup),
+ q(4571) => q(muq),
+ q(4572) => q(mur),
+ q(4573) => q(mut),
+ q(4574) => q(muu),
+ q(4575) => q(muv),
+ q(4576) => q(mux),
+ q(4577) => q(muy),
+ q(4578) => q(muz),
+ q(4579) => q(mva),
+ q(4580) => q(mvb),
+ q(4581) => q(mvd),
+ q(4582) => q(mve),
+ q(4583) => q(mvf),
+ q(4584) => q(mvg),
+ q(4585) => q(mvh),
+ q(4586) => q(mvi),
+ q(4587) => q(mvk),
+ q(4588) => q(mvl),
+ q(4589) => q(mvm),
+ q(4590) => q(mvn),
+ q(4591) => q(mvo),
+ q(4592) => q(mvp),
+ q(4593) => q(mvq),
+ q(4594) => q(mvr),
+ q(4595) => q(mvs),
+ q(4596) => q(mvt),
+ q(4597) => q(mvu),
+ q(4598) => q(mvv),
+ q(4599) => q(mvw),
+ q(4600) => q(mvx),
+ q(4601) => q(mvy),
+ q(4602) => q(mvz),
+ q(4603) => q(mwa),
+ q(4604) => q(mwb),
+ q(4605) => q(mwc),
+ q(4606) => q(mwd),
+ q(4607) => q(mwe),
+ q(4608) => q(mwf),
+ q(4609) => q(mwg),
+ q(4610) => q(mwh),
+ q(4611) => q(mwi),
+ q(4612) => q(mwj),
+ q(4613) => q(mwk),
+ q(4614) => q(mwm),
+ q(4615) => q(mwn),
+ q(4616) => q(mwo),
+ q(4617) => q(mwp),
+ q(4618) => q(mwq),
+ q(4619) => q(mws),
+ q(4620) => q(mwt),
+ q(4621) => q(mwu),
+ q(4622) => q(mwv),
+ q(4623) => q(mww),
+ q(4624) => q(mwx),
+ q(4625) => q(mwy),
+ q(4626) => q(mwz),
+ q(4627) => q(mxa),
+ q(4628) => q(mxb),
+ q(4629) => q(mxc),
+ q(4630) => q(mxd),
+ q(4631) => q(mxe),
+ q(4632) => q(mxf),
+ q(4633) => q(mxg),
+ q(4634) => q(mxh),
+ q(4635) => q(mxi),
+ q(4636) => q(mxj),
+ q(4637) => q(mxk),
+ q(4638) => q(mxl),
+ q(4639) => q(mxm),
+ q(4640) => q(mxn),
+ q(4641) => q(mxo),
+ q(4642) => q(mxp),
+ q(4643) => q(mxq),
+ q(4644) => q(mxr),
+ q(4645) => q(mxs),
+ q(4646) => q(mxt),
+ q(4647) => q(mxu),
+ q(4648) => q(mxv),
+ q(4649) => q(mxw),
+ q(4650) => q(mxx),
+ q(4651) => q(mxy),
+ q(4652) => q(mxz),
+ q(4653) => q(myb),
+ q(4654) => q(myc),
+ q(4655) => q(myd),
+ q(4656) => q(mye),
+ q(4657) => q(myf),
+ q(4658) => q(myg),
+ q(4659) => q(myh),
+ q(4660) => q(myi),
+ q(4661) => q(myj),
+ q(4662) => q(myk),
+ q(4663) => q(myl),
+ q(4664) => q(mym),
+ q(4665) => q(myo),
+ q(4666) => q(myp),
+ q(4667) => q(myq),
+ q(4668) => q(myr),
+ q(4669) => q(mys),
+ q(4670) => q(myu),
+ q(4671) => q(myw),
+ q(4672) => q(myx),
+ q(4673) => q(myy),
+ q(4674) => q(myz),
+ q(4675) => q(mza),
+ q(4676) => q(mzb),
+ q(4677) => q(mzc),
+ q(4678) => q(mzd),
+ q(4679) => q(mze),
+ q(4680) => q(mzg),
+ q(4681) => q(mzh),
+ q(4682) => q(mzi),
+ q(4683) => q(mzj),
+ q(4684) => q(mzk),
+ q(4685) => q(mzl),
+ q(4686) => q(mzm),
+ q(4687) => q(mzn),
+ q(4688) => q(mzo),
+ q(4689) => q(mzp),
+ q(4690) => q(mzq),
+ q(4691) => q(mzr),
+ q(4692) => q(mzs),
+ q(4693) => q(mzt),
+ q(4694) => q(mzu),
+ q(4695) => q(mzv),
+ q(4696) => q(mzw),
+ q(4697) => q(mzx),
+ q(4698) => q(mzy),
+ q(4699) => q(mzz),
+ q(4700) => q(naa),
+ q(4701) => q(nab),
+ q(4702) => q(nac),
+ q(4703) => q(nad),
+ q(4704) => q(nae),
+ q(4705) => q(naf),
+ q(4706) => q(nag),
+ q(4707) => q(naj),
+ q(4708) => q(nak),
+ q(4709) => q(nal),
+ q(4710) => q(nam),
+ q(4711) => q(nan),
+ q(4712) => q(nao),
+ q(4713) => q(naq),
+ q(4714) => q(nar),
+ q(4715) => q(nas),
+ q(4716) => q(nat),
+ q(4717) => q(naw),
+ q(4718) => q(nax),
+ q(4719) => q(nay),
+ q(4720) => q(naz),
+ q(4721) => q(nba),
+ q(4722) => q(nbb),
+ q(4723) => q(nbc),
+ q(4724) => q(nbd),
+ q(4725) => q(nbe),
+ q(4726) => q(nbg),
+ q(4727) => q(nbh),
+ q(4728) => q(nbi),
+ q(4729) => q(nbj),
+ q(4730) => q(nbk),
+ q(4731) => q(nbm),
+ q(4732) => q(nbn),
+ q(4733) => q(nbo),
+ q(4734) => q(nbp),
+ q(4735) => q(nbq),
+ q(4736) => q(nbr),
+ q(4737) => q(nbs),
+ q(4738) => q(nbt),
+ q(4739) => q(nbu),
+ q(4740) => q(nbv),
+ q(4741) => q(nbw),
+ q(4742) => q(nbx),
+ q(4743) => q(nby),
+ q(4744) => q(nca),
+ q(4745) => q(ncb),
+ q(4746) => q(ncc),
+ q(4747) => q(ncd),
+ q(4748) => q(nce),
+ q(4749) => q(ncf),
+ q(4750) => q(ncg),
+ q(4751) => q(nch),
+ q(4752) => q(nci),
+ q(4753) => q(ncj),
+ q(4754) => q(nck),
+ q(4755) => q(ncl),
+ q(4756) => q(ncm),
+ q(4757) => q(ncn),
+ q(4758) => q(nco),
+ q(4759) => q(ncp),
+ q(4760) => q(ncr),
+ q(4761) => q(ncs),
+ q(4762) => q(nct),
+ q(4763) => q(ncu),
+ q(4764) => q(ncx),
+ q(4765) => q(ncz),
+ q(4766) => q(nda),
+ q(4767) => q(ndb),
+ q(4768) => q(ndc),
+ q(4769) => q(ndd),
+ q(4770) => q(ndf),
+ q(4771) => q(ndg),
+ q(4772) => q(ndh),
+ q(4773) => q(ndi),
+ q(4774) => q(ndj),
+ q(4775) => q(ndk),
+ q(4776) => q(ndl),
+ q(4777) => q(ndm),
+ q(4778) => q(ndn),
+ q(4779) => q(ndp),
+ q(4780) => q(ndq),
+ q(4781) => q(ndr),
+ q(4782) => q(ndt),
+ q(4783) => q(ndu),
+ q(4784) => q(ndv),
+ q(4785) => q(ndw),
+ q(4786) => q(ndx),
+ q(4787) => q(ndy),
+ q(4788) => q(ndz),
+ q(4789) => q(nea),
+ q(4790) => q(neb),
+ q(4791) => q(nec),
+ q(4792) => q(ned),
+ q(4793) => q(nee),
+ q(4794) => q(nef),
+ q(4795) => q(neg),
+ q(4796) => q(neh),
+ q(4797) => q(nei),
+ q(4798) => q(nej),
+ q(4799) => q(nek),
+ q(4800) => q(nem),
+ q(4801) => q(nen),
+ q(4802) => q(neo),
+ q(4803) => q(neq),
+ q(4804) => q(ner),
+ q(4805) => q(nes),
+ q(4806) => q(net),
+ q(4807) => q(neu),
+ q(4808) => q(nev),
+ q(4809) => q(nex),
+ q(4810) => q(ney),
+ q(4811) => q(nez),
+ q(4812) => q(nfa),
+ q(4813) => q(nfd),
+ q(4814) => q(nfl),
+ q(4815) => q(nfr),
+ q(4816) => q(nfu),
+ q(4817) => q(nga),
+ q(4818) => q(ngb),
+ q(4819) => q(ngc),
+ q(4820) => q(ngd),
+ q(4821) => q(nge),
+ q(4822) => q(ngg),
+ q(4823) => q(ngh),
+ q(4824) => q(ngi),
+ q(4825) => q(ngj),
+ q(4826) => q(ngk),
+ q(4827) => q(ngl),
+ q(4828) => q(ngm),
+ q(4829) => q(ngn),
+ q(4830) => q(ngo),
+ q(4831) => q(ngp),
+ q(4832) => q(ngq),
+ q(4833) => q(ngr),
+ q(4834) => q(ngs),
+ q(4835) => q(ngt),
+ q(4836) => q(ngu),
+ q(4837) => q(ngv),
+ q(4838) => q(ngw),
+ q(4839) => q(ngx),
+ q(4840) => q(ngy),
+ q(4841) => q(ngz),
+ q(4842) => q(nha),
+ q(4843) => q(nhb),
+ q(4844) => q(nhc),
+ q(4845) => q(nhd),
+ q(4846) => q(nhe),
+ q(4847) => q(nhf),
+ q(4848) => q(nhg),
+ q(4849) => q(nhh),
+ q(4850) => q(nhi),
+ q(4851) => q(nhk),
+ q(4852) => q(nhm),
+ q(4853) => q(nhn),
+ q(4854) => q(nho),
+ q(4855) => q(nhp),
+ q(4856) => q(nhq),
+ q(4857) => q(nhr),
+ q(4858) => q(nht),
+ q(4859) => q(nhu),
+ q(4860) => q(nhv),
+ q(4861) => q(nhw),
+ q(4862) => q(nhx),
+ q(4863) => q(nhy),
+ q(4864) => q(nhz),
+ q(4865) => q(nib),
+ q(4866) => q(nid),
+ q(4867) => q(nie),
+ q(4868) => q(nif),
+ q(4869) => q(nig),
+ q(4870) => q(nih),
+ q(4871) => q(nii),
+ q(4872) => q(nij),
+ q(4873) => q(nik),
+ q(4874) => q(nil),
+ q(4875) => q(nim),
+ q(4876) => q(nin),
+ q(4877) => q(nio),
+ q(4878) => q(niq),
+ q(4879) => q(nir),
+ q(4880) => q(nis),
+ q(4881) => q(nit),
+ q(4882) => q(niv),
+ q(4883) => q(niw),
+ q(4884) => q(nix),
+ q(4885) => q(niy),
+ q(4886) => q(niz),
+ q(4887) => q(nja),
+ q(4888) => q(njb),
+ q(4889) => q(njd),
+ q(4890) => q(njh),
+ q(4891) => q(nji),
+ q(4892) => q(njj),
+ q(4893) => q(njl),
+ q(4894) => q(njm),
+ q(4895) => q(njn),
+ q(4896) => q(njo),
+ q(4897) => q(njr),
+ q(4898) => q(njs),
+ q(4899) => q(njt),
+ q(4900) => q(nju),
+ q(4901) => q(njx),
+ q(4902) => q(njy),
+ q(4903) => q(njz),
+ q(4904) => q(nka),
+ q(4905) => q(nkb),
+ q(4906) => q(nkc),
+ q(4907) => q(nkd),
+ q(4908) => q(nke),
+ q(4909) => q(nkf),
+ q(4910) => q(nkg),
+ q(4911) => q(nkh),
+ q(4912) => q(nki),
+ q(4913) => q(nkj),
+ q(4914) => q(nkk),
+ q(4915) => q(nkm),
+ q(4916) => q(nkn),
+ q(4917) => q(nko),
+ q(4918) => q(nkp),
+ q(4919) => q(nkq),
+ q(4920) => q(nkr),
+ q(4921) => q(nks),
+ q(4922) => q(nkt),
+ q(4923) => q(nku),
+ q(4924) => q(nkv),
+ q(4925) => q(nkw),
+ q(4926) => q(nkx),
+ q(4927) => q(nkz),
+ q(4928) => q(nla),
+ q(4929) => q(nlc),
+ q(4930) => q(nle),
+ q(4931) => q(nlg),
+ q(4932) => q(nli),
+ q(4933) => q(nlj),
+ q(4934) => q(nlk),
+ q(4935) => q(nll),
+ q(4936) => q(nlo),
+ q(4937) => q(nlr),
+ q(4938) => q(nlu),
+ q(4939) => q(nlv),
+ q(4940) => q(nlx),
+ q(4941) => q(nly),
+ q(4942) => q(nlz),
+ q(4943) => q(nma),
+ q(4944) => q(nmb),
+ q(4945) => q(nmc),
+ q(4946) => q(nmd),
+ q(4947) => q(nme),
+ q(4948) => q(nmf),
+ q(4949) => q(nmg),
+ q(4950) => q(nmh),
+ q(4951) => q(nmi),
+ q(4952) => q(nmj),
+ q(4953) => q(nmk),
+ q(4954) => q(nml),
+ q(4955) => q(nmm),
+ q(4956) => q(nmn),
+ q(4957) => q(nmo),
+ q(4958) => q(nmp),
+ q(4959) => q(nmq),
+ q(4960) => q(nmr),
+ q(4961) => q(nms),
+ q(4962) => q(nmt),
+ q(4963) => q(nmu),
+ q(4964) => q(nmv),
+ q(4965) => q(nmw),
+ q(4966) => q(nmx),
+ q(4967) => q(nmy),
+ q(4968) => q(nmz),
+ q(4969) => q(nna),
+ q(4970) => q(nnb),
+ q(4971) => q(nnc),
+ q(4972) => q(nnd),
+ q(4973) => q(nne),
+ q(4974) => q(nnf),
+ q(4975) => q(nng),
+ q(4976) => q(nnh),
+ q(4977) => q(nni),
+ q(4978) => q(nnj),
+ q(4979) => q(nnk),
+ q(4980) => q(nnl),
+ q(4981) => q(nnm),
+ q(4982) => q(nnn),
+ q(4983) => q(nnp),
+ q(4984) => q(nnq),
+ q(4985) => q(nnr),
+ q(4986) => q(nns),
+ q(4987) => q(nnt),
+ q(4988) => q(nnu),
+ q(4989) => q(nnv),
+ q(4990) => q(nnw),
+ q(4991) => q(nnx),
+ q(4992) => q(nny),
+ q(4993) => q(nnz),
+ q(4994) => q(noa),
+ q(4995) => q(noc),
+ q(4996) => q(nod),
+ q(4997) => q(noe),
+ q(4998) => q(nof),
+ q(4999) => q(noh),
+ q(5000) => q(noi),
+ q(5001) => q(noj),
+ q(5002) => q(nok),
+ q(5003) => q(nom),
+ q(5004) => q(nop),
+ q(5005) => q(noq),
+ q(5006) => q(nos),
+ q(5007) => q(not),
+ q(5008) => q(nou),
+ q(5009) => q(nov),
+ q(5010) => q(now),
+ q(5011) => q(noy),
+ q(5012) => q(noz),
+ q(5013) => q(npa),
+ q(5014) => q(npb),
+ q(5015) => q(npg),
+ q(5016) => q(nph),
+ q(5017) => q(npi),
+ q(5018) => q(npl),
+ q(5019) => q(npn),
+ q(5020) => q(npo),
+ q(5021) => q(nps),
+ q(5022) => q(npu),
+ q(5023) => q(npy),
+ q(5024) => q(nqg),
+ q(5025) => q(nqk),
+ q(5026) => q(nqm),
+ q(5027) => q(nqn),
+ q(5028) => q(nqy),
+ q(5029) => q(nra),
+ q(5030) => q(nrb),
+ q(5031) => q(nrc),
+ q(5032) => q(nre),
+ q(5033) => q(nrg),
+ q(5034) => q(nri),
+ q(5035) => q(nrl),
+ q(5036) => q(nrm),
+ q(5037) => q(nrn),
+ q(5038) => q(nrp),
+ q(5039) => q(nrr),
+ q(5040) => q(nrt),
+ q(5041) => q(nru),
+ q(5042) => q(nrx),
+ q(5043) => q(nrz),
+ q(5044) => q(nsa),
+ q(5045) => q(nsc),
+ q(5046) => q(nsd),
+ q(5047) => q(nse),
+ q(5048) => q(nsf),
+ q(5049) => q(nsg),
+ q(5050) => q(nsh),
+ q(5051) => q(nsi),
+ q(5052) => q(nsk),
+ q(5053) => q(nsl),
+ q(5054) => q(nsm),
+ q(5055) => q(nsn),
+ q(5056) => q(nsp),
+ q(5057) => q(nsq),
+ q(5058) => q(nsr),
+ q(5059) => q(nss),
+ q(5060) => q(nst),
+ q(5061) => q(nsu),
+ q(5062) => q(nsv),
+ q(5063) => q(nsw),
+ q(5064) => q(nsx),
+ q(5065) => q(nsy),
+ q(5066) => q(nsz),
+ q(5067) => q(nte),
+ q(5068) => q(nti),
+ q(5069) => q(ntj),
+ q(5070) => q(ntk),
+ q(5071) => q(ntm),
+ q(5072) => q(nto),
+ q(5073) => q(ntp),
+ q(5074) => q(ntr),
+ q(5075) => q(nts),
+ q(5076) => q(ntu),
+ q(5077) => q(ntw),
+ q(5078) => q(ntx),
+ q(5079) => q(nty),
+ q(5080) => q(ntz),
+ q(5081) => q(nua),
+ q(5082) => q(nuc),
+ q(5083) => q(nud),
+ q(5084) => q(nue),
+ q(5085) => q(nuf),
+ q(5086) => q(nug),
+ q(5087) => q(nuh),
+ q(5088) => q(nui),
+ q(5089) => q(nuj),
+ q(5090) => q(nuk),
+ q(5091) => q(nul),
+ q(5092) => q(num),
+ q(5093) => q(nun),
+ q(5094) => q(nuo),
+ q(5095) => q(nup),
+ q(5096) => q(nuq),
+ q(5097) => q(nur),
+ q(5098) => q(nus),
+ q(5099) => q(nut),
+ q(5100) => q(nuu),
+ q(5101) => q(nuv),
+ q(5102) => q(nuw),
+ q(5103) => q(nux),
+ q(5104) => q(nuy),
+ q(5105) => q(nuz),
+ q(5106) => q(nvh),
+ q(5107) => q(nvm),
+ q(5108) => q(nvo),
+ q(5109) => q(nwa),
+ q(5110) => q(nwb),
+ q(5111) => q(nwe),
+ q(5112) => q(nwg),
+ q(5113) => q(nwi),
+ q(5114) => q(nwm),
+ q(5115) => q(nwo),
+ q(5116) => q(nwr),
+ q(5117) => q(nwx),
+ q(5118) => q(nwy),
+ q(5119) => q(nxa),
+ q(5120) => q(nxd),
+ q(5121) => q(nxe),
+ q(5122) => q(nxg),
+ q(5123) => q(nxi),
+ q(5124) => q(nxk),
+ q(5125) => q(nxl),
+ q(5126) => q(nxm),
+ q(5127) => q(nxn),
+ q(5128) => q(nxq),
+ q(5129) => q(nxr),
+ q(5130) => q(nxu),
+ q(5131) => q(nxx),
+ q(5132) => q(nyb),
+ q(5133) => q(nyc),
+ q(5134) => q(nyd),
+ q(5135) => q(nye),
+ q(5136) => q(nyf),
+ q(5137) => q(nyg),
+ q(5138) => q(nyh),
+ q(5139) => q(nyi),
+ q(5140) => q(nyj),
+ q(5141) => q(nyk),
+ q(5142) => q(nyl),
+ q(5143) => q(nyp),
+ q(5144) => q(nyq),
+ q(5145) => q(nyr),
+ q(5146) => q(nys),
+ q(5147) => q(nyt),
+ q(5148) => q(nyu),
+ q(5149) => q(nyv),
+ q(5150) => q(nyw),
+ q(5151) => q(nyx),
+ q(5152) => q(nyy),
+ q(5153) => q(nza),
+ q(5154) => q(nzb),
+ q(5155) => q(nzk),
+ q(5156) => q(nzm),
+ q(5157) => q(nzs),
+ q(5158) => q(nzu),
+ q(5159) => q(nzy),
+ q(5160) => q(nzz),
+ q(5161) => q(oaa),
+ q(5162) => q(oac),
+ q(5163) => q(oar),
+ q(5164) => q(oav),
+ q(5165) => q(obi),
+ q(5166) => q(obk),
+ q(5167) => q(obl),
+ q(5168) => q(obm),
+ q(5169) => q(obo),
+ q(5170) => q(obr),
+ q(5171) => q(obt),
+ q(5172) => q(obu),
+ q(5173) => q(oca),
+ q(5174) => q(och),
+ q(5175) => q(oco),
+ q(5176) => q(ocu),
+ q(5177) => q(oda),
+ q(5178) => q(odk),
+ q(5179) => q(odt),
+ q(5180) => q(odu),
+ q(5181) => q(ofo),
+ q(5182) => q(ofs),
+ q(5183) => q(ofu),
+ q(5184) => q(ogb),
+ q(5185) => q(ogc),
+ q(5186) => q(oge),
+ q(5187) => q(ogg),
+ q(5188) => q(ogo),
+ q(5189) => q(ogu),
+ q(5190) => q(oht),
+ q(5191) => q(ohu),
+ q(5192) => q(oia),
+ q(5193) => q(oin),
+ q(5194) => q(ojb),
+ q(5195) => q(ojc),
+ q(5196) => q(ojg),
+ q(5197) => q(ojp),
+ q(5198) => q(ojs),
+ q(5199) => q(ojv),
+ q(5200) => q(ojw),
+ q(5201) => q(oka),
+ q(5202) => q(okb),
+ q(5203) => q(okd),
+ q(5204) => q(oke),
+ q(5205) => q(okg),
+ q(5206) => q(okh),
+ q(5207) => q(oki),
+ q(5208) => q(okj),
+ q(5209) => q(okk),
+ q(5210) => q(okl),
+ q(5211) => q(okm),
+ q(5212) => q(okn),
+ q(5213) => q(oko),
+ q(5214) => q(okr),
+ q(5215) => q(oks),
+ q(5216) => q(oku),
+ q(5217) => q(okv),
+ q(5218) => q(okx),
+ q(5219) => q(ola),
+ q(5220) => q(old),
+ q(5221) => q(ole),
+ q(5222) => q(olm),
+ q(5223) => q(olo),
+ q(5224) => q(olr),
+ q(5225) => q(oma),
+ q(5226) => q(omb),
+ q(5227) => q(omc),
+ q(5228) => q(ome),
+ q(5229) => q(omg),
+ q(5230) => q(omi),
+ q(5231) => q(omk),
+ q(5232) => q(oml),
+ q(5233) => q(omn),
+ q(5234) => q(omo),
+ q(5235) => q(omp),
+ q(5236) => q(omr),
+ q(5237) => q(omt),
+ q(5238) => q(omu),
+ q(5239) => q(omw),
+ q(5240) => q(omx),
+ q(5241) => q(ona),
+ q(5242) => q(onb),
+ q(5243) => q(one),
+ q(5244) => q(ong),
+ q(5245) => q(oni),
+ q(5246) => q(onj),
+ q(5247) => q(onk),
+ q(5248) => q(onn),
+ q(5249) => q(ono),
+ q(5250) => q(onp),
+ q(5251) => q(onr),
+ q(5252) => q(ons),
+ q(5253) => q(ont),
+ q(5254) => q(onu),
+ q(5255) => q(onw),
+ q(5256) => q(onx),
+ q(5257) => q(ood),
+ q(5258) => q(oog),
+ q(5259) => q(oon),
+ q(5260) => q(oor),
+ q(5261) => q(oos),
+ q(5262) => q(opa),
+ q(5263) => q(opk),
+ q(5264) => q(opm),
+ q(5265) => q(opo),
+ q(5266) => q(opt),
+ q(5267) => q(opy),
+ q(5268) => q(ora),
+ q(5269) => q(orc),
+ q(5270) => q(ore),
+ q(5271) => q(org),
+ q(5272) => q(orh),
+ q(5273) => q(orn),
+ q(5274) => q(oro),
+ q(5275) => q(orr),
+ q(5276) => q(ors),
+ q(5277) => q(ort),
+ q(5278) => q(oru),
+ q(5279) => q(orv),
+ q(5280) => q(orw),
+ q(5281) => q(orx),
+ q(5282) => q(ory),
+ q(5283) => q(orz),
+ q(5284) => q(osc),
+ q(5285) => q(osi),
+ q(5286) => q(oso),
+ q(5287) => q(osp),
+ q(5288) => q(ost),
+ q(5289) => q(osu),
+ q(5290) => q(osx),
+ q(5291) => q(otb),
+ q(5292) => q(otd),
+ q(5293) => q(ote),
+ q(5294) => q(oti),
+ q(5295) => q(otk),
+ q(5296) => q(otl),
+ q(5297) => q(otm),
+ q(5298) => q(otn),
+ q(5299) => q(otq),
+ q(5300) => q(otr),
+ q(5301) => q(ots),
+ q(5302) => q(ott),
+ q(5303) => q(otu),
+ q(5304) => q(otw),
+ q(5305) => q(otx),
+ q(5306) => q(oty),
+ q(5307) => q(otz),
+ q(5308) => q(oua),
+ q(5309) => q(oub),
+ q(5310) => q(oue),
+ q(5311) => q(oui),
+ q(5312) => q(oum),
+ q(5313) => q(oun),
+ q(5314) => q(owi),
+ q(5315) => q(owl),
+ q(5316) => q(oyb),
+ q(5317) => q(oyd),
+ q(5318) => q(oym),
+ q(5319) => q(oyy),
+ q(5320) => q(ozm),
+ q(5321) => q(pab),
+ q(5322) => q(pac),
+ q(5323) => q(pad),
+ q(5324) => q(pae),
+ q(5325) => q(paf),
+ q(5326) => q(pah),
+ q(5327) => q(pai),
+ q(5328) => q(pak),
+ q(5329) => q(pao),
+ q(5330) => q(paq),
+ q(5331) => q(par),
+ q(5332) => q(pas),
+ q(5333) => q(pat),
+ q(5334) => q(pav),
+ q(5335) => q(paw),
+ q(5336) => q(pax),
+ q(5337) => q(pay),
+ q(5338) => q(paz),
+ q(5339) => q(pbb),
+ q(5340) => q(pbc),
+ q(5341) => q(pbe),
+ q(5342) => q(pbf),
+ q(5343) => q(pbg),
+ q(5344) => q(pbh),
+ q(5345) => q(pbi),
+ q(5346) => q(pbl),
+ q(5347) => q(pbn),
+ q(5348) => q(pbo),
+ q(5349) => q(pbp),
+ q(5350) => q(pbr),
+ q(5351) => q(pbs),
+ q(5352) => q(pbt),
+ q(5353) => q(pbu),
+ q(5354) => q(pbv),
+ q(5355) => q(pby),
+ q(5356) => q(pca),
+ q(5357) => q(pcb),
+ q(5358) => q(pcc),
+ q(5359) => q(pcd),
+ q(5360) => q(pce),
+ q(5361) => q(pcf),
+ q(5362) => q(pcg),
+ q(5363) => q(pch),
+ q(5364) => q(pci),
+ q(5365) => q(pcj),
+ q(5366) => q(pck),
+ q(5367) => q(pcl),
+ q(5368) => q(pcm),
+ q(5369) => q(pcn),
+ q(5370) => q(pcp),
+ q(5371) => q(pcr),
+ q(5372) => q(pcw),
+ q(5373) => q(pda),
+ q(5374) => q(pdc),
+ q(5375) => q(pdi),
+ q(5376) => q(pdn),
+ q(5377) => q(pdo),
+ q(5378) => q(pdt),
+ q(5379) => q(pdu),
+ q(5380) => q(pea),
+ q(5381) => q(peb),
+ q(5382) => q(ped),
+ q(5383) => q(pee),
+ q(5384) => q(pef),
+ q(5385) => q(peg),
+ q(5386) => q(peh),
+ q(5387) => q(pei),
+ q(5388) => q(pej),
+ q(5389) => q(pek),
+ q(5390) => q(pel),
+ q(5391) => q(pem),
+ q(5392) => q(pep),
+ q(5393) => q(peq),
+ q(5394) => q(pes),
+ q(5395) => q(pev),
+ q(5396) => q(pex),
+ q(5397) => q(pey),
+ q(5398) => q(pez),
+ q(5399) => q(pfa),
+ q(5400) => q(pfe),
+ q(5401) => q(pfl),
+ q(5402) => q(pga),
+ q(5403) => q(pgg),
+ q(5404) => q(pgi),
+ q(5405) => q(pgk),
+ q(5406) => q(pgl),
+ q(5407) => q(pgn),
+ q(5408) => q(pgs),
+ q(5409) => q(pgu),
+ q(5410) => q(pha),
+ q(5411) => q(phd),
+ q(5412) => q(phg),
+ q(5413) => q(phh),
+ q(5414) => q(phk),
+ q(5415) => q(phl),
+ q(5416) => q(phm),
+ q(5417) => q(pho),
+ q(5418) => q(phq),
+ q(5419) => q(phr),
+ q(5420) => q(pht),
+ q(5421) => q(phu),
+ q(5422) => q(phv),
+ q(5423) => q(phw),
+ q(5424) => q(pia),
+ q(5425) => q(pib),
+ q(5426) => q(pic),
+ q(5427) => q(pid),
+ q(5428) => q(pie),
+ q(5429) => q(pif),
+ q(5430) => q(pig),
+ q(5431) => q(pih),
+ q(5432) => q(pii),
+ q(5433) => q(pij),
+ q(5434) => q(pil),
+ q(5435) => q(pim),
+ q(5436) => q(pin),
+ q(5437) => q(pio),
+ q(5438) => q(pip),
+ q(5439) => q(pir),
+ q(5440) => q(pis),
+ q(5441) => q(pit),
+ q(5442) => q(piu),
+ q(5443) => q(piv),
+ q(5444) => q(piw),
+ q(5445) => q(pix),
+ q(5446) => q(piy),
+ q(5447) => q(piz),
+ q(5448) => q(pjt),
+ q(5449) => q(pka),
+ q(5450) => q(pkb),
+ q(5451) => q(pkc),
+ q(5452) => q(pkg),
+ q(5453) => q(pkh),
+ q(5454) => q(pkn),
+ q(5455) => q(pko),
+ q(5456) => q(pkp),
+ q(5457) => q(pkr),
+ q(5458) => q(pks),
+ q(5459) => q(pkt),
+ q(5460) => q(pku),
+ q(5461) => q(pla),
+ q(5462) => q(plb),
+ q(5463) => q(plc),
+ q(5464) => q(pld),
+ q(5465) => q(ple),
+ q(5466) => q(plg),
+ q(5467) => q(plh),
+ q(5468) => q(plj),
+ q(5469) => q(plk),
+ q(5470) => q(pll),
+ q(5471) => q(pln),
+ q(5472) => q(plo),
+ q(5473) => q(plp),
+ q(5474) => q(plq),
+ q(5475) => q(plr),
+ q(5476) => q(pls),
+ q(5477) => q(plt),
+ q(5478) => q(plu),
+ q(5479) => q(plv),
+ q(5480) => q(plw),
+ q(5481) => q(ply),
+ q(5482) => q(plz),
+ q(5483) => q(pma),
+ q(5484) => q(pmb),
+ q(5485) => q(pmc),
+ q(5486) => q(pmd),
+ q(5487) => q(pme),
+ q(5488) => q(pmf),
+ q(5489) => q(pmh),
+ q(5490) => q(pmi),
+ q(5491) => q(pmj),
+ q(5492) => q(pmk),
+ q(5493) => q(pml),
+ q(5494) => q(pmm),
+ q(5495) => q(pmn),
+ q(5496) => q(pmo),
+ q(5497) => q(pmq),
+ q(5498) => q(pmr),
+ q(5499) => q(pms),
+ q(5500) => q(pmt),
+ q(5501) => q(pmu),
+ q(5502) => q(pmw),
+ q(5503) => q(pmx),
+ q(5504) => q(pmy),
+ q(5505) => q(pmz),
+ q(5506) => q(pna),
+ q(5507) => q(pnb),
+ q(5508) => q(pnc),
+ q(5509) => q(pne),
+ q(5510) => q(png),
+ q(5511) => q(pnh),
+ q(5512) => q(pni),
+ q(5513) => q(pnk),
+ q(5514) => q(pnm),
+ q(5515) => q(pnn),
+ q(5516) => q(pno),
+ q(5517) => q(pnp),
+ q(5518) => q(pnq),
+ q(5519) => q(pnr),
+ q(5520) => q(pns),
+ q(5521) => q(pnt),
+ q(5522) => q(pnu),
+ q(5523) => q(pnv),
+ q(5524) => q(pnw),
+ q(5525) => q(pnx),
+ q(5526) => q(pny),
+ q(5527) => q(pnz),
+ q(5528) => q(poc),
+ q(5529) => q(pod),
+ q(5530) => q(poe),
+ q(5531) => q(pof),
+ q(5532) => q(pog),
+ q(5533) => q(poh),
+ q(5534) => q(poi),
+ q(5535) => q(pok),
+ q(5536) => q(pom),
+ q(5537) => q(poo),
+ q(5538) => q(pop),
+ q(5539) => q(poq),
+ q(5540) => q(pos),
+ q(5541) => q(pot),
+ q(5542) => q(pov),
+ q(5543) => q(pow),
+ q(5544) => q(pox),
+ q(5545) => q(poy),
+ q(5546) => q(ppa),
+ q(5547) => q(ppe),
+ q(5548) => q(ppi),
+ q(5549) => q(ppk),
+ q(5550) => q(ppl),
+ q(5551) => q(ppm),
+ q(5552) => q(ppn),
+ q(5553) => q(ppo),
+ q(5554) => q(ppp),
+ q(5555) => q(ppq),
+ q(5556) => q(ppr),
+ q(5557) => q(pps),
+ q(5558) => q(ppt),
+ q(5559) => q(ppu),
+ q(5560) => q(pqa),
+ q(5561) => q(pqm),
+ q(5562) => q(prb),
+ q(5563) => q(prc),
+ q(5564) => q(prd),
+ q(5565) => q(pre),
+ q(5566) => q(prf),
+ q(5567) => q(prg),
+ q(5568) => q(prh),
+ q(5569) => q(pri),
+ q(5570) => q(prk),
+ q(5571) => q(prl),
+ q(5572) => q(prm),
+ q(5573) => q(prn),
+ q(5574) => q(prp),
+ q(5575) => q(prq),
+ q(5576) => q(prr),
+ q(5577) => q(prs),
+ q(5578) => q(prt),
+ q(5579) => q(pru),
+ q(5580) => q(prw),
+ q(5581) => q(prx),
+ q(5582) => q(pry),
+ q(5583) => q(prz),
+ q(5584) => q(psa),
+ q(5585) => q(psc),
+ q(5586) => q(psd),
+ q(5587) => q(pse),
+ q(5588) => q(psg),
+ q(5589) => q(psh),
+ q(5590) => q(psi),
+ q(5591) => q(psl),
+ q(5592) => q(psm),
+ q(5593) => q(psn),
+ q(5594) => q(pso),
+ q(5595) => q(psp),
+ q(5596) => q(psq),
+ q(5597) => q(psr),
+ q(5598) => q(pss),
+ q(5599) => q(pst),
+ q(5600) => q(psu),
+ q(5601) => q(psw),
+ q(5602) => q(psy),
+ q(5603) => q(pta),
+ q(5604) => q(pth),
+ q(5605) => q(pti),
+ q(5606) => q(ptn),
+ q(5607) => q(pto),
+ q(5608) => q(ptp),
+ q(5609) => q(ptr),
+ q(5610) => q(ptt),
+ q(5611) => q(ptu),
+ q(5612) => q(ptv),
+ q(5613) => q(ptw),
+ q(5614) => q(pty),
+ q(5615) => q(pua),
+ q(5616) => q(pub),
+ q(5617) => q(puc),
+ q(5618) => q(pud),
+ q(5619) => q(pue),
+ q(5620) => q(puf),
+ q(5621) => q(pug),
+ q(5622) => q(pui),
+ q(5623) => q(puj),
+ q(5624) => q(puk),
+ q(5625) => q(pum),
+ q(5626) => q(puo),
+ q(5627) => q(pup),
+ q(5628) => q(puq),
+ q(5629) => q(pur),
+ q(5630) => q(put),
+ q(5631) => q(puu),
+ q(5632) => q(puw),
+ q(5633) => q(pux),
+ q(5634) => q(puy),
+ q(5635) => q(puz),
+ q(5636) => q(pwa),
+ q(5637) => q(pwb),
+ q(5638) => q(pwg),
+ q(5639) => q(pwm),
+ q(5640) => q(pwn),
+ q(5641) => q(pwo),
+ q(5642) => q(pwr),
+ q(5643) => q(pww),
+ q(5644) => q(pxm),
+ q(5645) => q(pye),
+ q(5646) => q(pym),
+ q(5647) => q(pyn),
+ q(5648) => q(pys),
+ q(5649) => q(pyu),
+ q(5650) => q(pyx),
+ q(5651) => q(pyy),
+ q(5652) => q(pzn),
+ q(5653) => q(qua),
+ q(5654) => q(qub),
+ q(5655) => q(quc),
+ q(5656) => q(qud),
+ q(5657) => q(quf),
+ q(5658) => q(qug),
+ q(5659) => q(quh),
+ q(5660) => q(qui),
+ q(5661) => q(quk),
+ q(5662) => q(qul),
+ q(5663) => q(qum),
+ q(5664) => q(qun),
+ q(5665) => q(qup),
+ q(5666) => q(quq),
+ q(5667) => q(qur),
+ q(5668) => q(qus),
+ q(5669) => q(quv),
+ q(5670) => q(quw),
+ q(5671) => q(qux),
+ q(5672) => q(quy),
+ q(5673) => q(quz),
+ q(5674) => q(qva),
+ q(5675) => q(qvc),
+ q(5676) => q(qve),
+ q(5677) => q(qvh),
+ q(5678) => q(qvi),
+ q(5679) => q(qvj),
+ q(5680) => q(qvl),
+ q(5681) => q(qvm),
+ q(5682) => q(qvn),
+ q(5683) => q(qvo),
+ q(5684) => q(qvp),
+ q(5685) => q(qvs),
+ q(5686) => q(qvw),
+ q(5687) => q(qvy),
+ q(5688) => q(qvz),
+ q(5689) => q(qwa),
+ q(5690) => q(qwc),
+ q(5691) => q(qwh),
+ q(5692) => q(qwm),
+ q(5693) => q(qws),
+ q(5694) => q(qwt),
+ q(5695) => q(qxa),
+ q(5696) => q(qxc),
+ q(5697) => q(qxh),
+ q(5698) => q(qxl),
+ q(5699) => q(qxn),
+ q(5700) => q(qxo),
+ q(5701) => q(qxp),
+ q(5702) => q(qxq),
+ q(5703) => q(qxr),
+ q(5704) => q(qxs),
+ q(5705) => q(qxt),
+ q(5706) => q(qxu),
+ q(5707) => q(qxw),
+ q(5708) => q(qya),
+ q(5709) => q(qyp),
+ q(5710) => q(raa),
+ q(5711) => q(rab),
+ q(5712) => q(rac),
+ q(5713) => q(rad),
+ q(5714) => q(raf),
+ q(5715) => q(rag),
+ q(5716) => q(rah),
+ q(5717) => q(rai),
+ q(5718) => q(rak),
+ q(5719) => q(ral),
+ q(5720) => q(ram),
+ q(5721) => q(ran),
+ q(5722) => q(rao),
+ q(5723) => q(raq),
+ q(5724) => q(ras),
+ q(5725) => q(rat),
+ q(5726) => q(rau),
+ q(5727) => q(rav),
+ q(5728) => q(raw),
+ q(5729) => q(rax),
+ q(5730) => q(ray),
+ q(5731) => q(raz),
+ q(5732) => q(rbb),
+ q(5733) => q(rbk),
+ q(5734) => q(rbl),
+ q(5735) => q(rbp),
+ q(5736) => q(rcf),
+ q(5737) => q(rdb),
+ q(5738) => q(rea),
+ q(5739) => q(reb),
+ q(5740) => q(ree),
+ q(5741) => q(reg),
+ q(5742) => q(rei),
+ q(5743) => q(rej),
+ q(5744) => q(rel),
+ q(5745) => q(rem),
+ q(5746) => q(ren),
+ q(5747) => q(rer),
+ q(5748) => q(res),
+ q(5749) => q(ret),
+ q(5750) => q(rey),
+ q(5751) => q(rga),
+ q(5752) => q(rge),
+ q(5753) => q(rgk),
+ q(5754) => q(rgn),
+ q(5755) => q(rgr),
+ q(5756) => q(rgs),
+ q(5757) => q(rgu),
+ q(5758) => q(rhg),
+ q(5759) => q(rhp),
+ q(5760) => q(ria),
+ q(5761) => q(rie),
+ q(5762) => q(rif),
+ q(5763) => q(ril),
+ q(5764) => q(rim),
+ q(5765) => q(rin),
+ q(5766) => q(rir),
+ q(5767) => q(rit),
+ q(5768) => q(riu),
+ q(5769) => q(rjg),
+ q(5770) => q(rji),
+ q(5771) => q(rjs),
+ q(5772) => q(rka),
+ q(5773) => q(rkb),
+ q(5774) => q(rkh),
+ q(5775) => q(rki),
+ q(5776) => q(rkm),
+ q(5777) => q(rkt),
+ q(5778) => q(rma),
+ q(5779) => q(rmb),
+ q(5780) => q(rmc),
+ q(5781) => q(rmd),
+ q(5782) => q(rme),
+ q(5783) => q(rmf),
+ q(5784) => q(rmg),
+ q(5785) => q(rmh),
+ q(5786) => q(rmi),
+ q(5787) => q(rmk),
+ q(5788) => q(rml),
+ q(5789) => q(rmm),
+ q(5790) => q(rmn),
+ q(5791) => q(rmo),
+ q(5792) => q(rmp),
+ q(5793) => q(rmq),
+ q(5794) => q(rms),
+ q(5795) => q(rmt),
+ q(5796) => q(rmu),
+ q(5797) => q(rmv),
+ q(5798) => q(rmw),
+ q(5799) => q(rmx),
+ q(5800) => q(rmy),
+ q(5801) => q(rmz),
+ q(5802) => q(rna),
+ q(5803) => q(rnd),
+ q(5804) => q(rng),
+ q(5805) => q(rnl),
+ q(5806) => q(rnn),
+ q(5807) => q(rnp),
+ q(5808) => q(rnr),
+ q(5809) => q(rnw),
+ q(5810) => q(rob),
+ q(5811) => q(roc),
+ q(5812) => q(rod),
+ q(5813) => q(roe),
+ q(5814) => q(rof),
+ q(5815) => q(rog),
+ q(5816) => q(rol),
+ q(5817) => q(roo),
+ q(5818) => q(rop),
+ q(5819) => q(ror),
+ q(5820) => q(rou),
+ q(5821) => q(row),
+ q(5822) => q(rpn),
+ q(5823) => q(rpt),
+ q(5824) => q(rri),
+ q(5825) => q(rro),
+ q(5826) => q(rrt),
+ q(5827) => q(rsb),
+ q(5828) => q(rsi),
+ q(5829) => q(rsl),
+ q(5830) => q(rtc),
+ q(5831) => q(rth),
+ q(5832) => q(rtm),
+ q(5833) => q(rtw),
+ q(5834) => q(rub),
+ q(5835) => q(ruc),
+ q(5836) => q(rue),
+ q(5837) => q(ruf),
+ q(5838) => q(rug),
+ q(5839) => q(ruh),
+ q(5840) => q(rui),
+ q(5841) => q(ruk),
+ q(5842) => q(ruo),
+ q(5843) => q(ruq),
+ q(5844) => q(rut),
+ q(5845) => q(ruu),
+ q(5846) => q(ruy),
+ q(5847) => q(ruz),
+ q(5848) => q(rwa),
+ q(5849) => q(rwk),
+ q(5850) => q(rwm),
+ q(5851) => q(rwo),
+ q(5852) => q(rwr),
+ q(5853) => q(ryn),
+ q(5854) => q(rys),
+ q(5855) => q(ryu),
+ q(5856) => q(saa),
+ q(5857) => q(sab),
+ q(5858) => q(sac),
+ q(5859) => q(sae),
+ q(5860) => q(saf),
+ q(5861) => q(saj),
+ q(5862) => q(sak),
+ q(5863) => q(sao),
+ q(5864) => q(sap),
+ q(5865) => q(saq),
+ q(5866) => q(sar),
+ q(5867) => q(sau),
+ q(5868) => q(sav),
+ q(5869) => q(saw),
+ q(5870) => q(sax),
+ q(5871) => q(say),
+ q(5872) => q(saz),
+ q(5873) => q(sba),
+ q(5874) => q(sbb),
+ q(5875) => q(sbc),
+ q(5876) => q(sbd),
+ q(5877) => q(slc),
+ q(5878) => q(sbf),
+ q(5879) => q(sbg),
+ q(5880) => q(sbh),
+ q(5881) => q(sbi),
+ q(5882) => q(sbj),
+ q(5883) => q(sbk),
+ q(5884) => q(sbl),
+ q(5885) => q(sbm),
+ q(5886) => q(sbn),
+ q(5887) => q(sbo),
+ q(5888) => q(sbp),
+ q(5889) => q(sbq),
+ q(5890) => q(sbr),
+ q(5891) => q(sbs),
+ q(5892) => q(sbt),
+ q(5893) => q(sbu),
+ q(5894) => q(sbv),
+ q(5895) => q(sbw),
+ q(5896) => q(sbx),
+ q(5897) => q(sby),
+ q(5898) => q(sbz),
+ q(5899) => q(scb),
+ q(5900) => q(sce),
+ q(5901) => q(scf),
+ q(5902) => q(scg),
+ q(5903) => q(sch),
+ q(5904) => q(sci),
+ q(5905) => q(sck),
+ q(5906) => q(scl),
+ q(5907) => q(scp),
+ q(5908) => q(scq),
+ q(5909) => q(scs),
+ q(5910) => q(scu),
+ q(5911) => q(scv),
+ q(5912) => q(scw),
+ q(5913) => q(scx),
+ q(5914) => q(sda),
+ q(5915) => q(sdb),
+ q(5916) => q(sdc),
+ q(5917) => q(sde),
+ q(5918) => q(sdf),
+ q(5919) => q(sdg),
+ q(5920) => q(sdh),
+ q(5921) => q(sdj),
+ q(5922) => q(sdk),
+ q(5923) => q(sdl),
+ q(5924) => q(sdm),
+ q(5925) => q(sdn),
+ q(5926) => q(sdo),
+ q(5927) => q(sdp),
+ q(5928) => q(sdr),
+ q(5929) => q(sds),
+ q(5930) => q(sdt),
+ q(5931) => q(sdu),
+ q(5932) => q(sdx),
+ q(5933) => q(sdz),
+ q(5934) => q(sea),
+ q(5935) => q(seb),
+ q(5936) => q(sec),
+ q(5937) => q(sed),
+ q(5938) => q(see),
+ q(5939) => q(sef),
+ q(5940) => q(seg),
+ q(5941) => q(seh),
+ q(5942) => q(sei),
+ q(5943) => q(sej),
+ q(5944) => q(sek),
+ q(5945) => q(sen),
+ q(5946) => q(seo),
+ q(5947) => q(sep),
+ q(5948) => q(seq),
+ q(5949) => q(ser),
+ q(5950) => q(ses),
+ q(5951) => q(set),
+ q(5952) => q(seu),
+ q(5953) => q(sev),
+ q(5954) => q(sew),
+ q(5955) => q(sey),
+ q(5956) => q(sez),
+ q(5957) => q(sfb),
+ q(5958) => q(sfe),
+ q(5959) => q(sfm),
+ q(5960) => q(sfs),
+ q(5961) => q(sfw),
+ q(5962) => q(sgb),
+ q(5963) => q(sgc),
+ q(5964) => q(sgd),
+ q(5965) => q(sge),
+ q(5966) => q(sgg),
+ q(5967) => q(sgh),
+ q(5968) => q(sgi),
+ q(5969) => q(sgj),
+ q(5970) => q(sgk),
+ q(5971) => q(sgm),
+ q(5972) => q(sgo),
+ q(5973) => q(sgp),
+ q(5974) => q(sgr),
+ q(5975) => q(sgs),
+ q(5976) => q(sgt),
+ q(5977) => q(sgu),
+ q(5978) => q(sgw),
+ q(5979) => q(sgx),
+ q(5980) => q(sgy),
+ q(5981) => q(sgz),
+ q(5982) => q(sha),
+ q(5983) => q(shb),
+ q(5984) => q(shc),
+ q(5985) => q(shd),
+ q(5986) => q(she),
+ q(5987) => q(shg),
+ q(5988) => q(shh),
+ q(5989) => q(shi),
+ q(5990) => q(shj),
+ q(5991) => q(shk),
+ q(5992) => q(shl),
+ q(5993) => q(shm),
+ q(5994) => q(sho),
+ q(5995) => q(shp),
+ q(5996) => q(shq),
+ q(5997) => q(shr),
+ q(5998) => q(shs),
+ q(5999) => q(sht),
+ q(6000) => q(shu),
+ q(6001) => q(shv),
+ q(6002) => q(shw),
+ q(6003) => q(shx),
+ q(6004) => q(shy),
+ q(6005) => q(shz),
+ q(6006) => q(sia),
+ q(6007) => q(sib),
+ q(6008) => q(sie),
+ q(6009) => q(sif),
+ q(6010) => q(sig),
+ q(6011) => q(sih),
+ q(6012) => q(sii),
+ q(6013) => q(sij),
+ q(6014) => q(sik),
+ q(6015) => q(sil),
+ q(6016) => q(sim),
+ q(6017) => q(sip),
+ q(6018) => q(siq),
+ q(6019) => q(sir),
+ q(6020) => q(sis),
+ q(6021) => q(siu),
+ q(6022) => q(siv),
+ q(6023) => q(siw),
+ q(6024) => q(six),
+ q(6025) => q(siy),
+ q(6026) => q(siz),
+ q(6027) => q(sja),
+ q(6028) => q(sjb),
+ q(6029) => q(sjd),
+ q(6030) => q(sje),
+ q(6031) => q(sjg),
+ q(6032) => q(sjk),
+ q(6033) => q(sjl),
+ q(6034) => q(sjm),
+ q(6035) => q(sjn),
+ q(6036) => q(sjo),
+ q(6037) => q(sjp),
+ q(6038) => q(sjr),
+ q(6039) => q(sjs),
+ q(6040) => q(sjt),
+ q(6041) => q(sju),
+ q(6042) => q(sjw),
+ q(6043) => q(ska),
+ q(6044) => q(skb),
+ q(6045) => q(skc),
+ q(6046) => q(skd),
+ q(6047) => q(ske),
+ q(6048) => q(skf),
+ q(6049) => q(skg),
+ q(6050) => q(skh),
+ q(6051) => q(ski),
+ q(6052) => q(skj),
+ q(6053) => q(skk),
+ q(6054) => q(skm),
+ q(6055) => q(skn),
+ q(6056) => q(sko),
+ q(6057) => q(skp),
+ q(6058) => q(skq),
+ q(6059) => q(skr),
+ q(6060) => q(sks),
+ q(6061) => q(skt),
+ q(6062) => q(sku),
+ q(6063) => q(skv),
+ q(6064) => q(skw),
+ q(6065) => q(skx),
+ q(6066) => q(sky),
+ q(6067) => q(skz),
+ q(6068) => q(sld),
+ q(6069) => q(sle),
+ q(6070) => q(slf),
+ q(6071) => q(slg),
+ q(6072) => q(slh),
+ q(6073) => q(sli),
+ q(6074) => q(slj),
+ q(6075) => q(sll),
+ q(6076) => q(slm),
+ q(6077) => q(sln),
+ q(6078) => q(slp),
+ q(6079) => q(slq),
+ q(6080) => q(slr),
+ q(6081) => q(sls),
+ q(6082) => q(slt),
+ q(6083) => q(slu),
+ q(6084) => q(slw),
+ q(6085) => q(slx),
+ q(6086) => q(sly),
+ q(6087) => q(slz),
+ q(6088) => q(smb),
+ q(6089) => q(smc),
+ q(6090) => q(smd),
+ q(6091) => q(smf),
+ q(6092) => q(smg),
+ q(6093) => q(smh),
+ q(6094) => q(smk),
+ q(6095) => q(sml),
+ q(6096) => q(smm),
+ q(6097) => q(smp),
+ q(6098) => q(smq),
+ q(6099) => q(smr),
+ q(6100) => q(smt),
+ q(6101) => q(smu),
+ q(6102) => q(smv),
+ q(6103) => q(smw),
+ q(6104) => q(smx),
+ q(6105) => q(smy),
+ q(6106) => q(smz),
+ q(6107) => q(snb),
+ q(6108) => q(snc),
+ q(6109) => q(sne),
+ q(6110) => q(snf),
+ q(6111) => q(sng),
+ q(6112) => q(snh),
+ q(6113) => q(sni),
+ q(6114) => q(snj),
+ q(6115) => q(snl),
+ q(6116) => q(snm),
+ q(6117) => q(snn),
+ q(6118) => q(sno),
+ q(6119) => q(snp),
+ q(6120) => q(snq),
+ q(6121) => q(snr),
+ q(6122) => q(sns),
+ q(6123) => q(snu),
+ q(6124) => q(snv),
+ q(6125) => q(snw),
+ q(6126) => q(snx),
+ q(6127) => q(sny),
+ q(6128) => q(snz),
+ q(6129) => q(soa),
+ q(6130) => q(sob),
+ q(6131) => q(soc),
+ q(6132) => q(sod),
+ q(6133) => q(soe),
+ q(6134) => q(soh),
+ q(6135) => q(soi),
+ q(6136) => q(soj),
+ q(6137) => q(sok),
+ q(6138) => q(sol),
+ q(6139) => q(soo),
+ q(6140) => q(sop),
+ q(6141) => q(soq),
+ q(6142) => q(sor),
+ q(6143) => q(sos),
+ q(6144) => q(sou),
+ q(6145) => q(sov),
+ q(6146) => q(sow),
+ q(6147) => q(sox),
+ q(6148) => q(soy),
+ q(6149) => q(soz),
+ q(6150) => q(spb),
+ q(6151) => q(spc),
+ q(6152) => q(spd),
+ q(6153) => q(spe),
+ q(6154) => q(spg),
+ q(6155) => q(spi),
+ q(6156) => q(spk),
+ q(6157) => q(spl),
+ q(6158) => q(spm),
+ q(6159) => q(spo),
+ q(6160) => q(spp),
+ q(6161) => q(spq),
+ q(6162) => q(spr),
+ q(6163) => q(sps),
+ q(6164) => q(spt),
+ q(6165) => q(spu),
+ q(6166) => q(spv),
+ q(6167) => q(spx),
+ q(6168) => q(spy),
+ q(6169) => q(sqa),
+ q(6170) => q(sqh),
+ q(6171) => q(sqk),
+ q(6172) => q(sqm),
+ q(6173) => q(sqn),
+ q(6174) => q(sqo),
+ q(6175) => q(sqq),
+ q(6176) => q(sqr),
+ q(6177) => q(sqs),
+ q(6178) => q(sqt),
+ q(6179) => q(squ),
+ q(6180) => q(sra),
+ q(6181) => q(srb),
+ q(6182) => q(src),
+ q(6183) => q(sre),
+ q(6184) => q(srf),
+ q(6185) => q(srg),
+ q(6186) => q(srh),
+ q(6187) => q(sri),
+ q(6188) => q(srk),
+ q(6189) => q(srl),
+ q(6190) => q(srm),
+ q(6191) => q(sro),
+ q(6192) => q(srq),
+ q(6193) => q(srs),
+ q(6194) => q(srt),
+ q(6195) => q(sru),
+ q(6196) => q(srv),
+ q(6197) => q(srw),
+ q(6198) => q(srx),
+ q(6199) => q(sry),
+ q(6200) => q(srz),
+ q(6201) => q(ssb),
+ q(6202) => q(ssc),
+ q(6203) => q(ssd),
+ q(6204) => q(sse),
+ q(6205) => q(ssf),
+ q(6206) => q(ssg),
+ q(6207) => q(ssh),
+ q(6208) => q(ssi),
+ q(6209) => q(ssj),
+ q(6210) => q(ssk),
+ q(6211) => q(ssl),
+ q(6212) => q(ssm),
+ q(6213) => q(ssn),
+ q(6214) => q(sso),
+ q(6215) => q(ssp),
+ q(6216) => q(ssq),
+ q(6217) => q(ssr),
+ q(6218) => q(sss),
+ q(6219) => q(sst),
+ q(6220) => q(ssu),
+ q(6221) => q(ssv),
+ q(6222) => q(ssx),
+ q(6223) => q(ssy),
+ q(6224) => q(ssz),
+ q(6225) => q(sta),
+ q(6226) => q(stb),
+ q(6227) => q(std),
+ q(6228) => q(ste),
+ q(6229) => q(stf),
+ q(6230) => q(stg),
+ q(6231) => q(sth),
+ q(6232) => q(sti),
+ q(6233) => q(stj),
+ q(6234) => q(stk),
+ q(6235) => q(stl),
+ q(6236) => q(stm),
+ q(6237) => q(stn),
+ q(6238) => q(sto),
+ q(6239) => q(stp),
+ q(6240) => q(stq),
+ q(6241) => q(str),
+ q(6242) => q(sts),
+ q(6243) => q(stt),
+ q(6244) => q(stu),
+ q(6245) => q(stv),
+ q(6246) => q(stw),
+ q(6247) => q(sua),
+ q(6248) => q(sub),
+ q(6249) => q(suc),
+ q(6250) => q(sue),
+ q(6251) => q(sug),
+ q(6252) => q(sui),
+ q(6253) => q(suj),
+ q(6254) => q(suq),
+ q(6255) => q(sur),
+ q(6256) => q(sut),
+ q(6257) => q(suv),
+ q(6258) => q(suw),
+ q(6259) => q(suy),
+ q(6260) => q(suz),
+ q(6261) => q(sva),
+ q(6262) => q(svb),
+ q(6263) => q(svc),
+ q(6264) => q(sve),
+ q(6265) => q(svk),
+ q(6266) => q(svr),
+ q(6267) => q(svs),
+ q(6268) => q(svx),
+ q(6269) => q(swb),
+ q(6270) => q(swc),
+ q(6271) => q(swf),
+ q(6272) => q(swg),
+ q(6273) => q(swh),
+ q(6274) => q(swi),
+ q(6275) => q(swj),
+ q(6276) => q(swk),
+ q(6277) => q(swl),
+ q(6278) => q(swm),
+ q(6279) => q(swn),
+ q(6280) => q(swo),
+ q(6281) => q(swp),
+ q(6282) => q(swq),
+ q(6283) => q(swr),
+ q(6284) => q(sws),
+ q(6285) => q(swt),
+ q(6286) => q(swu),
+ q(6287) => q(swv),
+ q(6288) => q(sww),
+ q(6289) => q(swx),
+ q(6290) => q(swy),
+ q(6291) => q(sxb),
+ q(6292) => q(sxc),
+ q(6293) => q(sxe),
+ q(6294) => q(sxg),
+ q(6295) => q(sxk),
+ q(6296) => q(sxl),
+ q(6297) => q(sxm),
+ q(6298) => q(sxn),
+ q(6299) => q(sxo),
+ q(6300) => q(sxr),
+ q(6301) => q(sxs),
+ q(6302) => q(sxu),
+ q(6303) => q(sxw),
+ q(6304) => q(sya),
+ q(6305) => q(syb),
+ q(6306) => q(syi),
+ q(6307) => q(syk),
+ q(6308) => q(syl),
+ q(6309) => q(sym),
+ q(6310) => q(syn),
+ q(6311) => q(syo),
+ q(6312) => q(sys),
+ q(6313) => q(syw),
+ q(6314) => q(syy),
+ q(6315) => q(sza),
+ q(6316) => q(szb),
+ q(6317) => q(szc),
+ q(6318) => q(szd),
+ q(6319) => q(sze),
+ q(6320) => q(szg),
+ q(6321) => q(szl),
+ q(6322) => q(szn),
+ q(6323) => q(szp),
+ q(6324) => q(szv),
+ q(6325) => q(szw),
+ q(6326) => q(taa),
+ q(6327) => q(tab),
+ q(6328) => q(tac),
+ q(6329) => q(tad),
+ q(6330) => q(tae),
+ q(6331) => q(taf),
+ q(6332) => q(tag),
+ q(6333) => q(taj),
+ q(6334) => q(tak),
+ q(6335) => q(tal),
+ q(6336) => q(tan),
+ q(6337) => q(tao),
+ q(6338) => q(tap),
+ q(6339) => q(taq),
+ q(6340) => q(tar),
+ q(6341) => q(tas),
+ q(6342) => q(tau),
+ q(6343) => q(tav),
+ q(6344) => q(taw),
+ q(6345) => q(tax),
+ q(6346) => q(tay),
+ q(6347) => q(taz),
+ q(6348) => q(tba),
+ q(6349) => q(tbb),
+ q(6350) => q(tbc),
+ q(6351) => q(tbd),
+ q(6352) => q(tbe),
+ q(6353) => q(tbf),
+ q(6354) => q(tbg),
+ q(6355) => q(tbh),
+ q(6356) => q(tbi),
+ q(6357) => q(tbj),
+ q(6358) => q(tbk),
+ q(6359) => q(tbl),
+ q(6360) => q(tbm),
+ q(6361) => q(tbn),
+ q(6362) => q(tbo),
+ q(6363) => q(tbp),
+ q(6364) => q(tbr),
+ q(6365) => q(tbs),
+ q(6366) => q(tbt),
+ q(6367) => q(tbu),
+ q(6368) => q(tbv),
+ q(6369) => q(tbw),
+ q(6370) => q(tbx),
+ q(6371) => q(tby),
+ q(6372) => q(tbz),
+ q(6373) => q(tca),
+ q(6374) => q(tcb),
+ q(6375) => q(tcc),
+ q(6376) => q(tcd),
+ q(6377) => q(tce),
+ q(6378) => q(tcf),
+ q(6379) => q(tcg),
+ q(6380) => q(tch),
+ q(6381) => q(wbf),
+ q(6382) => q(tck),
+ q(6383) => q(tcl),
+ q(6384) => q(tcm),
+ q(6385) => q(tcn),
+ q(6386) => q(tco),
+ q(6387) => q(tcp),
+ q(6388) => q(tcq),
+ q(6389) => q(tcs),
+ q(6390) => q(tct),
+ q(6391) => q(tcu),
+ q(6392) => q(tcw),
+ q(6393) => q(tcx),
+ q(6394) => q(tcy),
+ q(6395) => q(tcz),
+ q(6396) => q(tda),
+ q(6397) => q(tdb),
+ q(6398) => q(tdc),
+ q(6399) => q(tdd),
+ q(6400) => q(tde),
+ q(6401) => q(tdf),
+ q(6402) => q(tdg),
+ q(6403) => q(tdh),
+ q(6404) => q(tdi),
+ q(6405) => q(tdj),
+ q(6406) => q(tdk),
+ q(6407) => q(tdl),
+ q(6408) => q(tdn),
+ q(6409) => q(tdo),
+ q(6410) => q(tdq),
+ q(6411) => q(tdr),
+ q(6412) => q(tds),
+ q(6413) => q(tdt),
+ q(6414) => q(tdu),
+ q(6415) => q(tdv),
+ q(6416) => q(tdx),
+ q(6417) => q(tdy),
+ q(6418) => q(tea),
+ q(6419) => q(teb),
+ q(6420) => q(tec),
+ q(6421) => q(ted),
+ q(6422) => q(tee),
+ q(6423) => q(tef),
+ q(6424) => q(teg),
+ q(6425) => q(teh),
+ q(6426) => q(tei),
+ q(6427) => q(tek),
+ q(6428) => q(ten),
+ q(6429) => q(teo),
+ q(6430) => q(tep),
+ q(6431) => q(teq),
+ q(6432) => q(tes),
+ q(6433) => q(teu),
+ q(6434) => q(tev),
+ q(6435) => q(tew),
+ q(6436) => q(tex),
+ q(6437) => q(tey),
+ q(6438) => q(tfi),
+ q(6439) => q(tfn),
+ q(6440) => q(tfo),
+ q(6441) => q(tfr),
+ q(6442) => q(tft),
+ q(6443) => q(tga),
+ q(6444) => q(tgb),
+ q(6445) => q(tgc),
+ q(6446) => q(tgd),
+ q(6447) => q(tge),
+ q(6448) => q(tgf),
+ q(6449) => q(tgg),
+ q(6450) => q(tgh),
+ q(6451) => q(tgi),
+ q(6452) => q(tgj),
+ q(6453) => q(tgn),
+ q(6454) => q(tgo),
+ q(6455) => q(tgp),
+ q(6456) => q(tgq),
+ q(6457) => q(tgr),
+ q(6458) => q(tgs),
+ q(6459) => q(tgt),
+ q(6460) => q(tgu),
+ q(6461) => q(tgv),
+ q(6462) => q(tgw),
+ q(6463) => q(tgx),
+ q(6464) => q(tgy),
+ q(6465) => q(tgz),
+ q(6466) => q(thc),
+ q(6467) => q(thd),
+ q(6468) => q(the),
+ q(6469) => q(thf),
+ q(6470) => q(thh),
+ q(6471) => q(thi),
+ q(6472) => q(thk),
+ q(6473) => q(thl),
+ q(6474) => q(thm),
+ q(6475) => q(thn),
+ q(6476) => q(thp),
+ q(6477) => q(thq),
+ q(6478) => q(thr),
+ q(6479) => q(ths),
+ q(6480) => q(tht),
+ q(6481) => q(thu),
+ q(6482) => q(thv),
+ q(6483) => q(thw),
+ q(6484) => q(thx),
+ q(6485) => q(thy),
+ q(6486) => q(thz),
+ q(6487) => q(tia),
+ q(6488) => q(tic),
+ q(6489) => q(tid),
+ q(6490) => q(tif),
+ q(6491) => q(tih),
+ q(6492) => q(tii),
+ q(6493) => q(tij),
+ q(6494) => q(tik),
+ q(6495) => q(til),
+ q(6496) => q(tim),
+ q(6497) => q(tin),
+ q(6498) => q(tio),
+ q(6499) => q(tip),
+ q(6500) => q(tiq),
+ q(6501) => q(tis),
+ q(6502) => q(tit),
+ q(6503) => q(tiu),
+ q(6504) => q(tiw),
+ q(6505) => q(tix),
+ q(6506) => q(tiy),
+ q(6507) => q(tiz),
+ q(6508) => q(tja),
+ q(6509) => q(tjg),
+ q(6510) => q(tji),
+ q(6511) => q(tjl),
+ q(6512) => q(tjm),
+ q(6513) => q(tjn),
+ q(6514) => q(tjo),
+ q(6515) => q(tjs),
+ q(6516) => q(tju),
+ q(6517) => q(tka),
+ q(6518) => q(tkb),
+ q(6519) => q(tkd),
+ q(6520) => q(tke),
+ q(6521) => q(tkf),
+ q(6522) => q(tkg),
+ q(6523) => q(tkm),
+ q(6524) => q(tkn),
+ q(6525) => q(tkp),
+ q(6526) => q(tkq),
+ q(6527) => q(tkr),
+ q(6528) => q(tks),
+ q(6529) => q(tkt),
+ q(6530) => q(tku),
+ q(6531) => q(tkw),
+ q(6532) => q(tkx),
+ q(6533) => q(tkz),
+ q(6534) => q(tla),
+ q(6535) => q(tlb),
+ q(6536) => q(tlc),
+ q(6537) => q(tld),
+ q(6538) => q(tlf),
+ q(6539) => q(tlg),
+ q(6540) => q(tlj),
+ q(6541) => q(tlk),
+ q(6542) => q(tll),
+ q(6543) => q(tlm),
+ q(6544) => q(tln),
+ q(6545) => q(tlo),
+ q(6546) => q(tlp),
+ q(6547) => q(tlq),
+ q(6548) => q(tlr),
+ q(6549) => q(tls),
+ q(6550) => q(tlt),
+ q(6551) => q(tlu),
+ q(6552) => q(tlv),
+ q(6553) => q(tlx),
+ q(6554) => q(tly),
+ q(6555) => q(tma),
+ q(6556) => q(tmb),
+ q(6557) => q(tmc),
+ q(6558) => q(tmd),
+ q(6559) => q(tme),
+ q(6560) => q(tmf),
+ q(6561) => q(tmg),
+ q(6562) => q(tmi),
+ q(6563) => q(tmj),
+ q(6564) => q(tmk),
+ q(6565) => q(tml),
+ q(6566) => q(tmm),
+ q(6567) => q(tmn),
+ q(6568) => q(tmo),
+ q(6569) => q(tmp),
+ q(6570) => q(tmq),
+ q(6571) => q(tmr),
+ q(6572) => q(tms),
+ q(6573) => q(tmt),
+ q(6574) => q(tmu),
+ q(6575) => q(tmv),
+ q(6576) => q(tmw),
+ q(6577) => q(tmy),
+ q(6578) => q(tmz),
+ q(6579) => q(tna),
+ q(6580) => q(tnb),
+ q(6581) => q(tnc),
+ q(6582) => q(tnd),
+ q(6583) => q(tne),
+ q(6584) => q(tng),
+ q(6585) => q(tnh),
+ q(6586) => q(tni),
+ q(6587) => q(tnk),
+ q(6588) => q(tnl),
+ q(6589) => q(tnm),
+ q(6590) => q(tnn),
+ q(6591) => q(tno),
+ q(6592) => q(tnp),
+ q(6593) => q(tnq),
+ q(6594) => q(tnr),
+ q(6595) => q(tns),
+ q(6596) => q(tnt),
+ q(6597) => q(tnu),
+ q(6598) => q(tnv),
+ q(6599) => q(tnw),
+ q(6600) => q(tnx),
+ q(6601) => q(tny),
+ q(6602) => q(tnz),
+ q(6603) => q(tob),
+ q(6604) => q(toc),
+ q(6605) => q(tod),
+ q(6606) => q(toe),
+ q(6607) => q(tof),
+ q(6608) => q(toh),
+ q(6609) => q(toi),
+ q(6610) => q(toj),
+ q(6611) => q(tol),
+ q(6612) => q(tom),
+ q(6613) => q(too),
+ q(6614) => q(top),
+ q(6615) => q(toq),
+ q(6616) => q(tor),
+ q(6617) => q(tos),
+ q(6618) => q(tou),
+ q(6619) => q(tov),
+ q(6620) => q(tow),
+ q(6621) => q(tox),
+ q(6622) => q(toy),
+ q(6623) => q(toz),
+ q(6624) => q(tpa),
+ q(6625) => q(tpc),
+ q(6626) => q(tpe),
+ q(6627) => q(tpf),
+ q(6628) => q(tpg),
+ q(6629) => q(tpj),
+ q(6630) => q(tpk),
+ q(6631) => q(tpl),
+ q(6632) => q(tpm),
+ q(6633) => q(tpn),
+ q(6634) => q(tpo),
+ q(6635) => q(tpp),
+ q(6636) => q(tpq),
+ q(6637) => q(tpr),
+ q(6638) => q(tpt),
+ q(6639) => q(tpu),
+ q(6640) => q(tpv),
+ q(6641) => q(tpw),
+ q(6642) => q(tpx),
+ q(6643) => q(tpy),
+ q(6644) => q(tpz),
+ q(6645) => q(tqb),
+ q(6646) => q(tql),
+ q(6647) => q(tqm),
+ q(6648) => q(tqn),
+ q(6649) => q(tqo),
+ q(6650) => q(tqp),
+ q(6651) => q(tqq),
+ q(6652) => q(tqr),
+ q(6653) => q(tqt),
+ q(6654) => q(tqu),
+ q(6655) => q(tqw),
+ q(6656) => q(tra),
+ q(6657) => q(trb),
+ q(6658) => q(trc),
+ q(6659) => q(trd),
+ q(6660) => q(tre),
+ q(6661) => q(trf),
+ q(6662) => q(trg),
+ q(6663) => q(trh),
+ q(6664) => q(tri),
+ q(6665) => q(trj),
+ q(6666) => q(trl),
+ q(6667) => q(trm),
+ q(6668) => q(trn),
+ q(6669) => q(tro),
+ q(6670) => q(trp),
+ q(6671) => q(trq),
+ q(6672) => q(trr),
+ q(6673) => q(trs),
+ q(6674) => q(trt),
+ q(6675) => q(tru),
+ q(6676) => q(trv),
+ q(6677) => q(trw),
+ q(6678) => q(trx),
+ q(6679) => q(try),
+ q(6680) => q(trz),
+ q(6681) => q(tsa),
+ q(6682) => q(tsb),
+ q(6683) => q(tsc),
+ q(6684) => q(tsd),
+ q(6685) => q(tse),
+ q(6686) => q(tsf),
+ q(6687) => q(tsg),
+ q(6688) => q(tsh),
+ q(6689) => q(tsj),
+ q(6690) => q(tsk),
+ q(6691) => q(tsl),
+ q(6692) => q(tsm),
+ q(6693) => q(tsp),
+ q(6694) => q(tsq),
+ q(6695) => q(tsr),
+ q(6696) => q(tss),
+ q(6697) => q(tst),
+ q(6698) => q(tsu),
+ q(6699) => q(tsv),
+ q(6700) => q(tsw),
+ q(6701) => q(tsx),
+ q(6702) => q(tsy),
+ q(6703) => q(tsz),
+ q(6704) => q(tta),
+ q(6705) => q(ttb),
+ q(6706) => q(ttc),
+ q(6707) => q(ttd),
+ q(6708) => q(tte),
+ q(6709) => q(ttf),
+ q(6710) => q(ttg),
+ q(6711) => q(tth),
+ q(6712) => q(tti),
+ q(6713) => q(ttj),
+ q(6714) => q(ttk),
+ q(6715) => q(ttl),
+ q(6716) => q(ttm),
+ q(6717) => q(ttn),
+ q(6718) => q(tto),
+ q(6719) => q(ttp),
+ q(6720) => q(ttq),
+ q(6721) => q(ttr),
+ q(6722) => q(tts),
+ q(6723) => q(ttt),
+ q(6724) => q(ttu),
+ q(6725) => q(ttv),
+ q(6726) => q(ttw),
+ q(6727) => q(tty),
+ q(6728) => q(ttz),
+ q(6729) => q(tua),
+ q(6730) => q(tub),
+ q(6731) => q(tuc),
+ q(6732) => q(tud),
+ q(6733) => q(tue),
+ q(6734) => q(tuf),
+ q(6735) => q(tug),
+ q(6736) => q(tuh),
+ q(6737) => q(tui),
+ q(6738) => q(tuj),
+ q(6739) => q(tul),
+ q(6740) => q(tun),
+ q(6741) => q(tuo),
+ q(6742) => q(tuq),
+ q(6743) => q(tus),
+ q(6744) => q(tuu),
+ q(6745) => q(tuv),
+ q(6746) => q(tux),
+ q(6747) => q(tuy),
+ q(6748) => q(tuz),
+ q(6749) => q(tva),
+ q(6750) => q(tvd),
+ q(6751) => q(tve),
+ q(6752) => q(tvk),
+ q(6753) => q(tvm),
+ q(6754) => q(tvn),
+ q(6755) => q(tvo),
+ q(6756) => q(tvs),
+ q(6757) => q(tvt),
+ q(6758) => q(tvu),
+ q(6759) => q(tvw),
+ q(6760) => q(tvy),
+ q(6761) => q(twa),
+ q(6762) => q(twb),
+ q(6763) => q(twc),
+ q(6764) => q(twd),
+ q(6765) => q(twe),
+ q(6766) => q(twf),
+ q(6767) => q(twg),
+ q(6768) => q(twh),
+ q(6769) => q(twl),
+ q(6770) => q(twm),
+ q(6771) => q(twn),
+ q(6772) => q(two),
+ q(6773) => q(twp),
+ q(6774) => q(twq),
+ q(6775) => q(twr),
+ q(6776) => q(twt),
+ q(6777) => q(twu),
+ q(6778) => q(tww),
+ q(6779) => q(twx),
+ q(6780) => q(twy),
+ q(6781) => q(txa),
+ q(6782) => q(txb),
+ q(6783) => q(txc),
+ q(6784) => q(txe),
+ q(6785) => q(txg),
+ q(6786) => q(txh),
+ q(6787) => q(txi),
+ q(6788) => q(txm),
+ q(6789) => q(txn),
+ q(6790) => q(txo),
+ q(6791) => q(txq),
+ q(6792) => q(txr),
+ q(6793) => q(txs),
+ q(6794) => q(txt),
+ q(6795) => q(txu),
+ q(6796) => q(txx),
+ q(6797) => q(txy),
+ q(6798) => q(tya),
+ q(6799) => q(tye),
+ q(6800) => q(tyh),
+ q(6801) => q(tyi),
+ q(6802) => q(tyj),
+ q(6803) => q(tyl),
+ q(6804) => q(tyn),
+ q(6805) => q(typ),
+ q(6806) => q(tyr),
+ q(6807) => q(tys),
+ q(6808) => q(tyt),
+ q(6809) => q(tyu),
+ q(6810) => q(tyx),
+ q(6811) => q(tyz),
+ q(6812) => q(tza),
+ q(6813) => q(tzh),
+ q(6814) => q(tzj),
+ q(6815) => q(tzm),
+ q(6816) => q(tzn),
+ q(6817) => q(tzo),
+ q(6818) => q(tzx),
+ q(6819) => q(uam),
+ q(6820) => q(uan),
+ q(6821) => q(uar),
+ q(6822) => q(uba),
+ q(6823) => q(ubi),
+ q(6824) => q(ubl),
+ q(6825) => q(ubr),
+ q(6826) => q(ubu),
+ q(6827) => q(uby),
+ q(6828) => q(uda),
+ q(6829) => q(ude),
+ q(6830) => q(udg),
+ q(6831) => q(udi),
+ q(6832) => q(udj),
+ q(6833) => q(udl),
+ q(6834) => q(udu),
+ q(6835) => q(ues),
+ q(6836) => q(ufi),
+ q(6837) => q(ugb),
+ q(6838) => q(uge),
+ q(6839) => q(ugn),
+ q(6840) => q(ugo),
+ q(6841) => q(ugy),
+ q(6842) => q(uha),
+ q(6843) => q(uhn),
+ q(6844) => q(uis),
+ q(6845) => q(uiv),
+ q(6846) => q(uji),
+ q(6847) => q(uka),
+ q(6848) => q(ukg),
+ q(6849) => q(ukh),
+ q(6850) => q(ukl),
+ q(6851) => q(ukp),
+ q(6852) => q(ukq),
+ q(6853) => q(uks),
+ q(6854) => q(uku),
+ q(6855) => q(ukw),
+ q(6856) => q(uky),
+ q(6857) => q(ula),
+ q(6858) => q(ulb),
+ q(6859) => q(ulc),
+ q(6860) => q(ulf),
+ q(6861) => q(uli),
+ q(6862) => q(ulk),
+ q(6863) => q(ull),
+ q(6864) => q(ulm),
+ q(6865) => q(uln),
+ q(6866) => q(ulu),
+ q(6867) => q(ulw),
+ q(6868) => q(uma),
+ q(6869) => q(umc),
+ q(6870) => q(umd),
+ q(6871) => q(umg),
+ q(6872) => q(umi),
+ q(6873) => q(umm),
+ q(6874) => q(umn),
+ q(6875) => q(umo),
+ q(6876) => q(ump),
+ q(6877) => q(umr),
+ q(6878) => q(ums),
+ q(6879) => q(umu),
+ q(6880) => q(una),
+ q(6881) => q(une),
+ q(6882) => q(ung),
+ q(6883) => q(unk),
+ q(6884) => q(unm),
+ q(6885) => q(unr),
+ q(6886) => q(unx),
+ q(6887) => q(unz),
+ q(6888) => q(uok),
+ q(6889) => q(upi),
+ q(6890) => q(upv),
+ q(6891) => q(ura),
+ q(6892) => q(urb),
+ q(6893) => q(urc),
+ q(6894) => q(ure),
+ q(6895) => q(urf),
+ q(6896) => q(urg),
+ q(6897) => q(urh),
+ q(6898) => q(uri),
+ q(6899) => q(urk),
+ q(6900) => q(url),
+ q(6901) => q(urm),
+ q(6902) => q(urn),
+ q(6903) => q(uro),
+ q(6904) => q(urp),
+ q(6905) => q(urr),
+ q(6906) => q(urt),
+ q(6907) => q(uru),
+ q(6908) => q(urv),
+ q(6909) => q(urw),
+ q(6910) => q(urx),
+ q(6911) => q(ury),
+ q(6912) => q(urz),
+ q(6913) => q(usa),
+ q(6914) => q(ush),
+ q(6915) => q(usi),
+ q(6916) => q(usk),
+ q(6917) => q(usp),
+ q(6918) => q(usu),
+ q(6919) => q(uta),
+ q(6920) => q(ute),
+ q(6921) => q(utp),
+ q(6922) => q(utr),
+ q(6923) => q(utu),
+ q(6924) => q(uum),
+ q(6925) => q(uun),
+ q(6926) => q(uur),
+ q(6927) => q(uuu),
+ q(6928) => q(uve),
+ q(6929) => q(uvh),
+ q(6930) => q(uvl),
+ q(6931) => q(uwa),
+ q(6932) => q(uya),
+ q(6933) => q(uzn),
+ q(6934) => q(uzs),
+ q(6935) => q(vaa),
+ q(6936) => q(vae),
+ q(6937) => q(vaf),
+ q(6938) => q(vag),
+ q(6939) => q(vah),
+ q(6940) => q(vaj),
+ q(6941) => q(val),
+ q(6942) => q(vam),
+ q(6943) => q(van),
+ q(6944) => q(vao),
+ q(6945) => q(vap),
+ q(6946) => q(var),
+ q(6947) => q(vas),
+ q(6948) => q(vau),
+ q(6949) => q(vav),
+ q(6950) => q(vay),
+ q(6951) => q(vbb),
+ q(6952) => q(vbk),
+ q(6953) => q(vec),
+ q(6954) => q(ved),
+ q(6955) => q(vel),
+ q(6956) => q(vem),
+ q(6957) => q(veo),
+ q(6958) => q(vep),
+ q(6959) => q(ver),
+ q(6960) => q(vgr),
+ q(6961) => q(vgt),
+ q(6962) => q(vic),
+ q(6963) => q(vid),
+ q(6964) => q(vif),
+ q(6965) => q(vig),
+ q(6966) => q(vil),
+ q(6967) => q(vin),
+ q(6968) => q(vis),
+ q(6969) => q(vit),
+ q(6970) => q(viv),
+ q(6971) => q(vka),
+ q(6972) => q(vki),
+ q(6973) => q(vkj),
+ q(6974) => q(vkk),
+ q(6975) => q(vkl),
+ q(6976) => q(vkm),
+ q(6977) => q(vko),
+ q(6978) => q(vkp),
+ q(6979) => q(vkt),
+ q(6980) => q(vku),
+ q(6981) => q(vlp),
+ q(6982) => q(vls),
+ q(6983) => q(vma),
+ q(6984) => q(vmb),
+ q(6985) => q(vmc),
+ q(6986) => q(vmd),
+ q(6987) => q(vme),
+ q(6988) => q(vmf),
+ q(6989) => q(vmg),
+ q(6990) => q(vmh),
+ q(6991) => q(vmi),
+ q(6992) => q(vmj),
+ q(6993) => q(vmk),
+ q(6994) => q(vml),
+ q(6995) => q(vmm),
+ q(6996) => q(vmp),
+ q(6997) => q(vmq),
+ q(6998) => q(vmr),
+ q(6999) => q(vms),
+ q(7000) => q(vmu),
+ q(7001) => q(vmv),
+ q(7002) => q(vmw),
+ q(7003) => q(vmx),
+ q(7004) => q(vmy),
+ q(7005) => q(vmz),
+ q(7006) => q(vnk),
+ q(7007) => q(vnm),
+ q(7008) => q(vnp),
+ q(7009) => q(vro),
+ q(7010) => q(vra),
+ q(7011) => q(vrs),
+ q(7012) => q(vrt),
+ q(7013) => q(vsi),
+ q(7014) => q(vsl),
+ q(7015) => q(vsv),
+ q(7016) => q(vto),
+ q(7017) => q(vum),
+ q(7018) => q(vun),
+ q(7019) => q(vut),
+ q(7020) => q(vwa),
+ q(7021) => q(waa),
+ q(7022) => q(wab),
+ q(7023) => q(wac),
+ q(7024) => q(wad),
+ q(7025) => q(wae),
+ q(7026) => q(waf),
+ q(7027) => q(wag),
+ q(7028) => q(wah),
+ q(7029) => q(wai),
+ q(7030) => q(waj),
+ q(7031) => q(wam),
+ q(7032) => q(wan),
+ q(7033) => q(wao),
+ q(7034) => q(wap),
+ q(7035) => q(waq),
+ q(7036) => q(wat),
+ q(7037) => q(wau),
+ q(7038) => q(wav),
+ q(7039) => q(waw),
+ q(7040) => q(wax),
+ q(7041) => q(way),
+ q(7042) => q(waz),
+ q(7043) => q(wba),
+ q(7044) => q(wbb),
+ q(7045) => q(wbe),
+ q(7046) => q(wbh),
+ q(7047) => q(wbi),
+ q(7048) => q(wbj),
+ q(7049) => q(wbk),
+ q(7050) => q(wbl),
+ q(7051) => q(wbm),
+ q(7052) => q(wbp),
+ q(7053) => q(wbq),
+ q(7054) => q(wbr),
+ q(7055) => q(wbt),
+ q(7056) => q(wbv),
+ q(7057) => q(wbw),
+ q(7058) => q(wca),
+ q(7059) => q(wci),
+ q(7060) => q(wdd),
+ q(7061) => q(wdg),
+ q(7062) => q(wdj),
+ q(7063) => q(wdu),
+ q(7064) => q(wea),
+ q(7065) => q(wec),
+ q(7066) => q(wed),
+ q(7067) => q(weh),
+ q(7068) => q(wei),
+ q(7069) => q(wem),
+ q(7070) => q(weo),
+ q(7071) => q(wep),
+ q(7072) => q(wer),
+ q(7073) => q(wes),
+ q(7074) => q(wet),
+ q(7075) => q(weu),
+ q(7076) => q(wew),
+ q(7077) => q(wfg),
+ q(7078) => q(wga),
+ q(7079) => q(wgb),
+ q(7080) => q(wgg),
+ q(7081) => q(wgi),
+ q(7082) => q(wgo),
+ q(7083) => q(wgu),
+ q(7084) => q(wgy),
+ q(7085) => q(wha),
+ q(7086) => q(whg),
+ q(7087) => q(whk),
+ q(7088) => q(whu),
+ q(7089) => q(wib),
+ q(7090) => q(wic),
+ q(7091) => q(wie),
+ q(7092) => q(wif),
+ q(7093) => q(wig),
+ q(7094) => q(wih),
+ q(7095) => q(wii),
+ q(7096) => q(wij),
+ q(7097) => q(wik),
+ q(7098) => q(wil),
+ q(7099) => q(wim),
+ q(7100) => q(win),
+ q(7101) => q(wir),
+ q(7102) => q(wit),
+ q(7103) => q(wiu),
+ q(7104) => q(wiv),
+ q(7105) => q(wiy),
+ q(7106) => q(wja),
+ q(7107) => q(wji),
+ q(7108) => q(wka),
+ q(7109) => q(wkb),
+ q(7110) => q(wkd),
+ q(7111) => q(wkl),
+ q(7112) => q(wku),
+ q(7113) => q(wkw),
+ q(7114) => q(wla),
+ q(7115) => q(wlc),
+ q(7116) => q(wle),
+ q(7117) => q(wlg),
+ q(7118) => q(wli),
+ q(7119) => q(wlk),
+ q(7120) => q(wll),
+ q(7121) => q(wlm),
+ q(7122) => q(wlo),
+ q(7123) => q(wlr),
+ q(7124) => q(wls),
+ q(7125) => q(wlu),
+ q(7126) => q(wlv),
+ q(7127) => q(wlw),
+ q(7128) => q(wlx),
+ q(7129) => q(wly),
+ q(7130) => q(wma),
+ q(7131) => q(wmb),
+ q(7132) => q(wmc),
+ q(7133) => q(wmd),
+ q(7134) => q(wme),
+ q(7135) => q(wmh),
+ q(7136) => q(wmi),
+ q(7137) => q(wmm),
+ q(7138) => q(wmn),
+ q(7139) => q(wmo),
+ q(7140) => q(wms),
+ q(7141) => q(wmt),
+ q(7142) => q(wmw),
+ q(7143) => q(wmx),
+ q(7144) => q(wnb),
+ q(7145) => q(wnc),
+ q(7146) => q(wnd),
+ q(7147) => q(wne),
+ q(7148) => q(wng),
+ q(7149) => q(wni),
+ q(7150) => q(wnk),
+ q(7151) => q(wnm),
+ q(7152) => q(wno),
+ q(7153) => q(wnp),
+ q(7154) => q(wnu),
+ q(7155) => q(wny),
+ q(7156) => q(woa),
+ q(7157) => q(wob),
+ q(7158) => q(woc),
+ q(7159) => q(wod),
+ q(7160) => q(woe),
+ q(7161) => q(wof),
+ q(7162) => q(wog),
+ q(7163) => q(woi),
+ q(7164) => q(wok),
+ q(7165) => q(wom),
+ q(7166) => q(won),
+ q(7167) => q(woo),
+ q(7168) => q(wor),
+ q(7169) => q(wos),
+ q(7170) => q(wow),
+ q(7171) => q(woy),
+ q(7172) => q(wpc),
+ q(7173) => q(wra),
+ q(7174) => q(wrb),
+ q(7175) => q(wrd),
+ q(7176) => q(wrg),
+ q(7177) => q(wrh),
+ q(7178) => q(wri),
+ q(7179) => q(wrk),
+ q(7180) => q(wrl),
+ q(7181) => q(wrm),
+ q(7182) => q(wrn),
+ q(7183) => q(wro),
+ q(7184) => q(wrp),
+ q(7185) => q(wrr),
+ q(7186) => q(wrs),
+ q(7187) => q(wru),
+ q(7188) => q(wrv),
+ q(7189) => q(wrw),
+ q(7190) => q(wrx),
+ q(7191) => q(wry),
+ q(7192) => q(wrz),
+ q(7193) => q(wsa),
+ q(7194) => q(wsi),
+ q(7195) => q(wsk),
+ q(7196) => q(wsr),
+ q(7197) => q(wss),
+ q(7198) => q(wsu),
+ q(7199) => q(wsv),
+ q(7200) => q(wtf),
+ q(7201) => q(wti),
+ q(7202) => q(wtk),
+ q(7203) => q(wtm),
+ q(7204) => q(wtw),
+ q(7205) => q(wua),
+ q(7206) => q(wub),
+ q(7207) => q(wud),
+ q(7208) => q(wuh),
+ q(7209) => q(wul),
+ q(7210) => q(wum),
+ q(7211) => q(wun),
+ q(7212) => q(wur),
+ q(7213) => q(wut),
+ q(7214) => q(wuu),
+ q(7215) => q(wuv),
+ q(7216) => q(wux),
+ q(7217) => q(wuy),
+ q(7218) => q(wwa),
+ q(7219) => q(wwb),
+ q(7220) => q(wwo),
+ q(7221) => q(wwr),
+ q(7222) => q(www),
+ q(7223) => q(wxa),
+ q(7224) => q(wya),
+ q(7225) => q(wyb),
+ q(7226) => q(wym),
+ q(7227) => q(wyr),
+ q(7228) => q(wyy),
+ q(7229) => q(xaa),
+ q(7230) => q(xab),
+ q(7231) => q(xac),
+ q(7232) => q(xad),
+ q(7233) => q(xae),
+ q(7234) => q(xag),
+ q(7235) => q(xai),
+ q(7236) => q(xam),
+ q(7237) => q(xan),
+ q(7238) => q(xao),
+ q(7239) => q(xap),
+ q(7240) => q(xaq),
+ q(7241) => q(xar),
+ q(7242) => q(xas),
+ q(7243) => q(xat),
+ q(7244) => q(xau),
+ q(7245) => q(xav),
+ q(7246) => q(xaw),
+ q(7247) => q(xay),
+ q(7248) => q(xba),
+ q(7249) => q(xbb),
+ q(7250) => q(xbc),
+ q(7251) => q(xbi),
+ q(7252) => q(xbm),
+ q(7253) => q(xbn),
+ q(7254) => q(xbo),
+ q(7255) => q(xbr),
+ q(7256) => q(xbw),
+ q(7257) => q(xbx),
+ q(7258) => q(xcb),
+ q(7259) => q(xcc),
+ q(7260) => q(xce),
+ q(7261) => q(xcg),
+ q(7262) => q(xch),
+ q(7263) => q(xcl),
+ q(7264) => q(xcm),
+ q(7265) => q(xcn),
+ q(7266) => q(xco),
+ q(7267) => q(xcr),
+ q(7268) => q(xct),
+ q(7269) => q(xcu),
+ q(7270) => q(xcv),
+ q(7271) => q(xcw),
+ q(7272) => q(xcy),
+ q(7273) => q(xdc),
+ q(7274) => q(xdm),
+ q(7275) => q(xdy),
+ q(7276) => q(xeb),
+ q(7277) => q(xed),
+ q(7278) => q(xeg),
+ q(7279) => q(xel),
+ q(7280) => q(xem),
+ q(7281) => q(xep),
+ q(7282) => q(xer),
+ q(7283) => q(xes),
+ q(7284) => q(xet),
+ q(7285) => q(xeu),
+ q(7286) => q(xfa),
+ q(7287) => q(xga),
+ q(7288) => q(xgb),
+ q(7289) => q(xgf),
+ q(7290) => q(xgl),
+ q(7291) => q(xgr),
+ q(7292) => q(xgu),
+ q(7293) => q(xha),
+ q(7294) => q(xhc),
+ q(7295) => q(xhd),
+ q(7296) => q(xhe),
+ q(7297) => q(xhr),
+ q(7298) => q(xht),
+ q(7299) => q(xhu),
+ q(7300) => q(xhv),
+ q(7301) => q(xia),
+ q(7302) => q(xib),
+ q(7303) => q(xii),
+ q(7304) => q(xil),
+ q(7305) => q(xin),
+ q(7306) => q(xip),
+ q(7307) => q(xir),
+ q(7308) => q(xiv),
+ q(7309) => q(xiy),
+ q(7310) => q(xka),
+ q(7311) => q(xkb),
+ q(7312) => q(xkc),
+ q(7313) => q(xkd),
+ q(7314) => q(xke),
+ q(7315) => q(xkf),
+ q(7316) => q(xkg),
+ q(7317) => q(xkh),
+ q(7318) => q(xki),
+ q(7319) => q(xkj),
+ q(7320) => q(xkk),
+ q(7321) => q(xkl),
+ q(7322) => q(xkn),
+ q(7323) => q(xko),
+ q(7324) => q(xkp),
+ q(7325) => q(xkq),
+ q(7326) => q(xkr),
+ q(7327) => q(xks),
+ q(7328) => q(xkt),
+ q(7329) => q(xku),
+ q(7330) => q(xkv),
+ q(7331) => q(xkw),
+ q(7332) => q(xkx),
+ q(7333) => q(xky),
+ q(7334) => q(xkz),
+ q(7335) => q(xla),
+ q(7336) => q(xlb),
+ q(7337) => q(xlc),
+ q(7338) => q(xld),
+ q(7339) => q(xle),
+ q(7340) => q(xlg),
+ q(7341) => q(xli),
+ q(7342) => q(xln),
+ q(7343) => q(xlo),
+ q(7344) => q(xlp),
+ q(7345) => q(xls),
+ q(7346) => q(xlu),
+ q(7347) => q(xly),
+ q(7348) => q(xma),
+ q(7349) => q(xmb),
+ q(7350) => q(xmc),
+ q(7351) => q(xmd),
+ q(7352) => q(xme),
+ q(7353) => q(xmf),
+ q(7354) => q(xmg),
+ q(7355) => q(xmh),
+ q(7356) => q(xmj),
+ q(7357) => q(xmk),
+ q(7358) => q(xml),
+ q(7359) => q(xmm),
+ q(7360) => q(xmn),
+ q(7361) => q(xmo),
+ q(7362) => q(xmp),
+ q(7363) => q(xmq),
+ q(7364) => q(xmr),
+ q(7365) => q(xms),
+ q(7366) => q(xmt),
+ q(7367) => q(xmu),
+ q(7368) => q(xmv),
+ q(7369) => q(xmw),
+ q(7370) => q(xmx),
+ q(7371) => q(xmy),
+ q(7372) => q(xmz),
+ q(7373) => q(xna),
+ q(7374) => q(xnb),
+ q(7375) => q(xng),
+ q(7376) => q(xnh),
+ q(7377) => q(xnn),
+ q(7378) => q(xno),
+ q(7379) => q(xnr),
+ q(7380) => q(xns),
+ q(7381) => q(xnt),
+ q(7382) => q(xnz),
+ q(7383) => q(xoc),
+ q(7384) => q(xod),
+ q(7385) => q(xog),
+ q(7386) => q(xoi),
+ q(7387) => q(xok),
+ q(7388) => q(xom),
+ q(7389) => q(xon),
+ q(7390) => q(xoo),
+ q(7391) => q(xop),
+ q(7392) => q(xor),
+ q(7393) => q(xow),
+ q(7394) => q(xpc),
+ q(7395) => q(xpe),
+ q(7396) => q(xpg),
+ q(7397) => q(xpi),
+ q(7398) => q(xpj),
+ q(7399) => q(xpk),
+ q(7400) => q(xpm),
+ q(7401) => q(xpn),
+ q(7402) => q(xpo),
+ q(7403) => q(xpp),
+ q(7404) => q(xpq),
+ q(7405) => q(xpr),
+ q(7406) => q(xps),
+ q(7407) => q(xpu),
+ q(7408) => q(xpy),
+ q(7409) => q(xqa),
+ q(7410) => q(xqt),
+ q(7411) => q(xra),
+ q(7412) => q(xrb),
+ q(7413) => q(xre),
+ q(7414) => q(xri),
+ q(7415) => q(xrm),
+ q(7416) => q(xrn),
+ q(7417) => q(xrr),
+ q(7418) => q(xrt),
+ q(7419) => q(xru),
+ q(7420) => q(xrw),
+ q(7421) => q(xsa),
+ q(7422) => q(xsb),
+ q(7423) => q(xsc),
+ q(7424) => q(xsd),
+ q(7425) => q(xse),
+ q(7426) => q(xsh),
+ q(7427) => q(xsi),
+ q(7428) => q(xsj),
+ q(7429) => q(xsl),
+ q(7430) => q(xsm),
+ q(7431) => q(xsn),
+ q(7432) => q(xso),
+ q(7433) => q(xsp),
+ q(7434) => q(xsq),
+ q(7435) => q(xsr),
+ q(7436) => q(xss),
+ q(7437) => q(xsu),
+ q(7438) => q(xsv),
+ q(7439) => q(xsy),
+ q(7440) => q(xta),
+ q(7441) => q(xtb),
+ q(7442) => q(xtc),
+ q(7443) => q(xtd),
+ q(7444) => q(xte),
+ q(7445) => q(xtg),
+ q(7446) => q(xti),
+ q(7447) => q(xtj),
+ q(7448) => q(xtl),
+ q(7449) => q(xtm),
+ q(7450) => q(xtn),
+ q(7451) => q(xto),
+ q(7452) => q(xtp),
+ q(7453) => q(xtq),
+ q(7454) => q(xtr),
+ q(7455) => q(xts),
+ q(7456) => q(xtt),
+ q(7457) => q(xtu),
+ q(7458) => q(xtw),
+ q(7459) => q(xty),
+ q(7460) => q(xtz),
+ q(7461) => q(xua),
+ q(7462) => q(xub),
+ q(7463) => q(xud),
+ q(7464) => q(xug),
+ q(7465) => q(xuj),
+ q(7466) => q(xum),
+ q(7467) => q(xun),
+ q(7468) => q(xuo),
+ q(7469) => q(xup),
+ q(7470) => q(xur),
+ q(7471) => q(xut),
+ q(7472) => q(xuu),
+ q(7473) => q(xve),
+ q(7474) => q(xvi),
+ q(7475) => q(xvn),
+ q(7476) => q(xvo),
+ q(7477) => q(xvs),
+ q(7478) => q(xwa),
+ q(7479) => q(xwc),
+ q(7480) => q(xwe),
+ q(7481) => q(xwg),
+ q(7482) => q(xwl),
+ q(7483) => q(xwo),
+ q(7484) => q(xwr),
+ q(7485) => q(xxb),
+ q(7486) => q(xxk),
+ q(7487) => q(xxr),
+ q(7488) => q(xxt),
+ q(7489) => q(xyl),
+ q(7490) => q(xyy),
+ q(7491) => q(xzh),
+ q(7492) => q(xzm),
+ q(7493) => q(xzp),
+ q(7494) => q(yaa),
+ q(7495) => q(yab),
+ q(7496) => q(yac),
+ q(7497) => q(yad),
+ q(7498) => q(yae),
+ q(7499) => q(yaf),
+ q(7500) => q(yag),
+ q(7501) => q(yah),
+ q(7502) => q(yai),
+ q(7503) => q(yaj),
+ q(7504) => q(yak),
+ q(7505) => q(yal),
+ q(7506) => q(yam),
+ q(7507) => q(yan),
+ q(7508) => q(yaq),
+ q(7509) => q(yar),
+ q(7510) => q(yas),
+ q(7511) => q(yat),
+ q(7512) => q(yau),
+ q(7513) => q(yav),
+ q(7514) => q(yaw),
+ q(7515) => q(yax),
+ q(7516) => q(yay),
+ q(7517) => q(yaz),
+ q(7518) => q(yba),
+ q(7519) => q(ybb),
+ q(7520) => q(ybe),
+ q(7521) => q(ybh),
+ q(7522) => q(ybi),
+ q(7523) => q(ybj),
+ q(7524) => q(ybk),
+ q(7525) => q(ybl),
+ q(7526) => q(ybm),
+ q(7527) => q(ybn),
+ q(7528) => q(ybo),
+ q(7529) => q(ybx),
+ q(7530) => q(yby),
+ q(7531) => q(ych),
+ q(7532) => q(ycl),
+ q(7533) => q(ycn),
+ q(7534) => q(ycp),
+ q(7535) => q(ydd),
+ q(7536) => q(yde),
+ q(7537) => q(ydg),
+ q(7538) => q(ydk),
+ q(7539) => q(yds),
+ q(7540) => q(yea),
+ q(7541) => q(yec),
+ q(7542) => q(yee),
+ q(7543) => q(yei),
+ q(7544) => q(yej),
+ q(7545) => q(yel),
+ q(7546) => q(yer),
+ q(7547) => q(yes),
+ q(7548) => q(yet),
+ q(7549) => q(yeu),
+ q(7550) => q(yev),
+ q(7551) => q(yey),
+ q(7552) => q(yga),
+ q(7553) => q(ygl),
+ q(7554) => q(ygm),
+ q(7555) => q(ygp),
+ q(7556) => q(ygr),
+ q(7557) => q(ygw),
+ q(7558) => q(yha),
+ q(7559) => q(yhd),
+ q(7560) => q(yhl),
+ q(7561) => q(yia),
+ q(7562) => q(yig),
+ q(7563) => q(yih),
+ q(7564) => q(yii),
+ q(7565) => q(yij),
+ q(7566) => q(yik),
+ q(7567) => q(yil),
+ q(7568) => q(yim),
+ q(7569) => q(yin),
+ q(7570) => q(yip),
+ q(7571) => q(yiq),
+ q(7572) => q(yir),
+ q(7573) => q(yis),
+ q(7574) => q(yit),
+ q(7575) => q(yiu),
+ q(7576) => q(yiv),
+ q(7577) => q(yix),
+ q(7578) => q(yiy),
+ q(7579) => q(yiz),
+ q(7580) => q(yka),
+ q(7581) => q(ykg),
+ q(7582) => q(yki),
+ q(7583) => q(ykk),
+ q(7584) => q(ykl),
+ q(7585) => q(ykm),
+ q(7586) => q(ykn),
+ q(7587) => q(yko),
+ q(7588) => q(ykr),
+ q(7589) => q(ykt),
+ q(7590) => q(yku),
+ q(7591) => q(yky),
+ q(7592) => q(yla),
+ q(7593) => q(ylb),
+ q(7594) => q(yle),
+ q(7595) => q(ylg),
+ q(7596) => q(yli),
+ q(7597) => q(yll),
+ q(7598) => q(ylm),
+ q(7599) => q(yln),
+ q(7600) => q(ylo),
+ q(7601) => q(ylr),
+ q(7602) => q(ylu),
+ q(7603) => q(yly),
+ q(7604) => q(ymb),
+ q(7605) => q(ymc),
+ q(7606) => q(ymd),
+ q(7607) => q(yme),
+ q(7608) => q(ymg),
+ q(7609) => q(ymh),
+ q(7610) => q(ymi),
+ q(7611) => q(ymk),
+ q(7612) => q(yml),
+ q(7613) => q(ymm),
+ q(7614) => q(ymn),
+ q(7615) => q(ymo),
+ q(7616) => q(ymp),
+ q(7617) => q(ymq),
+ q(7618) => q(ymr),
+ q(7619) => q(yms),
+ q(7620) => q(ymt),
+ q(7621) => q(ymx),
+ q(7622) => q(ymz),
+ q(7623) => q(yna),
+ q(7624) => q(ynd),
+ q(7625) => q(yne),
+ q(7626) => q(yng),
+ q(7627) => q(ynh),
+ q(7628) => q(ynk),
+ q(7629) => q(ynl),
+ q(7630) => q(ynn),
+ q(7631) => q(yno),
+ q(7632) => q(ynq),
+ q(7633) => q(yns),
+ q(7634) => q(ynu),
+ q(7635) => q(yob),
+ q(7636) => q(yog),
+ q(7637) => q(yoi),
+ q(7638) => q(yok),
+ q(7639) => q(yol),
+ q(7640) => q(yom),
+ q(7641) => q(yon),
+ q(7642) => q(yos),
+ q(7643) => q(yot),
+ q(7644) => q(yox),
+ q(7645) => q(yoy),
+ q(7646) => q(ypa),
+ q(7647) => q(ypb),
+ q(7648) => q(ypg),
+ q(7649) => q(yph),
+ q(7650) => q(ypm),
+ q(7651) => q(ypn),
+ q(7652) => q(ypo),
+ q(7653) => q(ypp),
+ q(7654) => q(ypz),
+ q(7655) => q(yra),
+ q(7656) => q(yrb),
+ q(7657) => q(yre),
+ q(7658) => q(yri),
+ q(7659) => q(yrk),
+ q(7660) => q(yrl),
+ q(7661) => q(yrn),
+ q(7662) => q(yrs),
+ q(7663) => q(yrw),
+ q(7664) => q(ysc),
+ q(7665) => q(ysd),
+ q(7666) => q(ysg),
+ q(7667) => q(ysl),
+ q(7668) => q(ysn),
+ q(7669) => q(yso),
+ q(7670) => q(ysp),
+ q(7671) => q(ysr),
+ q(7672) => q(yss),
+ q(7673) => q(ysy),
+ q(7674) => q(yta),
+ q(7675) => q(ytl),
+ q(7676) => q(ytp),
+ q(7677) => q(ytw),
+ q(7678) => q(yua),
+ q(7679) => q(yub),
+ q(7680) => q(yuc),
+ q(7681) => q(yud),
+ q(7682) => q(yue),
+ q(7683) => q(yuf),
+ q(7684) => q(yug),
+ q(7685) => q(yui),
+ q(7686) => q(yuj),
+ q(7687) => q(yuk),
+ q(7688) => q(yul),
+ q(7689) => q(yum),
+ q(7690) => q(yun),
+ q(7691) => q(yup),
+ q(7692) => q(yuq),
+ q(7693) => q(yur),
+ q(7694) => q(yut),
+ q(7695) => q(yuu),
+ q(7696) => q(yuw),
+ q(7697) => q(yux),
+ q(7698) => q(yuy),
+ q(7699) => q(yuz),
+ q(7700) => q(yva),
+ q(7701) => q(yvt),
+ q(7702) => q(ywa),
+ q(7703) => q(ywl),
+ q(7704) => q(ywn),
+ q(7705) => q(ywq),
+ q(7706) => q(ywr),
+ q(7707) => q(ywt),
+ q(7708) => q(ywu),
+ q(7709) => q(yww),
+ q(7710) => q(yxg),
+ q(7711) => q(yxy),
+ q(7712) => q(yyu),
+ q(7713) => q(yyz),
+ q(7714) => q(yzg),
+ q(7715) => q(yzk),
+ q(7716) => q(zaa),
+ q(7717) => q(zab),
+ q(7718) => q(zac),
+ q(7719) => q(zad),
+ q(7720) => q(zae),
+ q(7721) => q(zaf),
+ q(7722) => q(zag),
+ q(7723) => q(zah),
+ q(7724) => q(zai),
+ q(7725) => q(zaj),
+ q(7726) => q(zak),
+ q(7727) => q(zal),
+ q(7728) => q(zam),
+ q(7729) => q(zao),
+ q(7730) => q(zaq),
+ q(7731) => q(zar),
+ q(7732) => q(zas),
+ q(7733) => q(zat),
+ q(7734) => q(zau),
+ q(7735) => q(zav),
+ q(7736) => q(zaw),
+ q(7737) => q(zax),
+ q(7738) => q(zay),
+ q(7739) => q(zaz),
+ q(7740) => q(zbc),
+ q(7741) => q(zbe),
+ q(7742) => q(zbt),
+ q(7743) => q(zbw),
+ q(7744) => q(zca),
+ q(7745) => q(zch),
+ q(7746) => q(zdj),
+ q(7747) => q(zea),
+ q(7748) => q(zeg),
+ q(7749) => q(zeh),
+ q(7750) => q(zga),
+ q(7751) => q(zgb),
+ q(7752) => q(zgm),
+ q(7753) => q(zgn),
+ q(7754) => q(zgr),
+ q(7755) => q(zhb),
+ q(7756) => q(zhd),
+ q(7757) => q(zhi),
+ q(7758) => q(zhn),
+ q(7759) => q(zhw),
+ q(7760) => q(zia),
+ q(7761) => q(zib),
+ q(7762) => q(zik),
+ q(7763) => q(zil),
+ q(7764) => q(zim),
+ q(7765) => q(zin),
+ q(7766) => q(zir),
+ q(7767) => q(ziw),
+ q(7768) => q(ziz),
+ q(7769) => q(zka),
+ q(7770) => q(zkb),
+ q(7771) => q(zkd),
+ q(7772) => q(zkg),
+ q(7773) => q(zkh),
+ q(7774) => q(zkk),
+ q(7775) => q(zkn),
+ q(7776) => q(zko),
+ q(7777) => q(zkp),
+ q(7778) => q(zkr),
+ q(7779) => q(zkt),
+ q(7780) => q(zku),
+ q(7781) => q(zkv),
+ q(7782) => q(zkz),
+ q(7783) => q(zlj),
+ q(7784) => q(zlm),
+ q(7785) => q(zln),
+ q(7786) => q(zlq),
+ q(7787) => q(zma),
+ q(7788) => q(zmb),
+ q(7789) => q(zmc),
+ q(7790) => q(zmd),
+ q(7791) => q(zme),
+ q(7792) => q(zmf),
+ q(7793) => q(zmg),
+ q(7794) => q(zmh),
+ q(7795) => q(zmi),
+ q(7796) => q(zmj),
+ q(7797) => q(zmk),
+ q(7798) => q(zml),
+ q(7799) => q(zmm),
+ q(7800) => q(zmn),
+ q(7801) => q(zmo),
+ q(7802) => q(zmp),
+ q(7803) => q(zmq),
+ q(7804) => q(zmr),
+ q(7805) => q(zms),
+ q(7806) => q(zmt),
+ q(7807) => q(zmu),
+ q(7808) => q(zmv),
+ q(7809) => q(zmw),
+ q(7810) => q(zmx),
+ q(7811) => q(zmy),
+ q(7812) => q(zmz),
+ q(7813) => q(zna),
+ q(7814) => q(zne),
+ q(7815) => q(zng),
+ q(7816) => q(znk),
+ q(7817) => q(zns),
+ q(7818) => q(zoc),
+ q(7819) => q(zoh),
+ q(7820) => q(zom),
+ q(7821) => q(zoo),
+ q(7822) => q(zoq),
+ q(7823) => q(zor),
+ q(7824) => q(zos),
+ q(7825) => q(zpa),
+ q(7826) => q(zpb),
+ q(7827) => q(zpc),
+ q(7828) => q(zpd),
+ q(7829) => q(zpe),
+ q(7830) => q(zpf),
+ q(7831) => q(zpg),
+ q(7832) => q(zph),
+ q(7833) => q(zpi),
+ q(7834) => q(zpj),
+ q(7835) => q(zpk),
+ q(7836) => q(zpl),
+ q(7837) => q(zpm),
+ q(7838) => q(zpn),
+ q(7839) => q(zpo),
+ q(7840) => q(zpp),
+ q(7841) => q(zpq),
+ q(7842) => q(zpr),
+ q(7843) => q(zps),
+ q(7844) => q(zpt),
+ q(7845) => q(zpu),
+ q(7846) => q(zpv),
+ q(7847) => q(zpw),
+ q(7848) => q(zpx),
+ q(7849) => q(zpy),
+ q(7850) => q(zpz),
+ q(7851) => q(zqe),
+ q(7852) => q(zra),
+ q(7853) => q(zrg),
+ q(7854) => q(zrn),
+ q(7855) => q(zro),
+ q(7856) => q(zrp),
+ q(7857) => q(zrs),
+ q(7858) => q(zsa),
+ q(7859) => q(zsk),
+ q(7860) => q(zsl),
+ q(7861) => q(zsm),
+ q(7862) => q(zsr),
+ q(7863) => q(zsu),
+ q(7864) => q(zte),
+ q(7865) => q(ztg),
+ q(7866) => q(ztl),
+ q(7867) => q(ztm),
+ q(7868) => q(ztn),
+ q(7869) => q(ztp),
+ q(7870) => q(ztq),
+ q(7871) => q(zts),
+ q(7872) => q(ztt),
+ q(7873) => q(ztu),
+ q(7874) => q(ztx),
+ q(7875) => q(zty),
+ q(7876) => q(zua),
+ q(7877) => q(zuh),
+ q(7878) => q(zum),
+ q(7879) => q(zuy),
+ q(7880) => q(zwa),
+ q(7881) => q(zyb),
+ q(7882) => q(zyg),
+ q(7883) => q(zyj),
+ q(7884) => q(zyn),
+ q(7885) => q(zyp),
+ q(7886) => q(zzj),
+ },
+ q(term) => {
+ q(0013) => q(sqi),
+ q(0024) => q(hye),
+ q(0044) => q(eus),
+ q(0066) => q(mya),
+ q(0079) => q(zho),
+ q(0101) => q(ces),
+ q(0116) => q(nld),
+ q(0137) => q(fra),
+ q(0149) => q(kat),
+ q(0150) => q(deu),
+ q(0164) => q(ell),
+ q(0187) => q(isl),
+ q(0262) => q(mkd),
+ q(0270) => q(mri),
+ q(0274) => q(msa),
+ q(0342) => q(fas),
+ q(0360) => q(ron),
+ q(0385) => q(slk),
+ q(0427) => q(bod),
+ q(0466) => q(cym),
+ },
+};
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language_Retired.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language_Retired.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Language_Retired.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,269 @@
+package Locale::Codes::Language_Retired;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'deprecate_codes' is run.
+# Generated on: Wed Feb 27 10:06:46 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::Language_Retired - retired language codes for the Locale::Codes::Language module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::Language module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Retired{'language'}{'alpha-2'}{'code'} = {
+ q(in) => q(Indonesian),
+ q(iw) => q(Hebrew),
+ q(ji) => q(Yiddish),
+ q(jw) => q(Javanese),
+ q(mo) => q(Moldavian),
+};
+
+$Locale::Codes::Retired{'language'}{'alpha-3'}{'code'} = {
+ q(ayx) => q(Ayi (China)),
+ q(baz) => q(Tunen),
+ q(bjd) => q(Bandjigali),
+ q(bjq) => q(Southern Betsimisaraka Malagasy),
+ q(ccq) => q(Chaungtha),
+ q(cka) => q(Khumi Awa Chin),
+ q(dap) => q(Nisi (India)),
+ q(dha) => q(Dhanwar (India)),
+ q(dkl) => q(Kolum So Dogon),
+ q(dwl) => q(Walo Kumbe Dogon),
+ q(elp) => q(Elpaputih),
+ q(gbc) => q(Garawa),
+ q(gio) => q(Gelao),
+ q(hrr) => q(Horuru),
+ q(ibi) => q(Ibilo),
+ q(jar) => q(Jarawa (Nigeria)),
+ q(kdv) => q(Kado),
+ q(kgh) => q(Upper Tanudan Kalinga),
+ q(kpp) => q(Paku Karen),
+ q(kzh) => q(Kenuzi-Dongola),
+ q(lcq) => q(Luhu),
+ q(mgx) => q(Omati),
+ q(mja) => q(Mahei),
+ q(nbf) => q(Naxi),
+ q(nln) => q(Durango Nahuatl),
+ q(noo) => q(Nootka),
+ q(pbz) => q(Palu),
+ q(pgy) => q(Pongyong),
+ q(sca) => q(Sansu),
+ q(tie) => q(Tingal),
+ q(tkk) => q(Takpa),
+ q(tlw) => q(South Wemale),
+ q(unp) => q(Worora),
+ q(wiw) => q(Wirangu),
+ q(ybd) => q(Yangbye),
+ q(yen) => q(Yendang),
+ q(yma) => q(Yamphe),
+};
+
+$Locale::Codes::Retired{'language'}{'term'}{'code'} = {
+};
+
+$Locale::Codes::Retired{'language'}{'alpha-2'}{'name'} = {
+ q((afan) oromo) => [ q(om), q((Afan) Oromo) ],
+ q(bengali; bangla) => [ q(bn), q(Bengali; Bangla) ],
+ q(bhutani) => [ q(dz), q(Bhutani) ],
+ q(bihari) => [ q(bh), q(Bihari) ],
+ q(byelorussian) => [ q(be), q(Byelorussian) ],
+ q(cambodian) => [ q(km), q(Cambodian) ],
+ q(chichewa; nyanja) => [ q(ny), q(Chichewa; Nyanja) ],
+ q(faeroese) => [ q(fo), q(Faeroese) ],
+ q(fiji) => [ q(fj), q(Fiji) ],
+ q(frisian) => [ q(fy), q(Frisian) ],
+ q(gaelic (scots)) => [ q(gd), q(Gaelic (Scots)) ],
+ q(gallegan) => [ q(gl), q(Gallegan) ],
+ q(greek) => [ q(el), q(Greek) ],
+ q(greek, modern (1453-)) => [ q(el), q(Greek, Modern (1453-)) ],
+ q(greenlandic) => [ q(kl), q(Greenlandic) ],
+ q(interlingua) => [ q(ia), q(Interlingua) ],
+ q(inupiak) => [ q(ik), q(Inupiak) ],
+ q(khmer) => [ q(km), q(Khmer) ],
+ q(kirundi) => [ q(rn), q(Kirundi) ],
+ q(laothian) => [ q(lo), q(Laothian) ],
+ q(latvian, lettish) => [ q(lv), q(Latvian, Lettish) ],
+ q(letzeburgesch) => [ q(lb), q(Letzeburgesch) ],
+ q(malay) => [ q(ms), q(Malay) ],
+ q(marshall) => [ q(mh), q(Marshall) ],
+ q(moldavian) => [ q(mo), q(Moldavian) ],
+ q(nepali) => [ q(ne), q(Nepali) ],
+ q(norwegian bokmal) => [ q(nb), q(Norwegian Bokmal) ],
+ q(occitan) => [ q(oc), q(Occitan) ],
+ q(oriya) => [ q(or), q(Oriya) ],
+ q(ossetian; ossetic) => [ q(os), q(Ossetian; Ossetic) ],
+ q(pashto, pushto) => [ q(ps), q(Pashto, Pushto) ],
+ q(punjabi) => [ q(pa), q(Punjabi) ],
+ q(rhaeto-romance) => [ q(rm), q(Rhaeto-Romance) ],
+ q(sami) => [ q(se), q(Sami) ],
+ q(sangro) => [ q(sg), q(Sangro) ],
+ q(scots gaelic) => [ q(gd), q(Scots Gaelic) ],
+ q(sesotho) => [ q(st), q(Sesotho) ],
+ q(setswana) => [ q(tn), q(Setswana) ],
+ q(singhalese) => [ q(si), q(Singhalese) ],
+ q(sinhalese) => [ q(si), q(Sinhalese) ],
+ q(siswati) => [ q(ss), q(Siswati) ],
+ q(sotho) => [ q(st), q(Sotho) ],
+ q(sotho, southern) => [ q(st), q(Sotho, Southern) ],
+ q(swahili) => [ q(sw), q(Swahili) ],
+ q(tegulu) => [ q(te), q(Tegulu) ],
+ q(tonga) => [ q(to), q(Tonga) ],
+ q(volapuk) => [ q(vo), q(Volapuk) ],
+};
+
+$Locale::Codes::Retired{'language'}{'alpha-3'}{'name'} = {
+ q(ainu) => [ q(ain), q(Ainu) ],
+ q(amarag) => [ q(amg), q(Amarag) ],
+ q(anu) => [ q(anl), q(Anu) ],
+ q(apalik) => [ q(apo), q(Apalik) ],
+ q(ayi (china)) => [ q(ayx), q(Ayi (China)) ],
+ q(bandjigali) => [ q(bjd), q(Bandjigali) ],
+ q(bantu (other)) => [ q(bnt), q(Bantu (Other)) ],
+ q(basa) => [ q(bas), q(Basa) ],
+ q(begbere-ejar) => [ q(bqv), q(Begbere-Ejar) ],
+ q(bekwil) => [ q(bkw), q(Bekwil) ],
+ q(bemba) => [ q(bem), q(Bemba) ],
+ q(brek karen) => [ q(kvl), q(Brek Karen) ],
+ q(burum-mindik) => [ q(bmu), q(Burum-Mindik) ],
+ q(central bicolano) => [ q(bcl), q(Central Bicolano) ],
+ q(chaungtha) => [ q(ccq), q(Chaungtha) ],
+ q(creoles and pidgins ) => [ q(crp), q(Creoles and pidgins ) ],
+ q(creoles and pidgins, english based) => [ q(cpe), q(Creoles and pidgins, English based) ],
+ q(creoles and pidgins, french-based ) => [ q(cpf), q(Creoles and pidgins, French-based ) ],
+ q(creoles and pidgins, portuguese-based ) => [ q(cpp), q(Creoles and pidgins, Portuguese-based ) ],
+ q(darling) => [ q(drl), q(Darling) ],
+ q(dhanwar (india)) => [ q(dha), q(Dhanwar (India)) ],
+ q(dogri) => [ q(doi), q(Dogri) ],
+ q(duduela) => [ q(duk), q(Duduela) ],
+ q(dumpu) => [ q(wtf), q(Dumpu) ],
+ q(durango nahuatl) => [ q(nln), q(Durango Nahuatl) ],
+ q(dutch, middle (ca.1050-1350)) => [ q(dum), q(Dutch, Middle (ca.1050-1350)) ],
+ q(elpaputih) => [ q(elp), q(Elpaputih) ],
+ q(english, middle (1100-1500)) => [ q(enm), q(English, Middle (1100-1500)) ],
+ q(english, old (ca.450-1100)) => [ q(ang), q(English, Old (ca.450-1100)) ],
+ q(fang) => [ q(fan), q(Fang) ],
+ q(french, middle (ca.1400-1600)) => [ q(frm), q(French, Middle (ca.1400-1600)) ],
+ q(french, old (842-ca.1400)) => [ q(fro), q(French, Old (842-ca.1400)) ],
+ q(garawa) => [ q(gbc), q(Garawa) ],
+ q(gbaya) => [ q(gba), q(Gbaya) ],
+ q(gelao) => [ q(gio), q(Gelao) ],
+ q(german, middle high (ca.1050-1500)) => [ q(gmh), q(German, Middle High (ca.1050-1500)) ],
+ q(german, old high (ca.750-1050)) => [ q(goh), q(German, Old High (ca.750-1050)) ],
+ q(greek, ancient (to 1453)) => [ q(grc), q(Greek, Ancient (to 1453)) ],
+ q(hainyaxo bozo) => [ q(bzx), q(Hainyaxo Bozo) ],
+ q(horuru) => [ q(hrr), q(Horuru) ],
+ q(ibilo) => [ q(ibi), q(Ibilo) ],
+ q(idun) => [ q(ldb), q(Idun) ],
+ q(ikobi-mena) => [ q(meb), q(Ikobi-Mena) ],
+ q(irish, middle (900-1200)) => [ q(mga), q(Irish, Middle (900-1200)) ],
+ q(irish, old (to 900)) => [ q(sga), q(Irish, Old (to 900)) ],
+ q(jarawa (nigeria)) => [ q(jar), q(Jarawa (Nigeria)) ],
+ q(kadara) => [ q(kad), q(Kadara) ],
+ q(kado) => [ q(kdv), q(Kado) ],
+ q(kag-fer-jiir-koor-ror-us-zuksun) => [ q(gel), q(Kag-Fer-Jiir-Koor-Ror-Us-Zuksun) ],
+ q(kamba) => [ q(kam), q(Kamba) ],
+ q(kemezung) => [ q(dmo), q(Kemezung) ],
+ q(kenuzi-dongola) => [ q(kzh), q(Kenuzi-Dongola) ],
+ q(khumi awa chin) => [ q(cka), q(Khumi Awa Chin) ],
+ q(kol) => [ q(ekl), q(Kol) ],
+ q(kolum so dogon) => [ q(dkl), q(Kolum So Dogon) ],
+ q(konkani) => [ q(kok), q(Konkani) ],
+ q(kumak) => [ q(nee), q(Kumak) ],
+ q(kutang ghale) => [ q(ght), q(Kutang Ghale) ],
+ q(kwato) => [ q(kop), q(Kwato) ],
+ q(lowa) => [ q(loy), q(Lowa) ],
+ q(lower tanudan kalinga) => [ q(kml), q(Lower Tanudan Kalinga) ],
+ q(luhu) => [ q(lcq), q(Luhu) ],
+ q(mahei) => [ q(mja), q(Mahei) ],
+ q(malasanga) => [ q(mqz), q(Malasanga) ],
+ q(mari) => [ q(chm), q(Mari) ],
+ q(mbedam) => [ q(xmd), q(Mbedam) ],
+ q(mende) => [ q(men), q(Mende) ],
+ q(mire) => [ q(mvh), q(Mire) ],
+ q(miri) => [ q(mrg), q(Miri) ],
+ q(misima-paneati) => [ q(mpx), q(Misima-Paneati) ],
+ q(mpongmpong) => [ q(mgg), q(Mpongmpong) ],
+ q(mro chin) => [ q(cmr), q(Mro Chin) ],
+ q(muduapa) => [ q(wiv), q(Muduapa) ],
+ q(nakama) => [ q(nib), q(Nakama) ],
+ q(nanggu) => [ q(ngr), q(Nanggu) ],
+ q(nangikurrunggurr) => [ q(nam), q(Nangikurrunggurr) ],
+ q(nga la) => [ q(hlt), q(Nga La) ],
+ q(nisi (india)) => [ q(dap), q(Nisi (India)) ],
+ q(nootka) => [ q(noo), q(Nootka) ],
+ q(norse, old) => [ q(non), q(Norse, Old) ],
+ q(north wemale) => [ q(weo), q(North Wemale) ],
+ q(northern catanduanes bicolano) => [ q(cts), q(Northern Catanduanes Bicolano) ],
+ q(northern lorung) => [ q(lbr), q(Northern Lorung) ],
+ q(nung (myanmar)) => [ q(nun), q(Nung (Myanmar)) ],
+ q(omati) => [ q(mgx), q(Omati) ],
+ q(ounge) => [ q(oue), q(Ounge) ],
+ q(palu) => [ q(pbz), q(Palu) ],
+ q(persian, old (ca.600-400 b.c.)) => [ q(peo), q(Persian, Old (ca.600-400 B.C.)) ],
+ q(pongyong) => [ q(pgy), q(Pongyong) ],
+ q(provencal, old (to 1500)) => [ q(pro), q(Provencal, Old (to 1500)) ],
+ q(sakam) => [ q(skm), q(Sakam) ],
+ q(sansu) => [ q(sca), q(Sansu) ],
+ q(sauk) => [ q(skc), q(Sauk) ],
+ q(sepen) => [ q(spm), q(Sepen) ],
+ q(shangzhai) => [ q(jih), q(Shangzhai) ],
+ q(so (cameroon)) => [ q(sox), q(So (Cameroon)) ],
+ q(south american indian (other)) => [ q(sai), q(South American Indian (Other)) ],
+ q(south wemale) => [ q(tlw), q(South Wemale) ],
+ q(southern catanduanes bicolano) => [ q(bln), q(Southern Catanduanes Bicolano) ],
+ q(southern lorung) => [ q(lrr), q(Southern Lorung) ],
+ q(sulung) => [ q(suv), q(Sulung) ],
+ q(takpa) => [ q(tkk), q(Takpa) ],
+ q(tangkhul naga) => [ q(nmf), q(Tangkhul Naga) ],
+ q(tina sambal) => [ q(xsb), q(Tina Sambal) ],
+ q(tingal) => [ q(tie), q(Tingal) ],
+ q(turkish, ottoman (1500-1928)) => [ q(ota), q(Turkish, Ottoman (1500-1928)) ],
+ q(upper tanudan kalinga) => [ q(kgh), q(Upper Tanudan Kalinga) ],
+ q(walamo) => [ q(wal), q(Walamo) ],
+ q(walo kumbe dogon) => [ q(dwl), q(Walo Kumbe Dogon) ],
+ q(waray) => [ q(war), q(Waray) ],
+ q(welaung) => [ q(weu), q(Welaung) ],
+ q(were) => [ q(wei), q(Were) ],
+ q(western canadian inuktitut) => [ q(ikt), q(Western Canadian Inuktitut) ],
+ q(worora) => [ q(unp), q(Worora) ],
+ q(yamphe) => [ q(yma), q(Yamphe) ],
+ q(yangbye) => [ q(ybd), q(Yangbye) ],
+ q(yeskwa) => [ q(yes), q(Yeskwa) ],
+ q(yonggom) => [ q(yon), q(Yonggom) ],
+};
+
+$Locale::Codes::Retired{'language'}{'term'}{'name'} = {
+};
+
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script.pod
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script.pod (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,131 @@
+=pod
+
+=head1 NAME
+
+Locale::Codes::Script - standard codes for script identification
+
+=head1 SYNOPSIS
+
+ use Locale::Codes::Script;
+
+ $script = code2script('phnx'); # 'Phoenician'
+ $code = script2code('Phoenician'); # 'Phnx'
+ $code = script2code('Phoenician',
+ LOCALE_CODE_NUMERIC); # 115
+
+ @codes = all_script_codes();
+ @scripts = all_script_names();
+
+=head1 DESCRIPTION
+
+The C<Locale::Codes::Script> module provides access to standards codes used
+for identifying scripts, such as those defined in ISO 15924.
+
+Most of the routines take an optional additional argument which
+specifies the code set to use. If not specified, the default ISO
+15924 four-letter codes will be used.
+
+=head1 SUPPORTED CODE SETS
+
+There are several different code sets you can use for identifying
+scripts. A code set may be specified using either a name, or a
+constant that is automatically exported by this module.
+
+For example, the two are equivalent:
+
+ $script = code2script('phnx','alpha');
+ $script = code2script('phnx',LOCALE_SCRIPT_ALPHA);
+
+The codesets currently supported are:
+
+=over 4
+
+=item B<alpha, LOCALE_SCRIPT_ALPHA>
+
+This is a set of four-letter (capitalized) codes from ISO 15924
+such as 'Phnx' for Phoenician. It also includes additions to this
+set included in the IANA language registry.
+
+The Zxxx, Zyyy, and Zzzz codes are not used.
+
+This is the default code set.
+
+=item B<num, LOCALE_SCRIPT_NUMERIC>
+
+This is a set of three-digit numeric codes from ISO 15924 such as 115
+for Phoenician.
+
+=back
+
+=head1 ROUTINES
+
+=over 4
+
+=item B<code2script ( CODE [,CODESET] )>
+
+=item B<script2code ( NAME [,CODESET] )>
+
+=item B<script_code2code ( CODE ,CODESET ,CODESET2 )>
+
+=item B<all_script_codes ( [CODESET] )>
+
+=item B<all_script_names ( [CODESET] )>
+
+=item B<Locale::Codes::Script::rename_script ( CODE ,NEW_NAME [,CODESET] )>
+
+=item B<Locale::Codes::Script::add_script ( CODE ,NAME [,CODESET] )>
+
+=item B<Locale::Codes::Script::delete_script ( CODE [,CODESET] )>
+
+=item B<Locale::Codes::Script::add_script_alias ( NAME ,NEW_NAME )>
+
+=item B<Locale::Codes::Script::delete_script_alias ( NAME )>
+
+=item B<Locale::Codes::Script::rename_script_code ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::Script::add_script_code_alias ( CODE ,NEW_CODE [,CODESET] )>
+
+=item B<Locale::Codes::Script::delete_script_code_alias ( CODE [,CODESET] )>
+
+These routines are all documented in the Locale::Codes::API man page.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item B<Locale::Codes>
+
+The Locale-Codes distribution.
+
+=item B<Locale::Codes::API>
+
+The list of functions supported by this module.
+
+=item B<http://www.unicode.org/iso15924/>
+
+Home page for ISO 15924.
+
+=item B<http://www.iana.org/assignments/language-subtag-registry>
+
+The IANA language subtag registry.
+
+=back
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script_Codes.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script_Codes.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script_Codes.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3150 @@
+package Locale::Codes::Script_Codes;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'get_codes' is run.
+# Generated on: Wed Feb 27 10:04:29 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::Script_Codes - script codes for the Locale::Codes::Script module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::Script module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Data{'script'}{'id'} = '0161';
+
+$Locale::Codes::Data{'script'}{'id2names'} = {
+ q(0001) => [
+ q(Afaka),
+ ],
+ q(0002) => [
+ q(Caucasian Albanian),
+ ],
+ q(0003) => [
+ q(Arabic),
+ ],
+ q(0004) => [
+ q(Imperial Aramaic),
+ ],
+ q(0005) => [
+ q(Armenian),
+ ],
+ q(0006) => [
+ q(Avestan),
+ ],
+ q(0007) => [
+ q(Balinese),
+ ],
+ q(0008) => [
+ q(Bamum),
+ ],
+ q(0009) => [
+ q(Bassa Vah),
+ ],
+ q(0010) => [
+ q(Batak),
+ ],
+ q(0011) => [
+ q(Bengali),
+ ],
+ q(0012) => [
+ q(Blissymbols),
+ ],
+ q(0013) => [
+ q(Bopomofo),
+ ],
+ q(0014) => [
+ q(Brahmi),
+ ],
+ q(0015) => [
+ q(Braille),
+ ],
+ q(0016) => [
+ q(Buginese),
+ ],
+ q(0017) => [
+ q(Buhid),
+ ],
+ q(0018) => [
+ q(Chakma),
+ ],
+ q(0019) => [
+ q(Unified Canadian Aboriginal Syllabics),
+ ],
+ q(0020) => [
+ q(Carian),
+ ],
+ q(0021) => [
+ q(Cham),
+ ],
+ q(0022) => [
+ q(Cherokee),
+ ],
+ q(0023) => [
+ q(Cirth),
+ ],
+ q(0024) => [
+ q(Coptic),
+ ],
+ q(0025) => [
+ q(Cypriot),
+ ],
+ q(0026) => [
+ q(Cyrillic),
+ ],
+ q(0027) => [
+ q(Cyrillic (Old Church Slavonic variant)),
+ ],
+ q(0028) => [
+ q(Devanagari (Nagari)),
+ q(Devanagari),
+ q(Nagari),
+ ],
+ q(0029) => [
+ q(Deseret (Mormon)),
+ q(Deseret),
+ q(Mormon),
+ ],
+ q(0030) => [
+ q(Duployan shorthand, Duployan stenography),
+ q(Duployan shorthand),
+ q(Duployan stenography),
+ ],
+ q(0031) => [
+ q(Egyptian demotic),
+ ],
+ q(0032) => [
+ q(Egyptian hieratic),
+ ],
+ q(0033) => [
+ q(Egyptian hieroglyphs),
+ ],
+ q(0034) => [
+ q(Elbasan),
+ ],
+ q(0035) => [
+ q(Ethiopic (Geez)),
+ q(Ethiopic),
+ q(Ge'ez),
+ ],
+ q(0036) => [
+ q(Georgian (Mkhedruli)),
+ ],
+ q(0037) => [
+ q(Khutsuri (Asomtavruli and Nuskhuri)),
+ ],
+ q(0038) => [
+ q(Glagolitic),
+ ],
+ q(0039) => [
+ q(Gothic),
+ ],
+ q(0040) => [
+ q(Grantha),
+ ],
+ q(0041) => [
+ q(Greek),
+ ],
+ q(0042) => [
+ q(Gujarati),
+ ],
+ q(0043) => [
+ q(Gurmukhi),
+ ],
+ q(0044) => [
+ q(Hangul (Hangul, Hangeul)),
+ q(Hangul),
+ q(Hangeul),
+ ],
+ q(0045) => [
+ q(Han (Hanzi, Kanji, Hanja)),
+ q(Han),
+ q(Hanzi),
+ q(Kanji),
+ q(Hanja),
+ ],
+ q(0046) => [
+ q(Hanunoo (Hanunoo)),
+ q(Hanunoo),
+ ],
+ q(0047) => [
+ q(Han (Simplified variant)),
+ ],
+ q(0048) => [
+ q(Han (Traditional variant)),
+ ],
+ q(0049) => [
+ q(Hebrew),
+ ],
+ q(0050) => [
+ q(Hiragana),
+ ],
+ q(0051) => [
+ q(Anatolian Hieroglyphs (Luwian Hieroglyphs, Hittite Hieroglyphs)),
+ q(Anatolian Hieroglyphs),
+ q(Luwian Hieroglyphs),
+ q(Hittite Hieroglyphs),
+ ],
+ q(0052) => [
+ q(Pahawh Hmong),
+ ],
+ q(0053) => [
+ q(Japanese syllabaries (alias for Hiragana + Katakana)),
+ ],
+ q(0054) => [
+ q(Old Hungarian (Hungarian Runic)),
+ q(Old Hungarian),
+ q(Hungarian Runic),
+ ],
+ q(0055) => [
+ q(Indus (Harappan)),
+ q(Indus),
+ q(Harappan),
+ ],
+ q(0056) => [
+ q(Old Italic (Etruscan, Oscan, etc.)),
+ ],
+ q(0057) => [
+ q(Javanese),
+ ],
+ q(0058) => [
+ q(Japanese (alias for Han + Hiragana + Katakana)),
+ ],
+ q(0059) => [
+ q(Jurchen),
+ ],
+ q(0060) => [
+ q(Kayah Li),
+ ],
+ q(0061) => [
+ q(Katakana),
+ ],
+ q(0062) => [
+ q(Kharoshthi),
+ ],
+ q(0063) => [
+ q(Khmer),
+ ],
+ q(0064) => [
+ q(Khojki),
+ ],
+ q(0065) => [
+ q(Kannada),
+ ],
+ q(0066) => [
+ q(Korean (alias for Hangul + Han)),
+ ],
+ q(0067) => [
+ q(Kpelle),
+ ],
+ q(0068) => [
+ q(Kaithi),
+ ],
+ q(0069) => [
+ q(Tai Tham (Lanna)),
+ q(Tai Tham),
+ q(Lanna),
+ ],
+ q(0070) => [
+ q(Lao),
+ ],
+ q(0071) => [
+ q(Latin (Fraktur variant)),
+ ],
+ q(0072) => [
+ q(Latin (Gaelic variant)),
+ ],
+ q(0073) => [
+ q(Latin),
+ ],
+ q(0074) => [
+ q(Lepcha (Rong)),
+ q(Lepcha),
+ q(Rong),
+ ],
+ q(0075) => [
+ q(Limbu),
+ ],
+ q(0076) => [
+ q(Linear A),
+ ],
+ q(0077) => [
+ q(Linear B),
+ ],
+ q(0078) => [
+ q(Lisu (Fraser)),
+ q(Lisu),
+ q(Fraser),
+ ],
+ q(0079) => [
+ q(Loma),
+ ],
+ q(0080) => [
+ q(Lycian),
+ ],
+ q(0081) => [
+ q(Lydian),
+ ],
+ q(0082) => [
+ q(Mahajani),
+ ],
+ q(0083) => [
+ q(Mandaic, Mandaean),
+ q(Mandaic),
+ q(Mandaean),
+ ],
+ q(0084) => [
+ q(Manichaean),
+ ],
+ q(0085) => [
+ q(Mayan hieroglyphs),
+ ],
+ q(0086) => [
+ q(Mende),
+ ],
+ q(0087) => [
+ q(Meroitic Cursive),
+ ],
+ q(0088) => [
+ q(Meroitic Hieroglyphs),
+ ],
+ q(0089) => [
+ q(Malayalam),
+ ],
+ q(0090) => [
+ q(Moon (Moon code, Moon script, Moon type)),
+ q(Moon),
+ q(Moon code),
+ q(Moon script),
+ q(Moon type),
+ ],
+ q(0091) => [
+ q(Mongolian),
+ ],
+ q(0092) => [
+ q(Mro, Mru),
+ q(Mro),
+ q(Mru),
+ ],
+ q(0093) => [
+ q(Meitei Mayek (Meithei, Meetei)),
+ q(Meitei Mayek),
+ q(Meithei),
+ q(Meetei),
+ ],
+ q(0094) => [
+ q(Myanmar (Burmese)),
+ q(Myanmar),
+ q(Burmese),
+ ],
+ q(0095) => [
+ q(Old North Arabian (Ancient North Arabian)),
+ q(Old North Arabian),
+ q(Ancient North Arabian),
+ ],
+ q(0096) => [
+ q(Nabataean),
+ ],
+ q(0097) => [
+ q(Nakhi Geba ('Na-'Khi Ggo-baw, Naxi Geba)),
+ q(Nakhi Geba),
+ q('Na-'Khi Ggo-baw),
+ q(Naxi Geba),
+ ],
+ q(0098) => [
+ q(N'Ko),
+ ],
+ q(0099) => [
+ q(Nushu),
+ ],
+ q(0100) => [
+ q(Ogham),
+ ],
+ q(0101) => [
+ q(Ol Chiki (Ol Cemet, Ol, Santali)),
+ q(Ol Chiki),
+ q(Ol Cemet'),
+ q(Ol),
+ q(Santali),
+ ],
+ q(0102) => [
+ q(Old Turkic, Orkhon Runic),
+ q(Old Turkic),
+ q(Orkhon Runic),
+ ],
+ q(0103) => [
+ q(Oriya),
+ ],
+ q(0104) => [
+ q(Osmanya),
+ ],
+ q(0105) => [
+ q(Palmyrene),
+ ],
+ q(0106) => [
+ q(Old Permic),
+ ],
+ q(0107) => [
+ q(Phags-pa),
+ ],
+ q(0108) => [
+ q(Inscriptional Pahlavi),
+ ],
+ q(0109) => [
+ q(Psalter Pahlavi),
+ ],
+ q(0110) => [
+ q(Book Pahlavi),
+ ],
+ q(0111) => [
+ q(Phoenician),
+ ],
+ q(0112) => [
+ q(Miao (Pollard)),
+ q(Miao),
+ q(Pollard),
+ ],
+ q(0113) => [
+ q(Inscriptional Parthian),
+ ],
+ q(0114) => [
+ q(Reserved for private use (start)),
+ ],
+ q(0115) => [
+ q(Reserved for private use (end)),
+ ],
+ q(0116) => [
+ q(Rejang (Redjang, Kaganga)),
+ q(Rejang),
+ q(Redjang),
+ q(Kaganga),
+ ],
+ q(0117) => [
+ q(Rongorongo),
+ ],
+ q(0118) => [
+ q(Runic),
+ ],
+ q(0119) => [
+ q(Samaritan),
+ ],
+ q(0120) => [
+ q(Sarati),
+ ],
+ q(0121) => [
+ q(Old South Arabian),
+ ],
+ q(0122) => [
+ q(Saurashtra),
+ ],
+ q(0123) => [
+ q(SignWriting),
+ ],
+ q(0124) => [
+ q(Shavian (Shaw)),
+ q(Shavian),
+ q(Shaw),
+ ],
+ q(0125) => [
+ q(Sharada, Sarada),
+ q(Sharada),
+ q(Sarada),
+ ],
+ q(0126) => [
+ q(Khudawadi, Sindhi),
+ q(Khudawadi),
+ q(Sindhi),
+ ],
+ q(0127) => [
+ q(Sinhala),
+ ],
+ q(0128) => [
+ q(Sora Sompeng),
+ ],
+ q(0129) => [
+ q(Sundanese),
+ ],
+ q(0130) => [
+ q(Syloti Nagri),
+ ],
+ q(0131) => [
+ q(Syriac),
+ ],
+ q(0132) => [
+ q(Syriac (Estrangelo variant)),
+ ],
+ q(0133) => [
+ q(Syriac (Western variant)),
+ ],
+ q(0134) => [
+ q(Syriac (Eastern variant)),
+ ],
+ q(0135) => [
+ q(Tagbanwa),
+ ],
+ q(0136) => [
+ q(Takri, Takri, Tankri),
+ q(Takri),
+ q(Tankri),
+ ],
+ q(0137) => [
+ q(Tai Le),
+ ],
+ q(0138) => [
+ q(New Tai Lue),
+ ],
+ q(0139) => [
+ q(Tamil),
+ ],
+ q(0140) => [
+ q(Tangut),
+ ],
+ q(0141) => [
+ q(Tai Viet),
+ ],
+ q(0142) => [
+ q(Telugu),
+ ],
+ q(0143) => [
+ q(Tengwar),
+ ],
+ q(0144) => [
+ q(Tifinagh (Berber)),
+ q(Tifinagh),
+ q(Berber),
+ ],
+ q(0145) => [
+ q(Tagalog (Baybayin, Alibata)),
+ q(Tagalog),
+ q(Baybayin),
+ q(Alibata),
+ ],
+ q(0146) => [
+ q(Thaana),
+ ],
+ q(0147) => [
+ q(Thai),
+ ],
+ q(0148) => [
+ q(Tibetan),
+ ],
+ q(0149) => [
+ q(Tirhuta),
+ ],
+ q(0150) => [
+ q(Ugaritic),
+ ],
+ q(0151) => [
+ q(Vai),
+ ],
+ q(0152) => [
+ q(Visible Speech),
+ ],
+ q(0153) => [
+ q(Warang Citi (Varang Kshiti)),
+ q(Warang Citi),
+ q(Varang Kshiti),
+ ],
+ q(0154) => [
+ q(Woleai),
+ ],
+ q(0155) => [
+ q(Old Persian),
+ ],
+ q(0156) => [
+ q(Cuneiform, Sumero-Akkadian),
+ q(Sumero-Akkadian cuneiform),
+ ],
+ q(0157) => [
+ q(Yi),
+ ],
+ q(0158) => [
+ q(Code for inherited script),
+ ],
+ q(0159) => [
+ q(Mathematical notation),
+ ],
+ q(0160) => [
+ q(Symbols),
+ ],
+};
+
+$Locale::Codes::Data{'script'}{'alias2id'} = {
+ q('na-'khi ggo-baw) => [
+ q(0097),
+ q(2),
+ ],
+ q(afaka) => [
+ q(0001),
+ q(0),
+ ],
+ q(alibata) => [
+ q(0145),
+ q(3),
+ ],
+ q(anatolian hieroglyphs) => [
+ q(0051),
+ q(1),
+ ],
+ q(anatolian hieroglyphs (luwian hieroglyphs, hittite hieroglyphs)) => [
+ q(0051),
+ q(0),
+ ],
+ q(ancient north arabian) => [
+ q(0095),
+ q(2),
+ ],
+ q(arabic) => [
+ q(0003),
+ q(0),
+ ],
+ q(armenian) => [
+ q(0005),
+ q(0),
+ ],
+ q(avestan) => [
+ q(0006),
+ q(0),
+ ],
+ q(balinese) => [
+ q(0007),
+ q(0),
+ ],
+ q(bamum) => [
+ q(0008),
+ q(0),
+ ],
+ q(bassa vah) => [
+ q(0009),
+ q(0),
+ ],
+ q(batak) => [
+ q(0010),
+ q(0),
+ ],
+ q(baybayin) => [
+ q(0145),
+ q(2),
+ ],
+ q(bengali) => [
+ q(0011),
+ q(0),
+ ],
+ q(berber) => [
+ q(0144),
+ q(2),
+ ],
+ q(blissymbols) => [
+ q(0012),
+ q(0),
+ ],
+ q(book pahlavi) => [
+ q(0110),
+ q(0),
+ ],
+ q(bopomofo) => [
+ q(0013),
+ q(0),
+ ],
+ q(brahmi) => [
+ q(0014),
+ q(0),
+ ],
+ q(braille) => [
+ q(0015),
+ q(0),
+ ],
+ q(buginese) => [
+ q(0016),
+ q(0),
+ ],
+ q(buhid) => [
+ q(0017),
+ q(0),
+ ],
+ q(burmese) => [
+ q(0094),
+ q(2),
+ ],
+ q(carian) => [
+ q(0020),
+ q(0),
+ ],
+ q(caucasian albanian) => [
+ q(0002),
+ q(0),
+ ],
+ q(chakma) => [
+ q(0018),
+ q(0),
+ ],
+ q(cham) => [
+ q(0021),
+ q(0),
+ ],
+ q(cherokee) => [
+ q(0022),
+ q(0),
+ ],
+ q(cirth) => [
+ q(0023),
+ q(0),
+ ],
+ q(code for inherited script) => [
+ q(0158),
+ q(0),
+ ],
+ q(coptic) => [
+ q(0024),
+ q(0),
+ ],
+ q(cuneiform, sumero-akkadian) => [
+ q(0156),
+ q(0),
+ ],
+ q(cypriot) => [
+ q(0025),
+ q(0),
+ ],
+ q(cyrillic) => [
+ q(0026),
+ q(0),
+ ],
+ q(cyrillic (old church slavonic variant)) => [
+ q(0027),
+ q(0),
+ ],
+ q(deseret) => [
+ q(0029),
+ q(1),
+ ],
+ q(deseret (mormon)) => [
+ q(0029),
+ q(0),
+ ],
+ q(devanagari) => [
+ q(0028),
+ q(1),
+ ],
+ q(devanagari (nagari)) => [
+ q(0028),
+ q(0),
+ ],
+ q(duployan shorthand) => [
+ q(0030),
+ q(1),
+ ],
+ q(duployan shorthand, duployan stenography) => [
+ q(0030),
+ q(0),
+ ],
+ q(duployan stenography) => [
+ q(0030),
+ q(2),
+ ],
+ q(egyptian demotic) => [
+ q(0031),
+ q(0),
+ ],
+ q(egyptian hieratic) => [
+ q(0032),
+ q(0),
+ ],
+ q(egyptian hieroglyphs) => [
+ q(0033),
+ q(0),
+ ],
+ q(elbasan) => [
+ q(0034),
+ q(0),
+ ],
+ q(ethiopic) => [
+ q(0035),
+ q(1),
+ ],
+ q(ethiopic (geez)) => [
+ q(0035),
+ q(0),
+ ],
+ q(fraser) => [
+ q(0078),
+ q(2),
+ ],
+ q(ge'ez) => [
+ q(0035),
+ q(2),
+ ],
+ q(georgian (mkhedruli)) => [
+ q(0036),
+ q(0),
+ ],
+ q(glagolitic) => [
+ q(0038),
+ q(0),
+ ],
+ q(gothic) => [
+ q(0039),
+ q(0),
+ ],
+ q(grantha) => [
+ q(0040),
+ q(0),
+ ],
+ q(greek) => [
+ q(0041),
+ q(0),
+ ],
+ q(gujarati) => [
+ q(0042),
+ q(0),
+ ],
+ q(gurmukhi) => [
+ q(0043),
+ q(0),
+ ],
+ q(han) => [
+ q(0045),
+ q(1),
+ ],
+ q(han (hanzi, kanji, hanja)) => [
+ q(0045),
+ q(0),
+ ],
+ q(han (simplified variant)) => [
+ q(0047),
+ q(0),
+ ],
+ q(han (traditional variant)) => [
+ q(0048),
+ q(0),
+ ],
+ q(hangeul) => [
+ q(0044),
+ q(2),
+ ],
+ q(hangul) => [
+ q(0044),
+ q(1),
+ ],
+ q(hangul (hangul, hangeul)) => [
+ q(0044),
+ q(0),
+ ],
+ q(hanja) => [
+ q(0045),
+ q(4),
+ ],
+ q(hanunoo) => [
+ q(0046),
+ q(1),
+ ],
+ q(hanunoo (hanunoo)) => [
+ q(0046),
+ q(0),
+ ],
+ q(hanzi) => [
+ q(0045),
+ q(2),
+ ],
+ q(harappan) => [
+ q(0055),
+ q(2),
+ ],
+ q(hebrew) => [
+ q(0049),
+ q(0),
+ ],
+ q(hiragana) => [
+ q(0050),
+ q(0),
+ ],
+ q(hittite hieroglyphs) => [
+ q(0051),
+ q(3),
+ ],
+ q(hungarian runic) => [
+ q(0054),
+ q(2),
+ ],
+ q(imperial aramaic) => [
+ q(0004),
+ q(0),
+ ],
+ q(indus) => [
+ q(0055),
+ q(1),
+ ],
+ q(indus (harappan)) => [
+ q(0055),
+ q(0),
+ ],
+ q(inscriptional pahlavi) => [
+ q(0108),
+ q(0),
+ ],
+ q(inscriptional parthian) => [
+ q(0113),
+ q(0),
+ ],
+ q(japanese (alias for han + hiragana + katakana)) => [
+ q(0058),
+ q(0),
+ ],
+ q(japanese syllabaries (alias for hiragana + katakana)) => [
+ q(0053),
+ q(0),
+ ],
+ q(javanese) => [
+ q(0057),
+ q(0),
+ ],
+ q(jurchen) => [
+ q(0059),
+ q(0),
+ ],
+ q(kaganga) => [
+ q(0116),
+ q(3),
+ ],
+ q(kaithi) => [
+ q(0068),
+ q(0),
+ ],
+ q(kanji) => [
+ q(0045),
+ q(3),
+ ],
+ q(kannada) => [
+ q(0065),
+ q(0),
+ ],
+ q(katakana) => [
+ q(0061),
+ q(0),
+ ],
+ q(kayah li) => [
+ q(0060),
+ q(0),
+ ],
+ q(kharoshthi) => [
+ q(0062),
+ q(0),
+ ],
+ q(khmer) => [
+ q(0063),
+ q(0),
+ ],
+ q(khojki) => [
+ q(0064),
+ q(0),
+ ],
+ q(khudawadi) => [
+ q(0126),
+ q(1),
+ ],
+ q(khudawadi, sindhi) => [
+ q(0126),
+ q(0),
+ ],
+ q(khutsuri (asomtavruli and nuskhuri)) => [
+ q(0037),
+ q(0),
+ ],
+ q(korean (alias for hangul + han)) => [
+ q(0066),
+ q(0),
+ ],
+ q(kpelle) => [
+ q(0067),
+ q(0),
+ ],
+ q(lanna) => [
+ q(0069),
+ q(2),
+ ],
+ q(lao) => [
+ q(0070),
+ q(0),
+ ],
+ q(latin) => [
+ q(0073),
+ q(0),
+ ],
+ q(latin (fraktur variant)) => [
+ q(0071),
+ q(0),
+ ],
+ q(latin (gaelic variant)) => [
+ q(0072),
+ q(0),
+ ],
+ q(lepcha) => [
+ q(0074),
+ q(1),
+ ],
+ q(lepcha (rong)) => [
+ q(0074),
+ q(0),
+ ],
+ q(limbu) => [
+ q(0075),
+ q(0),
+ ],
+ q(linear a) => [
+ q(0076),
+ q(0),
+ ],
+ q(linear b) => [
+ q(0077),
+ q(0),
+ ],
+ q(lisu) => [
+ q(0078),
+ q(1),
+ ],
+ q(lisu (fraser)) => [
+ q(0078),
+ q(0),
+ ],
+ q(loma) => [
+ q(0079),
+ q(0),
+ ],
+ q(luwian hieroglyphs) => [
+ q(0051),
+ q(2),
+ ],
+ q(lycian) => [
+ q(0080),
+ q(0),
+ ],
+ q(lydian) => [
+ q(0081),
+ q(0),
+ ],
+ q(mahajani) => [
+ q(0082),
+ q(0),
+ ],
+ q(malayalam) => [
+ q(0089),
+ q(0),
+ ],
+ q(mandaean) => [
+ q(0083),
+ q(2),
+ ],
+ q(mandaic) => [
+ q(0083),
+ q(1),
+ ],
+ q(mandaic, mandaean) => [
+ q(0083),
+ q(0),
+ ],
+ q(manichaean) => [
+ q(0084),
+ q(0),
+ ],
+ q(mathematical notation) => [
+ q(0159),
+ q(0),
+ ],
+ q(mayan hieroglyphs) => [
+ q(0085),
+ q(0),
+ ],
+ q(meetei) => [
+ q(0093),
+ q(3),
+ ],
+ q(meitei mayek) => [
+ q(0093),
+ q(1),
+ ],
+ q(meitei mayek (meithei, meetei)) => [
+ q(0093),
+ q(0),
+ ],
+ q(meithei) => [
+ q(0093),
+ q(2),
+ ],
+ q(mende) => [
+ q(0086),
+ q(0),
+ ],
+ q(meroitic cursive) => [
+ q(0087),
+ q(0),
+ ],
+ q(meroitic hieroglyphs) => [
+ q(0088),
+ q(0),
+ ],
+ q(miao) => [
+ q(0112),
+ q(1),
+ ],
+ q(miao (pollard)) => [
+ q(0112),
+ q(0),
+ ],
+ q(mongolian) => [
+ q(0091),
+ q(0),
+ ],
+ q(moon) => [
+ q(0090),
+ q(1),
+ ],
+ q(moon (moon code, moon script, moon type)) => [
+ q(0090),
+ q(0),
+ ],
+ q(moon code) => [
+ q(0090),
+ q(2),
+ ],
+ q(moon script) => [
+ q(0090),
+ q(3),
+ ],
+ q(moon type) => [
+ q(0090),
+ q(4),
+ ],
+ q(mormon) => [
+ q(0029),
+ q(2),
+ ],
+ q(mro) => [
+ q(0092),
+ q(1),
+ ],
+ q(mro, mru) => [
+ q(0092),
+ q(0),
+ ],
+ q(mru) => [
+ q(0092),
+ q(2),
+ ],
+ q(myanmar) => [
+ q(0094),
+ q(1),
+ ],
+ q(myanmar (burmese)) => [
+ q(0094),
+ q(0),
+ ],
+ q(n'ko) => [
+ q(0098),
+ q(0),
+ ],
+ q(nabataean) => [
+ q(0096),
+ q(0),
+ ],
+ q(nagari) => [
+ q(0028),
+ q(2),
+ ],
+ q(nakhi geba) => [
+ q(0097),
+ q(1),
+ ],
+ q(nakhi geba ('na-'khi ggo-baw, naxi geba)) => [
+ q(0097),
+ q(0),
+ ],
+ q(naxi geba) => [
+ q(0097),
+ q(3),
+ ],
+ q(new tai lue) => [
+ q(0138),
+ q(0),
+ ],
+ q(nushu) => [
+ q(0099),
+ q(0),
+ ],
+ q(ogham) => [
+ q(0100),
+ q(0),
+ ],
+ q(ol) => [
+ q(0101),
+ q(3),
+ ],
+ q(ol cemet') => [
+ q(0101),
+ q(2),
+ ],
+ q(ol chiki) => [
+ q(0101),
+ q(1),
+ ],
+ q(ol chiki (ol cemet, ol, santali)) => [
+ q(0101),
+ q(0),
+ ],
+ q(old hungarian) => [
+ q(0054),
+ q(1),
+ ],
+ q(old hungarian (hungarian runic)) => [
+ q(0054),
+ q(0),
+ ],
+ q(old italic (etruscan, oscan, etc.)) => [
+ q(0056),
+ q(0),
+ ],
+ q(old north arabian) => [
+ q(0095),
+ q(1),
+ ],
+ q(old north arabian (ancient north arabian)) => [
+ q(0095),
+ q(0),
+ ],
+ q(old permic) => [
+ q(0106),
+ q(0),
+ ],
+ q(old persian) => [
+ q(0155),
+ q(0),
+ ],
+ q(old south arabian) => [
+ q(0121),
+ q(0),
+ ],
+ q(old turkic) => [
+ q(0102),
+ q(1),
+ ],
+ q(old turkic, orkhon runic) => [
+ q(0102),
+ q(0),
+ ],
+ q(oriya) => [
+ q(0103),
+ q(0),
+ ],
+ q(orkhon runic) => [
+ q(0102),
+ q(2),
+ ],
+ q(osmanya) => [
+ q(0104),
+ q(0),
+ ],
+ q(pahawh hmong) => [
+ q(0052),
+ q(0),
+ ],
+ q(palmyrene) => [
+ q(0105),
+ q(0),
+ ],
+ q(phags-pa) => [
+ q(0107),
+ q(0),
+ ],
+ q(phoenician) => [
+ q(0111),
+ q(0),
+ ],
+ q(pollard) => [
+ q(0112),
+ q(2),
+ ],
+ q(psalter pahlavi) => [
+ q(0109),
+ q(0),
+ ],
+ q(redjang) => [
+ q(0116),
+ q(2),
+ ],
+ q(rejang) => [
+ q(0116),
+ q(1),
+ ],
+ q(rejang (redjang, kaganga)) => [
+ q(0116),
+ q(0),
+ ],
+ q(reserved for private use (end)) => [
+ q(0115),
+ q(0),
+ ],
+ q(reserved for private use (start)) => [
+ q(0114),
+ q(0),
+ ],
+ q(rong) => [
+ q(0074),
+ q(2),
+ ],
+ q(rongorongo) => [
+ q(0117),
+ q(0),
+ ],
+ q(runic) => [
+ q(0118),
+ q(0),
+ ],
+ q(samaritan) => [
+ q(0119),
+ q(0),
+ ],
+ q(santali) => [
+ q(0101),
+ q(4),
+ ],
+ q(sarada) => [
+ q(0125),
+ q(2),
+ ],
+ q(sarati) => [
+ q(0120),
+ q(0),
+ ],
+ q(saurashtra) => [
+ q(0122),
+ q(0),
+ ],
+ q(sharada) => [
+ q(0125),
+ q(1),
+ ],
+ q(sharada, sarada) => [
+ q(0125),
+ q(0),
+ ],
+ q(shavian) => [
+ q(0124),
+ q(1),
+ ],
+ q(shavian (shaw)) => [
+ q(0124),
+ q(0),
+ ],
+ q(shaw) => [
+ q(0124),
+ q(2),
+ ],
+ q(signwriting) => [
+ q(0123),
+ q(0),
+ ],
+ q(sindhi) => [
+ q(0126),
+ q(2),
+ ],
+ q(sinhala) => [
+ q(0127),
+ q(0),
+ ],
+ q(sora sompeng) => [
+ q(0128),
+ q(0),
+ ],
+ q(sumero-akkadian cuneiform) => [
+ q(0156),
+ q(1),
+ ],
+ q(sundanese) => [
+ q(0129),
+ q(0),
+ ],
+ q(syloti nagri) => [
+ q(0130),
+ q(0),
+ ],
+ q(symbols) => [
+ q(0160),
+ q(0),
+ ],
+ q(syriac) => [
+ q(0131),
+ q(0),
+ ],
+ q(syriac (eastern variant)) => [
+ q(0134),
+ q(0),
+ ],
+ q(syriac (estrangelo variant)) => [
+ q(0132),
+ q(0),
+ ],
+ q(syriac (western variant)) => [
+ q(0133),
+ q(0),
+ ],
+ q(tagalog) => [
+ q(0145),
+ q(1),
+ ],
+ q(tagalog (baybayin, alibata)) => [
+ q(0145),
+ q(0),
+ ],
+ q(tagbanwa) => [
+ q(0135),
+ q(0),
+ ],
+ q(tai le) => [
+ q(0137),
+ q(0),
+ ],
+ q(tai tham) => [
+ q(0069),
+ q(1),
+ ],
+ q(tai tham (lanna)) => [
+ q(0069),
+ q(0),
+ ],
+ q(tai viet) => [
+ q(0141),
+ q(0),
+ ],
+ q(takri) => [
+ q(0136),
+ q(1),
+ ],
+ q(takri, takri, tankri) => [
+ q(0136),
+ q(0),
+ ],
+ q(tamil) => [
+ q(0139),
+ q(0),
+ ],
+ q(tangut) => [
+ q(0140),
+ q(0),
+ ],
+ q(tankri) => [
+ q(0136),
+ q(2),
+ ],
+ q(telugu) => [
+ q(0142),
+ q(0),
+ ],
+ q(tengwar) => [
+ q(0143),
+ q(0),
+ ],
+ q(thaana) => [
+ q(0146),
+ q(0),
+ ],
+ q(thai) => [
+ q(0147),
+ q(0),
+ ],
+ q(tibetan) => [
+ q(0148),
+ q(0),
+ ],
+ q(tifinagh) => [
+ q(0144),
+ q(1),
+ ],
+ q(tifinagh (berber)) => [
+ q(0144),
+ q(0),
+ ],
+ q(tirhuta) => [
+ q(0149),
+ q(0),
+ ],
+ q(ugaritic) => [
+ q(0150),
+ q(0),
+ ],
+ q(unified canadian aboriginal syllabics) => [
+ q(0019),
+ q(0),
+ ],
+ q(vai) => [
+ q(0151),
+ q(0),
+ ],
+ q(varang kshiti) => [
+ q(0153),
+ q(2),
+ ],
+ q(visible speech) => [
+ q(0152),
+ q(0),
+ ],
+ q(warang citi) => [
+ q(0153),
+ q(1),
+ ],
+ q(warang citi (varang kshiti)) => [
+ q(0153),
+ q(0),
+ ],
+ q(woleai) => [
+ q(0154),
+ q(0),
+ ],
+ q(yi) => [
+ q(0157),
+ q(0),
+ ],
+};
+
+$Locale::Codes::Data{'script'}{'code2id'} = {
+ q(alpha) => {
+ q(Afak) => [
+ q(0001),
+ q(0),
+ ],
+ q(Aghb) => [
+ q(0002),
+ q(0),
+ ],
+ q(Arab) => [
+ q(0003),
+ q(0),
+ ],
+ q(Armi) => [
+ q(0004),
+ q(0),
+ ],
+ q(Armn) => [
+ q(0005),
+ q(0),
+ ],
+ q(Avst) => [
+ q(0006),
+ q(0),
+ ],
+ q(Bali) => [
+ q(0007),
+ q(0),
+ ],
+ q(Bamu) => [
+ q(0008),
+ q(0),
+ ],
+ q(Bass) => [
+ q(0009),
+ q(0),
+ ],
+ q(Batk) => [
+ q(0010),
+ q(0),
+ ],
+ q(Beng) => [
+ q(0011),
+ q(0),
+ ],
+ q(Blis) => [
+ q(0012),
+ q(0),
+ ],
+ q(Bopo) => [
+ q(0013),
+ q(0),
+ ],
+ q(Brah) => [
+ q(0014),
+ q(0),
+ ],
+ q(Brai) => [
+ q(0015),
+ q(0),
+ ],
+ q(Bugi) => [
+ q(0016),
+ q(0),
+ ],
+ q(Buhd) => [
+ q(0017),
+ q(0),
+ ],
+ q(Cakm) => [
+ q(0018),
+ q(0),
+ ],
+ q(Cans) => [
+ q(0019),
+ q(0),
+ ],
+ q(Cari) => [
+ q(0020),
+ q(0),
+ ],
+ q(Cham) => [
+ q(0021),
+ q(0),
+ ],
+ q(Cher) => [
+ q(0022),
+ q(0),
+ ],
+ q(Cirt) => [
+ q(0023),
+ q(0),
+ ],
+ q(Copt) => [
+ q(0024),
+ q(0),
+ ],
+ q(Cprt) => [
+ q(0025),
+ q(0),
+ ],
+ q(Cyrl) => [
+ q(0026),
+ q(0),
+ ],
+ q(Cyrs) => [
+ q(0027),
+ q(0),
+ ],
+ q(Deva) => [
+ q(0028),
+ q(1),
+ ],
+ q(Dsrt) => [
+ q(0029),
+ q(1),
+ ],
+ q(Dupl) => [
+ q(0030),
+ q(1),
+ ],
+ q(Egyd) => [
+ q(0031),
+ q(0),
+ ],
+ q(Egyh) => [
+ q(0032),
+ q(0),
+ ],
+ q(Egyp) => [
+ q(0033),
+ q(0),
+ ],
+ q(Elba) => [
+ q(0034),
+ q(0),
+ ],
+ q(Ethi) => [
+ q(0035),
+ q(1),
+ ],
+ q(Geok) => [
+ q(0037),
+ q(0),
+ ],
+ q(Geor) => [
+ q(0036),
+ q(0),
+ ],
+ q(Glag) => [
+ q(0038),
+ q(0),
+ ],
+ q(Goth) => [
+ q(0039),
+ q(0),
+ ],
+ q(Gran) => [
+ q(0040),
+ q(0),
+ ],
+ q(Grek) => [
+ q(0041),
+ q(0),
+ ],
+ q(Gujr) => [
+ q(0042),
+ q(0),
+ ],
+ q(Guru) => [
+ q(0043),
+ q(0),
+ ],
+ q(Hang) => [
+ q(0044),
+ q(1),
+ ],
+ q(Hani) => [
+ q(0045),
+ q(1),
+ ],
+ q(Hano) => [
+ q(0046),
+ q(1),
+ ],
+ q(Hans) => [
+ q(0047),
+ q(0),
+ ],
+ q(Hant) => [
+ q(0048),
+ q(0),
+ ],
+ q(Hebr) => [
+ q(0049),
+ q(0),
+ ],
+ q(Hira) => [
+ q(0050),
+ q(0),
+ ],
+ q(Hluw) => [
+ q(0051),
+ q(1),
+ ],
+ q(Hmng) => [
+ q(0052),
+ q(0),
+ ],
+ q(Hrkt) => [
+ q(0053),
+ q(0),
+ ],
+ q(Hung) => [
+ q(0054),
+ q(1),
+ ],
+ q(Inds) => [
+ q(0055),
+ q(1),
+ ],
+ q(Ital) => [
+ q(0056),
+ q(0),
+ ],
+ q(Java) => [
+ q(0057),
+ q(0),
+ ],
+ q(Jpan) => [
+ q(0058),
+ q(0),
+ ],
+ q(Jurc) => [
+ q(0059),
+ q(0),
+ ],
+ q(Kali) => [
+ q(0060),
+ q(0),
+ ],
+ q(Kana) => [
+ q(0061),
+ q(0),
+ ],
+ q(Khar) => [
+ q(0062),
+ q(0),
+ ],
+ q(Khmr) => [
+ q(0063),
+ q(0),
+ ],
+ q(Khoj) => [
+ q(0064),
+ q(0),
+ ],
+ q(Knda) => [
+ q(0065),
+ q(0),
+ ],
+ q(Kore) => [
+ q(0066),
+ q(0),
+ ],
+ q(Kpel) => [
+ q(0067),
+ q(0),
+ ],
+ q(Kthi) => [
+ q(0068),
+ q(0),
+ ],
+ q(Lana) => [
+ q(0069),
+ q(1),
+ ],
+ q(Laoo) => [
+ q(0070),
+ q(0),
+ ],
+ q(Latf) => [
+ q(0071),
+ q(0),
+ ],
+ q(Latg) => [
+ q(0072),
+ q(0),
+ ],
+ q(Latn) => [
+ q(0073),
+ q(0),
+ ],
+ q(Lepc) => [
+ q(0074),
+ q(1),
+ ],
+ q(Limb) => [
+ q(0075),
+ q(0),
+ ],
+ q(Lina) => [
+ q(0076),
+ q(0),
+ ],
+ q(Linb) => [
+ q(0077),
+ q(0),
+ ],
+ q(Lisu) => [
+ q(0078),
+ q(1),
+ ],
+ q(Loma) => [
+ q(0079),
+ q(0),
+ ],
+ q(Lyci) => [
+ q(0080),
+ q(0),
+ ],
+ q(Lydi) => [
+ q(0081),
+ q(0),
+ ],
+ q(Mahj) => [
+ q(0082),
+ q(0),
+ ],
+ q(Mand) => [
+ q(0083),
+ q(1),
+ ],
+ q(Mani) => [
+ q(0084),
+ q(0),
+ ],
+ q(Maya) => [
+ q(0085),
+ q(0),
+ ],
+ q(Mend) => [
+ q(0086),
+ q(0),
+ ],
+ q(Merc) => [
+ q(0087),
+ q(0),
+ ],
+ q(Mero) => [
+ q(0088),
+ q(0),
+ ],
+ q(Mlym) => [
+ q(0089),
+ q(0),
+ ],
+ q(Mong) => [
+ q(0091),
+ q(0),
+ ],
+ q(Moon) => [
+ q(0090),
+ q(1),
+ ],
+ q(Mroo) => [
+ q(0092),
+ q(1),
+ ],
+ q(Mtei) => [
+ q(0093),
+ q(1),
+ ],
+ q(Mymr) => [
+ q(0094),
+ q(1),
+ ],
+ q(Narb) => [
+ q(0095),
+ q(1),
+ ],
+ q(Nbat) => [
+ q(0096),
+ q(0),
+ ],
+ q(Nkgb) => [
+ q(0097),
+ q(1),
+ ],
+ q(Nkoo) => [
+ q(0098),
+ q(0),
+ ],
+ q(Nshu) => [
+ q(0099),
+ q(0),
+ ],
+ q(Ogam) => [
+ q(0100),
+ q(0),
+ ],
+ q(Olck) => [
+ q(0101),
+ q(1),
+ ],
+ q(Orkh) => [
+ q(0102),
+ q(1),
+ ],
+ q(Orya) => [
+ q(0103),
+ q(0),
+ ],
+ q(Osma) => [
+ q(0104),
+ q(0),
+ ],
+ q(Palm) => [
+ q(0105),
+ q(0),
+ ],
+ q(Perm) => [
+ q(0106),
+ q(0),
+ ],
+ q(Phag) => [
+ q(0107),
+ q(0),
+ ],
+ q(Phli) => [
+ q(0108),
+ q(0),
+ ],
+ q(Phlp) => [
+ q(0109),
+ q(0),
+ ],
+ q(Phlv) => [
+ q(0110),
+ q(0),
+ ],
+ q(Phnx) => [
+ q(0111),
+ q(0),
+ ],
+ q(Plrd) => [
+ q(0112),
+ q(1),
+ ],
+ q(Prti) => [
+ q(0113),
+ q(0),
+ ],
+ q(Qaaa) => [
+ q(0114),
+ q(0),
+ ],
+ q(Qabx) => [
+ q(0115),
+ q(0),
+ ],
+ q(Rjng) => [
+ q(0116),
+ q(1),
+ ],
+ q(Roro) => [
+ q(0117),
+ q(0),
+ ],
+ q(Runr) => [
+ q(0118),
+ q(0),
+ ],
+ q(Samr) => [
+ q(0119),
+ q(0),
+ ],
+ q(Sara) => [
+ q(0120),
+ q(0),
+ ],
+ q(Sarb) => [
+ q(0121),
+ q(0),
+ ],
+ q(Saur) => [
+ q(0122),
+ q(0),
+ ],
+ q(Sgnw) => [
+ q(0123),
+ q(0),
+ ],
+ q(Shaw) => [
+ q(0124),
+ q(1),
+ ],
+ q(Shrd) => [
+ q(0125),
+ q(1),
+ ],
+ q(Sind) => [
+ q(0126),
+ q(1),
+ ],
+ q(Sinh) => [
+ q(0127),
+ q(0),
+ ],
+ q(Sora) => [
+ q(0128),
+ q(0),
+ ],
+ q(Sund) => [
+ q(0129),
+ q(0),
+ ],
+ q(Sylo) => [
+ q(0130),
+ q(0),
+ ],
+ q(Syrc) => [
+ q(0131),
+ q(0),
+ ],
+ q(Syre) => [
+ q(0132),
+ q(0),
+ ],
+ q(Syrj) => [
+ q(0133),
+ q(0),
+ ],
+ q(Syrn) => [
+ q(0134),
+ q(0),
+ ],
+ q(Tagb) => [
+ q(0135),
+ q(0),
+ ],
+ q(Takr) => [
+ q(0136),
+ q(1),
+ ],
+ q(Tale) => [
+ q(0137),
+ q(0),
+ ],
+ q(Talu) => [
+ q(0138),
+ q(0),
+ ],
+ q(Taml) => [
+ q(0139),
+ q(0),
+ ],
+ q(Tang) => [
+ q(0140),
+ q(0),
+ ],
+ q(Tavt) => [
+ q(0141),
+ q(0),
+ ],
+ q(Telu) => [
+ q(0142),
+ q(0),
+ ],
+ q(Teng) => [
+ q(0143),
+ q(0),
+ ],
+ q(Tfng) => [
+ q(0144),
+ q(1),
+ ],
+ q(Tglg) => [
+ q(0145),
+ q(1),
+ ],
+ q(Thaa) => [
+ q(0146),
+ q(0),
+ ],
+ q(Thai) => [
+ q(0147),
+ q(0),
+ ],
+ q(Tibt) => [
+ q(0148),
+ q(0),
+ ],
+ q(Tirh) => [
+ q(0149),
+ q(0),
+ ],
+ q(Ugar) => [
+ q(0150),
+ q(0),
+ ],
+ q(Vaii) => [
+ q(0151),
+ q(0),
+ ],
+ q(Visp) => [
+ q(0152),
+ q(0),
+ ],
+ q(Wara) => [
+ q(0153),
+ q(1),
+ ],
+ q(Wole) => [
+ q(0154),
+ q(0),
+ ],
+ q(Xpeo) => [
+ q(0155),
+ q(0),
+ ],
+ q(Xsux) => [
+ q(0156),
+ q(1),
+ ],
+ q(Yiii) => [
+ q(0157),
+ q(0),
+ ],
+ q(Zinh) => [
+ q(0158),
+ q(0),
+ ],
+ q(Zmth) => [
+ q(0159),
+ q(0),
+ ],
+ q(Zsym) => [
+ q(0160),
+ q(0),
+ ],
+ },
+ q(num) => {
+ q(020) => [
+ q(0156),
+ q(0),
+ ],
+ q(030) => [
+ q(0155),
+ q(0),
+ ],
+ q(040) => [
+ q(0150),
+ q(0),
+ ],
+ q(050) => [
+ q(0033),
+ q(0),
+ ],
+ q(060) => [
+ q(0032),
+ q(0),
+ ],
+ q(070) => [
+ q(0031),
+ q(0),
+ ],
+ q(080) => [
+ q(0051),
+ q(0),
+ ],
+ q(090) => [
+ q(0085),
+ q(0),
+ ],
+ q(095) => [
+ q(0123),
+ q(0),
+ ],
+ q(100) => [
+ q(0088),
+ q(0),
+ ],
+ q(101) => [
+ q(0087),
+ q(0),
+ ],
+ q(105) => [
+ q(0121),
+ q(0),
+ ],
+ q(106) => [
+ q(0095),
+ q(0),
+ ],
+ q(115) => [
+ q(0111),
+ q(0),
+ ],
+ q(116) => [
+ q(0081),
+ q(0),
+ ],
+ q(120) => [
+ q(0144),
+ q(0),
+ ],
+ q(123) => [
+ q(0119),
+ q(0),
+ ],
+ q(124) => [
+ q(0004),
+ q(0),
+ ],
+ q(125) => [
+ q(0049),
+ q(0),
+ ],
+ q(126) => [
+ q(0105),
+ q(0),
+ ],
+ q(130) => [
+ q(0113),
+ q(0),
+ ],
+ q(131) => [
+ q(0108),
+ q(0),
+ ],
+ q(132) => [
+ q(0109),
+ q(0),
+ ],
+ q(133) => [
+ q(0110),
+ q(0),
+ ],
+ q(134) => [
+ q(0006),
+ q(0),
+ ],
+ q(135) => [
+ q(0131),
+ q(0),
+ ],
+ q(136) => [
+ q(0134),
+ q(0),
+ ],
+ q(137) => [
+ q(0133),
+ q(0),
+ ],
+ q(138) => [
+ q(0132),
+ q(0),
+ ],
+ q(139) => [
+ q(0084),
+ q(0),
+ ],
+ q(140) => [
+ q(0083),
+ q(0),
+ ],
+ q(145) => [
+ q(0091),
+ q(0),
+ ],
+ q(159) => [
+ q(0096),
+ q(0),
+ ],
+ q(160) => [
+ q(0003),
+ q(0),
+ ],
+ q(165) => [
+ q(0098),
+ q(0),
+ ],
+ q(170) => [
+ q(0146),
+ q(0),
+ ],
+ q(175) => [
+ q(0102),
+ q(0),
+ ],
+ q(176) => [
+ q(0054),
+ q(0),
+ ],
+ q(199) => [
+ q(0092),
+ q(0),
+ ],
+ q(200) => [
+ q(0041),
+ q(0),
+ ],
+ q(201) => [
+ q(0020),
+ q(0),
+ ],
+ q(202) => [
+ q(0080),
+ q(0),
+ ],
+ q(204) => [
+ q(0024),
+ q(0),
+ ],
+ q(206) => [
+ q(0039),
+ q(0),
+ ],
+ q(210) => [
+ q(0056),
+ q(0),
+ ],
+ q(211) => [
+ q(0118),
+ q(0),
+ ],
+ q(212) => [
+ q(0100),
+ q(0),
+ ],
+ q(215) => [
+ q(0073),
+ q(0),
+ ],
+ q(216) => [
+ q(0072),
+ q(0),
+ ],
+ q(217) => [
+ q(0071),
+ q(0),
+ ],
+ q(218) => [
+ q(0090),
+ q(0),
+ ],
+ q(220) => [
+ q(0026),
+ q(0),
+ ],
+ q(221) => [
+ q(0027),
+ q(0),
+ ],
+ q(225) => [
+ q(0038),
+ q(0),
+ ],
+ q(226) => [
+ q(0034),
+ q(0),
+ ],
+ q(227) => [
+ q(0106),
+ q(0),
+ ],
+ q(230) => [
+ q(0005),
+ q(0),
+ ],
+ q(239) => [
+ q(0002),
+ q(0),
+ ],
+ q(240) => [
+ q(0036),
+ q(0),
+ ],
+ q(241) => [
+ q(0037),
+ q(0),
+ ],
+ q(250) => [
+ q(0029),
+ q(0),
+ ],
+ q(259) => [
+ q(0009),
+ q(0),
+ ],
+ q(260) => [
+ q(0104),
+ q(0),
+ ],
+ q(261) => [
+ q(0101),
+ q(0),
+ ],
+ q(262) => [
+ q(0153),
+ q(0),
+ ],
+ q(280) => [
+ q(0152),
+ q(0),
+ ],
+ q(281) => [
+ q(0124),
+ q(0),
+ ],
+ q(282) => [
+ q(0112),
+ q(0),
+ ],
+ q(285) => [
+ q(0013),
+ q(0),
+ ],
+ q(286) => [
+ q(0044),
+ q(0),
+ ],
+ q(287) => [
+ q(0066),
+ q(0),
+ ],
+ q(290) => [
+ q(0143),
+ q(0),
+ ],
+ q(291) => [
+ q(0023),
+ q(0),
+ ],
+ q(292) => [
+ q(0120),
+ q(0),
+ ],
+ q(300) => [
+ q(0014),
+ q(0),
+ ],
+ q(305) => [
+ q(0062),
+ q(0),
+ ],
+ q(310) => [
+ q(0043),
+ q(0),
+ ],
+ q(314) => [
+ q(0082),
+ q(0),
+ ],
+ q(315) => [
+ q(0028),
+ q(0),
+ ],
+ q(316) => [
+ q(0130),
+ q(0),
+ ],
+ q(317) => [
+ q(0068),
+ q(0),
+ ],
+ q(318) => [
+ q(0126),
+ q(0),
+ ],
+ q(319) => [
+ q(0125),
+ q(0),
+ ],
+ q(320) => [
+ q(0042),
+ q(0),
+ ],
+ q(321) => [
+ q(0136),
+ q(0),
+ ],
+ q(322) => [
+ q(0064),
+ q(0),
+ ],
+ q(325) => [
+ q(0011),
+ q(0),
+ ],
+ q(326) => [
+ q(0149),
+ q(0),
+ ],
+ q(327) => [
+ q(0103),
+ q(0),
+ ],
+ q(330) => [
+ q(0148),
+ q(0),
+ ],
+ q(331) => [
+ q(0107),
+ q(0),
+ ],
+ q(335) => [
+ q(0074),
+ q(0),
+ ],
+ q(336) => [
+ q(0075),
+ q(0),
+ ],
+ q(337) => [
+ q(0093),
+ q(0),
+ ],
+ q(340) => [
+ q(0142),
+ q(0),
+ ],
+ q(343) => [
+ q(0040),
+ q(0),
+ ],
+ q(344) => [
+ q(0122),
+ q(0),
+ ],
+ q(345) => [
+ q(0065),
+ q(0),
+ ],
+ q(346) => [
+ q(0139),
+ q(0),
+ ],
+ q(347) => [
+ q(0089),
+ q(0),
+ ],
+ q(348) => [
+ q(0127),
+ q(0),
+ ],
+ q(349) => [
+ q(0018),
+ q(0),
+ ],
+ q(350) => [
+ q(0094),
+ q(0),
+ ],
+ q(351) => [
+ q(0069),
+ q(0),
+ ],
+ q(352) => [
+ q(0147),
+ q(0),
+ ],
+ q(353) => [
+ q(0137),
+ q(0),
+ ],
+ q(354) => [
+ q(0138),
+ q(0),
+ ],
+ q(355) => [
+ q(0063),
+ q(0),
+ ],
+ q(356) => [
+ q(0070),
+ q(0),
+ ],
+ q(357) => [
+ q(0060),
+ q(0),
+ ],
+ q(358) => [
+ q(0021),
+ q(0),
+ ],
+ q(359) => [
+ q(0141),
+ q(0),
+ ],
+ q(360) => [
+ q(0007),
+ q(0),
+ ],
+ q(361) => [
+ q(0057),
+ q(0),
+ ],
+ q(362) => [
+ q(0129),
+ q(0),
+ ],
+ q(363) => [
+ q(0116),
+ q(0),
+ ],
+ q(365) => [
+ q(0010),
+ q(0),
+ ],
+ q(367) => [
+ q(0016),
+ q(0),
+ ],
+ q(370) => [
+ q(0145),
+ q(0),
+ ],
+ q(371) => [
+ q(0046),
+ q(0),
+ ],
+ q(372) => [
+ q(0017),
+ q(0),
+ ],
+ q(373) => [
+ q(0135),
+ q(0),
+ ],
+ q(398) => [
+ q(0128),
+ q(0),
+ ],
+ q(399) => [
+ q(0078),
+ q(0),
+ ],
+ q(400) => [
+ q(0076),
+ q(0),
+ ],
+ q(401) => [
+ q(0077),
+ q(0),
+ ],
+ q(403) => [
+ q(0025),
+ q(0),
+ ],
+ q(410) => [
+ q(0050),
+ q(0),
+ ],
+ q(411) => [
+ q(0061),
+ q(0),
+ ],
+ q(412) => [
+ q(0053),
+ q(0),
+ ],
+ q(413) => [
+ q(0058),
+ q(0),
+ ],
+ q(420) => [
+ q(0097),
+ q(0),
+ ],
+ q(430) => [
+ q(0035),
+ q(0),
+ ],
+ q(435) => [
+ q(0008),
+ q(0),
+ ],
+ q(436) => [
+ q(0067),
+ q(0),
+ ],
+ q(437) => [
+ q(0079),
+ q(0),
+ ],
+ q(438) => [
+ q(0086),
+ q(0),
+ ],
+ q(439) => [
+ q(0001),
+ q(0),
+ ],
+ q(440) => [
+ q(0019),
+ q(0),
+ ],
+ q(445) => [
+ q(0022),
+ q(0),
+ ],
+ q(450) => [
+ q(0052),
+ q(0),
+ ],
+ q(460) => [
+ q(0157),
+ q(0),
+ ],
+ q(470) => [
+ q(0151),
+ q(0),
+ ],
+ q(480) => [
+ q(0154),
+ q(0),
+ ],
+ q(499) => [
+ q(0099),
+ q(0),
+ ],
+ q(500) => [
+ q(0045),
+ q(0),
+ ],
+ q(501) => [
+ q(0047),
+ q(0),
+ ],
+ q(502) => [
+ q(0048),
+ q(0),
+ ],
+ q(510) => [
+ q(0059),
+ q(0),
+ ],
+ q(520) => [
+ q(0140),
+ q(0),
+ ],
+ q(550) => [
+ q(0012),
+ q(0),
+ ],
+ q(570) => [
+ q(0015),
+ q(0),
+ ],
+ q(610) => [
+ q(0055),
+ q(0),
+ ],
+ q(620) => [
+ q(0117),
+ q(0),
+ ],
+ q(755) => [
+ q(0030),
+ q(0),
+ ],
+ q(900) => [
+ q(0114),
+ q(0),
+ ],
+ q(949) => [
+ q(0115),
+ q(0),
+ ],
+ q(994) => [
+ q(0158),
+ q(0),
+ ],
+ q(995) => [
+ q(0159),
+ q(0),
+ ],
+ q(996) => [
+ q(0160),
+ q(0),
+ ],
+ },
+};
+
+$Locale::Codes::Data{'script'}{'id2code'} = {
+ q(alpha) => {
+ q(0001) => q(Afak),
+ q(0002) => q(Aghb),
+ q(0003) => q(Arab),
+ q(0004) => q(Armi),
+ q(0005) => q(Armn),
+ q(0006) => q(Avst),
+ q(0007) => q(Bali),
+ q(0008) => q(Bamu),
+ q(0009) => q(Bass),
+ q(0010) => q(Batk),
+ q(0011) => q(Beng),
+ q(0012) => q(Blis),
+ q(0013) => q(Bopo),
+ q(0014) => q(Brah),
+ q(0015) => q(Brai),
+ q(0016) => q(Bugi),
+ q(0017) => q(Buhd),
+ q(0018) => q(Cakm),
+ q(0019) => q(Cans),
+ q(0020) => q(Cari),
+ q(0021) => q(Cham),
+ q(0022) => q(Cher),
+ q(0023) => q(Cirt),
+ q(0024) => q(Copt),
+ q(0025) => q(Cprt),
+ q(0026) => q(Cyrl),
+ q(0027) => q(Cyrs),
+ q(0028) => q(Deva),
+ q(0029) => q(Dsrt),
+ q(0030) => q(Dupl),
+ q(0031) => q(Egyd),
+ q(0032) => q(Egyh),
+ q(0033) => q(Egyp),
+ q(0034) => q(Elba),
+ q(0035) => q(Ethi),
+ q(0036) => q(Geor),
+ q(0037) => q(Geok),
+ q(0038) => q(Glag),
+ q(0039) => q(Goth),
+ q(0040) => q(Gran),
+ q(0041) => q(Grek),
+ q(0042) => q(Gujr),
+ q(0043) => q(Guru),
+ q(0044) => q(Hang),
+ q(0045) => q(Hani),
+ q(0046) => q(Hano),
+ q(0047) => q(Hans),
+ q(0048) => q(Hant),
+ q(0049) => q(Hebr),
+ q(0050) => q(Hira),
+ q(0051) => q(Hluw),
+ q(0052) => q(Hmng),
+ q(0053) => q(Hrkt),
+ q(0054) => q(Hung),
+ q(0055) => q(Inds),
+ q(0056) => q(Ital),
+ q(0057) => q(Java),
+ q(0058) => q(Jpan),
+ q(0059) => q(Jurc),
+ q(0060) => q(Kali),
+ q(0061) => q(Kana),
+ q(0062) => q(Khar),
+ q(0063) => q(Khmr),
+ q(0064) => q(Khoj),
+ q(0065) => q(Knda),
+ q(0066) => q(Kore),
+ q(0067) => q(Kpel),
+ q(0068) => q(Kthi),
+ q(0069) => q(Lana),
+ q(0070) => q(Laoo),
+ q(0071) => q(Latf),
+ q(0072) => q(Latg),
+ q(0073) => q(Latn),
+ q(0074) => q(Lepc),
+ q(0075) => q(Limb),
+ q(0076) => q(Lina),
+ q(0077) => q(Linb),
+ q(0078) => q(Lisu),
+ q(0079) => q(Loma),
+ q(0080) => q(Lyci),
+ q(0081) => q(Lydi),
+ q(0082) => q(Mahj),
+ q(0083) => q(Mand),
+ q(0084) => q(Mani),
+ q(0085) => q(Maya),
+ q(0086) => q(Mend),
+ q(0087) => q(Merc),
+ q(0088) => q(Mero),
+ q(0089) => q(Mlym),
+ q(0090) => q(Moon),
+ q(0091) => q(Mong),
+ q(0092) => q(Mroo),
+ q(0093) => q(Mtei),
+ q(0094) => q(Mymr),
+ q(0095) => q(Narb),
+ q(0096) => q(Nbat),
+ q(0097) => q(Nkgb),
+ q(0098) => q(Nkoo),
+ q(0099) => q(Nshu),
+ q(0100) => q(Ogam),
+ q(0101) => q(Olck),
+ q(0102) => q(Orkh),
+ q(0103) => q(Orya),
+ q(0104) => q(Osma),
+ q(0105) => q(Palm),
+ q(0106) => q(Perm),
+ q(0107) => q(Phag),
+ q(0108) => q(Phli),
+ q(0109) => q(Phlp),
+ q(0110) => q(Phlv),
+ q(0111) => q(Phnx),
+ q(0112) => q(Plrd),
+ q(0113) => q(Prti),
+ q(0114) => q(Qaaa),
+ q(0115) => q(Qabx),
+ q(0116) => q(Rjng),
+ q(0117) => q(Roro),
+ q(0118) => q(Runr),
+ q(0119) => q(Samr),
+ q(0120) => q(Sara),
+ q(0121) => q(Sarb),
+ q(0122) => q(Saur),
+ q(0123) => q(Sgnw),
+ q(0124) => q(Shaw),
+ q(0125) => q(Shrd),
+ q(0126) => q(Sind),
+ q(0127) => q(Sinh),
+ q(0128) => q(Sora),
+ q(0129) => q(Sund),
+ q(0130) => q(Sylo),
+ q(0131) => q(Syrc),
+ q(0132) => q(Syre),
+ q(0133) => q(Syrj),
+ q(0134) => q(Syrn),
+ q(0135) => q(Tagb),
+ q(0136) => q(Takr),
+ q(0137) => q(Tale),
+ q(0138) => q(Talu),
+ q(0139) => q(Taml),
+ q(0140) => q(Tang),
+ q(0141) => q(Tavt),
+ q(0142) => q(Telu),
+ q(0143) => q(Teng),
+ q(0144) => q(Tfng),
+ q(0145) => q(Tglg),
+ q(0146) => q(Thaa),
+ q(0147) => q(Thai),
+ q(0148) => q(Tibt),
+ q(0149) => q(Tirh),
+ q(0150) => q(Ugar),
+ q(0151) => q(Vaii),
+ q(0152) => q(Visp),
+ q(0153) => q(Wara),
+ q(0154) => q(Wole),
+ q(0155) => q(Xpeo),
+ q(0156) => q(Xsux),
+ q(0157) => q(Yiii),
+ q(0158) => q(Zinh),
+ q(0159) => q(Zmth),
+ q(0160) => q(Zsym),
+ },
+ q(num) => {
+ q(0001) => q(439),
+ q(0002) => q(239),
+ q(0003) => q(160),
+ q(0004) => q(124),
+ q(0005) => q(230),
+ q(0006) => q(134),
+ q(0007) => q(360),
+ q(0008) => q(435),
+ q(0009) => q(259),
+ q(0010) => q(365),
+ q(0011) => q(325),
+ q(0012) => q(550),
+ q(0013) => q(285),
+ q(0014) => q(300),
+ q(0015) => q(570),
+ q(0016) => q(367),
+ q(0017) => q(372),
+ q(0018) => q(349),
+ q(0019) => q(440),
+ q(0020) => q(201),
+ q(0021) => q(358),
+ q(0022) => q(445),
+ q(0023) => q(291),
+ q(0024) => q(204),
+ q(0025) => q(403),
+ q(0026) => q(220),
+ q(0027) => q(221),
+ q(0028) => q(315),
+ q(0029) => q(250),
+ q(0030) => q(755),
+ q(0031) => q(070),
+ q(0032) => q(060),
+ q(0033) => q(050),
+ q(0034) => q(226),
+ q(0035) => q(430),
+ q(0036) => q(240),
+ q(0037) => q(241),
+ q(0038) => q(225),
+ q(0039) => q(206),
+ q(0040) => q(343),
+ q(0041) => q(200),
+ q(0042) => q(320),
+ q(0043) => q(310),
+ q(0044) => q(286),
+ q(0045) => q(500),
+ q(0046) => q(371),
+ q(0047) => q(501),
+ q(0048) => q(502),
+ q(0049) => q(125),
+ q(0050) => q(410),
+ q(0051) => q(080),
+ q(0052) => q(450),
+ q(0053) => q(412),
+ q(0054) => q(176),
+ q(0055) => q(610),
+ q(0056) => q(210),
+ q(0057) => q(361),
+ q(0058) => q(413),
+ q(0059) => q(510),
+ q(0060) => q(357),
+ q(0061) => q(411),
+ q(0062) => q(305),
+ q(0063) => q(355),
+ q(0064) => q(322),
+ q(0065) => q(345),
+ q(0066) => q(287),
+ q(0067) => q(436),
+ q(0068) => q(317),
+ q(0069) => q(351),
+ q(0070) => q(356),
+ q(0071) => q(217),
+ q(0072) => q(216),
+ q(0073) => q(215),
+ q(0074) => q(335),
+ q(0075) => q(336),
+ q(0076) => q(400),
+ q(0077) => q(401),
+ q(0078) => q(399),
+ q(0079) => q(437),
+ q(0080) => q(202),
+ q(0081) => q(116),
+ q(0082) => q(314),
+ q(0083) => q(140),
+ q(0084) => q(139),
+ q(0085) => q(090),
+ q(0086) => q(438),
+ q(0087) => q(101),
+ q(0088) => q(100),
+ q(0089) => q(347),
+ q(0090) => q(218),
+ q(0091) => q(145),
+ q(0092) => q(199),
+ q(0093) => q(337),
+ q(0094) => q(350),
+ q(0095) => q(106),
+ q(0096) => q(159),
+ q(0097) => q(420),
+ q(0098) => q(165),
+ q(0099) => q(499),
+ q(0100) => q(212),
+ q(0101) => q(261),
+ q(0102) => q(175),
+ q(0103) => q(327),
+ q(0104) => q(260),
+ q(0105) => q(126),
+ q(0106) => q(227),
+ q(0107) => q(331),
+ q(0108) => q(131),
+ q(0109) => q(132),
+ q(0110) => q(133),
+ q(0111) => q(115),
+ q(0112) => q(282),
+ q(0113) => q(130),
+ q(0114) => q(900),
+ q(0115) => q(949),
+ q(0116) => q(363),
+ q(0117) => q(620),
+ q(0118) => q(211),
+ q(0119) => q(123),
+ q(0120) => q(292),
+ q(0121) => q(105),
+ q(0122) => q(344),
+ q(0123) => q(095),
+ q(0124) => q(281),
+ q(0125) => q(319),
+ q(0126) => q(318),
+ q(0127) => q(348),
+ q(0128) => q(398),
+ q(0129) => q(362),
+ q(0130) => q(316),
+ q(0131) => q(135),
+ q(0132) => q(138),
+ q(0133) => q(137),
+ q(0134) => q(136),
+ q(0135) => q(373),
+ q(0136) => q(321),
+ q(0137) => q(353),
+ q(0138) => q(354),
+ q(0139) => q(346),
+ q(0140) => q(520),
+ q(0141) => q(359),
+ q(0142) => q(340),
+ q(0143) => q(290),
+ q(0144) => q(120),
+ q(0145) => q(370),
+ q(0146) => q(170),
+ q(0147) => q(352),
+ q(0148) => q(330),
+ q(0149) => q(326),
+ q(0150) => q(040),
+ q(0151) => q(470),
+ q(0152) => q(280),
+ q(0153) => q(262),
+ q(0154) => q(480),
+ q(0155) => q(030),
+ q(0156) => q(020),
+ q(0157) => q(460),
+ q(0158) => q(994),
+ q(0159) => q(995),
+ q(0160) => q(996),
+ },
+};
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script_Retired.pm
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script_Retired.pm (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/lib/Locale/Codes/Script_Retired.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,91 @@
+package Locale::Codes::Script_Retired;
+
+# This file was automatically generated. Any changes to this file will
+# be lost the next time 'deprecate_codes' is run.
+# Generated on: Wed Feb 27 10:06:46 EST 2013
+
+=pod
+
+=head1 NAME
+
+Locale::Codes::Script_Retired - retired script codes for the Locale::Codes::Script module
+
+=head1 SYNOPSIS
+
+This module contains data used by the Locale::Codes::Script module. It is
+not intended to be used directly, and contains no calleable routines.
+
+=head1 AUTHOR
+
+See Locale::Codes for full author history.
+
+Currently maintained by Sullivan Beck (sbeck at cpan.org).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001 Canon Research Centre Europe (CRE).
+ Copyright (c) 2001-2010 Neil Bowers
+ Copyright (c) 2010-2013 Sullivan Beck
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+use strict;
+require 5.006;
+use warnings;
+use utf8;
+
+our($VERSION);
+$VERSION='3.25';
+
+$Locale::Codes::Retired{'script'}{'alpha'}{'code'} = {
+};
+
+$Locale::Codes::Retired{'script'}{'num'}{'code'} = {
+};
+
+$Locale::Codes::Retired{'script'}{'alpha'}{'name'} = {
+ q((alias for hiragana + katakana)) => [ q(Hrkt), q((alias for Hiragana + Katakana)) ],
+ q(cuneiform, sumero-akkadian) => [ q(Xsux), q(Cuneiform, Sumero-Akkadian) ],
+ q(deseret (mormon)) => [ q(Dsrt), q(Deseret (Mormon)) ],
+ q(devanagari (nagari)) => [ q(Deva), q(Devanagari (Nagari)) ],
+ q(duployan shorthand, duployan stenography) => [ q(Dupl), q(Duployan shorthand, Duployan stenography) ],
+ q(ethiopic (geez)) => [ q(Ethi), q(Ethiopic (Geez)) ],
+ q(han (hanzi, kanji, hanja)) => [ q(Hani), q(Han (Hanzi, Kanji, Hanja)) ],
+ q(hangul (hangul, hangeul)) => [ q(Hang), q(Hangul (Hangul, Hangeul)) ],
+ q(hanunoo (hanunoo)) => [ q(Hano), q(Hanunoo (Hanunoo)) ],
+ q(indus (harappan)) => [ q(Inds), q(Indus (Harappan)) ],
+ q(khudawadi, sindhi) => [ q(Sind), q(Khudawadi, Sindhi) ],
+ q(lepcha (rong)) => [ q(Lepc), q(Lepcha (Rong)) ],
+ q(lisu (fraser)) => [ q(Lisu), q(Lisu (Fraser)) ],
+ q(mandaic, mandaean) => [ q(Mand), q(Mandaic, Mandaean) ],
+ q(meitei mayek (meithei, meetei)) => [ q(Mtei), q(Meitei Mayek (Meithei, Meetei)) ],
+ q(miao (pollard)) => [ q(Plrd), q(Miao (Pollard)) ],
+ q(moon (moon code, moon script, moon type)) => [ q(Moon), q(Moon (Moon code, Moon script, Moon type)) ],
+ q(mro, mru) => [ q(Mroo), q(Mro, Mru) ],
+ q(myanmar (burmese)) => [ q(Mymr), q(Myanmar (Burmese)) ],
+ q(nakhi geba ('na-'khi ggo-baw, naxi geba)) => [ q(Nkgb), q(Nakhi Geba ('Na-'Khi Ggo-baw, Naxi Geba)) ],
+ q(ol chiki (ol cemet, ol, santali)) => [ q(Olck), q(Ol Chiki (Ol Cemet, Ol, Santali)) ],
+ q(old north arabian (ancient north arabian)) => [ q(Narb), q(Old North Arabian (Ancient North Arabian)) ],
+ q(old turkic, orkhon runic) => [ q(Orkh), q(Old Turkic, Orkhon Runic) ],
+ q(rejang (redjang, kaganga)) => [ q(Rjng), q(Rejang (Redjang, Kaganga)) ],
+ q(sharada, sarada) => [ q(Shrd), q(Sharada, Sarada) ],
+ q(shavian (shaw)) => [ q(Shaw), q(Shavian (Shaw)) ],
+ q(sindhi) => [ q(Sind), q(Sindhi) ],
+ q(tagalog (baybayin, alibata)) => [ q(Tglg), q(Tagalog (Baybayin, Alibata)) ],
+ q(tai tham (lanna)) => [ q(Lana), q(Tai Tham (Lanna)) ],
+ q(takri, takri, tankri) => [ q(Takr), q(Takri, Takri, Tankri) ],
+ q(tifinagh (berber)) => [ q(Tfng), q(Tifinagh (Berber)) ],
+ q(tiruta) => [ q(Tirh), q(Tiruta) ],
+ q(warang citi (varang kshiti)) => [ q(Wara), q(Warang Citi (Varang Kshiti)) ],
+};
+
+$Locale::Codes::Retired{'script'}{'num'}{'name'} = {
+ q(old hungarian) => [ q(176), q(Old Hungarian) ],
+ q(tiruta) => [ q(326), q(Tiruta) ],
+};
+
+
+1;
Added: vendor/perl/dist/cpan/Locale-Codes/t/alias_code_old.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/alias_code_old.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/alias_code_old.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,113 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Country;
+
+%type = ( "LOCALE_CODE_ALPHA_2" => LOCALE_CODE_ALPHA_2,
+ "LOCALE_CODE_ALPHA_3" => LOCALE_CODE_ALPHA_3,
+ "LOCALE_CODE_NUMERIC" => LOCALE_CODE_NUMERIC,
+ );
+
+sub test {
+ my(@test) = @_;
+
+ if ($test[0] eq "alias_code") {
+ shift(@test);
+ $test[2] = $type{$test[2]}
+ if (@test == 3 && $test[2] && exists $type{$test[2]});
+ return Locale::Country::alias_code(@test,"nowarn");
+
+ } elsif ($test[0] eq "country2code") {
+ shift(@test);
+ $test[1] = $type{$test[1]} if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return country2code(@test);
+
+ } else {
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return code2country(@test);
+ }
+}
+
+$tests = "
+
+gb
+ ~
+ United Kingdom
+
+uk
+ ~
+ _undef_
+
+country2code
+United Kingdom
+ ~
+ gb
+
+alias_code uk gb LOCALE_CODE_FOO ~ 0
+
+alias_code uk x1 ~ 0
+
+alias_code us gb ~ 0
+
+alias_code uk gb LOCALE_CODE_ALPHA_3 ~ 0
+
+gb
+ ~
+ United Kingdom
+
+uk
+ ~
+ _undef_
+
+country2code
+United Kingdom
+ ~
+ gb
+
+alias_code uk gb ~ uk
+
+gb
+ ~
+ United Kingdom
+
+uk
+ ~
+ United Kingdom
+
+country2code
+United Kingdom
+ ~
+ uk
+
+";
+
+print "alias_code (old)...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/code2country_old.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/code2country_old.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/code2country_old.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,144 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Country;
+
+%type = ( "LOCALE_CODE_ALPHA_2" => LOCALE_CODE_ALPHA_2,
+ "LOCALE_CODE_ALPHA_3" => LOCALE_CODE_ALPHA_3,
+ "LOCALE_CODE_NUMERIC" => LOCALE_CODE_NUMERIC,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]} if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return code2country(@test);
+}
+
+$tests = "
+
+~ _undef_
+
+_undef_ ~ _undef_
+
+zz ~ _undef_
+
+zz LOCALE_CODE_ALPHA_2 ~ _undef_
+
+zz LOCALE_CODE_ALPHA_3 ~ _undef_
+
+zz LOCALE_CODE_NUMERIC ~ _undef_
+
+ja ~ _undef_
+
+uk ~ _undef_
+
+BO
+ ~
+ Bolivia, Plurinational State of
+
+BO
+LOCALE_CODE_ALPHA_2
+ ~
+ Bolivia, Plurinational State of
+
+bol
+LOCALE_CODE_ALPHA_3
+ ~
+ Bolivia (Plurinational State of)
+
+pk ~ Pakistan
+
+sn ~ Senegal
+
+us
+ ~
+ United States
+
+ad ~ Andorra
+
+ad LOCALE_CODE_ALPHA_2 ~ Andorra
+
+and LOCALE_CODE_ALPHA_3 ~ Andorra
+
+020 LOCALE_CODE_NUMERIC ~ Andorra
+
+48 LOCALE_CODE_NUMERIC ~ Bahrain
+
+zw ~ Zimbabwe
+
+gb
+ ~
+ United Kingdom
+
+kz ~ Kazakhstan
+
+mo ~ Macao
+
+tl LOCALE_CODE_ALPHA_2 ~ Timor-Leste
+
+tls LOCALE_CODE_ALPHA_3 ~ Timor-Leste
+
+626 LOCALE_CODE_NUMERIC ~ Timor-Leste
+
+BO LOCALE_CODE_ALPHA_3 ~ _undef_
+
+BO LOCALE_CODE_NUMERIC ~ _undef_
+
+ax
+ ~
+ Aland Islands
+
+ala
+LOCALE_CODE_ALPHA_3
+ ~
+ Aland Islands
+
+248
+LOCALE_CODE_NUMERIC
+ ~
+ Aland Islands
+
+scg
+LOCALE_CODE_ALPHA_3
+ ~
+ _undef_
+
+891
+LOCALE_CODE_NUMERIC
+ ~
+ _undef_
+
+rou LOCALE_CODE_ALPHA_3 ~ Romania
+
+";
+
+print "code2country (old)...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
+
Added: vendor/perl/dist/cpan/Locale-Codes/t/code2langext.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/code2langext.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/code2langext.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Codes::LangExt;
+
+%type = ( "LOCALE_LANGEXT_ALPHA" => LOCALE_LANGEXT_ALPHA,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return code2langext(@test);
+}
+
+$tests = "
+
+zzz ~ _undef_
+
+acm
+ ~
+ Mesopotamian Arabic
+
+";
+
+print "code2langext...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/code2langfam.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/code2langfam.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/code2langfam.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Codes::LangFam;
+
+%type = ( "LOCALE_LANGFAM_ALPHA" => LOCALE_LANGFAM_ALPHA,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return code2langfam(@test);
+}
+
+$tests = "
+
+zzz ~ _undef_
+
+apa
+ ~
+ Apache languages
+
+";
+
+print "code2langfam...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/code2langvar.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/code2langvar.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/code2langvar.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Codes::LangVar;
+
+%type = ( "LOCALE_LANGVAR_ALPHA" => LOCALE_LANGVAR_ALPHA,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return code2langvar(@test);
+}
+
+$tests = "
+
+zzz ~ _undef_
+
+arevela
+ ~
+ Eastern Armenian
+
+";
+
+print "code2langvar...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/country2code_old.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/country2code_old.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/country2code_old.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,183 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Country;
+
+%type = ( "LOCALE_CODE_ALPHA_2" => LOCALE_CODE_ALPHA_2,
+ "LOCALE_CODE_ALPHA_3" => LOCALE_CODE_ALPHA_3,
+ "LOCALE_CODE_NUMERIC" => LOCALE_CODE_NUMERIC,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]} if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return country2code(@test);
+}
+
+$tests = "
+
+kazakhstan
+ ~
+ kz
+
+kazakstan
+ ~
+ kz
+
+macao
+ ~
+ mo
+
+macau
+ ~
+ mo
+
+
+~ _undef_
+
+_undef_
+ ~
+ _undef_
+
+Banana
+ ~
+ _undef_
+
+japan
+ ~
+ jp
+
+Japan
+ ~
+ jp
+
+United States
+ ~
+ us
+
+United Kingdom
+ ~
+ gb
+
+Andorra
+ ~
+ ad
+
+Zimbabwe
+ ~
+ zw
+
+Iran
+ ~
+ ir
+
+North Korea
+ ~
+ kp
+
+South Korea
+ ~
+ kr
+
+Libya
+ ~
+ ly
+
+Syrian Arab Republic
+ ~
+ sy
+
+Svalbard
+ ~
+ _undef_
+
+Jan Mayen
+ ~
+ _undef_
+
+USA
+ ~
+ us
+
+United States of America
+ ~
+ us
+
+Great Britain
+ ~
+ gb
+
+Burma
+ ~
+ mm
+
+French Southern and Antarctic Lands
+ ~
+ tf
+
+Aland Islands
+ ~
+ ax
+
+Yugoslavia
+ ~
+ _undef_
+
+Serbia and Montenegro
+ ~
+ _undef_
+
+East Timor
+ ~
+ tl
+
+Zaire
+ ~
+ _undef_
+
+Congo, The Democratic Republic of the
+ ~
+ cd
+
+Congo, The Democratic Republic of the
+LOCALE_CODE_ALPHA_3
+ ~
+ cod
+
+Congo, The Democratic Republic of the
+LOCALE_CODE_NUMERIC
+ ~
+ 180
+
+";
+
+print "country2code (old)...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
+
Added: vendor/perl/dist/cpan/Locale-Codes/t/country_code2code_old.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/country_code2code_old.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/country_code2code_old.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,78 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Country;
+use Locale::Codes::Constants;
+
+%type = ( "LOCALE_CODE_ALPHA_2" => LOCALE_CODE_ALPHA_2,
+ "LOCALE_CODE_ALPHA_3" => LOCALE_CODE_ALPHA_3,
+ "LOCALE_CODE_NUMERIC" => LOCALE_CODE_NUMERIC,
+ );
+
+sub test {
+ my($code,$type_in,$type_out) = @_;
+ $type_in = $type{$type_in} if ($type_in && exists $type{$type_in});
+ $type_out = $type{$type_out} if ($type_out && exists $type{$type_out});
+
+ return country_code2code($code,$type_in,$type_out);
+}
+
+$tests = "
+
+bo LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_2 ~ bo
+
+bo LOCALE_CODE_ALPHA_3 LOCALE_CODE_ALPHA_3 ~ _undef_
+
+zz LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 ~ _undef_
+
+zz LOCALE_CODE_ALPHA_3 LOCALE_CODE_ALPHA_3 ~ _undef_
+
+zz LOCALE_CODE_ALPHA_2 0 ~ _undef_
+
+bo LOCALE_CODE_ALPHA_2 0 ~ _undef_
+
+_blank_ 0 0 ~ _undef_
+
+BO LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 ~ bol
+
+bol LOCALE_CODE_ALPHA_3 LOCALE_CODE_ALPHA_2 ~ bo
+
+zwe LOCALE_CODE_ALPHA_3 LOCALE_CODE_ALPHA_2 ~ zw
+
+858 LOCALE_CODE_NUMERIC LOCALE_CODE_ALPHA_3 ~ ury
+
+858 LOCALE_CODE_NUMERIC LOCALE_CODE_ALPHA_3 ~ ury
+
+tr LOCALE_CODE_ALPHA_2 LOCALE_CODE_NUMERIC ~ 792
+
+";
+
+print "country_code2code (old)...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/country_old.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/country_old.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/country_old.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,247 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Country;
+
+%type = ( "LOCALE_CODE_ALPHA_2" => LOCALE_CODE_ALPHA_2,
+ "LOCALE_CODE_ALPHA_3" => LOCALE_CODE_ALPHA_3,
+ "LOCALE_CODE_NUMERIC" => LOCALE_CODE_NUMERIC,
+ "LOCALE_CODE_FIPS" => LOCALE_CODE_FIPS,
+ );
+
+sub test {
+ my(@test) = @_;
+
+ if ($test[0] eq "rename_country") {
+ shift(@test);
+ $test[2] = $type{$test[2]}
+ if (@test == 3 && $test[2] && exists $type{$test[2]});
+ return Locale::Country::rename_country(@test,"nowarn");
+
+ } elsif ($test[0] eq "add_country") {
+ shift(@test);
+ $test[2] = $type{$test[2]}
+ if (@test == 3 && $test[2] && exists $type{$test[2]});
+ return Locale::Country::add_country(@test,"nowarn");
+
+ } elsif ($test[0] eq "delete_country") {
+ shift(@test);
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return Locale::Country::delete_country(@test,"nowarn");
+
+ } elsif ($test[0] eq "add_country_alias") {
+ shift(@test);
+ return Locale::Country::add_country_alias(@test,"nowarn");
+
+ } elsif ($test[0] eq "delete_country_alias") {
+ shift(@test);
+ return Locale::Country::delete_country_alias(@test,"nowarn");
+
+ } elsif ($test[0] eq "rename_country_code") {
+ shift(@test);
+ $test[2] = $type{$test[2]}
+ if (@test == 3 && $test[2] && exists $type{$test[2]});
+ return Locale::Country::rename_country_code(@test,"nowarn");
+
+ } elsif ($test[0] eq "add_country_code_alias") {
+ shift(@test);
+ $test[2] = $type{$test[2]}
+ if (@test == 3 && $test[2] && exists $type{$test[2]});
+ return Locale::Country::add_country_code_alias(@test,"nowarn");
+
+ } elsif ($test[0] eq "delete_country_code_alias") {
+ shift(@test);
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return Locale::Country::delete_country_code_alias(@test,"nowarn");
+
+ } elsif ($test[0] eq "country2code") {
+ shift(@test);
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return country2code(@test);
+
+ } else {
+ shift(@test) if ($test[0] eq "code2country");
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return code2country(@test);
+ }
+}
+
+$tests = "
+
+###################################
+# Test rename_country
+
+gb
+ ~
+ United Kingdom
+
+rename_country x1 NewName ~ 0
+
+rename_country gb NewName LOCALE_CODE_FOO ~ 0
+
+rename_country gb Macao ~ 0
+
+rename_country gb NewName LOCALE_CODE_ALPHA_3 ~ 0
+
+gb
+ ~
+ United Kingdom
+
+rename_country gb NewName ~ 1
+
+gb
+ ~
+ NewName
+
+###################################
+# Test add_country
+
+xx ~ _undef_
+
+add_country xx Bolivia ~ 0
+
+add_country fi Xxxxx ~ 0
+
+add_country xx Xxxxx ~ 1
+
+xx ~ Xxxxx
+
+###################################
+# Test add_country_alias
+
+add_country_alias FooBar NewName ~ 0
+
+add_country_alias Australia Angola ~ 0
+
+country2code Australia ~ au
+
+country2code DownUnder ~ _undef_
+
+add_country_alias Australia DownUnder ~ 1
+
+country2code DownUnder ~ au
+
+###################################
+# Test delete_country_alias
+
+country2code uk ~ gb
+
+delete_country_alias Foobar ~ 0
+
+delete_country_alias UK ~ 1
+
+country2code uk ~ _undef_
+
+delete_country_alias Angola ~ 0
+
+###################################
+# Test delete_country
+
+country2code Angola ~ ao
+
+country2code Angola LOCALE_CODE_ALPHA_3 ~ ago
+
+delete_country ao ~ 1
+
+country2code Angola ~ _undef_
+
+country2code Angola LOCALE_CODE_ALPHA_3 ~ ago
+
+###################################
+# Test rename_country_code
+
+code2country zz ~ _undef_
+
+code2country ar ~ Argentina
+
+country2code Argentina ~ ar
+
+rename_country_code ar us ~ 0
+
+rename_country_code ar zz ~ 1
+
+rename_country_code us ar ~ 0
+
+code2country zz ~ Argentina
+
+code2country ar ~ Argentina
+
+country2code Argentina ~ zz
+
+rename_country_code zz ar ~ 1
+
+code2country zz ~ Argentina
+
+code2country ar ~ Argentina
+
+country2code Argentina ~ ar
+
+###################################
+# Test add_country_code_alias and
+# delete_country_code_alias
+
+code2country bm ~ Bermuda
+
+code2country yy ~ _undef_
+
+country2code Bermuda ~ bm
+
+add_country_code_alias bm us ~ 0
+
+add_country_code_alias bm zz ~ 0
+
+add_country_code_alias bm yy ~ 1
+
+code2country bm ~ Bermuda
+
+code2country yy ~ Bermuda
+
+country2code Bermuda ~ bm
+
+delete_country_code_alias us ~ 0
+
+delete_country_code_alias ww ~ 0
+
+delete_country_code_alias yy ~ 1
+
+code2country bm ~ Bermuda
+
+code2country yy ~ _undef_
+
+country2code Bermuda ~ bm
+
+";
+
+print "country (old; semi-private)...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/currency2code_old.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/currency2code_old.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/currency2code_old.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,78 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Currency;
+
+%type = ( "LOCALE_CURR_ALPHA" => LOCALE_CURR_ALPHA,
+ "LOCALE_CURR_NUMERIC" => LOCALE_CURR_NUMERIC,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return currency2code(@test);
+}
+
+$tests = "
+
+_blank_ ~ _undef_
+
+Banana ~ _undef_
+
+~ _undef_
+
+_undef_ ~ _undef_
+
+
+Canadian Dollar
+ ~
+ CAD
+
+Belize Dollar
+ ~
+ BZD
+
+PULA
+ ~
+ BWP
+
+Riel
+ ~
+ KHR
+
+Zimbabwe Dollar
+ ~
+ ZWL
+
+";
+
+print "currency2code (old)...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/langext2code.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/langext2code.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/langext2code.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Codes::LangExt;
+
+%type = ( "LOCALE_LANGEXT_ALPHA" => LOCALE_LANGEXT_ALPHA,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return langext2code(@test);
+}
+
+$tests = "
+
+_blank_ ~ _undef_
+
+Mesopotamian Arabic
+ ~
+ acm
+
+";
+
+print "langext2code...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/langfam2code.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/langfam2code.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/langfam2code.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Codes::LangFam;
+
+%type = ( "LOCALE_LANGFAM_ALPHA" => LOCALE_LANGFAM_ALPHA,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return langfam2code(@test);
+}
+
+$tests = "
+
+_blank_ ~ _undef_
+
+Apache languages
+ ~
+ apa
+
+";
+
+print "langfam2code...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/language_old.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/language_old.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/language_old.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,99 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Language;
+
+%type = ( "LOCALE_LANG_ALPHA_2" => LOCALE_LANG_ALPHA_2,
+ "LOCALE_LANG_ALPHA_3" => LOCALE_LANG_ALPHA_3,
+ "LOCALE_LANG_TERM" => LOCALE_LANG_TERM,
+ );
+
+sub test {
+ my(@test) = @_;
+
+ if ($test[0] eq "rename_language") {
+ shift(@test);
+ $test[2] = $type{$test[2]}
+ if (@test == 3 && $test[2] && exists $type{$test[2]});
+ return Locale::Language::rename_language(@test,"nowarn");
+
+ } elsif ($test[0] eq "add_language") {
+ shift(@test);
+ $test[2] = $type{$test[2]}
+ if (@test == 3 && $test[2] && exists $type{$test[2]});
+ return Locale::Language::add_language(@test,"nowarn");
+
+ } elsif ($test[0] eq "delete_language") {
+ shift(@test);
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return Locale::Language::delete_language(@test,"nowarn");
+
+ } elsif ($test[0] eq "add_language_alias") {
+ shift(@test);
+ return Locale::Language::add_language_alias(@test,"nowarn");
+
+ } elsif ($test[0] eq "delete_language_alias") {
+ shift(@test);
+ return Locale::Language::delete_language_alias(@test,"nowarn");
+
+ } elsif ($test[0] eq "language2code") {
+ shift(@test);
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return language2code(@test);
+
+ } else {
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return code2language(@test);
+ }
+}
+
+$tests = "
+
+zu ~ Zulu
+
+rename_language zu NewName LOCALE_LANG_FOO ~ 0
+
+rename_language zu English LOCALE_LANG_ALPHA_2 ~ 0
+
+rename_language zu NewName LOCALE_LANG_ALPHA_3 ~ 0
+
+zu ~ Zulu
+
+rename_language zu NewName LOCALE_LANG_ALPHA_2 ~ 1
+
+zu ~ NewName
+
+";
+
+print "language (old; semi-private)...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/langvar2code.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/langvar2code.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/langvar2code.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Codes::LangVar;
+
+%type = ( "LOCALE_LANGVAR_ALPHA" => LOCALE_LANGVAR_ALPHA,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return langvar2code(@test);
+}
+
+$tests = "
+
+_blank_ ~ _undef_
+
+Eastern Armenian
+ ~
+ arevela
+
+";
+
+print "langvar2code...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Locale-Codes/t/script2code_old.t
===================================================================
--- vendor/perl/dist/cpan/Locale-Codes/t/script2code_old.t (rev 0)
+++ vendor/perl/dist/cpan/Locale-Codes/t/script2code_old.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,55 @@
+#!/usr/bin/perl -w
+
+require 5.002;
+
+$runtests=shift(@ARGV);
+if ( -f "t/testfunc.pl" ) {
+ require "t/testfunc.pl";
+ $dir="./lib";
+ $tdir="t";
+} elsif ( -f "testfunc.pl" ) {
+ require "testfunc.pl";
+ $dir="../lib";
+ $tdir=".";
+} else {
+ die "ERROR: cannot find testfunc.pl\n";
+}
+
+unshift(@INC,$dir);
+use Locale::Script;
+
+%type = ( "LOCALE_SCRIPT_ALPHA" => LOCALE_SCRIPT_ALPHA,
+ "LOCALE_SCRIPT_NUMERIC" => LOCALE_SCRIPT_NUMERIC,
+ );
+
+sub test {
+ my(@test) = @_;
+ $test[1] = $type{$test[1]}
+ if (@test == 2 && $test[1] && exists $type{$test[1]});
+ return script2code(@test);
+}
+
+$tests = "
+
+~ _undef_
+
+Phoenician ~ Phnx
+
+Phoenician LOCALE_SCRIPT_NUMERIC ~ 115
+
+";
+
+print "script2code (old)...\n";
+test_Func(\&test,$tests,$runtests);
+
+1;
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: nil
+# cperl-indent-level: 3
+# cperl-continued-statement-offset: 2
+# cperl-continued-brace-offset: 0
+# cperl-brace-offset: 0
+# cperl-brace-imaginary-offset: 0
+# cperl-label-offset: -2
+# End:
Added: vendor/perl/dist/cpan/Math-Complex/ChangeLog
===================================================================
--- vendor/perl/dist/cpan/Math-Complex/ChangeLog (rev 0)
+++ vendor/perl/dist/cpan/Math-Complex/ChangeLog 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,521 @@
+2012-02-01 Zefram <zefram at fysh.org>
+
+ * Don't declare "tan" operator overloading on Math::Complex
+ objects, because there is no such overloading type [rt.cpan.org
+ #74288].
+
+ * Remove execute bit from test scripts in CPAN tarball.
+
+ * Release Math::Complex 1.59 + Math::Trig 1.23.
+
+2011-06-21 Zefram <zefram at fysh.org>
+
+ * Declare package variables with "our" rather than "use vars".
+
+ * Corresponding to "our" usage, check for minimum Perl version
+ 5.006.
+
+ * Remove $ENV{PERL_CORE} logic from test suite, which is no
+ longer desired in the core.
+
+ * In test suite, remove obsolete and now-incomplete handling of
+ unavailability of Test::More.
+
+ * Declare module dependencies.
+
+ * Release Math::Complex 1.58 + Math::Trig 1.22.
+
+2011-05-03 Zefram <zefram at fysh.org>
+
+ * Add copy constructor and arrange for it to be called
+ appropriately, problem found by David Madore and Alexandr
+ Ciornii.
+
+ * Correctly format polarwise when a numeric format specifier is
+ given, problem found by TomC.
+
+ * More stable great_circle_direction algorithm, problem found
+ by Daniel Burr.
+
+ * Release Math::Complex 1.57 + Math::Trig 1.21.
+
+2009-02-08 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Fix qw(abs cos exp log sin sqrt) without argument, problem
+ found by Steffen Mueller, 5.10-aware (lexical $_) fix by Abigail.
+
+ * Release Math::Complex 1.56 + Math::Trig 1.20.
+
+2008-12-27 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Resolve rt.cpan.org report:
+ "#39045: great_circle_direction gives wrong answer if 5th argument is supplied"
+ by calling great_circle_distance() with an explicit argument
+ list in great_circle_direction().
+
+ * Release Math::Complex 1.55 + Math::Trig 1.19.
+
+2008-04-04 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * The SIGFPE catcher in Complex.pm and Trig.t was { }, not sub { }.
+
+ * Shuffle the Inf-guessing guesses a bit to try infinities first,
+ and also 2**99999 before exp(99999), seems to be more reliable
+ for generating the infinity for some odd reason (the ** is
+ implemented via exp() anyway?)
+
+ * In cosh() and sinh() more robustly produce Inf() when needed,
+ even when exp() seems to "stick" into DBL_MAX and not go to Inf.
+
+ * Release Math::Complex 1.54 + Math::Trig 1.18.
+
+2008-04-01 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Resolved rt.cpan.org report:
+ "#34605: Math::Trig(3pm) man page feedback"
+ (Trig.pm talked of "arcus hyperbolic sine", which is wrong,
+ it is either "area hyperbolic sine" or "inverse hyperbolic sine")
+
+ * Tweaked also the code comments a bit to speak consistently of
+ "area/inverse hyperbolic ..."
+
+ * Resolved rt.cpan.org report:
+ "#34269: Math::Trig::great_circle_destination"
+ (One cannot combine the results great_circle_distance(A, B) and
+ great_circle_direction(A, B) to get great_circle_destination(A, ...)
+ to return B, because the bearing keeps changing in the general case)
+
+ * Release Math::Complex 1.53 + Math::Trig 1.17.
+
+2008-02-11 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Duh. Forgot 128-bit option from the %DBL_MAX table.
+
+ * Release Math::Complex 1.52 + Math::Trig 1.16.
+
+2008-02-10 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Make the nv max detection to work also with
+ long doubles, reported by Nicholas Clark
+ [core perl change #33268]
+
+ * Release Math::Complex 1.51 + Math::Trig 1.15.
+ (1.50 skipped because of "1.5" idiocy.)
+
+2008-04-04 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * The debugging output in Complex.pm BEGIN was not nice:
+ remove that, resolving rt.cpan.org #32919.
+
+ * Make the detecting of Infinity even more relaxed:
+ just be happy with defined() and "big enough".
+ (Switch the '1e999' as last resort, though.)
+
+ * Release Math::Complex 1.49 + Math::Trig 1.14.
+
+2008-01-29 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * In HP-UX the infinity is stringified as "++" and
+ the negative infinity as "--", fix from H. Merijn Brand.
+
+ * Release Math::Complex 1.48 + Math::Trig 1.13.
+
+2008-01-16 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * The great circle tests with small angles didn't work
+ with long doubles in Mac OS X, reported by conrad.
+ Oh, the joy of floating point. Fudged the test hopefully enough.
+ Could special case going from point A to point A,
+ but that would be cheating. (For really small movements
+ could also just do Pythagorean plane distance.)
+
+ * Release Math::Complex 1.47 + Math::Trig 1.12.
+
+2008-01-16 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Fix a typo in the asin_real/acos_real documentation
+ noticed by Alexej Sveshnikov.
+
+ * Release Math::Complex 1.46 + Math::Trig 1.11.
+
+2008-01-15 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Address [rt.cpan.org #32291] Wrong (Math::Complex) results in great_circle family of functions
+ Fix gratefully received from the reporter of the bug,
+ Alexej Sveshnikov.
+
+ * Added the two new interfaces added by the fix for the
+ rt.cpan.org #32291, asin_real() and acos_real(), also
+ to the public interface.
+
+ * Release Math::Complex 1.45 + Math::Trig 1.10.
+
+2008-01-11 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Address rt.cpan.org #27186: Shadowed By the Core Version
+ by adding INSTALLDIRS => 'perl' to Makefile.PL.
+
+ * Ignore SIGFPE in Trig.t when doing arithmetics with
+ infinities (avoids a coredump in netbsd-alpha, found
+ by David Cantrell). Document this fun.
+
+ * Make Math::Complex and Math::Trig documentations to
+ refer to each other.
+
+ * Release Math::Complex 1.44 + Math::Trig 1.09.
+
+2008-01-09 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * sinh(1e4) was not enough to go to infinity in AMD64
+ with long doubles (sinh(1e5) was), and test.pl:is()
+ didn't work for infinities (subtle overloading issue.)
+ Fix from Nicholas Clark.
+
+ * Release Math::Complex 1.43 + Math::Trig 1.08.
+
+2008-01-07 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * The infinity detection was wrong for Microsoft libc,
+ there infinity is '1.#INF'. Now made the detection
+ hopefully much more robust.
+
+ * Release Math::Complex 1.42 + Math::Trig 1.07.
+
+2008-01-06 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * PAUSE upload had some issues which messed up 1.39 upload,
+ reissue after reviewing (and fixing) the diffs.
+
+ * Release Math::Complex 1.41 (1.40 skipped because
+ of silly "1.4.tar.gz" feature) + Math::Trig 1.07.
+ [deleted from CPAN because broken in Win32]
+
+2008-01-06 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Add the standard "same terms as Perl itself" license
+ to both Complex.pm and Trig.pm.
+
+ * Add Inf() as an exportable sub, it returns the infinity
+ (or the best floating double imitation of it).
+
+ * Make the BEGIN block of Complex.pm croak if it cannot
+ find an infinity. This may be deadly on some platforms
+ but then again, Complex.pm has returned infinities for
+ quite some time now.
+
+ * tanh(a big enough number) was returning NaN in Unix and 1+NaN
+ in Windows when the right answer is 1 (for IEEE doubles
+ the limit seemed to be 709 vs 710). Added tests for
+ sinh/cosh/tanh/sech/csch for 100/-100, and for sinh/cosh
+ with 1e4 returning Inf(). Reported by Roberto Congiu.
+
+ * Added sanity check tests to Trig.t for all the trigonometric
+ and hyperbolic functions (staying in real axis, not going to
+ complex plane).
+
+ * Release Math::Complex 1.39 + Math::Trig 1.06.
+ [deleted from CPAN because of PAUSE upload problems]
+
+2007-12-30 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * The example for great_circle_waypoint() had latitude and
+ longitude switched; reported by Chris Heys.
+
+ * Cosmetic changes in test files.
+
+ * Release Math::Complex 1.38 + Math::Trig 1.05.
+
+2007-01-21 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * great_circle_waypoint() was broken (the latitudes
+ were garbage); report and fix by Uwe Girlich.
+
+ * local()ize $! in the BEGIN block when looking for Inf.
+
+ * Release Math::Complex 1.37.
+
+2006-07-04 Jarkko Hietaniemi <jhi at iki.fi>
+
+ * Move the pi-constants from Math::Trig to Math::Complex.
+
+ * Hide some of the internal-use-only functions/methods
+ by prepending an underscore to the names.
+
+ * Update Dan Lewart's email address.
+
+ * Introduce pod.t and pod-coverage.t; make the tests
+ to be correctly skipped if Test::More or Test::Pod::Coverage
+ are not available.
+
+ * Tiny doc tweaks.
+
+ * Add a TODO file.
+
+ * Grab the Math::Complex and Math::Trig changes from
+ the Perl 5 Perforce repository (see below).
+
+ * CPAN release Math::Complex 1.36 + Math::Trig 1.04.
+
+Changes below this are changes of the Perl 5 Perforce repository
+that somehow touched Math::Complex, Math::Trig, and/or their tests.
+They brought Math::Complex to 1.35 and Math::Trig to 1.03,
+after which Math::Complex and Math::Trig were CPANized as 1.36 and 1.04.
+
+ [26219] on 2005/11/28 by stevep at stevep-mccoy
+
+ Subject: [PATCH] Math::Trig: blead and maint (doc patch only): s/Bay/Gulf/ and do away with bad quotes
+ From: jhi at cc.hut.fi (Jarkko Hietaniemi)
+ Date: Sun, 27 Nov 2005 23:04:31 +0200 (EET)
+ Message-Id: <20051127210431.F1D2C6CF55 at ugli.hut.fi>
+
+ [25414] on 2005/09/14 by rgs at bloom
+
+ Subject: [PATCH] Math::Complex and Math::Trig updates (Re: [perl #37117] Math::Complex atan2 bug)
+ From: Jarkko Hietaniemi <jhietaniemi at gmail.com>
+ Date: Wed, 14 Sep 2005 09:26:11 +0300
+ Message-ID: <4327C283.80706 at gmail.com>
+
+ [19376] on 2003/05/02 by jhi at kosh
+
+ great_circle_direction() was broken,
+ reported by Alexander Becher.
+
+ [18412] on 2003/01/03 by hv at hv-crypt.org
+
+ Integrate from maint-5.8 #18348:
+ Make Math::Trig a little bit more better behaved module citizen.
+
+ [17197] on 2002/06/12 by jhi at alpha
+
+ Test relying on undefined behaviour of atan2(0, 0)
+ (valiantly debugged by Mark Lutz).
+
+ [14508] on 2002/01/31 by jhi at alpha
+
+ Daniel S. Lewart adopts the Math::Complex.
+
+ [14507] on 2002/01/31 by jhi at alpha
+
+ More Complex DWIMmery.
+
+ [12954] on 2001/11/12 by jhi at alpha
+
+ Subject: [PATCH] a few typo fixes
+ From: Jeffrey Friedl <jfriedl at yahoo.com>
+ Date: Sun, 11 Nov 2001 21:15:18 -0800 (PST)
+ Message-Id: <200111120515.fAC5FIc74795 at ventrue.corp.yahoo.com>
+
+ Patching README.foo instead of pod/perlfoo.pod,
+ not patching Math::BigInt (Tels will take care of that),
+ dropping broken hv.c and sv.h patches, patching libnetcfg.PL
+ and perldoc.PL instead of libnetcfg and perldoc, patching
+ ext/Digest/MD5/t/files.t since MD5.pm was changed.
+
+ [12113] on 2001/09/21 by ams at ams-lustre
+
+ Subject: [PATCH] avoid v-strings with require/use
+ From: Ronald J Kimball <rjk at linguist.Thayer.dartmouth.edu>
+ Date: Fri, 21 Sep 2001 12:34:40 -0400
+ Message-Id: <20010921123440.A148500 at linguist.thayer.dartmouth.edu>
+
+ [12041] on 2001/09/16 by jhi at alpha
+
+ Change use|require 5.005_64 to use|require 5.6.1.
+
+ [11016] on 2001/06/29 by jhi at alpha
+
+ Bump up the VERSIONs of modules that have changed since 5.6.0,
+ the modules found using a script written by Larry Schatzer Jr.
+
+ [10676] on 2001/06/18 by jhi at alpha
+
+ The Grand Trek: move the *.t files from t/ to lib/ and ext/.
+ No doubt I made some mistakes like missed some files or
+ misnamed some files. The naming rules were more or less:
+ (1) if the module is from CPAN, follows its ways, be it
+ t/*.t or test.pl.
+ (2) otherwise if there are multiple tests for a module
+ put them in a t/
+ (3) otherwise if there's only one test put it in Module.t
+ (4) helper files go to module/ (locale, strict, warnings)
+ (5) use longer filenames now that we can (but e.g. the
+ compat-0.6.t and the Text::Balanced test files still
+ were renamed to be more civil against the 8.3 people)
+ installperl was updated appropriately not to install the
+ *.t files or the help files from under lib.
+
+ TODO: some helper files still remain under t/ that could
+ follow their 'masters'. UPDATE: On second thoughts, why
+ should they. They can continue to live under t/lib, and
+ in fact the locale/strict/warnings helpers that were moved
+ could be moved back. This way the amount of non-installable
+ stuff under lib/ stays smaller.
+
+ [9504] on 2001/04/01 by jhi at alpha
+
+ Add great_circle_direction().
+
+ [9007] on 2001/03/03 by jhi at alpha
+
+ Integrate change #9006 from maintperl to mainline,
+ more robust quest for the infinite.
+
+ [8722] on 2001/02/09 by jhi at alpha
+
+ The Im() function wasn't returning zero for non-Math::Complex
+ arguments. The bug reported by John Gamble.
+
+ [7561] on 2000/11/05 by jhi at alpha
+
+ Add =pod to be tidy.
+
+ [6857] on 2000/08/28 by jhi at alpha
+
+ display_format used as a class method without arguments was broken,
+ reported in
+
+ Subject: Math::Complex->display_format() sets style to 'Math::Complex'
+ From: Yasushi Nakajima <sey at san.p.kyoto.jkc.co.jp>
+ Date: Mon, 28 Aug 2000 16:38:08 +0900 (JST)
+ Message-Id: <200008280738.QAA00215 at san.p.kyoto.jkc.co.jp>
+
+ [6750] on 2000/08/21 by jhi at alpha
+
+ Unicos/mk requires elaborate paranoia.
+
+ [6689] on 2000/08/18 by jhi at alpha
+
+ Fix the lib/complex failure of
+
+ From: abigail at foad.org
+ Subject: [ID 20000814.005] Not OK: perl v5.6.0 on i686-linux-64int 2.2.13
+ Date: 15 Aug 2000 04:06:38 -0000
+ Message-Id: <20000815040638.8524.qmail at foad.org>
+
+ Linux long double accuracy issue: something that
+ when printed with %g looks like "2" but int() of it is 1.
+
+ [6827] on 2000/08/25 by jhi at alpha
+
+ Support preserving extremely big/small angles.
+
+ [6076] on 2000/05/06 by gsar at auger
+
+ integrate cfgperl contents into mainline
+
+ [5974] on 2000/04/27 by gsar at auger
+
+ change#4197 somehow missed initializing PL_errors, meaning
+ sytax error queueing wasn't working outside eval"" at all;
+ also fixed eval"" to localize PL_error_count, so that compile-time
+ eval's don't clobber the error state of the outer context
+
+ [5954] on 2000/04/26 by gsar at auger
+
+ integrate cfgperl contents into mainline
+
+ [5641] on 2000/03/11 by gsar at auger
+
+ integrate cfgperl contents into mainline
+
+ [5611] on 2000/03/08 by gsar at auger
+
+ integrate cfgperl changes into mainline
+
+ [5507] on 2000/03/04 by gsar at auger
+
+ more whitespace removal (from Michael G Schwern)
+
+ [4874] on 2000/01/24 by gsar at auger
+
+ fix typos; avoid use constant for lowercase constants (produces
+ warnings now)
+
+ [4860] on 2000/01/23 by gsar at auger
+
+ s/use vars/our/g modules that aren't independently maintained on CPAN
+
+ [4604] on 1999/12/01 by gsar at auger
+
+ email address changes
+
+ [4008] on 1999/08/20 by gsar at auger
+
+ integrate cfgperl contents into mainline
+
+ [2830] on 1999/02/08 by gsar at sparc26
+
+ integrate cfgperl changes into mainline
+
+
+ [2620] on 1999/01/17 by gsar at aatma
+
+ integrate cfgperl changes into mainline, fix conflicts
+
+ [2219] on 1998/11/08 by gsar at aatma
+
+ integrate cfgperl changes into mainline
+
+ [1760] on 1998/08/08 by gsar at aatma
+
+ integrate maint-5.005 changes into mainline
+
+ [1357] on 1998/07/07 by gsar at aatma
+
+ doc tweaks suggested by Abigail, M.J.T. Guy, and Larry Wall
+
+ [1267] on 1998/06/30 by gsar at aatma
+
+ add patch to integrate Math::Trig::Radial into Math::Trig
+ From: Jarkko Hietaniemi <jhi at iki.fi>
+ Date: Mon, 29 Jun 1998 16:28:53 +0300 (EET DST)
+ Message-Id: <199806291328.QAA16916 at alpha.hut.fi>
+ Subject: [PATCH] 5.004_68 (or 5.004_04): radial trig
+
+ [1235] on 1998/06/28 by gsar at aatma
+
+ Complex.pm update
+ From: Jarkko Hietaniemi <jhi at iki.fi>
+ Date: Wed, 24 Jun 1998 15:19:05 +0300 (EET DST)
+ Message-Id: <199806241219.PAA04061 at alpha.hut.fi>
+ Subject: [PATCH] 5.004_68: Complex.pm, complex.t
+
+ [476] on 1998/02/06 by mbeattie at localhost
+
+ From: Jarkko Hietaniemi <jhi at iki.fi>
+ Subject: [PATCH] almost OK: perl 5.00457 on i386-freebsd-thread 3.0
+ Date: Wed, 4 Feb 1998 12:59:47 +0200 (EET)
+ Subject: Re: [PATCH] 5.004_04 and 5.004_57: Complex.pm and complex.t
+ Date: Thu, 5 Feb 1998 18:08:20 +0200 (EET)
+
+ [439] on 1998/01/27 by mbeattie at localhost
+
+ Integrate ansi branch into mainline (resolve -ay).
+
+ [296] on 1997/11/25 by mbeattie at localhost
+
+ Integrate from ansi branch to mainline.
+
+ [137] on 1997/10/16 by mbeattie at localhost
+
+ Merge maint-5.004 branch (5.004_04) with mainline.
+
+ [114] on 1997/10/08 by mbeattie at localhost
+
+ Merge maint-5.004 branch (5.004_03) with mainline.
+ MANIFEST is out of sync.
+
+ [77] on 1997/09/29 by mbeattie at localhost
+
+ Start merge with maint-5.004 branch by creating an ancestral
+ branch point via a fake resolution with the maint-merge branch.
+ See Perforce Tech Note 9 for details.
+
+ [18] on 1997/05/25 by mbeattie at localhost
+
+ First stab at 5.003 -> 5.004 integration.
+
+ [1] on 1997/03/28 by mbeattie at localhost
+
+ Perl 5.003 check-in
+
Added: vendor/perl/dist/cpan/Math-Complex/Makefile.PL
===================================================================
--- vendor/perl/dist/cpan/Math-Complex/Makefile.PL (rev 0)
+++ vendor/perl/dist/cpan/Math-Complex/Makefile.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+{ use 5.006; }
+
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+ NAME => 'Math::Complex',
+ VERSION_FROM => 'lib/Math/Complex.pm',
+ INSTALLDIRS => 'perl',
+ PREREQ_PM =>
+ {
+ 'Config' => 0,
+ 'Exporter' => 0,
+ 'ExtUtils::MakeMaker' => 0,
+ 'Scalar::Util' => '1.11',
+ 'Test::More' => 0,
+ 'overload' => 0,
+ 'strict' => 0,
+ 'warnings' => 0,
+ },
+ ($ExtUtils::MakeMaker::VERSION >= 6.3002 ?
+ ('LICENSE'=> 'perl', ) : ()),
+ );
Added: vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/a/X.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/a/X.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/a/X.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,5 @@
+package X;
+
+our $VERSION = '0.01';
+
+1;
Added: vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/b/X.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/b/X.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Load-Conditional/t/test_lib/b/X.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,5 @@
+package X;
+
+our $VERSION = '0.02';
+
+1;
Added: vendor/perl/dist/cpan/Module-Load-Conditional/t/to_load/NotMain.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Load-Conditional/t/to_load/NotMain.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Load-Conditional/t/to_load/NotMain.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+$VERSION = 1.23;
+
+1;
Added: vendor/perl/dist/cpan/Module-Load-Conditional/t/to_load/NotX.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Load-Conditional/t/to_load/NotX.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Load-Conditional/t/to_load/NotX.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+$VERSION = 1;
+
+package Y;
+
+$VERSION = 2;
+
+package NotX;
+
+$VERSION = 3;
+
+package X;
+
+$VERSION = 4;
+
+1;
Added: vendor/perl/dist/cpan/Module-Metadata/t/encoding.t
===================================================================
--- vendor/perl/dist/cpan/Module-Metadata/t/encoding.t (rev 0)
+++ vendor/perl/dist/cpan/Module-Metadata/t/encoding.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,30 @@
+#!perl
+
+use strict;
+use File::Spec;
+use Test::More;
+
+use Module::Metadata;
+
+if ("$]" < 5.008_003) {
+ plan skip_all => 'Encoding test needs at least perl 5.8.3';
+}
+
+my %versions = (
+ UTF8 => 3,
+ UTF16BE => 4,
+ UTF16LE => 5,
+);
+
+plan tests => 4 * scalar(keys %versions);
+
+for my $enc (sort keys %versions) {
+ my $pkg = "BOMTest::$enc";
+ my $vers = $versions{$enc};
+ my $pm = File::Spec->catfile(qw<t lib BOMTest> => "$enc.pm");
+ my $info = Module::Metadata->new_from_file($pm);
+ is( $info->name, $pkg, "$enc: default package was found" );
+ is( $info->version, $vers, "$enc: version for default package" );
+ is( $info->version('Heart'), '1', 'version for ASCII package' );
+ is( $info->version("C\x{153}ur"), '2', 'version for Unicode package' );
+}
Added: vendor/perl/dist/cpan/Module-Metadata/t/lib/0_1/Foo.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Metadata/t/lib/0_1/Foo.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Metadata/t/lib/0_1/Foo.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+package Foo;
+$Foo::VERSION = '0.1';
+1;
Added: vendor/perl/dist/cpan/Module-Metadata/t/lib/0_2/Foo.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Metadata/t/lib/0_2/Foo.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Metadata/t/lib/0_2/Foo.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+package Foo;
+$Foo::VERSION = '0.2';
+1;
Added: vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16BE.pm
===================================================================
(Binary files differ)
Index: vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16BE.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16BE.pm 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16BE.pm 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16BE.pm
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16LE.pm
===================================================================
(Binary files differ)
Index: vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16LE.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16LE.pm 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16LE.pm 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF16LE.pm
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF8.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF8.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Metadata/t/lib/BOMTest/UTF8.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,13 @@
+package Heart;
+
+our $VERSION = 1;
+
+package BOMTest::UTF8;
+
+our $VERSION = 3;
+
+package Cœur;
+
+our $VERSION = 2;
+
+1;
Added: vendor/perl/dist/cpan/Module-Metadata/t/version.t
===================================================================
--- vendor/perl/dist/cpan/Module-Metadata/t/version.t (rev 0)
+++ vendor/perl/dist/cpan/Module-Metadata/t/version.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+use strict;
+use Test::More;
+use Module::Metadata;
+use lib "t/lib/0_2";
+
+plan tests => 4;
+
+require Foo;
+is $Foo::VERSION, 0.2;
+
+my $meta = Module::Metadata->new_from_module("Foo", inc => [ "t/lib/0_1" ] );
+is $meta->version, 0.1;
+
+is $Foo::VERSION, 0.2;
+
+ok eval "use Foo 0.2; 1";
+
+
+
+
+
+
Added: vendor/perl/dist/cpan/Module-Pluggable/t/22trigger.t
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/22trigger.t (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/22trigger.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!perl -w
+
+use strict;
+use FindBin;
+use lib (($FindBin::Bin."/lib")=~/^(.*)$/);
+use Test::More tests => 7;
+
+my $foo;
+my @plugins;
+my @errors;
+ok($foo = TriggerTest->new(), "Created new TriggerTest");
+ok(@plugins = $foo->plugins, "Ran plugins");
+ok(@errors = $foo->errors, "Got errors");
+is_deeply([sort @plugins], ['TriggerTest::Plugin::After', 'TriggerTest::Plugin::CallbackAllow'], "Got the correct plugins");
+is_deeply([@errors], ['TriggerTest::Plugin::Error'], "Got the correct errors");
+ok(_is_loaded('TriggerTest::Plugin::CallbackDeny'), "CallbackDeny has been required");
+ok(!_is_loaded('TriggerTest::Plugin::Deny'), "Deny has not been required");
+
+
+# Stolen from Module::Loaded by Chris Williams (bingOs)
+sub _is_loaded {
+ my $pm = shift;
+ my $file = __PACKAGE__->_pm_to_file( $pm ) or return;
+ return $INC{$file} if exists $INC{$file};
+ return;
+}
+
+sub _pm_to_file {
+ my $pkg = shift;
+ my $pm = shift or return;
+ my $file = join '/', split '::', $pm;
+ $file .= '.pm';
+ return $file;
+}
+
+package TriggerTest;
+
+our @ERRORS;
+use strict;
+use Module::Pluggable require => 1,
+ on_require_error => sub { my $p = shift; push @ERRORS, $p; return 0 },
+ before_require => sub { my $p = shift; return !($p eq "TriggerTest::Plugin::Deny") },
+ after_require => sub { my $p = shift; return !($p->can('exclude') && $p->exclude) };
+
+sub new {
+ my $class = shift;
+ return bless {}, $class;
+}
+
+sub errors {
+ @ERRORS;
+}
+1;
+
Added: vendor/perl/dist/cpan/Module-Pluggable/t/23depth.t
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/23depth.t (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/23depth.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,38 @@
+#!perl -w
+
+use strict;
+use FindBin;
+use lib (($FindBin::Bin."/lib")=~/^(.*)$/);
+use Test::More tests => 2;
+
+
+my $min = MinTest->new();
+my $max = MaxTest->new();
+is_deeply([sort qw(MyOtherTest::Plugin::Bar MyOtherTest::Plugin::Foo MyOtherTest::Plugin::Quux)], [sort $max->plugins], "min depth");
+is_deeply([qw(MyOtherTest::Plugin::Quux::Foo)], [sort $min->plugins], "max depth");
+
+
+package MinTest;
+use File::Spec::Functions qw(catdir);
+use strict;
+use File::Spec::Functions qw(catdir);
+use Module::Pluggable search_path => "MyOtherTest::Plugin", min_depth => 4;
+
+
+sub new {
+ my $class = shift;
+ return bless {}, $class;
+}
+
+package MaxTest;
+use File::Spec::Functions qw(catdir);
+use strict;
+use File::Spec::Functions qw(catdir);
+use Module::Pluggable search_path => "MyOtherTest::Plugin", max_depth => 3;
+
+
+sub new {
+ my $class = shift;
+ return bless {}, $class;
+}
+1;
\ No newline at end of file
Added: vendor/perl/dist/cpan/Module-Pluggable/t/24local_inc_object.t
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/24local_inc_object.t (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/24local_inc_object.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+#!perl -w
+
+use strict;
+use FindBin;
+use Test::More tests => 2;
+
+my $inc = IncTest->new();
+my ($ta) = grep { ref($_) eq 'Text::Abbrev'} eval { local ($^W) = 0; $inc->plugins };
+ok($ta);
+is($ta->MPCHECK, "HELLO");
+
+package IncTest;
+use Module::Pluggable search_path => "Text",
+ search_dirs => "t/lib",
+ instantiate => 'module_pluggable',
+ on_require_error => sub { },
+ on_instantiate_error => sub { };
+
+sub new {
+ my $class = shift;
+ return bless {}, $class;
+}
+1;
Added: vendor/perl/dist/cpan/Module-Pluggable/t/24local_inc_package.t
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/24local_inc_package.t (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/24local_inc_package.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,17 @@
+#!perl -w
+
+use strict;
+use FindBin;
+use Test::More tests => 1;
+
+IncTest->new()->plugins;
+is(Text::Abbrev->MPCHECK, "HELLO");
+
+package IncTest;
+use Module::Pluggable search_path => "Text", search_dirs => "t/lib", require => 1;
+
+sub new {
+ my $class = shift;
+ return bless {}, $class;
+}
+1;
\ No newline at end of file
Added: vendor/perl/dist/cpan/Module-Pluggable/t/lib/Text/Abbrev.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/lib/Text/Abbrev.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/lib/Text/Abbrev.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
+package Text::Abbrev;
+use strict;
+
+sub module_pluggable {
+ return bless {}, shift;
+}
+
+sub MPCHECK { "HELLO" }
+
+1;
\ No newline at end of file
Added: vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/After.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/After.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/After.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+package TriggerTest::Plugin::After;
+
+1;
\ No newline at end of file
Added: vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackAllow.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackAllow.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackAllow.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+package TriggerTest::Plugin::CallbackAllow;
+
+sub exclude {
+ return 0;
+}
+1;
\ No newline at end of file
Added: vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackDeny.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackDeny.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/CallbackDeny.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+package TriggerTest::Plugin::CallbackDeny;
+
+sub exclude {
+ return 1;
+}
+1;
\ No newline at end of file
Added: vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Deny.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Deny.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Deny.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+package TriggerTest::Plugin::Deny;
+
+1;
\ No newline at end of file
Added: vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Error.pm
===================================================================
--- vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Error.pm (rev 0)
+++ vendor/perl/dist/cpan/Module-Pluggable/t/lib/TriggerTest/Plugin/Error.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+package TriggerTest::Plugin::Error;
+
Added: vendor/perl/dist/cpan/Pod-Checker/lib/Pod/Checker.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/lib/Pod/Checker.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/lib/Pod/Checker.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1330 @@
+#############################################################################
+# Pod/Checker.pm -- check pod documents for syntax errors
+#
+# Copyright (C) 1994-2000 by Bradford Appleton. All rights reserved.
+# This file is part of "PodParser". PodParser is free software;
+# you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+#############################################################################
+
+package Pod::Checker;
+use strict;
+
+use vars qw($VERSION @ISA @EXPORT %VALID_COMMANDS %VALID_SEQUENCES);
+$VERSION = '1.60'; ## Current version of this package
+require 5.005; ## requires this Perl version or later
+
+use Pod::ParseUtils; ## for hyperlinks and lists
+
+=head1 NAME
+
+Pod::Checker, podchecker() - check pod documents for syntax errors
+
+=head1 SYNOPSIS
+
+ use Pod::Checker;
+
+ $num_errors = podchecker($filepath, $outputpath, %options);
+
+ my $checker = new Pod::Checker %options;
+ $checker->parse_from_file($filepath, \*STDERR);
+
+=head1 OPTIONS/ARGUMENTS
+
+C<$filepath> is the input POD to read and C<$outputpath> is
+where to write POD syntax error messages. Either argument may be a scalar
+indicating a file-path, or else a reference to an open filehandle.
+If unspecified, the input-file it defaults to C<\*STDIN>, and
+the output-file defaults to C<\*STDERR>.
+
+=head2 podchecker()
+
+This function can take a hash of options:
+
+=over 4
+
+=item B<-warnings> =E<gt> I<val>
+
+Turn warnings on/off. I<val> is usually 1 for on, but higher values
+trigger additional warnings. See L<"Warnings">.
+
+=back
+
+=head1 DESCRIPTION
+
+B<podchecker> will perform syntax checking of Perl5 POD format documentation.
+
+Curious/ambitious users are welcome to propose additional features they wish
+to see in B<Pod::Checker> and B<podchecker> and verify that the checks are
+consistent with L<perlpod>.
+
+The following checks are currently performed:
+
+=over 4
+
+=item *
+
+Unknown '=xxxx' commands, unknown 'XE<lt>...E<gt>' interior-sequences,
+and unterminated interior sequences.
+
+=item *
+
+Check for proper balancing of C<=begin> and C<=end>. The contents of such
+a block are generally ignored, i.e. no syntax checks are performed.
+
+=item *
+
+Check for proper nesting and balancing of C<=over>, C<=item> and C<=back>.
+
+=item *
+
+Check for same nested interior-sequences (e.g.
+C<LE<lt>...LE<lt>...E<gt>...E<gt>>).
+
+=item *
+
+Check for malformed or non-existing entities C<EE<lt>...E<gt>>.
+
+=item *
+
+Check for correct syntax of hyperlinks C<LE<lt>...E<gt>>. See L<perlpod>
+for details.
+
+=item *
+
+Check for unresolved document-internal links. This check may also reveal
+misspelled links that seem to be internal links but should be links
+to something else.
+
+=back
+
+=head1 DIAGNOSTICS
+
+=head2 Errors
+
+=over 4
+
+=item * empty =headn
+
+A heading (C<=head1> or C<=head2>) without any text? That ain't no
+heading!
+
+=item * =over on line I<N> without closing =back
+
+The C<=over> command does not have a corresponding C<=back> before the
+next heading (C<=head1> or C<=head2>) or the end of the file.
+
+=item * =item without previous =over
+
+=item * =back without previous =over
+
+An C<=item> or C<=back> command has been found outside a
+C<=over>/C<=back> block.
+
+=item * No argument for =begin
+
+A C<=begin> command was found that is not followed by the formatter
+specification.
+
+=item * =end without =begin
+
+A standalone C<=end> command was found.
+
+=item * Nested =begin's
+
+There were at least two consecutive C<=begin> commands without
+the corresponding C<=end>. Only one C<=begin> may be active at
+a time.
+
+=item * =for without formatter specification
+
+There is no specification of the formatter after the C<=for> command.
+
+=item * Apparent command =foo not preceded by blank line
+
+A command which has ended up in the middle of a paragraph or other command,
+such as
+
+ =item one
+ =item two <-- bad
+
+=item * unresolved internal link I<NAME>
+
+The given link to I<NAME> does not have a matching node in the current
+POD. This also happened when a single word node name is not enclosed in
+C<"">.
+
+=item * Unknown command "I<CMD>"
+
+An invalid POD command has been found. Valid are C<=head1>, C<=head2>,
+C<=head3>, C<=head4>, C<=over>, C<=item>, C<=back>, C<=begin>, C<=end>,
+C<=for>, C<=pod>, C<=cut>
+
+=item * Unknown interior-sequence "I<SEQ>"
+
+An invalid markup command has been encountered. Valid are:
+C<BE<lt>E<gt>>, C<CE<lt>E<gt>>, C<EE<lt>E<gt>>, C<FE<lt>E<gt>>,
+C<IE<lt>E<gt>>, C<LE<lt>E<gt>>, C<SE<lt>E<gt>>, C<XE<lt>E<gt>>,
+C<ZE<lt>E<gt>>
+
+=item * nested commands I<CMD>E<lt>...I<CMD>E<lt>...E<gt>...E<gt>
+
+Two nested identical markup commands have been found. Generally this
+does not make sense.
+
+=item * garbled entity I<STRING>
+
+The I<STRING> found cannot be interpreted as a character entity.
+
+=item * Entity number out of range
+
+An entity specified by number (dec, hex, oct) is out of range (1-255).
+
+=item * malformed link LE<lt>E<gt>
+
+The link found cannot be parsed because it does not conform to the
+syntax described in L<perlpod>.
+
+=item * nonempty ZE<lt>E<gt>
+
+The C<ZE<lt>E<gt>> sequence is supposed to be empty.
+
+=item * empty XE<lt>E<gt>
+
+The index entry specified contains nothing but whitespace.
+
+=item * Spurious text after =pod / =cut
+
+The commands C<=pod> and C<=cut> do not take any arguments.
+
+=item * Spurious =cut command
+
+A C<=cut> command was found without a preceding POD paragraph.
+
+=item * Spurious =pod command
+
+A C<=pod> command was found after a preceding POD paragraph.
+
+=item * Spurious character(s) after =back
+
+The C<=back> command does not take any arguments.
+
+=back
+
+=head2 Warnings
+
+These may not necessarily cause trouble, but indicate mediocre style.
+
+=over 4
+
+=item * multiple occurrence of link target I<name>
+
+The POD file has some C<=item> and/or C<=head> commands that have
+the same text. Potential hyperlinks to such a text cannot be unique then.
+This warning is printed only with warning level greater than one.
+
+=item * line containing nothing but whitespace in paragraph
+
+There is some whitespace on a seemingly empty line. POD is very sensitive
+to such things, so this is flagged. B<vi> users switch on the B<list>
+option to avoid this problem.
+
+=begin _disabled_
+
+=item * file does not start with =head
+
+The file starts with a different POD directive than head.
+This is most probably something you do not want.
+
+=end _disabled_
+
+=item * previous =item has no contents
+
+There is a list C<=item> right above the flagged line that has no
+text contents. You probably want to delete empty items.
+
+=item * preceding non-item paragraph(s)
+
+A list introduced by C<=over> starts with a text or verbatim paragraph,
+but continues with C<=item>s. Move the non-item paragraph out of the
+C<=over>/C<=back> block.
+
+=item * =item type mismatch (I<one> vs. I<two>)
+
+A list started with e.g. a bullet-like C<=item> and continued with a
+numbered one. This is obviously inconsistent. For most translators the
+type of the I<first> C<=item> determines the type of the list.
+
+=item * I<N> unescaped C<E<lt>E<gt>> in paragraph
+
+Angle brackets not written as C<E<lt>ltE<gt>> and C<E<lt>gtE<gt>>
+can potentially cause errors as they could be misinterpreted as
+markup commands. This is only printed when the -warnings level is
+greater than 1.
+
+=item * Unknown entity
+
+A character entity was found that does not belong to the standard
+ISO set or the POD specials C<verbar> and C<sol>.
+
+=item * No items in =over
+
+The list opened with C<=over> does not contain any items.
+
+=item * No argument for =item
+
+C<=item> without any parameters is deprecated. It should either be followed
+by C<*> to indicate an unordered list, by a number (optionally followed
+by a dot) to indicate an ordered (numbered) list or simple text for a
+definition list.
+
+=item * empty section in previous paragraph
+
+The previous section (introduced by a C<=head> command) does not contain
+any text. This usually indicates that something is missing. Note: A
+C<=head1> followed immediately by C<=head2> does not trigger this warning.
+
+=item * Verbatim paragraph in NAME section
+
+The NAME section (C<=head1 NAME>) should consist of a single paragraph
+with the script/module name, followed by a dash `-' and a very short
+description of what the thing is good for.
+
+=item * =headI<n> without preceding higher level
+
+For example if there is a C<=head2> in the POD file prior to a
+C<=head1>.
+
+=back
+
+=head2 Hyperlinks
+
+There are some warnings with respect to malformed hyperlinks:
+
+=over 4
+
+=item * ignoring leading/trailing whitespace in link
+
+There is whitespace at the beginning or the end of the contents of
+LE<lt>...E<gt>.
+
+=item * (section) in '$page' deprecated
+
+There is a section detected in the page name of LE<lt>...E<gt>, e.g.
+C<LE<lt>passwd(2)E<gt>>. POD hyperlinks may point to POD documents only.
+Please write C<CE<lt>passwd(2)E<gt>> instead. Some formatters are able
+to expand this to appropriate code. For links to (builtin) functions,
+please say C<LE<lt>perlfunc/mkdirE<gt>>, without ().
+
+=item * alternative text/node '%s' contains non-escaped | or /
+
+The characters C<|> and C</> are special in the LE<lt>...E<gt> context.
+Although the hyperlink parser does its best to determine which "/" is
+text and which is a delimiter in case of doubt, one ought to escape
+these literal characters like this:
+
+ / E<sol>
+ | E<verbar>
+
+=back
+
+=head1 RETURN VALUE
+
+B<podchecker> returns the number of POD syntax errors found or -1 if
+there were no POD commands at all found in the file.
+
+=head1 EXAMPLES
+
+See L</SYNOPSIS>
+
+=head1 INTERFACE
+
+While checking, this module collects document properties, e.g. the nodes
+for hyperlinks (C<=headX>, C<=item>) and index entries (C<XE<lt>E<gt>>).
+POD translators can use this feature to syntax-check and get the nodes in
+a first pass before actually starting to convert. This is expensive in terms
+of execution time, but allows for very robust conversions.
+
+Since PodParser-1.24 the B<Pod::Checker> module uses only the B<poderror>
+method to print errors and warnings. The summary output (e.g.
+"Pod syntax OK") has been dropped from the module and has been included in
+B<podchecker> (the script). This allows users of B<Pod::Checker> to
+control completely the output behavior. Users of B<podchecker> (the script)
+get the well-known behavior.
+
+=cut
+
+#############################################################################
+
+#use diagnostics;
+use Carp qw(croak);
+use Exporter;
+use Pod::Parser;
+
+ at ISA = qw(Pod::Parser);
+ at EXPORT = qw(&podchecker);
+
+my %VALID_COMMANDS = (
+ 'pod' => 1,
+ 'cut' => 1,
+ 'head1' => 1,
+ 'head2' => 1,
+ 'head3' => 1,
+ 'head4' => 1,
+ 'over' => 1,
+ 'back' => 1,
+ 'item' => 1,
+ 'for' => 1,
+ 'begin' => 1,
+ 'end' => 1,
+ 'encoding' => 1,
+);
+
+my %VALID_SEQUENCES = (
+ 'I' => 1,
+ 'B' => 1,
+ 'S' => 1,
+ 'C' => 1,
+ 'L' => 1,
+ 'F' => 1,
+ 'X' => 1,
+ 'Z' => 1,
+ 'E' => 1,
+);
+
+# stolen from HTML::Entities
+my %ENTITIES = (
+ # Some normal chars that have special meaning in SGML context
+ amp => '&', # ampersand
+'gt' => '>', # greater than
+'lt' => '<', # less than
+ quot => '"', # double quote
+
+ # PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML
+ AElig => '\xC6', # capital AE diphthong (ligature)
+ Aacute => '\xC1', # capital A, acute accent
+ Acirc => '\xC2', # capital A, circumflex accent
+ Agrave => '\xC0', # capital A, grave accent
+ Aring => '\xC5', # capital A, ring
+ Atilde => '\xC3', # capital A, tilde
+ Auml => '\xC4', # capital A, dieresis or umlaut mark
+ Ccedil => '\xC7', # capital C, cedilla
+ ETH => '\xD0', # capital Eth, Icelandic
+ Eacute => '\xC9', # capital E, acute accent
+ Ecirc => '\xCA', # capital E, circumflex accent
+ Egrave => '\xC8', # capital E, grave accent
+ Euml => '\xCB', # capital E, dieresis or umlaut mark
+ Iacute => '\xCD', # capital I, acute accent
+ Icirc => '\xCE', # capital I, circumflex accent
+ Igrave => '\xCC', # capital I, grave accent
+ Iuml => '\xCF', # capital I, dieresis or umlaut mark
+ Ntilde => '\xD1', # capital N, tilde
+ Oacute => '\xD3', # capital O, acute accent
+ Ocirc => '\xD4', # capital O, circumflex accent
+ Ograve => '\xD2', # capital O, grave accent
+ Oslash => '\xD8', # capital O, slash
+ Otilde => '\xD5', # capital O, tilde
+ Ouml => '\xD6', # capital O, dieresis or umlaut mark
+ THORN => '\xDE', # capital THORN, Icelandic
+ Uacute => '\xDA', # capital U, acute accent
+ Ucirc => '\xDB', # capital U, circumflex accent
+ Ugrave => '\xD9', # capital U, grave accent
+ Uuml => '\xDC', # capital U, dieresis or umlaut mark
+ Yacute => '\xDD', # capital Y, acute accent
+ aacute => '\xE1', # small a, acute accent
+ acirc => '\xE2', # small a, circumflex accent
+ aelig => '\xE6', # small ae diphthong (ligature)
+ agrave => '\xE0', # small a, grave accent
+ aring => '\xE5', # small a, ring
+ atilde => '\xE3', # small a, tilde
+ auml => '\xE4', # small a, dieresis or umlaut mark
+ ccedil => '\xE7', # small c, cedilla
+ eacute => '\xE9', # small e, acute accent
+ ecirc => '\xEA', # small e, circumflex accent
+ egrave => '\xE8', # small e, grave accent
+ eth => '\xF0', # small eth, Icelandic
+ euml => '\xEB', # small e, dieresis or umlaut mark
+ iacute => '\xED', # small i, acute accent
+ icirc => '\xEE', # small i, circumflex accent
+ igrave => '\xEC', # small i, grave accent
+ iuml => '\xEF', # small i, dieresis or umlaut mark
+ ntilde => '\xF1', # small n, tilde
+ oacute => '\xF3', # small o, acute accent
+ ocirc => '\xF4', # small o, circumflex accent
+ ograve => '\xF2', # small o, grave accent
+ oslash => '\xF8', # small o, slash
+ otilde => '\xF5', # small o, tilde
+ ouml => '\xF6', # small o, dieresis or umlaut mark
+ szlig => '\xDF', # small sharp s, German (sz ligature)
+ thorn => '\xFE', # small thorn, Icelandic
+ uacute => '\xFA', # small u, acute accent
+ ucirc => '\xFB', # small u, circumflex accent
+ ugrave => '\xF9', # small u, grave accent
+ uuml => '\xFC', # small u, dieresis or umlaut mark
+ yacute => '\xFD', # small y, acute accent
+ yuml => '\xFF', # small y, dieresis or umlaut mark
+
+ # Some extra Latin 1 chars that are listed in the HTML3.2 draft (21-May-96)
+ copy => '\xA9', # copyright sign
+ reg => '\xAE', # registered sign
+ nbsp => "\240", # non breaking space
+
+ # Additional ISO-8859/1 entities listed in rfc1866 (section 14)
+ iexcl => '\xA1',
+ cent => '\xA2',
+ pound => '\xA3',
+ curren => '\xA4',
+ yen => '\xA5',
+ brvbar => '\xA6',
+ sect => '\xA7',
+ uml => '\xA8',
+ ordf => '\xAA',
+ laquo => '\xAB',
+'not' => '\xAC', # not is a keyword in perl
+ shy => '\xAD',
+ macr => '\xAF',
+ deg => '\xB0',
+ plusmn => '\xB1',
+ sup1 => '\xB9',
+ sup2 => '\xB2',
+ sup3 => '\xB3',
+ acute => '\xB4',
+ micro => '\xB5',
+ para => '\xB6',
+ middot => '\xB7',
+ cedil => '\xB8',
+ ordm => '\xBA',
+ raquo => '\xBB',
+ frac14 => '\xBC',
+ frac12 => '\xBD',
+ frac34 => '\xBE',
+ iquest => '\xBF',
+'times' => '\xD7', # times is a keyword in perl
+ divide => '\xF7',
+
+# some POD special entities
+ verbar => '|',
+ sol => '/'
+);
+
+##---------------------------------------------------------------------------
+
+##---------------------------------
+## Function definitions begin here
+##---------------------------------
+
+sub podchecker {
+ my ($infile, $outfile, %options) = @_;
+ local $_;
+
+ ## Set defaults
+ $infile ||= \*STDIN;
+ $outfile ||= \*STDERR;
+
+ ## Now create a pod checker
+ my $checker = new Pod::Checker(%options);
+
+ ## Now check the pod document for errors
+ $checker->parse_from_file($infile, $outfile);
+
+ ## Return the number of errors found
+ return $checker->num_errors();
+}
+
+##---------------------------------------------------------------------------
+
+##-------------------------------
+## Method definitions begin here
+##-------------------------------
+
+##################################
+
+=over 4
+
+=item C<Pod::Checker-E<gt>new( %options )>
+
+Return a reference to a new Pod::Checker object that inherits from
+Pod::Parser and is used for calling the required methods later. The
+following options are recognized:
+
+C<-warnings =E<gt> num>
+ Print warnings if C<num> is true. The higher the value of C<num>,
+the more warnings are printed. Currently there are only levels 1 and 2.
+
+C<-quiet =E<gt> num>
+ If C<num> is true, do not print any errors/warnings. This is useful
+when Pod::Checker is used to munge POD code into plain text from within
+POD formatters.
+
+=cut
+
+## sub new {
+## my $this = shift;
+## my $class = ref($this) || $this;
+## my %params = @_;
+## my $self = {%params};
+## bless $self, $class;
+## $self->initialize();
+## return $self;
+## }
+
+sub initialize {
+ my $self = shift;
+ ## Initialize number of errors, and setup an error function to
+ ## increment this number and then print to the designated output.
+ $self->{_NUM_ERRORS} = 0;
+ $self->{_NUM_WARNINGS} = 0;
+ $self->{-quiet} ||= 0;
+ # set the error handling subroutine
+ $self->errorsub($self->{-quiet} ? sub { 1; } : 'poderror');
+ $self->{_commands} = 0; # total number of POD commands encountered
+ $self->{_list_stack} = []; # stack for nested lists
+ $self->{_have_begin} = ''; # stores =begin
+ $self->{_links} = []; # stack for internal hyperlinks
+ $self->{_nodes} = []; # stack for =head/=item nodes
+ $self->{_index} = []; # text in X<>
+ # print warnings?
+ $self->{-warnings} = 1 unless(defined $self->{-warnings});
+ $self->{_current_head1} = ''; # the current =head1 block
+ $self->parseopts(-process_cut_cmd => 1, -warnings => $self->{-warnings});
+}
+
+##################################
+
+=item C<$checker-E<gt>poderror( @args )>
+
+=item C<$checker-E<gt>poderror( {%opts}, @args )>
+
+Internal method for printing errors and warnings. If no options are
+given, simply prints "@_". The following options are recognized and used
+to form the output:
+
+ -msg
+
+A message to print prior to C<@args>.
+
+ -line
+
+The line number the error occurred in.
+
+ -file
+
+The file (name) the error occurred in.
+
+ -severity
+
+The error level, should be 'WARNING' or 'ERROR'.
+
+=cut
+
+# Invoked as $self->poderror( @args ), or $self->poderror( {%opts}, @args )
+sub poderror {
+ my $self = shift;
+ my %opts = (ref $_[0]) ? %{shift()} : ();
+
+ ## Retrieve options
+ chomp( my $msg = ($opts{-msg} || '')."@_" );
+ my $line = (exists $opts{-line}) ? " at line $opts{-line}" : '';
+ my $file = (exists $opts{-file}) ? " in file $opts{-file}" : '';
+ unless (exists $opts{-severity}) {
+ ## See if can find severity in message prefix
+ $opts{-severity} = $1 if ( $msg =~ s/^\**\s*([A-Z]{3,}):\s+// );
+ }
+ my $severity = (exists $opts{-severity}) ? "*** $opts{-severity}: " : '';
+
+ ## Increment error count and print message "
+ ++($self->{_NUM_ERRORS})
+ if(!%opts || ($opts{-severity} && $opts{-severity} eq 'ERROR'));
+ ++($self->{_NUM_WARNINGS})
+ if(!%opts || ($opts{-severity} && $opts{-severity} eq 'WARNING'));
+ unless($self->{-quiet}) {
+ my $out_fh = $self->output_handle() || \*STDERR;
+ print $out_fh ($severity, $msg, $line, $file, "\n")
+ if($self->{-warnings} || !%opts || $opts{-severity} ne 'WARNING');
+ }
+}
+
+##################################
+
+=item C<$checker-E<gt>num_errors()>
+
+Set (if argument specified) and retrieve the number of errors found.
+
+=cut
+
+sub num_errors {
+ return (@_ > 1) ? ($_[0]->{_NUM_ERRORS} = $_[1]) : $_[0]->{_NUM_ERRORS};
+}
+
+##################################
+
+=item C<$checker-E<gt>num_warnings()>
+
+Set (if argument specified) and retrieve the number of warnings found.
+
+=cut
+
+sub num_warnings {
+ return (@_ > 1) ? ($_[0]->{_NUM_WARNINGS} = $_[1]) : $_[0]->{_NUM_WARNINGS};
+}
+
+##################################
+
+=item C<$checker-E<gt>name()>
+
+Set (if argument specified) and retrieve the canonical name of POD as
+found in the C<=head1 NAME> section.
+
+=cut
+
+sub name {
+ return (@_ > 1 && $_[1]) ?
+ ($_[0]->{-name} = $_[1]) : $_[0]->{-name};
+}
+
+##################################
+
+=item C<$checker-E<gt>node()>
+
+Add (if argument specified) and retrieve the nodes (as defined by C<=headX>
+and C<=item>) of the current POD. The nodes are returned in the order of
+their occurrence. They consist of plain text, each piece of whitespace is
+collapsed to a single blank.
+
+=cut
+
+sub node {
+ my ($self,$text) = @_;
+ if(defined $text) {
+ $text =~ s/\s+$//s; # strip trailing whitespace
+ $text =~ s/\s+/ /gs; # collapse whitespace
+ # add node, order important!
+ push(@{$self->{_nodes}}, $text);
+ # keep also a uniqueness counter
+ $self->{_unique_nodes}->{$text}++ if($text !~ /^\s*$/s);
+ return $text;
+ }
+ @{$self->{_nodes}};
+}
+
+##################################
+
+=item C<$checker-E<gt>idx()>
+
+Add (if argument specified) and retrieve the index entries (as defined by
+C<XE<lt>E<gt>>) of the current POD. They consist of plain text, each piece
+of whitespace is collapsed to a single blank.
+
+=cut
+
+# set/return index entries of current POD
+sub idx {
+ my ($self,$text) = @_;
+ if(defined $text) {
+ $text =~ s/\s+$//s; # strip trailing whitespace
+ $text =~ s/\s+/ /gs; # collapse whitespace
+ # add node, order important!
+ push(@{$self->{_index}}, $text);
+ # keep also a uniqueness counter
+ $self->{_unique_nodes}->{$text}++ if($text !~ /^\s*$/s);
+ return $text;
+ }
+ @{$self->{_index}};
+}
+
+##################################
+
+=item C<$checker-E<gt>hyperlink()>
+
+Add (if argument specified) and retrieve the hyperlinks (as defined by
+C<LE<lt>E<gt>>) of the current POD. They consist of a 2-item array: line
+number and C<Pod::Hyperlink> object.
+
+=back
+
+=cut
+
+# set/return hyperlinks of the current POD
+sub hyperlink {
+ my $self = shift;
+ if($_[0]) {
+ push(@{$self->{_links}}, $_[0]);
+ return $_[0];
+ }
+ @{$self->{_links}};
+}
+
+## overrides for Pod::Parser
+
+sub end_pod {
+ ## Do some final checks and
+ ## print the number of errors found
+ my $self = shift;
+ my $infile = $self->input_file();
+
+ if(@{$self->{_list_stack}}) {
+ my $list;
+ while(($list = $self->_close_list('EOF',$infile)) &&
+ $list->indent() ne 'auto') {
+ $self->poderror({ -line => 'EOF', -file => $infile,
+ -severity => 'ERROR', -msg => '=over on line ' .
+ $list->start() . ' without closing =back' });
+ }
+ }
+
+ # check validity of document internal hyperlinks
+ # first build the node names from the paragraph text
+ my %nodes;
+ foreach($self->node()) {
+ $nodes{$_} = 1;
+ if(/^(\S+)\s+\S/) {
+ # we have more than one word. Use the first as a node, too.
+ # This is used heavily in perlfunc.pod
+ $nodes{$1} ||= 2; # derived node
+ }
+ }
+ foreach($self->idx()) {
+ $nodes{$_} = 3; # index node
+ }
+ foreach($self->hyperlink()) {
+ my ($line,$link) = @$_;
+ # _TODO_ what if there is a link to the page itself by the name,
+ # e.g. in Tk::Pod : L<Tk::Pod/"DESCRIPTION">
+ if($link->node() && !$link->page() && $link->type() ne 'hyperlink') {
+ my $node = $self->_check_ptree($self->parse_text($link->node(),
+ $line), $line, $infile, 'L');
+ if($node && !$nodes{$node}) {
+ $self->poderror({ -line => $line || '', -file => $infile,
+ -severity => 'ERROR',
+ -msg => "unresolved internal link '$node'"});
+ }
+ }
+ }
+
+ # check the internal nodes for uniqueness. This pertains to
+ # =headX, =item and X<...>
+ if($self->{-warnings} && $self->{-warnings}>1) {
+ foreach(grep($self->{_unique_nodes}->{$_} > 1,
+ keys %{$self->{_unique_nodes}})) {
+ $self->poderror({ -line => '-', -file => $infile,
+ -severity => 'WARNING',
+ -msg => "multiple occurrence of link target '$_'"});
+ }
+ }
+
+ # no POD found here
+ $self->num_errors(-1) if($self->{_commands} == 0);
+}
+
+# check a POD command directive
+sub command {
+ my ($self, $cmd, $paragraph, $line_num, $pod_para) = @_;
+ my ($file, $line) = $pod_para->file_line;
+ ## Check the command syntax
+ my $arg; # this will hold the command argument
+ if (! $VALID_COMMANDS{$cmd}) {
+ $self->poderror({ -line => $line, -file => $file, -severity => 'ERROR',
+ -msg => "Unknown command '$cmd'" });
+ }
+ else { # found a valid command
+ $self->{_commands}++; # delete this line if below is enabled again
+
+ $self->_commands_in_paragraphs($paragraph, $pod_para);
+
+ ##### following check disabled due to strong request
+ #if(!$self->{_commands}++ && $cmd !~ /^head/) {
+ # $self->poderror({ -line => $line, -file => $file,
+ # -severity => 'WARNING',
+ # -msg => "file does not start with =head" });
+ #}
+
+ # check syntax of particular command
+ if($cmd eq 'over') {
+ # check for argument
+ $arg = $self->interpolate_and_check($paragraph, $line,$file);
+ my $indent = 4; # default
+ if($arg && $arg =~ /^\s*(\d+)\s*$/) {
+ $indent = $1;
+ }
+ # start a new list
+ $self->_open_list($indent,$line,$file);
+ }
+ elsif($cmd eq 'item') {
+ # are we in a list?
+ unless(@{$self->{_list_stack}}) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => '=item without previous =over' });
+ # auto-open in case we encounter many more
+ $self->_open_list('auto',$line,$file);
+ }
+ my $list = $self->{_list_stack}->[0];
+ # check whether the previous item had some contents
+ if(defined $self->{_list_item_contents} &&
+ $self->{_list_item_contents} == 0) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => 'previous =item has no contents' });
+ }
+ if($list->{_has_par}) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => 'preceding non-item paragraph(s)' });
+ delete $list->{_has_par};
+ }
+ # check for argument
+ $arg = $self->interpolate_and_check($paragraph, $line, $file);
+ if($arg && $arg =~ /(\S+)/) {
+ $arg =~ s/[\s\n]+$//;
+ my $type;
+ if($arg =~ /^[*]\s*(\S*.*)/) {
+ $type = 'bullet';
+ $self->{_list_item_contents} = $1 ? 1 : 0;
+ $arg = $1;
+ }
+ elsif($arg =~ /^\d+\.?\s+(\S*)/) {
+ $type = 'number';
+ $self->{_list_item_contents} = $1 ? 1 : 0;
+ $arg = $1;
+ }
+ else {
+ $type = 'definition';
+ $self->{_list_item_contents} = 1;
+ }
+ my $first = $list->type();
+ if($first && $first ne $type) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => "=item type mismatch ('$first' vs. '$type')"});
+ }
+ else { # first item
+ $list->type($type);
+ }
+ }
+ else {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => 'No argument for =item' });
+ $arg = ' '; # empty
+ $self->{_list_item_contents} = 0;
+ }
+ # add this item
+ $list->item($arg);
+ # remember this node
+ $self->node($arg);
+ }
+ elsif($cmd eq 'back') {
+ # check if we have an open list
+ unless(@{$self->{_list_stack}}) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => '=back without previous =over' });
+ }
+ else {
+ # check for spurious characters
+ $arg = $self->interpolate_and_check($paragraph, $line,$file);
+ if($arg && $arg =~ /\S/) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => 'Spurious character(s) after =back' });
+ }
+ # close list
+ my $list = $self->_close_list($line,$file);
+ # check for empty lists
+ if(!$list->item() && $self->{-warnings}) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => 'No items in =over (at line ' .
+ $list->start() . ') / =back list'});
+ }
+ }
+ }
+ elsif($cmd =~ /^head(\d+)/) {
+ my $hnum = $1;
+ $self->{"_have_head_$hnum"}++; # count head types
+ if($hnum > 1 && !$self->{'_have_head_'.($hnum -1)}) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => "=head$hnum without preceding higher level"});
+ }
+ # check whether the previous =head section had some contents
+ if(defined $self->{_commands_in_head} &&
+ $self->{_commands_in_head} == 0 &&
+ defined $self->{_last_head} &&
+ $self->{_last_head} >= $hnum) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => 'empty section in previous paragraph'});
+ }
+ $self->{_commands_in_head} = -1;
+ $self->{_last_head} = $hnum;
+ # check if there is an open list
+ if(@{$self->{_list_stack}}) {
+ my $list;
+ while(($list = $self->_close_list($line,$file)) &&
+ $list->indent() ne 'auto') {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => '=over on line '. $list->start() .
+ " without closing =back (at $cmd)" });
+ }
+ }
+ # remember this node
+ $arg = $self->interpolate_and_check($paragraph, $line,$file);
+ $arg =~ s/[\s\n]+$//s;
+ $self->node($arg);
+ unless(length($arg)) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => "empty =$cmd"});
+ }
+ if($cmd eq 'head1') {
+ $self->{_current_head1} = $arg;
+ } else {
+ $self->{_current_head1} = '';
+ }
+ }
+ elsif($cmd eq 'begin') {
+ if($self->{_have_begin}) {
+ # already have a begin
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => q{Nested =begin's (first at line } .
+ $self->{_have_begin} . ')'});
+ }
+ else {
+ # check for argument
+ $arg = $self->interpolate_and_check($paragraph, $line,$file);
+ unless($arg && $arg =~ /(\S+)/) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => 'No argument for =begin'});
+ }
+ # remember the =begin
+ $self->{_have_begin} = "$line:$1";
+ }
+ }
+ elsif($cmd eq 'end') {
+ if($self->{_have_begin}) {
+ # close the existing =begin
+ $self->{_have_begin} = '';
+ # check for spurious characters
+ $arg = $self->interpolate_and_check($paragraph, $line,$file);
+ # the closing argument is optional
+ #if($arg && $arg =~ /\S/) {
+ # $self->poderror({ -line => $line, -file => $file,
+ # -severity => 'WARNING',
+ # -msg => "Spurious character(s) after =end" });
+ #}
+ }
+ else {
+ # don't have a matching =begin
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => '=end without =begin' });
+ }
+ }
+ elsif($cmd eq 'for') {
+ unless($paragraph =~ /\s*(\S+)\s*/) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => '=for without formatter specification' });
+ }
+ $arg = ''; # do not expand paragraph below
+ }
+ elsif($cmd =~ /^(pod|cut)$/) {
+ # check for argument
+ $arg = $self->interpolate_and_check($paragraph, $line,$file);
+ if($arg && $arg =~ /(\S+)/) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => "Spurious text after =$cmd"});
+ }
+ if($cmd eq 'cut' && (!$self->{_PREVIOUS} || $self->{_PREVIOUS} eq 'cut')) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => "Spurious =cut command"});
+ }
+ if($cmd eq 'pod' && $self->{_PREVIOUS} && $self->{_PREVIOUS} ne 'cut') {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => "Spurious =pod command"});
+ }
+ }
+ $self->{_commands_in_head}++;
+ ## Check the interior sequences in the command-text
+ $self->interpolate_and_check($paragraph, $line,$file)
+ unless(defined $arg);
+ }
+}
+
+sub _open_list
+{
+ my ($self,$indent,$line,$file) = @_;
+ my $list = Pod::List->new(
+ -indent => $indent,
+ -start => $line,
+ -file => $file);
+ unshift(@{$self->{_list_stack}}, $list);
+ undef $self->{_list_item_contents};
+ $list;
+}
+
+sub _close_list
+{
+ my ($self,$line,$file) = @_;
+ my $list = shift(@{$self->{_list_stack}});
+ if(defined $self->{_list_item_contents} &&
+ $self->{_list_item_contents} == 0) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => 'previous =item has no contents' });
+ }
+ undef $self->{_list_item_contents};
+ $list;
+}
+
+# process a block of some text
+sub interpolate_and_check {
+ my ($self, $paragraph, $line, $file) = @_;
+ ## Check the interior sequences in the command-text
+ # and return the text
+ $self->_check_ptree(
+ $self->parse_text($paragraph,$line), $line, $file, '');
+}
+
+sub _check_ptree {
+ my ($self,$ptree,$line,$file,$nestlist) = @_;
+ local($_);
+ my $text = '';
+ # process each node in the parse tree
+ foreach(@$ptree) {
+ # regular text chunk
+ unless(ref) {
+ # count the unescaped angle brackets
+ # complain only when warning level is greater than 1
+ if($self->{-warnings} && $self->{-warnings}>1) {
+ my $count;
+ if($count = tr/<>/<>/) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => "$count unescaped <> in paragraph" });
+ }
+ }
+ $text .= $_;
+ next;
+ }
+ # have an interior sequence
+ my $cmd = $_->cmd_name();
+ my $contents = $_->parse_tree();
+ ($file,$line) = $_->file_line();
+ # check for valid tag
+ if (! $VALID_SEQUENCES{$cmd}) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => qq(Unknown interior-sequence '$cmd')});
+ # expand it anyway
+ $text .= $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
+ next;
+ }
+ if(index($nestlist, $cmd) != -1) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => "nested commands $cmd<...$cmd<...>...>"});
+ # _TODO_ should we add the contents anyway?
+ # expand it anyway, see below
+ }
+ if($cmd eq 'E') {
+ # preserve entities
+ if(@$contents > 1 || ref $$contents[0] || $$contents[0] !~ /^\w+$/) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => 'garbled entity ' . $_->raw_text()});
+ next;
+ }
+ my $ent = $$contents[0];
+ my $val;
+ if($ent =~ /^0x[0-9a-f]+$/i) {
+ # hexadec entity
+ $val = hex($ent);
+ }
+ elsif($ent =~ /^0\d+$/) {
+ # octal
+ $val = oct($ent);
+ }
+ elsif($ent =~ /^\d+$/) {
+ # numeric entity
+ $val = $ent;
+ }
+ if(defined $val) {
+ if($val>0 && $val<256) {
+ $text .= chr($val);
+ }
+ else {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => 'Entity number out of range ' . $_->raw_text()});
+ }
+ }
+ elsif($ENTITIES{$ent}) {
+ # known ISO entity
+ $text .= $ENTITIES{$ent};
+ }
+ else {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => 'Unknown entity ' . $_->raw_text()});
+ $text .= "E<$ent>";
+ }
+ }
+ elsif($cmd eq 'L') {
+ # try to parse the hyperlink
+ my $link = Pod::Hyperlink->new($contents->raw_text());
+ unless(defined $link) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => 'malformed link ' . $_->raw_text() ." : $@"});
+ next;
+ }
+ $link->line($line); # remember line
+ if($self->{-warnings}) {
+ foreach my $w ($link->warning()) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => $w });
+ }
+ }
+ # check the link text
+ $text .= $self->_check_ptree($self->parse_text($link->text(),
+ $line), $line, $file, "$nestlist$cmd");
+ # remember link
+ $self->hyperlink([$line,$link]);
+ }
+ elsif($cmd =~ /[BCFIS]/) {
+ # add the guts
+ $text .= $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
+ }
+ elsif($cmd eq 'Z') {
+ if(length($contents->raw_text())) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => 'Nonempty Z<>'});
+ }
+ }
+ elsif($cmd eq 'X') {
+ my $idx = $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
+ if($idx =~ /^\s*$/s) {
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => 'Empty X<>'});
+ }
+ else {
+ # remember this node
+ $self->idx($idx);
+ }
+ }
+ else {
+ # not reached
+ croak 'internal error';
+ }
+ }
+ $text;
+}
+
+# process a block of verbatim text
+sub verbatim {
+ ## Nothing particular to check
+ my ($self, $paragraph, $line_num, $pod_para) = @_;
+
+ $self->_preproc_par($paragraph);
+ $self->_commands_in_paragraphs($paragraph, $pod_para);
+
+ if($self->{_current_head1} eq 'NAME') {
+ my ($file, $line) = $pod_para->file_line;
+ $self->poderror({ -line => $line, -file => $file,
+ -severity => 'WARNING',
+ -msg => 'Verbatim paragraph in NAME section' });
+ }
+}
+
+# process a block of regular text
+sub textblock {
+ my ($self, $paragraph, $line_num, $pod_para) = @_;
+ my ($file, $line) = $pod_para->file_line;
+
+ $self->_preproc_par($paragraph);
+ $self->_commands_in_paragraphs($paragraph, $pod_para);
+
+ # skip this paragraph if in a =begin block
+ unless($self->{_have_begin}) {
+ my $block = $self->interpolate_and_check($paragraph, $line,$file);
+ if($self->{_current_head1} eq 'NAME') {
+ if($block =~ /^\s*(\S+?)\s*[,-]/) {
+ # this is the canonical name
+ $self->{-name} = $1 unless(defined $self->{-name});
+ }
+ }
+ }
+}
+
+sub _preproc_par
+{
+ my $self = shift;
+ $_[0] =~ s/[\s\n]+$//;
+ if($_[0]) {
+ $self->{_commands_in_head}++;
+ $self->{_list_item_contents}++ if(defined $self->{_list_item_contents});
+ if(@{$self->{_list_stack}} && !$self->{_list_stack}->[0]->item()) {
+ $self->{_list_stack}->[0]->{_has_par} = 1;
+ }
+ }
+}
+
+# look for =foo commands at the start of a line within a paragraph, as for
+# instance the following which prints as "* one =item two".
+#
+# =item one
+# =item two
+#
+# Examples of =foo written in docs are expected to be indented in a verbatim
+# or marked up C<=foo> so won't be caught. A double-angle C<< =foo >> could
+# have the =foo at the start of a line, but that should be unlikely and is
+# easily enough dealt with by not putting a newline after the C<<.
+#
+sub _commands_in_paragraphs {
+ my ($self, $str, $pod_para) = @_;
+ while ($str =~ /[^\n]\n=([a-z][a-z0-9]+)/sg) {
+ my $cmd = $1;
+ my $pos = pos($str);
+ if ($VALID_COMMANDS{$cmd}) {
+ my ($file, $line) = $pod_para->file_line;
+ my $part = substr($str, 0, $pos);
+ $line += ($part =~ tr/\n//); # count of newlines
+
+ $self->poderror
+ ({ -line => $line, -file => $file,
+ -severity => 'ERROR',
+ -msg => "Apparent command =$cmd not preceded by blank line"});
+ }
+ }
+}
+
+1;
+
+__END__
+
+=head1 AUTHOR
+
+Please report bugs using L<http://rt.cpan.org>.
+
+Brad Appleton E<lt>bradapp at enteract.comE<gt> (initial version),
+Marek Rouchal E<lt>marekr at cpan.orgE<gt>
+
+Based on code for B<Pod::Text::pod2text()> written by
+Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
+
+B<Pod::Checker> is part of the Pod-Checker distribution, and is based on
+L<Pod::Parser>.
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Checker/scripts/podchecker.PL
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/scripts/podchecker.PL (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/scripts/podchecker.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,186 @@
+#!/usr/local/bin/perl
+
+use Config;
+use File::Basename qw(&basename &dirname);
+use Cwd;
+
+# List explicitly here the variables you want Configure to
+# generate. Metaconfig only looks for shell variables, so you
+# have to mention them as if they were shell variables, not
+# %Config entries. Thus you write
+# $startperl
+# to ensure Configure will look for $Config{startperl}.
+
+# This forces PL files to create target in same directory as PL file.
+# This is so that make depend always knows where to find PL derivatives.
+$origdir = cwd;
+chdir(dirname($0));
+($file = basename($0)) =~ s/\.PL$//;
+$file =~ s/\.pl$//
+ if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
+$file .= '.com' if $^O eq 'VMS';
+
+open OUT,">$file" or die "Can't create $file: $!";
+
+print "Extracting $file (with variable substitutions)\n";
+
+# In this section, perl variables will be expanded during extraction.
+# You can use $Config{...} to use Configure variables.
+
+print OUT <<"!GROK!THIS!";
+$Config{'startperl'}
+ eval 'exec perl -S \$0 "\$@"'
+ if 0;
+!GROK!THIS!
+
+# In the following, perl variables are not expanded during extraction.
+
+print OUT <<'!NO!SUBS!';
+#############################################################################
+# podchecker -- command to invoke the podchecker function in Pod::Checker
+#
+# Copyright (c) 1998-2000 by Bradford Appleton. All rights reserved.
+# This file is part of "PodParser". PodParser is free software;
+# you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+#############################################################################
+
+use strict;
+#use diagnostics;
+
+=head1 NAME
+
+podchecker - check the syntax of POD format documentation files
+
+=head1 SYNOPSIS
+
+B<podchecker> [B<-help>] [B<-man>] [B<-(no)warnings>] [I<file>S< >...]
+
+=head1 OPTIONS AND ARGUMENTS
+
+=over 8
+
+=item B<-help>
+
+Print a brief help message and exit.
+
+=item B<-man>
+
+Print the manual page and exit.
+
+=item B<-warnings> B<-nowarnings>
+
+Turn on/off printing of warnings. Repeating B<-warnings> increases the
+warning level, i.e. more warnings are printed. Currently increasing to
+level two causes flagging of unescaped "E<lt>,E<gt>" characters.
+
+=item I<file>
+
+The pathname of a POD file to syntax-check (defaults to standard input).
+
+=back
+
+=head1 DESCRIPTION
+
+B<podchecker> will read the given input files looking for POD
+syntax errors in the POD documentation and will print any errors
+it find to STDERR. At the end, it will print a status message
+indicating the number of errors found.
+
+Directories are ignored, an appropriate warning message is printed.
+
+B<podchecker> invokes the B<podchecker()> function exported by B<Pod::Checker>
+Please see L<Pod::Checker/podchecker()> for more details.
+
+=head1 RETURN VALUE
+
+B<podchecker> returns a 0 (zero) exit status if all specified
+POD files are ok.
+
+=head1 ERRORS
+
+B<podchecker> returns the exit status 1 if at least one of
+the given POD files has syntax errors.
+
+The status 2 indicates that at least one of the specified
+files does not contain I<any> POD commands.
+
+Status 1 overrides status 2. If you want unambiguous
+results, call B<podchecker> with one single argument only.
+
+=head1 SEE ALSO
+
+L<Pod::Parser> and L<Pod::Checker>
+
+=head1 AUTHORS
+
+Please report bugs using L<http://rt.cpan.org>.
+
+Brad Appleton E<lt>bradapp at enteract.comE<gt>,
+Marek Rouchal E<lt>marekr at cpan.orgE<gt>
+
+Based on code for B<Pod::Text::pod2text(1)> written by
+Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
+
+=cut
+
+
+use Pod::Checker;
+use Pod::Usage;
+use Getopt::Long;
+
+## Define options
+my %options;
+
+## Parse options
+GetOptions(\%options, qw(help man warnings+ nowarnings)) || pod2usage(2);
+pod2usage(1) if ($options{help});
+pod2usage(-verbose => 2) if ($options{man});
+
+if($options{nowarnings}) {
+ $options{warnings} = 0;
+}
+elsif(!defined $options{warnings}) {
+ $options{warnings} = 1; # default is warnings on
+}
+
+## Dont default to STDIN if connected to a terminal
+pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
+
+## Invoke podchecker()
+my $status = 0;
+ at ARGV = qw(-) unless(@ARGV);
+for my $podfile (@ARGV) {
+ if($podfile eq '-') {
+ $podfile = '<&STDIN';
+ }
+ elsif(-d $podfile) {
+ warn "podchecker: Warning: Ignoring directory '$podfile'\n";
+ next;
+ }
+ my $errors =
+ podchecker($podfile, undef, '-warnings' => $options{warnings});
+ if($errors > 0) {
+ # errors occurred
+ $status = 1;
+ printf STDERR ("%s has %d pod syntax %s.\n",
+ $podfile, $errors,
+ ($errors == 1) ? 'error' : 'errors');
+ }
+ elsif($errors < 0) {
+ # no pod found
+ $status = 2 unless($status);
+ print STDERR "$podfile does not contain any pod commands.\n";
+ }
+ else {
+ print STDERR "$podfile pod syntax OK.\n";
+ }
+}
+exit $status;
+
+!NO!SUBS!
+
+close OUT or die "Can't close $file: $!";
+chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
+exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
+chdir $origdir;
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/contains_bad_pod.xr
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/t/pod/contains_bad_pod.xr (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/t/pod/contains_bad_pod.xr 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,5 @@
+=head foo
+
+bar baz.
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/empty.xr
===================================================================
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/podchkenc.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/t/pod/podchkenc.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/t/pod/podchkenc.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+BEGIN {
+ use File::Basename;
+ my $THISDIR = dirname $0;
+ unshift @INC, $THISDIR;
+ require "testpchk.pl";
+ import TestPodChecker;
+}
+
+# this tests Pod::Checker accepts =encoding directive
+
+my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
+my $passed = testpodchecker \%options, $0;
+exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
+
+__END__
+
+=encoding utf8
+
+=encode utf8
+
+dummy error
+
+=head1 An example.
+
+'Twas brillig, and the slithy toves did gyre and gimble in the wabe.
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/podchkenc.xr
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/t/pod/podchkenc.xr (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/t/pod/podchkenc.xr 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+*** ERROR: Unknown command 'encode' at line 20 in file t/pod/podchkenc.t
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/poderrs.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/t/pod/poderrs.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/t/pod/poderrs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,241 @@
+BEGIN {
+ use File::Basename;
+ my $THISDIR = dirname $0;
+ unshift @INC, $THISDIR;
+ require "testpchk.pl";
+ import TestPodChecker;
+}
+
+my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
+my $passed = testpodchecker \%options, $0;
+exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
+
+### Deliberately throw in some blank but non-empty lines
+
+### The above line should contain spaces
+
+
+__END__
+
+=head2 This should cause a warning
+
+=head1 NAME
+
+poderrors.t - test Pod::Checker on some pod syntax errors
+
+=unknown1 this is an unknown command with two N<unknownA>
+and D<unknownB> interior sequences.
+
+This is some paragraph text with some unknown interior sequences,
+such as Q<unknown2>,
+A<unknown3>,
+and Y<unknown4 V<unknown5>>.
+
+Now try some unterminated sequences like
+I<hello mudda!
+B<hello fadda!
+
+Here I am at C<camp granada!
+
+Camps is very,
+entertaining.
+And they say we'll have some fun if it stops raining!
+
+Okay, now use a non-empty blank line to terminate a paragraph and make
+sure we get a warning.
+
+The above blank line contains tabs and spaces only
+
+=head1 Additional tests
+
+=head2 item without over
+
+=item oops
+
+=head2 back without over
+
+=back
+
+=head2 over without back
+
+=over 4
+
+=item aaps
+
+=head2 end without begin
+
+=end
+
+=head2 begin and begin
+
+=begin html
+
+=begin text
+
+=end
+
+=end
+
+second one results in end w/o begin
+
+=head2 begin w/o formatter
+
+=begin
+
+=end
+
+=head2 for w/o formatter
+
+=for
+
+something...
+
+=head2 Nested sequences of the same type
+
+C<code I<italic C<code again!>>>
+
+=head2 Garbled entities
+
+E<alea iacta est>
+E<C<auml>>
+E<abcI<bla>>
+E<0x100>
+E<07777>
+E<300>
+
+=head2 Unresolved internal links
+
+L</"begin or begin">
+L<"end with begin">
+L</OoPs>
+
+=head2 Some links with problems
+
+L<abc
+def>
+L<>
+L< aha>
+L<oho >
+L<"Warnings"> this one is ok
+L</unescaped> ok too, this POD has an X of the same name
+L<http://www.perl.org> this is OK
+L<The Perl Home Page|http://www.perl.org> this is also OK
+
+=head2 Warnings
+
+L<passwd(5)>
+L<some text with / in it|perlvar/$|> should give warnings as hell
+
+=over 4
+
+=item bla
+
+=back 200
+
+the 200 is evil
+
+=begin html
+
+What?
+
+=end xml
+
+X<unescaped>see these unescaped < and > in the text?
+
+=head2 Misc
+
+Z<ddd> should be empty
+
+X<> should not be empty
+
+=over four
+
+This paragrapgh is misplaced - it ought to be an item.
+
+=item four should be numeric!
+
+=item
+
+=item blah
+
+=item previous is all empty!!!
+
+=back
+
+All empty over/back:
+
+=over 4
+
+=back
+
+item w/o name
+
+=cut
+
+=pod bla
+
+bla is evil
+
+=cut blub
+
+blub is evil
+
+=head2 reoccurence
+
+=over 4
+
+=item Misc
+
+we already have a head Misc
+
+=back
+
+=head2 some heading
+
+=head2 another one
+
+=head2 the next line should be empty
+=head2 ... but there is a command instead
+
+And here is some text
+=head2 again followed by a command
+
+ verbatim
+=item line missing
+
+previous section is empty!
+
+=head1 LINK TESTS
+
+Due to bug reported by Rafael Garcia-Suarez "rgarciasuarez at free.fr":
+
+The following hyperlinks :
+L<"I/O Operators">
+L<perlop/"I/O Operators">
+trigger a podchecker warning (using bleadperl) :
+ node 'I/O Operators' contains non-escaped | or /
+
+=cut
+
+=pod
+
+=head1 ON-OFF tests
+
+The above =pod is OK. The following =cut is ok, the one after not.
+
+=cut
+
+# some comment or code here, not POD
+
+=cut
+
+# more code
+
+=head2 This opens POD
+
+=pod
+
+And the =pod above is too much.
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/poderrs.xr
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/t/pod/poderrs.xr (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/t/pod/poderrs.xr 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+*** WARNING: =head2 without preceding higher level at line 20 in file t/pod/poderrs.t
+*** WARNING: empty section in previous paragraph at line 22 in file t/pod/poderrs.t
+*** ERROR: Unknown command 'unknown1' at line 26 in file t/pod/poderrs.t
+*** ERROR: Unknown interior-sequence 'Q' at line 30 in file t/pod/poderrs.t
+*** ERROR: Unknown interior-sequence 'A' at line 31 in file t/pod/poderrs.t
+*** ERROR: Unknown interior-sequence 'Y' at line 32 in file t/pod/poderrs.t
+*** ERROR: Unknown interior-sequence 'V' at line 32 in file t/pod/poderrs.t
+*** ERROR: unterminated B<...> at line 36 in file t/pod/poderrs.t
+*** ERROR: unterminated I<...> at line 35 in file t/pod/poderrs.t
+*** ERROR: unterminated C<...> at line 38 in file t/pod/poderrs.t
+*** WARNING: line containing nothing but whitespace in paragraph at line 46 in file t/pod/poderrs.t
+*** ERROR: =item without previous =over at line 53 in file t/pod/poderrs.t
+*** ERROR: =back without previous =over at line 57 in file t/pod/poderrs.t
+*** ERROR: =over on line 61 without closing =back (at head2) at line 65 in file t/pod/poderrs.t
+*** ERROR: =end without =begin at line 67 in file t/pod/poderrs.t
+*** ERROR: Nested =begin's (first at line 71:html) at line 73 in file t/pod/poderrs.t
+*** ERROR: =end without =begin at line 77 in file t/pod/poderrs.t
+*** ERROR: No argument for =begin at line 83 in file t/pod/poderrs.t
+*** ERROR: =for without formatter specification at line 89 in file t/pod/poderrs.t
+*** WARNING: nested commands C<...C<...>...> at line 95 in file t/pod/poderrs.t
+*** ERROR: garbled entity E<alea iacta est> at line 99 in file t/pod/poderrs.t
+*** ERROR: garbled entity E<C<auml>> at line 100 in file t/pod/poderrs.t
+*** ERROR: garbled entity E<abcI<bla>> at line 101 in file t/pod/poderrs.t
+*** ERROR: Entity number out of range E<0x100> at line 102 in file t/pod/poderrs.t
+*** ERROR: Entity number out of range E<07777> at line 103 in file t/pod/poderrs.t
+*** ERROR: Entity number out of range E<300> at line 104 in file t/pod/poderrs.t
+*** ERROR: malformed link L<> : empty link at line 116 in file t/pod/poderrs.t
+*** WARNING: ignoring leading whitespace in link at line 117 in file t/pod/poderrs.t
+*** WARNING: ignoring trailing whitespace in link at line 118 in file t/pod/poderrs.t
+*** WARNING: (section) in 'passwd(5)' deprecated at line 126 in file t/pod/poderrs.t
+*** WARNING: node '$|' contains non-escaped | or / at line 127 in file t/pod/poderrs.t
+*** WARNING: alternative text '$|' contains non-escaped | or / at line 127 in file t/pod/poderrs.t
+*** ERROR: Spurious character(s) after =back at line 133 in file t/pod/poderrs.t
+*** ERROR: Nonempty Z<> at line 147 in file t/pod/poderrs.t
+*** ERROR: Empty X<> at line 149 in file t/pod/poderrs.t
+*** WARNING: preceding non-item paragraph(s) at line 155 in file t/pod/poderrs.t
+*** WARNING: No argument for =item at line 157 in file t/pod/poderrs.t
+*** WARNING: previous =item has no contents at line 159 in file t/pod/poderrs.t
+*** WARNING: No items in =over (at line 167) / =back list at line 169 in file t/pod/poderrs.t
+*** ERROR: Spurious text after =pod at line 175 in file t/pod/poderrs.t
+*** ERROR: Spurious text after =cut at line 179 in file t/pod/poderrs.t
+*** WARNING: empty section in previous paragraph at line 195 in file t/pod/poderrs.t
+*** ERROR: Apparent command =head2 not preceded by blank line at line 198 in file t/pod/poderrs.t
+*** WARNING: empty section in previous paragraph at line 197 in file t/pod/poderrs.t
+*** ERROR: Apparent command =head2 not preceded by blank line at line 201 in file t/pod/poderrs.t
+*** ERROR: Apparent command =item not preceded by blank line at line 204 in file t/pod/poderrs.t
+*** ERROR: Spurious =cut command at line 230 in file t/pod/poderrs.t
+*** ERROR: Spurious =pod command at line 236 in file t/pod/poderrs.t
+*** ERROR: unresolved internal link 'begin or begin' at line 108 in file t/pod/poderrs.t
+*** ERROR: unresolved internal link 'end with begin' at line 109 in file t/pod/poderrs.t
+*** ERROR: unresolved internal link 'OoPs' at line 110 in file t/pod/poderrs.t
+*** ERROR: unresolved internal link 'abc def' at line 114 in file t/pod/poderrs.t
+*** ERROR: unresolved internal link 'I/O Operators' at line 213 in file t/pod/poderrs.t
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/selfcheck.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/t/pod/selfcheck.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/t/pod/selfcheck.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+use File::Basename;
+use File::Spec;
+use strict;
+my $THISDIR;
+BEGIN {
+ $THISDIR = dirname $0;
+ unshift @INC, $THISDIR;
+ require "testpchk.pl";
+ import TestPodChecker qw(testpodcheck);
+}
+
+# test that our POD is correct!
+my $path = File::Spec->catfile($THISDIR,(File::Spec->updir()) x 2, 'lib', 'Pod', '*.pm');
+print "THISDIR=$THISDIR PATH=$path\n";
+my @pods = glob($path);
+print "PODS=@pods\n";
+
+print "1..",scalar(@pods),"\n";
+
+my $errs = 0;
+my $testnum = 1;
+foreach my $pod (@pods) {
+ my $out = File::Spec->catfile($THISDIR, basename($pod));
+ $out =~ s{\.pm}{.OUT};
+ my %options = ( -Out => $out );
+ my $failmsg = testpodcheck(-In => $pod, -Out => $out, -Cmp => "$THISDIR/empty.xr");
+ if($failmsg) {
+ if(open(IN, "<$out")) {
+ while(<IN>) {
+ warn "podchecker: $_";
+ }
+ close(IN);
+ } else {
+ warn "Error: Cannot read output file $out: $!\n";
+ }
+ print "not ok $testnum\n";
+ $errs++;
+ } else {
+ print "ok $testnum\n";
+ }
+ $testnum++;
+}
+exit( ($errs == 0) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
+
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/testcmp.pl
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/t/pod/testcmp.pl (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/t/pod/testcmp.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,94 @@
+package TestCompare;
+
+use vars qw(@ISA @EXPORT $MYPKG);
+#use strict;
+#use diagnostics;
+use Carp;
+use Exporter;
+use File::Basename;
+use File::Spec;
+use FileHandle;
+
+ at ISA = qw(Exporter);
+ at EXPORT = qw(&testcmp);
+$MYPKG = eval { (caller)[0] };
+
+##--------------------------------------------------------------------------
+
+=head1 NAME
+
+testcmp -- compare two files line-by-line
+
+=head1 SYNOPSIS
+
+ $is_diff = testcmp($file1, $file2);
+
+or
+
+ $is_diff = testcmp({-cmplines => \&mycmp}, $file1, $file2);
+
+=head2 DESCRIPTION
+
+Compare two text files line-by-line and return 0 if they are the
+same, 1 if they differ. Each of $file1 and $file2 may be a filenames,
+or a filehandles (in which case it must already be open for reading).
+
+If the first argument is a hashref, then the B<-cmplines> key in the
+hash may have a subroutine reference as its corresponding value.
+The referenced user-defined subroutine should be a line-comparator
+function that takes two pre-chomped text-lines as its arguments
+(the first is from $file1 and the second is from $file2). It should
+return 0 if it considers the two lines equivalent, and non-zero
+otherwise.
+
+=cut
+
+##--------------------------------------------------------------------------
+
+sub testcmp( $ $ ; $) {
+ my %opts = ref($_[0]) eq 'HASH' ? %{shift()} : ();
+ my ($file1, $file2) = @_;
+ my ($fh1, $fh2) = ($file1, $file2);
+ unless (ref $fh1) {
+ $fh1 = FileHandle->new($file1, "r") or die "Can't open $file1: $!";
+ }
+ unless (ref $fh2) {
+ $fh2 = FileHandle->new($file2, "r") or die "Can't open $file2: $!";
+ }
+
+ my $cmplines = $opts{'-cmplines'} || undef;
+ my ($f1text, $f2text) = ("", "");
+ my ($line, $diffs) = (0, 0);
+
+ while ( defined($f1text) and defined($f2text) ) {
+ defined($f1text = <$fh1>) and chomp($f1text);
+ defined($f2text = <$fh2>) and chomp($f2text);
+ ++$line;
+ last unless ( defined($f1text) and defined($f2text) );
+ # kill any extra line endings
+ $f1text =~ s/[\r\n]+$//s;
+ $f2text =~ s/[\r\n]+$//s;
+ $diffs = (ref $cmplines) ? &$cmplines($f1text, $f2text)
+ : ($f1text ne $f2text);
+ last if $diffs;
+ }
+ close($fh1) unless (ref $file1);
+ close($fh2) unless (ref $file2);
+
+ $diffs = 1 if (defined($f1text) or defined($f2text));
+ if ( defined($f1text) and defined($f2text) ) {
+ ## these two lines must be different
+ warn "$file1 and $file2 differ at line $line\n";
+ }
+ elsif (defined($f1text) and (! defined($f1text))) {
+ ## file1 must be shorter
+ warn "$file1 is shorter than $file2\n";
+ }
+ elsif (defined $f2text) {
+ ## file2 must be longer
+ warn "$file1 is shorter than $file2\n";
+ }
+ return $diffs;
+}
+
+1;
Added: vendor/perl/dist/cpan/Pod-Checker/t/pod/testpchk.pl
===================================================================
--- vendor/perl/dist/cpan/Pod-Checker/t/pod/testpchk.pl (rev 0)
+++ vendor/perl/dist/cpan/Pod-Checker/t/pod/testpchk.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,130 @@
+package TestPodChecker;
+
+BEGIN {
+ use File::Basename;
+ use File::Spec;
+ push @INC, '..';
+ my $THISDIR = dirname $0;
+ unshift @INC, $THISDIR;
+ require "testcmp.pl";
+ import TestCompare;
+ my $PARENTDIR = dirname $THISDIR;
+ push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
+ require VMS::Filespec if $^O eq 'VMS';
+}
+
+use Pod::Checker;
+use vars qw(@ISA @EXPORT $MYPKG);
+#use strict;
+#use diagnostics;
+use Carp;
+use Exporter;
+#use File::Compare;
+
+ at ISA = qw(Exporter);
+ at EXPORT = qw(&testpodchecker);
+ at EXPORT_OK = qw(&testpodcheck);
+$MYPKG = eval { (caller)[0] };
+
+sub stripname( $ ) {
+ local $_ = shift;
+ return /(\w[.\w]*)\s*$/ ? $1 : $_;
+}
+
+sub msgcmp( $ $ ) {
+ ## filter out platform-dependent aspects of error messages
+ my ($line1, $line2) = @_;
+ for ($line1, $line2) {
+ ## remove filenames from error messages to avoid any
+ ## filepath naming differences between OS platforms
+ s/(at line \S+ in file) .*\W(\w+\.[tT])\s*$/$1 \L$2\E/;
+ s/.*\W(\w+\.[tT]) (has \d+ pod syntax error)/\L$1\E $2/;
+ }
+ return ($line1 ne $line2);
+}
+
+sub testpodcheck( @ ) {
+ my %args = @_;
+ my $infile = $args{'-In'} || croak "No input file given!";
+ my $outfile = $args{'-Out'} || croak "No output file given!";
+ my $cmpfile = $args{'-Cmp'} || croak "No compare-result file given!";
+
+ my $different = '';
+ my $testname = basename $infile, '.t', '.xr';
+
+ unless (-e $cmpfile) {
+ my $msg = "*** Can't find comparison file $cmpfile for testing $infile";
+ warn "$msg\n";
+ return $msg;
+ }
+
+ print "# Running podchecker for '$testname'...\n";
+ ## Compare the output against the expected result
+ if ($^O eq 'VMS') {
+ for ($infile, $outfile, $cmpfile) {
+ $_ = VMS::Filespec::unixify($_) unless ref;
+ }
+ }
+ podchecker($infile, $outfile);
+ if ( testcmp({'-cmplines' => \&msgcmp}, $outfile, $cmpfile) ) {
+ $different = "$outfile is different from $cmpfile";
+ }
+ else {
+ unlink($outfile);
+ }
+ return $different;
+}
+
+sub testpodchecker( @ ) {
+ my %opts = (ref $_[0] eq 'HASH') ? %{shift()} : ();
+ my @testpods = @_;
+ my ($testname, $testdir) = ("", "");
+ my ($podfile, $cmpfile) = ("", "");
+ my ($outfile, $errfile) = ("", "");
+ my $passes = 0;
+ my $failed = 0;
+ local $_;
+
+ print "1..", scalar @testpods, "\n" unless ($opts{'-xrgen'});
+
+ for $podfile (@testpods) {
+ ($testname, $_) = fileparse($podfile);
+ $testdir ||= $_;
+ $testname =~ s/\.t$//;
+ $cmpfile = $testdir . $testname . '.xr';
+ $outfile = $testdir . $testname . '.OUT';
+
+ if ($opts{'-xrgen'}) {
+ if ($opts{'-force'} or ! -e $cmpfile) {
+ ## Create the comparison file
+ print "# Creating expected result for \"$testname\"" .
+ " podchecker test ...\n";
+ podchecker($podfile, $cmpfile);
+ }
+ else {
+ print "# File $cmpfile already exists" .
+ " (use '-force' to regenerate it).\n";
+ }
+ next;
+ }
+
+ my $failmsg = testpodcheck
+ -In => $podfile,
+ -Out => $outfile,
+ -Cmp => $cmpfile;
+ if ($failmsg) {
+ ++$failed;
+ print "#\tFAILED. ($failmsg)\n";
+ print "not ok ", $failed+$passes, "\n";
+ }
+ else {
+ ++$passes;
+ unlink($outfile);
+ print "#\tPASSED.\n";
+ print "ok ", $failed+$passes, "\n";
+ }
+ }
+ return $passes;
+}
+
+1;
Added: vendor/perl/dist/cpan/Pod-Parser/t/pod/empty.xr
===================================================================
Added: vendor/perl/dist/cpan/Pod-Parser/t/pod/selfcheck.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Parser/t/pod/selfcheck.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Parser/t/pod/selfcheck.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+use Test::More;
+use File::Basename;
+use File::Spec;
+use strict;
+my $THISDIR;
+BEGIN {
+ $THISDIR = dirname $0;
+ unshift @INC, $THISDIR;
+ eval {
+ require "testpchk.pl";
+ import TestPodChecker qw(testpodcheck);
+ };
+ warn $@ if $@;
+};
+
+my @pods;
+unless($Pod::Checker::VERSION && $Pod::Checker::VERSION > 1.40) {
+ plan skip_all => "we do not have a good Pod::Checker around";
+} else {
+ my $path = File::Spec->catfile($THISDIR,(File::Spec->updir()) x 2, 'lib', 'Pod', '*.pm');
+ print "THISDIR=$THISDIR PATH=$path\n";
+ @pods = glob($path);
+ print "PODS=@pods\n";
+ plan tests => scalar(@pods);
+}
+
+# test that our POD is correct!
+my $errs = 0;
+
+foreach my $pod (@pods) {
+ my $out = File::Spec->catfile($THISDIR, basename($pod));
+ $out =~ s{\.pm}{.OUT};
+ my %options = ( -Out => $out );
+ my $failmsg = testpodcheck(-In => $pod, -Out => $out, -Cmp => "$THISDIR/empty.xr");
+ if($failmsg) {
+ if(open(IN, "<$out")) {
+ while(<IN>) {
+ warn "podchecker: $_";
+ }
+ close(IN);
+ } else {
+ warn "Error: Cannot read output file $out: $!\n";
+ }
+ ok(0, $pod);
+ $errs++;
+ } else {
+ ok(1, $pod);
+ }
+}
+
+exit( ($errs == 0) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/corpus/no-head.pod
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/corpus/no-head.pod (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/corpus/no-head.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,5 @@
+=pod
+
+This is a line of text
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/corpus/perlfunc.pod
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/corpus/perlfunc.pod (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/corpus/perlfunc.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,8298 @@
+=head1 NAME
+X<function>
+
+perlfunc - Perl builtin functions
+
+=head1 DESCRIPTION
+
+The functions in this section can serve as terms in an expression.
+They fall into two major categories: list operators and named unary
+operators. These differ in their precedence relationship with a
+following comma. (See the precedence table in L<perlop>.) List
+operators take more than one argument, while unary operators can never
+take more than one argument. Thus, a comma terminates the argument of
+a unary operator, but merely separates the arguments of a list
+operator. A unary operator generally provides scalar context to its
+argument, while a list operator may provide either scalar or list
+contexts for its arguments. If it does both, scalar arguments
+come first and list argument follow, and there can only ever
+be one such list argument. For instance, splice() has three scalar
+arguments followed by a list, whereas gethostbyname() has four scalar
+arguments.
+
+In the syntax descriptions that follow, list operators that expect a
+list (and provide list context for elements of the list) are shown
+with LIST as an argument. Such a list may consist of any combination
+of scalar arguments or list values; the list values will be included
+in the list as if each individual element were interpolated at that
+point in the list, forming a longer single-dimensional list value.
+Commas should separate literal elements of the LIST.
+
+Any function in the list below may be used either with or without
+parentheses around its arguments. (The syntax descriptions omit the
+parentheses.) If you use parentheses, the simple but occasionally
+surprising rule is this: It I<looks> like a function, therefore it I<is> a
+function, and precedence doesn't matter. Otherwise it's a list
+operator or unary operator, and precedence does matter. Whitespace
+between the function and left parenthesis doesn't count, so sometimes
+you need to be careful:
+
+ print 1+2+4; # Prints 7.
+ print(1+2) + 4; # Prints 3.
+ print (1+2)+4; # Also prints 3!
+ print +(1+2)+4; # Prints 7.
+ print ((1+2)+4); # Prints 7.
+
+If you run Perl with the B<-w> switch it can warn you about this. For
+example, the third line above produces:
+
+ print (...) interpreted as function at - line 1.
+ Useless use of integer addition in void context at - line 1.
+
+A few functions take no arguments at all, and therefore work as neither
+unary nor list operators. These include such functions as C<time>
+and C<endpwent>. For example, C<time+86_400> always means
+C<time() + 86_400>.
+
+For functions that can be used in either a scalar or list context,
+nonabortive failure is generally indicated in scalar context by
+returning the undefined value, and in list context by returning the
+empty list.
+
+Remember the following important rule: There is B<no rule> that relates
+the behavior of an expression in list context to its behavior in scalar
+context, or vice versa. It might do two totally different things.
+Each operator and function decides which sort of value would be most
+appropriate to return in scalar context. Some operators return the
+length of the list that would have been returned in list context. Some
+operators return the first value in the list. Some operators return the
+last value in the list. Some operators return a count of successful
+operations. In general, they do what you want, unless you want
+consistency.
+X<context>
+
+A named array in scalar context is quite different from what would at
+first glance appear to be a list in scalar context. You can't get a list
+like C<(1,2,3)> into being in scalar context, because the compiler knows
+the context at compile time. It would generate the scalar comma operator
+there, not the list construction version of the comma. That means it
+was never a list to start with.
+
+In general, functions in Perl that serve as wrappers for system calls ("syscalls")
+of the same name (like chown(2), fork(2), closedir(2), etc.) return
+true when they succeed and C<undef> otherwise, as is usually mentioned
+in the descriptions below. This is different from the C interfaces,
+which return C<-1> on failure. Exceptions to this rule include C<wait>,
+C<waitpid>, and C<syscall>. System calls also set the special C<$!>
+variable on failure. Other functions do not, except accidentally.
+
+Extension modules can also hook into the Perl parser to define new
+kinds of keyword-headed expression. These may look like functions, but
+may also look completely different. The syntax following the keyword
+is defined entirely by the extension. If you are an implementor, see
+L<perlapi/PL_keyword_plugin> for the mechanism. If you are using such
+a module, see the module's documentation for details of the syntax that
+it defines.
+
+=head2 Perl Functions by Category
+X<function>
+
+Here are Perl's functions (including things that look like
+functions, like some keywords and named operators)
+arranged by category. Some functions appear in more
+than one place.
+
+=over 4
+
+=item Functions for SCALARs or strings
+X<scalar> X<string> X<character>
+
+C<chomp>, C<chop>, C<chr>, C<crypt>, C<hex>, C<index>, C<lc>, C<lcfirst>,
+C<length>, C<oct>, C<ord>, C<pack>, C<q//>, C<qq//>, C<reverse>,
+C<rindex>, C<sprintf>, C<substr>, C<tr///>, C<uc>, C<ucfirst>, C<y///>
+
+=item Regular expressions and pattern matching
+X<regular expression> X<regex> X<regexp>
+
+C<m//>, C<pos>, C<quotemeta>, C<s///>, C<split>, C<study>, C<qr//>
+
+=item Numeric functions
+X<numeric> X<number> X<trigonometric> X<trigonometry>
+
+C<abs>, C<atan2>, C<cos>, C<exp>, C<hex>, C<int>, C<log>, C<oct>, C<rand>,
+C<sin>, C<sqrt>, C<srand>
+
+=item Functions for real @ARRAYs
+X<array>
+
+C<each>, C<keys>, C<pop>, C<push>, C<shift>, C<splice>, C<unshift>, C<values>
+
+=item Functions for list data
+X<list>
+
+C<grep>, C<join>, C<map>, C<qw//>, C<reverse>, C<sort>, C<unpack>
+
+=item Functions for real %HASHes
+X<hash>
+
+C<delete>, C<each>, C<exists>, C<keys>, C<values>
+
+=item Input and output functions
+X<I/O> X<input> X<output> X<dbm>
+
+C<binmode>, C<close>, C<closedir>, C<dbmclose>, C<dbmopen>, C<die>, C<eof>,
+C<fileno>, C<flock>, C<format>, C<getc>, C<print>, C<printf>, C<read>,
+C<readdir>, C<rewinddir>, C<say>, C<seek>, C<seekdir>, C<select>, C<syscall>,
+C<sysread>, C<sysseek>, C<syswrite>, C<tell>, C<telldir>, C<truncate>,
+C<warn>, C<write>
+
+=item Functions for fixed-length data or records
+
+C<pack>, C<read>, C<syscall>, C<sysread>, C<syswrite>, C<unpack>, C<vec>
+
+=item Functions for filehandles, files, or directories
+X<file> X<filehandle> X<directory> X<pipe> X<link> X<symlink>
+
+C<-I<X>>, C<chdir>, C<chmod>, C<chown>, C<chroot>, C<fcntl>, C<glob>,
+C<ioctl>, C<link>, C<lstat>, C<mkdir>, C<open>, C<opendir>,
+C<readlink>, C<rename>, C<rmdir>, C<stat>, C<symlink>, C<sysopen>,
+C<umask>, C<unlink>, C<utime>
+
+=item Keywords related to the control flow of your Perl program
+X<control flow>
+
+C<caller>, C<continue>, C<die>, C<do>,
+C<dump>, C<eval>, C<evalbytes> C<exit>,
+C<__FILE__>, C<goto>, C<last>, C<__LINE__>, C<next>, C<__PACKAGE__>,
+C<redo>, C<return>, C<sub>, C<__SUB__>, C<wantarray>
+
+C<__SUB__> is only available with a C<use v5.16> (or higher) declaration or
+with the C<"current_sub"> feature (see L<feature>).
+
+=item Keywords related to the switch feature
+
+C<break>, C<continue>, C<default>, C<given>, C<when>
+
+Except for C<continue>, these are available only if you enable the
+C<"switch"> feature or use the C<CORE::> prefix.
+See L<feature> and L<perlsyn/"Switch statements">.
+Alternately, include a C<use v5.10> or later to the current scope. In Perl
+5.14 and earlier, C<continue> required the C<"switch"> feature, like the
+other keywords.
+
+=item Keywords related to scoping
+
+C<caller>, C<import>, C<local>, C<my>, C<our>, C<package>, C<state>, C<use>
+
+C<state> is available only if the C<"state"> feature
+is enabled or if it is prefixed with C<CORE::>. See
+L<feature>. Alternately, include a C<use v5.10> or later to the current scope.
+
+=item Miscellaneous functions
+
+C<defined>, C<dump>, C<eval>, C<evalbytes>,
+C<formline>, C<local>, C<my>, C<our>,
+C<reset>, C<scalar>, C<state>, C<undef>, C<wantarray>
+
+=item Functions for processes and process groups
+X<process> X<pid> X<process id>
+
+C<alarm>, C<exec>, C<fork>, C<getpgrp>, C<getppid>, C<getpriority>, C<kill>,
+C<pipe>, C<qx//>, C<readpipe>, C<setpgrp>,
+C<setpriority>, C<sleep>, C<system>,
+C<times>, C<wait>, C<waitpid>
+
+=item Keywords related to Perl modules
+X<module>
+
+C<do>, C<import>, C<no>, C<package>, C<require>, C<use>
+
+=item Keywords related to classes and object-orientation
+X<object> X<class> X<package>
+
+C<bless>, C<dbmclose>, C<dbmopen>, C<package>, C<ref>, C<tie>, C<tied>,
+C<untie>, C<use>
+
+=item Low-level socket functions
+X<socket> X<sock>
+
+C<accept>, C<bind>, C<connect>, C<getpeername>, C<getsockname>,
+C<getsockopt>, C<listen>, C<recv>, C<send>, C<setsockopt>, C<shutdown>,
+C<socket>, C<socketpair>
+
+=item System V interprocess communication functions
+X<IPC> X<System V> X<semaphore> X<shared memory> X<memory> X<message>
+
+C<msgctl>, C<msgget>, C<msgrcv>, C<msgsnd>, C<semctl>, C<semget>, C<semop>,
+C<shmctl>, C<shmget>, C<shmread>, C<shmwrite>
+
+=item Fetching user and group info
+X<user> X<group> X<password> X<uid> X<gid> X<passwd> X</etc/passwd>
+
+C<endgrent>, C<endhostent>, C<endnetent>, C<endpwent>, C<getgrent>,
+C<getgrgid>, C<getgrnam>, C<getlogin>, C<getpwent>, C<getpwnam>,
+C<getpwuid>, C<setgrent>, C<setpwent>
+
+=item Fetching network info
+X<network> X<protocol> X<host> X<hostname> X<IP> X<address> X<service>
+
+C<endprotoent>, C<endservent>, C<gethostbyaddr>, C<gethostbyname>,
+C<gethostent>, C<getnetbyaddr>, C<getnetbyname>, C<getnetent>,
+C<getprotobyname>, C<getprotobynumber>, C<getprotoent>,
+C<getservbyname>, C<getservbyport>, C<getservent>, C<sethostent>,
+C<setnetent>, C<setprotoent>, C<setservent>
+
+=item Time-related functions
+X<time> X<date>
+
+C<gmtime>, C<localtime>, C<time>, C<times>
+
+=item Functions new in perl5
+X<perl5>
+
+C<abs>, C<bless>, C<break>, C<chomp>, C<chr>, C<continue>, C<default>,
+C<exists>, C<formline>, C<given>, C<glob>, C<import>, C<lc>, C<lcfirst>,
+C<lock>, C<map>, C<my>, C<no>, C<our>, C<prototype>, C<qr//>, C<qw//>, C<qx//>,
+C<readline>, C<readpipe>, C<ref>, C<sub>*, C<sysopen>, C<tie>, C<tied>, C<uc>,
+C<ucfirst>, C<untie>, C<use>, C<when>
+
+* C<sub> was a keyword in Perl 4, but in Perl 5 it is an
+operator, which can be used in expressions.
+
+=item Functions obsoleted in perl5
+
+C<dbmclose>, C<dbmopen>
+
+=back
+
+=head2 Portability
+X<portability> X<Unix> X<portable>
+
+Perl was born in Unix and can therefore access all common Unix
+system calls. In non-Unix environments, the functionality of some
+Unix system calls may not be available or details of the available
+functionality may differ slightly. The Perl functions affected
+by this are:
+
+C<-X>, C<binmode>, C<chmod>, C<chown>, C<chroot>, C<crypt>,
+C<dbmclose>, C<dbmopen>, C<dump>, C<endgrent>, C<endhostent>,
+C<endnetent>, C<endprotoent>, C<endpwent>, C<endservent>, C<exec>,
+C<fcntl>, C<flock>, C<fork>, C<getgrent>, C<getgrgid>, C<gethostbyname>,
+C<gethostent>, C<getlogin>, C<getnetbyaddr>, C<getnetbyname>, C<getnetent>,
+C<getppid>, C<getpgrp>, C<getpriority>, C<getprotobynumber>,
+C<getprotoent>, C<getpwent>, C<getpwnam>, C<getpwuid>,
+C<getservbyport>, C<getservent>, C<getsockopt>, C<glob>, C<ioctl>,
+C<kill>, C<link>, C<lstat>, C<msgctl>, C<msgget>, C<msgrcv>,
+C<msgsnd>, C<open>, C<pipe>, C<readlink>, C<rename>, C<select>, C<semctl>,
+C<semget>, C<semop>, C<setgrent>, C<sethostent>, C<setnetent>,
+C<setpgrp>, C<setpriority>, C<setprotoent>, C<setpwent>,
+C<setservent>, C<setsockopt>, C<shmctl>, C<shmget>, C<shmread>,
+C<shmwrite>, C<socket>, C<socketpair>,
+C<stat>, C<symlink>, C<syscall>, C<sysopen>, C<system>,
+C<times>, C<truncate>, C<umask>, C<unlink>,
+C<utime>, C<wait>, C<waitpid>
+
+For more information about the portability of these functions, see
+L<perlport> and other available platform-specific documentation.
+
+=head2 Alphabetical Listing of Perl Functions
+
+=over
+
+=item -X FILEHANDLE
+X<-r>X<-w>X<-x>X<-o>X<-R>X<-W>X<-X>X<-O>X<-e>X<-z>X<-s>X<-f>X<-d>X<-l>X<-p>
+X<-S>X<-b>X<-c>X<-t>X<-u>X<-g>X<-k>X<-T>X<-B>X<-M>X<-A>X<-C>
+
+=item -X EXPR
+
+=item -X DIRHANDLE
+
+=item -X
+
+A file test, where X is one of the letters listed below. This unary
+operator takes one argument, either a filename, a filehandle, or a dirhandle,
+and tests the associated file to see if something is true about it. If the
+argument is omitted, tests C<$_>, except for C<-t>, which tests STDIN.
+Unless otherwise documented, it returns C<1> for true and C<''> for false, or
+the undefined value if the file doesn't exist. Despite the funny
+names, precedence is the same as any other named unary operator. The
+operator may be any of:
+
+ -r File is readable by effective uid/gid.
+ -w File is writable by effective uid/gid.
+ -x File is executable by effective uid/gid.
+ -o File is owned by effective uid.
+
+ -R File is readable by real uid/gid.
+ -W File is writable by real uid/gid.
+ -X File is executable by real uid/gid.
+ -O File is owned by real uid.
+
+ -e File exists.
+ -z File has zero size (is empty).
+ -s File has nonzero size (returns size in bytes).
+
+ -f File is a plain file.
+ -d File is a directory.
+ -l File is a symbolic link.
+ -p File is a named pipe (FIFO), or Filehandle is a pipe.
+ -S File is a socket.
+ -b File is a block special file.
+ -c File is a character special file.
+ -t Filehandle is opened to a tty.
+
+ -u File has setuid bit set.
+ -g File has setgid bit set.
+ -k File has sticky bit set.
+
+ -T File is an ASCII text file (heuristic guess).
+ -B File is a "binary" file (opposite of -T).
+
+ -M Script start time minus file modification time, in days.
+ -A Same for access time.
+ -C Same for inode change time (Unix, may differ for other platforms)
+
+Example:
+
+ while (<>) {
+ chomp;
+ next unless -f $_; # ignore specials
+ #...
+ }
+
+Note that C<-s/a/b/> does not do a negated substitution. Saying
+C<-exp($foo)> still works as expected, however: only single letters
+following a minus are interpreted as file tests.
+
+These operators are exempt from the "looks like a function rule" described
+above. That is, an opening parenthesis after the operator does not affect
+how much of the following code constitutes the argument. Put the opening
+parentheses before the operator to separate it from code that follows (this
+applies only to operators with higher precedence than unary operators, of
+course):
+
+ -s($file) + 1024 # probably wrong; same as -s($file + 1024)
+ (-s $file) + 1024 # correct
+
+The interpretation of the file permission operators C<-r>, C<-R>,
+C<-w>, C<-W>, C<-x>, and C<-X> is by default based solely on the mode
+of the file and the uids and gids of the user. There may be other
+reasons you can't actually read, write, or execute the file: for
+example network filesystem access controls, ACLs (access control lists),
+read-only filesystems, and unrecognized executable formats. Note
+that the use of these six specific operators to verify if some operation
+is possible is usually a mistake, because it may be open to race
+conditions.
+
+Also note that, for the superuser on the local filesystems, the C<-r>,
+C<-R>, C<-w>, and C<-W> tests always return 1, and C<-x> and C<-X> return 1
+if any execute bit is set in the mode. Scripts run by the superuser
+may thus need to do a stat() to determine the actual mode of the file,
+or temporarily set their effective uid to something else.
+
+If you are using ACLs, there is a pragma called C<filetest> that may
+produce more accurate results than the bare stat() mode bits.
+When under C<use filetest 'access'> the above-mentioned filetests
+test whether the permission can(not) be granted using the
+access(2) family of system calls. Also note that the C<-x> and C<-X> may
+under this pragma return true even if there are no execute permission
+bits set (nor any extra execute permission ACLs). This strangeness is
+due to the underlying system calls' definitions. Note also that, due to
+the implementation of C<use filetest 'access'>, the C<_> special
+filehandle won't cache the results of the file tests when this pragma is
+in effect. Read the documentation for the C<filetest> pragma for more
+information.
+
+The C<-T> and C<-B> switches work as follows. The first block or so of the
+file is examined for odd characters such as strange control codes or
+characters with the high bit set. If too many strange characters (>30%)
+are found, it's a C<-B> file; otherwise it's a C<-T> file. Also, any file
+containing a zero byte in the first block is considered a binary file. If C<-T>
+or C<-B> is used on a filehandle, the current IO buffer is examined
+rather than the first block. Both C<-T> and C<-B> return true on an empty
+file, or a file at EOF when testing a filehandle. Because you have to
+read a file to do the C<-T> test, on most occasions you want to use a C<-f>
+against the file first, as in C<next unless -f $file && -T $file>.
+
+If any of the file tests (or either the C<stat> or C<lstat> operator) is given
+the special filehandle consisting of a solitary underline, then the stat
+structure of the previous file test (or stat operator) is used, saving
+a system call. (This doesn't work with C<-t>, and you need to remember
+that lstat() and C<-l> leave values in the stat structure for the
+symbolic link, not the real file.) (Also, if the stat buffer was filled by
+an C<lstat> call, C<-T> and C<-B> will reset it with the results of C<stat _>).
+Example:
+
+ print "Can do.\n" if -r $a || -w _ || -x _;
+
+ stat($filename);
+ print "Readable\n" if -r _;
+ print "Writable\n" if -w _;
+ print "Executable\n" if -x _;
+ print "Setuid\n" if -u _;
+ print "Setgid\n" if -g _;
+ print "Sticky\n" if -k _;
+ print "Text\n" if -T _;
+ print "Binary\n" if -B _;
+
+As of Perl 5.9.1, as a form of purely syntactic sugar, you can stack file
+test operators, in a way that C<-f -w -x $file> is equivalent to
+C<-x $file && -w _ && -f _>. (This is only fancy fancy: if you use
+the return value of C<-f $file> as an argument to another filetest
+operator, no special magic will happen.)
+
+Portability issues: L<perlport/-X>.
+
+=item abs VALUE
+X<abs> X<absolute>
+
+=item abs
+
+Returns the absolute value of its argument.
+If VALUE is omitted, uses C<$_>.
+
+=item accept NEWSOCKET,GENERICSOCKET
+X<accept>
+
+Accepts an incoming socket connect, just as accept(2)
+does. Returns the packed address if it succeeded, false otherwise.
+See the example in L<perlipc/"Sockets: Client/Server Communication">.
+
+On systems that support a close-on-exec flag on files, the flag will
+be set for the newly opened file descriptor, as determined by the
+value of $^F. See L<perlvar/$^F>.
+
+=item alarm SECONDS
+X<alarm>
+X<SIGALRM>
+X<timer>
+
+=item alarm
+
+Arranges to have a SIGALRM delivered to this process after the
+specified number of wallclock seconds has elapsed. If SECONDS is not
+specified, the value stored in C<$_> is used. (On some machines,
+unfortunately, the elapsed time may be up to one second less or more
+than you specified because of how seconds are counted, and process
+scheduling may delay the delivery of the signal even further.)
+
+Only one timer may be counting at once. Each call disables the
+previous timer, and an argument of C<0> may be supplied to cancel the
+previous timer without starting a new one. The returned value is the
+amount of time remaining on the previous timer.
+
+For delays of finer granularity than one second, the Time::HiRes module
+(from CPAN, and starting from Perl 5.8 part of the standard
+distribution) provides ualarm(). You may also use Perl's four-argument
+version of select() leaving the first three arguments undefined, or you
+might be able to use the C<syscall> interface to access setitimer(2) if
+your system supports it. See L<perlfaq8> for details.
+
+It is usually a mistake to intermix C<alarm> and C<sleep> calls, because
+C<sleep> may be internally implemented on your system with C<alarm>.
+
+If you want to use C<alarm> to time out a system call you need to use an
+C<eval>/C<die> pair. You can't rely on the alarm causing the system call to
+fail with C<$!> set to C<EINTR> because Perl sets up signal handlers to
+restart system calls on some systems. Using C<eval>/C<die> always works,
+modulo the caveats given in L<perlipc/"Signals">.
+
+ eval {
+ local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
+ alarm $timeout;
+ $nread = sysread SOCKET, $buffer, $size;
+ alarm 0;
+ };
+ if ($@) {
+ die unless $@ eq "alarm\n"; # propagate unexpected errors
+ # timed out
+ }
+ else {
+ # didn't
+ }
+
+For more information see L<perlipc>.
+
+Portability issues: L<perlport/alarm>.
+
+=item atan2 Y,X
+X<atan2> X<arctangent> X<tan> X<tangent>
+
+Returns the arctangent of Y/X in the range -PI to PI.
+
+For the tangent operation, you may use the C<Math::Trig::tan>
+function, or use the familiar relation:
+
+ sub tan { sin($_[0]) / cos($_[0]) }
+
+The return value for C<atan2(0,0)> is implementation-defined; consult
+your atan2(3) manpage for more information.
+
+Portability issues: L<perlport/atan2>.
+
+=item bind SOCKET,NAME
+X<bind>
+
+Binds a network address to a socket, just as bind(2)
+does. Returns true if it succeeded, false otherwise. NAME should be a
+packed address of the appropriate type for the socket. See the examples in
+L<perlipc/"Sockets: Client/Server Communication">.
+
+=item binmode FILEHANDLE, LAYER
+X<binmode> X<binary> X<text> X<DOS> X<Windows>
+
+=item binmode FILEHANDLE
+
+Arranges for FILEHANDLE to be read or written in "binary" or "text"
+mode on systems where the run-time libraries distinguish between
+binary and text files. If FILEHANDLE is an expression, the value is
+taken as the name of the filehandle. Returns true on success,
+otherwise it returns C<undef> and sets C<$!> (errno).
+
+On some systems (in general, DOS- and Windows-based systems) binmode()
+is necessary when you're not working with a text file. For the sake
+of portability it is a good idea always to use it when appropriate,
+and never to use it when it isn't appropriate. Also, people can
+set their I/O to be by default UTF8-encoded Unicode, not bytes.
+
+In other words: regardless of platform, use binmode() on binary data,
+like images, for example.
+
+If LAYER is present it is a single string, but may contain multiple
+directives. The directives alter the behaviour of the filehandle.
+When LAYER is present, using binmode on a text file makes sense.
+
+If LAYER is omitted or specified as C<:raw> the filehandle is made
+suitable for passing binary data. This includes turning off possible CRLF
+translation and marking it as bytes (as opposed to Unicode characters).
+Note that, despite what may be implied in I<"Programming Perl"> (the
+Camel, 3rd edition) or elsewhere, C<:raw> is I<not> simply the inverse of C<:crlf>.
+Other layers that would affect the binary nature of the stream are
+I<also> disabled. See L<PerlIO>, L<perlrun>, and the discussion about the
+PERLIO environment variable.
+
+The C<:bytes>, C<:crlf>, C<:utf8>, and any other directives of the
+form C<:...>, are called I/O I<layers>. The C<open> pragma can be used to
+establish default I/O layers. See L<open>.
+
+I<The LAYER parameter of the binmode() function is described as "DISCIPLINE"
+in "Programming Perl, 3rd Edition". However, since the publishing of this
+book, by many known as "Camel III", the consensus of the naming of this
+functionality has moved from "discipline" to "layer". All documentation
+of this version of Perl therefore refers to "layers" rather than to
+"disciplines". Now back to the regularly scheduled documentation...>
+
+To mark FILEHANDLE as UTF-8, use C<:utf8> or C<:encoding(UTF-8)>.
+C<:utf8> just marks the data as UTF-8 without further checking,
+while C<:encoding(UTF-8)> checks the data for actually being valid
+UTF-8. More details can be found in L<PerlIO::encoding>.
+
+In general, binmode() should be called after open() but before any I/O
+is done on the filehandle. Calling binmode() normally flushes any
+pending buffered output data (and perhaps pending input data) on the
+handle. An exception to this is the C<:encoding> layer that
+changes the default character encoding of the handle; see L</open>.
+The C<:encoding> layer sometimes needs to be called in
+mid-stream, and it doesn't flush the stream. The C<:encoding>
+also implicitly pushes on top of itself the C<:utf8> layer because
+internally Perl operates on UTF8-encoded Unicode characters.
+
+The operating system, device drivers, C libraries, and Perl run-time
+system all conspire to let the programmer treat a single
+character (C<\n>) as the line terminator, irrespective of external
+representation. On many operating systems, the native text file
+representation matches the internal representation, but on some
+platforms the external representation of C<\n> is made up of more than
+one character.
+
+All variants of Unix, Mac OS (old and new), and Stream_LF files on VMS use
+a single character to end each line in the external representation of text
+(even though that single character is CARRIAGE RETURN on old, pre-Darwin
+flavors of Mac OS, and is LINE FEED on Unix and most VMS files). In other
+systems like OS/2, DOS, and the various flavors of MS-Windows, your program
+sees a C<\n> as a simple C<\cJ>, but what's stored in text files are the
+two characters C<\cM\cJ>. That means that if you don't use binmode() on
+these systems, C<\cM\cJ> sequences on disk will be converted to C<\n> on
+input, and any C<\n> in your program will be converted back to C<\cM\cJ> on
+output. This is what you want for text files, but it can be disastrous for
+binary files.
+
+Another consequence of using binmode() (on some systems) is that
+special end-of-file markers will be seen as part of the data stream.
+For systems from the Microsoft family this means that, if your binary
+data contain C<\cZ>, the I/O subsystem will regard it as the end of
+the file, unless you use binmode().
+
+binmode() is important not only for readline() and print() operations,
+but also when using read(), seek(), sysread(), syswrite() and tell()
+(see L<perlport> for more details). See the C<$/> and C<$\> variables
+in L<perlvar> for how to manually set your input and output
+line-termination sequences.
+
+Portability issues: L<perlport/binmode>.
+
+=item bless REF,CLASSNAME
+X<bless>
+
+=item bless REF
+
+This function tells the thingy referenced by REF that it is now an object
+in the CLASSNAME package. If CLASSNAME is omitted, the current package
+is used. Because a C<bless> is often the last thing in a constructor,
+it returns the reference for convenience. Always use the two-argument
+version if a derived class might inherit the function doing the blessing.
+SeeL<perlobj> for more about the blessing (and blessings) of objects.
+
+Consider always blessing objects in CLASSNAMEs that are mixed case.
+Namespaces with all lowercase names are considered reserved for
+Perl pragmata. Builtin types have all uppercase names. To prevent
+confusion, you may wish to avoid such package names as well. Make sure
+that CLASSNAME is a true value.
+
+See L<perlmod/"Perl Modules">.
+
+=item break
+
+Break out of a C<given()> block.
+
+This keyword is enabled by the C<"switch"> feature: see
+L<feature> for more information. You can also access it by
+prefixing it with C<CORE::>. Alternately, include a C<use
+v5.10> or later to the current scope.
+
+=item caller EXPR
+X<caller> X<call stack> X<stack> X<stack trace>
+
+=item caller
+
+Returns the context of the current subroutine call. In scalar context,
+returns the caller's package name if there I<is> a caller (that is, if
+we're in a subroutine or C<eval> or C<require>) and the undefined value
+otherwise. In list context, returns
+
+ # 0 1 2
+ ($package, $filename, $line) = caller;
+
+With EXPR, it returns some extra information that the debugger uses to
+print a stack trace. The value of EXPR indicates how many call frames
+to go back before the current one.
+
+ # 0 1 2 3 4
+ ($package, $filename, $line, $subroutine, $hasargs,
+
+ # 5 6 7 8 9 10
+ $wantarray, $evaltext, $is_require, $hints, $bitmask, $hinthash)
+ = caller($i);
+
+Here $subroutine may be C<(eval)> if the frame is not a subroutine
+call, but an C<eval>. In such a case additional elements $evaltext and
+C<$is_require> are set: C<$is_require> is true if the frame is created by a
+C<require> or C<use> statement, $evaltext contains the text of the
+C<eval EXPR> statement. In particular, for an C<eval BLOCK> statement,
+$subroutine is C<(eval)>, but $evaltext is undefined. (Note also that
+each C<use> statement creates a C<require> frame inside an C<eval EXPR>
+frame.) $subroutine may also be C<(unknown)> if this particular
+subroutine happens to have been deleted from the symbol table.
+C<$hasargs> is true if a new instance of C<@_> was set up for the frame.
+C<$hints> and C<$bitmask> contain pragmatic hints that the caller was
+compiled with. The C<$hints> and C<$bitmask> values are subject to change
+between versions of Perl, and are not meant for external use.
+
+C<$hinthash> is a reference to a hash containing the value of C<%^H> when the
+caller was compiled, or C<undef> if C<%^H> was empty. Do not modify the values
+of this hash, as they are the actual values stored in the optree.
+
+Furthermore, when called from within the DB package, caller returns more
+detailed information: it sets the list variable C<@DB::args> to be the
+arguments with which the subroutine was invoked.
+
+Be aware that the optimizer might have optimized call frames away before
+C<caller> had a chance to get the information. That means that C<caller(N)>
+might not return information about the call frame you expect it to, for
+C<< N > 1 >>. In particular, C<@DB::args> might have information from the
+previous time C<caller> was called.
+
+Be aware that setting C<@DB::args> is I<best effort>, intended for
+debugging or generating backtraces, and should not be relied upon. In
+particular, as C<@_> contains aliases to the caller's arguments, Perl does
+not take a copy of C<@_>, so C<@DB::args> will contain modifications the
+subroutine makes to C<@_> or its contents, not the original values at call
+time. C<@DB::args>, like C<@_>, does not hold explicit references to its
+elements, so under certain cases its elements may have become freed and
+reallocated for other variables or temporary values. Finally, a side effect
+of the current implementation is that the effects of C<shift @_> can
+I<normally> be undone (but not C<pop @_> or other splicing, I<and> not if a
+reference to C<@_> has been taken, I<and> subject to the caveat about reallocated
+elements), so C<@DB::args> is actually a hybrid of the current state and
+initial state of C<@_>. Buyer beware.
+
+=item chdir EXPR
+X<chdir>
+X<cd>
+X<directory, change>
+
+=item chdir FILEHANDLE
+
+=item chdir DIRHANDLE
+
+=item chdir
+
+Changes the working directory to EXPR, if possible. If EXPR is omitted,
+changes to the directory specified by C<$ENV{HOME}>, if set; if not,
+changes to the directory specified by C<$ENV{LOGDIR}>. (Under VMS, the
+variable C<$ENV{SYS$LOGIN}> is also checked, and used if it is set.) If
+neither is set, C<chdir> does nothing. It returns true on success,
+false otherwise. See the example under C<die>.
+
+On systems that support fchdir(2), you may pass a filehandle or
+directory handle as the argument. On systems that don't support fchdir(2),
+passing handles raises an exception.
+
+=item chmod LIST
+X<chmod> X<permission> X<mode>
+
+Changes the permissions of a list of files. The first element of the
+list must be the numeric mode, which should probably be an octal
+number, and which definitely should I<not> be a string of octal digits:
+C<0644> is okay, but C<"0644"> is not. Returns the number of files
+successfully changed. See also L</oct> if all you have is a string.
+
+ $cnt = chmod 0755, "foo", "bar";
+ chmod 0755, @executables;
+ $mode = "0644"; chmod $mode, "foo"; # !!! sets mode to
+ # --w----r-T
+ $mode = "0644"; chmod oct($mode), "foo"; # this is better
+ $mode = 0644; chmod $mode, "foo"; # this is best
+
+On systems that support fchmod(2), you may pass filehandles among the
+files. On systems that don't support fchmod(2), passing filehandles raises
+an exception. Filehandles must be passed as globs or glob references to be
+recognized; barewords are considered filenames.
+
+ open(my $fh, "<", "foo");
+ my $perm = (stat $fh)[2] & 07777;
+ chmod($perm | 0600, $fh);
+
+You can also import the symbolic C<S_I*> constants from the C<Fcntl>
+module:
+
+ use Fcntl qw( :mode );
+ chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, @executables;
+ # Identical to the chmod 0755 of the example above.
+
+Portability issues: L<perlport/chmod>.
+
+=item chomp VARIABLE
+X<chomp> X<INPUT_RECORD_SEPARATOR> X<$/> X<newline> X<eol>
+
+=item chomp( LIST )
+
+=item chomp
+
+This safer version of L</chop> removes any trailing string
+that corresponds to the current value of C<$/> (also known as
+$INPUT_RECORD_SEPARATOR in the C<English> module). It returns the total
+number of characters removed from all its arguments. It's often used to
+remove the newline from the end of an input record when you're worried
+that the final record may be missing its newline. When in paragraph
+mode (C<$/ = "">), it removes all trailing newlines from the string.
+When in slurp mode (C<$/ = undef>) or fixed-length record mode (C<$/> is
+a reference to an integer or the like; see L<perlvar>) chomp() won't
+remove anything.
+If VARIABLE is omitted, it chomps C<$_>. Example:
+
+ while (<>) {
+ chomp; # avoid \n on last field
+ @array = split(/:/);
+ # ...
+ }
+
+If VARIABLE is a hash, it chomps the hash's values, but not its keys.
+
+You can actually chomp anything that's an lvalue, including an assignment:
+
+ chomp($cwd = `pwd`);
+ chomp($answer = <STDIN>);
+
+If you chomp a list, each element is chomped, and the total number of
+characters removed is returned.
+
+Note that parentheses are necessary when you're chomping anything
+that is not a simple variable. This is because C<chomp $cwd = `pwd`;>
+is interpreted as C<(chomp $cwd) = `pwd`;>, rather than as
+C<chomp( $cwd = `pwd` )> which you might expect. Similarly,
+C<chomp $a, $b> is interpreted as C<chomp($a), $b> rather than
+as C<chomp($a, $b)>.
+
+=item chop VARIABLE
+X<chop>
+
+=item chop( LIST )
+
+=item chop
+
+Chops off the last character of a string and returns the character
+chopped. It is much more efficient than C<s/.$//s> because it neither
+scans nor copies the string. If VARIABLE is omitted, chops C<$_>.
+If VARIABLE is a hash, it chops the hash's values, but not its keys.
+
+You can actually chop anything that's an lvalue, including an assignment.
+
+If you chop a list, each element is chopped. Only the value of the
+last C<chop> is returned.
+
+Note that C<chop> returns the last character. To return all but the last
+character, use C<substr($string, 0, -1)>.
+
+See also L</chomp>.
+
+=item chown LIST
+X<chown> X<owner> X<user> X<group>
+
+Changes the owner (and group) of a list of files. The first two
+elements of the list must be the I<numeric> uid and gid, in that
+order. A value of -1 in either position is interpreted by most
+systems to leave that value unchanged. Returns the number of files
+successfully changed.
+
+ $cnt = chown $uid, $gid, 'foo', 'bar';
+ chown $uid, $gid, @filenames;
+
+On systems that support fchown(2), you may pass filehandles among the
+files. On systems that don't support fchown(2), passing filehandles raises
+an exception. Filehandles must be passed as globs or glob references to be
+recognized; barewords are considered filenames.
+
+Here's an example that looks up nonnumeric uids in the passwd file:
+
+ print "User: ";
+ chomp($user = <STDIN>);
+ print "Files: ";
+ chomp($pattern = <STDIN>);
+
+ ($login,$pass,$uid,$gid) = getpwnam($user)
+ or die "$user not in passwd file";
+
+ @ary = glob($pattern); # expand filenames
+ chown $uid, $gid, @ary;
+
+On most systems, you are not allowed to change the ownership of the
+file unless you're the superuser, although you should be able to change
+the group to any of your secondary groups. On insecure systems, these
+restrictions may be relaxed, but this is not a portable assumption.
+On POSIX systems, you can detect this condition this way:
+
+ use POSIX qw(sysconf _PC_CHOWN_RESTRICTED);
+ $can_chown_giveaway = not sysconf(_PC_CHOWN_RESTRICTED);
+
+Portability issues: L<perlport/chmod>.
+
+=item chr NUMBER
+X<chr> X<character> X<ASCII> X<Unicode>
+
+=item chr
+
+Returns the character represented by that NUMBER in the character set.
+For example, C<chr(65)> is C<"A"> in either ASCII or Unicode, and
+chr(0x263a) is a Unicode smiley face.
+
+Negative values give the Unicode replacement character (chr(0xfffd)),
+except under the L<bytes> pragma, where the low eight bits of the value
+(truncated to an integer) are used.
+
+If NUMBER is omitted, uses C<$_>.
+
+For the reverse, use L</ord>.
+
+Note that characters from 128 to 255 (inclusive) are by default
+internally not encoded as UTF-8 for backward compatibility reasons.
+
+See L<perlunicode> for more about Unicode.
+
+=item chroot FILENAME
+X<chroot> X<root>
+
+=item chroot
+
+This function works like the system call by the same name: it makes the
+named directory the new root directory for all further pathnames that
+begin with a C</> by your process and all its children. (It doesn't
+change your current working directory, which is unaffected.) For security
+reasons, this call is restricted to the superuser. If FILENAME is
+omitted, does a C<chroot> to C<$_>.
+
+Portability issues: L<perlport/chroot>.
+
+=item close FILEHANDLE
+X<close>
+
+=item close
+
+Closes the file or pipe associated with the filehandle, flushes the IO
+buffers, and closes the system file descriptor. Returns true if those
+operations succeed and if no error was reported by any PerlIO
+layer. Closes the currently selected filehandle if the argument is
+omitted.
+
+You don't have to close FILEHANDLE if you are immediately going to do
+another C<open> on it, because C<open> closes it for you. (See
+L<open|/open FILEHANDLE>.) However, an explicit C<close> on an input file resets the line
+counter (C<$.>), while the implicit close done by C<open> does not.
+
+If the filehandle came from a piped open, C<close> returns false if one of
+the other syscalls involved fails or if its program exits with non-zero
+status. If the only problem was that the program exited non-zero, C<$!>
+will be set to C<0>. Closing a pipe also waits for the process executing
+on the pipe to exit--in case you wish to look at the output of the pipe
+afterwards--and implicitly puts the exit status value of that command into
+C<$?> and C<${^CHILD_ERROR_NATIVE}>.
+
+If there are multiple threads running, C<close> on a filehandle from a
+piped open returns true without waiting for the child process to terminate,
+if the filehandle is still open in another thread.
+
+Closing the read end of a pipe before the process writing to it at the
+other end is done writing results in the writer receiving a SIGPIPE. If
+the other end can't handle that, be sure to read all the data before
+closing the pipe.
+
+Example:
+
+ open(OUTPUT, '|sort >foo') # pipe to sort
+ or die "Can't start sort: $!";
+ #... # print stuff to output
+ close OUTPUT # wait for sort to finish
+ or warn $! ? "Error closing sort pipe: $!"
+ : "Exit status $? from sort";
+ open(INPUT, 'foo') # get sort's results
+ or die "Can't open 'foo' for input: $!";
+
+FILEHANDLE may be an expression whose value can be used as an indirect
+filehandle, usually the real filehandle name or an autovivified handle.
+
+=item closedir DIRHANDLE
+X<closedir>
+
+Closes a directory opened by C<opendir> and returns the success of that
+system call.
+
+=item connect SOCKET,NAME
+X<connect>
+
+Attempts to connect to a remote socket, just like connect(2).
+Returns true if it succeeded, false otherwise. NAME should be a
+packed address of the appropriate type for the socket. See the examples in
+L<perlipc/"Sockets: Client/Server Communication">.
+
+=item continue BLOCK
+X<continue>
+
+=item continue
+
+When followed by a BLOCK, C<continue> is actually a
+flow control statement rather than a function. If
+there is a C<continue> BLOCK attached to a BLOCK (typically in a C<while> or
+C<foreach>), it is always executed just before the conditional is about to
+be evaluated again, just like the third part of a C<for> loop in C. Thus
+it can be used to increment a loop variable, even when the loop has been
+continued via the C<next> statement (which is similar to the C C<continue>
+statement).
+
+C<last>, C<next>, or C<redo> may appear within a C<continue>
+block; C<last> and C<redo> behave as if they had been executed within
+the main block. So will C<next>, but since it will execute a C<continue>
+block, it may be more entertaining.
+
+ while (EXPR) {
+ ### redo always comes here
+ do_something;
+ } continue {
+ ### next always comes here
+ do_something_else;
+ # then back the top to re-check EXPR
+ }
+ ### last always comes here
+
+Omitting the C<continue> section is equivalent to using an
+empty one, logically enough, so C<next> goes directly back
+to check the condition at the top of the loop.
+
+When there is no BLOCK, C<continue> is a function that
+falls through the current C<when> or C<default> block instead of iterating
+a dynamically enclosing C<foreach> or exiting a lexically enclosing C<given>.
+In Perl 5.14 and earlier, this form of C<continue> was
+only available when the C<"switch"> feature was enabled.
+See L<feature> and L<perlsyn/"Switch statements"> for more
+information.
+
+=item cos EXPR
+X<cos> X<cosine> X<acos> X<arccosine>
+
+=item cos
+
+Returns the cosine of EXPR (expressed in radians). If EXPR is omitted,
+takes the cosine of C<$_>.
+
+For the inverse cosine operation, you may use the C<Math::Trig::acos()>
+function, or use this relation:
+
+ sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) }
+
+=item crypt PLAINTEXT,SALT
+X<crypt> X<digest> X<hash> X<salt> X<plaintext> X<password>
+X<decrypt> X<cryptography> X<passwd> X<encrypt>
+
+Creates a digest string exactly like the crypt(3) function in the C
+library (assuming that you actually have a version there that has not
+been extirpated as a potential munition).
+
+crypt() is a one-way hash function. The PLAINTEXT and SALT are turned
+into a short string, called a digest, which is returned. The same
+PLAINTEXT and SALT will always return the same string, but there is no
+(known) way to get the original PLAINTEXT from the hash. Small
+changes in the PLAINTEXT or SALT will result in large changes in the
+digest.
+
+There is no decrypt function. This function isn't all that useful for
+cryptography (for that, look for F<Crypt> modules on your nearby CPAN
+mirror) and the name "crypt" is a bit of a misnomer. Instead it is
+primarily used to check if two pieces of text are the same without
+having to transmit or store the text itself. An example is checking
+if a correct password is given. The digest of the password is stored,
+not the password itself. The user types in a password that is
+crypt()'d with the same salt as the stored digest. If the two digests
+match, the password is correct.
+
+When verifying an existing digest string you should use the digest as
+the salt (like C<crypt($plain, $digest) eq $digest>). The SALT used
+to create the digest is visible as part of the digest. This ensures
+crypt() will hash the new string with the same salt as the digest.
+This allows your code to work with the standard L<crypt|/crypt> and
+with more exotic implementations. In other words, assume
+nothing about the returned string itself nor about how many bytes
+of SALT may matter.
+
+Traditionally the result is a string of 13 bytes: two first bytes of
+the salt, followed by 11 bytes from the set C<[./0-9A-Za-z]>, and only
+the first eight bytes of PLAINTEXT mattered. But alternative
+hashing schemes (like MD5), higher level security schemes (like C2),
+and implementations on non-Unix platforms may produce different
+strings.
+
+When choosing a new salt create a random two character string whose
+characters come from the set C<[./0-9A-Za-z]> (like C<join '', ('.',
+'/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64]>). This set of
+characters is just a recommendation; the characters allowed in
+the salt depend solely on your system's crypt library, and Perl can't
+restrict what salts C<crypt()> accepts.
+
+Here's an example that makes sure that whoever runs this program knows
+their password:
+
+ $pwd = (getpwuid($<))[1];
+
+ system "stty -echo";
+ print "Password: ";
+ chomp($word = <STDIN>);
+ print "\n";
+ system "stty echo";
+
+ if (crypt($word, $pwd) ne $pwd) {
+ die "Sorry...\n";
+ } else {
+ print "ok\n";
+ }
+
+Of course, typing in your own password to whoever asks you
+for it is unwise.
+
+The L<crypt|/crypt> function is unsuitable for hashing large quantities
+of data, not least of all because you can't get the information
+back. Look at the L<Digest> module for more robust algorithms.
+
+If using crypt() on a Unicode string (which I<potentially> has
+characters with codepoints above 255), Perl tries to make sense
+of the situation by trying to downgrade (a copy of)
+the string back to an eight-bit byte string before calling crypt()
+(on that copy). If that works, good. If not, crypt() dies with
+C<Wide character in crypt>.
+
+Portability issues: L<perlport/crypt>.
+
+=item dbmclose HASH
+X<dbmclose>
+
+[This function has been largely superseded by the C<untie> function.]
+
+Breaks the binding between a DBM file and a hash.
+
+Portability issues: L<perlport/dbmclose>.
+
+=item dbmopen HASH,DBNAME,MASK
+X<dbmopen> X<dbm> X<ndbm> X<sdbm> X<gdbm>
+
+[This function has been largely superseded by the
+L<tie|/tie VARIABLE,CLASSNAME,LIST> function.]
+
+This binds a dbm(3), ndbm(3), sdbm(3), gdbm(3), or Berkeley DB file to a
+hash. HASH is the name of the hash. (Unlike normal C<open>, the first
+argument is I<not> a filehandle, even though it looks like one). DBNAME
+is the name of the database (without the F<.dir> or F<.pag> extension if
+any). If the database does not exist, it is created with protection
+specified by MASK (as modified by the C<umask>). If your system supports
+only the older DBM functions, you may make only one C<dbmopen> call in your
+program. In older versions of Perl, if your system had neither DBM nor
+ndbm, calling C<dbmopen> produced a fatal error; it now falls back to
+sdbm(3).
+
+If you don't have write access to the DBM file, you can only read hash
+variables, not set them. If you want to test whether you can write,
+either use file tests or try setting a dummy hash entry inside an C<eval>
+to trap the error.
+
+Note that functions such as C<keys> and C<values> may return huge lists
+when used on large DBM files. You may prefer to use the C<each>
+function to iterate over large DBM files. Example:
+
+ # print out history file offsets
+ dbmopen(%HIST,'/usr/lib/news/history',0666);
+ while (($key,$val) = each %HIST) {
+ print $key, ' = ', unpack('L',$val), "\n";
+ }
+ dbmclose(%HIST);
+
+See also L<AnyDBM_File> for a more general description of the pros and
+cons of the various dbm approaches, as well as L<DB_File> for a particularly
+rich implementation.
+
+You can control which DBM library you use by loading that library
+before you call dbmopen():
+
+ use DB_File;
+ dbmopen(%NS_Hist, "$ENV{HOME}/.netscape/history.db")
+ or die "Can't open netscape history file: $!";
+
+Portability issues: L<perlport/dbmopen>.
+
+=item default BLOCK
+
+Within a C<foreach> or a C<given>, a C<default> BLOCK acts like a C<when>
+that's always true. Only available after Perl 5.10, and only if the
+C<switch> feature has been requested or if the keyword is prefixed with
+C<CORE::>. See L</when>.
+
+=item defined EXPR
+X<defined> X<undef> X<undefined>
+
+=item defined
+
+Returns a Boolean value telling whether EXPR has a value other than
+the undefined value C<undef>. If EXPR is not present, C<$_> is
+checked.
+
+Many operations return C<undef> to indicate failure, end of file,
+system error, uninitialized variable, and other exceptional
+conditions. This function allows you to distinguish C<undef> from
+other values. (A simple Boolean test will not distinguish among
+C<undef>, zero, the empty string, and C<"0">, which are all equally
+false.) Note that since C<undef> is a valid scalar, its presence
+doesn't I<necessarily> indicate an exceptional condition: C<pop>
+returns C<undef> when its argument is an empty array, I<or> when the
+element to return happens to be C<undef>.
+
+You may also use C<defined(&func)> to check whether subroutine C<&func>
+has ever been defined. The return value is unaffected by any forward
+declarations of C<&func>. A subroutine that is not defined
+may still be callable: its package may have an C<AUTOLOAD> method that
+makes it spring into existence the first time that it is called; see
+L<perlsub>.
+
+Use of C<defined> on aggregates (hashes and arrays) is deprecated. It
+used to report whether memory for that aggregate had ever been
+allocated. This behavior may disappear in future versions of Perl.
+You should instead use a simple test for size:
+
+ if (@an_array) { print "has array elements\n" }
+ if (%a_hash) { print "has hash members\n" }
+
+When used on a hash element, it tells you whether the value is defined,
+not whether the key exists in the hash. Use L</exists> for the latter
+purpose.
+
+Examples:
+
+ print if defined $switch{D};
+ print "$val\n" while defined($val = pop(@ary));
+ die "Can't readlink $sym: $!"
+ unless defined($value = readlink $sym);
+ sub foo { defined &$bar ? &$bar(@_) : die "No bar"; }
+ $debugging = 0 unless defined $debugging;
+
+Note: Many folks tend to overuse C<defined> and are then surprised to
+discover that the number C<0> and C<""> (the zero-length string) are, in fact,
+defined values. For example, if you say
+
+ "ab" =~ /a(.*)b/;
+
+The pattern match succeeds and C<$1> is defined, although it
+matched "nothing". It didn't really fail to match anything. Rather, it
+matched something that happened to be zero characters long. This is all
+very above-board and honest. When a function returns an undefined value,
+it's an admission that it couldn't give you an honest answer. So you
+should use C<defined> only when questioning the integrity of what
+you're trying to do. At other times, a simple comparison to C<0> or C<""> is
+what you want.
+
+See also L</undef>, L</exists>, L</ref>.
+
+=item delete EXPR
+X<delete>
+
+Given an expression that specifies an element or slice of a hash, C<delete>
+deletes the specified elements from that hash so that exists() on that element
+no longer returns true. Setting a hash element to the undefined value does
+not remove its key, but deleting it does; see L</exists>.
+
+In list context, returns the value or values deleted, or the last such
+element in scalar context. The return list's length always matches that of
+the argument list: deleting non-existent elements returns the undefined value
+in their corresponding positions.
+
+delete() may also be used on arrays and array slices, but its behavior is less
+straightforward. Although exists() will return false for deleted entries,
+deleting array elements never changes indices of existing values; use shift()
+or splice() for that. However, if all deleted elements fall at the end of an
+array, the array's size shrinks to the position of the highest element that
+still tests true for exists(), or to 0 if none do.
+
+B<WARNING:> Calling delete on array values is deprecated and likely to
+be removed in a future version of Perl.
+
+Deleting from C<%ENV> modifies the environment. Deleting from a hash tied to
+a DBM file deletes the entry from the DBM file. Deleting from a C<tied> hash
+or array may not necessarily return anything; it depends on the implementation
+of the C<tied> package's DELETE method, which may do whatever it pleases.
+
+The C<delete local EXPR> construct localizes the deletion to the current
+block at run time. Until the block exits, elements locally deleted
+temporarily no longer exist. See L<perlsub/"Localized deletion of elements
+of composite types">.
+
+ %hash = (foo => 11, bar => 22, baz => 33);
+ $scalar = delete $hash{foo}; # $scalar is 11
+ $scalar = delete @hash{qw(foo bar)}; # $scalar is 22
+ @array = delete @hash{qw(foo bar baz)}; # @array is (undef,undef,33)
+
+The following (inefficiently) deletes all the values of %HASH and @ARRAY:
+
+ foreach $key (keys %HASH) {
+ delete $HASH{$key};
+ }
+
+ foreach $index (0 .. $#ARRAY) {
+ delete $ARRAY[$index];
+ }
+
+And so do these:
+
+ delete @HASH{keys %HASH};
+
+ delete @ARRAY[0 .. $#ARRAY];
+
+But both are slower than assigning the empty list
+or undefining %HASH or @ARRAY, which is the customary
+way to empty out an aggregate:
+
+ %HASH = (); # completely empty %HASH
+ undef %HASH; # forget %HASH ever existed
+
+ @ARRAY = (); # completely empty @ARRAY
+ undef @ARRAY; # forget @ARRAY ever existed
+
+The EXPR can be arbitrarily complicated provided its
+final operation is an element or slice of an aggregate:
+
+ delete $ref->[$x][$y]{$key};
+ delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys};
+
+ delete $ref->[$x][$y][$index];
+ delete @{$ref->[$x][$y]}[$index1, $index2, @moreindices];
+
+=item die LIST
+X<die> X<throw> X<exception> X<raise> X<$@> X<abort>
+
+C<die> raises an exception. Inside an C<eval> the error message is stuffed
+into C<$@> and the C<eval> is terminated with the undefined value.
+If the exception is outside of all enclosing C<eval>s, then the uncaught
+exception prints LIST to C<STDERR> and exits with a non-zero value. If you
+need to exit the process with a specific exit code, see L</exit>.
+
+Equivalent examples:
+
+ die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news';
+ chdir '/usr/spool/news' or die "Can't cd to spool: $!\n"
+
+If the last element of LIST does not end in a newline, the current
+script line number and input line number (if any) are also printed,
+and a newline is supplied. Note that the "input line number" (also
+known as "chunk") is subject to whatever notion of "line" happens to
+be currently in effect, and is also available as the special variable
+C<$.>. See L<perlvar/"$/"> and L<perlvar/"$.">.
+
+Hint: sometimes appending C<", stopped"> to your message will cause it
+to make better sense when the string C<"at foo line 123"> is appended.
+Suppose you are running script "canasta".
+
+ die "/etc/games is no good";
+ die "/etc/games is no good, stopped";
+
+produce, respectively
+
+ /etc/games is no good at canasta line 123.
+ /etc/games is no good, stopped at canasta line 123.
+
+If the output is empty and C<$@> already contains a value (typically from a
+previous eval) that value is reused after appending C<"\t...propagated">.
+This is useful for propagating exceptions:
+
+ eval { ... };
+ die unless $@ =~ /Expected exception/;
+
+If the output is empty and C<$@> contains an object reference that has a
+C<PROPAGATE> method, that method will be called with additional file
+and line number parameters. The return value replaces the value in
+C<$@>; i.e., as if C<< $@ = eval { $@->PROPAGATE(__FILE__, __LINE__) }; >>
+were called.
+
+If C<$@> is empty then the string C<"Died"> is used.
+
+If an uncaught exception results in interpreter exit, the exit code is
+determined from the values of C<$!> and C<$?> with this pseudocode:
+
+ exit $! if $!; # errno
+ exit $? >> 8 if $? >> 8; # child exit status
+ exit 255; # last resort
+
+The intent is to squeeze as much possible information about the likely cause
+into the limited space of the system exit code. However, as C<$!> is the value
+of C's C<errno>, which can be set by any system call, this means that the value
+of the exit code used by C<die> can be non-predictable, so should not be relied
+upon, other than to be non-zero.
+
+You can also call C<die> with a reference argument, and if this is trapped
+within an C<eval>, C<$@> contains that reference. This permits more
+elaborate exception handling using objects that maintain arbitrary state
+about the exception. Such a scheme is sometimes preferable to matching
+particular string values of C<$@> with regular expressions. Because C<$@>
+is a global variable and C<eval> may be used within object implementations,
+be careful that analyzing the error object doesn't replace the reference in
+the global variable. It's easiest to make a local copy of the reference
+before any manipulations. Here's an example:
+
+ use Scalar::Util "blessed";
+
+ eval { ... ; die Some::Module::Exception->new( FOO => "bar" ) };
+ if (my $ev_err = $@) {
+ if (blessed($ev_err) && $ev_err->isa("Some::Module::Exception")) {
+ # handle Some::Module::Exception
+ }
+ else {
+ # handle all other possible exceptions
+ }
+ }
+
+Because Perl stringifies uncaught exception messages before display,
+you'll probably want to overload stringification operations on
+exception objects. See L<overload> for details about that.
+
+You can arrange for a callback to be run just before the C<die>
+does its deed, by setting the C<$SIG{__DIE__}> hook. The associated
+handler is called with the error text and can change the error
+message, if it sees fit, by calling C<die> again. See
+L<perlvar/%SIG> for details on setting C<%SIG> entries, and
+L<"eval BLOCK"> for some examples. Although this feature was
+to be run only right before your program was to exit, this is not
+currently so: the C<$SIG{__DIE__}> hook is currently called
+even inside eval()ed blocks/strings! If one wants the hook to do
+nothing in such situations, put
+
+ die @_ if $^S;
+
+as the first line of the handler (see L<perlvar/$^S>). Because
+this promotes strange action at a distance, this counterintuitive
+behavior may be fixed in a future release.
+
+See also exit(), warn(), and the Carp module.
+
+=item do BLOCK
+X<do> X<block>
+
+Not really a function. Returns the value of the last command in the
+sequence of commands indicated by BLOCK. When modified by the C<while> or
+C<until> loop modifier, executes the BLOCK once before testing the loop
+condition. (On other statements the loop modifiers test the conditional
+first.)
+
+C<do BLOCK> does I<not> count as a loop, so the loop control statements
+C<next>, C<last>, or C<redo> cannot be used to leave or restart the block.
+See L<perlsyn> for alternative strategies.
+
+=item do SUBROUTINE(LIST)
+X<do>
+
+This form of subroutine call is deprecated. SUBROUTINE can be a bareword,
+a scalar variable or a subroutine beginning with C<&>.
+
+=item do EXPR
+X<do>
+
+Uses the value of EXPR as a filename and executes the contents of the
+file as a Perl script.
+
+ do 'stat.pl';
+
+is just like
+
+ eval `cat stat.pl`;
+
+except that it's more efficient and concise, keeps track of the current
+filename for error messages, searches the C<@INC> directories, and updates
+C<%INC> if the file is found. See L<perlvar/@INC> and L<perlvar/%INC> for
+these variables. It also differs in that code evaluated with C<do FILENAME>
+cannot see lexicals in the enclosing scope; C<eval STRING> does. It's the
+same, however, in that it does reparse the file every time you call it,
+so you probably don't want to do this inside a loop.
+
+If C<do> can read the file but cannot compile it, it returns C<undef> and sets
+an error message in C<$@>. If C<do> cannot read the file, it returns undef
+and sets C<$!> to the error. Always check C<$@> first, as compilation
+could fail in a way that also sets C<$!>. If the file is successfully
+compiled, C<do> returns the value of the last expression evaluated.
+
+Inclusion of library modules is better done with the
+C<use> and C<require> operators, which also do automatic error checking
+and raise an exception if there's a problem.
+
+You might like to use C<do> to read in a program configuration
+file. Manual error checking can be done this way:
+
+ # read in config files: system first, then user
+ for $file ("/share/prog/defaults.rc",
+ "$ENV{HOME}/.someprogrc")
+ {
+ unless ($return = do $file) {
+ warn "couldn't parse $file: $@" if $@;
+ warn "couldn't do $file: $!" unless defined $return;
+ warn "couldn't run $file" unless $return;
+ }
+ }
+
+=item dump LABEL
+X<dump> X<core> X<undump>
+
+=item dump
+
+This function causes an immediate core dump. See also the B<-u>
+command-line switch in L<perlrun>, which does the same thing.
+Primarily this is so that you can use the B<undump> program (not
+supplied) to turn your core dump into an executable binary after
+having initialized all your variables at the beginning of the
+program. When the new binary is executed it will begin by executing
+a C<goto LABEL> (with all the restrictions that C<goto> suffers).
+Think of it as a goto with an intervening core dump and reincarnation.
+If C<LABEL> is omitted, restarts the program from the top.
+
+B<WARNING>: Any files opened at the time of the dump will I<not>
+be open any more when the program is reincarnated, with possible
+resulting confusion by Perl.
+
+This function is now largely obsolete, mostly because it's very hard to
+convert a core file into an executable. That's why you should now invoke
+it as C<CORE::dump()>, if you don't want to be warned against a possible
+typo.
+
+Portability issues: L<perlport/dump>.
+
+=item each HASH
+X<each> X<hash, iterator>
+
+=item each ARRAY
+X<array, iterator>
+
+=item each EXPR
+
+When called in list context, returns a 2-element list consisting of the key
+and value for the next element of a hash, or the index and value for the
+next element of an array, so that you can iterate over it. When called in
+scalar context, returns only the key (not the value) in a hash, or the index
+in an array.
+
+Hash entries are returned in an apparently random order. The actual random
+order is subject to change in future versions of Perl, but it is
+guaranteed to be in the same order as either the C<keys> or C<values>
+function would produce on the same (unmodified) hash. Since Perl
+5.8.2 the ordering can be different even between different runs of Perl
+for security reasons (see L<perlsec/"Algorithmic Complexity Attacks">).
+
+After C<each> has returned all entries from the hash or array, the next
+call to C<each> returns the empty list in list context and C<undef> in
+scalar context. The next call following that one restarts iteration. Each
+hash or array has its own internal iterator, accessed by C<each>, C<keys>,
+and C<values>. The iterator is implicitly reset when C<each> has reached
+the end as just described; it can be explicitly reset by calling C<keys> or
+C<values> on the hash or array. If you add or delete a hash's elements
+while iterating over it, entries may be skipped or duplicated--so don't do
+that. Exception: It is always safe to delete the item most recently
+returned by C<each()>, so the following code works properly:
+
+ while (($key, $value) = each %hash) {
+ print $key, "\n";
+ delete $hash{$key}; # This is safe
+ }
+
+This prints out your environment like the printenv(1) program,
+but in a different order:
+
+ while (($key,$value) = each %ENV) {
+ print "$key=$value\n";
+ }
+
+Starting with Perl 5.14, C<each> can take a scalar EXPR, which must hold
+reference to an unblessed hash or array. The argument will be dereferenced
+automatically. This aspect of C<each> is considered highly experimental.
+The exact behaviour may change in a future version of Perl.
+
+ while (($key,$value) = each $hashref) { ... }
+
+See also C<keys>, C<values>, and C<sort>.
+
+=item eof FILEHANDLE
+X<eof>
+X<end of file>
+X<end-of-file>
+
+=item eof ()
+
+=item eof
+
+Returns 1 if the next read on FILEHANDLE will return end of file I<or> if
+FILEHANDLE is not open. FILEHANDLE may be an expression whose value
+gives the real filehandle. (Note that this function actually
+reads a character and then C<ungetc>s it, so isn't useful in an
+interactive context.) Do not read from a terminal file (or call
+C<eof(FILEHANDLE)> on it) after end-of-file is reached. File types such
+as terminals may lose the end-of-file condition if you do.
+
+An C<eof> without an argument uses the last file read. Using C<eof()>
+with empty parentheses is different. It refers to the pseudo file
+formed from the files listed on the command line and accessed via the
+C<< <> >> operator. Since C<< <> >> isn't explicitly opened,
+as a normal filehandle is, an C<eof()> before C<< <> >> has been
+used will cause C<@ARGV> to be examined to determine if input is
+available. Similarly, an C<eof()> after C<< <> >> has returned
+end-of-file will assume you are processing another C<@ARGV> list,
+and if you haven't set C<@ARGV>, will read input from C<STDIN>;
+see L<perlop/"I/O Operators">.
+
+In a C<< while (<>) >> loop, C<eof> or C<eof(ARGV)> can be used to
+detect the end of each file, whereas C<eof()> will detect the end
+of the very last file only. Examples:
+
+ # reset line numbering on each input file
+ while (<>) {
+ next if /^\s*#/; # skip comments
+ print "$.\t$_";
+ } continue {
+ close ARGV if eof; # Not eof()!
+ }
+
+ # insert dashes just before last line of last file
+ while (<>) {
+ if (eof()) { # check for end of last file
+ print "--------------\n";
+ }
+ print;
+ last if eof(); # needed if we're reading from a terminal
+ }
+
+Practical hint: you almost never need to use C<eof> in Perl, because the
+input operators typically return C<undef> when they run out of data or
+encounter an error.
+
+=item eval EXPR
+X<eval> X<try> X<catch> X<evaluate> X<parse> X<execute>
+X<error, handling> X<exception, handling>
+
+=item eval BLOCK
+
+=item eval
+
+In the first form, the return value of EXPR is parsed and executed as if it
+were a little Perl program. The value of the expression (which is itself
+determined within scalar context) is first parsed, and if there were no
+errors, executed as a block within the lexical context of the current Perl
+program. This means, that in particular, any outer lexical variables are
+visible to it, and any package variable settings or subroutine and format
+definitions remain afterwards.
+
+Note that the value is parsed every time the C<eval> executes.
+If EXPR is omitted, evaluates C<$_>. This form is typically used to
+delay parsing and subsequent execution of the text of EXPR until run time.
+
+If the C<unicode_eval> feature is enabled (which is the default under a
+C<use 5.16> or higher declaration), EXPR or C<$_> is treated as a string of
+characters, so C<use utf8> declarations have no effect, and source filters
+are forbidden. In the absence of the C<unicode_eval> feature, the string
+will sometimes be treated as characters and sometimes as bytes, depending
+on the internal encoding, and source filters activated within the C<eval>
+exhibit the erratic, but historical, behaviour of affecting some outer file
+scope that is still compiling. See also the L</evalbytes> keyword, which
+always treats its input as a byte stream and works properly with source
+filters, and the L<feature> pragma.
+
+In the second form, the code within the BLOCK is parsed only once--at the
+same time the code surrounding the C<eval> itself was parsed--and executed
+within the context of the current Perl program. This form is typically
+used to trap exceptions more efficiently than the first (see below), while
+also providing the benefit of checking the code within BLOCK at compile
+time.
+
+The final semicolon, if any, may be omitted from the value of EXPR or within
+the BLOCK.
+
+In both forms, the value returned is the value of the last expression
+evaluated inside the mini-program; a return statement may be also used, just
+as with subroutines. The expression providing the return value is evaluated
+in void, scalar, or list context, depending on the context of the C<eval>
+itself. See L</wantarray> for more on how the evaluation context can be
+determined.
+
+If there is a syntax error or runtime error, or a C<die> statement is
+executed, C<eval> returns C<undef> in scalar context
+or an empty list--or, for syntax errors, a list containing a single
+undefined value--in list context, and C<$@> is set to the error
+message. The discrepancy in the return values in list context is
+considered a bug by some, and will probably be fixed in a future
+release. If there was no error, C<$@> is set to the empty string. A
+control flow operator like C<last> or C<goto> can bypass the setting of
+C<$@>. Beware that using C<eval> neither silences Perl from printing
+warnings to STDERR, nor does it stuff the text of warning messages into C<$@>.
+To do either of those, you have to use the C<$SIG{__WARN__}> facility, or
+turn off warnings inside the BLOCK or EXPR using S<C<no warnings 'all'>>.
+See L</warn>, L<perlvar>, L<warnings> and L<perllexwarn>.
+
+Note that, because C<eval> traps otherwise-fatal errors, it is useful for
+determining whether a particular feature (such as C<socket> or C<symlink>)
+is implemented. It is also Perl's exception-trapping mechanism, where
+the die operator is used to raise exceptions.
+
+If you want to trap errors when loading an XS module, some problems with
+the binary interface (such as Perl version skew) may be fatal even with
+C<eval> unless C<$ENV{PERL_DL_NONLAZY}> is set. See L<perlrun>.
+
+If the code to be executed doesn't vary, you may use the eval-BLOCK
+form to trap run-time errors without incurring the penalty of
+recompiling each time. The error, if any, is still returned in C<$@>.
+Examples:
+
+ # make divide-by-zero nonfatal
+ eval { $answer = $a / $b; }; warn $@ if $@;
+
+ # same thing, but less efficient
+ eval '$answer = $a / $b'; warn $@ if $@;
+
+ # a compile-time error
+ eval { $answer = }; # WRONG
+
+ # a run-time error
+ eval '$answer ='; # sets $@
+
+Using the C<eval{}> form as an exception trap in libraries does have some
+issues. Due to the current arguably broken state of C<__DIE__> hooks, you
+may wish not to trigger any C<__DIE__> hooks that user code may have installed.
+You can use the C<local $SIG{__DIE__}> construct for this purpose,
+as this example shows:
+
+ # a private exception trap for divide-by-zero
+ eval { local $SIG{'__DIE__'}; $answer = $a / $b; };
+ warn $@ if $@;
+
+This is especially significant, given that C<__DIE__> hooks can call
+C<die> again, which has the effect of changing their error messages:
+
+ # __DIE__ hooks may modify error messages
+ {
+ local $SIG{'__DIE__'} =
+ sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
+ eval { die "foo lives here" };
+ print $@ if $@; # prints "bar lives here"
+ }
+
+Because this promotes action at a distance, this counterintuitive behavior
+may be fixed in a future release.
+
+With an C<eval>, you should be especially careful to remember what's
+being looked at when:
+
+ eval $x; # CASE 1
+ eval "$x"; # CASE 2
+
+ eval '$x'; # CASE 3
+ eval { $x }; # CASE 4
+
+ eval "\$$x++"; # CASE 5
+ $$x++; # CASE 6
+
+Cases 1 and 2 above behave identically: they run the code contained in
+the variable $x. (Although case 2 has misleading double quotes making
+the reader wonder what else might be happening (nothing is).) Cases 3
+and 4 likewise behave in the same way: they run the code C<'$x'>, which
+does nothing but return the value of $x. (Case 4 is preferred for
+purely visual reasons, but it also has the advantage of compiling at
+compile-time instead of at run-time.) Case 5 is a place where
+normally you I<would> like to use double quotes, except that in this
+particular situation, you can just use symbolic references instead, as
+in case 6.
+
+Before Perl 5.14, the assignment to C<$@> occurred before restoration
+of localised variables, which means that for your code to run on older
+versions, a temporary is required if you want to mask some but not all
+errors:
+
+ # alter $@ on nefarious repugnancy only
+ {
+ my $e;
+ {
+ local $@; # protect existing $@
+ eval { test_repugnancy() };
+ # $@ =~ /nefarious/ and die $@; # Perl 5.14 and higher only
+ $@ =~ /nefarious/ and $e = $@;
+ }
+ die $e if defined $e
+ }
+
+C<eval BLOCK> does I<not> count as a loop, so the loop control statements
+C<next>, C<last>, or C<redo> cannot be used to leave or restart the block.
+
+An C<eval ''> executed within the C<DB> package doesn't see the usual
+surrounding lexical scope, but rather the scope of the first non-DB piece
+of code that called it. You don't normally need to worry about this unless
+you are writing a Perl debugger.
+
+=item evalbytes EXPR
+X<evalbytes>
+
+=item evalbytes
+
+This function is like L</eval> with a string argument, except it always
+parses its argument, or C<$_> if EXPR is omitted, as a string of bytes. A
+string containing characters whose ordinal value exceeds 255 results in an
+error. Source filters activated within the evaluated code apply to the
+code itself.
+
+This function is only available under the C<evalbytes> feature, a
+C<use v5.16> (or higher) declaration, or with a C<CORE::> prefix. See
+L<feature> for more information.
+
+=item exec LIST
+X<exec> X<execute>
+
+=item exec PROGRAM LIST
+
+The C<exec> function executes a system command I<and never returns>;
+use C<system> instead of C<exec> if you want it to return. It fails and
+returns false only if the command does not exist I<and> it is executed
+directly instead of via your system's command shell (see below).
+
+Since it's a common mistake to use C<exec> instead of C<system>, Perl
+warns you if there is a following statement that isn't C<die>, C<warn>,
+or C<exit> (if C<-w> is set--but you always do that, right?). If you
+I<really> want to follow an C<exec> with some other statement, you
+can use one of these styles to avoid the warning:
+
+ exec ('foo') or print STDERR "couldn't exec foo: $!";
+ { exec ('foo') }; print STDERR "couldn't exec foo: $!";
+
+If there is more than one argument in LIST, or if LIST is an array
+with more than one value, calls execvp(3) with the arguments in LIST.
+If there is only one scalar argument or an array with one element in it,
+the argument is checked for shell metacharacters, and if there are any,
+the entire argument is passed to the system's command shell for parsing
+(this is C</bin/sh -c> on Unix platforms, but varies on other platforms).
+If there are no shell metacharacters in the argument, it is split into
+words and passed directly to C<execvp>, which is more efficient.
+Examples:
+
+ exec '/bin/echo', 'Your arguments are: ', @ARGV;
+ exec "sort $outfile | uniq";
+
+If you don't really want to execute the first argument, but want to lie
+to the program you are executing about its own name, you can specify
+the program you actually want to run as an "indirect object" (without a
+comma) in front of the LIST. (This always forces interpretation of the
+LIST as a multivalued list, even if there is only a single scalar in
+the list.) Example:
+
+ $shell = '/bin/csh';
+ exec $shell '-sh'; # pretend it's a login shell
+
+or, more directly,
+
+ exec {'/bin/csh'} '-sh'; # pretend it's a login shell
+
+When the arguments get executed via the system shell, results are
+subject to its quirks and capabilities. See L<perlop/"`STRING`">
+for details.
+
+Using an indirect object with C<exec> or C<system> is also more
+secure. This usage (which also works fine with system()) forces
+interpretation of the arguments as a multivalued list, even if the
+list had just one argument. That way you're safe from the shell
+expanding wildcards or splitting up words with whitespace in them.
+
+ @args = ( "echo surprise" );
+
+ exec @args; # subject to shell escapes
+ # if @args == 1
+ exec { $args[0] } @args; # safe even with one-arg list
+
+The first version, the one without the indirect object, ran the I<echo>
+program, passing it C<"surprise"> an argument. The second version didn't;
+it tried to run a program named I<"echo surprise">, didn't find it, and set
+C<$?> to a non-zero value indicating failure.
+
+Beginning with v5.6.0, Perl attempts to flush all files opened for
+output before the exec, but this may not be supported on some platforms
+(see L<perlport>). To be safe, you may need to set C<$|> ($AUTOFLUSH
+in English) or call the C<autoflush()> method of C<IO::Handle> on any
+open handles to avoid lost output.
+
+Note that C<exec> will not call your C<END> blocks, nor will it invoke
+C<DESTROY> methods on your objects.
+
+Portability issues: L<perlport/exec>.
+
+=item exists EXPR
+X<exists> X<autovivification>
+
+Given an expression that specifies an element of a hash, returns true if the
+specified element in the hash has ever been initialized, even if the
+corresponding value is undefined.
+
+ print "Exists\n" if exists $hash{$key};
+ print "Defined\n" if defined $hash{$key};
+ print "True\n" if $hash{$key};
+
+exists may also be called on array elements, but its behavior is much less
+obvious and is strongly tied to the use of L</delete> on arrays. B<Be aware>
+that calling exists on array values is deprecated and likely to be removed in
+a future version of Perl.
+
+ print "Exists\n" if exists $array[$index];
+ print "Defined\n" if defined $array[$index];
+ print "True\n" if $array[$index];
+
+A hash or array element can be true only if it's defined and defined only if
+it exists, but the reverse doesn't necessarily hold true.
+
+Given an expression that specifies the name of a subroutine,
+returns true if the specified subroutine has ever been declared, even
+if it is undefined. Mentioning a subroutine name for exists or defined
+does not count as declaring it. Note that a subroutine that does not
+exist may still be callable: its package may have an C<AUTOLOAD>
+method that makes it spring into existence the first time that it is
+called; see L<perlsub>.
+
+ print "Exists\n" if exists &subroutine;
+ print "Defined\n" if defined &subroutine;
+
+Note that the EXPR can be arbitrarily complicated as long as the final
+operation is a hash or array key lookup or subroutine name:
+
+ if (exists $ref->{A}->{B}->{$key}) { }
+ if (exists $hash{A}{B}{$key}) { }
+
+ if (exists $ref->{A}->{B}->[$ix]) { }
+ if (exists $hash{A}{B}[$ix]) { }
+
+ if (exists &{$ref->{A}{B}{$key}}) { }
+
+Although the mostly deeply nested array or hash will not spring into
+existence just because its existence was tested, any intervening ones will.
+Thus C<< $ref->{"A"} >> and C<< $ref->{"A"}->{"B"} >> will spring
+into existence due to the existence test for the $key element above.
+This happens anywhere the arrow operator is used, including even here:
+
+ undef $ref;
+ if (exists $ref->{"Some key"}) { }
+ print $ref; # prints HASH(0x80d3d5c)
+
+This surprising autovivification in what does not at first--or even
+second--glance appear to be an lvalue context may be fixed in a future
+release.
+
+Use of a subroutine call, rather than a subroutine name, as an argument
+to exists() is an error.
+
+ exists ⊂ # OK
+ exists &sub(); # Error
+
+=item exit EXPR
+X<exit> X<terminate> X<abort>
+
+=item exit
+
+Evaluates EXPR and exits immediately with that value. Example:
+
+ $ans = <STDIN>;
+ exit 0 if $ans =~ /^[Xx]/;
+
+See also C<die>. If EXPR is omitted, exits with C<0> status. The only
+universally recognized values for EXPR are C<0> for success and C<1>
+for error; other values are subject to interpretation depending on the
+environment in which the Perl program is running. For example, exiting
+69 (EX_UNAVAILABLE) from a I<sendmail> incoming-mail filter will cause
+the mailer to return the item undelivered, but that's not true everywhere.
+
+Don't use C<exit> to abort a subroutine if there's any chance that
+someone might want to trap whatever error happened. Use C<die> instead,
+which can be trapped by an C<eval>.
+
+The exit() function does not always exit immediately. It calls any
+defined C<END> routines first, but these C<END> routines may not
+themselves abort the exit. Likewise any object destructors that need to
+be called are called before the real exit. C<END> routines and destructors
+can change the exit status by modifying C<$?>. If this is a problem, you
+can call C<POSIX:_exit($status)> to avoid END and destructor processing.
+See L<perlmod> for details.
+
+Portability issues: L<perlport/exit>.
+
+=item exp EXPR
+X<exp> X<exponential> X<antilog> X<antilogarithm> X<e>
+
+=item exp
+
+Returns I<e> (the natural logarithm base) to the power of EXPR.
+If EXPR is omitted, gives C<exp($_)>.
+
+=item fcntl FILEHANDLE,FUNCTION,SCALAR
+X<fcntl>
+
+Implements the fcntl(2) function. You'll probably have to say
+
+ use Fcntl;
+
+first to get the correct constant definitions. Argument processing and
+value returned work just like C<ioctl> below.
+For example:
+
+ use Fcntl;
+ fcntl($filehandle, F_GETFL, $packed_return_buffer)
+ or die "can't fcntl F_GETFL: $!";
+
+You don't have to check for C<defined> on the return from C<fcntl>.
+Like C<ioctl>, it maps a C<0> return from the system call into
+C<"0 but true"> in Perl. This string is true in boolean context and C<0>
+in numeric context. It is also exempt from the normal B<-w> warnings
+on improper numeric conversions.
+
+Note that C<fcntl> raises an exception if used on a machine that
+doesn't implement fcntl(2). See the Fcntl module or your fcntl(2)
+manpage to learn what functions are available on your system.
+
+Here's an example of setting a filehandle named C<REMOTE> to be
+non-blocking at the system level. You'll have to negotiate C<$|>
+on your own, though.
+
+ use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
+
+ $flags = fcntl(REMOTE, F_GETFL, 0)
+ or die "Can't get flags for the socket: $!\n";
+
+ $flags = fcntl(REMOTE, F_SETFL, $flags | O_NONBLOCK)
+ or die "Can't set flags for the socket: $!\n";
+
+Portability issues: L<perlport/fcntl>.
+
+=item __FILE__
+X<__FILE__>
+
+A special token that returns the name of the file in which it occurs.
+
+=item fileno FILEHANDLE
+X<fileno>
+
+Returns the file descriptor for a filehandle, or undefined if the
+filehandle is not open. If there is no real file descriptor at the OS
+level, as can happen with filehandles connected to memory objects via
+C<open> with a reference for the third argument, -1 is returned.
+
+This is mainly useful for constructing
+bitmaps for C<select> and low-level POSIX tty-handling operations.
+If FILEHANDLE is an expression, the value is taken as an indirect
+filehandle, generally its name.
+
+You can use this to find out whether two handles refer to the
+same underlying descriptor:
+
+ if (fileno(THIS) == fileno(THAT)) {
+ print "THIS and THAT are dups\n";
+ }
+
+=item flock FILEHANDLE,OPERATION
+X<flock> X<lock> X<locking>
+
+Calls flock(2), or an emulation of it, on FILEHANDLE. Returns true
+for success, false on failure. Produces a fatal error if used on a
+machine that doesn't implement flock(2), fcntl(2) locking, or lockf(3).
+C<flock> is Perl's portable file-locking interface, although it locks
+entire files only, not records.
+
+Two potentially non-obvious but traditional C<flock> semantics are
+that it waits indefinitely until the lock is granted, and that its locks
+are B<merely advisory>. Such discretionary locks are more flexible, but
+offer fewer guarantees. This means that programs that do not also use
+C<flock> may modify files locked with C<flock>. See L<perlport>,
+your port's specific documentation, and your system-specific local manpages
+for details. It's best to assume traditional behavior if you're writing
+portable programs. (But if you're not, you should as always feel perfectly
+free to write for your own system's idiosyncrasies (sometimes called
+"features"). Slavish adherence to portability concerns shouldn't get
+in the way of your getting your job done.)
+
+OPERATION is one of LOCK_SH, LOCK_EX, or LOCK_UN, possibly combined with
+LOCK_NB. These constants are traditionally valued 1, 2, 8 and 4, but
+you can use the symbolic names if you import them from the L<Fcntl> module,
+either individually, or as a group using the C<:flock> tag. LOCK_SH
+requests a shared lock, LOCK_EX requests an exclusive lock, and LOCK_UN
+releases a previously requested lock. If LOCK_NB is bitwise-or'ed with
+LOCK_SH or LOCK_EX, then C<flock> returns immediately rather than blocking
+waiting for the lock; check the return status to see if you got it.
+
+To avoid the possibility of miscoordination, Perl now flushes FILEHANDLE
+before locking or unlocking it.
+
+Note that the emulation built with lockf(3) doesn't provide shared
+locks, and it requires that FILEHANDLE be open with write intent. These
+are the semantics that lockf(3) implements. Most if not all systems
+implement lockf(3) in terms of fcntl(2) locking, though, so the
+differing semantics shouldn't bite too many people.
+
+Note that the fcntl(2) emulation of flock(3) requires that FILEHANDLE
+be open with read intent to use LOCK_SH and requires that it be open
+with write intent to use LOCK_EX.
+
+Note also that some versions of C<flock> cannot lock things over the
+network; you would need to use the more system-specific C<fcntl> for
+that. If you like you can force Perl to ignore your system's flock(2)
+function, and so provide its own fcntl(2)-based emulation, by passing
+the switch C<-Ud_flock> to the F<Configure> program when you configure
+and build a new Perl.
+
+Here's a mailbox appender for BSD systems.
+
+ use Fcntl qw(:flock SEEK_END); # import LOCK_* and SEEK_END constants
+
+ sub lock {
+ my ($fh) = @_;
+ flock($fh, LOCK_EX) or die "Cannot lock mailbox - $!\n";
+
+ # and, in case someone appended while we were waiting...
+ seek($fh, 0, SEEK_END) or die "Cannot seek - $!\n";
+ }
+
+ sub unlock {
+ my ($fh) = @_;
+ flock($fh, LOCK_UN) or die "Cannot unlock mailbox - $!\n";
+ }
+
+ open(my $mbox, ">>", "/usr/spool/mail/$ENV{'USER'}")
+ or die "Can't open mailbox: $!";
+
+ lock($mbox);
+ print $mbox $msg,"\n\n";
+ unlock($mbox);
+
+On systems that support a real flock(2), locks are inherited across fork()
+calls, whereas those that must resort to the more capricious fcntl(2)
+function lose their locks, making it seriously harder to write servers.
+
+See also L<DB_File> for other flock() examples.
+
+Portability issues: L<perlport/flock>.
+
+=item fork
+X<fork> X<child> X<parent>
+
+Does a fork(2) system call to create a new process running the
+same program at the same point. It returns the child pid to the
+parent process, C<0> to the child process, or C<undef> if the fork is
+unsuccessful. File descriptors (and sometimes locks on those descriptors)
+are shared, while everything else is copied. On most systems supporting
+fork(), great care has gone into making it extremely efficient (for
+example, using copy-on-write technology on data pages), making it the
+dominant paradigm for multitasking over the last few decades.
+
+Beginning with v5.6.0, Perl attempts to flush all files opened for
+output before forking the child process, but this may not be supported
+on some platforms (see L<perlport>). To be safe, you may need to set
+C<$|> ($AUTOFLUSH in English) or call the C<autoflush()> method of
+C<IO::Handle> on any open handles to avoid duplicate output.
+
+If you C<fork> without ever waiting on your children, you will
+accumulate zombies. On some systems, you can avoid this by setting
+C<$SIG{CHLD}> to C<"IGNORE">. See also L<perlipc> for more examples of
+forking and reaping moribund children.
+
+Note that if your forked child inherits system file descriptors like
+STDIN and STDOUT that are actually connected by a pipe or socket, even
+if you exit, then the remote server (such as, say, a CGI script or a
+backgrounded job launched from a remote shell) won't think you're done.
+You should reopen those to F</dev/null> if it's any issue.
+
+On some platforms such as Windows, where the fork() system call is not available,
+Perl can be built to emulate fork() in the Perl interpreter. The emulation is designed to,
+at the level of the Perl program, be as compatible as possible with the "Unix" fork().
+However it has limitations that have to be considered in code intended to be portable.
+See L<perlfork> for more details.
+
+Portability issues: L<perlport/fork>.
+
+=item format
+X<format>
+
+Declare a picture format for use by the C<write> function. For
+example:
+
+ format Something =
+ Test: @<<<<<<<< @||||| @>>>>>
+ $str, $%, '$' . int($num)
+ .
+
+ $str = "widget";
+ $num = $cost/$quantity;
+ $~ = 'Something';
+ write;
+
+See L<perlform> for many details and examples.
+
+=item formline PICTURE,LIST
+X<formline>
+
+This is an internal function used by C<format>s, though you may call it,
+too. It formats (see L<perlform>) a list of values according to the
+contents of PICTURE, placing the output into the format output
+accumulator, C<$^A> (or C<$ACCUMULATOR> in English).
+Eventually, when a C<write> is done, the contents of
+C<$^A> are written to some filehandle. You could also read C<$^A>
+and then set C<$^A> back to C<"">. Note that a format typically
+does one C<formline> per line of form, but the C<formline> function itself
+doesn't care how many newlines are embedded in the PICTURE. This means
+that the C<~> and C<~~> tokens treat the entire PICTURE as a single line.
+You may therefore need to use multiple formlines to implement a single
+record format, just like the C<format> compiler.
+
+Be careful if you put double quotes around the picture, because an C<@>
+character may be taken to mean the beginning of an array name.
+C<formline> always returns true. See L<perlform> for other examples.
+
+If you are trying to use this instead of C<write> to capture the output,
+you may find it easier to open a filehandle to a scalar
+(C<< open $fh, ">", \$output >>) and write to that instead.
+
+=item getc FILEHANDLE
+X<getc> X<getchar> X<character> X<file, read>
+
+=item getc
+
+Returns the next character from the input file attached to FILEHANDLE,
+or the undefined value at end of file or if there was an error (in
+the latter case C<$!> is set). If FILEHANDLE is omitted, reads from
+STDIN. This is not particularly efficient. However, it cannot be
+used by itself to fetch single characters without waiting for the user
+to hit enter. For that, try something more like:
+
+ if ($BSD_STYLE) {
+ system "stty cbreak </dev/tty >/dev/tty 2>&1";
+ }
+ else {
+ system "stty", '-icanon', 'eol', "\001";
+ }
+
+ $key = getc(STDIN);
+
+ if ($BSD_STYLE) {
+ system "stty -cbreak </dev/tty >/dev/tty 2>&1";
+ }
+ else {
+ system 'stty', 'icanon', 'eol', '^@'; # ASCII NUL
+ }
+ print "\n";
+
+Determination of whether $BSD_STYLE should be set
+is left as an exercise to the reader.
+
+The C<POSIX::getattr> function can do this more portably on
+systems purporting POSIX compliance. See also the C<Term::ReadKey>
+module from your nearest CPAN site; details on CPAN can be found under
+L<perlmodlib/CPAN>.
+
+=item getlogin
+X<getlogin> X<login>
+
+This implements the C library function of the same name, which on most
+systems returns the current login from F</etc/utmp>, if any. If it
+returns the empty string, use C<getpwuid>.
+
+ $login = getlogin || getpwuid($<) || "Kilroy";
+
+Do not consider C<getlogin> for authentication: it is not as
+secure as C<getpwuid>.
+
+Portability issues: L<perlport/getlogin>.
+
+=item getpeername SOCKET
+X<getpeername> X<peer>
+
+Returns the packed sockaddr address of the other end of the SOCKET
+connection.
+
+ use Socket;
+ $hersockaddr = getpeername(SOCK);
+ ($port, $iaddr) = sockaddr_in($hersockaddr);
+ $herhostname = gethostbyaddr($iaddr, AF_INET);
+ $herstraddr = inet_ntoa($iaddr);
+
+=item getpgrp PID
+X<getpgrp> X<group>
+
+Returns the current process group for the specified PID. Use
+a PID of C<0> to get the current process group for the
+current process. Will raise an exception if used on a machine that
+doesn't implement getpgrp(2). If PID is omitted, returns the process
+group of the current process. Note that the POSIX version of C<getpgrp>
+does not accept a PID argument, so only C<PID==0> is truly portable.
+
+Portability issues: L<perlport/getpgrp>.
+
+=item getppid
+X<getppid> X<parent> X<pid>
+
+Returns the process id of the parent process.
+
+Note for Linux users: on Linux, the C functions C<getpid()> and
+C<getppid()> return different values from different threads. In order to
+be portable, this behavior is not reflected by the Perl-level function
+C<getppid()>, that returns a consistent value across threads. If you want
+to call the underlying C<getppid()>, you may use the CPAN module
+C<Linux::Pid>.
+
+Portability issues: L<perlport/getppid>.
+
+=item getpriority WHICH,WHO
+X<getpriority> X<priority> X<nice>
+
+Returns the current priority for a process, a process group, or a user.
+(See L<getpriority(2)>.) Will raise a fatal exception if used on a
+machine that doesn't implement getpriority(2).
+
+Portability issues: L<perlport/getpriority>.
+
+=item getpwnam NAME
+X<getpwnam> X<getgrnam> X<gethostbyname> X<getnetbyname> X<getprotobyname>
+X<getpwuid> X<getgrgid> X<getservbyname> X<gethostbyaddr> X<getnetbyaddr>
+X<getprotobynumber> X<getservbyport> X<getpwent> X<getgrent> X<gethostent>
+X<getnetent> X<getprotoent> X<getservent> X<setpwent> X<setgrent> X<sethostent>
+X<setnetent> X<setprotoent> X<setservent> X<endpwent> X<endgrent> X<endhostent>
+X<endnetent> X<endprotoent> X<endservent>
+
+=item getgrnam NAME
+
+=item gethostbyname NAME
+
+=item getnetbyname NAME
+
+=item getprotobyname NAME
+
+=item getpwuid UID
+
+=item getgrgid GID
+
+=item getservbyname NAME,PROTO
+
+=item gethostbyaddr ADDR,ADDRTYPE
+
+=item getnetbyaddr ADDR,ADDRTYPE
+
+=item getprotobynumber NUMBER
+
+=item getservbyport PORT,PROTO
+
+=item getpwent
+
+=item getgrent
+
+=item gethostent
+
+=item getnetent
+
+=item getprotoent
+
+=item getservent
+
+=item setpwent
+
+=item setgrent
+
+=item sethostent STAYOPEN
+
+=item setnetent STAYOPEN
+
+=item setprotoent STAYOPEN
+
+=item setservent STAYOPEN
+
+=item endpwent
+
+=item endgrent
+
+=item endhostent
+
+=item endnetent
+
+=item endprotoent
+
+=item endservent
+
+These routines are the same as their counterparts in the
+system C library. In list context, the return values from the
+various get routines are as follows:
+
+ ($name,$passwd,$uid,$gid,
+ $quota,$comment,$gcos,$dir,$shell,$expire) = getpw*
+ ($name,$passwd,$gid,$members) = getgr*
+ ($name,$aliases,$addrtype,$length, at addrs) = gethost*
+ ($name,$aliases,$addrtype,$net) = getnet*
+ ($name,$aliases,$proto) = getproto*
+ ($name,$aliases,$port,$proto) = getserv*
+
+(If the entry doesn't exist you get an empty list.)
+
+The exact meaning of the $gcos field varies but it usually contains
+the real name of the user (as opposed to the login name) and other
+information pertaining to the user. Beware, however, that in many
+system users are able to change this information and therefore it
+cannot be trusted and therefore the $gcos is tainted (see
+L<perlsec>). The $passwd and $shell, user's encrypted password and
+login shell, are also tainted, for the same reason.
+
+In scalar context, you get the name, unless the function was a
+lookup by name, in which case you get the other thing, whatever it is.
+(If the entry doesn't exist you get the undefined value.) For example:
+
+ $uid = getpwnam($name);
+ $name = getpwuid($num);
+ $name = getpwent();
+ $gid = getgrnam($name);
+ $name = getgrgid($num);
+ $name = getgrent();
+ #etc.
+
+In I<getpw*()> the fields $quota, $comment, and $expire are special
+in that they are unsupported on many systems. If the
+$quota is unsupported, it is an empty scalar. If it is supported, it
+usually encodes the disk quota. If the $comment field is unsupported,
+it is an empty scalar. If it is supported it usually encodes some
+administrative comment about the user. In some systems the $quota
+field may be $change or $age, fields that have to do with password
+aging. In some systems the $comment field may be $class. The $expire
+field, if present, encodes the expiration period of the account or the
+password. For the availability and the exact meaning of these fields
+in your system, please consult getpwnam(3) and your system's
+F<pwd.h> file. You can also find out from within Perl what your
+$quota and $comment fields mean and whether you have the $expire field
+by using the C<Config> module and the values C<d_pwquota>, C<d_pwage>,
+C<d_pwchange>, C<d_pwcomment>, and C<d_pwexpire>. Shadow password
+files are supported only if your vendor has implemented them in the
+intuitive fashion that calling the regular C library routines gets the
+shadow versions if you're running under privilege or if there exists
+the shadow(3) functions as found in System V (this includes Solaris
+and Linux). Those systems that implement a proprietary shadow password
+facility are unlikely to be supported.
+
+The $members value returned by I<getgr*()> is a space-separated list of
+the login names of the members of the group.
+
+For the I<gethost*()> functions, if the C<h_errno> variable is supported in
+C, it will be returned to you via C<$?> if the function call fails. The
+C<@addrs> value returned by a successful call is a list of raw
+addresses returned by the corresponding library call. In the
+Internet domain, each address is four bytes long; you can unpack it
+by saying something like:
+
+ ($a,$b,$c,$d) = unpack('W4',$addr[0]);
+
+The Socket library makes this slightly easier:
+
+ use Socket;
+ $iaddr = inet_aton("127.1"); # or whatever address
+ $name = gethostbyaddr($iaddr, AF_INET);
+
+ # or going the other way
+ $straddr = inet_ntoa($iaddr);
+
+In the opposite way, to resolve a hostname to the IP address
+you can write this:
+
+ use Socket;
+ $packed_ip = gethostbyname("www.perl.org");
+ if (defined $packed_ip) {
+ $ip_address = inet_ntoa($packed_ip);
+ }
+
+Make sure C<gethostbyname()> is called in SCALAR context and that
+its return value is checked for definedness.
+
+The C<getprotobynumber> function, even though it only takes one argument,
+has the precedence of a list operator, so beware:
+
+ getprotobynumber $number eq 'icmp' # WRONG
+ getprotobynumber($number eq 'icmp') # actually means this
+ getprotobynumber($number) eq 'icmp' # better this way
+
+If you get tired of remembering which element of the return list
+contains which return value, by-name interfaces are provided
+in standard modules: C<File::stat>, C<Net::hostent>, C<Net::netent>,
+C<Net::protoent>, C<Net::servent>, C<Time::gmtime>, C<Time::localtime>,
+and C<User::grent>. These override the normal built-ins, supplying
+versions that return objects with the appropriate names
+for each field. For example:
+
+ use File::stat;
+ use User::pwent;
+ $is_his = (stat($filename)->uid == pwent($whoever)->uid);
+
+Even though it looks as though they're the same method calls (uid),
+they aren't, because a C<File::stat> object is different from
+a C<User::pwent> object.
+
+Portability issues: L<perlport/getpwnam> to L<perlport/endservent>.
+
+=item getsockname SOCKET
+X<getsockname>
+
+Returns the packed sockaddr address of this end of the SOCKET connection,
+in case you don't know the address because you have several different
+IPs that the connection might have come in on.
+
+ use Socket;
+ $mysockaddr = getsockname(SOCK);
+ ($port, $myaddr) = sockaddr_in($mysockaddr);
+ printf "Connect to %s [%s]\n",
+ scalar gethostbyaddr($myaddr, AF_INET),
+ inet_ntoa($myaddr);
+
+=item getsockopt SOCKET,LEVEL,OPTNAME
+X<getsockopt>
+
+Queries the option named OPTNAME associated with SOCKET at a given LEVEL.
+Options may exist at multiple protocol levels depending on the socket
+type, but at least the uppermost socket level SOL_SOCKET (defined in the
+C<Socket> module) will exist. To query options at another level the
+protocol number of the appropriate protocol controlling the option
+should be supplied. For example, to indicate that an option is to be
+interpreted by the TCP protocol, LEVEL should be set to the protocol
+number of TCP, which you can get using C<getprotobyname>.
+
+The function returns a packed string representing the requested socket
+option, or C<undef> on error, with the reason for the error placed in
+C<$!>. Just what is in the packed string depends on LEVEL and OPTNAME;
+consult getsockopt(2) for details. A common case is that the option is an
+integer, in which case the result is a packed integer, which you can decode
+using C<unpack> with the C<i> (or C<I>) format.
+
+Here's an example to test whether Nagle's algorithm is enabled on a socket:
+
+ use Socket qw(:all);
+
+ defined(my $tcp = getprotobyname("tcp"))
+ or die "Could not determine the protocol number for tcp";
+ # my $tcp = IPPROTO_TCP; # Alternative
+ my $packed = getsockopt($socket, $tcp, TCP_NODELAY)
+ or die "getsockopt TCP_NODELAY: $!";
+ my $nodelay = unpack("I", $packed);
+ print "Nagle's algorithm is turned ", $nodelay ? "off\n" : "on\n";
+
+Portability issues: L<perlport/getsockopt>.
+
+=item given EXPR BLOCK
+X<given>
+
+=item given BLOCK
+
+C<given> is analogous to the C<switch> keyword in other languages. C<given>
+and C<when> are used in Perl to implement C<switch>/C<case> like statements.
+Only available after Perl 5.10. For example:
+
+ use v5.10;
+ given ($fruit) {
+ when (/apples?/) {
+ print "I like apples."
+ }
+ when (/oranges?/) {
+ print "I don't like oranges."
+ }
+ default {
+ print "I don't like anything"
+ }
+ }
+
+See L<perlsyn/"Switch statements"> for detailed information.
+
+=item glob EXPR
+X<glob> X<wildcard> X<filename, expansion> X<expand>
+
+=item glob
+
+In list context, returns a (possibly empty) list of filename expansions on
+the value of EXPR such as the standard Unix shell F</bin/csh> would do. In
+scalar context, glob iterates through such filename expansions, returning
+undef when the list is exhausted. This is the internal function
+implementing the C<< <*.c> >> operator, but you can use it directly. If
+EXPR is omitted, C<$_> is used. The C<< <*.c> >> operator is discussed in
+more detail in L<perlop/"I/O Operators">.
+
+Note that C<glob> splits its arguments on whitespace and treats
+each segment as separate pattern. As such, C<glob("*.c *.h")>
+matches all files with a F<.c> or F<.h> extension. The expression
+C<glob(".* *")> matches all files in the current working directory.
+If you want to glob filenames that might contain whitespace, you'll
+have to use extra quotes around the spacey filename to protect it.
+For example, to glob filenames that have an C<e> followed by a space
+followed by an C<f>, use either of:
+
+ @spacies = <"*e f*">;
+ @spacies = glob '"*e f*"';
+ @spacies = glob q("*e f*");
+
+If you had to get a variable through, you could do this:
+
+ @spacies = glob "'*${var}e f*'";
+ @spacies = glob qq("*${var}e f*");
+
+If non-empty braces are the only wildcard characters used in the
+C<glob>, no filenames are matched, but potentially many strings
+are returned. For example, this produces nine strings, one for
+each pairing of fruits and colors:
+
+ @many = glob "{apple,tomato,cherry}={green,yellow,red}";
+
+Beginning with v5.6.0, this operator is implemented using the standard
+C<File::Glob> extension. See L<File::Glob> for details, including
+C<bsd_glob> which does not treat whitespace as a pattern separator.
+
+Portability issues: L<perlport/glob>.
+
+=item gmtime EXPR
+X<gmtime> X<UTC> X<Greenwich>
+
+=item gmtime
+
+Works just like L</localtime> but the returned values are
+localized for the standard Greenwich time zone.
+
+Note: When called in list context, $isdst, the last value
+returned by gmtime, is always C<0>. There is no
+Daylight Saving Time in GMT.
+
+Portability issues: L<perlport/gmtime>.
+
+=item goto LABEL
+X<goto> X<jump> X<jmp>
+
+=item goto EXPR
+
+=item goto &NAME
+
+The C<goto-LABEL> form finds the statement labeled with LABEL and
+resumes execution there. It can't be used to get out of a block or
+subroutine given to C<sort>. It can be used to go almost anywhere
+else within the dynamic scope, including out of subroutines, but it's
+usually better to use some other construct such as C<last> or C<die>.
+The author of Perl has never felt the need to use this form of C<goto>
+(in Perl, that is; C is another matter). (The difference is that C
+does not offer named loops combined with loop control. Perl does, and
+this replaces most structured uses of C<goto> in other languages.)
+
+The C<goto-EXPR> form expects a label name, whose scope will be resolved
+dynamically. This allows for computed C<goto>s per FORTRAN, but isn't
+necessarily recommended if you're optimizing for maintainability:
+
+ goto ("FOO", "BAR", "GLARCH")[$i];
+
+As shown in this example, C<goto-EXPR> is exempt from the "looks like a
+function" rule. A pair of parentheses following it does not (necessarily)
+delimit its argument. C<goto("NE")."XT"> is equivalent to C<goto NEXT>.
+
+Use of C<goto-LABEL> or C<goto-EXPR> to jump into a construct is
+deprecated and will issue a warning. Even then, it may not be used to
+go into any construct that requires initialization, such as a
+subroutine or a C<foreach> loop. It also can't be used to go into a
+construct that is optimized away.
+
+The C<goto-&NAME> form is quite different from the other forms of
+C<goto>. In fact, it isn't a goto in the normal sense at all, and
+doesn't have the stigma associated with other gotos. Instead, it
+exits the current subroutine (losing any changes set by local()) and
+immediately calls in its place the named subroutine using the current
+value of @_. This is used by C<AUTOLOAD> subroutines that wish to
+load another subroutine and then pretend that the other subroutine had
+been called in the first place (except that any modifications to C<@_>
+in the current subroutine are propagated to the other subroutine.)
+After the C<goto>, not even C<caller> will be able to tell that this
+routine was called first.
+
+NAME needn't be the name of a subroutine; it can be a scalar variable
+containing a code reference or a block that evaluates to a code
+reference.
+
+=item grep BLOCK LIST
+X<grep>
+
+=item grep EXPR,LIST
+
+This is similar in spirit to, but not the same as, grep(1) and its
+relatives. In particular, it is not limited to using regular expressions.
+
+Evaluates the BLOCK or EXPR for each element of LIST (locally setting
+C<$_> to each element) and returns the list value consisting of those
+elements for which the expression evaluated to true. In scalar
+context, returns the number of times the expression was true.
+
+ @foo = grep(!/^#/, @bar); # weed out comments
+
+or equivalently,
+
+ @foo = grep {!/^#/} @bar; # weed out comments
+
+Note that C<$_> is an alias to the list value, so it can be used to
+modify the elements of the LIST. While this is useful and supported,
+it can cause bizarre results if the elements of LIST are not variables.
+Similarly, grep returns aliases into the original list, much as a for
+loop's index variable aliases the list elements. That is, modifying an
+element of a list returned by grep (for example, in a C<foreach>, C<map>
+or another C<grep>) actually modifies the element in the original list.
+This is usually something to be avoided when writing clear code.
+
+If C<$_> is lexical in the scope where the C<grep> appears (because it has
+been declared with C<my $_>) then, in addition to being locally aliased to
+the list elements, C<$_> keeps being lexical inside the block; i.e., it
+can't be seen from the outside, avoiding any potential side-effects.
+
+See also L</map> for a list composed of the results of the BLOCK or EXPR.
+
+=item hex EXPR
+X<hex> X<hexadecimal>
+
+=item hex
+
+Interprets EXPR as a hex string and returns the corresponding value.
+(To convert strings that might start with either C<0>, C<0x>, or C<0b>, see
+L</oct>.) If EXPR is omitted, uses C<$_>.
+
+ print hex '0xAf'; # prints '175'
+ print hex 'aF'; # same
+
+Hex strings may only represent integers. Strings that would cause
+integer overflow trigger a warning. Leading whitespace is not stripped,
+unlike oct(). To present something as hex, look into L</printf>,
+L</sprintf>, and L</unpack>.
+
+=item import LIST
+X<import>
+
+There is no builtin C<import> function. It is just an ordinary
+method (subroutine) defined (or inherited) by modules that wish to export
+names to another module. The C<use> function calls the C<import> method
+for the package used. See also L</use>, L<perlmod>, and L<Exporter>.
+
+=item index STR,SUBSTR,POSITION
+X<index> X<indexOf> X<InStr>
+
+=item index STR,SUBSTR
+
+The index function searches for one string within another, but without
+the wildcard-like behavior of a full regular-expression pattern match.
+It returns the position of the first occurrence of SUBSTR in STR at
+or after POSITION. If POSITION is omitted, starts searching from the
+beginning of the string. POSITION before the beginning of the string
+or after its end is treated as if it were the beginning or the end,
+respectively. POSITION and the return value are based at zero.
+If the substring is not found, C<index> returns -1.
+
+=item int EXPR
+X<int> X<integer> X<truncate> X<trunc> X<floor>
+
+=item int
+
+Returns the integer portion of EXPR. If EXPR is omitted, uses C<$_>.
+You should not use this function for rounding: one because it truncates
+towards C<0>, and two because machine representations of floating-point
+numbers can sometimes produce counterintuitive results. For example,
+C<int(-6.725/0.025)> produces -268 rather than the correct -269; that's
+because it's really more like -268.99999999999994315658 instead. Usually,
+the C<sprintf>, C<printf>, or the C<POSIX::floor> and C<POSIX::ceil>
+functions will serve you better than will int().
+
+=item ioctl FILEHANDLE,FUNCTION,SCALAR
+X<ioctl>
+
+Implements the ioctl(2) function. You'll probably first have to say
+
+ require "sys/ioctl.ph"; # probably in $Config{archlib}/sys/ioctl.ph
+
+to get the correct function definitions. If F<sys/ioctl.ph> doesn't
+exist or doesn't have the correct definitions you'll have to roll your
+own, based on your C header files such as F<< <sys/ioctl.h> >>.
+(There is a Perl script called B<h2ph> that comes with the Perl kit that
+may help you in this, but it's nontrivial.) SCALAR will be read and/or
+written depending on the FUNCTION; a C pointer to the string value of SCALAR
+will be passed as the third argument of the actual C<ioctl> call. (If SCALAR
+has no string value but does have a numeric value, that value will be
+passed rather than a pointer to the string value. To guarantee this to be
+true, add a C<0> to the scalar before using it.) The C<pack> and C<unpack>
+functions may be needed to manipulate the values of structures used by
+C<ioctl>.
+
+The return value of C<ioctl> (and C<fcntl>) is as follows:
+
+ if OS returns: then Perl returns:
+ -1 undefined value
+ 0 string "0 but true"
+ anything else that number
+
+Thus Perl returns true on success and false on failure, yet you can
+still easily determine the actual value returned by the operating
+system:
+
+ $retval = ioctl(...) || -1;
+ printf "System returned %d\n", $retval;
+
+The special string C<"0 but true"> is exempt from B<-w> complaints
+about improper numeric conversions.
+
+Portability issues: L<perlport/ioctl>.
+
+=item join EXPR,LIST
+X<join>
+
+Joins the separate strings of LIST into a single string with fields
+separated by the value of EXPR, and returns that new string. Example:
+
+ $rec = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);
+
+Beware that unlike C<split>, C<join> doesn't take a pattern as its
+first argument. Compare L</split>.
+
+=item keys HASH
+X<keys> X<key>
+
+=item keys ARRAY
+
+=item keys EXPR
+
+Returns a list consisting of all the keys of the named hash, or the indices
+of an array. (In scalar context, returns the number of keys or indices.)
+
+The keys of a hash are returned in an apparently random order. The actual
+random order is subject to change in future versions of Perl, but it
+is guaranteed to be the same order as either the C<values> or C<each>
+function produces (given that the hash has not been modified). Since
+Perl 5.8.1 the ordering can be different even between different runs of
+Perl for security reasons (see L<perlsec/"Algorithmic Complexity
+Attacks">).
+
+As a side effect, calling keys() resets the internal interator of the HASH or ARRAY
+(see L</each>). In particular, calling keys() in void context resets
+the iterator with no other overhead.
+
+Here is yet another way to print your environment:
+
+ @keys = keys %ENV;
+ @values = values %ENV;
+ while (@keys) {
+ print pop(@keys), '=', pop(@values), "\n";
+ }
+
+or how about sorted by key:
+
+ foreach $key (sort(keys %ENV)) {
+ print $key, '=', $ENV{$key}, "\n";
+ }
+
+The returned values are copies of the original keys in the hash, so
+modifying them will not affect the original hash. Compare L</values>.
+
+To sort a hash by value, you'll need to use a C<sort> function.
+Here's a descending numeric sort of a hash by its values:
+
+ foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash) {
+ printf "%4d %s\n", $hash{$key}, $key;
+ }
+
+Used as an lvalue, C<keys> allows you to increase the number of hash buckets
+allocated for the given hash. This can gain you a measure of efficiency if
+you know the hash is going to get big. (This is similar to pre-extending
+an array by assigning a larger number to $#array.) If you say
+
+ keys %hash = 200;
+
+then C<%hash> will have at least 200 buckets allocated for it--256 of them,
+in fact, since it rounds up to the next power of two. These
+buckets will be retained even if you do C<%hash = ()>, use C<undef
+%hash> if you want to free the storage while C<%hash> is still in scope.
+You can't shrink the number of buckets allocated for the hash using
+C<keys> in this way (but you needn't worry about doing this by accident,
+as trying has no effect). C<keys @array> in an lvalue context is a syntax
+error.
+
+Starting with Perl 5.14, C<keys> can take a scalar EXPR, which must contain
+a reference to an unblessed hash or array. The argument will be
+dereferenced automatically. This aspect of C<keys> is considered highly
+experimental. The exact behaviour may change in a future version of Perl.
+
+ for (keys $hashref) { ... }
+ for (keys $obj->get_arrayref) { ... }
+
+See also C<each>, C<values>, and C<sort>.
+
+=item kill SIGNAL, LIST
+X<kill> X<signal>
+
+Sends a signal to a list of processes. Returns the number of
+processes successfully signaled (which is not necessarily the
+same as the number actually killed).
+
+ $cnt = kill 1, $child1, $child2;
+ kill 9, @goners;
+
+If SIGNAL is zero, no signal is sent to the process, but C<kill>
+checks whether it's I<possible> to send a signal to it (that
+means, to be brief, that the process is owned by the same user, or we are
+the super-user). This is useful to check that a child process is still
+alive (even if only as a zombie) and hasn't changed its UID. See
+L<perlport> for notes on the portability of this construct.
+
+Unlike in the shell, if SIGNAL is negative, it kills process groups instead
+of processes. That means you usually want to use positive not negative signals.
+You may also use a signal name in quotes.
+
+The behavior of kill when a I<PROCESS> number is zero or negative depends on
+the operating system. For example, on POSIX-conforming systems, zero will
+signal the current process group and -1 will signal all processes.
+
+See L<perlipc/"Signals"> for more details.
+
+On some platforms such as Windows where the fork() system call is not available.
+Perl can be built to emulate fork() at the interpreter level.
+This emulation has limitations related to kill that have to be considered,
+for code running on Windows and in code intended to be portable.
+
+See L<perlfork> for more details.
+
+Portability issues: L<perlport/kill>.
+
+=item last LABEL
+X<last> X<break>
+
+=item last
+
+The C<last> command is like the C<break> statement in C (as used in
+loops); it immediately exits the loop in question. If the LABEL is
+omitted, the command refers to the innermost enclosing loop. The
+C<continue> block, if any, is not executed:
+
+ LINE: while (<STDIN>) {
+ last LINE if /^$/; # exit when done with header
+ #...
+ }
+
+C<last> cannot be used to exit a block that returns a value such as
+C<eval {}>, C<sub {}>, or C<do {}>, and should not be used to exit
+a grep() or map() operation.
+
+Note that a block by itself is semantically identical to a loop
+that executes once. Thus C<last> can be used to effect an early
+exit out of such a block.
+
+See also L</continue> for an illustration of how C<last>, C<next>, and
+C<redo> work.
+
+=item lc EXPR
+X<lc> X<lowercase>
+
+=item lc
+
+Returns a lowercased version of EXPR. This is the internal function
+implementing the C<\L> escape in double-quoted strings.
+
+If EXPR is omitted, uses C<$_>.
+
+What gets returned depends on several factors:
+
+=over
+
+=item If C<use bytes> is in effect:
+
+=over
+
+=item On EBCDIC platforms
+
+The results are what the C language system call C<tolower()> returns.
+
+=item On ASCII platforms
+
+The results follow ASCII semantics. Only characters C<A-Z> change, to C<a-z>
+respectively.
+
+=back
+
+=item Otherwise, If EXPR has the UTF8 flag set
+
+Unicode semantics are used for the case change.
+
+=item Otherwise, if C<use locale> is in effect
+
+Respects current LC_CTYPE locale. See L<perllocale>.
+
+=item Otherwise, if C<use feature 'unicode_strings'> is in effect:
+
+Unicode semantics are used for the case change.
+
+=item Otherwise:
+
+=over
+
+=item On EBCDIC platforms
+
+The results are what the C language system call C<tolower()> returns.
+
+=item On ASCII platforms
+
+ASCII semantics are used for the case change. The lowercase of any character
+outside the ASCII range is the character itself.
+
+=back
+
+=back
+
+=item lcfirst EXPR
+X<lcfirst> X<lowercase>
+
+=item lcfirst
+
+Returns the value of EXPR with the first character lowercased. This
+is the internal function implementing the C<\l> escape in
+double-quoted strings.
+
+If EXPR is omitted, uses C<$_>.
+
+This function behaves the same way under various pragmata, such as in a locale,
+as L</lc> does.
+
+=item length EXPR
+X<length> X<size>
+
+=item length
+
+Returns the length in I<characters> of the value of EXPR. If EXPR is
+omitted, returns the length of C<$_>. If EXPR is undefined, returns
+C<undef>.
+
+This function cannot be used on an entire array or hash to find out how
+many elements these have. For that, use C<scalar @array> and C<scalar keys
+%hash>, respectively.
+
+Like all Perl character operations, length() normally deals in logical
+characters, not physical bytes. For how many bytes a string encoded as
+UTF-8 would take up, use C<length(Encode::encode_utf8(EXPR))> (you'll have
+to C<use Encode> first). See L<Encode> and L<perlunicode>.
+
+=item __LINE__
+X<__LINE__>
+
+A special token that compiles to the current line number.
+
+=item link OLDFILE,NEWFILE
+X<link>
+
+Creates a new filename linked to the old filename. Returns true for
+success, false otherwise.
+
+Portability issues: L<perlport/link>.
+
+=item listen SOCKET,QUEUESIZE
+X<listen>
+
+Does the same thing that the listen(2) system call does. Returns true if
+it succeeded, false otherwise. See the example in
+L<perlipc/"Sockets: Client/Server Communication">.
+
+=item local EXPR
+X<local>
+
+You really probably want to be using C<my> instead, because C<local> isn't
+what most people think of as "local". See
+L<perlsub/"Private Variables via my()"> for details.
+
+A local modifies the listed variables to be local to the enclosing
+block, file, or eval. If more than one value is listed, the list must
+be placed in parentheses. See L<perlsub/"Temporary Values via local()">
+for details, including issues with tied arrays and hashes.
+
+The C<delete local EXPR> construct can also be used to localize the deletion
+of array/hash elements to the current block.
+See L<perlsub/"Localized deletion of elements of composite types">.
+
+=item localtime EXPR
+X<localtime> X<ctime>
+
+=item localtime
+
+Converts a time as returned by the time function to a 9-element list
+with the time analyzed for the local time zone. Typically used as
+follows:
+
+ # 0 1 2 3 4 5 6 7 8
+ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime(time);
+
+All list elements are numeric and come straight out of the C `struct
+tm'. C<$sec>, C<$min>, and C<$hour> are the seconds, minutes, and hours
+of the specified time.
+
+C<$mday> is the day of the month and C<$mon> the month in
+the range C<0..11>, with 0 indicating January and 11 indicating December.
+This makes it easy to get a month name from a list:
+
+ my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
+ print "$abbr[$mon] $mday";
+ # $mon=9, $mday=18 gives "Oct 18"
+
+C<$year> is the number of years since 1900, B<not> just the last two digits
+of the year. That is, C<$year> is C<123> in year 2023. The proper way
+to get a 4-digit year is simply:
+
+ $year += 1900;
+
+Otherwise you create non-Y2K-compliant programs--and you wouldn't want
+to do that, would you?
+
+To get the last two digits of the year (e.g., "01" in 2001) do:
+
+ $year = sprintf("%02d", $year % 100);
+
+C<$wday> is the day of the week, with 0 indicating Sunday and 3 indicating
+Wednesday. C<$yday> is the day of the year, in the range C<0..364>
+(or C<0..365> in leap years.)
+
+C<$isdst> is true if the specified time occurs during Daylight Saving
+Time, false otherwise.
+
+If EXPR is omitted, C<localtime()> uses the current time (as returned
+by time(3)).
+
+In scalar context, C<localtime()> returns the ctime(3) value:
+
+ $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
+
+This scalar value is B<not> locale-dependent but is a Perl builtin. For GMT
+instead of local time use the L</gmtime> builtin. See also the
+C<Time::Local> module (for converting seconds, minutes, hours, and such back to
+the integer value returned by time()), and the L<POSIX> module's strftime(3)
+and mktime(3) functions.
+
+To get somewhat similar but locale-dependent date strings, set up your
+locale environment variables appropriately (please see L<perllocale>) and
+try for example:
+
+ use POSIX qw(strftime);
+ $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
+ # or for GMT formatted appropriately for your locale:
+ $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;
+
+Note that the C<%a> and C<%b>, the short forms of the day of the week
+and the month of the year, may not necessarily be three characters wide.
+
+The L<Time::gmtime> and L<Time::localtime> modules provide a convenient,
+by-name access mechanism to the gmtime() and localtime() functions,
+respectively.
+
+For a comprehensive date and time representation look at the
+L<DateTime> module on CPAN.
+
+Portability issues: L<perlport/localtime>.
+
+=item lock THING
+X<lock>
+
+This function places an advisory lock on a shared variable or referenced
+object contained in I<THING> until the lock goes out of scope.
+
+The value returned is the scalar itself, if the argument is a scalar, or a
+reference, if the argument is a hash, array or subroutine.
+
+lock() is a "weak keyword" : this means that if you've defined a function
+by this name (before any calls to it), that function will be called
+instead. If you are not under C<use threads::shared> this does nothing.
+See L<threads::shared>.
+
+=item log EXPR
+X<log> X<logarithm> X<e> X<ln> X<base>
+
+=item log
+
+Returns the natural logarithm (base I<e>) of EXPR. If EXPR is omitted,
+returns the log of C<$_>. To get the
+log of another base, use basic algebra:
+The base-N log of a number is equal to the natural log of that number
+divided by the natural log of N. For example:
+
+ sub log10 {
+ my $n = shift;
+ return log($n)/log(10);
+ }
+
+See also L</exp> for the inverse operation.
+
+=item lstat FILEHANDLE
+X<lstat>
+
+=item lstat EXPR
+
+=item lstat DIRHANDLE
+
+=item lstat
+
+Does the same thing as the C<stat> function (including setting the
+special C<_> filehandle) but stats a symbolic link instead of the file
+the symbolic link points to. If symbolic links are unimplemented on
+your system, a normal C<stat> is done. For much more detailed
+information, please see the documentation for C<stat>.
+
+If EXPR is omitted, stats C<$_>.
+
+Portability issues: L<perlport/lstat>.
+
+=item m//
+
+The match operator. See L<perlop/"Regexp Quote-Like Operators">.
+
+=item map BLOCK LIST
+X<map>
+
+=item map EXPR,LIST
+
+Evaluates the BLOCK or EXPR for each element of LIST (locally setting
+C<$_> to each element) and returns the list value composed of the
+results of each such evaluation. In scalar context, returns the
+total number of elements so generated. Evaluates BLOCK or EXPR in
+list context, so each element of LIST may produce zero, one, or
+more elements in the returned value.
+
+ @chars = map(chr, @numbers);
+
+translates a list of numbers to the corresponding characters.
+
+ my @squares = map { $_ * $_ } @numbers;
+
+translates a list of numbers to their squared values.
+
+ my @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;
+
+shows that number of returned elements can differ from the number of
+input elements. To omit an element, return an empty list ().
+This could also be achieved by writing
+
+ my @squares = map { $_ * $_ } grep { $_ > 5 } @numbers;
+
+which makes the intention more clear.
+
+Map always returns a list, which can be
+assigned to a hash such that the elements
+become key/value pairs. See L<perldata> for more details.
+
+ %hash = map { get_a_key_for($_) => $_ } @array;
+
+is just a funny way to write
+
+ %hash = ();
+ foreach (@array) {
+ $hash{get_a_key_for($_)} = $_;
+ }
+
+Note that C<$_> is an alias to the list value, so it can be used to
+modify the elements of the LIST. While this is useful and supported,
+it can cause bizarre results if the elements of LIST are not variables.
+Using a regular C<foreach> loop for this purpose would be clearer in
+most cases. See also L</grep> for an array composed of those items of
+the original list for which the BLOCK or EXPR evaluates to true.
+
+If C<$_> is lexical in the scope where the C<map> appears (because it has
+been declared with C<my $_>), then, in addition to being locally aliased to
+the list elements, C<$_> keeps being lexical inside the block; that is, it
+can't be seen from the outside, avoiding any potential side-effects.
+
+C<{> starts both hash references and blocks, so C<map { ...> could be either
+the start of map BLOCK LIST or map EXPR, LIST. Because Perl doesn't look
+ahead for the closing C<}> it has to take a guess at which it's dealing with
+based on what it finds just after the C<{>. Usually it gets it right, but if it
+doesn't it won't realize something is wrong until it gets to the C<}> and
+encounters the missing (or unexpected) comma. The syntax error will be
+reported close to the C<}>, but you'll need to change something near the C<{>
+such as using a unary C<+> to give Perl some help:
+
+ %hash = map { "\L$_" => 1 } @array # perl guesses EXPR. wrong
+ %hash = map { +"\L$_" => 1 } @array # perl guesses BLOCK. right
+ %hash = map { ("\L$_" => 1) } @array # this also works
+ %hash = map { lc($_) => 1 } @array # as does this.
+ %hash = map +( lc($_) => 1 ), @array # this is EXPR and works!
+
+ %hash = map ( lc($_), 1 ), @array # evaluates to (1, @array)
+
+or to force an anon hash constructor use C<+{>:
+
+ @hashes = map +{ lc($_) => 1 }, @array # EXPR, so needs comma at end
+
+to get a list of anonymous hashes each with only one entry apiece.
+
+=item mkdir FILENAME,MASK
+X<mkdir> X<md> X<directory, create>
+
+=item mkdir FILENAME
+
+=item mkdir
+
+Creates the directory specified by FILENAME, with permissions
+specified by MASK (as modified by C<umask>). If it succeeds it
+returns true; otherwise it returns false and sets C<$!> (errno).
+MASK defaults to 0777 if omitted, and FILENAME defaults
+to C<$_> if omitted.
+
+In general, it is better to create directories with a permissive MASK
+and let the user modify that with their C<umask> than it is to supply
+a restrictive MASK and give the user no way to be more permissive.
+The exceptions to this rule are when the file or directory should be
+kept private (mail files, for instance). The perlfunc(1) entry on
+C<umask> discusses the choice of MASK in more detail.
+
+Note that according to the POSIX 1003.1-1996 the FILENAME may have any
+number of trailing slashes. Some operating and filesystems do not get
+this right, so Perl automatically removes all trailing slashes to keep
+everyone happy.
+
+To recursively create a directory structure, look at
+the C<mkpath> function of the L<File::Path> module.
+
+=item msgctl ID,CMD,ARG
+X<msgctl>
+
+Calls the System V IPC function msgctl(2). You'll probably have to say
+
+ use IPC::SysV;
+
+first to get the correct constant definitions. If CMD is C<IPC_STAT>,
+then ARG must be a variable that will hold the returned C<msqid_ds>
+structure. Returns like C<ioctl>: the undefined value for error,
+C<"0 but true"> for zero, or the actual return value otherwise. See also
+L<perlipc/"SysV IPC"> and the documentation for C<IPC::SysV> and
+C<IPC::Semaphore>.
+
+Portability issues: L<perlport/msgctl>.
+
+=item msgget KEY,FLAGS
+X<msgget>
+
+Calls the System V IPC function msgget(2). Returns the message queue
+id, or C<undef> on error. See also
+L<perlipc/"SysV IPC"> and the documentation for C<IPC::SysV> and
+C<IPC::Msg>.
+
+Portability issues: L<perlport/msgget>.
+
+=item msgrcv ID,VAR,SIZE,TYPE,FLAGS
+X<msgrcv>
+
+Calls the System V IPC function msgrcv to receive a message from
+message queue ID into variable VAR with a maximum message size of
+SIZE. Note that when a message is received, the message type as a
+native long integer will be the first thing in VAR, followed by the
+actual message. This packing may be opened with C<unpack("l! a*")>.
+Taints the variable. Returns true if successful, false
+on error. See also L<perlipc/"SysV IPC"> and the documentation for
+C<IPC::SysV> and C<IPC::SysV::Msg>.
+
+Portability issues: L<perlport/msgrcv>.
+
+=item msgsnd ID,MSG,FLAGS
+X<msgsnd>
+
+Calls the System V IPC function msgsnd to send the message MSG to the
+message queue ID. MSG must begin with the native long integer message
+type, be followed by the length of the actual message, and then finally
+the message itself. This kind of packing can be achieved with
+C<pack("l! a*", $type, $message)>. Returns true if successful,
+false on error. See also the C<IPC::SysV>
+and C<IPC::SysV::Msg> documentation.
+
+Portability issues: L<perlport/msgsnd>.
+
+=item my EXPR
+X<my>
+
+=item my TYPE EXPR
+
+=item my EXPR : ATTRS
+
+=item my TYPE EXPR : ATTRS
+
+A C<my> declares the listed variables to be local (lexically) to the
+enclosing block, file, or C<eval>. If more than one value is listed,
+the list must be placed in parentheses.
+
+The exact semantics and interface of TYPE and ATTRS are still
+evolving. TYPE is currently bound to the use of the C<fields> pragma,
+and attributes are handled using the C<attributes> pragma, or starting
+from Perl 5.8.0 also via the C<Attribute::Handlers> module. See
+L<perlsub/"Private Variables via my()"> for details, and L<fields>,
+L<attributes>, and L<Attribute::Handlers>.
+
+=item next LABEL
+X<next> X<continue>
+
+=item next
+
+The C<next> command is like the C<continue> statement in C; it starts
+the next iteration of the loop:
+
+ LINE: while (<STDIN>) {
+ next LINE if /^#/; # discard comments
+ #...
+ }
+
+Note that if there were a C<continue> block on the above, it would get
+executed even on discarded lines. If LABEL is omitted, the command
+refers to the innermost enclosing loop.
+
+C<next> cannot be used to exit a block which returns a value such as
+C<eval {}>, C<sub {}>, or C<do {}>, and should not be used to exit
+a grep() or map() operation.
+
+Note that a block by itself is semantically identical to a loop
+that executes once. Thus C<next> will exit such a block early.
+
+See also L</continue> for an illustration of how C<last>, C<next>, and
+C<redo> work.
+
+=item no MODULE VERSION LIST
+X<no declarations>
+X<unimporting>
+
+=item no MODULE VERSION
+
+=item no MODULE LIST
+
+=item no MODULE
+
+=item no VERSION
+
+See the C<use> function, of which C<no> is the opposite.
+
+=item oct EXPR
+X<oct> X<octal> X<hex> X<hexadecimal> X<binary> X<bin>
+
+=item oct
+
+Interprets EXPR as an octal string and returns the corresponding
+value. (If EXPR happens to start off with C<0x>, interprets it as a
+hex string. If EXPR starts off with C<0b>, it is interpreted as a
+binary string. Leading whitespace is ignored in all three cases.)
+The following will handle decimal, binary, octal, and hex in standard
+Perl notation:
+
+ $val = oct($val) if $val =~ /^0/;
+
+If EXPR is omitted, uses C<$_>. To go the other way (produce a number
+in octal), use sprintf() or printf():
+
+ $dec_perms = (stat("filename"))[2] & 07777;
+ $oct_perm_str = sprintf "%o", $perms;
+
+The oct() function is commonly used when a string such as C<644> needs
+to be converted into a file mode, for example. Although Perl
+automatically converts strings into numbers as needed, this automatic
+conversion assumes base 10.
+
+Leading white space is ignored without warning, as too are any trailing
+non-digits, such as a decimal point (C<oct> only handles non-negative
+integers, not negative integers or floating point).
+
+=item open FILEHANDLE,EXPR
+X<open> X<pipe> X<file, open> X<fopen>
+
+=item open FILEHANDLE,MODE,EXPR
+
+=item open FILEHANDLE,MODE,EXPR,LIST
+
+=item open FILEHANDLE,MODE,REFERENCE
+
+=item open FILEHANDLE
+
+Opens the file whose filename is given by EXPR, and associates it with
+FILEHANDLE.
+
+Simple examples to open a file for reading:
+
+ open(my $fh, "<", "input.txt")
+ or die "cannot open < input.txt: $!";
+
+and for writing:
+
+ open(my $fh, ">", "output.txt")
+ or die "cannot open > output.txt: $!";
+
+(The following is a comprehensive reference to open(): for a gentler
+introduction you may consider L<perlopentut>.)
+
+If FILEHANDLE is an undefined scalar variable (or array or hash element), a
+new filehandle is autovivified, meaning that the variable is assigned a
+reference to a newly allocated anonymous filehandle. Otherwise if
+FILEHANDLE is an expression, its value is the real filehandle. (This is
+considered a symbolic reference, so C<use strict "refs"> should I<not> be
+in effect.)
+
+If EXPR is omitted, the global (package) scalar variable of the same
+name as the FILEHANDLE contains the filename. (Note that lexical
+variables--those declared with C<my> or C<state>--will not work for this
+purpose; so if you're using C<my> or C<state>, specify EXPR in your
+call to open.)
+
+If three (or more) arguments are specified, the open mode (including
+optional encoding) in the second argument are distinct from the filename in
+the third. If MODE is C<< < >> or nothing, the file is opened for input.
+If MODE is C<< > >>, the file is opened for output, with existing files
+first being truncated ("clobbered") and nonexisting files newly created.
+If MODE is C<<< >> >>>, the file is opened for appending, again being
+created if necessary.
+
+You can put a C<+> in front of the C<< > >> or C<< < >> to
+indicate that you want both read and write access to the file; thus
+C<< +< >> is almost always preferred for read/write updates--the
+C<< +> >> mode would clobber the file first. You cant usually use
+either read-write mode for updating textfiles, since they have
+variable-length records. See the B<-i> switch in L<perlrun> for a
+better approach. The file is created with permissions of C<0666>
+modified by the process's C<umask> value.
+
+These various prefixes correspond to the fopen(3) modes of C<r>,
+C<r+>, C<w>, C<w+>, C<a>, and C<a+>.
+
+In the one- and two-argument forms of the call, the mode and filename
+should be concatenated (in that order), preferably separated by white
+space. You can--but shouldn't--omit the mode in these forms when that mode
+is C<< < >>. It is always safe to use the two-argument form of C<open> if
+the filename argument is a known literal.
+
+For three or more arguments if MODE is C<|->, the filename is
+interpreted as a command to which output is to be piped, and if MODE
+is C<-|>, the filename is interpreted as a command that pipes
+output to us. In the two-argument (and one-argument) form, one should
+replace dash (C<->) with the command.
+See L<perlipc/"Using open() for IPC"> for more examples of this.
+(You are not allowed to C<open> to a command that pipes both in I<and>
+out, but see L<IPC::Open2>, L<IPC::Open3>, and
+L<perlipc/"Bidirectional Communication with Another Process"> for
+alternatives.)
+
+In the form of pipe opens taking three or more arguments, if LIST is specified
+(extra arguments after the command name) then LIST becomes arguments
+to the command invoked if the platform supports it. The meaning of
+C<open> with more than three arguments for non-pipe modes is not yet
+defined, but experimental "layers" may give extra LIST arguments
+meaning.
+
+In the two-argument (and one-argument) form, opening C<< <- >>
+or C<-> opens STDIN and opening C<< >- >> opens STDOUT.
+
+You may (and usually should) use the three-argument form of open to specify
+I/O layers (sometimes referred to as "disciplines") to apply to the handle
+that affect how the input and output are processed (see L<open> and
+L<PerlIO> for more details). For example:
+
+ open(my $fh, "<:encoding(UTF-8)", "filename")
+ || die "can't open UTF-8 encoded filename: $!";
+
+opens the UTF8-encoded file containing Unicode characters;
+see L<perluniintro>. Note that if layers are specified in the
+three-argument form, then default layers stored in ${^OPEN} (see L<perlvar>;
+usually set by the B<open> pragma or the switch B<-CioD>) are ignored.
+Those layers will also be ignored if you specifying a colon with no name
+following it. In that case the default layer for the operating system
+(:raw on Unix, :crlf on Windows) is used.
+
+Open returns nonzero on success, the undefined value otherwise. If
+the C<open> involved a pipe, the return value happens to be the pid of
+the subprocess.
+
+If you're running Perl on a system that distinguishes between text
+files and binary files, then you should check out L</binmode> for tips
+for dealing with this. The key distinction between systems that need
+C<binmode> and those that don't is their text file formats. Systems
+like Unix, Mac OS, and Plan 9, that end lines with a single
+character and encode that character in C as C<"\n"> do not
+need C<binmode>. The rest need it.
+
+When opening a file, it's seldom a good idea to continue
+if the request failed, so C<open> is frequently used with
+C<die>. Even if C<die> won't do what you want (say, in a CGI script,
+where you want to format a suitable error message (but there are
+modules that can help with that problem)) always check
+the return value from opening a file.
+
+As a special case the three-argument form with a read/write mode and the third
+argument being C<undef>:
+
+ open(my $tmp, "+>", undef) or die ...
+
+opens a filehandle to an anonymous temporary file. Also using C<< +< >>
+works for symmetry, but you really should consider writing something
+to the temporary file first. You will need to seek() to do the
+reading.
+
+Since v5.8.0, Perl has built using PerlIO by default. Unless you've
+changed this (such as building Perl with C<Configure -Uuseperlio>), you can
+open filehandles directly to Perl scalars via:
+
+ open($fh, ">", \$variable) || ..
+
+To (re)open C<STDOUT> or C<STDERR> as an in-memory file, close it first:
+
+ close STDOUT;
+ open(STDOUT, ">", \$variable)
+ or die "Can't open STDOUT: $!";
+
+General examples:
+
+ $ARTICLE = 100;
+ open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";
+ while (<ARTICLE>) {...
+
+ open(LOG, ">>/usr/spool/news/twitlog"); # (log is reserved)
+ # if the open fails, output is discarded
+
+ open(my $dbase, "+<", "dbase.mine") # open for update
+ or die "Can't open 'dbase.mine' for update: $!";
+
+ open(my $dbase, "+<dbase.mine") # ditto
+ or die "Can't open 'dbase.mine' for update: $!";
+
+ open(ARTICLE, "-|", "caesar <$article") # decrypt article
+ or die "Can't start caesar: $!";
+
+ open(ARTICLE, "caesar <$article |") # ditto
+ or die "Can't start caesar: $!";
+
+ open(EXTRACT, "|sort >Tmp$$") # $$ is our process id
+ or die "Can't start sort: $!";
+
+ # in-memory files
+ open(MEMORY, ">", \$var)
+ or die "Can't open memory file: $!";
+ print MEMORY "foo!\n"; # output will appear in $var
+
+ # process argument list of files along with any includes
+
+ foreach $file (@ARGV) {
+ process($file, "fh00");
+ }
+
+ sub process {
+ my($filename, $input) = @_;
+ $input++; # this is a string increment
+ unless (open($input, "<", $filename)) {
+ print STDERR "Can't open $filename: $!\n";
+ return;
+ }
+
+ local $_;
+ while (<$input>) { # note use of indirection
+ if (/^#include "(.*)"/) {
+ process($1, $input);
+ next;
+ }
+ #... # whatever
+ }
+ }
+
+See L<perliol> for detailed info on PerlIO.
+
+You may also, in the Bourne shell tradition, specify an EXPR beginning
+with C<< >& >>, in which case the rest of the string is interpreted
+as the name of a filehandle (or file descriptor, if numeric) to be
+duped (as C<dup(2)>) and opened. You may use C<&> after C<< > >>,
+C<<< >> >>>, C<< < >>, C<< +> >>, C<<< +>> >>>, and C<< +< >>.
+The mode you specify should match the mode of the original filehandle.
+(Duping a filehandle does not take into account any existing contents
+of IO buffers.) If you use the three-argument form, then you can pass either a
+number, the name of a filehandle, or the normal "reference to a glob".
+
+Here is a script that saves, redirects, and restores C<STDOUT> and
+C<STDERR> using various methods:
+
+ #!/usr/bin/perl
+ open(my $oldout, ">&STDOUT") or die "Can't dup STDOUT: $!";
+ open(OLDERR, ">&", \*STDERR) or die "Can't dup STDERR: $!";
+
+ open(STDOUT, '>', "foo.out") or die "Can't redirect STDOUT: $!";
+ open(STDERR, ">&STDOUT") or die "Can't dup STDOUT: $!";
+
+ select STDERR; $| = 1; # make unbuffered
+ select STDOUT; $| = 1; # make unbuffered
+
+ print STDOUT "stdout 1\n"; # this works for
+ print STDERR "stderr 1\n"; # subprocesses too
+
+ open(STDOUT, ">&", $oldout) or die "Can't dup \$oldout: $!";
+ open(STDERR, ">&OLDERR") or die "Can't dup OLDERR: $!";
+
+ print STDOUT "stdout 2\n";
+ print STDERR "stderr 2\n";
+
+If you specify C<< '<&=X' >>, where C<X> is a file descriptor number
+or a filehandle, then Perl will do an equivalent of C's C<fdopen> of
+that file descriptor (and not call C<dup(2)>); this is more
+parsimonious of file descriptors. For example:
+
+ # open for input, reusing the fileno of $fd
+ open(FILEHANDLE, "<&=$fd")
+
+or
+
+ open(FILEHANDLE, "<&=", $fd)
+
+or
+
+ # open for append, using the fileno of OLDFH
+ open(FH, ">>&=", OLDFH)
+
+or
+
+ open(FH, ">>&=OLDFH")
+
+Being parsimonious on filehandles is also useful (besides being
+parsimonious) for example when something is dependent on file
+descriptors, like for example locking using flock(). If you do just
+C<< open(A, ">>&B") >>, the filehandle A will not have the same file
+descriptor as B, and therefore flock(A) will not flock(B) nor vice
+versa. But with C<< open(A, ">>&=B") >>, the filehandles will share
+the same underlying system file descriptor.
+
+Note that under Perls older than 5.8.0, Perl uses the standard C library's'
+fdopen() to implement the C<=> functionality. On many Unix systems,
+fdopen() fails when file descriptors exceed a certain value, typically 255.
+For Perls 5.8.0 and later, PerlIO is (most often) the default.
+
+You can see whether your Perl was built with PerlIO by running C<perl -V>
+and looking for the C<useperlio=> line. If C<useperlio> is C<define>, you
+have PerlIO; otherwise you don't.
+
+If you open a pipe on the command C<-> (that is, specify either C<|-> or C<-|>
+with the one- or two-argument forms of C<open>),
+an implicit C<fork> is done, so C<open> returns twice: in the parent
+process it returns the pid
+of the child process, and in the child process it returns (a defined) C<0>.
+Use C<defined($pid)> or C<//> to determine whether the open was successful.
+
+For example, use either
+
+ $child_pid = open(FROM_KID, "-|") // die "can't fork: $!";
+
+or
+ $child_pid = open(TO_KID, "|-") // die "can't fork: $!";
+
+followed by
+
+ if ($child_pid) {
+ # am the parent:
+ # either write TO_KID or else read FROM_KID
+ ...
+ wait $child_pid;
+ } else {
+ # am the child; use STDIN/STDOUT normally
+ ...
+ exit;
+ }
+
+The filehandle behaves normally for the parent, but I/O to that
+filehandle is piped from/to the STDOUT/STDIN of the child process.
+In the child process, the filehandle isn't opened--I/O happens from/to
+the new STDOUT/STDIN. Typically this is used like the normal
+piped open when you want to exercise more control over just how the
+pipe command gets executed, such as when running setuid and
+you don't want to have to scan shell commands for metacharacters.
+
+The following blocks are more or less equivalent:
+
+ open(FOO, "|tr '[a-z]' '[A-Z]'");
+ open(FOO, "|-", "tr '[a-z]' '[A-Z]'");
+ open(FOO, "|-") || exec 'tr', '[a-z]', '[A-Z]';
+ open(FOO, "|-", "tr", '[a-z]', '[A-Z]');
+
+ open(FOO, "cat -n '$file'|");
+ open(FOO, "-|", "cat -n '$file'");
+ open(FOO, "-|") || exec "cat", "-n", $file;
+ open(FOO, "-|", "cat", "-n", $file);
+
+The last two examples in each block show the pipe as "list form", which is
+not yet supported on all platforms. A good rule of thumb is that if
+your platform has a real C<fork()> (in other words, if your platform is
+Unix, including Linux and MacOS X), you can use the list form. You would
+want to use the list form of the pipe so you can pass literal arguments
+to the command without risk of the shell interpreting any shell metacharacters
+in them. However, this also bars you from opening pipes to commands
+that intentionally contain shell metacharacters, such as:
+
+ open(FOO, "|cat -n | expand -4 | lpr")
+ // die "Can't open pipeline to lpr: $!";
+
+See L<perlipc/"Safe Pipe Opens"> for more examples of this.
+
+Beginning with v5.6.0, Perl will attempt to flush all files opened for
+output before any operation that may do a fork, but this may not be
+supported on some platforms (see L<perlport>). To be safe, you may need
+to set C<$|> ($AUTOFLUSH in English) or call the C<autoflush()> method
+of C<IO::Handle> on any open handles.
+
+On systems that support a close-on-exec flag on files, the flag will
+be set for the newly opened file descriptor as determined by the value
+of C<$^F>. See L<perlvar/$^F>.
+
+Closing any piped filehandle causes the parent process to wait for the
+child to finish, then returns the status value in C<$?> and
+C<${^CHILD_ERROR_NATIVE}>.
+
+The filename passed to the one- and two-argument forms of open() will
+have leading and trailing whitespace deleted and normal
+redirection characters honored. This property, known as "magic open",
+can often be used to good effect. A user could specify a filename of
+F<"rsh cat file |">, or you could change certain filenames as needed:
+
+ $filename =~ s/(.*\.gz)\s*$/gzip -dc < $1|/;
+ open(FH, $filename) or die "Can't open $filename: $!";
+
+Use the three-argument form to open a file with arbitrary weird characters in it,
+
+ open(FOO, "<", $file)
+ || die "can't open < $file: $!";
+
+otherwise it's necessary to protect any leading and trailing whitespace:
+
+ $file =~ s#^(\s)#./$1#;
+ open(FOO, "< $file\0")
+ || die "open failed: $!";
+
+(this may not work on some bizarre filesystems). One should
+conscientiously choose between the I<magic> and I<three-argument> form
+of open():
+
+ open(IN, $ARGV[0]) || die "can't open $ARGV[0]: $!";
+
+will allow the user to specify an argument of the form C<"rsh cat file |">,
+but will not work on a filename that happens to have a trailing space, while
+
+ open(IN, "<", $ARGV[0])
+ || die "can't open < $ARGV[0]: $!";
+
+will have exactly the opposite restrictions.
+
+If you want a "real" C C<open> (see L<open(2)> on your system), then you
+should use the C<sysopen> function, which involves no such magic (but may
+use subtly different filemodes than Perl open(), which is mapped to C
+fopen()). This is another way to protect your filenames from
+interpretation. For example:
+
+ use IO::Handle;
+ sysopen(HANDLE, $path, O_RDWR|O_CREAT|O_EXCL)
+ or die "sysopen $path: $!";
+ $oldfh = select(HANDLE); $| = 1; select($oldfh);
+ print HANDLE "stuff $$\n";
+ seek(HANDLE, 0, 0);
+ print "File contains: ", <HANDLE>;
+
+Using the constructor from the C<IO::Handle> package (or one of its
+subclasses, such as C<IO::File> or C<IO::Socket>), you can generate anonymous
+filehandles that have the scope of the variables used to hold them, then
+automatically (but silently) close once their reference counts become
+zero, typically at scope exit:
+
+ use IO::File;
+ #...
+ sub read_myfile_munged {
+ my $ALL = shift;
+ # or just leave it undef to autoviv
+ my $handle = IO::File->new;
+ open($handle, "<", "myfile") or die "myfile: $!";
+ $first = <$handle>
+ or return (); # Automatically closed here.
+ mung($first) or die "mung failed"; # Or here.
+ return (first, <$handle>) if $ALL; # Or here.
+ return $first; # Or here.
+ }
+
+B<WARNING:> The previous example has a bug because the automatic
+close that happens when the refcount on C<handle> does not
+properly detect and report failures. I<Always> close the handle
+yourself and inspect the return value.
+
+ close($handle)
+ || warn "close failed: $!";
+
+See L</seek> for some details about mixing reading and writing.
+
+Portability issues: L<perlport/open>.
+
+=item opendir DIRHANDLE,EXPR
+X<opendir>
+
+Opens a directory named EXPR for processing by C<readdir>, C<telldir>,
+C<seekdir>, C<rewinddir>, and C<closedir>. Returns true if successful.
+DIRHANDLE may be an expression whose value can be used as an indirect
+dirhandle, usually the real dirhandle name. If DIRHANDLE is an undefined
+scalar variable (or array or hash element), the variable is assigned a
+reference to a new anonymous dirhandle; that is, it's autovivified.
+DIRHANDLEs have their own namespace separate from FILEHANDLEs.
+
+See the example at C<readdir>.
+
+=item ord EXPR
+X<ord> X<encoding>
+
+=item ord
+
+Returns the numeric value of the first character of EXPR.
+If EXPR is an empty string, returns 0. If EXPR is omitted, uses C<$_>.
+(Note I<character>, not byte.)
+
+For the reverse, see L</chr>.
+See L<perlunicode> for more about Unicode.
+
+=item our EXPR
+X<our> X<global>
+
+=item our TYPE EXPR
+
+=item our EXPR : ATTRS
+
+=item our TYPE EXPR : ATTRS
+
+C<our> associates a simple name with a package variable in the current
+package for use within the current scope. When C<use strict 'vars'> is in
+effect, C<our> lets you use declared global variables without qualifying
+them with package names, within the lexical scope of the C<our> declaration.
+In this way C<our> differs from C<use vars>, which is package-scoped.
+
+Unlike C<my> or C<state>, which allocates storage for a variable and
+associates a simple name with that storage for use within the current
+scope, C<our> associates a simple name with a package (read: global)
+variable in the current package, for use within the current lexical scope.
+In other words, C<our> has the same scoping rules as C<my> or C<state>, but
+does not necessarily create a variable.
+
+If more than one value is listed, the list must be placed
+in parentheses.
+
+ our $foo;
+ our($bar, $baz);
+
+An C<our> declaration declares a global variable that will be visible
+across its entire lexical scope, even across package boundaries. The
+package in which the variable is entered is determined at the point
+of the declaration, not at the point of use. This means the following
+behavior holds:
+
+ package Foo;
+ our $bar; # declares $Foo::bar for rest of lexical scope
+ $bar = 20;
+
+ package Bar;
+ print $bar; # prints 20, as it refers to $Foo::bar
+
+Multiple C<our> declarations with the same name in the same lexical
+scope are allowed if they are in different packages. If they happen
+to be in the same package, Perl will emit warnings if you have asked
+for them, just like multiple C<my> declarations. Unlike a second
+C<my> declaration, which will bind the name to a fresh variable, a
+second C<our> declaration in the same package, in the same scope, is
+merely redundant.
+
+ use warnings;
+ package Foo;
+ our $bar; # declares $Foo::bar for rest of lexical scope
+ $bar = 20;
+
+ package Bar;
+ our $bar = 30; # declares $Bar::bar for rest of lexical scope
+ print $bar; # prints 30
+
+ our $bar; # emits warning but has no other effect
+ print $bar; # still prints 30
+
+An C<our> declaration may also have a list of attributes associated
+with it.
+
+The exact semantics and interface of TYPE and ATTRS are still
+evolving. TYPE is currently bound to the use of C<fields> pragma,
+and attributes are handled using the C<attributes> pragma, or starting
+from Perl 5.8.0 also via the C<Attribute::Handlers> module. See
+L<perlsub/"Private Variables via my()"> for details, and L<fields>,
+L<attributes>, and L<Attribute::Handlers>.
+
+=item pack TEMPLATE,LIST
+X<pack>
+
+Takes a LIST of values and converts it into a string using the rules
+given by the TEMPLATE. The resulting string is the concatenation of
+the converted values. Typically, each converted value looks
+like its machine-level representation. For example, on 32-bit machines
+an integer may be represented by a sequence of 4 bytes, which will in
+Perl be presented as a string that's 4 characters long.
+
+See L<perlpacktut> for an introduction to this function.
+
+The TEMPLATE is a sequence of characters that give the order and type
+of values, as follows:
+
+ a A string with arbitrary binary data, will be null padded.
+ A A text (ASCII) string, will be space padded.
+ Z A null-terminated (ASCIZ) string, will be null padded.
+
+ b A bit string (ascending bit order inside each byte,
+ like vec()).
+ B A bit string (descending bit order inside each byte).
+ h A hex string (low nybble first).
+ H A hex string (high nybble first).
+
+ c A signed char (8-bit) value.
+ C An unsigned char (octet) value.
+ W An unsigned char value (can be greater than 255).
+
+ s A signed short (16-bit) value.
+ S An unsigned short value.
+
+ l A signed long (32-bit) value.
+ L An unsigned long value.
+
+ q A signed quad (64-bit) value.
+ Q An unsigned quad value.
+ (Quads are available only if your system supports 64-bit
+ integer values _and_ if Perl has been compiled to support
+ those. Raises an exception otherwise.)
+
+ i A signed integer value.
+ I A unsigned integer value.
+ (This 'integer' is _at_least_ 32 bits wide. Its exact
+ size depends on what a local C compiler calls 'int'.)
+
+ n An unsigned short (16-bit) in "network" (big-endian) order.
+ N An unsigned long (32-bit) in "network" (big-endian) order.
+ v An unsigned short (16-bit) in "VAX" (little-endian) order.
+ V An unsigned long (32-bit) in "VAX" (little-endian) order.
+
+ j A Perl internal signed integer value (IV).
+ J A Perl internal unsigned integer value (UV).
+
+ f A single-precision float in native format.
+ d A double-precision float in native format.
+
+ F A Perl internal floating-point value (NV) in native format
+ D A float of long-double precision in native format.
+ (Long doubles are available only if your system supports
+ long double values _and_ if Perl has been compiled to
+ support those. Raises an exception otherwise.)
+
+ p A pointer to a null-terminated string.
+ P A pointer to a structure (fixed-length string).
+
+ u A uuencoded string.
+ U A Unicode character number. Encodes to a character in char-
+ acter mode and UTF-8 (or UTF-EBCDIC in EBCDIC platforms) in
+ byte mode.
+
+ w A BER compressed integer (not an ASN.1 BER, see perlpacktut
+ for details). Its bytes represent an unsigned integer in
+ base 128, most significant digit first, with as few digits
+ as possible. Bit eight (the high bit) is set on each byte
+ except the last.
+
+ x A null byte (a.k.a ASCII NUL, "\000", chr(0))
+ X Back up a byte.
+ @ Null-fill or truncate to absolute position, counted from the
+ start of the innermost ()-group.
+ . Null-fill or truncate to absolute position specified by
+ the value.
+ ( Start of a ()-group.
+
+One or more modifiers below may optionally follow certain letters in the
+TEMPLATE (the second column lists letters for which the modifier is valid):
+
+ ! sSlLiI Forces native (short, long, int) sizes instead
+ of fixed (16-/32-bit) sizes.
+
+ xX Make x and X act as alignment commands.
+
+ nNvV Treat integers as signed instead of unsigned.
+
+ @. Specify position as byte offset in the internal
+ representation of the packed string. Efficient but
+ dangerous.
+
+ > sSiIlLqQ Force big-endian byte-order on the type.
+ jJfFdDpP (The "big end" touches the construct.)
+
+ < sSiIlLqQ Force little-endian byte-order on the type.
+ jJfFdDpP (The "little end" touches the construct.)
+
+The C<< > >> and C<< < >> modifiers can also be used on C<()> groups
+to force a particular byte-order on all components in that group,
+including all its subgroups.
+
+The following rules apply:
+
+=over
+
+=item *
+
+Each letter may optionally be followed by a number indicating the repeat
+count. A numeric repeat count may optionally be enclosed in brackets, as
+in C<pack("C[80]", @arr)>. The repeat count gobbles that many values from
+the LIST when used with all format types other than C<a>, C<A>, C<Z>, C<b>,
+C<B>, C<h>, C<H>, C<@>, C<.>, C<x>, C<X>, and C<P>, where it means
+something else, described below. Supplying a C<*> for the repeat count
+instead of a number means to use however many items are left, except for:
+
+=over
+
+=item *
+
+C<@>, C<x>, and C<X>, where it is equivalent to C<0>.
+
+=item *
+
+<.>, where it means relative to the start of the string.
+
+=item *
+
+C<u>, where it is equivalent to 1 (or 45, which here is equivalent).
+
+=back
+
+One can replace a numeric repeat count with a template letter enclosed in
+brackets to use the packed byte length of the bracketed template for the
+repeat count.
+
+For example, the template C<x[L]> skips as many bytes as in a packed long,
+and the template C<"$t X[$t] $t"> unpacks twice whatever $t (when
+variable-expanded) unpacks. If the template in brackets contains alignment
+commands (such as C<x![d]>), its packed length is calculated as if the
+start of the template had the maximal possible alignment.
+
+When used with C<Z>, a C<*> as the repeat count is guaranteed to add a
+trailing null byte, so the resulting string is always one byte longer than
+the byte length of the item itself.
+
+When used with C<@>, the repeat count represents an offset from the start
+of the innermost C<()> group.
+
+When used with C<.>, the repeat count determines the starting position to
+calculate the value offset as follows:
+
+=over
+
+=item *
+
+If the repeat count is C<0>, it's relative to the current position.
+
+=item *
+
+If the repeat count is C<*>, the offset is relative to the start of the
+packed string.
+
+=item *
+
+And if it's an integer I<n>, the offset is relative to the start of the
+I<n>th innermost C<( )> group, or to the start of the string if I<n> is
+bigger then the group level.
+
+=back
+
+The repeat count for C<u> is interpreted as the maximal number of bytes
+to encode per line of output, with 0, 1 and 2 replaced by 45. The repeat
+count should not be more than 65.
+
+=item *
+
+The C<a>, C<A>, and C<Z> types gobble just one value, but pack it as a
+string of length count, padding with nulls or spaces as needed. When
+unpacking, C<A> strips trailing whitespace and nulls, C<Z> strips everything
+after the first null, and C<a> returns data with no stripping at all.
+
+If the value to pack is too long, the result is truncated. If it's too
+long and an explicit count is provided, C<Z> packs only C<$count-1> bytes,
+followed by a null byte. Thus C<Z> always packs a trailing null, except
+when the count is 0.
+
+=item *
+
+Likewise, the C<b> and C<B> formats pack a string that's that many bits long.
+Each such format generates 1 bit of the result. These are typically followed
+by a repeat count like C<B8> or C<B64>.
+
+Each result bit is based on the least-significant bit of the corresponding
+input character, i.e., on C<ord($char)%2>. In particular, characters C<"0">
+and C<"1"> generate bits 0 and 1, as do characters C<"\000"> and C<"\001">.
+
+Starting from the beginning of the input string, each 8-tuple
+of characters is converted to 1 character of output. With format C<b>,
+the first character of the 8-tuple determines the least-significant bit of a
+character; with format C<B>, it determines the most-significant bit of
+a character.
+
+If the length of the input string is not evenly divisible by 8, the
+remainder is packed as if the input string were padded by null characters
+at the end. Similarly during unpacking, "extra" bits are ignored.
+
+If the input string is longer than needed, remaining characters are ignored.
+
+A C<*> for the repeat count uses all characters of the input field.
+On unpacking, bits are converted to a string of C<0>s and C<1>s.
+
+=item *
+
+The C<h> and C<H> formats pack a string that many nybbles (4-bit groups,
+representable as hexadecimal digits, C<"0".."9"> C<"a".."f">) long.
+
+For each such format, pack() generates 4 bits of result.
+With non-alphabetical characters, the result is based on the 4 least-significant
+bits of the input character, i.e., on C<ord($char)%16>. In particular,
+characters C<"0"> and C<"1"> generate nybbles 0 and 1, as do bytes
+C<"\000"> and C<"\001">. For characters C<"a".."f"> and C<"A".."F">, the result
+is compatible with the usual hexadecimal digits, so that C<"a"> and
+C<"A"> both generate the nybble C<0xA==10>. Use only these specific hex
+characters with this format.
+
+Starting from the beginning of the template to pack(), each pair
+of characters is converted to 1 character of output. With format C<h>, the
+first character of the pair determines the least-significant nybble of the
+output character; with format C<H>, it determines the most-significant
+nybble.
+
+If the length of the input string is not even, it behaves as if padded by
+a null character at the end. Similarly, "extra" nybbles are ignored during
+unpacking.
+
+If the input string is longer than needed, extra characters are ignored.
+
+A C<*> for the repeat count uses all characters of the input field. For
+unpack(), nybbles are converted to a string of hexadecimal digits.
+
+=item *
+
+The C<p> format packs a pointer to a null-terminated string. You are
+responsible for ensuring that the string is not a temporary value, as that
+could potentially get deallocated before you got around to using the packed
+result. The C<P> format packs a pointer to a structure of the size indicated
+by the length. A null pointer is created if the corresponding value for
+C<p> or C<P> is C<undef>; similarly with unpack(), where a null pointer
+unpacks into C<undef>.
+
+If your system has a strange pointer size--meaning a pointer is neither as
+big as an int nor as big as a long--it may not be possible to pack or
+unpack pointers in big- or little-endian byte order. Attempting to do
+so raises an exception.
+
+=item *
+
+The C</> template character allows packing and unpacking of a sequence of
+items where the packed structure contains a packed item count followed by
+the packed items themselves. This is useful when the structure you're
+unpacking has encoded the sizes or repeat counts for some of its fields
+within the structure itself as separate fields.
+
+For C<pack>, you write I<length-item>C</>I<sequence-item>, and the
+I<length-item> describes how the length value is packed. Formats likely
+to be of most use are integer-packing ones like C<n> for Java strings,
+C<w> for ASN.1 or SNMP, and C<N> for Sun XDR.
+
+For C<pack>, I<sequence-item> may have a repeat count, in which case
+the minimum of that and the number of available items is used as the argument
+for I<length-item>. If it has no repeat count or uses a '*', the number
+of available items is used.
+
+For C<unpack>, an internal stack of integer arguments unpacked so far is
+used. You write C</>I<sequence-item> and the repeat count is obtained by
+popping off the last element from the stack. The I<sequence-item> must not
+have a repeat count.
+
+If I<sequence-item> refers to a string type (C<"A">, C<"a">, or C<"Z">),
+the I<length-item> is the string length, not the number of strings. With
+an explicit repeat count for pack, the packed string is adjusted to that
+length. For example:
+
+ This code: gives this result:
+
+ unpack("W/a", "\004Gurusamy") ("Guru")
+ unpack("a3/A A*", "007 Bond J ") (" Bond", "J")
+ unpack("a3 x2 /A A*", "007: Bond, J.") ("Bond, J", ".")
+
+ pack("n/a* w/a","hello,","world") "\000\006hello,\005world"
+ pack("a/W2", ord("a") .. ord("z")) "2ab"
+
+The I<length-item> is not returned explicitly from C<unpack>.
+
+Supplying a count to the I<length-item> format letter is only useful with
+C<A>, C<a>, or C<Z>. Packing with a I<length-item> of C<a> or C<Z> may
+introduce C<"\000"> characters, which Perl does not regard as legal in
+numeric strings.
+
+=item *
+
+The integer types C<s>, C<S>, C<l>, and C<L> may be
+followed by a C<!> modifier to specify native shorts or
+longs. As shown in the example above, a bare C<l> means
+exactly 32 bits, although the native C<long> as seen by the local C compiler
+may be larger. This is mainly an issue on 64-bit platforms. You can
+see whether using C<!> makes any difference this way:
+
+ printf "format s is %d, s! is %d\n",
+ length pack("s"), length pack("s!");
+
+ printf "format l is %d, l! is %d\n",
+ length pack("l"), length pack("l!");
+
+
+C<i!> and C<I!> are also allowed, but only for completeness' sake:
+they are identical to C<i> and C<I>.
+
+The actual sizes (in bytes) of native shorts, ints, longs, and long
+longs on the platform where Perl was built are also available from
+the command line:
+
+ $ perl -V:{short,int,long{,long}}size
+ shortsize='2';
+ intsize='4';
+ longsize='4';
+ longlongsize='8';
+
+or programmatically via the C<Config> module:
+
+ use Config;
+ print $Config{shortsize}, "\n";
+ print $Config{intsize}, "\n";
+ print $Config{longsize}, "\n";
+ print $Config{longlongsize}, "\n";
+
+C<$Config{longlongsize}> is undefined on systems without
+long long support.
+
+=item *
+
+The integer formats C<s>, C<S>, C<i>, C<I>, C<l>, C<L>, C<j>, and C<J> are
+inherently non-portable between processors and operating systems because
+they obey native byteorder and endianness. For example, a 4-byte integer
+0x12345678 (305419896 decimal) would be ordered natively (arranged in and
+handled by the CPU registers) into bytes as
+
+ 0x12 0x34 0x56 0x78 # big-endian
+ 0x78 0x56 0x34 0x12 # little-endian
+
+Basically, Intel and VAX CPUs are little-endian, while everybody else,
+including Motorola m68k/88k, PPC, Sparc, HP PA, Power, and Cray, are
+big-endian. Alpha and MIPS can be either: Digital/Compaq uses (well, used)
+them in little-endian mode, but SGI/Cray uses them in big-endian mode.
+
+The names I<big-endian> and I<little-endian> are comic references to the
+egg-eating habits of the little-endian Lilliputians and the big-endian
+Blefuscudians from the classic Jonathan Swift satire, I<Gulliver's Travels>.
+This entered computer lingo via the paper "On Holy Wars and a Plea for
+Peace" by Danny Cohen, USC/ISI IEN 137, April 1, 1980.
+
+Some systems may have even weirder byte orders such as
+
+ 0x56 0x78 0x12 0x34
+ 0x34 0x12 0x78 0x56
+
+You can determine your system endianness with this incantation:
+
+ printf("%#02x ", $_) for unpack("W*", pack L=>0x12345678);
+
+The byteorder on the platform where Perl was built is also available
+via L<Config>:
+
+ use Config;
+ print "$Config{byteorder}\n";
+
+or from the command line:
+
+ $ perl -V:byteorder
+
+Byteorders C<"1234"> and C<"12345678"> are little-endian; C<"4321">
+and C<"87654321"> are big-endian.
+
+For portably packed integers, either use the formats C<n>, C<N>, C<v>,
+and C<V> or else use the C<< > >> and C<< < >> modifiers described
+immediately below. See also L<perlport>.
+
+=item *
+
+Starting with Perl 5.9.2, integer and floating-point formats, along with
+the C<p> and C<P> formats and C<()> groups, may all be followed by the
+C<< > >> or C<< < >> endianness modifiers to respectively enforce big-
+or little-endian byte-order. These modifiers are especially useful
+given how C<n>, C<N>, C<v>, and C<V> don't cover signed integers,
+64-bit integers, or floating-point values.
+
+Here are some concerns to keep in mind when using an endianness modifier:
+
+=over
+
+=item *
+
+Exchanging signed integers between different platforms works only
+when all platforms store them in the same format. Most platforms store
+signed integers in two's-complement notation, so usually this is not an issue.
+
+=item *
+
+The C<< > >> or C<< < >> modifiers can only be used on floating-point
+formats on big- or little-endian machines. Otherwise, attempting to
+use them raises an exception.
+
+=item *
+
+Forcing big- or little-endian byte-order on floating-point values for
+data exchange can work only if all platforms use the same
+binary representation such as IEEE floating-point. Even if all
+platforms are using IEEE, there may still be subtle differences. Being able
+to use C<< > >> or C<< < >> on floating-point values can be useful,
+but also dangerous if you don't know exactly what you're doing.
+It is not a general way to portably store floating-point values.
+
+=item *
+
+When using C<< > >> or C<< < >> on a C<()> group, this affects
+all types inside the group that accept byte-order modifiers,
+including all subgroups. It is silently ignored for all other
+types. You are not allowed to override the byte-order within a group
+that already has a byte-order modifier suffix.
+
+=back
+
+=item *
+
+Real numbers (floats and doubles) are in native machine format only.
+Due to the multiplicity of floating-point formats and the lack of a
+standard "network" representation for them, no facility for interchange has been
+made. This means that packed floating-point data written on one machine
+may not be readable on another, even if both use IEEE floating-point
+arithmetic (because the endianness of the memory representation is not part
+of the IEEE spec). See also L<perlport>.
+
+If you know I<exactly> what you're doing, you can use the C<< > >> or C<< < >>
+modifiers to force big- or little-endian byte-order on floating-point values.
+
+Because Perl uses doubles (or long doubles, if configured) internally for
+all numeric calculation, converting from double into float and thence
+to double again loses precision, so C<unpack("f", pack("f", $foo)>)
+will not in general equal $foo.
+
+=item *
+
+Pack and unpack can operate in two modes: character mode (C<C0> mode) where
+the packed string is processed per character, and UTF-8 mode (C<U0> mode)
+where the packed string is processed in its UTF-8-encoded Unicode form on
+a byte-by-byte basis. Character mode is the default unless the format string
+starts with C<U>. You can always switch mode mid-format with an explicit
+C<C0> or C<U0> in the format. This mode remains in effect until the next
+mode change, or until the end of the C<()> group it (directly) applies to.
+
+Using C<C0> to get Unicode characters while using C<U0> to get I<non>-Unicode
+bytes is not necessarily obvious. Probably only the first of these
+is what you want:
+
+ $ perl -CS -E 'say "\x{3B1}\x{3C9}"' |
+ perl -CS -ne 'printf "%v04X\n", $_ for unpack("C0A*", $_)'
+ 03B1.03C9
+ $ perl -CS -E 'say "\x{3B1}\x{3C9}"' |
+ perl -CS -ne 'printf "%v02X\n", $_ for unpack("U0A*", $_)'
+ CE.B1.CF.89
+ $ perl -CS -E 'say "\x{3B1}\x{3C9}"' |
+ perl -C0 -ne 'printf "%v02X\n", $_ for unpack("C0A*", $_)'
+ CE.B1.CF.89
+ $ perl -CS -E 'say "\x{3B1}\x{3C9}"' |
+ perl -C0 -ne 'printf "%v02X\n", $_ for unpack("U0A*", $_)'
+ C3.8E.C2.B1.C3.8F.C2.89
+
+Those examples also illustrate that you should not try to use
+C<pack>/C<unpack> as a substitute for the L<Encode> module.
+
+=item *
+
+You must yourself do any alignment or padding by inserting, for example,
+enough C<"x">es while packing. There is no way for pack() and unpack()
+to know where characters are going to or coming from, so they
+handle their output and input as flat sequences of characters.
+
+=item *
+
+A C<()> group is a sub-TEMPLATE enclosed in parentheses. A group may
+take a repeat count either as postfix, or for unpack(), also via the C</>
+template character. Within each repetition of a group, positioning with
+C<@> starts over at 0. Therefore, the result of
+
+ pack("@1A((@2A)@3A)", qw[X Y Z])
+
+is the string C<"\0X\0\0YZ">.
+
+=item *
+
+C<x> and C<X> accept the C<!> modifier to act as alignment commands: they
+jump forward or back to the closest position aligned at a multiple of C<count>
+characters. For example, to pack() or unpack() a C structure like
+
+ struct {
+ char c; /* one signed, 8-bit character */
+ double d;
+ char cc[2];
+ }
+
+one may need to use the template C<c x![d] d c[2]>. This assumes that
+doubles must be aligned to the size of double.
+
+For alignment commands, a C<count> of 0 is equivalent to a C<count> of 1;
+both are no-ops.
+
+=item *
+
+C<n>, C<N>, C<v> and C<V> accept the C<!> modifier to
+represent signed 16-/32-bit integers in big-/little-endian order.
+This is portable only when all platforms sharing packed data use the
+same binary representation for signed integers; for example, when all
+platforms use two's-complement representation.
+
+=item *
+
+Comments can be embedded in a TEMPLATE using C<#> through the end of line.
+White space can separate pack codes from each other, but modifiers and
+repeat counts must follow immediately. Breaking complex templates into
+individual line-by-line components, suitably annotated, can do as much to
+improve legibility and maintainability of pack/unpack formats as C</x> can
+for complicated pattern matches.
+
+=item *
+
+If TEMPLATE requires more arguments than pack() is given, pack()
+assumes additional C<""> arguments. If TEMPLATE requires fewer arguments
+than given, extra arguments are ignored.
+
+=back
+
+Examples:
+
+ $foo = pack("WWWW",65,66,67,68);
+ # foo eq "ABCD"
+ $foo = pack("W4",65,66,67,68);
+ # same thing
+ $foo = pack("W4",0x24b6,0x24b7,0x24b8,0x24b9);
+ # same thing with Unicode circled letters.
+ $foo = pack("U4",0x24b6,0x24b7,0x24b8,0x24b9);
+ # same thing with Unicode circled letters. You don't get the
+ # UTF-8 bytes because the U at the start of the format caused
+ # a switch to U0-mode, so the UTF-8 bytes get joined into
+ # characters
+ $foo = pack("C0U4",0x24b6,0x24b7,0x24b8,0x24b9);
+ # foo eq "\xe2\x92\xb6\xe2\x92\xb7\xe2\x92\xb8\xe2\x92\xb9"
+ # This is the UTF-8 encoding of the string in the
+ # previous example
+
+ $foo = pack("ccxxcc",65,66,67,68);
+ # foo eq "AB\0\0CD"
+
+ # NOTE: The examples above featuring "W" and "c" are true
+ # only on ASCII and ASCII-derived systems such as ISO Latin 1
+ # and UTF-8. On EBCDIC systems, the first example would be
+ # $foo = pack("WWWW",193,194,195,196);
+
+ $foo = pack("s2",1,2);
+ # "\001\000\002\000" on little-endian
+ # "\000\001\000\002" on big-endian
+
+ $foo = pack("a4","abcd","x","y","z");
+ # "abcd"
+
+ $foo = pack("aaaa","abcd","x","y","z");
+ # "axyz"
+
+ $foo = pack("a14","abcdefg");
+ # "abcdefg\0\0\0\0\0\0\0"
+
+ $foo = pack("i9pl", gmtime);
+ # a real struct tm (on my system anyway)
+
+ $utmp_template = "Z8 Z8 Z16 L";
+ $utmp = pack($utmp_template, @utmp1);
+ # a struct utmp (BSDish)
+
+ @utmp2 = unpack($utmp_template, $utmp);
+ # "@utmp1" eq "@utmp2"
+
+ sub bintodec {
+ unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
+ }
+
+ $foo = pack('sx2l', 12, 34);
+ # short 12, two zero bytes padding, long 34
+ $bar = pack('s at 4l', 12, 34);
+ # short 12, zero fill to position 4, long 34
+ # $foo eq $bar
+ $baz = pack('s.l', 12, 4, 34);
+ # short 12, zero fill to position 4, long 34
+
+ $foo = pack('nN', 42, 4711);
+ # pack big-endian 16- and 32-bit unsigned integers
+ $foo = pack('S>L>', 42, 4711);
+ # exactly the same
+ $foo = pack('s<l<', -42, 4711);
+ # pack little-endian 16- and 32-bit signed integers
+ $foo = pack('(sl)<', -42, 4711);
+ # exactly the same
+
+The same template may generally also be used in unpack().
+
+=item package NAMESPACE
+
+=item package NAMESPACE VERSION
+X<package> X<module> X<namespace> X<version>
+
+=item package NAMESPACE BLOCK
+
+=item package NAMESPACE VERSION BLOCK
+X<package> X<module> X<namespace> X<version>
+
+Declares the BLOCK or the rest of the compilation unit as being in the
+given namespace. The scope of the package declaration is either the
+supplied code BLOCK or, in the absence of a BLOCK, from the declaration
+itself through the end of current scope (the enclosing block, file, or
+C<eval>). That is, the forms without a BLOCK are operative through the end
+of the current scope, just like the C<my>, C<state>, and C<our> operators.
+All unqualified dynamic identifiers in this scope will be in the given
+namespace, except where overridden by another C<package> declaration or
+when they're one of the special identifiers that qualify into C<main::>,
+like C<STDOUT>, C<ARGV>, C<ENV>, and the punctuation variables.
+
+A package statement affects dynamic variables only, including those
+you've used C<local> on, but I<not> lexical variables, which are created
+with C<my>, C<state>, or C<our>. Typically it would be the first
+declaration in a file included by C<require> or C<use>. You can switch into a
+package in more than one place, since this only determines which default
+symbol table the compiler uses for the rest of that block. You can refer to
+identifiers in other packages than the current one by prefixing the identifier
+with the package name and a double colon, as in C<$SomePack::var>
+or C<ThatPack::INPUT_HANDLE>. If package name is omitted, the C<main>
+package as assumed. That is, C<$::sail> is equivalent to
+C<$main::sail> (as well as to C<$main'sail>, still seen in ancient
+code, mostly from Perl 4).
+
+If VERSION is provided, C<package> sets the C<$VERSION> variable in the given
+namespace to a L<version> object with the VERSION provided. VERSION must be a
+"strict" style version number as defined by the L<version> module: a positive
+decimal number (integer or decimal-fraction) without exponentiation or else a
+dotted-decimal v-string with a leading 'v' character and at least three
+components. You should set C<$VERSION> only once per package.
+
+See L<perlmod/"Packages"> for more information about packages, modules,
+and classes. See L<perlsub> for other scoping issues.
+
+=item pipe READHANDLE,WRITEHANDLE
+X<pipe>
+
+Opens a pair of connected pipes like the corresponding system call.
+Note that if you set up a loop of piped processes, deadlock can occur
+unless you are very careful. In addition, note that Perl's pipes use
+IO buffering, so you may need to set C<$|> to flush your WRITEHANDLE
+after each command, depending on the application.
+
+See L<IPC::Open2>, L<IPC::Open3>, and
+L<perlipc/"Bidirectional Communication with Another Process">
+for examples of such things.
+
+On systems that support a close-on-exec flag on files, that flag is set
+on all newly opened file descriptors whose C<fileno>s are I<higher> than
+the current value of $^F (by default 2 for C<STDERR>). See L<perlvar/$^F>.
+
+=item __PACKAGE__
+X<__PACKAGE__>
+
+A special token that returns the name of the package in which it occurs.
+
+=item pop ARRAY
+X<pop> X<stack>
+
+=item pop EXPR
+
+=item pop
+
+Pops and returns the last value of the array, shortening the array by
+one element.
+
+Returns the undefined value if the array is empty, although this may also
+happen at other times. If ARRAY is omitted, pops the C<@ARGV> array in the
+main program, but the C<@_> array in subroutines, just like C<shift>.
+
+Starting with Perl 5.14, C<pop> can take a scalar EXPR, which must hold a
+reference to an unblessed array. The argument will be dereferenced
+automatically. This aspect of C<pop> is considered highly experimental.
+The exact behaviour may change in a future version of Perl.
+
+=item pos SCALAR
+X<pos> X<match, position>
+
+=item pos
+
+Returns the offset of where the last C<m//g> search left off for the
+variable in question (C<$_> is used when the variable is not
+specified). Note that 0 is a valid match offset. C<undef> indicates
+that the search position is reset (usually due to match failure, but
+can also be because no match has yet been run on the scalar).
+
+C<pos> directly accesses the location used by the regexp engine to
+store the offset, so assigning to C<pos> will change that offset, and
+so will also influence the C<\G> zero-width assertion in regular
+expressions. Both of these effects take place for the next match, so
+you can't affect the position with C<pos> during the current match,
+such as in C<(?{pos() = 5})> or C<s//pos() = 5/e>.
+
+Setting C<pos> also resets the I<matched with zero-length> flag, described
+under L<perlre/"Repeated Patterns Matching a Zero-length Substring">.
+
+Because a failed C<m//gc> match doesn't reset the offset, the return
+from C<pos> won't change either in this case. See L<perlre> and
+L<perlop>.
+
+=item print FILEHANDLE LIST
+X<print>
+
+=item print FILEHANDLE
+
+=item print LIST
+
+=item print
+
+Prints a string or a list of strings. Returns true if successful.
+FILEHANDLE may be a scalar variable containing the name of or a reference
+to the filehandle, thus introducing one level of indirection. (NOTE: If
+FILEHANDLE is a variable and the next token is a term, it may be
+misinterpreted as an operator unless you interpose a C<+> or put
+parentheses around the arguments.) If FILEHANDLE is omitted, prints to the
+last selected (see L</select>) output handle. If LIST is omitted, prints
+C<$_> to the currently selected output handle. To use FILEHANDLE alone to
+print the content of C<$_> to it, you must use a real filehandle like
+C<FH>, not an indirect one like C<$fh>. To set the default output handle
+to something other than STDOUT, use the select operation.
+
+The current value of C<$,> (if any) is printed between each LIST item. The
+current value of C<$\> (if any) is printed after the entire LIST has been
+printed. Because print takes a LIST, anything in the LIST is evaluated in
+list context, including any subroutines whose return lists you pass to
+C<print>. Be careful not to follow the print keyword with a left
+parenthesis unless you want the corresponding right parenthesis to
+terminate the arguments to the print; put parentheses around all arguments
+(or interpose a C<+>, but that doesn't look as good).
+
+If you're storing handles in an array or hash, or in general whenever
+you're using any expression more complex than a bareword handle or a plain,
+unsubscripted scalar variable to retrieve it, you will have to use a block
+returning the filehandle value instead, in which case the LIST may not be
+omitted:
+
+ print { $files[$i] } "stuff\n";
+ print { $OK ? STDOUT : STDERR } "stuff\n";
+
+Printing to a closed pipe or socket will generate a SIGPIPE signal. See
+L<perlipc> for more on signal handling.
+
+=item printf FILEHANDLE FORMAT, LIST
+X<printf>
+
+=item printf FILEHANDLE
+
+=item printf FORMAT, LIST
+
+=item printf
+
+Equivalent to C<print FILEHANDLE sprintf(FORMAT, LIST)>, except that C<$\>
+(the output record separator) is not appended. The first argument of the
+list will be interpreted as the C<printf> format. See
+L<sprintf|/sprintf FORMAT, LIST> for an
+explanation of the format argument. If you omit the LIST, C<$_> is used;
+to use FILEHANDLE without a LIST, you must use a real filehandle like
+C<FH>, not an indirect one like C<$fh>. If C<use locale> is in effect and
+POSIX::setlocale() has been called, the character used for the decimal
+separator in formatted floating-point numbers is affected by the LC_NUMERIC
+locale setting. See L<perllocale> and L<POSIX>.
+
+Don't fall into the trap of using a C<printf> when a simple
+C<print> would do. The C<print> is more efficient and less
+error prone.
+
+=item prototype FUNCTION
+X<prototype>
+
+Returns the prototype of a function as a string (or C<undef> if the
+function has no prototype). FUNCTION is a reference to, or the name of,
+the function whose prototype you want to retrieve.
+
+If FUNCTION is a string starting with C<CORE::>, the rest is taken as a
+name for a Perl builtin. If the builtin is not I<overridable> (such as
+C<qw//>) or if its arguments cannot be adequately expressed by a prototype
+(such as C<system>), prototype() returns C<undef>, because the builtin
+does not really behave like a Perl function. Otherwise, the string
+describing the equivalent prototype is returned.
+
+=item push ARRAY,LIST
+X<push> X<stack>
+
+=item push EXPR,LIST
+
+Treats ARRAY as a stack by appending the values of LIST to the end of
+ARRAY. The length of ARRAY increases by the length of LIST. Has the same
+effect as
+
+ for $value (LIST) {
+ $ARRAY[++$#ARRAY] = $value;
+ }
+
+but is more efficient. Returns the number of elements in the array following
+the completed C<push>.
+
+Starting with Perl 5.14, C<push> can take a scalar EXPR, which must hold a
+reference to an unblessed array. The argument will be dereferenced
+automatically. This aspect of C<push> is considered highly experimental.
+The exact behaviour may change in a future version of Perl.
+
+=item q/STRING/
+
+=item qq/STRING/
+
+=item qx/STRING/
+
+=item qw/STRING/
+
+Generalized quotes. See L<perlop/"Quote-Like Operators">.
+
+=item qr/STRING/
+
+Regexp-like quote. See L<perlop/"Regexp Quote-Like Operators">.
+
+=item quotemeta EXPR
+X<quotemeta> X<metacharacter>
+
+=item quotemeta
+
+Returns the value of EXPR with all non-"word"
+characters backslashed. (That is, all characters not matching
+C</[A-Za-z_0-9]/> will be preceded by a backslash in the
+returned string, regardless of any locale settings.)
+This is the internal function implementing
+the C<\Q> escape in double-quoted strings.
+
+If EXPR is omitted, uses C<$_>.
+
+quotemeta (and C<\Q> ... C<\E>) are useful when interpolating strings into
+regular expressions, because by default an interpolated variable will be
+considered a mini-regular expression. For example:
+
+ my $sentence = 'The quick brown fox jumped over the lazy dog';
+ my $substring = 'quick.*?fox';
+ $sentence =~ s{$substring}{big bad wolf};
+
+Will cause C<$sentence> to become C<'The big bad wolf jumped over...'>.
+
+On the other hand:
+
+ my $sentence = 'The quick brown fox jumped over the lazy dog';
+ my $substring = 'quick.*?fox';
+ $sentence =~ s{\Q$substring\E}{big bad wolf};
+
+Or:
+
+ my $sentence = 'The quick brown fox jumped over the lazy dog';
+ my $substring = 'quick.*?fox';
+ my $quoted_substring = quotemeta($substring);
+ $sentence =~ s{$quoted_substring}{big bad wolf};
+
+Will both leave the sentence as is. Normally, when accepting literal string
+input from the user, quotemeta() or C<\Q> must be used.
+
+In Perl 5.14, all characters whose code points are above 127 are not
+quoted in UTF8-encoded strings, but all are quoted in UTF-8 strings.
+It is planned to change this behavior in 5.16, but the exact rules
+haven't been determined yet.
+
+=item rand EXPR
+X<rand> X<random>
+
+=item rand
+
+Returns a random fractional number greater than or equal to C<0> and less
+than the value of EXPR. (EXPR should be positive.) If EXPR is
+omitted, the value C<1> is used. Currently EXPR with the value C<0> is
+also special-cased as C<1> (this was undocumented before Perl 5.8.0
+and is subject to change in future versions of Perl). Automatically calls
+C<srand> unless C<srand> has already been called. See also C<srand>.
+
+Apply C<int()> to the value returned by C<rand()> if you want random
+integers instead of random fractional numbers. For example,
+
+ int(rand(10))
+
+returns a random integer between C<0> and C<9>, inclusive.
+
+(Note: If your rand function consistently returns numbers that are too
+large or too small, then your version of Perl was probably compiled
+with the wrong number of RANDBITS.)
+
+B<C<rand()> is not cryptographically secure. You should not rely
+on it in security-sensitive situations.> As of this writing, a
+number of third-party CPAN modules offer random number generators
+intended by their authors to be cryptographically secure,
+including: L<Data::Entropy>, L<Crypt::Random>, L<Math::Random::Secure>,
+and L<Math::TrulyRandom>.
+
+=item read FILEHANDLE,SCALAR,LENGTH,OFFSET
+X<read> X<file, read>
+
+=item read FILEHANDLE,SCALAR,LENGTH
+
+Attempts to read LENGTH I<characters> of data into variable SCALAR
+from the specified FILEHANDLE. Returns the number of characters
+actually read, C<0> at end of file, or undef if there was an error (in
+the latter case C<$!> is also set). SCALAR will be grown or shrunk
+so that the last character actually read is the last character of the
+scalar after the read.
+
+An OFFSET may be specified to place the read data at some place in the
+string other than the beginning. A negative OFFSET specifies
+placement at that many characters counting backwards from the end of
+the string. A positive OFFSET greater than the length of SCALAR
+results in the string being padded to the required size with C<"\0">
+bytes before the result of the read is appended.
+
+The call is implemented in terms of either Perl's or your system's native
+fread(3) library function. To get a true read(2) system call, see
+L<sysread|/sysread FILEHANDLE,SCALAR,LENGTH,OFFSET>.
+
+Note the I<characters>: depending on the status of the filehandle,
+either (8-bit) bytes or characters are read. By default, all
+filehandles operate on bytes, but for example if the filehandle has
+been opened with the C<:utf8> I/O layer (see L</open>, and the C<open>
+pragma, L<open>), the I/O will operate on UTF8-encoded Unicode
+characters, not bytes. Similarly for the C<:encoding> pragma:
+in that case pretty much any characters can be read.
+
+=item readdir DIRHANDLE
+X<readdir>
+
+Returns the next directory entry for a directory opened by C<opendir>.
+If used in list context, returns all the rest of the entries in the
+directory. If there are no more entries, returns the undefined value in
+scalar context and the empty list in list context.
+
+If you're planning to filetest the return values out of a C<readdir>, you'd
+better prepend the directory in question. Otherwise, because we didn't
+C<chdir> there, it would have been testing the wrong file.
+
+ opendir(my $dh, $some_dir) || die "can't opendir $some_dir: $!";
+ @dots = grep { /^\./ && -f "$some_dir/$_" } readdir($dh);
+ closedir $dh;
+
+As of Perl 5.11.2 you can use a bare C<readdir> in a C<while> loop,
+which will set C<$_> on every iteration.
+
+ opendir(my $dh, $some_dir) || die;
+ while(readdir $dh) {
+ print "$some_dir/$_\n";
+ }
+ closedir $dh;
+
+=item readline EXPR
+
+=item readline
+X<readline> X<gets> X<fgets>
+
+Reads from the filehandle whose typeglob is contained in EXPR (or from
+C<*ARGV> if EXPR is not provided). In scalar context, each call reads and
+returns the next line until end-of-file is reached, whereupon the
+subsequent call returns C<undef>. In list context, reads until end-of-file
+is reached and returns a list of lines. Note that the notion of "line"
+used here is whatever you may have defined with C<$/> or
+C<$INPUT_RECORD_SEPARATOR>). See L<perlvar/"$/">.
+
+When C<$/> is set to C<undef>, when C<readline> is in scalar
+context (i.e., file slurp mode), and when an empty file is read, it
+returns C<''> the first time, followed by C<undef> subsequently.
+
+This is the internal function implementing the C<< <EXPR> >>
+operator, but you can use it directly. The C<< <EXPR> >>
+operator is discussed in more detail in L<perlop/"I/O Operators">.
+
+ $line = <STDIN>;
+ $line = readline(*STDIN); # same thing
+
+If C<readline> encounters an operating system error, C<$!> will be set
+with the corresponding error message. It can be helpful to check
+C<$!> when you are reading from filehandles you don't trust, such as a
+tty or a socket. The following example uses the operator form of
+C<readline> and dies if the result is not defined.
+
+ while ( ! eof($fh) ) {
+ defined( $_ = <$fh> ) or die "readline failed: $!";
+ ...
+ }
+
+Note that you have can't handle C<readline> errors that way with the
+C<ARGV> filehandle. In that case, you have to open each element of
+C<@ARGV> yourself since C<eof> handles C<ARGV> differently.
+
+ foreach my $arg (@ARGV) {
+ open(my $fh, $arg) or warn "Can't open $arg: $!";
+
+ while ( ! eof($fh) ) {
+ defined( $_ = <$fh> )
+ or die "readline failed for $arg: $!";
+ ...
+ }
+ }
+
+=item readlink EXPR
+X<readlink>
+
+=item readlink
+
+Returns the value of a symbolic link, if symbolic links are
+implemented. If not, raises an exception. If there is a system
+error, returns the undefined value and sets C<$!> (errno). If EXPR is
+omitted, uses C<$_>.
+
+Portability issues: L<perlport/readlink>.
+
+=item readpipe EXPR
+
+=item readpipe
+X<readpipe>
+
+EXPR is executed as a system command.
+The collected standard output of the command is returned.
+In scalar context, it comes back as a single (potentially
+multi-line) string. In list context, returns a list of lines
+(however you've defined lines with C<$/> or C<$INPUT_RECORD_SEPARATOR>).
+This is the internal function implementing the C<qx/EXPR/>
+operator, but you can use it directly. The C<qx/EXPR/>
+operator is discussed in more detail in L<perlop/"I/O Operators">.
+If EXPR is omitted, uses C<$_>.
+
+=item recv SOCKET,SCALAR,LENGTH,FLAGS
+X<recv>
+
+Receives a message on a socket. Attempts to receive LENGTH characters
+of data into variable SCALAR from the specified SOCKET filehandle.
+SCALAR will be grown or shrunk to the length actually read. Takes the
+same flags as the system call of the same name. Returns the address
+of the sender if SOCKET's protocol supports this; returns an empty
+string otherwise. If there's an error, returns the undefined value.
+This call is actually implemented in terms of recvfrom(2) system call.
+See L<perlipc/"UDP: Message Passing"> for examples.
+
+Note the I<characters>: depending on the status of the socket, either
+(8-bit) bytes or characters are received. By default all sockets
+operate on bytes, but for example if the socket has been changed using
+binmode() to operate with the C<:encoding(utf8)> I/O layer (see the
+C<open> pragma, L<open>), the I/O will operate on UTF8-encoded Unicode
+characters, not bytes. Similarly for the C<:encoding> pragma: in that
+case pretty much any characters can be read.
+
+=item redo LABEL
+X<redo>
+
+=item redo
+
+The C<redo> command restarts the loop block without evaluating the
+conditional again. The C<continue> block, if any, is not executed. If
+the LABEL is omitted, the command refers to the innermost enclosing
+loop. Programs that want to lie to themselves about what was just input
+normally use this command:
+
+ # a simpleminded Pascal comment stripper
+ # (warning: assumes no { or } in strings)
+ LINE: while (<STDIN>) {
+ while (s|({.*}.*){.*}|$1 |) {}
+ s|{.*}| |;
+ if (s|{.*| |) {
+ $front = $_;
+ while (<STDIN>) {
+ if (/}/) { # end of comment?
+ s|^|$front\{|;
+ redo LINE;
+ }
+ }
+ }
+ print;
+ }
+
+C<redo> cannot be used to retry a block that returns a value such as
+C<eval {}>, C<sub {}>, or C<do {}>, and should not be used to exit
+a grep() or map() operation.
+
+Note that a block by itself is semantically identical to a loop
+that executes once. Thus C<redo> inside such a block will effectively
+turn it into a looping construct.
+
+See also L</continue> for an illustration of how C<last>, C<next>, and
+C<redo> work.
+
+=item ref EXPR
+X<ref> X<reference>
+
+=item ref
+
+Returns a non-empty string if EXPR is a reference, the empty
+string otherwise. If EXPR
+is not specified, C<$_> will be used. The value returned depends on the
+type of thing the reference is a reference to.
+Builtin types include:
+
+ SCALAR
+ ARRAY
+ HASH
+ CODE
+ REF
+ GLOB
+ LVALUE
+ FORMAT
+ IO
+ VSTRING
+ Regexp
+
+If the referenced object has been blessed into a package, then that package
+name is returned instead. You can think of C<ref> as a C<typeof> operator.
+
+ if (ref($r) eq "HASH") {
+ print "r is a reference to a hash.\n";
+ }
+ unless (ref($r)) {
+ print "r is not a reference at all.\n";
+ }
+
+The return value C<LVALUE> indicates a reference to an lvalue that is not
+a variable. You get this from taking the reference of function calls like
+C<pos()> or C<substr()>. C<VSTRING> is returned if the reference points
+to a L<version string|perldata/"Version Strings">.
+
+The result C<Regexp> indicates that the argument is a regular expression
+resulting from C<qr//>.
+
+See also L<perlref>.
+
+=item rename OLDNAME,NEWNAME
+X<rename> X<move> X<mv> X<ren>
+
+Changes the name of a file; an existing file NEWNAME will be
+clobbered. Returns true for success, false otherwise.
+
+Behavior of this function varies wildly depending on your system
+implementation. For example, it will usually not work across file system
+boundaries, even though the system I<mv> command sometimes compensates
+for this. Other restrictions include whether it works on directories,
+open files, or pre-existing files. Check L<perlport> and either the
+rename(2) manpage or equivalent system documentation for details.
+
+For a platform independent C<move> function look at the L<File::Copy>
+module.
+
+Portability issues: L<perlport/rename>.
+
+=item require VERSION
+X<require>
+
+=item require EXPR
+
+=item require
+
+Demands a version of Perl specified by VERSION, or demands some semantics
+specified by EXPR or by C<$_> if EXPR is not supplied.
+
+VERSION may be either a numeric argument such as 5.006, which will be
+compared to C<$]>, or a literal of the form v5.6.1, which will be compared
+to C<$^V> (aka $PERL_VERSION). An exception is raised if
+VERSION is greater than the version of the current Perl interpreter.
+Compare with L</use>, which can do a similar check at compile time.
+
+Specifying VERSION as a literal of the form v5.6.1 should generally be
+avoided, because it leads to misleading error messages under earlier
+versions of Perl that do not support this syntax. The equivalent numeric
+version should be used instead.
+
+ require v5.6.1; # run time version check
+ require 5.6.1; # ditto
+ require 5.006_001; # ditto; preferred for backwards compatibility
+
+Otherwise, C<require> demands that a library file be included if it
+hasn't already been included. The file is included via the do-FILE
+mechanism, which is essentially just a variety of C<eval> with the
+caveat that lexical variables in the invoking script will be invisible
+to the included code. Has semantics similar to the following subroutine:
+
+ sub require {
+ my ($filename) = @_;
+ if (exists $INC{$filename}) {
+ return 1 if $INC{$filename};
+ die "Compilation failed in require";
+ }
+ my ($realfilename,$result);
+ ITER: {
+ foreach $prefix (@INC) {
+ $realfilename = "$prefix/$filename";
+ if (-f $realfilename) {
+ $INC{$filename} = $realfilename;
+ $result = do $realfilename;
+ last ITER;
+ }
+ }
+ die "Can't find $filename in \@INC";
+ }
+ if ($@) {
+ $INC{$filename} = undef;
+ die $@;
+ } elsif (!$result) {
+ delete $INC{$filename};
+ die "$filename did not return true value";
+ } else {
+ return $result;
+ }
+ }
+
+Note that the file will not be included twice under the same specified
+name.
+
+The file must return true as the last statement to indicate
+successful execution of any initialization code, so it's customary to
+end such a file with C<1;> unless you're sure it'll return true
+otherwise. But it's better just to put the C<1;>, in case you add more
+statements.
+
+If EXPR is a bareword, the require assumes a "F<.pm>" extension and
+replaces "F<::>" with "F</>" in the filename for you,
+to make it easy to load standard modules. This form of loading of
+modules does not risk altering your namespace.
+
+In other words, if you try this:
+
+ require Foo::Bar; # a splendid bareword
+
+The require function will actually look for the "F<Foo/Bar.pm>" file in the
+directories specified in the C<@INC> array.
+
+But if you try this:
+
+ $class = 'Foo::Bar';
+ require $class; # $class is not a bareword
+ #or
+ require "Foo::Bar"; # not a bareword because of the ""
+
+The require function will look for the "F<Foo::Bar>" file in the @INC array and
+will complain about not finding "F<Foo::Bar>" there. In this case you can do:
+
+ eval "require $class";
+
+Now that you understand how C<require> looks for files with a
+bareword argument, there is a little extra functionality going on behind
+the scenes. Before C<require> looks for a "F<.pm>" extension, it will
+first look for a similar filename with a "F<.pmc>" extension. If this file
+is found, it will be loaded in place of any file ending in a "F<.pm>"
+extension.
+
+You can also insert hooks into the import facility by putting Perl code
+directly into the @INC array. There are three forms of hooks: subroutine
+references, array references, and blessed objects.
+
+Subroutine references are the simplest case. When the inclusion system
+walks through @INC and encounters a subroutine, this subroutine gets
+called with two parameters, the first a reference to itself, and the
+second the name of the file to be included (e.g., "F<Foo/Bar.pm>"). The
+subroutine should return either nothing or else a list of up to three
+values in the following order:
+
+=over
+
+=item 1
+
+A filehandle, from which the file will be read.
+
+=item 2
+
+A reference to a subroutine. If there is no filehandle (previous item),
+then this subroutine is expected to generate one line of source code per
+call, writing the line into C<$_> and returning 1, then finally at end of
+file returning 0. If there is a filehandle, then the subroutine will be
+called to act as a simple source filter, with the line as read in C<$_>.
+Again, return 1 for each valid line, and 0 after all lines have been
+returned.
+
+=item 3
+
+Optional state for the subroutine. The state is passed in as C<$_[1]>. A
+reference to the subroutine itself is passed in as C<$_[0]>.
+
+=back
+
+If an empty list, C<undef>, or nothing that matches the first 3 values above
+is returned, then C<require> looks at the remaining elements of @INC.
+Note that this filehandle must be a real filehandle (strictly a typeglob
+or reference to a typeglob, whether blessed or unblessed); tied filehandles
+will be ignored and processing will stop there.
+
+If the hook is an array reference, its first element must be a subroutine
+reference. This subroutine is called as above, but the first parameter is
+the array reference. This lets you indirectly pass arguments to
+the subroutine.
+
+In other words, you can write:
+
+ push @INC, \&my_sub;
+ sub my_sub {
+ my ($coderef, $filename) = @_; # $coderef is \&my_sub
+ ...
+ }
+
+or:
+
+ push @INC, [ \&my_sub, $x, $y, ... ];
+ sub my_sub {
+ my ($arrayref, $filename) = @_;
+ # Retrieve $x, $y, ...
+ my @parameters = @$arrayref[1..$#$arrayref];
+ ...
+ }
+
+If the hook is an object, it must provide an INC method that will be
+called as above, the first parameter being the object itself. (Note that
+you must fully qualify the sub's name, as unqualified C<INC> is always forced
+into package C<main>.) Here is a typical code layout:
+
+ # In Foo.pm
+ package Foo;
+ sub new { ... }
+ sub Foo::INC {
+ my ($self, $filename) = @_;
+ ...
+ }
+
+ # In the main program
+ push @INC, Foo->new(...);
+
+These hooks are also permitted to set the %INC entry
+corresponding to the files they have loaded. See L<perlvar/%INC>.
+
+For a yet-more-powerful import facility, see L</use> and L<perlmod>.
+
+=item reset EXPR
+X<reset>
+
+=item reset
+
+Generally used in a C<continue> block at the end of a loop to clear
+variables and reset C<??> searches so that they work again. The
+expression is interpreted as a list of single characters (hyphens
+allowed for ranges). All variables and arrays beginning with one of
+those letters are reset to their pristine state. If the expression is
+omitted, one-match searches (C<?pattern?>) are reset to match again.
+Only resets variables or searches in the current package. Always returns
+1. Examples:
+
+ reset 'X'; # reset all X variables
+ reset 'a-z'; # reset lower case variables
+ reset; # just reset ?one-time? searches
+
+Resetting C<"A-Z"> is not recommended because you'll wipe out your
+C<@ARGV> and C<@INC> arrays and your C<%ENV> hash. Resets only package
+variables; lexical variables are unaffected, but they clean themselves
+up on scope exit anyway, so you'll probably want to use them instead.
+See L</my>.
+
+=item return EXPR
+X<return>
+
+=item return
+
+Returns from a subroutine, C<eval>, or C<do FILE> with the value
+given in EXPR. Evaluation of EXPR may be in list, scalar, or void
+context, depending on how the return value will be used, and the context
+may vary from one execution to the next (see L</wantarray>). If no EXPR
+is given, returns an empty list in list context, the undefined value in
+scalar context, and (of course) nothing at all in void context.
+
+(In the absence of an explicit C<return>, a subroutine, eval,
+or do FILE automatically returns the value of the last expression
+evaluated.)
+
+=item reverse LIST
+X<reverse> X<rev> X<invert>
+
+In list context, returns a list value consisting of the elements
+of LIST in the opposite order. In scalar context, concatenates the
+elements of LIST and returns a string value with all characters
+in the opposite order.
+
+ print join(", ", reverse "world", "Hello"); # Hello, world
+
+ print scalar reverse "dlrow ,", "olleH"; # Hello, world
+
+Used without arguments in scalar context, reverse() reverses C<$_>.
+
+ $_ = "dlrow ,olleH";
+ print reverse; # No output, list context
+ print scalar reverse; # Hello, world
+
+Note that reversing an array to itself (as in C<@a = reverse @a>) will
+preserve non-existent elements whenever possible, i.e., for non magical
+arrays or tied arrays with C<EXISTS> and C<DELETE> methods.
+
+This operator is also handy for inverting a hash, although there are some
+caveats. If a value is duplicated in the original hash, only one of those
+can be represented as a key in the inverted hash. Also, this has to
+unwind one hash and build a whole new one, which may take some time
+on a large hash, such as from a DBM file.
+
+ %by_name = reverse %by_address; # Invert the hash
+
+=item rewinddir DIRHANDLE
+X<rewinddir>
+
+Sets the current position to the beginning of the directory for the
+C<readdir> routine on DIRHANDLE.
+
+Portability issues: L<perlport/rewinddir>.
+
+=item rindex STR,SUBSTR,POSITION
+X<rindex>
+
+=item rindex STR,SUBSTR
+
+Works just like index() except that it returns the position of the I<last>
+occurrence of SUBSTR in STR. If POSITION is specified, returns the
+last occurrence beginning at or before that position.
+
+=item rmdir FILENAME
+X<rmdir> X<rd> X<directory, remove>
+
+=item rmdir
+
+Deletes the directory specified by FILENAME if that directory is
+empty. If it succeeds it returns true; otherwise it returns false and
+sets C<$!> (errno). If FILENAME is omitted, uses C<$_>.
+
+To remove a directory tree recursively (C<rm -rf> on Unix) look at
+the C<rmtree> function of the L<File::Path> module.
+
+=item s///
+
+The substitution operator. See L<perlop/"Regexp Quote-Like Operators">.
+
+=item say FILEHANDLE LIST
+X<say>
+
+=item say FILEHANDLE
+
+=item say LIST
+
+=item say
+
+Just like C<print>, but implicitly appends a newline. C<say LIST> is
+simply an abbreviation for C<{ local $\ = "\n"; print LIST }>. To use
+FILEHANDLE without a LIST to print the contents of C<$_> to it, you must
+use a real filehandle like C<FH>, not an indirect one like C<$fh>.
+
+This keyword is available only when the C<"say"> feature
+is enabled, or when prefixed with C<CORE::>; see
+L<feature>. Alternately, include a C<use v5.10> or later to the current
+scope.
+
+=item scalar EXPR
+X<scalar> X<context>
+
+Forces EXPR to be interpreted in scalar context and returns the value
+of EXPR.
+
+ @counts = ( scalar @a, scalar @b, scalar @c );
+
+There is no equivalent operator to force an expression to
+be interpolated in list context because in practice, this is never
+needed. If you really wanted to do so, however, you could use
+the construction C<@{[ (some expression) ]}>, but usually a simple
+C<(some expression)> suffices.
+
+Because C<scalar> is a unary operator, if you accidentally use a
+parenthesized list for the EXPR, this behaves as a scalar comma expression,
+evaluating all but the last element in void context and returning the final
+element evaluated in scalar context. This is seldom what you want.
+
+The following single statement:
+
+ print uc(scalar(&foo,$bar)),$baz;
+
+is the moral equivalent of these two:
+
+ &foo;
+ print(uc($bar),$baz);
+
+See L<perlop> for more details on unary operators and the comma operator.
+
+=item seek FILEHANDLE,POSITION,WHENCE
+X<seek> X<fseek> X<filehandle, position>
+
+Sets FILEHANDLE's position, just like the C<fseek> call of C<stdio>.
+FILEHANDLE may be an expression whose value gives the name of the
+filehandle. The values for WHENCE are C<0> to set the new position
+I<in bytes> to POSITION; C<1> to set it to the current position plus
+POSITION; and C<2> to set it to EOF plus POSITION, typically
+negative. For WHENCE you may use the constants C<SEEK_SET>,
+C<SEEK_CUR>, and C<SEEK_END> (start of the file, current position, end
+of the file) from the L<Fcntl> module. Returns C<1> on success, false
+otherwise.
+
+Note the I<in bytes>: even if the filehandle has been set to
+operate on characters (for example by using the C<:encoding(utf8)> open
+layer), tell() will return byte offsets, not character offsets
+(because implementing that would render seek() and tell() rather slow).
+
+If you want to position the file for C<sysread> or C<syswrite>, don't use
+C<seek>, because buffering makes its effect on the file's read-write position
+unpredictable and non-portable. Use C<sysseek> instead.
+
+Due to the rules and rigors of ANSI C, on some systems you have to do a
+seek whenever you switch between reading and writing. Amongst other
+things, this may have the effect of calling stdio's clearerr(3).
+A WHENCE of C<1> (C<SEEK_CUR>) is useful for not moving the file position:
+
+ seek(TEST,0,1);
+
+This is also useful for applications emulating C<tail -f>. Once you hit
+EOF on your read and then sleep for a while, you (probably) have to stick in a
+dummy seek() to reset things. The C<seek> doesn't change the position,
+but it I<does> clear the end-of-file condition on the handle, so that the
+next C<< <FILE> >> makes Perl try again to read something. (We hope.)
+
+If that doesn't work (some I/O implementations are particularly
+cantankerous), you might need something like this:
+
+ for (;;) {
+ for ($curpos = tell(FILE); $_ = <FILE>;
+ $curpos = tell(FILE)) {
+ # search for some stuff and put it into files
+ }
+ sleep($for_a_while);
+ seek(FILE, $curpos, 0);
+ }
+
+=item seekdir DIRHANDLE,POS
+X<seekdir>
+
+Sets the current position for the C<readdir> routine on DIRHANDLE. POS
+must be a value returned by C<telldir>. C<seekdir> also has the same caveats
+about possible directory compaction as the corresponding system library
+routine.
+
+=item select FILEHANDLE
+X<select> X<filehandle, default>
+
+=item select
+
+Returns the currently selected filehandle. If FILEHANDLE is supplied,
+sets the new current default filehandle for output. This has two
+effects: first, a C<write> or a C<print> without a filehandle
+default to this FILEHANDLE. Second, references to variables related to
+output will refer to this output channel.
+
+For example, to set the top-of-form format for more than one
+output channel, you might do the following:
+
+ select(REPORT1);
+ $^ = 'report1_top';
+ select(REPORT2);
+ $^ = 'report2_top';
+
+FILEHANDLE may be an expression whose value gives the name of the
+actual filehandle. Thus:
+
+ $oldfh = select(STDERR); $| = 1; select($oldfh);
+
+Some programmers may prefer to think of filehandles as objects with
+methods, preferring to write the last example as:
+
+ use IO::Handle;
+ STDERR->autoflush(1);
+
+Portability issues: L<perlport/select>.
+
+=item select RBITS,WBITS,EBITS,TIMEOUT
+X<select>
+
+This calls the select(2) syscall with the bit masks specified, which
+can be constructed using C<fileno> and C<vec>, along these lines:
+
+ $rin = $win = $ein = '';
+ vec($rin, fileno(STDIN), 1) = 1;
+ vec($win, fileno(STDOUT), 1) = 1;
+ $ein = $rin | $win;
+
+If you want to select on many filehandles, you may wish to write a
+subroutine like this:
+
+ sub fhbits {
+ my @fhlist = @_;
+ my $bits = "";
+ for my $fh (@fhlist) {
+ vec($bits, fileno($fh), 1) = 1;
+ }
+ return $bits;
+ }
+ $rin = fhbits(*STDIN, *TTY, *MYSOCK);
+
+The usual idiom is:
+
+ ($nfound,$timeleft) =
+ select($rout=$rin, $wout=$win, $eout=$ein, $timeout);
+
+or to block until something becomes ready just do this
+
+ $nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);
+
+Most systems do not bother to return anything useful in $timeleft, so
+calling select() in scalar context just returns $nfound.
+
+Any of the bit masks can also be undef. The timeout, if specified, is
+in seconds, which may be fractional. Note: not all implementations are
+capable of returning the $timeleft. If not, they always return
+$timeleft equal to the supplied $timeout.
+
+You can effect a sleep of 250 milliseconds this way:
+
+ select(undef, undef, undef, 0.25);
+
+Note that whether C<select> gets restarted after signals (say, SIGALRM)
+is implementation-dependent. See also L<perlport> for notes on the
+portability of C<select>.
+
+On error, C<select> behaves just like select(2): it returns
+-1 and sets C<$!>.
+
+On some Unixes, select(2) may report a socket file descriptor as "ready for
+reading" even when no data is available, and thus any subsequent C<read>
+would block. This can be avoided if you always use O_NONBLOCK on the
+socket. See select(2) and fcntl(2) for further details.
+
+The standard C<IO::Select> module provides a user-friendlier interface
+to C<select>, mostly because it does all the bit-mask work for you.
+
+B<WARNING>: One should not attempt to mix buffered I/O (like C<read>
+or <FH>) with C<select>, except as permitted by POSIX, and even
+then only on POSIX systems. You have to use C<sysread> instead.
+
+Portability issues: L<perlport/select>.
+
+=item semctl ID,SEMNUM,CMD,ARG
+X<semctl>
+
+Calls the System V IPC function semctl(2). You'll probably have to say
+
+ use IPC::SysV;
+
+first to get the correct constant definitions. If CMD is IPC_STAT or
+GETALL, then ARG must be a variable that will hold the returned
+semid_ds structure or semaphore value array. Returns like C<ioctl>:
+the undefined value for error, "C<0 but true>" for zero, or the actual
+return value otherwise. The ARG must consist of a vector of native
+short integers, which may be created with C<pack("s!",(0)x$nsem)>.
+See also L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::Semaphore>
+documentation.
+
+Portability issues: L<perlport/semctl>.
+
+=item semget KEY,NSEMS,FLAGS
+X<semget>
+
+Calls the System V IPC function semget(2). Returns the semaphore id, or
+the undefined value on error. See also
+L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::SysV::Semaphore>
+documentation.
+
+Portability issues: L<perlport/semget>.
+
+=item semop KEY,OPSTRING
+X<semop>
+
+Calls the System V IPC function semop(2) for semaphore operations
+such as signalling and waiting. OPSTRING must be a packed array of
+semop structures. Each semop structure can be generated with
+C<pack("s!3", $semnum, $semop, $semflag)>. The length of OPSTRING
+implies the number of semaphore operations. Returns true if
+successful, false on error. As an example, the
+following code waits on semaphore $semnum of semaphore id $semid:
+
+ $semop = pack("s!3", $semnum, -1, 0);
+ die "Semaphore trouble: $!\n" unless semop($semid, $semop);
+
+To signal the semaphore, replace C<-1> with C<1>. See also
+L<perlipc/"SysV IPC">, C<IPC::SysV>, and C<IPC::SysV::Semaphore>
+documentation.
+
+Portability issues: L<perlport/semop>.
+
+=item send SOCKET,MSG,FLAGS,TO
+X<send>
+
+=item send SOCKET,MSG,FLAGS
+
+Sends a message on a socket. Attempts to send the scalar MSG to the SOCKET
+filehandle. Takes the same flags as the system call of the same name. On
+unconnected sockets, you must specify a destination to I<send to>, in which
+case it does a sendto(2) syscall. Returns the number of characters sent,
+or the undefined value on error. The sendmsg(2) syscall is currently
+unimplemented. See L<perlipc/"UDP: Message Passing"> for examples.
+
+Note the I<characters>: depending on the status of the socket, either
+(8-bit) bytes or characters are sent. By default all sockets operate
+on bytes, but for example if the socket has been changed using
+binmode() to operate with the C<:encoding(utf8)> I/O layer (see
+L</open>, or the C<open> pragma, L<open>), the I/O will operate on UTF-8
+encoded Unicode characters, not bytes. Similarly for the C<:encoding>
+pragma: in that case pretty much any characters can be sent.
+
+=item setpgrp PID,PGRP
+X<setpgrp> X<group>
+
+Sets the current process group for the specified PID, C<0> for the current
+process. Raises an exception when used on a machine that doesn't
+implement POSIX setpgid(2) or BSD setpgrp(2). If the arguments are omitted,
+it defaults to C<0,0>. Note that the BSD 4.2 version of C<setpgrp> does not
+accept any arguments, so only C<setpgrp(0,0)> is portable. See also
+C<POSIX::setsid()>.
+
+Portability issues: L<perlport/setpgrp>.
+
+=item setpriority WHICH,WHO,PRIORITY
+X<setpriority> X<priority> X<nice> X<renice>
+
+Sets the current priority for a process, a process group, or a user.
+(See setpriority(2).) Raises an exception when used on a machine
+that doesn't implement setpriority(2).
+
+Portability issues: L<perlport/setpriority>.
+
+=item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
+X<setsockopt>
+
+Sets the socket option requested. Returns C<undef> on error.
+Use integer constants provided by the C<Socket> module for
+LEVEL and OPNAME. Values for LEVEL can also be obtained from
+getprotobyname. OPTVAL might either be a packed string or an integer.
+An integer OPTVAL is shorthand for pack("i", OPTVAL).
+
+An example disabling Nagle's algorithm on a socket:
+
+ use Socket qw(IPPROTO_TCP TCP_NODELAY);
+ setsockopt($socket, IPPROTO_TCP, TCP_NODELAY, 1);
+
+Portability issues: L<perlport/setsockopt>.
+
+=item shift ARRAY
+X<shift>
+
+=item shift EXPR
+
+=item shift
+
+Shifts the first value of the array off and returns it, shortening the
+array by 1 and moving everything down. If there are no elements in the
+array, returns the undefined value. If ARRAY is omitted, shifts the
+C<@_> array within the lexical scope of subroutines and formats, and the
+C<@ARGV> array outside a subroutine and also within the lexical scopes
+established by the C<eval STRING>, C<BEGIN {}>, C<INIT {}>, C<CHECK {}>,
+C<UNITCHECK {}>, and C<END {}> constructs.
+
+Starting with Perl 5.14, C<shift> can take a scalar EXPR, which must hold a
+reference to an unblessed array. The argument will be dereferenced
+automatically. This aspect of C<shift> is considered highly experimental.
+The exact behaviour may change in a future version of Perl.
+
+See also C<unshift>, C<push>, and C<pop>. C<shift> and C<unshift> do the
+same thing to the left end of an array that C<pop> and C<push> do to the
+right end.
+
+=item shmctl ID,CMD,ARG
+X<shmctl>
+
+Calls the System V IPC function shmctl. You'll probably have to say
+
+ use IPC::SysV;
+
+first to get the correct constant definitions. If CMD is C<IPC_STAT>,
+then ARG must be a variable that will hold the returned C<shmid_ds>
+structure. Returns like ioctl: C<undef> for error; "C<0> but
+true" for zero; and the actual return value otherwise.
+See also L<perlipc/"SysV IPC"> and C<IPC::SysV> documentation.
+
+Portability issues: L<perlport/shmctl>.
+
+=item shmget KEY,SIZE,FLAGS
+X<shmget>
+
+Calls the System V IPC function shmget. Returns the shared memory
+segment id, or C<undef> on error.
+See also L<perlipc/"SysV IPC"> and C<IPC::SysV> documentation.
+
+Portability issues: L<perlport/shmget>.
+
+=item shmread ID,VAR,POS,SIZE
+X<shmread>
+X<shmwrite>
+
+=item shmwrite ID,STRING,POS,SIZE
+
+Reads or writes the System V shared memory segment ID starting at
+position POS for size SIZE by attaching to it, copying in/out, and
+detaching from it. When reading, VAR must be a variable that will
+hold the data read. When writing, if STRING is too long, only SIZE
+bytes are used; if STRING is too short, nulls are written to fill out
+SIZE bytes. Return true if successful, false on error.
+shmread() taints the variable. See also L<perlipc/"SysV IPC">,
+C<IPC::SysV>, and the C<IPC::Shareable> module from CPAN.
+
+Portability issues: L<perlport/shmread> and L<perlport/shmwrite>.
+
+=item shutdown SOCKET,HOW
+X<shutdown>
+
+Shuts down a socket connection in the manner indicated by HOW, which
+has the same interpretation as in the syscall of the same name.
+
+ shutdown(SOCKET, 0); # I/we have stopped reading data
+ shutdown(SOCKET, 1); # I/we have stopped writing data
+ shutdown(SOCKET, 2); # I/we have stopped using this socket
+
+This is useful with sockets when you want to tell the other
+side you're done writing but not done reading, or vice versa.
+It's also a more insistent form of close because it also
+disables the file descriptor in any forked copies in other
+processes.
+
+Returns C<1> for success; on error, returns C<undef> if
+the first argument is not a valid filehandle, or returns C<0> and sets
+C<$!> for any other failure.
+
+=item sin EXPR
+X<sin> X<sine> X<asin> X<arcsine>
+
+=item sin
+
+Returns the sine of EXPR (expressed in radians). If EXPR is omitted,
+returns sine of C<$_>.
+
+For the inverse sine operation, you may use the C<Math::Trig::asin>
+function, or use this relation:
+
+ sub asin { atan2($_[0], sqrt(1 - $_[0] * $_[0])) }
+
+=item sleep EXPR
+X<sleep> X<pause>
+
+=item sleep
+
+Causes the script to sleep for (integer) EXPR seconds, or forever if no
+argument is given. Returns the integer number of seconds actually slept.
+
+May be interrupted if the process receives a signal such as C<SIGALRM>.
+
+ eval {
+ local $SIG{ALARM} = sub { die "Alarm!\n" };
+ sleep;
+ };
+ die $@ unless $@ eq "Alarm!\n";
+
+You probably cannot mix C<alarm> and C<sleep> calls, because C<sleep>
+is often implemented using C<alarm>.
+
+On some older systems, it may sleep up to a full second less than what
+you requested, depending on how it counts seconds. Most modern systems
+always sleep the full amount. They may appear to sleep longer than that,
+however, because your process might not be scheduled right away in a
+busy multitasking system.
+
+For delays of finer granularity than one second, the Time::HiRes module
+(from CPAN, and starting from Perl 5.8 part of the standard
+distribution) provides usleep(). You may also use Perl's four-argument
+version of select() leaving the first three arguments undefined, or you
+might be able to use the C<syscall> interface to access setitimer(2) if
+your system supports it. See L<perlfaq8> for details.
+
+See also the POSIX module's C<pause> function.
+
+=item socket SOCKET,DOMAIN,TYPE,PROTOCOL
+X<socket>
+
+Opens a socket of the specified kind and attaches it to filehandle
+SOCKET. DOMAIN, TYPE, and PROTOCOL are specified the same as for
+the syscall of the same name. You should C<use Socket> first
+to get the proper definitions imported. See the examples in
+L<perlipc/"Sockets: Client/Server Communication">.
+
+On systems that support a close-on-exec flag on files, the flag will
+be set for the newly opened file descriptor, as determined by the
+value of $^F. See L<perlvar/$^F>.
+
+=item socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
+X<socketpair>
+
+Creates an unnamed pair of sockets in the specified domain, of the
+specified type. DOMAIN, TYPE, and PROTOCOL are specified the same as
+for the syscall of the same name. If unimplemented, raises an exception.
+Returns true if successful.
+
+On systems that support a close-on-exec flag on files, the flag will
+be set for the newly opened file descriptors, as determined by the value
+of $^F. See L<perlvar/$^F>.
+
+Some systems defined C<pipe> in terms of C<socketpair>, in which a call
+to C<pipe(Rdr, Wtr)> is essentially:
+
+ use Socket;
+ socketpair(Rdr, Wtr, AF_UNIX, SOCK_STREAM, PF_UNSPEC);
+ shutdown(Rdr, 1); # no more writing for reader
+ shutdown(Wtr, 0); # no more reading for writer
+
+See L<perlipc> for an example of socketpair use. Perl 5.8 and later will
+emulate socketpair using IP sockets to localhost if your system implements
+sockets but not socketpair.
+
+Portability issues: L<perlport/socketpair>.
+
+=item sort SUBNAME LIST
+X<sort> X<qsort> X<quicksort> X<mergesort>
+
+=item sort BLOCK LIST
+
+=item sort LIST
+
+In list context, this sorts the LIST and returns the sorted list value.
+In scalar context, the behaviour of C<sort()> is undefined.
+
+If SUBNAME or BLOCK is omitted, C<sort>s in standard string comparison
+order. If SUBNAME is specified, it gives the name of a subroutine
+that returns an integer less than, equal to, or greater than C<0>,
+depending on how the elements of the list are to be ordered. (The
+C<< <=> >> and C<cmp> operators are extremely useful in such routines.)
+SUBNAME may be a scalar variable name (unsubscripted), in which case
+the value provides the name of (or a reference to) the actual
+subroutine to use. In place of a SUBNAME, you can provide a BLOCK as
+an anonymous, in-line sort subroutine.
+
+If the subroutine's prototype is C<($$)>, the elements to be compared are
+passed by reference in C<@_>, as for a normal subroutine. This is slower
+than unprototyped subroutines, where the elements to be compared are passed
+into the subroutine as the package global variables $a and $b (see example
+below). Note that in the latter case, it is usually highly counter-productive
+to declare $a and $b as lexicals.
+
+If the subroutine is an XSUB, the elements to be compared are pushed on to
+the stack, the way arguments are usually passed to XSUBs. $a and $b are
+not set.
+
+The values to be compared are always passed by reference and should not
+be modified.
+
+You also cannot exit out of the sort block or subroutine using any of the
+loop control operators described in L<perlsyn> or with C<goto>.
+
+When C<use locale> is in effect, C<sort LIST> sorts LIST according to the
+current collation locale. See L<perllocale>.
+
+sort() returns aliases into the original list, much as a for loop's index
+variable aliases the list elements. That is, modifying an element of a
+list returned by sort() (for example, in a C<foreach>, C<map> or C<grep>)
+actually modifies the element in the original list. This is usually
+something to be avoided when writing clear code.
+
+Perl 5.6 and earlier used a quicksort algorithm to implement sort.
+That algorithm was not stable, so I<could> go quadratic. (A I<stable> sort
+preserves the input order of elements that compare equal. Although
+quicksort's run time is O(NlogN) when averaged over all arrays of
+length N, the time can be O(N**2), I<quadratic> behavior, for some
+inputs.) In 5.7, the quicksort implementation was replaced with
+a stable mergesort algorithm whose worst-case behavior is O(NlogN).
+But benchmarks indicated that for some inputs, on some platforms,
+the original quicksort was faster. 5.8 has a sort pragma for
+limited control of the sort. Its rather blunt control of the
+underlying algorithm may not persist into future Perls, but the
+ability to characterize the input or output in implementation
+independent ways quite probably will. See L<the sort pragma|sort>.
+
+Examples:
+
+ # sort lexically
+ @articles = sort @files;
+
+ # same thing, but with explicit sort routine
+ @articles = sort {$a cmp $b} @files;
+
+ # now case-insensitively
+ @articles = sort {uc($a) cmp uc($b)} @files;
+
+ # same thing in reversed order
+ @articles = sort {$b cmp $a} @files;
+
+ # sort numerically ascending
+ @articles = sort {$a <=> $b} @files;
+
+ # sort numerically descending
+ @articles = sort {$b <=> $a} @files;
+
+ # this sorts the %age hash by value instead of key
+ # using an in-line function
+ @eldest = sort { $age{$b} <=> $age{$a} } keys %age;
+
+ # sort using explicit subroutine name
+ sub byage {
+ $age{$a} <=> $age{$b}; # presuming numeric
+ }
+ @sortedclass = sort byage @class;
+
+ sub backwards { $b cmp $a }
+ @harry = qw(dog cat x Cain Abel);
+ @george = qw(gone chased yz Punished Axed);
+ print sort @harry;
+ # prints AbelCaincatdogx
+ print sort backwards @harry;
+ # prints xdogcatCainAbel
+ print sort @george, 'to', @harry;
+ # prints AbelAxedCainPunishedcatchaseddoggonetoxyz
+
+ # inefficiently sort by descending numeric compare using
+ # the first integer after the first = sign, or the
+ # whole record case-insensitively otherwise
+
+ my @new = sort {
+ ($b =~ /=(\d+)/)[0] <=> ($a =~ /=(\d+)/)[0]
+ ||
+ uc($a) cmp uc($b)
+ } @old;
+
+ # same thing, but much more efficiently;
+ # we'll build auxiliary indices instead
+ # for speed
+ my @nums = @caps = ();
+ for (@old) {
+ push @nums, ( /=(\d+)/ ? $1 : undef );
+ push @caps, uc($_);
+ }
+
+ my @new = @old[ sort {
+ $nums[$b] <=> $nums[$a]
+ ||
+ $caps[$a] cmp $caps[$b]
+ } 0..$#old
+ ];
+
+ # same thing, but without any temps
+ @new = map { $_->[0] }
+ sort { $b->[1] <=> $a->[1]
+ ||
+ $a->[2] cmp $b->[2]
+ } map { [$_, /=(\d+)/, uc($_)] } @old;
+
+ # using a prototype allows you to use any comparison subroutine
+ # as a sort subroutine (including other package's subroutines)
+ package other;
+ sub backwards ($$) { $_[1] cmp $_[0]; } # $a and $b are not set here
+
+ package main;
+ @new = sort other::backwards @old;
+
+ # guarantee stability, regardless of algorithm
+ use sort 'stable';
+ @new = sort { substr($a, 3, 5) cmp substr($b, 3, 5) } @old;
+
+ # force use of mergesort (not portable outside Perl 5.8)
+ use sort '_mergesort'; # note discouraging _
+ @new = sort { substr($a, 3, 5) cmp substr($b, 3, 5) } @old;
+
+Warning: syntactical care is required when sorting the list returned from
+a function. If you want to sort the list returned by the function call
+C<find_records(@key)>, you can use:
+
+ @contact = sort { $a cmp $b } find_records @key;
+ @contact = sort +find_records(@key);
+ @contact = sort &find_records(@key);
+ @contact = sort(find_records(@key));
+
+If instead you want to sort the array @key with the comparison routine
+C<find_records()> then you can use:
+
+ @contact = sort { find_records() } @key;
+ @contact = sort find_records(@key);
+ @contact = sort(find_records @key);
+ @contact = sort(find_records (@key));
+
+If you're using strict, you I<must not> declare $a
+and $b as lexicals. They are package globals. That means
+that if you're in the C<main> package and type
+
+ @articles = sort {$b <=> $a} @files;
+
+then C<$a> and C<$b> are C<$main::a> and C<$main::b> (or C<$::a> and C<$::b>),
+but if you're in the C<FooPack> package, it's the same as typing
+
+ @articles = sort {$FooPack::b <=> $FooPack::a} @files;
+
+The comparison function is required to behave. If it returns
+inconsistent results (sometimes saying C<$x[1]> is less than C<$x[2]> and
+sometimes saying the opposite, for example) the results are not
+well-defined.
+
+Because C<< <=> >> returns C<undef> when either operand is C<NaN>
+(not-a-number), be careful when sorting with a
+comparison function like C<< $a <=> $b >> any lists that might contain a
+C<NaN>. The following example takes advantage that C<NaN != NaN> to
+eliminate any C<NaN>s from the input list.
+
+ @result = sort { $a <=> $b } grep { $_ == $_ } @input;
+
+=item splice ARRAY or EXPR,OFFSET,LENGTH,LIST
+X<splice>
+
+=item splice ARRAY or EXPR,OFFSET,LENGTH
+
+=item splice ARRAY or EXPR,OFFSET
+
+=item splice ARRAY or EXPR
+
+Removes the elements designated by OFFSET and LENGTH from an array, and
+replaces them with the elements of LIST, if any. In list context,
+returns the elements removed from the array. In scalar context,
+returns the last element removed, or C<undef> if no elements are
+removed. The array grows or shrinks as necessary.
+If OFFSET is negative then it starts that far from the end of the array.
+If LENGTH is omitted, removes everything from OFFSET onward.
+If LENGTH is negative, removes the elements from OFFSET onward
+except for -LENGTH elements at the end of the array.
+If both OFFSET and LENGTH are omitted, removes everything. If OFFSET is
+past the end of the array, Perl issues a warning, and splices at the
+end of the array.
+
+The following equivalences hold (assuming C<< $#a >= $i >> )
+
+ push(@a,$x,$y) splice(@a, at a,0,$x,$y)
+ pop(@a) splice(@a,-1)
+ shift(@a) splice(@a,0,1)
+ unshift(@a,$x,$y) splice(@a,0,0,$x,$y)
+ $a[$i] = $y splice(@a,$i,1,$y)
+
+Example, assuming array lengths are passed before arrays:
+
+ sub aeq { # compare two list values
+ my(@a) = splice(@_,0,shift);
+ my(@b) = splice(@_,0,shift);
+ return 0 unless @a == @b; # same len?
+ while (@a) {
+ return 0 if pop(@a) ne pop(@b);
+ }
+ return 1;
+ }
+ if (&aeq($len, at foo[1..$len],0+ at bar, at bar)) { ... }
+
+Starting with Perl 5.14, C<splice> can take scalar EXPR, which must hold a
+reference to an unblessed array. The argument will be dereferenced
+automatically. This aspect of C<splice> is considered highly experimental.
+The exact behaviour may change in a future version of Perl.
+
+=item split /PATTERN/,EXPR,LIMIT
+X<split>
+
+=item split /PATTERN/,EXPR
+
+=item split /PATTERN/
+
+=item split
+
+Splits the string EXPR into a list of strings and returns that list. By
+default, empty leading fields are preserved, and empty trailing ones are
+deleted. (If all fields are empty, they are considered to be trailing.)
+
+In scalar context, returns the number of fields found.
+
+If EXPR is omitted, splits the C<$_> string. If PATTERN is also omitted,
+splits on whitespace (after skipping any leading whitespace). Anything
+matching PATTERN is taken to be a delimiter separating the fields. (Note
+that the delimiter may be longer than one character.)
+
+If LIMIT is specified and positive, it represents the maximum number
+of fields the EXPR will be split into, though the actual number of
+fields returned depends on the number of times PATTERN matches within
+EXPR. If LIMIT is unspecified or zero, trailing null fields are
+stripped (which potential users of C<pop> would do well to remember).
+If LIMIT is negative, it is treated as if an arbitrarily large LIMIT
+had been specified. Note that splitting an EXPR that evaluates to the
+empty string always returns the empty list, regardless of the LIMIT
+specified.
+
+A pattern matching the empty string (not to be confused with
+an empty pattern C<//>, which is just one member of the set of patterns
+matching the empty string), splits EXPR into individual
+characters. For example:
+
+ print join(':', split(/ */, 'hi there')), "\n";
+
+produces the output 'h:i:t:h:e:r:e'.
+
+As a special case for C<split>, the empty pattern C<//> specifically
+matches the empty string; this is not be confused with the normal use
+of an empty pattern to mean the last successful match. So to split
+a string into individual characters, the following:
+
+ print join(':', split(//, 'hi there')), "\n";
+
+produces the output 'h:i: :t:h:e:r:e'.
+
+Empty leading fields are produced when there are positive-width matches at
+the beginning of the string; a zero-width match at the beginning of
+the string does not produce an empty field. For example:
+
+ print join(':', split(/(?=\w)/, 'hi there!'));
+
+produces the output 'h:i :t:h:e:r:e!'. Empty trailing fields, on the other
+hand, are produced when there is a match at the end of the string (and
+when LIMIT is given and is not 0), regardless of the length of the match.
+For example:
+
+ print join(':', split(//, 'hi there!', -1)), "\n";
+ print join(':', split(/\W/, 'hi there!', -1)), "\n";
+
+produce the output 'h:i: :t:h:e:r:e:!:' and 'hi:there:', respectively,
+both with an empty trailing field.
+
+The LIMIT parameter can be used to split a line partially
+
+ ($login, $passwd, $remainder) = split(/:/, $_, 3);
+
+When assigning to a list, if LIMIT is omitted, or zero, Perl supplies
+a LIMIT one larger than the number of variables in the list, to avoid
+unnecessary work. For the list above LIMIT would have been 4 by
+default. In time critical applications it behooves you not to split
+into more fields than you really need.
+
+If the PATTERN contains parentheses, additional list elements are
+created from each matching substring in the delimiter.
+
+ split(/([,-])/, "1-10,20", 3);
+
+produces the list value
+
+ (1, '-', 10, ',', 20)
+
+If you had the entire header of a normal Unix email message in $header,
+you could split it up into fields and their values this way:
+
+ $header =~ s/\n(?=\s)//g; # fix continuation lines
+ %hdrs = (UNIX_FROM => split /^(\S*?):\s*/m, $header);
+
+The pattern C</PATTERN/> may be replaced with an expression to specify
+patterns that vary at runtime. (To do runtime compilation only once,
+use C</$variable/o>.)
+
+As a special case, specifying a PATTERN of space (S<C<' '>>) will split on
+white space just as C<split> with no arguments does. Thus, S<C<split(' ')>> can
+be used to emulate B<awk>'s default behavior, whereas S<C<split(/ /)>>
+will give you as many initial null fields (empty string) as there are leading spaces.
+A C<split> on C</\s+/> is like a S<C<split(' ')>> except that any leading
+whitespace produces a null first field. A C<split> with no arguments
+really does a S<C<split(' ', $_)>> internally.
+
+A PATTERN of C</^/> is treated as if it were C</^/m>, since it isn't
+much use otherwise.
+
+Example:
+
+ open(PASSWD, '/etc/passwd');
+ while (<PASSWD>) {
+ chomp;
+ ($login, $passwd, $uid, $gid,
+ $gcos, $home, $shell) = split(/:/);
+ #...
+ }
+
+As with regular pattern matching, any capturing parentheses that are not
+matched in a C<split()> will be set to C<undef> when returned:
+
+ @fields = split /(A)|B/, "1A2B3";
+ # @fields is (1, 'A', 2, undef, 3)
+
+=item sprintf FORMAT, LIST
+X<sprintf>
+
+Returns a string formatted by the usual C<printf> conventions of the C
+library function C<sprintf>. See below for more details
+and see L<sprintf(3)> or L<printf(3)> on your system for an explanation of
+the general principles.
+
+For example:
+
+ # Format number with up to 8 leading zeroes
+ $result = sprintf("%08d", $number);
+
+ # Round number to 3 digits after decimal point
+ $rounded = sprintf("%.3f", $number);
+
+Perl does its own C<sprintf> formatting: it emulates the C
+function sprintf(3), but doesn't use it except for floating-point
+numbers, and even then only standard modifiers are allowed.
+Non-standard extensions in your local sprintf(3) are
+therefore unavailable from Perl.
+
+Unlike C<printf>, C<sprintf> does not do what you probably mean when you
+pass it an array as your first argument. The array is given scalar context,
+and instead of using the 0th element of the array as the format, Perl will
+use the count of elements in the array as the format, which is almost never
+useful.
+
+Perl's C<sprintf> permits the following universally-known conversions:
+
+ %% a percent sign
+ %c a character with the given number
+ %s a string
+ %d a signed integer, in decimal
+ %u an unsigned integer, in decimal
+ %o an unsigned integer, in octal
+ %x an unsigned integer, in hexadecimal
+ %e a floating-point number, in scientific notation
+ %f a floating-point number, in fixed decimal notation
+ %g a floating-point number, in %e or %f notation
+
+In addition, Perl permits the following widely-supported conversions:
+
+ %X like %x, but using upper-case letters
+ %E like %e, but using an upper-case "E"
+ %G like %g, but with an upper-case "E" (if applicable)
+ %b an unsigned integer, in binary
+ %B like %b, but using an upper-case "B" with the # flag
+ %p a pointer (outputs the Perl value's address in hexadecimal)
+ %n special: *stores* the number of characters output so far
+ into the next variable in the parameter list
+
+Finally, for backward (and we do mean "backward") compatibility, Perl
+permits these unnecessary but widely-supported conversions:
+
+ %i a synonym for %d
+ %D a synonym for %ld
+ %U a synonym for %lu
+ %O a synonym for %lo
+ %F a synonym for %f
+
+Note that the number of exponent digits in the scientific notation produced
+by C<%e>, C<%E>, C<%g> and C<%G> for numbers with the modulus of the
+exponent less than 100 is system-dependent: it may be three or less
+(zero-padded as necessary). In other words, 1.23 times ten to the
+99th may be either "1.23e99" or "1.23e099".
+
+Between the C<%> and the format letter, you may specify several
+additional attributes controlling the interpretation of the format.
+In order, these are:
+
+=over 4
+
+=item format parameter index
+
+An explicit format parameter index, such as C<2$>. By default sprintf
+will format the next unused argument in the list, but this allows you
+to take the arguments out of order:
+
+ printf '%2$d %1$d', 12, 34; # prints "34 12"
+ printf '%3$d %d %1$d', 1, 2, 3; # prints "3 1 1"
+
+=item flags
+
+one or more of:
+
+ space prefix non-negative number with a space
+ + prefix non-negative number with a plus sign
+ - left-justify within the field
+ 0 use zeros, not spaces, to right-justify
+ # ensure the leading "0" for any octal,
+ prefix non-zero hexadecimal with "0x" or "0X",
+ prefix non-zero binary with "0b" or "0B"
+
+For example:
+
+ printf '<% d>', 12; # prints "< 12>"
+ printf '<%+d>', 12; # prints "<+12>"
+ printf '<%6s>', 12; # prints "< 12>"
+ printf '<%-6s>', 12; # prints "<12 >"
+ printf '<%06s>', 12; # prints "<000012>"
+ printf '<%#o>', 12; # prints "<014>"
+ printf '<%#x>', 12; # prints "<0xc>"
+ printf '<%#X>', 12; # prints "<0XC>"
+ printf '<%#b>', 12; # prints "<0b1100>"
+ printf '<%#B>', 12; # prints "<0B1100>"
+
+When a space and a plus sign are given as the flags at once,
+a plus sign is used to prefix a positive number.
+
+ printf '<%+ d>', 12; # prints "<+12>"
+ printf '<% +d>', 12; # prints "<+12>"
+
+When the # flag and a precision are given in the %o conversion,
+the precision is incremented if it's necessary for the leading "0".
+
+ printf '<%#.5o>', 012; # prints "<00012>"
+ printf '<%#.5o>', 012345; # prints "<012345>"
+ printf '<%#.0o>', 0; # prints "<0>"
+
+=item vector flag
+
+This flag tells Perl to interpret the supplied string as a vector of
+integers, one for each character in the string. Perl applies the format to
+each integer in turn, then joins the resulting strings with a separator (a
+dot C<.> by default). This can be useful for displaying ordinal values of
+characters in arbitrary strings:
+
+ printf "%vd", "AB\x{100}"; # prints "65.66.256"
+ printf "version is v%vd\n", $^V; # Perl's version
+
+Put an asterisk C<*> before the C<v> to override the string to
+use to separate the numbers:
+
+ printf "address is %*vX\n", ":", $addr; # IPv6 address
+ printf "bits are %0*v8b\n", " ", $bits; # random bitstring
+
+You can also explicitly specify the argument number to use for
+the join string using something like C<*2$v>; for example:
+
+ printf '%*4$vX %*4$vX %*4$vX', @addr[1..3], ":"; # 3 IPv6 addresses
+
+=item (minimum) width
+
+Arguments are usually formatted to be only as wide as required to
+display the given value. You can override the width by putting
+a number here, or get the width from the next argument (with C<*>)
+or from a specified argument (e.g., with C<*2$>):
+
+ printf "<%s>", "a"; # prints "<a>"
+ printf "<%6s>", "a"; # prints "< a>"
+ printf "<%*s>", 6, "a"; # prints "< a>"
+ printf "<%*2$s>", "a", 6; # prints "< a>"
+ printf "<%2s>", "long"; # prints "<long>" (does not truncate)
+
+If a field width obtained through C<*> is negative, it has the same
+effect as the C<-> flag: left-justification.
+
+=item precision, or maximum width
+X<precision>
+
+You can specify a precision (for numeric conversions) or a maximum
+width (for string conversions) by specifying a C<.> followed by a number.
+For floating-point formats except C<g> and C<G>, this specifies
+how many places right of the decimal point to show (the default being 6).
+For example:
+
+ # these examples are subject to system-specific variation
+ printf '<%f>', 1; # prints "<1.000000>"
+ printf '<%.1f>', 1; # prints "<1.0>"
+ printf '<%.0f>', 1; # prints "<1>"
+ printf '<%e>', 10; # prints "<1.000000e+01>"
+ printf '<%.1e>', 10; # prints "<1.0e+01>"
+
+For "g" and "G", this specifies the maximum number of digits to show,
+including those prior to the decimal point and those after it; for
+example:
+
+ # These examples are subject to system-specific variation.
+ printf '<%g>', 1; # prints "<1>"
+ printf '<%.10g>', 1; # prints "<1>"
+ printf '<%g>', 100; # prints "<100>"
+ printf '<%.1g>', 100; # prints "<1e+02>"
+ printf '<%.2g>', 100.01; # prints "<1e+02>"
+ printf '<%.5g>', 100.01; # prints "<100.01>"
+ printf '<%.4g>', 100.01; # prints "<100>"
+
+For integer conversions, specifying a precision implies that the
+output of the number itself should be zero-padded to this width,
+where the 0 flag is ignored:
+
+ printf '<%.6d>', 1; # prints "<000001>"
+ printf '<%+.6d>', 1; # prints "<+000001>"
+ printf '<%-10.6d>', 1; # prints "<000001 >"
+ printf '<%10.6d>', 1; # prints "< 000001>"
+ printf '<%010.6d>', 1; # prints "< 000001>"
+ printf '<%+10.6d>', 1; # prints "< +000001>"
+
+ printf '<%.6x>', 1; # prints "<000001>"
+ printf '<%#.6x>', 1; # prints "<0x000001>"
+ printf '<%-10.6x>', 1; # prints "<000001 >"
+ printf '<%10.6x>', 1; # prints "< 000001>"
+ printf '<%010.6x>', 1; # prints "< 000001>"
+ printf '<%#10.6x>', 1; # prints "< 0x000001>"
+
+For string conversions, specifying a precision truncates the string
+to fit the specified width:
+
+ printf '<%.5s>', "truncated"; # prints "<trunc>"
+ printf '<%10.5s>', "truncated"; # prints "< trunc>"
+
+You can also get the precision from the next argument using C<.*>:
+
+ printf '<%.6x>', 1; # prints "<000001>"
+ printf '<%.*x>', 6, 1; # prints "<000001>"
+
+If a precision obtained through C<*> is negative, it counts
+as having no precision at all.
+
+ printf '<%.*s>', 7, "string"; # prints "<string>"
+ printf '<%.*s>', 3, "string"; # prints "<str>"
+ printf '<%.*s>', 0, "string"; # prints "<>"
+ printf '<%.*s>', -1, "string"; # prints "<string>"
+
+ printf '<%.*d>', 1, 0; # prints "<0>"
+ printf '<%.*d>', 0, 0; # prints "<>"
+ printf '<%.*d>', -1, 0; # prints "<0>"
+
+You cannot currently get the precision from a specified number,
+but it is intended that this will be possible in the future, for
+example using C<.*2$>:
+
+ printf "<%.*2$x>", 1, 6; # INVALID, but in future will print "<000001>"
+
+=item size
+
+For numeric conversions, you can specify the size to interpret the
+number as using C<l>, C<h>, C<V>, C<q>, C<L>, or C<ll>. For integer
+conversions (C<d u o x X b i D U O>), numbers are usually assumed to be
+whatever the default integer size is on your platform (usually 32 or 64
+bits), but you can override this to use instead one of the standard C types,
+as supported by the compiler used to build Perl:
+
+ hh interpret integer as C type "char" or "unsigned char"
+ on Perl 5.14 or later
+ h interpret integer as C type "short" or "unsigned short"
+ j interpret integer as C type "intmax_t" on Perl 5.14
+ or later, and only with a C99 compiler (unportable)
+ l interpret integer as C type "long" or "unsigned long"
+ q, L, or ll interpret integer as C type "long long", "unsigned long long",
+ or "quad" (typically 64-bit integers)
+ t interpret integer as C type "ptrdiff_t" on Perl 5.14 or later
+ z interpret integer as C type "size_t" on Perl 5.14 or later
+
+As of 5.14, none of these raises an exception if they are not supported on
+your platform. However, if warnings are enabled, a warning of the
+C<printf> warning class is issued on an unsupported conversion flag.
+Should you instead prefer an exception, do this:
+
+ use warnings FATAL => "printf";
+
+If you would like to know about a version dependency before you
+start running the program, put something like this at its top:
+
+ use 5.014; # for hh/j/t/z/ printf modifiers
+
+You can find out whether your Perl supports quads via L<Config>:
+
+ use Config;
+ if ($Config{use64bitint} eq "define" || $Config{longsize} >= 8) {
+ print "Nice quads!\n";
+ }
+
+For floating-point conversions (C<e f g E F G>), numbers are usually assumed
+to be the default floating-point size on your platform (double or long double),
+but you can force "long double" with C<q>, C<L>, or C<ll> if your
+platform supports them. You can find out whether your Perl supports long
+doubles via L<Config>:
+
+ use Config;
+ print "long doubles\n" if $Config{d_longdbl} eq "define";
+
+You can find out whether Perl considers "long double" to be the default
+floating-point size to use on your platform via L<Config>:
+
+ use Config;
+ if ($Config{uselongdouble} eq "define") {
+ print "long doubles by default\n";
+ }
+
+It can also be that long doubles and doubles are the same thing:
+
+ use Config;
+ ($Config{doublesize} == $Config{longdblsize}) &&
+ print "doubles are long doubles\n";
+
+The size specifier C<V> has no effect for Perl code, but is supported for
+compatibility with XS code. It means "use the standard size for a Perl
+integer or floating-point number", which is the default.
+
+=item order of arguments
+
+Normally, sprintf() takes the next unused argument as the value to
+format for each format specification. If the format specification
+uses C<*> to require additional arguments, these are consumed from
+the argument list in the order they appear in the format
+specification I<before> the value to format. Where an argument is
+specified by an explicit index, this does not affect the normal
+order for the arguments, even when the explicitly specified index
+would have been the next argument.
+
+So:
+
+ printf "<%*.*s>", $a, $b, $c;
+
+uses C<$a> for the width, C<$b> for the precision, and C<$c>
+as the value to format; while:
+
+ printf "<%*1$.*s>", $a, $b;
+
+would use C<$a> for the width and precision, and C<$b> as the
+value to format.
+
+Here are some more examples; be aware that when using an explicit
+index, the C<$> may need escaping:
+
+ printf "%2\$d %d\n", 12, 34; # will print "34 12\n"
+ printf "%2\$d %d %d\n", 12, 34; # will print "34 12 34\n"
+ printf "%3\$d %d %d\n", 12, 34, 56; # will print "56 12 34\n"
+ printf "%2\$*3\$d %d\n", 12, 34, 3; # will print " 34 12\n"
+
+=back
+
+If C<use locale> is in effect and POSIX::setlocale() has been called,
+the character used for the decimal separator in formatted floating-point
+numbers is affected by the LC_NUMERIC locale. See L<perllocale>
+and L<POSIX>.
+
+=item sqrt EXPR
+X<sqrt> X<root> X<square root>
+
+=item sqrt
+
+Return the positive square root of EXPR. If EXPR is omitted, uses
+C<$_>. Works only for non-negative operands unless you've
+loaded the C<Math::Complex> module.
+
+ use Math::Complex;
+ print sqrt(-4); # prints 2i
+
+=item srand EXPR
+X<srand> X<seed> X<randseed>
+
+=item srand
+
+Sets and returns the random number seed for the C<rand> operator.
+
+The point of the function is to "seed" the C<rand> function so that
+C<rand> can produce a different sequence each time you run your
+program. When called with a parameter, C<srand> uses that for the seed;
+otherwise it (semi-)randomly chooses a seed. In either case, starting with
+Perl 5.14, it returns the seed.
+
+If C<srand()> is not called explicitly, it is called implicitly without a
+parameter at the first use of the C<rand> operator. However, this was not true
+of versions of Perl before 5.004, so if your script will run under older
+Perl versions, it should call C<srand>; otherwise most programs won't call
+C<srand()> at all.
+
+But there are a few situations in recent Perls where programs are likely to
+want to call C<srand>. One is for generating predictable results generally for
+testing or debugging. There, you use C<srand($seed)>, with the same C<$seed>
+each time. Another case is that you may want to call C<srand()>
+after a C<fork()> to avoid child processes sharing the same seed value as the
+parent (and consequently each other).
+
+Do B<not> call C<srand()> (i.e., without an argument) more than once per
+process. The internal state of the random number generator should
+contain more entropy than can be provided by any seed, so calling
+C<srand()> again actually I<loses> randomness.
+
+Most implementations of C<srand> take an integer and will silently
+truncate decimal numbers. This means C<srand(42)> will usually
+produce the same results as C<srand(42.1)>. To be safe, always pass
+C<srand> an integer.
+
+In versions of Perl prior to 5.004 the default seed was just the
+current C<time>. This isn't a particularly good seed, so many old
+programs supply their own seed value (often C<time ^ $$> or C<time ^
+($$ + ($$ << 15))>), but that isn't necessary any more.
+
+Frequently called programs (like CGI scripts) that simply use
+
+ time ^ $$
+
+for a seed can fall prey to the mathematical property that
+
+ a^b == (a+1)^(b+1)
+
+one-third of the time. So don't do that.
+
+A typical use of the returned seed is for a test program which has too many
+combinations to test comprehensively in the time available to it each run. It
+can test a random subset each time, and should there be a failure, log the seed
+used for that run so that it can later be used to reproduce the same results.
+
+B<C<rand()> is not cryptographically secure. You should not rely
+on it in security-sensitive situations.> As of this writing, a
+number of third-party CPAN modules offer random number generators
+intended by their authors to be cryptographically secure,
+including: L<Data::Entropy>, L<Crypt::Random>, L<Math::Random::Secure>,
+and L<Math::TrulyRandom>.
+
+=item stat FILEHANDLE
+X<stat> X<file, status> X<ctime>
+
+=item stat EXPR
+
+=item stat DIRHANDLE
+
+=item stat
+
+Returns a 13-element list giving the status info for a file, either
+the file opened via FILEHANDLE or DIRHANDLE, or named by EXPR. If EXPR is
+omitted, it stats C<$_> (not C<_>!). Returns the empty list if C<stat> fails. Typically
+used as follows:
+
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = stat($filename);
+
+Not all fields are supported on all filesystem types. Here are the
+meanings of the fields:
+
+ 0 dev device number of filesystem
+ 1 ino inode number
+ 2 mode file mode (type and permissions)
+ 3 nlink number of (hard) links to the file
+ 4 uid numeric user ID of file's owner
+ 5 gid numeric group ID of file's owner
+ 6 rdev the device identifier (special files only)
+ 7 size total size of file, in bytes
+ 8 atime last access time in seconds since the epoch
+ 9 mtime last modify time in seconds since the epoch
+ 10 ctime inode change time in seconds since the epoch (*)
+ 11 blksize preferred block size for file system I/O
+ 12 blocks actual number of blocks allocated
+
+(The epoch was at 00:00 January 1, 1970 GMT.)
+
+(*) Not all fields are supported on all filesystem types. Notably, the
+ctime field is non-portable. In particular, you cannot expect it to be a
+"creation time"; see L<perlport/"Files and Filesystems"> for details.
+
+If C<stat> is passed the special filehandle consisting of an underline, no
+stat is done, but the current contents of the stat structure from the
+last C<stat>, C<lstat>, or filetest are returned. Example:
+
+ if (-x $file && (($d) = stat(_)) && $d < 0) {
+ print "$file is executable NFS file\n";
+ }
+
+(This works on machines only for which the device number is negative
+under NFS.)
+
+Because the mode contains both the file type and its permissions, you
+should mask off the file type portion and (s)printf using a C<"%o">
+if you want to see the real permissions.
+
+ $mode = (stat($filename))[2];
+ printf "Permissions are %04o\n", $mode & 07777;
+
+In scalar context, C<stat> returns a boolean value indicating success
+or failure, and, if successful, sets the information associated with
+the special filehandle C<_>.
+
+The L<File::stat> module provides a convenient, by-name access mechanism:
+
+ use File::stat;
+ $sb = stat($filename);
+ printf "File is %s, size is %s, perm %04o, mtime %s\n",
+ $filename, $sb->size, $sb->mode & 07777,
+ scalar localtime $sb->mtime;
+
+You can import symbolic mode constants (C<S_IF*>) and functions
+(C<S_IS*>) from the Fcntl module:
+
+ use Fcntl ':mode';
+
+ $mode = (stat($filename))[2];
+
+ $user_rwx = ($mode & S_IRWXU) >> 6;
+ $group_read = ($mode & S_IRGRP) >> 3;
+ $other_execute = $mode & S_IXOTH;
+
+ printf "Permissions are %04o\n", S_IMODE($mode), "\n";
+
+ $is_setuid = $mode & S_ISUID;
+ $is_directory = S_ISDIR($mode);
+
+You could write the last two using the C<-u> and C<-d> operators.
+Commonly available C<S_IF*> constants are:
+
+ # Permissions: read, write, execute, for user, group, others.
+
+ S_IRWXU S_IRUSR S_IWUSR S_IXUSR
+ S_IRWXG S_IRGRP S_IWGRP S_IXGRP
+ S_IRWXO S_IROTH S_IWOTH S_IXOTH
+
+ # Setuid/Setgid/Stickiness/SaveText.
+ # Note that the exact meaning of these is system-dependent.
+
+ S_ISUID S_ISGID S_ISVTX S_ISTXT
+
+ # File types. Not all are necessarily available on
+ # your system.
+
+ S_IFREG S_IFDIR S_IFLNK S_IFBLK S_IFCHR
+ S_IFIFO S_IFSOCK S_IFWHT S_ENFMT
+
+ # The following are compatibility aliases for S_IRUSR,
+ # S_IWUSR, and S_IXUSR.
+
+ S_IREAD S_IWRITE S_IEXEC
+
+and the C<S_IF*> functions are
+
+ S_IMODE($mode) the part of $mode containing the permission
+ bits and the setuid/setgid/sticky bits
+
+ S_IFMT($mode) the part of $mode containing the file type
+ which can be bit-anded with (for example)
+ S_IFREG or with the following functions
+
+ # The operators -f, -d, -l, -b, -c, -p, and -S.
+
+ S_ISREG($mode) S_ISDIR($mode) S_ISLNK($mode)
+ S_ISBLK($mode) S_ISCHR($mode) S_ISFIFO($mode) S_ISSOCK($mode)
+
+ # No direct -X operator counterpart, but for the first one
+ # the -g operator is often equivalent. The ENFMT stands for
+ # record flocking enforcement, a platform-dependent feature.
+
+ S_ISENFMT($mode) S_ISWHT($mode)
+
+See your native chmod(2) and stat(2) documentation for more details
+about the C<S_*> constants. To get status info for a symbolic link
+instead of the target file behind the link, use the C<lstat> function.
+
+Portability issues: L<perlport/stat>.
+
+=item state EXPR
+X<state>
+
+=item state TYPE EXPR
+
+=item state EXPR : ATTRS
+
+=item state TYPE EXPR : ATTRS
+
+C<state> declares a lexically scoped variable, just like C<my>.
+However, those variables will never be reinitialized, contrary to
+lexical variables that are reinitialized each time their enclosing block
+is entered.
+See L<perlsub/"Persistent Private Variables"> for details.
+
+C<state> variables are enabled only when the C<use feature "state"> pragma
+is in effect, unless the keyword is written as C<CORE::state>.
+See also L<feature>.
+
+=item study SCALAR
+X<study>
+
+=item study
+
+Takes extra time to study SCALAR (C<$_> if unspecified) in anticipation of
+doing many pattern matches on the string before it is next modified.
+This may or may not save time, depending on the nature and number of
+patterns you are searching and the distribution of character
+frequencies in the string to be searched; you probably want to compare
+run times with and without it to see which is faster. Those loops
+that scan for many short constant strings (including the constant
+parts of more complex patterns) will benefit most.
+(The way C<study> works is this: a linked list of every
+character in the string to be searched is made, so we know, for
+example, where all the C<'k'> characters are. From each search string,
+the rarest character is selected, based on some static frequency tables
+constructed from some C programs and English text. Only those places
+that contain this "rarest" character are examined.)
+
+For example, here is a loop that inserts index producing entries
+before any line containing a certain pattern:
+
+ while (<>) {
+ study;
+ print ".IX foo\n" if /\bfoo\b/;
+ print ".IX bar\n" if /\bbar\b/;
+ print ".IX blurfl\n" if /\bblurfl\b/;
+ # ...
+ print;
+ }
+
+In searching for C</\bfoo\b/>, only locations in C<$_> that contain C<f>
+will be looked at, because C<f> is rarer than C<o>. In general, this is
+a big win except in pathological cases. The only question is whether
+it saves you more time than it took to build the linked list in the
+first place.
+
+Note that if you have to look for strings that you don't know till
+runtime, you can build an entire loop as a string and C<eval> that to
+avoid recompiling all your patterns all the time. Together with
+undefining C<$/> to input entire files as one record, this can be quite
+fast, often faster than specialized programs like fgrep(1). The following
+scans a list of files (C<@files>) for a list of words (C<@words>), and prints
+out the names of those files that contain a match:
+
+ $search = 'while (<>) { study;';
+ foreach $word (@words) {
+ $search .= "++\$seen{\$ARGV} if /\\b$word\\b/;\n";
+ }
+ $search .= "}";
+ @ARGV = @files;
+ undef $/;
+ eval $search; # this screams
+ $/ = "\n"; # put back to normal input delimiter
+ foreach $file (sort keys(%seen)) {
+ print $file, "\n";
+ }
+
+=item sub NAME BLOCK
+X<sub>
+
+=item sub NAME (PROTO) BLOCK
+
+=item sub NAME : ATTRS BLOCK
+
+=item sub NAME (PROTO) : ATTRS BLOCK
+
+This is subroutine definition, not a real function I<per se>. Without a
+BLOCK it's just a forward declaration. Without a NAME, it's an anonymous
+function declaration, so does return a value: the CODE ref of the closure
+just created.
+
+See L<perlsub> and L<perlref> for details about subroutines and
+references; see L<attributes> and L<Attribute::Handlers> for more
+information about attributes.
+
+=item __SUB__
+X<__SUB__>
+
+A special token that returns the a reference to the current subroutine, or
+C<undef> outside of a subroutine.
+
+This token is only available under C<use v5.16> or the "current_sub"
+feature. See L<feature>.
+
+=item substr EXPR,OFFSET,LENGTH,REPLACEMENT
+X<substr> X<substring> X<mid> X<left> X<right>
+
+=item substr EXPR,OFFSET,LENGTH
+
+=item substr EXPR,OFFSET
+
+Extracts a substring out of EXPR and returns it. First character is at
+offset zero. If OFFSET is negative, starts
+that far back from the end of the string. If LENGTH is omitted, returns
+everything through the end of the string. If LENGTH is negative, leaves that
+many characters off the end of the string.
+
+ my $s = "The black cat climbed the green tree";
+ my $color = substr $s, 4, 5; # black
+ my $middle = substr $s, 4, -11; # black cat climbed the
+ my $end = substr $s, 14; # climbed the green tree
+ my $tail = substr $s, -4; # tree
+ my $z = substr $s, -4, 2; # tr
+
+You can use the substr() function as an lvalue, in which case EXPR
+must itself be an lvalue. If you assign something shorter than LENGTH,
+the string will shrink, and if you assign something longer than LENGTH,
+the string will grow to accommodate it. To keep the string the same
+length, you may need to pad or chop your value using C<sprintf>.
+
+If OFFSET and LENGTH specify a substring that is partly outside the
+string, only the part within the string is returned. If the substring
+is beyond either end of the string, substr() returns the undefined
+value and produces a warning. When used as an lvalue, specifying a
+substring that is entirely outside the string raises an exception.
+Here's an example showing the behavior for boundary cases:
+
+ my $name = 'fred';
+ substr($name, 4) = 'dy'; # $name is now 'freddy'
+ my $null = substr $name, 6, 2; # returns "" (no warning)
+ my $oops = substr $name, 7; # returns undef, with warning
+ substr($name, 7) = 'gap'; # raises an exception
+
+An alternative to using substr() as an lvalue is to specify the
+replacement string as the 4th argument. This allows you to replace
+parts of the EXPR and return what was there before in one operation,
+just as you can with splice().
+
+ my $s = "The black cat climbed the green tree";
+ my $z = substr $s, 14, 7, "jumped from"; # climbed
+ # $s is now "The black cat jumped from the green tree"
+
+Note that the lvalue returned by the three-argument version of substr() acts as
+a 'magic bullet'; each time it is assigned to, it remembers which part
+of the original string is being modified; for example:
+
+ $x = '1234';
+ for (substr($x,1,2)) {
+ $_ = 'a'; print $x,"\n"; # prints 1a4
+ $_ = 'xyz'; print $x,"\n"; # prints 1xyz4
+ $x = '56789';
+ $_ = 'pq'; print $x,"\n"; # prints 5pq9
+ }
+
+Prior to Perl version 5.9.1, the result of using an lvalue multiple times was
+unspecified.
+
+=item symlink OLDFILE,NEWFILE
+X<symlink> X<link> X<symbolic link> X<link, symbolic>
+
+Creates a new filename symbolically linked to the old filename.
+Returns C<1> for success, C<0> otherwise. On systems that don't support
+symbolic links, raises an exception. To check for that,
+use eval:
+
+ $symlink_exists = eval { symlink("",""); 1 };
+
+Portability issues: L<perlport/symlink>.
+
+=item syscall NUMBER, LIST
+X<syscall> X<system call>
+
+Calls the system call specified as the first element of the list,
+passing the remaining elements as arguments to the system call. If
+unimplemented, raises an exception. The arguments are interpreted
+as follows: if a given argument is numeric, the argument is passed as
+an int. If not, the pointer to the string value is passed. You are
+responsible to make sure a string is pre-extended long enough to
+receive any result that might be written into a string. You can't use a
+string literal (or other read-only string) as an argument to C<syscall>
+because Perl has to assume that any string pointer might be written
+through. If your
+integer arguments are not literals and have never been interpreted in a
+numeric context, you may need to add C<0> to them to force them to look
+like numbers. This emulates the C<syswrite> function (or vice versa):
+
+ require 'syscall.ph'; # may need to run h2ph
+ $s = "hi there\n";
+ syscall(&SYS_write, fileno(STDOUT), $s, length $s);
+
+Note that Perl supports passing of up to only 14 arguments to your syscall,
+which in practice should (usually) suffice.
+
+Syscall returns whatever value returned by the system call it calls.
+If the system call fails, C<syscall> returns C<-1> and sets C<$!> (errno).
+Note that some system calls I<can> legitimately return C<-1>. The proper
+way to handle such calls is to assign C<$!=0> before the call, then
+check the value of C<$!> if C<syscall> returns C<-1>.
+
+There's a problem with C<syscall(&SYS_pipe)>: it returns the file
+number of the read end of the pipe it creates, but there is no way
+to retrieve the file number of the other end. You can avoid this
+problem by using C<pipe> instead.
+
+Portability issues: L<perlport/syscall>.
+
+=item sysopen FILEHANDLE,FILENAME,MODE
+X<sysopen>
+
+=item sysopen FILEHANDLE,FILENAME,MODE,PERMS
+
+Opens the file whose filename is given by FILENAME, and associates it with
+FILEHANDLE. If FILEHANDLE is an expression, its value is used as the real
+filehandle wanted; an undefined scalar will be suitably autovivified. This
+function calls the underlying operating system's I<open>(2) function with the
+parameters FILENAME, MODE, and PERMS.
+
+The possible values and flag bits of the MODE parameter are
+system-dependent; they are available via the standard module C<Fcntl>. See
+the documentation of your operating system's I<open>(2) syscall to see
+which values and flag bits are available. You may combine several flags
+using the C<|>-operator.
+
+Some of the most common values are C<O_RDONLY> for opening the file in
+read-only mode, C<O_WRONLY> for opening the file in write-only mode,
+and C<O_RDWR> for opening the file in read-write mode.
+X<O_RDONLY> X<O_RDWR> X<O_WRONLY>
+
+For historical reasons, some values work on almost every system
+supported by Perl: 0 means read-only, 1 means write-only, and 2
+means read/write. We know that these values do I<not> work under
+OS/390 & VM/ESA Unix and on the Macintosh; you probably don't want to
+use them in new code.
+
+If the file named by FILENAME does not exist and the C<open> call creates
+it (typically because MODE includes the C<O_CREAT> flag), then the value of
+PERMS specifies the permissions of the newly created file. If you omit
+the PERMS argument to C<sysopen>, Perl uses the octal value C<0666>.
+These permission values need to be in octal, and are modified by your
+process's current C<umask>.
+X<O_CREAT>
+
+In many systems the C<O_EXCL> flag is available for opening files in
+exclusive mode. This is B<not> locking: exclusiveness means here that
+if the file already exists, sysopen() fails. C<O_EXCL> may not work
+on network filesystems, and has no effect unless the C<O_CREAT> flag
+is set as well. Setting C<O_CREAT|O_EXCL> prevents the file from
+being opened if it is a symbolic link. It does not protect against
+symbolic links in the file's path.
+X<O_EXCL>
+
+Sometimes you may want to truncate an already-existing file. This
+can be done using the C<O_TRUNC> flag. The behavior of
+C<O_TRUNC> with C<O_RDONLY> is undefined.
+X<O_TRUNC>
+
+You should seldom if ever use C<0644> as argument to C<sysopen>, because
+that takes away the user's option to have a more permissive umask.
+Better to omit it. See the perlfunc(1) entry on C<umask> for more
+on this.
+
+Note that C<sysopen> depends on the fdopen() C library function.
+On many Unix systems, fdopen() is known to fail when file descriptors
+exceed a certain value, typically 255. If you need more file
+descriptors than that, consider rebuilding Perl to use the C<sfio>
+library, or perhaps using the POSIX::open() function.
+
+See L<perlopentut> for a kinder, gentler explanation of opening files.
+
+Portability issues: L<perlport/sysopen>.
+
+=item sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
+X<sysread>
+
+=item sysread FILEHANDLE,SCALAR,LENGTH
+
+Attempts to read LENGTH bytes of data into variable SCALAR from the
+specified FILEHANDLE, using the read(2). It bypasses
+buffered IO, so mixing this with other kinds of reads, C<print>,
+C<write>, C<seek>, C<tell>, or C<eof> can cause confusion because the
+perlio or stdio layers usually buffers data. Returns the number of
+bytes actually read, C<0> at end of file, or undef if there was an
+error (in the latter case C<$!> is also set). SCALAR will be grown or
+shrunk so that the last byte actually read is the last byte of the
+scalar after the read.
+
+An OFFSET may be specified to place the read data at some place in the
+string other than the beginning. A negative OFFSET specifies
+placement at that many characters counting backwards from the end of
+the string. A positive OFFSET greater than the length of SCALAR
+results in the string being padded to the required size with C<"\0">
+bytes before the result of the read is appended.
+
+There is no syseof() function, which is ok, since eof() doesn't work
+well on device files (like ttys) anyway. Use sysread() and check
+for a return value for 0 to decide whether you're done.
+
+Note that if the filehandle has been marked as C<:utf8> Unicode
+characters are read instead of bytes (the LENGTH, OFFSET, and the
+return value of sysread() are in Unicode characters).
+The C<:encoding(...)> layer implicitly introduces the C<:utf8> layer.
+See L</binmode>, L</open>, and the C<open> pragma, L<open>.
+
+=item sysseek FILEHANDLE,POSITION,WHENCE
+X<sysseek> X<lseek>
+
+Sets FILEHANDLE's system position in bytes using lseek(2). FILEHANDLE may
+be an expression whose value gives the name of the filehandle. The values
+for WHENCE are C<0> to set the new position to POSITION; C<1> to set the it
+to the current position plus POSITION; and C<2> to set it to EOF plus
+POSITION, typically negative.
+
+Note the I<in bytes>: even if the filehandle has been set to operate
+on characters (for example by using the C<:encoding(utf8)> I/O layer),
+tell() will return byte offsets, not character offsets (because
+implementing that would render sysseek() unacceptably slow).
+
+sysseek() bypasses normal buffered IO, so mixing it with reads other
+than C<sysread> (for example C<< <> >> or read()) C<print>, C<write>,
+C<seek>, C<tell>, or C<eof> may cause confusion.
+
+For WHENCE, you may also use the constants C<SEEK_SET>, C<SEEK_CUR>,
+and C<SEEK_END> (start of the file, current position, end of the file)
+from the Fcntl module. Use of the constants is also more portable
+than relying on 0, 1, and 2. For example to define a "systell" function:
+
+ use Fcntl 'SEEK_CUR';
+ sub systell { sysseek($_[0], 0, SEEK_CUR) }
+
+Returns the new position, or the undefined value on failure. A position
+of zero is returned as the string C<"0 but true">; thus C<sysseek> returns
+true on success and false on failure, yet you can still easily determine
+the new position.
+
+=item system LIST
+X<system> X<shell>
+
+=item system PROGRAM LIST
+
+Does exactly the same thing as C<exec LIST>, except that a fork is
+done first and the parent process waits for the child process to
+exit. Note that argument processing varies depending on the
+number of arguments. If there is more than one argument in LIST,
+or if LIST is an array with more than one value, starts the program
+given by the first element of the list with arguments given by the
+rest of the list. If there is only one scalar argument, the argument
+is checked for shell metacharacters, and if there are any, the
+entire argument is passed to the system's command shell for parsing
+(this is C</bin/sh -c> on Unix platforms, but varies on other
+platforms). If there are no shell metacharacters in the argument,
+it is split into words and passed directly to C<execvp>, which is
+more efficient.
+
+Beginning with v5.6.0, Perl will attempt to flush all files opened for
+output before any operation that may do a fork, but this may not be
+supported on some platforms (see L<perlport>). To be safe, you may need
+to set C<$|> ($AUTOFLUSH in English) or call the C<autoflush()> method
+of C<IO::Handle> on any open handles.
+
+The return value is the exit status of the program as returned by the
+C<wait> call. To get the actual exit value, shift right by eight (see
+below). See also L</exec>. This is I<not> what you want to use to capture
+the output from a command; for that you should use merely backticks or
+C<qx//>, as described in L<perlop/"`STRING`">. Return value of -1
+indicates a failure to start the program or an error of the wait(2) system
+call (inspect $! for the reason).
+
+If you'd like to make C<system> (and many other bits of Perl) die on error,
+have a look at the L<autodie> pragma.
+
+Like C<exec>, C<system> allows you to lie to a program about its name if
+you use the C<system PROGRAM LIST> syntax. Again, see L</exec>.
+
+Since C<SIGINT> and C<SIGQUIT> are ignored during the execution of
+C<system>, if you expect your program to terminate on receipt of these
+signals you will need to arrange to do so yourself based on the return
+value.
+
+ @args = ("command", "arg1", "arg2");
+ system(@args) == 0
+ or die "system @args failed: $?"
+
+If you'd like to manually inspect C<system>'s failure, you can check all
+possible failure modes by inspecting C<$?> like this:
+
+ if ($? == -1) {
+ print "failed to execute: $!\n";
+ }
+ elsif ($? & 127) {
+ printf "child died with signal %d, %s coredump\n",
+ ($? & 127), ($? & 128) ? 'with' : 'without';
+ }
+ else {
+ printf "child exited with value %d\n", $? >> 8;
+ }
+
+Alternatively, you may inspect the value of C<${^CHILD_ERROR_NATIVE}>
+with the C<W*()> calls from the POSIX module.
+
+When C<system>'s arguments are executed indirectly by the shell,
+results and return codes are subject to its quirks.
+See L<perlop/"`STRING`"> and L</exec> for details.
+
+Since C<system> does a C<fork> and C<wait> it may affect a C<SIGCHLD>
+handler. See L<perlipc> for details.
+
+Portability issues: L<perlport/system>.
+
+=item syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET
+X<syswrite>
+
+=item syswrite FILEHANDLE,SCALAR,LENGTH
+
+=item syswrite FILEHANDLE,SCALAR
+
+Attempts to write LENGTH bytes of data from variable SCALAR to the
+specified FILEHANDLE, using write(2). If LENGTH is
+not specified, writes whole SCALAR. It bypasses buffered IO, so
+mixing this with reads (other than C<sysread())>, C<print>, C<write>,
+C<seek>, C<tell>, or C<eof> may cause confusion because the perlio and
+stdio layers usually buffer data. Returns the number of bytes
+actually written, or C<undef> if there was an error (in this case the
+errno variable C<$!> is also set). If the LENGTH is greater than the
+data available in the SCALAR after the OFFSET, only as much data as is
+available will be written.
+
+An OFFSET may be specified to write the data from some part of the
+string other than the beginning. A negative OFFSET specifies writing
+that many characters counting backwards from the end of the string.
+If SCALAR is of length zero, you can only use an OFFSET of 0.
+
+B<WARNING>: If the filehandle is marked C<:utf8>, Unicode characters
+encoded in UTF-8 are written instead of bytes, and the LENGTH, OFFSET, and
+return value of syswrite() are in (UTF8-encoded Unicode) characters.
+The C<:encoding(...)> layer implicitly introduces the C<:utf8> layer.
+Alternately, if the handle is not marked with an encoding but you
+attempt to write characters with code points over 255, raises an exception.
+See L</binmode>, L</open>, and the C<open> pragma, L<open>.
+
+=item tell FILEHANDLE
+X<tell>
+
+=item tell
+
+Returns the current position I<in bytes> for FILEHANDLE, or -1 on
+error. FILEHANDLE may be an expression whose value gives the name of
+the actual filehandle. If FILEHANDLE is omitted, assumes the file
+last read.
+
+Note the I<in bytes>: even if the filehandle has been set to
+operate on characters (for example by using the C<:encoding(utf8)> open
+layer), tell() will return byte offsets, not character offsets (because
+that would render seek() and tell() rather slow).
+
+The return value of tell() for the standard streams like the STDIN
+depends on the operating system: it may return -1 or something else.
+tell() on pipes, fifos, and sockets usually returns -1.
+
+There is no C<systell> function. Use C<sysseek(FH, 0, 1)> for that.
+
+Do not use tell() (or other buffered I/O operations) on a filehandle
+that has been manipulated by sysread(), syswrite(), or sysseek().
+Those functions ignore the buffering, while tell() does not.
+
+=item telldir DIRHANDLE
+X<telldir>
+
+Returns the current position of the C<readdir> routines on DIRHANDLE.
+Value may be given to C<seekdir> to access a particular location in a
+directory. C<telldir> has the same caveats about possible directory
+compaction as the corresponding system library routine.
+
+=item tie VARIABLE,CLASSNAME,LIST
+X<tie>
+
+This function binds a variable to a package class that will provide the
+implementation for the variable. VARIABLE is the name of the variable
+to be enchanted. CLASSNAME is the name of a class implementing objects
+of correct type. Any additional arguments are passed to the C<new>
+method of the class (meaning C<TIESCALAR>, C<TIEHANDLE>, C<TIEARRAY>,
+or C<TIEHASH>). Typically these are arguments such as might be passed
+to the C<dbm_open()> function of C. The object returned by the C<new>
+method is also returned by the C<tie> function, which would be useful
+if you want to access other methods in CLASSNAME.
+
+Note that functions such as C<keys> and C<values> may return huge lists
+when used on large objects, like DBM files. You may prefer to use the
+C<each> function to iterate over such. Example:
+
+ # print out history file offsets
+ use NDBM_File;
+ tie(%HIST, 'NDBM_File', '/usr/lib/news/history', 1, 0);
+ while (($key,$val) = each %HIST) {
+ print $key, ' = ', unpack('L',$val), "\n";
+ }
+ untie(%HIST);
+
+A class implementing a hash should have the following methods:
+
+ TIEHASH classname, LIST
+ FETCH this, key
+ STORE this, key, value
+ DELETE this, key
+ CLEAR this
+ EXISTS this, key
+ FIRSTKEY this
+ NEXTKEY this, lastkey
+ SCALAR this
+ DESTROY this
+ UNTIE this
+
+A class implementing an ordinary array should have the following methods:
+
+ TIEARRAY classname, LIST
+ FETCH this, key
+ STORE this, key, value
+ FETCHSIZE this
+ STORESIZE this, count
+ CLEAR this
+ PUSH this, LIST
+ POP this
+ SHIFT this
+ UNSHIFT this, LIST
+ SPLICE this, offset, length, LIST
+ EXTEND this, count
+ DESTROY this
+ UNTIE this
+
+A class implementing a filehandle should have the following methods:
+
+ TIEHANDLE classname, LIST
+ READ this, scalar, length, offset
+ READLINE this
+ GETC this
+ WRITE this, scalar, length, offset
+ PRINT this, LIST
+ PRINTF this, format, LIST
+ BINMODE this
+ EOF this
+ FILENO this
+ SEEK this, position, whence
+ TELL this
+ OPEN this, mode, LIST
+ CLOSE this
+ DESTROY this
+ UNTIE this
+
+A class implementing a scalar should have the following methods:
+
+ TIESCALAR classname, LIST
+ FETCH this,
+ STORE this, value
+ DESTROY this
+ UNTIE this
+
+Not all methods indicated above need be implemented. See L<perltie>,
+L<Tie::Hash>, L<Tie::Array>, L<Tie::Scalar>, and L<Tie::Handle>.
+
+Unlike C<dbmopen>, the C<tie> function will not C<use> or C<require> a module
+for you; you need to do that explicitly yourself. See L<DB_File>
+or the F<Config> module for interesting C<tie> implementations.
+
+For further details see L<perltie>, L<"tied VARIABLE">.
+
+=item tied VARIABLE
+X<tied>
+
+Returns a reference to the object underlying VARIABLE (the same value
+that was originally returned by the C<tie> call that bound the variable
+to a package.) Returns the undefined value if VARIABLE isn't tied to a
+package.
+
+=item time
+X<time> X<epoch>
+
+Returns the number of non-leap seconds since whatever time the system
+considers to be the epoch, suitable for feeding to C<gmtime> and
+C<localtime>. On most systems the epoch is 00:00:00 UTC, January 1, 1970;
+a prominent exception being Mac OS Classic which uses 00:00:00, January 1,
+1904 in the current local time zone for its epoch.
+
+For measuring time in better granularity than one second, use the
+L<Time::HiRes> module from Perl 5.8 onwards (or from CPAN before then), or,
+if you have gettimeofday(2), you may be able to use the C<syscall>
+interface of Perl. See L<perlfaq8> for details.
+
+For date and time processing look at the many related modules on CPAN.
+For a comprehensive date and time representation look at the
+L<DateTime> module.
+
+=item times
+X<times>
+
+Returns a four-element list giving the user and system times in
+seconds for this process and any exited children of this process.
+
+ ($user,$system,$cuser,$csystem) = times;
+
+In scalar context, C<times> returns C<$user>.
+
+Children's times are only included for terminated children.
+
+Portability issues: L<perlport/times>.
+
+=item tr///
+
+The transliteration operator. Same as C<y///>. See
+L<perlop/"Quote and Quote-like Operators">.
+
+=item truncate FILEHANDLE,LENGTH
+X<truncate>
+
+=item truncate EXPR,LENGTH
+
+Truncates the file opened on FILEHANDLE, or named by EXPR, to the
+specified length. Raises an exception if truncate isn't implemented
+on your system. Returns true if successful, C<undef> on error.
+
+The behavior is undefined if LENGTH is greater than the length of the
+file.
+
+The position in the file of FILEHANDLE is left unchanged. You may want to
+call L<seek|/"seek FILEHANDLE,POSITION,WHENCE"> before writing to the file.
+
+Portability issues: L<perlport/truncate>.
+
+=item uc EXPR
+X<uc> X<uppercase> X<toupper>
+
+=item uc
+
+Returns an uppercased version of EXPR. This is the internal function
+implementing the C<\U> escape in double-quoted strings.
+It does not attempt to do titlecase mapping on initial letters. See
+L</ucfirst> for that.
+
+If EXPR is omitted, uses C<$_>.
+
+This function behaves the same way under various pragma, such as in a locale,
+as L</lc> does.
+
+=item ucfirst EXPR
+X<ucfirst> X<uppercase>
+
+=item ucfirst
+
+Returns the value of EXPR with the first character in uppercase
+(titlecase in Unicode). This is the internal function implementing
+the C<\u> escape in double-quoted strings.
+
+If EXPR is omitted, uses C<$_>.
+
+This function behaves the same way under various pragma, such as in a locale,
+as L</lc> does.
+
+=item umask EXPR
+X<umask>
+
+=item umask
+
+Sets the umask for the process to EXPR and returns the previous value.
+If EXPR is omitted, merely returns the current umask.
+
+The Unix permission C<rwxr-x---> is represented as three sets of three
+bits, or three octal digits: C<0750> (the leading 0 indicates octal
+and isn't one of the digits). The C<umask> value is such a number
+representing disabled permissions bits. The permission (or "mode")
+values you pass C<mkdir> or C<sysopen> are modified by your umask, so
+even if you tell C<sysopen> to create a file with permissions C<0777>,
+if your umask is C<0022>, then the file will actually be created with
+permissions C<0755>. If your C<umask> were C<0027> (group can't
+write; others can't read, write, or execute), then passing
+C<sysopen> C<0666> would create a file with mode C<0640> (because
+C<0666 &~ 027> is C<0640>).
+
+Here's some advice: supply a creation mode of C<0666> for regular
+files (in C<sysopen>) and one of C<0777> for directories (in
+C<mkdir>) and executable files. This gives users the freedom of
+choice: if they want protected files, they might choose process umasks
+of C<022>, C<027>, or even the particularly antisocial mask of C<077>.
+Programs should rarely if ever make policy decisions better left to
+the user. The exception to this is when writing files that should be
+kept private: mail files, web browser cookies, I<.rhosts> files, and
+so on.
+
+If umask(2) is not implemented on your system and you are trying to
+restrict access for I<yourself> (i.e., C<< (EXPR & 0700) > 0 >>),
+raises an exception. If umask(2) is not implemented and you are
+not trying to restrict access for yourself, returns C<undef>.
+
+Remember that a umask is a number, usually given in octal; it is I<not> a
+string of octal digits. See also L</oct>, if all you have is a string.
+
+Portability issues: L<perlport/umask>.
+
+=item undef EXPR
+X<undef> X<undefine>
+
+=item undef
+
+Undefines the value of EXPR, which must be an lvalue. Use only on a
+scalar value, an array (using C<@>), a hash (using C<%>), a subroutine
+(using C<&>), or a typeglob (using C<*>). Saying C<undef $hash{$key}>
+will probably not do what you expect on most predefined variables or
+DBM list values, so don't do that; see L</delete>. Always returns the
+undefined value. You can omit the EXPR, in which case nothing is
+undefined, but you still get an undefined value that you could, for
+instance, return from a subroutine, assign to a variable, or pass as a
+parameter. Examples:
+
+ undef $foo;
+ undef $bar{'blurfl'}; # Compare to: delete $bar{'blurfl'};
+ undef @ary;
+ undef %hash;
+ undef &mysub;
+ undef *xyz; # destroys $xyz, @xyz, %xyz, &xyz, etc.
+ return (wantarray ? (undef, $errmsg) : undef) if $they_blew_it;
+ select undef, undef, undef, 0.25;
+ ($a, $b, undef, $c) = &foo; # Ignore third value returned
+
+Note that this is a unary operator, not a list operator.
+
+=item unlink LIST
+X<unlink> X<delete> X<remove> X<rm> X<del>
+
+=item unlink
+
+Deletes a list of files. On success, it returns the number of files
+it successfully deleted. On failure, it returns false and sets C<$!>
+(errno):
+
+ my $unlinked = unlink 'a', 'b', 'c';
+ unlink @goners;
+ unlink glob "*.bak";
+
+On error, C<unlink> will not tell you which files it could not remove.
+If you want to know which files you could not remove, try them one
+at a time:
+
+ foreach my $file ( @goners ) {
+ unlink $file or warn "Could not unlink $file: $!";
+ }
+
+Note: C<unlink> will not attempt to delete directories unless you are
+superuser and the B<-U> flag is supplied to Perl. Even if these
+conditions are met, be warned that unlinking a directory can inflict
+damage on your filesystem. Finally, using C<unlink> on directories is
+not supported on many operating systems. Use C<rmdir> instead.
+
+If LIST is omitted, C<unlink> uses C<$_>.
+
+=item unpack TEMPLATE,EXPR
+X<unpack>
+
+=item unpack TEMPLATE
+
+C<unpack> does the reverse of C<pack>: it takes a string
+and expands it out into a list of values.
+(In scalar context, it returns merely the first value produced.)
+
+If EXPR is omitted, unpacks the C<$_> string.
+See L<perlpacktut> for an introduction to this function.
+
+The string is broken into chunks described by the TEMPLATE. Each chunk
+is converted separately to a value. Typically, either the string is a result
+of C<pack>, or the characters of the string represent a C structure of some
+kind.
+
+The TEMPLATE has the same format as in the C<pack> function.
+Here's a subroutine that does substring:
+
+ sub substr {
+ my($what,$where,$howmuch) = @_;
+ unpack("x$where a$howmuch", $what);
+ }
+
+and then there's
+
+ sub ordinal { unpack("W",$_[0]); } # same as ord()
+
+In addition to fields allowed in pack(), you may prefix a field with
+a %<number> to indicate that
+you want a <number>-bit checksum of the items instead of the items
+themselves. Default is a 16-bit checksum. Checksum is calculated by
+summing numeric values of expanded values (for string fields the sum of
+C<ord($char)> is taken; for bit fields the sum of zeroes and ones).
+
+For example, the following
+computes the same number as the System V sum program:
+
+ $checksum = do {
+ local $/; # slurp!
+ unpack("%32W*",<>) % 65535;
+ };
+
+The following efficiently counts the number of set bits in a bit vector:
+
+ $setbits = unpack("%32b*", $selectmask);
+
+The C<p> and C<P> formats should be used with care. Since Perl
+has no way of checking whether the value passed to C<unpack()>
+corresponds to a valid memory location, passing a pointer value that's
+not known to be valid is likely to have disastrous consequences.
+
+If there are more pack codes or if the repeat count of a field or a group
+is larger than what the remainder of the input string allows, the result
+is not well defined: the repeat count may be decreased, or
+C<unpack()> may produce empty strings or zeros, or it may raise an exception.
+If the input string is longer than one described by the TEMPLATE,
+the remainder of that input string is ignored.
+
+See L</pack> for more examples and notes.
+
+=item untie VARIABLE
+X<untie>
+
+Breaks the binding between a variable and a package.
+(See L<tie|/tie VARIABLE,CLASSNAME,LIST>.)
+Has no effect if the variable is not tied.
+
+=item unshift ARRAY,LIST
+X<unshift>
+
+=item unshift EXPR,LIST
+
+Does the opposite of a C<shift>. Or the opposite of a C<push>,
+depending on how you look at it. Prepends list to the front of the
+array and returns the new number of elements in the array.
+
+ unshift(@ARGV, '-e') unless $ARGV[0] =~ /^-/;
+
+Note the LIST is prepended whole, not one element at a time, so the
+prepended elements stay in the same order. Use C<reverse> to do the
+reverse.
+
+Starting with Perl 5.14, C<unshift> can take a scalar EXPR, which must hold
+a reference to an unblessed array. The argument will be dereferenced
+automatically. This aspect of C<unshift> is considered highly
+experimental. The exact behaviour may change in a future version of Perl.
+
+=item use Module VERSION LIST
+X<use> X<module> X<import>
+
+=item use Module VERSION
+
+=item use Module LIST
+
+=item use Module
+
+=item use VERSION
+
+Imports some semantics into the current package from the named module,
+generally by aliasing certain subroutine or variable names into your
+package. It is exactly equivalent to
+
+ BEGIN { require Module; Module->import( LIST ); }
+
+except that Module I<must> be a bareword.
+The importation can be made conditional; see L<if>.
+
+In the peculiar C<use VERSION> form, VERSION may be either a positive
+decimal fraction such as 5.006, which will be compared to C<$]>, or a v-string
+of the form v5.6.1, which will be compared to C<$^V> (aka $PERL_VERSION). An
+exception is raised if VERSION is greater than the version of the
+current Perl interpreter; Perl will not attempt to parse the rest of the
+file. Compare with L</require>, which can do a similar check at run time.
+Symmetrically, C<no VERSION> allows you to specify that you want a version
+of Perl older than the specified one.
+
+Specifying VERSION as a literal of the form v5.6.1 should generally be
+avoided, because it leads to misleading error messages under earlier
+versions of Perl (that is, prior to 5.6.0) that do not support this
+syntax. The equivalent numeric version should be used instead.
+
+ use v5.6.1; # compile time version check
+ use 5.6.1; # ditto
+ use 5.006_001; # ditto; preferred for backwards compatibility
+
+This is often useful if you need to check the current Perl version before
+C<use>ing library modules that won't work with older versions of Perl.
+(We try not to do this more than we have to.)
+
+Also, if the specified Perl version is greater than or equal to 5.9.5,
+C<use VERSION> will also load the C<feature> pragma and enable all
+features available in the requested version. See L<feature>.
+Similarly, if the specified Perl version is greater than or equal to
+5.11.0, strictures are enabled lexically as with C<use strict> (except
+that the F<strict.pm> file is not actually loaded).
+
+The C<BEGIN> forces the C<require> and C<import> to happen at compile time. The
+C<require> makes sure the module is loaded into memory if it hasn't been
+yet. The C<import> is not a builtin; it's just an ordinary static method
+call into the C<Module> package to tell the module to import the list of
+features back into the current package. The module can implement its
+C<import> method any way it likes, though most modules just choose to
+derive their C<import> method via inheritance from the C<Exporter> class that
+is defined in the C<Exporter> module. See L<Exporter>. If no C<import>
+method can be found then the call is skipped, even if there is an AUTOLOAD
+method.
+
+If you do not want to call the package's C<import> method (for instance,
+to stop your namespace from being altered), explicitly supply the empty list:
+
+ use Module ();
+
+That is exactly equivalent to
+
+ BEGIN { require Module }
+
+If the VERSION argument is present between Module and LIST, then the
+C<use> will call the VERSION method in class Module with the given
+version as an argument. The default VERSION method, inherited from
+the UNIVERSAL class, croaks if the given version is larger than the
+value of the variable C<$Module::VERSION>.
+
+Again, there is a distinction between omitting LIST (C<import> called
+with no arguments) and an explicit empty LIST C<()> (C<import> not
+called). Note that there is no comma after VERSION!
+
+Because this is a wide-open interface, pragmas (compiler directives)
+are also implemented this way. Currently implemented pragmas are:
+
+ use constant;
+ use diagnostics;
+ use integer;
+ use sigtrap qw(SEGV BUS);
+ use strict qw(subs vars refs);
+ use subs qw(afunc blurfl);
+ use warnings qw(all);
+ use sort qw(stable _quicksort _mergesort);
+
+Some of these pseudo-modules import semantics into the current
+block scope (like C<strict> or C<integer>, unlike ordinary modules,
+which import symbols into the current package (which are effective
+through the end of the file).
+
+Because C<use> takes effect at compile time, it doesn't respect the
+ordinary flow control of the code being compiled. In particular, putting
+a C<use> inside the false branch of a conditional doesn't prevent it
+from being processed. If a module or pragma only needs to be loaded
+conditionally, this can be done using the L<if> pragma:
+
+ use if $] < 5.008, "utf8";
+ use if WANT_WARNINGS, warnings => qw(all);
+
+There's a corresponding C<no> declaration that unimports meanings imported
+by C<use>, i.e., it calls C<unimport Module LIST> instead of C<import>.
+It behaves just as C<import> does with VERSION, an omitted or empty LIST,
+or no unimport method being found.
+
+ no integer;
+ no strict 'refs';
+ no warnings;
+
+Care should be taken when using the C<no VERSION> form of C<no>. It is
+I<only> meant to be used to assert that the running Perl is of a earlier
+version than its argument and I<not> to undo the feature-enabling side effects
+of C<use VERSION>.
+
+See L<perlmodlib> for a list of standard modules and pragmas. See L<perlrun>
+for the C<-M> and C<-m> command-line options to Perl that give C<use>
+functionality from the command-line.
+
+=item utime LIST
+X<utime>
+
+Changes the access and modification times on each file of a list of
+files. The first two elements of the list must be the NUMERIC access
+and modification times, in that order. Returns the number of files
+successfully changed. The inode change time of each file is set
+to the current time. For example, this code has the same effect as the
+Unix touch(1) command when the files I<already exist> and belong to
+the user running the program:
+
+ #!/usr/bin/perl
+ $atime = $mtime = time;
+ utime $atime, $mtime, @ARGV;
+
+Since Perl 5.7.2, if the first two elements of the list are C<undef>,
+the utime(2) syscall from your C library is called with a null second
+argument. On most systems, this will set the file's access and
+modification times to the current time (i.e., equivalent to the example
+above) and will work even on files you don't own provided you have write
+permission:
+
+ for $file (@ARGV) {
+ utime(undef, undef, $file)
+ || warn "couldn't touch $file: $!";
+ }
+
+Under NFS this will use the time of the NFS server, not the time of
+the local machine. If there is a time synchronization problem, the
+NFS server and local machine will have different times. The Unix
+touch(1) command will in fact normally use this form instead of the
+one shown in the first example.
+
+Passing only one of the first two elements as C<undef> is
+equivalent to passing a 0 and will not have the effect
+described when both are C<undef>. This also triggers an
+uninitialized warning.
+
+On systems that support futimes(2), you may pass filehandles among the
+files. On systems that don't support futimes(2), passing filehandles raises
+an exception. Filehandles must be passed as globs or glob references to be
+recognized; barewords are considered filenames.
+
+Portability issues: L<perlport/utime>.
+
+=item values HASH
+X<values>
+
+=item values ARRAY
+
+=item values EXPR
+
+Returns a list consisting of all the values of the named hash, or the values
+of an array. (In scalar context, returns the number of values.)
+
+The values are returned in an apparently random order. The actual
+random order is subject to change in future versions of Perl, but it
+is guaranteed to be the same order as either the C<keys> or C<each>
+function would produce on the same (unmodified) hash. Since Perl
+5.8.1 the ordering is different even between different runs of Perl
+for security reasons (see L<perlsec/"Algorithmic Complexity Attacks">).
+
+As a side effect, calling values() resets the HASH or ARRAY's internal
+iterator;
+see L</each>. (In particular, calling values() in void context resets
+the iterator with no other overhead. Apart from resetting the iterator,
+C<values @array> in list context is the same as plain C<@array>.
+We recommend that you use void context C<keys @array> for this, but reasoned
+that it taking C<values @array> out would require more documentation than
+leaving it in.)
+
+Note that the values are not copied, which means modifying them will
+modify the contents of the hash:
+
+ for (values %hash) { s/foo/bar/g } # modifies %hash values
+ for (@hash{keys %hash}) { s/foo/bar/g } # same
+
+Starting with Perl 5.14, C<values> can take a scalar EXPR, which must hold
+a reference to an unblessed hash or array. The argument will be
+dereferenced automatically. This aspect of C<values> is considered highly
+experimental. The exact behaviour may change in a future version of Perl.
+
+ for (values $hashref) { ... }
+ for (values $obj->get_arrayref) { ... }
+
+See also C<keys>, C<each>, and C<sort>.
+
+=item vec EXPR,OFFSET,BITS
+X<vec> X<bit> X<bit vector>
+
+Treats the string in EXPR as a bit vector made up of elements of
+width BITS and returns the value of the element specified by OFFSET
+as an unsigned integer. BITS therefore specifies the number of bits
+that are reserved for each element in the bit vector. This must
+be a power of two from 1 to 32 (or 64, if your platform supports
+that).
+
+If BITS is 8, "elements" coincide with bytes of the input string.
+
+If BITS is 16 or more, bytes of the input string are grouped into chunks
+of size BITS/8, and each group is converted to a number as with
+pack()/unpack() with big-endian formats C<n>/C<N> (and analogously
+for BITS==64). See L<"pack"> for details.
+
+If bits is 4 or less, the string is broken into bytes, then the bits
+of each byte are broken into 8/BITS groups. Bits of a byte are
+numbered in a little-endian-ish way, as in C<0x01>, C<0x02>,
+C<0x04>, C<0x08>, C<0x10>, C<0x20>, C<0x40>, C<0x80>. For example,
+breaking the single input byte C<chr(0x36)> into two groups gives a list
+C<(0x6, 0x3)>; breaking it into 4 groups gives C<(0x2, 0x1, 0x3, 0x0)>.
+
+C<vec> may also be assigned to, in which case parentheses are needed
+to give the expression the correct precedence as in
+
+ vec($image, $max_x * $x + $y, 8) = 3;
+
+If the selected element is outside the string, the value 0 is returned.
+If an element off the end of the string is written to, Perl will first
+extend the string with sufficiently many zero bytes. It is an error
+to try to write off the beginning of the string (i.e., negative OFFSET).
+
+If the string happens to be encoded as UTF-8 internally (and thus has
+the UTF8 flag set), this is ignored by C<vec>, and it operates on the
+internal byte string, not the conceptual character string, even if you
+only have characters with values less than 256.
+
+Strings created with C<vec> can also be manipulated with the logical
+operators C<|>, C<&>, C<^>, and C<~>. These operators will assume a bit
+vector operation is desired when both operands are strings.
+See L<perlop/"Bitwise String Operators">.
+
+The following code will build up an ASCII string saying C<'PerlPerlPerl'>.
+The comments show the string after each step. Note that this code works
+in the same way on big-endian or little-endian machines.
+
+ my $foo = '';
+ vec($foo, 0, 32) = 0x5065726C; # 'Perl'
+
+ # $foo eq "Perl" eq "\x50\x65\x72\x6C", 32 bits
+ print vec($foo, 0, 8); # prints 80 == 0x50 == ord('P')
+
+ vec($foo, 2, 16) = 0x5065; # 'PerlPe'
+ vec($foo, 3, 16) = 0x726C; # 'PerlPerl'
+ vec($foo, 8, 8) = 0x50; # 'PerlPerlP'
+ vec($foo, 9, 8) = 0x65; # 'PerlPerlPe'
+ vec($foo, 20, 4) = 2; # 'PerlPerlPe' . "\x02"
+ vec($foo, 21, 4) = 7; # 'PerlPerlPer'
+ # 'r' is "\x72"
+ vec($foo, 45, 2) = 3; # 'PerlPerlPer' . "\x0c"
+ vec($foo, 93, 1) = 1; # 'PerlPerlPer' . "\x2c"
+ vec($foo, 94, 1) = 1; # 'PerlPerlPerl'
+ # 'l' is "\x6c"
+
+To transform a bit vector into a string or list of 0's and 1's, use these:
+
+ $bits = unpack("b*", $vector);
+ @bits = split(//, unpack("b*", $vector));
+
+If you know the exact length in bits, it can be used in place of the C<*>.
+
+Here is an example to illustrate how the bits actually fall in place:
+
+ #!/usr/bin/perl -wl
+
+ print <<'EOT';
+ 0 1 2 3
+ unpack("V",$_) 01234567890123456789012345678901
+ ------------------------------------------------------------------
+ EOT
+
+ for $w (0..3) {
+ $width = 2**$w;
+ for ($shift=0; $shift < $width; ++$shift) {
+ for ($off=0; $off < 32/$width; ++$off) {
+ $str = pack("B*", "0"x32);
+ $bits = (1<<$shift);
+ vec($str, $off, $width) = $bits;
+ $res = unpack("b*",$str);
+ $val = unpack("V", $str);
+ write;
+ }
+ }
+ }
+
+ format STDOUT =
+ vec($_,@#,@#) = @<< == @######### @>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ $off, $width, $bits, $val, $res
+ .
+ __END__
+
+Regardless of the machine architecture on which it runs, the
+example above should print the following table:
+
+ 0 1 2 3
+ unpack("V",$_) 01234567890123456789012345678901
+ ------------------------------------------------------------------
+ vec($_, 0, 1) = 1 == 1 10000000000000000000000000000000
+ vec($_, 1, 1) = 1 == 2 01000000000000000000000000000000
+ vec($_, 2, 1) = 1 == 4 00100000000000000000000000000000
+ vec($_, 3, 1) = 1 == 8 00010000000000000000000000000000
+ vec($_, 4, 1) = 1 == 16 00001000000000000000000000000000
+ vec($_, 5, 1) = 1 == 32 00000100000000000000000000000000
+ vec($_, 6, 1) = 1 == 64 00000010000000000000000000000000
+ vec($_, 7, 1) = 1 == 128 00000001000000000000000000000000
+ vec($_, 8, 1) = 1 == 256 00000000100000000000000000000000
+ vec($_, 9, 1) = 1 == 512 00000000010000000000000000000000
+ vec($_,10, 1) = 1 == 1024 00000000001000000000000000000000
+ vec($_,11, 1) = 1 == 2048 00000000000100000000000000000000
+ vec($_,12, 1) = 1 == 4096 00000000000010000000000000000000
+ vec($_,13, 1) = 1 == 8192 00000000000001000000000000000000
+ vec($_,14, 1) = 1 == 16384 00000000000000100000000000000000
+ vec($_,15, 1) = 1 == 32768 00000000000000010000000000000000
+ vec($_,16, 1) = 1 == 65536 00000000000000001000000000000000
+ vec($_,17, 1) = 1 == 131072 00000000000000000100000000000000
+ vec($_,18, 1) = 1 == 262144 00000000000000000010000000000000
+ vec($_,19, 1) = 1 == 524288 00000000000000000001000000000000
+ vec($_,20, 1) = 1 == 1048576 00000000000000000000100000000000
+ vec($_,21, 1) = 1 == 2097152 00000000000000000000010000000000
+ vec($_,22, 1) = 1 == 4194304 00000000000000000000001000000000
+ vec($_,23, 1) = 1 == 8388608 00000000000000000000000100000000
+ vec($_,24, 1) = 1 == 16777216 00000000000000000000000010000000
+ vec($_,25, 1) = 1 == 33554432 00000000000000000000000001000000
+ vec($_,26, 1) = 1 == 67108864 00000000000000000000000000100000
+ vec($_,27, 1) = 1 == 134217728 00000000000000000000000000010000
+ vec($_,28, 1) = 1 == 268435456 00000000000000000000000000001000
+ vec($_,29, 1) = 1 == 536870912 00000000000000000000000000000100
+ vec($_,30, 1) = 1 == 1073741824 00000000000000000000000000000010
+ vec($_,31, 1) = 1 == 2147483648 00000000000000000000000000000001
+ vec($_, 0, 2) = 1 == 1 10000000000000000000000000000000
+ vec($_, 1, 2) = 1 == 4 00100000000000000000000000000000
+ vec($_, 2, 2) = 1 == 16 00001000000000000000000000000000
+ vec($_, 3, 2) = 1 == 64 00000010000000000000000000000000
+ vec($_, 4, 2) = 1 == 256 00000000100000000000000000000000
+ vec($_, 5, 2) = 1 == 1024 00000000001000000000000000000000
+ vec($_, 6, 2) = 1 == 4096 00000000000010000000000000000000
+ vec($_, 7, 2) = 1 == 16384 00000000000000100000000000000000
+ vec($_, 8, 2) = 1 == 65536 00000000000000001000000000000000
+ vec($_, 9, 2) = 1 == 262144 00000000000000000010000000000000
+ vec($_,10, 2) = 1 == 1048576 00000000000000000000100000000000
+ vec($_,11, 2) = 1 == 4194304 00000000000000000000001000000000
+ vec($_,12, 2) = 1 == 16777216 00000000000000000000000010000000
+ vec($_,13, 2) = 1 == 67108864 00000000000000000000000000100000
+ vec($_,14, 2) = 1 == 268435456 00000000000000000000000000001000
+ vec($_,15, 2) = 1 == 1073741824 00000000000000000000000000000010
+ vec($_, 0, 2) = 2 == 2 01000000000000000000000000000000
+ vec($_, 1, 2) = 2 == 8 00010000000000000000000000000000
+ vec($_, 2, 2) = 2 == 32 00000100000000000000000000000000
+ vec($_, 3, 2) = 2 == 128 00000001000000000000000000000000
+ vec($_, 4, 2) = 2 == 512 00000000010000000000000000000000
+ vec($_, 5, 2) = 2 == 2048 00000000000100000000000000000000
+ vec($_, 6, 2) = 2 == 8192 00000000000001000000000000000000
+ vec($_, 7, 2) = 2 == 32768 00000000000000010000000000000000
+ vec($_, 8, 2) = 2 == 131072 00000000000000000100000000000000
+ vec($_, 9, 2) = 2 == 524288 00000000000000000001000000000000
+ vec($_,10, 2) = 2 == 2097152 00000000000000000000010000000000
+ vec($_,11, 2) = 2 == 8388608 00000000000000000000000100000000
+ vec($_,12, 2) = 2 == 33554432 00000000000000000000000001000000
+ vec($_,13, 2) = 2 == 134217728 00000000000000000000000000010000
+ vec($_,14, 2) = 2 == 536870912 00000000000000000000000000000100
+ vec($_,15, 2) = 2 == 2147483648 00000000000000000000000000000001
+ vec($_, 0, 4) = 1 == 1 10000000000000000000000000000000
+ vec($_, 1, 4) = 1 == 16 00001000000000000000000000000000
+ vec($_, 2, 4) = 1 == 256 00000000100000000000000000000000
+ vec($_, 3, 4) = 1 == 4096 00000000000010000000000000000000
+ vec($_, 4, 4) = 1 == 65536 00000000000000001000000000000000
+ vec($_, 5, 4) = 1 == 1048576 00000000000000000000100000000000
+ vec($_, 6, 4) = 1 == 16777216 00000000000000000000000010000000
+ vec($_, 7, 4) = 1 == 268435456 00000000000000000000000000001000
+ vec($_, 0, 4) = 2 == 2 01000000000000000000000000000000
+ vec($_, 1, 4) = 2 == 32 00000100000000000000000000000000
+ vec($_, 2, 4) = 2 == 512 00000000010000000000000000000000
+ vec($_, 3, 4) = 2 == 8192 00000000000001000000000000000000
+ vec($_, 4, 4) = 2 == 131072 00000000000000000100000000000000
+ vec($_, 5, 4) = 2 == 2097152 00000000000000000000010000000000
+ vec($_, 6, 4) = 2 == 33554432 00000000000000000000000001000000
+ vec($_, 7, 4) = 2 == 536870912 00000000000000000000000000000100
+ vec($_, 0, 4) = 4 == 4 00100000000000000000000000000000
+ vec($_, 1, 4) = 4 == 64 00000010000000000000000000000000
+ vec($_, 2, 4) = 4 == 1024 00000000001000000000000000000000
+ vec($_, 3, 4) = 4 == 16384 00000000000000100000000000000000
+ vec($_, 4, 4) = 4 == 262144 00000000000000000010000000000000
+ vec($_, 5, 4) = 4 == 4194304 00000000000000000000001000000000
+ vec($_, 6, 4) = 4 == 67108864 00000000000000000000000000100000
+ vec($_, 7, 4) = 4 == 1073741824 00000000000000000000000000000010
+ vec($_, 0, 4) = 8 == 8 00010000000000000000000000000000
+ vec($_, 1, 4) = 8 == 128 00000001000000000000000000000000
+ vec($_, 2, 4) = 8 == 2048 00000000000100000000000000000000
+ vec($_, 3, 4) = 8 == 32768 00000000000000010000000000000000
+ vec($_, 4, 4) = 8 == 524288 00000000000000000001000000000000
+ vec($_, 5, 4) = 8 == 8388608 00000000000000000000000100000000
+ vec($_, 6, 4) = 8 == 134217728 00000000000000000000000000010000
+ vec($_, 7, 4) = 8 == 2147483648 00000000000000000000000000000001
+ vec($_, 0, 8) = 1 == 1 10000000000000000000000000000000
+ vec($_, 1, 8) = 1 == 256 00000000100000000000000000000000
+ vec($_, 2, 8) = 1 == 65536 00000000000000001000000000000000
+ vec($_, 3, 8) = 1 == 16777216 00000000000000000000000010000000
+ vec($_, 0, 8) = 2 == 2 01000000000000000000000000000000
+ vec($_, 1, 8) = 2 == 512 00000000010000000000000000000000
+ vec($_, 2, 8) = 2 == 131072 00000000000000000100000000000000
+ vec($_, 3, 8) = 2 == 33554432 00000000000000000000000001000000
+ vec($_, 0, 8) = 4 == 4 00100000000000000000000000000000
+ vec($_, 1, 8) = 4 == 1024 00000000001000000000000000000000
+ vec($_, 2, 8) = 4 == 262144 00000000000000000010000000000000
+ vec($_, 3, 8) = 4 == 67108864 00000000000000000000000000100000
+ vec($_, 0, 8) = 8 == 8 00010000000000000000000000000000
+ vec($_, 1, 8) = 8 == 2048 00000000000100000000000000000000
+ vec($_, 2, 8) = 8 == 524288 00000000000000000001000000000000
+ vec($_, 3, 8) = 8 == 134217728 00000000000000000000000000010000
+ vec($_, 0, 8) = 16 == 16 00001000000000000000000000000000
+ vec($_, 1, 8) = 16 == 4096 00000000000010000000000000000000
+ vec($_, 2, 8) = 16 == 1048576 00000000000000000000100000000000
+ vec($_, 3, 8) = 16 == 268435456 00000000000000000000000000001000
+ vec($_, 0, 8) = 32 == 32 00000100000000000000000000000000
+ vec($_, 1, 8) = 32 == 8192 00000000000001000000000000000000
+ vec($_, 2, 8) = 32 == 2097152 00000000000000000000010000000000
+ vec($_, 3, 8) = 32 == 536870912 00000000000000000000000000000100
+ vec($_, 0, 8) = 64 == 64 00000010000000000000000000000000
+ vec($_, 1, 8) = 64 == 16384 00000000000000100000000000000000
+ vec($_, 2, 8) = 64 == 4194304 00000000000000000000001000000000
+ vec($_, 3, 8) = 64 == 1073741824 00000000000000000000000000000010
+ vec($_, 0, 8) = 128 == 128 00000001000000000000000000000000
+ vec($_, 1, 8) = 128 == 32768 00000000000000010000000000000000
+ vec($_, 2, 8) = 128 == 8388608 00000000000000000000000100000000
+ vec($_, 3, 8) = 128 == 2147483648 00000000000000000000000000000001
+
+=item wait
+X<wait>
+
+Behaves like wait(2) on your system: it waits for a child
+process to terminate and returns the pid of the deceased process, or
+C<-1> if there are no child processes. The status is returned in C<$?>
+and C<${^CHILD_ERROR_NATIVE}>.
+Note that a return value of C<-1> could mean that child processes are
+being automatically reaped, as described in L<perlipc>.
+
+If you use wait in your handler for $SIG{CHLD} it may accidentally for the
+child created by qx() or system(). See L<perlipc> for details.
+
+Portability issues: L<perlport/wait>.
+
+=item waitpid PID,FLAGS
+X<waitpid>
+
+Waits for a particular child process to terminate and returns the pid of
+the deceased process, or C<-1> if there is no such child process. On some
+systems, a value of 0 indicates that there are processes still running.
+The status is returned in C<$?> and C<${^CHILD_ERROR_NATIVE}>. If you say
+
+ use POSIX ":sys_wait_h";
+ #...
+ do {
+ $kid = waitpid(-1, WNOHANG);
+ } while $kid > 0;
+
+then you can do a non-blocking wait for all pending zombie processes.
+Non-blocking wait is available on machines supporting either the
+waitpid(2) or wait4(2) syscalls. However, waiting for a particular
+pid with FLAGS of C<0> is implemented everywhere. (Perl emulates the
+system call by remembering the status values of processes that have
+exited but have not been harvested by the Perl script yet.)
+
+Note that on some systems, a return value of C<-1> could mean that child
+processes are being automatically reaped. See L<perlipc> for details,
+and for other examples.
+
+Portability issues: L<perlport/waitpid>.
+
+=item wantarray
+X<wantarray> X<context>
+
+Returns true if the context of the currently executing subroutine or
+C<eval> is looking for a list value. Returns false if the context is
+looking for a scalar. Returns the undefined value if the context is
+looking for no value (void context).
+
+ return unless defined wantarray; # don't bother doing more
+ my @a = complex_calculation();
+ return wantarray ? @a : "@a";
+
+C<wantarray()>'s result is unspecified in the top level of a file,
+in a C<BEGIN>, C<UNITCHECK>, C<CHECK>, C<INIT> or C<END> block, or
+in a C<DESTROY> method.
+
+This function should have been named wantlist() instead.
+
+=item warn LIST
+X<warn> X<warning> X<STDERR>
+
+Prints the value of LIST to STDERR. If the last element of LIST does
+not end in a newline, it appends the same file/line number text as C<die>
+does.
+
+If the output is empty and C<$@> already contains a value (typically from a
+previous eval) that value is used after appending C<"\t...caught">
+to C<$@>. This is useful for staying almost, but not entirely similar to
+C<die>.
+
+If C<$@> is empty then the string C<"Warning: Something's wrong"> is used.
+
+No message is printed if there is a C<$SIG{__WARN__}> handler
+installed. It is the handler's responsibility to deal with the message
+as it sees fit (like, for instance, converting it into a C<die>). Most
+handlers must therefore arrange to actually display the
+warnings that they are not prepared to deal with, by calling C<warn>
+again in the handler. Note that this is quite safe and will not
+produce an endless loop, since C<__WARN__> hooks are not called from
+inside one.
+
+You will find this behavior is slightly different from that of
+C<$SIG{__DIE__}> handlers (which don't suppress the error text, but can
+instead call C<die> again to change it).
+
+Using a C<__WARN__> handler provides a powerful way to silence all
+warnings (even the so-called mandatory ones). An example:
+
+ # wipe out *all* compile-time warnings
+ BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
+ my $foo = 10;
+ my $foo = 20; # no warning about duplicate my $foo,
+ # but hey, you asked for it!
+ # no compile-time or run-time warnings before here
+ $DOWARN = 1;
+
+ # run-time warnings enabled after here
+ warn "\$foo is alive and $foo!"; # does show up
+
+See L<perlvar> for details on setting C<%SIG> entries and for more
+examples. See the Carp module for other kinds of warnings using its
+carp() and cluck() functions.
+
+=item when EXPR BLOCK
+X<when>
+
+=item when BLOCK
+
+C<when> is analogous to the C<case> keyword in other languages. Used with a
+C<foreach> loop or the experimental C<given> block, C<when> can be used in
+Perl to implement C<switch>/C<case> like statements. Available as a
+statement after Perl 5.10 and as a statement modifier after 5.14.
+Here are three examples:
+
+ use v5.10;
+ foreach (@fruits) {
+ when (/apples?/) {
+ say "I like apples."
+ }
+ when (/oranges?/) {
+ say "I don't like oranges."
+ }
+ default {
+ say "I don't like anything"
+ }
+ }
+
+ # require 5.14 for when as statement modifier
+ use v5.14;
+ foreach (@fruits) {
+ say "I like apples." when /apples?/;
+ say "I don't like oranges." when /oranges?;
+ default { say "I don't like anything" }
+ }
+
+ use v5.10;
+ given ($fruit) {
+ when (/apples?/) {
+ say "I like apples."
+ }
+ when (/oranges?/) {
+ say "I don't like oranges."
+ }
+ default {
+ say "I don't like anything"
+ }
+ }
+
+See L<perlsyn/"Switch statements"> for detailed information.
+
+=item write FILEHANDLE
+X<write>
+
+=item write EXPR
+
+=item write
+
+Writes a formatted record (possibly multi-line) to the specified FILEHANDLE,
+using the format associated with that file. By default the format for
+a file is the one having the same name as the filehandle, but the
+format for the current output channel (see the C<select> function) may be set
+explicitly by assigning the name of the format to the C<$~> variable.
+
+Top of form processing is handled automatically: if there is insufficient
+room on the current page for the formatted record, the page is advanced by
+writing a form feed, a special top-of-page format is used to format the new
+page header before the record is written. By default, the top-of-page
+format is the name of the filehandle with "_TOP" appended. This would be a
+problem with autovivified filehandles, but it may be dynamically set to the
+format of your choice by assigning the name to the C<$^> variable while
+that filehandle is selected. The number of lines remaining on the current
+page is in variable C<$->, which can be set to C<0> to force a new page.
+
+If FILEHANDLE is unspecified, output goes to the current default output
+channel, which starts out as STDOUT but may be changed by the
+C<select> operator. If the FILEHANDLE is an EXPR, then the expression
+is evaluated and the resulting string is used to look up the name of
+the FILEHANDLE at run time. For more on formats, see L<perlform>.
+
+Note that write is I<not> the opposite of C<read>. Unfortunately.
+
+=item y///
+
+The transliteration operator. Same as C<tr///>. See
+L<perlop/"Quote and Quote-like Operators">.
+
+=back
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/corpus/utf8.pod
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/corpus/utf8.pod (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/corpus/utf8.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,13 @@
+=encoding utf8
+
+=head1 NAME
+
+Büster is my cat
+
+=head1 DESCRIPTION
+
+Ingy döt Net is a Perl programmer
+
+The Roman number for 5 is Ⅴ
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/BaseTo.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/BaseTo.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/BaseTo.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,152 @@
+package Pod::Perldoc::BaseTo;
+use strict;
+use warnings;
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+use Carp qw(croak carp);
+use Config qw(%Config);
+use File::Spec::Functions qw(catfile);
+
+sub is_pageable { '' }
+sub write_with_binmode { 1 }
+
+sub output_extension { 'txt' } # override in subclass!
+
+# sub new { my $self = shift; ... }
+# sub parse_from_file( my($class, $in, $out) = ...; ... }
+
+#sub new { return bless {}, ref($_[0]) || $_[0] }
+
+# this is also in Perldoc.pm, but why look there when you're a
+# subclass of this?
+sub TRUE () {1}
+sub FALSE () {return}
+
+BEGIN {
+ *is_vms = $^O eq 'VMS' ? \&TRUE : \&FALSE unless defined &is_vms;
+ *is_mswin32 = $^O eq 'MSWin32' ? \&TRUE : \&FALSE unless defined &is_mswin32;
+ *is_dos = $^O eq 'dos' ? \&TRUE : \&FALSE unless defined &is_dos;
+ *is_os2 = $^O eq 'os2' ? \&TRUE : \&FALSE unless defined &is_os2;
+ *is_cygwin = $^O eq 'cygwin' ? \&TRUE : \&FALSE unless defined &is_cygwin;
+ *is_linux = $^O eq 'linux' ? \&TRUE : \&FALSE unless defined &is_linux;
+ *is_hpux = $^O =~ m/hpux/ ? \&TRUE : \&FALSE unless defined &is_hpux;
+ *is_openbsd = $^O =~ m/openbsd/ ? \&TRUE : \&FALSE unless defined &is_openbsd;
+}
+
+sub _perldoc_elem {
+ my($self, $name) = splice @_,0,2;
+ if(@_) {
+ $self->{$name} = $_[0];
+ } else {
+ $self->{$name};
+ }
+}
+
+sub debugging {
+ my( $self, @messages ) = @_;
+
+ ( defined(&Pod::Perldoc::DEBUG) and &Pod::Perldoc::DEBUG() )
+ }
+
+sub debug {
+ my( $self, @messages ) = @_;
+ return unless $self->debugging;
+ print STDERR map { "DEBUG $_" } @messages;
+ }
+
+sub warn {
+ my( $self, @messages ) = @_;
+ carp join "\n", @messages, '';
+ }
+
+sub die {
+ my( $self, @messages ) = @_;
+ croak join "\n", @messages, '';
+ }
+
+sub _get_path_components {
+ my( $self ) = @_;
+
+ my @paths = split /\Q$Config{path_sep}/, $ENV{PATH};
+
+ return @paths;
+ }
+
+sub _find_executable_in_path {
+ my( $self, $program ) = @_;
+
+ my @found = ();
+ foreach my $dir ( $self->_get_path_components ) {
+ my $binary = catfile( $dir, $program );
+ $self->debug( "Looking for $binary\n" );
+ next unless -e $binary;
+ unless( -x $binary ) {
+ $self->warn( "Found $binary but it's not executable. Skipping.\n" );
+ next;
+ }
+ $self->debug( "Found $binary\n" );
+ push @found, $binary;
+ }
+
+ return @found;
+ }
+
+1;
+
+__END__
+
+=head1 NAME
+
+Pod::Perldoc::BaseTo - Base for Pod::Perldoc formatters
+
+=head1 SYNOPSIS
+
+ package Pod::Perldoc::ToMyFormat;
+
+ use base qw( Pod::Perldoc::BaseTo );
+ ...
+
+=head1 DESCRIPTION
+
+This package is meant as a base of Pod::Perldoc formatters,
+like L<Pod::Perldoc::ToText>, L<Pod::Perldoc::ToMan>, etc.
+
+It provides default implementations for the methods
+
+ is_pageable
+ write_with_binmode
+ output_extension
+ _perldoc_elem
+
+The concrete formatter must implement
+
+ new
+ parse_from_file
+
+=head1 SEE ALSO
+
+L<perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002-2007 Sean M. Burke.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/GetOptsOO.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/GetOptsOO.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/GetOptsOO.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,161 @@
+package Pod::Perldoc::GetOptsOO;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+BEGIN { # Make a DEBUG constant ASAP
+ *DEBUG = defined( &Pod::Perldoc::DEBUG )
+ ? \&Pod::Perldoc::DEBUG
+ : sub(){10};
+}
+
+
+sub getopts {
+ my($target, $args, $truth) = @_;
+
+ $args ||= \@ARGV;
+
+ $target->aside(
+ "Starting switch processing. Scanning arguments [@$args]\n"
+ ) if $target->can('aside');
+
+ return unless @$args;
+
+ $truth = 1 unless @_ > 2;
+
+ DEBUG > 3 and print " Truth is $truth\n";
+
+
+ my $error_count = 0;
+
+ while( @$args and ($_ = $args->[0]) =~ m/^-(.)(.*)/s ) {
+ my($first,$rest) = ($1,$2);
+ if ($_ eq '--') { # early exit if "--"
+ shift @$args;
+ last;
+ }
+ if ($first eq '-' and $rest) { # GNU style long param names
+ ($first, $rest) = split '=', $rest, 2;
+ }
+ my $method = "opt_${first}_with";
+ if( $target->can($method) ) { # it's argumental
+ if($rest eq '') { # like -f bar
+ shift @$args;
+ $target->warn( "Option $first needs a following argument!\n" ) unless @$args;
+ $rest = shift @$args;
+ } else { # like -fbar (== -f bar)
+ shift @$args;
+ }
+
+ DEBUG > 3 and print " $method => $rest\n";
+ $target->$method( $rest );
+
+ # Otherwise, it's not argumental...
+ } else {
+
+ if( $target->can( $method = "opt_$first" ) ) {
+ DEBUG > 3 and print " $method is true ($truth)\n";
+ $target->$method( $truth );
+
+ # Otherwise it's an unknown option...
+
+ } elsif( $target->can('handle_unknown_option') ) {
+ DEBUG > 3
+ and print " calling handle_unknown_option('$first')\n";
+
+ $error_count += (
+ $target->handle_unknown_option( $first ) || 0
+ );
+
+ } else {
+ ++$error_count;
+ $target->warn( "Unknown option: $first\n" );
+ }
+
+ if($rest eq '') { # like -f
+ shift @$args
+ } else { # like -fbar (== -f -bar )
+ DEBUG > 2 and print " Setting args->[0] to \"-$rest\"\n";
+ $args->[0] = "-$rest";
+ }
+ }
+ }
+
+
+ $target->aside(
+ "Ending switch processing. Args are [@$args] with $error_count errors.\n"
+ ) if $target->can('aside');
+
+ $error_count == 0;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Pod::Perldoc::GetOptsOO - Customized option parser for Pod::Perldoc
+
+=head1 SYNOPSIS
+
+ use Pod::Perldoc::GetOptsOO ();
+
+ Pod::Perldoc::GetOptsOO::getopts( $obj, \@args, $truth )
+ or die "wrong usage";
+
+
+=head1 DESCRIPTION
+
+Implements a customized option parser used for
+L<Pod::Perldoc>.
+
+Rather like Getopt::Std's getopts:
+
+=over
+
+=item Call Pod::Perldoc::GetOptsOO::getopts($object, \@ARGV, $truth)
+
+=item Given -n, if there's a opt_n_with, it'll call $object->opt_n_with( ARGUMENT )
+ (e.g., "-n foo" => $object->opt_n_with('foo'). Ditto "-nfoo")
+
+=item Otherwise (given -n) if there's an opt_n, we'll call it $object->opt_n($truth)
+ (Truth defaults to 1)
+
+=item Otherwise we try calling $object->handle_unknown_option('n')
+ (and we increment the error count by the return value of it)
+
+=item If there's no handle_unknown_option, then we just warn, and then increment
+ the error counter
+
+=back
+
+The return value of Pod::Perldoc::GetOptsOO::getopts is true if no errors,
+otherwise it's false.
+
+=head1 SEE ALSO
+
+L<Pod::Perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002-2007 Sean M. Burke.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToANSI.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToANSI.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToANSI.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,96 @@
+package Pod::Perldoc::ToANSI;
+use strict;
+use warnings;
+use parent qw(Pod::Perldoc::BaseTo);
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+sub is_pageable { 1 }
+sub write_with_binmode { 0 }
+sub output_extension { 'txt' }
+
+use Pod::Text::Color ();
+
+sub alt { shift->_perldoc_elem('alt' , @_) }
+sub indent { shift->_perldoc_elem('indent' , @_) }
+sub loose { shift->_perldoc_elem('loose' , @_) }
+sub quotes { shift->_perldoc_elem('quotes' , @_) }
+sub sentence { shift->_perldoc_elem('sentence', @_) }
+sub width { shift->_perldoc_elem('width' , @_) }
+
+sub new { return bless {}, ref($_[0]) || $_[0] }
+
+sub parse_from_file {
+ my $self = shift;
+
+ my @options =
+ map {; $_, $self->{$_} }
+ grep !m/^_/s,
+ keys %$self
+ ;
+
+ defined(&Pod::Perldoc::DEBUG)
+ and Pod::Perldoc::DEBUG()
+ and print "About to call new Pod::Text::Color ",
+ $Pod::Text::VERSION ? "(v$Pod::Text::VERSION) " : '',
+ "with options: ",
+ @options ? "[@options]" : "(nil)", "\n";
+ ;
+
+ Pod::Text::Color->new(@options)->parse_from_file(@_);
+}
+
+1;
+
+=head1 NAME
+
+Pod::Perldoc::ToANSI - render Pod with ANSI color escapes
+
+=head1 SYNOPSIS
+
+ perldoc -o ansi Some::Modulename
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Pod::Text as a formatter class.
+
+It supports the following options, which are explained in
+L<Pod::Text>: alt, indent, loose, quotes, sentence, width
+
+For example:
+
+ perldoc -o term -w indent:5 Some::Modulename
+
+=head1 CAVEAT
+
+This module may change to use a different text formatter class in the
+future, and this may change what options are supported.
+
+=head1 SEE ALSO
+
+L<Pod::Text>, L<Pod::Text::Color>, L<Pod::Perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2011 Mark Allen. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToChecker.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToChecker.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToChecker.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,78 @@
+package Pod::Perldoc::ToChecker;
+use strict;
+use warnings;
+use vars qw(@ISA);
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+# Pick our superclass...
+#
+eval 'require Pod::Simple::Checker';
+if($@) {
+ require Pod::Checker;
+ @ISA = ('Pod::Checker');
+} else {
+ @ISA = ('Pod::Simple::Checker');
+}
+
+sub is_pageable { 1 }
+sub write_with_binmode { 0 }
+sub output_extension { 'txt' }
+
+sub if_zero_length {
+ my( $self, $file, $tmp, $tmpfd ) = @_;
+ print "No Pod errors in $file\n";
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+Pod::Perldoc::ToChecker - let Perldoc check Pod for errors
+
+=head1 SYNOPSIS
+
+ % perldoc -o checker SomeFile.pod
+ No Pod errors in SomeFile.pod
+ (or an error report)
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Pod::Simple::Checker as a "formatter" class (or if that is
+not available, then Pod::Checker), to check for errors in a given
+Pod file.
+
+This is actually a Pod::Simple::Checker (or Pod::Checker) subclass, and
+inherits all its options.
+
+=head1 SEE ALSO
+
+L<Pod::Simple::Checker>, L<Pod::Simple>, L<Pod::Checker>, L<Pod::Perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002 Sean M. Burke. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,582 @@
+require 5.006;
+package Pod::Perldoc::ToMan;
+use strict;
+use warnings;
+use parent qw(Pod::Perldoc::BaseTo);
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+use File::Spec::Functions qw(catfile);
+use Pod::Man 2.18;
+# This class is unlike ToText.pm et al, because we're NOT paging thru
+# the output in our particular format -- we make the output and
+# then we run nroff (or whatever) on it, and then page thru the
+# (plaintext) output of THAT!
+
+sub SUCCESS () { 1 }
+sub FAILED () { 0 }
+
+sub is_pageable { 1 }
+sub write_with_binmode { 0 }
+sub output_extension { 'txt' }
+
+sub __filter_nroff { shift->_perldoc_elem('__filter_nroff' , @_) }
+sub __nroffer { shift->_perldoc_elem('__nroffer' , @_) }
+sub __bindir { shift->_perldoc_elem('__bindir' , @_) }
+sub __pod2man { shift->_perldoc_elem('__pod2man' , @_) }
+sub __output_file { shift->_perldoc_elem('__output_file' , @_) }
+
+sub center { shift->_perldoc_elem('center' , @_) }
+sub date { shift->_perldoc_elem('date' , @_) }
+sub fixed { shift->_perldoc_elem('fixed' , @_) }
+sub fixedbold { shift->_perldoc_elem('fixedbold' , @_) }
+sub fixeditalic { shift->_perldoc_elem('fixeditalic' , @_) }
+sub fixedbolditalic { shift->_perldoc_elem('fixedbolditalic', @_) }
+sub name { shift->_perldoc_elem('name' , @_) }
+sub quotes { shift->_perldoc_elem('quotes' , @_) }
+sub release { shift->_perldoc_elem('release' , @_) }
+sub section { shift->_perldoc_elem('section' , @_) }
+
+sub new {
+ my( $either ) = shift;
+ my $self = bless {}, ref($either) || $either;
+ $self->init( @_ );
+ return $self;
+ }
+
+sub init {
+ my( $self, @args ) = @_;
+
+ unless( $self->__nroffer ) {
+ my $roffer = $self->_find_roffer( $self->_roffer_candidates );
+ $self->debug( "Using $roffer\n" );
+ $self->__nroffer( $roffer );
+ }
+ else {
+ $self->debug( "__nroffer is " . $self->__nroffer() . "\n" );
+ }
+
+ $self->_check_nroffer;
+ }
+
+sub _roffer_candidates {
+ my( $self ) = @_;
+
+ if( $self->is_openbsd ) { qw( mandoc groff nroff ) }
+ else { qw( groff nroff mandoc ) }
+ }
+
+sub _find_roffer {
+ my( $self, @candidates ) = @_;
+
+ my @found = ();
+ foreach my $candidate ( @candidates ) {
+ push @found, $self->_find_executable_in_path( $candidate );
+ }
+
+ return wantarray ? @found : $found[0];
+ }
+
+sub _check_nroffer {
+ return 1;
+ # where is it in the PATH?
+
+ # is it executable?
+
+ # what is its real name?
+
+ # what is its version?
+
+ # does it support the flags we need?
+
+ # is it good enough for us?
+ }
+
+sub _get_stty { `stty -a` }
+
+sub _get_columns_from_stty {
+ my $output = $_[0]->_get_stty;
+
+ if( $output =~ /\bcolumns\s+(\d+)/ ) { return $1 }
+ elsif( $output =~ /;\s*(\d+)\s+columns;/ ) { return $1 }
+ else { return 0 }
+ }
+
+sub _get_columns_from_manwidth {
+ my( $self ) = @_;
+
+ return 0 unless defined $ENV{MANWIDTH};
+
+ unless( $ENV{MANWIDTH} =~ m/\A\d+\z/ ) {
+ $self->warn( "Ignoring non-numeric MANWIDTH ($ENV{MANWIDTH})\n" );
+ return 0;
+ }
+
+ if( $ENV{MANWIDTH} == 0 ) {
+ $self->warn( "Ignoring MANWIDTH of 0. Really? Why even run the program? :)\n" );
+ return 0;
+ }
+
+ if( $ENV{MANWIDTH} =~ m/\A(\d+)\z/ ) { return $1 }
+
+ return 0;
+ }
+
+sub _get_default_width {
+ 73
+ }
+
+sub _get_columns {
+ $_[0]->_get_columns_from_manwidth ||
+ $_[0]->_get_columns_from_stty ||
+ $_[0]->_get_default_width;
+ }
+
+sub _get_podman_switches {
+ my( $self ) = @_;
+
+ my @switches = grep !m/^_/s, keys %$self;
+
+ # There needs to be a cleaner way to handle setting
+ # the UTF-8 flag, but for now, comment out this
+ # line because it often does the wrong thing.
+ #
+ # See RT #77465
+ #
+ #push @switches, 'utf8' => 1;
+
+ $self->debug( "Pod::Man switches are [@switches]\n" );
+
+ return @switches;
+ }
+
+sub _parse_with_pod_man {
+ my( $self, $file ) = @_;
+
+ #->output_fh and ->output_string from Pod::Simple aren't
+ # working, apparently, so there's this ugly hack:
+ local *STDOUT;
+ open STDOUT, '>', $self->{_text_ref};
+ my $parser = Pod::Man->new( $self->_get_podman_switches );
+ $self->debug( "Parsing $file\n" );
+ $parser->parse_from_file( $file );
+ $self->debug( "Done parsing $file\n" );
+ close STDOUT;
+
+ $self->die( "No output from Pod::Man!\n" )
+ unless length $self->{_text_ref};
+
+ $self->_save_pod_man_output if $self->debugging;
+
+ return SUCCESS;
+ }
+
+sub _save_pod_man_output {
+ my( $self, $fh ) = @_;
+
+ $fh = do {
+ my $file = "podman.out.$$.txt";
+ $self->debug( "Writing $file with Pod::Man output\n" );
+ open my $fh2, '>', $file;
+ $fh2;
+ } unless $fh;
+
+ print { $fh } ${ $self->{_text_ref} };
+ }
+
+sub _have_groff_with_utf8 {
+ my( $self ) = @_;
+
+ return 0 unless $self->_is_groff;
+ my $roffer = $self->__nroffer;
+
+ my $minimum_groff_version = '1.20.1';
+
+ my $version_string = `$roffer -v`;
+ my( $version ) = $version_string =~ /\(?groff\)? version (\d+\.\d+(?:\.\d+)?)/;
+ $self->debug( "Found groff $version\n" );
+
+ # is a string comparison good enough?
+ if( $version lt $minimum_groff_version ) {
+ $self->warn(
+ "You have an old groff." .
+ " Update to version $minimum_groff_version for good Unicode support.\n" .
+ "If you don't upgrade, wide characters may come out oddly.\n"
+ );
+ }
+
+ $version ge $minimum_groff_version;
+ }
+
+sub _have_mandoc_with_utf8 {
+ my( $self ) = @_;
+
+ return 0 unless $self->_is_mandoc;
+ my $roffer = $self->__nroffer;
+
+ my $minimum_mandoc_version = '1.11';
+
+ my $version_string = `$roffer -V`;
+ my( $version ) = $version_string =~ /mandoc ((\d+)\.(\d+))/;
+ $self->debug( "Found mandoc $version\n" );
+
+ # is a string comparison good enough?
+ if( $version lt $minimum_mandoc_version ) {
+ $self->warn(
+ "You have an older mandoc." .
+ " Update to version $minimum_mandoc_version for better Unicode support.\n" .
+ "If you don't upgrade, wide characters may come out oddly.\n" .
+ "Your results still might be odd. If you have groff, that's even better.\n"
+ );
+ }
+
+ $version ge $minimum_mandoc_version;
+ }
+
+sub _collect_nroff_switches {
+ my( $self ) = shift;
+
+ my @render_switches = $self->_is_mandoc ? qw(-mandoc) : qw(-man);
+
+ push @render_switches, $self->_get_device_switches;
+
+ # Thanks to Brendan O'Dea for contributing the following block
+ if( $self->_is_roff and $self->is_linux and -t STDOUT and my ($cols) = $self->_get_columns ) {
+ my $c = $cols * 39 / 40;
+ $cols = $c > $cols - 2 ? $c : $cols -2;
+ push @render_switches, '-rLL=' . (int $c) . 'n' if $cols > 80;
+ }
+
+ # I hear persistent reports that adding a -c switch to $render
+ # solves many people's problems. But I also hear that some mans
+ # don't have a -c switch, so that unconditionally adding it here
+ # would presumably be a Bad Thing -- sburke at cpan.org
+ push @render_switches, '-c' if( $self->_is_roff and $self->is_cygwin );
+
+ return @render_switches;
+ }
+
+sub _get_device_switches {
+ my( $self ) = @_;
+
+ if( $self->_is_nroff ) { qw() }
+ elsif( $self->_have_groff_with_utf8 ) { qw(-Kutf8 -Tutf8) }
+ elsif( $self->_is_ebcdic ) { qw(-Tcp1047) }
+ elsif( $self->_have_mandoc_with_utf8 ) { qw(-Tutf8) }
+ elsif( $self->_is_mandoc ) { qw() }
+ else { qw(-Tlatin1) }
+ }
+
+sub _is_roff {
+ my( $self ) = @_;
+
+ $self->_is_nroff or $self->_is_groff;
+ }
+
+sub _is_nroff {
+ my( $self ) = @_;
+
+ $self->__nroffer =~ /\bnroff\b/;
+ }
+
+sub _is_groff {
+ my( $self ) = @_;
+
+ $self->__nroffer =~ /\bgroff\b/;
+ }
+
+sub _is_mandoc {
+ my ( $self ) = @_;
+
+ $self->__nroffer =~ /\bmandoc\b/;
+ }
+
+sub _is_ebcdic {
+ my( $self ) = @_;
+
+ return 0;
+ }
+
+sub _filter_through_nroff {
+ my( $self ) = shift;
+ $self->debug( "Filtering through " . $self->__nroffer() . "\n" );
+
+ # Maybe someone set rendering switches as part of the opt_n value
+ # Deal with that here.
+
+ my ($render, $switches) = $self->__nroffer() =~ /\A([\/a-zA-Z0-9_\.-]+)\b(.+)?\z/;
+
+ $self->die("no nroffer!?") unless $render;
+ my @render_switches = $self->_collect_nroff_switches;
+
+ if ( $switches ) {
+ # Eliminate whitespace
+ $switches =~ s/\s//g;
+
+ # Then seperate the switches with a zero-width positive
+ # lookahead on the dash.
+ #
+ # See:
+ # http://www.effectiveperlprogramming.com/blog/1411
+ # for a good discussion of this technique
+
+ push @render_switches, split(/(?=-)/, $switches);
+ }
+
+ $self->debug( "render is $render\n" );
+ $self->debug( "render options are @render_switches\n" );
+
+ require Symbol;
+ require IPC::Open3;
+ require IO::Handle;
+
+ my $pid = IPC::Open3::open3(
+ my $writer,
+ my $reader,
+ my $err = Symbol::gensym(),
+ $render,
+ @render_switches
+ );
+
+ $reader->autoflush(1);
+
+ use IO::Select;
+ my $selector = IO::Select->new( $reader );
+
+ $self->debug( "Writing to pipe to $render\n" );
+
+ my $offset = 0;
+ my $chunk_size = 4096;
+ my $length = length( ${ $self->{_text_ref} } );
+ my $chunks = $length / $chunk_size;
+ my $done;
+ my $buffer;
+ while( $offset <= $length ) {
+ $self->debug( "Writing chunk $chunks\n" ); $chunks++;
+ syswrite $writer, ${ $self->{_text_ref} }, $chunk_size, $offset
+ or $self->die( $! );
+ $offset += $chunk_size;
+ $self->debug( "Checking read\n" );
+ READ: {
+ last READ unless $selector->can_read( 0.01 );
+ $self->debug( "Reading\n" );
+ my $bytes = sysread $reader, $buffer, 4096;
+ $self->debug( "Read $bytes bytes\n" );
+ $done .= $buffer;
+ $self->debug( sprintf "Output is %d bytes\n",
+ length $done
+ );
+ next READ;
+ }
+ }
+ close $writer;
+ $self->debug( "Done writing\n" );
+
+ # read any leftovers
+ $done .= do { local $/; <$reader> };
+ $self->debug( sprintf "Done reading. Output is %d bytes\n",
+ length $done
+ );
+
+ if( $? ) {
+ $self->warn( "Error from pipe to $render!\n" );
+ $self->debug( 'Error: ' . do { local $/; <$err> } );
+ }
+
+
+ close $reader;
+ if( my $err = $? ) {
+ $self->debug(
+ "Nonzero exit ($?) while running `$render @render_switches`.\n" .
+ "Falling back to Pod::Perldoc::ToPod\n"
+ );
+ return $self->_fallback_to_pod( @_ );
+ }
+
+ $self->debug( "Output:\n----\n$done\n----\n" );
+
+ ${ $self->{_text_ref} } = $done;
+
+ return length ${ $self->{_text_ref} } ? SUCCESS : FAILED;
+ }
+
+sub parse_from_file {
+ my( $self, $file, $outfh) = @_;
+
+ # We have a pipeline of filters each affecting the reference
+ # in $self->{_text_ref}
+ $self->{_text_ref} = \my $output;
+
+ $self->_parse_with_pod_man( $file );
+ # so far, nroff is an external command so we ensure it worked
+ my $result = $self->_filter_through_nroff;
+ return $self->_fallback_to_pod( @_ ) unless $result == SUCCESS;
+
+ $self->_post_nroff_processing;
+
+ print { $outfh } $output or
+ $self->die( "Can't print to $$self{__output_file}: $!" );
+
+ return;
+ }
+
+sub _fallback_to_pod {
+ my( $self, @args ) = @_;
+ $self->warn( "Falling back to Pod because there was a problem!\n" );
+ require Pod::Perldoc::ToPod;
+ return Pod::Perldoc::ToPod->new->parse_from_file(@_);
+ }
+
+# maybe there's a user setting we should check?
+sub _get_tab_width { 4 }
+
+sub _expand_tabs {
+ my( $self ) = @_;
+
+ my $tab_width = ' ' x $self->_get_tab_width;
+
+ ${ $self->{_text_ref} } =~ s/\t/$tab_width/g;
+ }
+
+sub _post_nroff_processing {
+ my( $self ) = @_;
+
+ if( $self->is_hpux ) {
+ $self->debug( "On HP-UX, I'm going to expand tabs for you\n" );
+ # this used to be a pipe to `col -x` for HP-UX
+ $self->_expand_tabs;
+ }
+
+ if( $self->{'__filter_nroff'} ) {
+ $self->debug( "filter_nroff is set, so filtering\n" );
+ $self->_remove_nroff_header;
+ $self->_remove_nroff_footer;
+ }
+ else {
+ $self->debug( "filter_nroff is not set, so not filtering\n" );
+ }
+
+ $self->_handle_unicode;
+
+ return 1;
+ }
+
+# I don't think this does anything since there aren't two consecutive
+# newlines in the Pod::Man output
+sub _remove_nroff_header {
+ my( $self ) = @_;
+ $self->debug( "_remove_nroff_header is still a stub!\n" );
+ return 1;
+
+# my @data = split /\n{2,}/, shift;
+# shift @data while @data and $data[0] !~ /\S/; # Go to header
+# shift @data if @data and $data[0] =~ /Contributed\s+Perl/; # Skip header
+ }
+
+# I don't think this does anything since there aren't two consecutive
+# newlines in the Pod::Man output
+sub _remove_nroff_footer {
+ my( $self ) = @_;
+ $self->debug( "_remove_nroff_footer is still a stub!\n" );
+ return 1;
+ ${ $self->{_text_ref} } =~ s/\n\n+.*\w.*\Z//m;
+
+# my @data = split /\n{2,}/, shift;
+# pop @data if @data and $data[-1] =~ /^\w/; # Skip footer, like
+ # 28/Jan/99 perl 5.005, patch 53 1
+ }
+
+sub _unicode_already_handled {
+ my( $self ) = @_;
+
+ $self->_have_groff_with_utf8 ||
+ 1 # so, we don't have a case that needs _handle_unicode
+ ;
+ }
+
+sub _handle_unicode {
+# this is the job of preconv
+# we don't need this with groff 1.20 and later.
+ my( $self ) = @_;
+
+ return 1 if $self->_unicode_already_handled;
+
+ require Encode;
+
+ # it's UTF-8 here, but we need character data
+ my $text = Encode::decode( 'UTF-8', ${ $self->{_text_ref} } ) ;
+
+# http://www.mail-archive.com/groff@gnu.org/msg01378.html
+# http://linux.die.net/man/7/groff_char
+# http://www.gnu.org/software/groff/manual/html_node/Using-Symbols.html
+# http://lists.gnu.org/archive/html/groff/2011-05/msg00007.html
+# http://www.simplicidade.org/notes/archives/2009/05/fixing_the_pod.html
+# http://lists.freebsd.org/pipermail/freebsd-questions/2011-July/232239.html
+ $text =~ s/(\P{ASCII})/
+ sprintf '\\[u%04X]', ord $1
+ /eg;
+
+ # should we encode?
+ ${ $self->{_text_ref} } = $text;
+ }
+
+1;
+
+__END__
+
+=head1 NAME
+
+Pod::Perldoc::ToMan - let Perldoc render Pod as man pages
+
+=head1 SYNOPSIS
+
+ perldoc -o man Some::Modulename
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Pod::Man and C<groff> for reading Pod pages.
+
+The following options are supported: center, date, fixed, fixedbold,
+fixeditalic, fixedbolditalic, quotes, release, section
+
+(Those options are explained in L<Pod::Man>.)
+
+For example:
+
+ perldoc -o man -w center:Pod Some::Modulename
+
+=head1 CAVEAT
+
+This module may change to use a different pod-to-nroff formatter class
+in the future, and this may change what options are supported.
+
+=head1 SEE ALSO
+
+L<Pod::Man>, L<Pod::Perldoc>, L<Pod::Perldoc::ToNroff>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2011 brian d foy. All rights reserved.
+
+Copyright (c) 2002,3,4 Sean M. Burke. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToNroff.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToNroff.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToNroff.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,105 @@
+package Pod::Perldoc::ToNroff;
+use strict;
+use warnings;
+use parent qw(Pod::Perldoc::BaseTo);
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+# This is unlike ToMan.pm in that it emits the raw nroff source!
+
+sub is_pageable { 1 } # well, if you ask for it...
+sub write_with_binmode { 0 }
+sub output_extension { 'man' }
+
+use Pod::Man ();
+
+sub center { shift->_perldoc_elem('center' , @_) }
+sub date { shift->_perldoc_elem('date' , @_) }
+sub fixed { shift->_perldoc_elem('fixed' , @_) }
+sub fixedbold { shift->_perldoc_elem('fixedbold' , @_) }
+sub fixeditalic { shift->_perldoc_elem('fixeditalic' , @_) }
+sub fixedbolditalic { shift->_perldoc_elem('fixedbolditalic', @_) }
+sub quotes { shift->_perldoc_elem('quotes' , @_) }
+sub release { shift->_perldoc_elem('release' , @_) }
+sub section { shift->_perldoc_elem('section' , @_) }
+
+sub new { return bless {}, ref($_[0]) || $_[0] }
+
+sub parse_from_file {
+ my $self = shift;
+ my $file = $_[0];
+
+ my @options =
+ map {; $_, $self->{$_} }
+ grep !m/^_/s,
+ keys %$self
+ ;
+
+ defined(&Pod::Perldoc::DEBUG)
+ and Pod::Perldoc::DEBUG()
+ and print "About to call new Pod::Man ",
+ $Pod::Man::VERSION ? "(v$Pod::Man::VERSION) " : '',
+ "with options: ",
+ @options ? "[@options]" : "(nil)", "\n";
+ ;
+
+ Pod::Man->new(@options)->parse_from_file(@_);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Pod::Perldoc::ToNroff - let Perldoc convert Pod to nroff
+
+=head1 SYNOPSIS
+
+ perldoc -o nroff -d something.3 Some::Modulename
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Pod::Man as a formatter class.
+
+The following options are supported: center, date, fixed, fixedbold,
+fixeditalic, fixedbolditalic, quotes, release, section
+
+Those options are explained in L<Pod::Man>.
+
+For example:
+
+ perldoc -o nroff -w center:Pod -d something.3 Some::Modulename
+
+=head1 CAVEAT
+
+This module may change to use a different pod-to-nroff formatter class
+in the future, and this may change what options are supported.
+
+=head1 SEE ALSO
+
+L<Pod::Man>, L<Pod::Perldoc>, L<Pod::Perldoc::ToMan>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002 Sean M. Burke. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToPod.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToPod.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToPod.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,88 @@
+package Pod::Perldoc::ToPod;
+use strict;
+use warnings;
+use parent qw(Pod::Perldoc::BaseTo);
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+sub is_pageable { 1 }
+sub write_with_binmode { 0 }
+sub output_extension { 'pod' }
+
+sub new { return bless {}, ref($_[0]) || $_[0] }
+
+sub parse_from_file {
+ my( $self, $in, $outfh ) = @_;
+
+ open(IN, "<", $in) or $self->die( "Can't read-open $in: $!\nAborting" );
+
+ my $cut_mode = 1;
+
+ # A hack for finding things between =foo and =cut, inclusive
+ local $_;
+ while (<IN>) {
+ if( m/^=(\w+)/s ) {
+ if($cut_mode = ($1 eq 'cut')) {
+ print $outfh "\n=cut\n\n";
+ # Pass thru the =cut line with some harmless
+ # (and occasionally helpful) padding
+ }
+ }
+ next if $cut_mode;
+ print $outfh $_ or $self->die( "Can't print to $outfh: $!" );
+ }
+
+ close IN or $self->die( "Can't close $in: $!" );
+ return;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Pod::Perldoc::ToPod - let Perldoc render Pod as ... Pod!
+
+=head1 SYNOPSIS
+
+ perldoc -opod Some::Modulename
+
+(That's currently the same as the following:)
+
+ perldoc -u Some::Modulename
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to display Pod source as
+itself! Pretty Zen, huh?
+
+Currently this class works by just filtering out the non-Pod stuff from
+a given input file.
+
+=head1 SEE ALSO
+
+L<Pod::Perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002 Sean M. Burke. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallencpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToRtf.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToRtf.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToRtf.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,83 @@
+package Pod::Perldoc::ToRtf;
+use strict;
+use warnings;
+use parent qw( Pod::Simple::RTF );
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+sub is_pageable { 0 }
+sub write_with_binmode { 0 }
+sub output_extension { 'rtf' }
+
+sub page_for_perldoc {
+ my($self, $tempfile, $perldoc) = @_;
+ return unless $perldoc->IS_MSWin32;
+
+ my $rtf_pager = $ENV{'RTFREADER'} || 'write.exe';
+
+ $perldoc->aside( "About to launch <\"$rtf_pager\" \"$tempfile\">\n" );
+
+ return 1 if system( qq{"$rtf_pager"}, qq{"$tempfile"} ) == 0;
+ return 0;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Pod::Perldoc::ToRtf - let Perldoc render Pod as RTF
+
+=head1 SYNOPSIS
+
+ perldoc -o rtf Some::Modulename
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Pod::Simple::RTF as a formatter class.
+
+This is actually a Pod::Simple::RTF subclass, and inherits
+all its options.
+
+You have to have Pod::Simple::RTF installed (from the Pod::Simple dist),
+or this module won't work.
+
+If Perldoc is running under MSWin and uses this class as a formatter,
+the output will be opened with F<write.exe> or whatever program is
+specified in the environment variable C<RTFREADER>. For example, to
+specify that RTF files should be opened the same as they are when you
+double-click them, you would do C<set RTFREADER=start.exe> in your
+F<autoexec.bat>.
+
+Handy tip: put C<set PERLDOC=-ortf> in your F<autoexec.bat>
+and that will set this class as the default formatter to run when
+you do C<perldoc whatever>.
+
+=head1 SEE ALSO
+
+L<Pod::Simple::RTF>, L<Pod::Simple>, L<Pod::Perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002 Sean M. Burke. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToTerm.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToTerm.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToTerm.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,90 @@
+package Pod::Perldoc::ToTerm;
+use strict;
+use warnings;
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+use parent qw(Pod::Perldoc::BaseTo);
+
+sub is_pageable { 1 }
+sub write_with_binmode { 0 }
+sub output_extension { 'txt' }
+
+use Pod::Text::Termcap ();
+
+sub alt { shift->_perldoc_elem('alt' , @_) }
+sub indent { shift->_perldoc_elem('indent' , @_) }
+sub loose { shift->_perldoc_elem('loose' , @_) }
+sub quotes { shift->_perldoc_elem('quotes' , @_) }
+sub sentence { shift->_perldoc_elem('sentence', @_) }
+sub width { shift->_perldoc_elem('width' , @_) }
+
+sub new { return bless {}, ref($_[0]) || $_[0] }
+
+sub parse_from_file {
+ my $self = shift;
+
+ my @options =
+ map {; $_, $self->{$_} }
+ grep !m/^_/s,
+ keys %$self
+ ;
+
+ defined(&Pod::Perldoc::DEBUG)
+ and Pod::Perldoc::DEBUG()
+ and print "About to call new Pod::Text::Termcap ",
+ $Pod::Text::VERSION ? "(v$Pod::Text::VERSION) " : '',
+ "with options: ",
+ @options ? "[@options]" : "(nil)", "\n";
+ ;
+
+ Pod::Text::Termcap->new(@options)->parse_from_file(@_);
+}
+
+1;
+
+=head1 NAME
+
+Pod::Perldoc::ToTerm - render Pod with terminal escapes
+
+=head1 SYNOPSIS
+
+ perldoc -o term Some::Modulename
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Pod::Text as a formatter class.
+
+It supports the following options, which are explained in
+L<Pod::Text>: alt, indent, loose, quotes, sentence, width
+
+For example:
+
+ perldoc -o term -w indent:5 Some::Modulename
+
+=head1 CAVEAT
+
+This module may change to use a different text formatter class in the
+future, and this may change what options are supported.
+
+=head1 SEE ALSO
+
+L<Pod::Text>, L<Pod::Text::Termcap>, L<Pod::Perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2011 Mark Allen.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of either: the GNU General Public License as published
+by the Free Software Foundation; or the Artistic License.
+
+See http://dev.perl.org/licenses/ for more information.
+
+=head1 AUTHOR
+
+Mark Allen C<< <mallen at cpan.org> >>
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToText.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToText.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToText.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,98 @@
+package Pod::Perldoc::ToText;
+use strict;
+use warnings;
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+use parent qw(Pod::Perldoc::BaseTo);
+
+sub is_pageable { 1 }
+sub write_with_binmode { 0 }
+sub output_extension { 'txt' }
+
+use Pod::Text ();
+
+sub alt { shift->_perldoc_elem('alt' , @_) }
+sub indent { shift->_perldoc_elem('indent' , @_) }
+sub loose { shift->_perldoc_elem('loose' , @_) }
+sub quotes { shift->_perldoc_elem('quotes' , @_) }
+sub sentence { shift->_perldoc_elem('sentence', @_) }
+sub width { shift->_perldoc_elem('width' , @_) }
+
+sub new { return bless {}, ref($_[0]) || $_[0] }
+
+sub parse_from_file {
+ my $self = shift;
+
+ my @options =
+ map {; $_, $self->{$_} }
+ grep !m/^_/s,
+ keys %$self
+ ;
+
+ defined(&Pod::Perldoc::DEBUG)
+ and Pod::Perldoc::DEBUG()
+ and print "About to call new Pod::Text ",
+ $Pod::Text::VERSION ? "(v$Pod::Text::VERSION) " : '',
+ "with options: ",
+ @options ? "[@options]" : "(nil)", "\n";
+ ;
+
+ Pod::Text->new(@options)->parse_from_file(@_);
+}
+
+1;
+
+=head1 NAME
+
+Pod::Perldoc::ToText - let Perldoc render Pod as plaintext
+
+=head1 SYNOPSIS
+
+ perldoc -o text Some::Modulename
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Pod::Text as a formatter class.
+
+It supports the following options, which are explained in
+L<Pod::Text>: alt, indent, loose, quotes, sentence, width
+
+For example:
+
+ perldoc -o text -w indent:5 Some::Modulename
+
+=head1 CAVEAT
+
+This module may change to use a different text formatter class in the
+future, and this may change what options are supported.
+
+=head1 SEE ALSO
+
+L<Pod::Text>, L<Pod::Perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002 Sean M. Burke. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToTk.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToTk.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToTk.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,154 @@
+package Pod::Perldoc::ToTk;
+use strict;
+use warnings;
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+use parent qw(Pod::Perldoc::BaseTo);
+
+sub is_pageable { 1 }
+sub write_with_binmode { 0 }
+sub output_extension { 'txt' } # doesn't matter
+sub if_zero_length { } # because it will be 0-length!
+sub new { return bless {}, ref($_[0]) || $_[0] }
+
+# TODO: document these and their meanings...
+sub tree { shift->_perldoc_elem('tree' , @_) }
+sub tk_opt { shift->_perldoc_elem('tk_opt' , @_) }
+sub forky { shift->_perldoc_elem('forky' , @_) }
+
+use Pod::Perldoc ();
+use File::Spec::Functions qw(catfile);
+
+BEGIN{ # Tk is not core, but this is
+ eval { require Tk } ||
+ __PACKAGE__->die( <<"HERE" );
+You must have the Tk module to use Pod::Perldoc::ToTk.
+If you have it installed, ensure it's in your Perl library
+path.
+HERE
+
+ __PACKAGE__->die(
+ __PACKAGE__,
+ " doesn't work nice with Tk.pm version $Tk::VERSION"
+ ) if $Tk::VERSION eq '800.003';
+ }
+
+
+BEGIN { eval { require Tk::FcyEntry; }; };
+BEGIN{ # Tk::Pod is not core, but this is
+ eval { require Tk::Pod } ||
+ __PACKAGE__->die( <<"HERE" );
+You must have the Tk::Pod module to use Pod::Perldoc::ToTk.
+If you have it installed, ensure it's in your Perl library
+path.
+HERE
+ }
+
+# The following was adapted from "tkpod" in the Tk-Pod dist.
+
+sub parse_from_file {
+
+ my($self, $Input_File) = @_;
+ if($self->{'forky'}) {
+ return if fork; # i.e., parent process returns
+ }
+
+ $Input_File =~ s{\\}{/}g
+ if $self->is_mswin32 or $self->is_dos
+ # and maybe OS/2
+ ;
+
+ my($tk_opt, $tree);
+ $tree = $self->{'tree' };
+ $tk_opt = $self->{'tk_opt'};
+
+ #require Tk::ErrorDialog;
+
+ # Add 'Tk' subdirectories to search path so, e.g.,
+ # 'Scrolled' will find doc in 'Tk/Scrolled'
+
+ if( $tk_opt ) {
+ push @INC, grep -d $_, map catfile($_,'Tk'), @INC;
+ }
+
+ my $mw = MainWindow->new();
+ #eval 'use blib "/home/e/eserte/src/perl/Tk-App";require Tk::App::Debug';
+ $mw->withdraw;
+
+ # CDE use Font Settings if available
+ my $ufont = $mw->optionGet('userFont','UserFont'); # fixed width
+ my $sfont = $mw->optionGet('systemFont','SystemFont'); # proportional
+ if (defined($ufont) and defined($sfont)) {
+ foreach ($ufont, $sfont) { s/:$//; };
+ $mw->optionAdd('*Font', $sfont);
+ $mw->optionAdd('*Entry.Font', $ufont);
+ $mw->optionAdd('*Text.Font', $ufont);
+ }
+
+ $mw->optionAdd('*Menu.tearOff', $Tk::platform ne 'MSWin32' ? 1 : 0);
+
+ $mw->Pod(
+ '-file' => $Input_File,
+ (($Tk::Pod::VERSION >= 4) ? ('-tree' => $tree) : ())
+ )->focusNext;
+
+ # xxx dirty but it works. A simple $mw->destroy if $mw->children
+ # does not work because Tk::ErrorDialogs could be created.
+ # (they are withdrawn after Ok instead of destory'ed I guess)
+
+ if ($mw->children) {
+ $mw->repeat(1000, sub {
+ # ErrorDialog is withdrawn not deleted :-(
+ foreach ($mw->children) {
+ return if "$_" =~ /^Tk::Pod/ # ->isa('Tk::Pod')
+ }
+ $mw->destroy;
+ });
+ } else {
+ $mw->destroy;
+ }
+ #$mw->WidgetDump;
+ MainLoop();
+
+ exit if $self->{'forky'}; # we were the child! so exit now!
+ return;
+}
+
+1;
+__END__
+
+
+=head1 NAME
+
+Pod::Perldoc::ToTk - let Perldoc use Tk::Pod to render Pod
+
+=head1 SYNOPSIS
+
+ perldoc -o tk Some::Modulename &
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Tk::Pod as a formatter class.
+
+You have to have installed Tk::Pod first, or this class won't load.
+
+=head1 SEE ALSO
+
+L<Tk::Pod>, L<Pod::Perldoc>
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>;
+Sean M. Burke C<< <sburke at cpan.org> >>;
+significant portions copied from
+F<tkpod> in the Tk::Pod dist, by Nick Ing-Simmons, Slaven Rezic, et al.
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToXml.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToXml.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToXml.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,63 @@
+package Pod::Perldoc::ToXml;
+use strict;
+use warnings;
+use vars qw($VERSION);
+
+use parent qw( Pod::Simple::XMLOutStream );
+
+use vars qw($VERSION);
+$VERSION = '3.19';
+
+sub is_pageable { 0 }
+sub write_with_binmode { 0 }
+sub output_extension { 'xml' }
+
+1;
+__END__
+
+=head1 NAME
+
+Pod::Perldoc::ToXml - let Perldoc render Pod as XML
+
+=head1 SYNOPSIS
+
+ perldoc -o xml -d out.xml Some::Modulename
+
+=head1 DESCRIPTION
+
+This is a "plug-in" class that allows Perldoc to use
+Pod::Simple::XMLOutStream as a formatter class.
+
+This is actually a Pod::Simple::XMLOutStream subclass, and inherits
+all its options.
+
+You have to have installed Pod::Simple::XMLOutStream (from the Pod::Simple
+dist), or this class won't work.
+
+
+=head1 SEE ALSO
+
+L<Pod::Simple::XMLOutStream>, L<Pod::Simple>, L<Pod::Perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002 Sean M. Burke. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1960 @@
+use 5.006; # we use some open(X, "<", $y) syntax
+
+package Pod::Perldoc;
+use strict;
+use warnings;
+use Config '%Config';
+
+use Fcntl; # for sysopen
+use File::Basename qw(basename);
+use File::Spec::Functions qw(catfile catdir splitdir);
+
+use vars qw($VERSION @Pagers $Bindir $Pod2man
+ $Temp_Files_Created $Temp_File_Lifetime
+);
+$VERSION = '3.19';
+
+#..........................................................................
+
+BEGIN { # Make a DEBUG constant very first thing...
+ unless(defined &DEBUG) {
+ if(($ENV{'PERLDOCDEBUG'} || '') =~ m/^(\d+)/) { # untaint
+ eval("sub DEBUG () {$1}");
+ die "WHAT? Couldn't eval-up a DEBUG constant!? $@" if $@;
+ } else {
+ *DEBUG = sub () {0};
+ }
+ }
+}
+
+use Pod::Perldoc::GetOptsOO; # uses the DEBUG.
+use Carp qw(croak carp);
+
+# these are also in BaseTo, which I don't want to inherit
+sub debugging {
+ my $self = shift;
+
+ ( defined(&Pod::Perldoc::DEBUG) and &Pod::Perldoc::DEBUG() )
+ }
+
+sub debug {
+ my( $self, @messages ) = @_;
+ return unless $self->debugging;
+ print STDERR map { "DEBUG : $_" } @messages;
+ }
+
+sub warn {
+ my( $self, @messages ) = @_;
+
+ carp( join "\n", @messages, '' );
+ }
+
+sub die {
+ my( $self, @messages ) = @_;
+
+ croak( join "\n", @messages, '' );
+ }
+
+#..........................................................................
+
+sub TRUE () {1}
+sub FALSE () {return}
+sub BE_LENIENT () {1}
+
+BEGIN {
+ *is_vms = $^O eq 'VMS' ? \&TRUE : \&FALSE unless defined &is_vms;
+ *is_mswin32 = $^O eq 'MSWin32' ? \&TRUE : \&FALSE unless defined &is_mswin32;
+ *is_dos = $^O eq 'dos' ? \&TRUE : \&FALSE unless defined &is_dos;
+ *is_os2 = $^O eq 'os2' ? \&TRUE : \&FALSE unless defined &is_os2;
+ *is_cygwin = $^O eq 'cygwin' ? \&TRUE : \&FALSE unless defined &is_cygwin;
+ *is_linux = $^O eq 'linux' ? \&TRUE : \&FALSE unless defined &is_linux;
+ *is_hpux = $^O =~ m/hpux/ ? \&TRUE : \&FALSE unless defined &is_hpux;
+}
+
+$Temp_File_Lifetime ||= 60 * 60 * 24 * 5;
+ # If it's older than five days, it's quite unlikely
+ # that anyone's still looking at it!!
+ # (Currently used only by the MSWin cleanup routine)
+
+
+#..........................................................................
+{ my $pager = $Config{'pager'};
+ push @Pagers, $pager if -x (split /\s+/, $pager)[0] or __PACKAGE__->is_vms;
+}
+$Bindir = $Config{'scriptdirexp'};
+$Pod2man = "pod2man" . ( $Config{'versiononly'} ? $Config{'version'} : '' );
+
+# End of class-init stuff
+#
+###########################################################################
+#
+# Option accessors...
+
+foreach my $subname (map "opt_$_", split '', q{mhlDriFfXqnTdULv}) {
+ no strict 'refs';
+ *$subname = do{ use strict 'refs'; sub () { shift->_elem($subname, @_) } };
+}
+
+# And these are so that GetOptsOO knows they take options:
+sub opt_f_with { shift->_elem('opt_f', @_) }
+sub opt_q_with { shift->_elem('opt_q', @_) }
+sub opt_d_with { shift->_elem('opt_d', @_) }
+sub opt_L_with { shift->_elem('opt_L', @_) }
+sub opt_v_with { shift->_elem('opt_v', @_) }
+
+sub opt_w_with { # Specify an option for the formatter subclass
+ my($self, $value) = @_;
+ if($value =~ m/^([-_a-zA-Z][-_a-zA-Z0-9]*)(?:[=\:](.*?))?$/s) {
+ my $option = $1;
+ my $option_value = defined($2) ? $2 : "TRUE";
+ $option =~ tr/\-/_/s; # tolerate "foo-bar" for "foo_bar"
+ $self->add_formatter_option( $option, $option_value );
+ } else {
+ $self->warn( qq("$value" isn't a good formatter option name. I'm ignoring it!\n ) );
+ }
+ return;
+}
+
+sub opt_M_with { # specify formatter class name(s)
+ my($self, $classes) = @_;
+ return unless defined $classes and length $classes;
+ DEBUG > 4 and print "Considering new formatter classes -M$classes\n";
+ my @classes_to_add;
+ foreach my $classname (split m/[,;]+/s, $classes) {
+ next unless $classname =~ m/\S/;
+ if( $classname =~ m/^(\w+(::\w+)+)$/s ) {
+ # A mildly restrictive concept of what modulenames are valid.
+ push @classes_to_add, $1; # untaint
+ } else {
+ $self->warn( qq("$classname" isn't a valid classname. Ignoring.\n) );
+ }
+ }
+
+ unshift @{ $self->{'formatter_classes'} }, @classes_to_add;
+
+ DEBUG > 3 and print(
+ "Adding @classes_to_add to the list of formatter classes, "
+ . "making them @{ $self->{'formatter_classes'} }.\n"
+ );
+
+ return;
+}
+
+sub opt_V { # report version and exit
+ print join '',
+ "Perldoc v$VERSION, under perl v$] for $^O",
+
+ (defined(&Win32::BuildNumber) and defined &Win32::BuildNumber())
+ ? (" (win32 build ", &Win32::BuildNumber(), ")") : (),
+
+ (chr(65) eq 'A') ? () : " (non-ASCII)",
+
+ "\n",
+ ;
+ exit;
+}
+
+sub opt_t { # choose plaintext as output format
+ my $self = shift;
+ $self->opt_o_with('text') if @_ and $_[0];
+ return $self->_elem('opt_t', @_);
+}
+
+sub opt_u { # choose raw pod as output format
+ my $self = shift;
+ $self->opt_o_with('pod') if @_ and $_[0];
+ return $self->_elem('opt_u', @_);
+}
+
+sub opt_n_with {
+ # choose man as the output format, and specify the proggy to run
+ my $self = shift;
+ $self->opt_o_with('man') if @_ and $_[0];
+ $self->_elem('opt_n', @_);
+}
+
+sub opt_o_with { # "o" for output format
+ my($self, $rest) = @_;
+ return unless defined $rest and length $rest;
+ if($rest =~ m/^(\w+)$/s) {
+ $rest = $1; #untaint
+ } else {
+ $self->warn( qq("$rest" isn't a valid output format. Skipping.\n") );
+ return;
+ }
+
+ $self->aside("Noting \"$rest\" as desired output format...\n");
+
+ # Figure out what class(es) that could actually mean...
+
+ my @classes;
+ foreach my $prefix ("Pod::Perldoc::To", "Pod::Simple::", "Pod::") {
+ # Messy but smart:
+ foreach my $stem (
+ $rest, # Yes, try it first with the given capitalization
+ "\L$rest", "\L\u$rest", "\U$rest" # And then try variations
+
+ ) {
+ $self->aside("Considering $prefix$stem\n");
+ push @classes, $prefix . $stem;
+ }
+
+ # Tidier, but misses too much:
+ #push @classes, $prefix . ucfirst(lc($rest));
+ }
+ $self->opt_M_with( join ";", @classes );
+ return;
+}
+
+###########################################################################
+# % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+
+sub run { # to be called by the "perldoc" executable
+ my $class = shift;
+ if(DEBUG > 3) {
+ print "Parameters to $class\->run:\n";
+ my @x = @_;
+ while(@x) {
+ $x[1] = '<undef>' unless defined $x[1];
+ $x[1] = "@{$x[1]}" if ref( $x[1] ) eq 'ARRAY';
+ print " [$x[0]] => [$x[1]]\n";
+ splice @x,0,2;
+ }
+ print "\n";
+ }
+ return $class -> new(@_) -> process() || 0;
+}
+
+# % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+###########################################################################
+
+sub new { # yeah, nothing fancy
+ my $class = shift;
+ my $new = bless {@_}, (ref($class) || $class);
+ DEBUG > 1 and print "New $class object $new\n";
+ $new->init();
+ $new;
+}
+
+#..........................................................................
+
+sub aside { # If we're in -D or DEBUG mode, say this.
+ my $self = shift;
+ if( DEBUG or $self->opt_D ) {
+ my $out = join( '',
+ DEBUG ? do {
+ my $callsub = (caller(1))[3];
+ my $package = quotemeta(__PACKAGE__ . '::');
+ $callsub =~ s/^$package/'/os;
+ # the o is justified, as $package really won't change.
+ $callsub . ": ";
+ } : '',
+ @_,
+ );
+ if(DEBUG) { print $out } else { print STDERR $out }
+ }
+ return;
+}
+
+#..........................................................................
+
+sub usage {
+ my $self = shift;
+ $self->warn( "@_\n" ) if @_;
+
+ # Erase evidence of previous errors (if any), so exit status is simple.
+ $! = 0;
+
+ CORE::die( <<EOF );
+perldoc [options] PageName|ModuleName|ProgramName|URL...
+perldoc [options] -f BuiltinFunction
+perldoc [options] -q FAQRegex
+perldoc [options] -v PerlVariable
+
+Options:
+ -h Display this help message
+ -V Report version
+ -r Recursive search (slow)
+ -i Ignore case
+ -t Display pod using pod2text instead of Pod::Man and groff
+ (-t is the default on win32 unless -n is specified)
+ -u Display unformatted pod text
+ -m Display module's file in its entirety
+ -n Specify replacement for groff
+ -l Display the module's file name
+ -F Arguments are file names, not modules
+ -D Verbosely describe what's going on
+ -T Send output to STDOUT without any pager
+ -d output_filename_to_send_to
+ -o output_format_name
+ -M FormatterModuleNameToUse
+ -w formatter_option:option_value
+ -L translation_code Choose doc translation (if any)
+ -X Use index if present (looks for pod.idx at $Config{archlib})
+ -q Search the text of questions (not answers) in perlfaq[1-9]
+ -f Search Perl built-in functions
+ -v Search predefined Perl variables
+
+PageName|ModuleName|ProgramName|URL...
+ is the name of a piece of documentation that you want to look at. You
+ may either give a descriptive name of the page (as in the case of
+ `perlfunc') the name of a module, either like `Term::Info' or like
+ `Term/Info', or the name of a program, like `perldoc', or a URL
+ starting with http(s).
+
+BuiltinFunction
+ is the name of a perl function. Will extract documentation from
+ `perlfunc' or `perlop'.
+
+FAQRegex
+ is a regex. Will search perlfaq[1-9] for and extract any
+ questions that match.
+
+Any switches in the PERLDOC environment variable will be used before the
+command line arguments. The optional pod index file contains a list of
+filenames, one per line.
+ [Perldoc v$VERSION]
+EOF
+
+}
+
+#..........................................................................
+
+sub program_name {
+ my( $self ) = @_;
+
+ if( my $link = readlink( $0 ) ) {
+ $self->debug( "The value in $0 is a symbolic link to $link\n" );
+ }
+
+ my $basename = basename( $0 );
+
+ $self->debug( "\$0 is [$0]\nbasename is [$basename]\n" );
+ # possible name forms
+ # perldoc
+ # perldoc-v5.14
+ # perldoc-5.14
+ # perldoc-5.14.2
+ # perlvar # an alias mentioned in Camel 3
+ {
+ my( $untainted ) = $basename =~ m/(
+ \A
+ perl
+ (?: doc | func | faq | help | op | toc | var # Camel 3
+ )
+ (?: -? v? \d+ \. \d+ (?:\. \d+)? )? # possible version
+ (?: \. (?: bat | exe | com ) )? # possible extension
+ \z
+ )
+ /x;
+
+ $self->debug($untainted);
+ return $untainted if $untainted;
+ }
+
+ $self->warn(<<"HERE");
+You called the perldoc command with a name that I didn't recognize.
+This might mean that someone is tricking you into running a
+program you don't intend to use, but it also might mean that you
+created your own link to perldoc. I think your program name is
+[$basename].
+
+I'll allow this if the filename only has [a-zA-Z0-9._-].
+HERE
+
+ {
+ my( $untainted ) = $basename =~ m/(
+ \A [a-zA-Z0-9._-]+ \z
+ )/x;
+
+ $self->debug($untainted);
+ return $untainted if $untainted;
+ }
+
+ $self->die(<<"HERE");
+I think that your name for perldoc is potentially unsafe, so I'm
+going to disallow it. I'd rather you be safe than sorry. If you
+intended to use the name I'm disallowing, please tell the maintainers
+about it. Write to:
+
+ Pod-Perldoc\@rt.cpan.org
+
+HERE
+}
+
+#..........................................................................
+
+sub usage_brief {
+ my $self = shift;
+ my $program_name = $self->program_name;
+
+ CORE::die( <<"EOUSAGE" );
+Usage: $program_name [-hVriDtumFXlT] [-n nroffer_program]
+ [-d output_filename] [-o output_format] [-M FormatterModule]
+ [-w formatter_option:option_value] [-L translation_code]
+ PageName|ModuleName|ProgramName
+
+Examples:
+
+ $program_name -f PerlFunc
+ $program_name -q FAQKeywords
+ $program_name -v PerlVar
+
+The -h option prints more help. Also try "$program_name perldoc" to get
+acquainted with the system. [Perldoc v$VERSION]
+EOUSAGE
+
+}
+
+#..........................................................................
+
+sub pagers { @{ shift->{'pagers'} } }
+
+#..........................................................................
+
+sub _elem { # handy scalar meta-accessor: shift->_elem("foo", @_)
+ if(@_ > 2) { return $_[0]{ $_[1] } = $_[2] }
+ else { return $_[0]{ $_[1] } }
+}
+#..........................................................................
+###########################################################################
+#
+# Init formatter switches, and start it off with __bindir and all that
+# other stuff that ToMan.pm needs.
+#
+
+sub init {
+ my $self = shift;
+
+ # Make sure creat()s are neither too much nor too little
+ eval { umask(0077) }; # doubtless someone has no mask
+
+ $self->{'args'} ||= \@ARGV;
+ $self->{'found'} ||= [];
+ $self->{'temp_file_list'} ||= [];
+
+
+ $self->{'target'} = undef;
+
+ $self->init_formatter_class_list;
+
+ $self->{'pagers' } = [@Pagers] unless exists $self->{'pagers'};
+ $self->{'bindir' } = $Bindir unless exists $self->{'bindir'};
+ $self->{'pod2man'} = $Pod2man unless exists $self->{'pod2man'};
+
+ push @{ $self->{'formatter_switches'} = [] }, (
+ # Yeah, we could use a hashref, but maybe there's some class where options
+ # have to be ordered; so we'll use an arrayref.
+
+ [ '__bindir' => $self->{'bindir' } ],
+ [ '__pod2man' => $self->{'pod2man'} ],
+ );
+
+ DEBUG > 3 and printf "Formatter switches now: [%s]\n",
+ join ' ', map "[@$_]", @{ $self->{'formatter_switches'} };
+
+ $self->{'translators'} = [];
+ $self->{'extra_search_dirs'} = [];
+
+ return;
+}
+
+#..........................................................................
+
+sub init_formatter_class_list {
+ my $self = shift;
+ $self->{'formatter_classes'} ||= [];
+
+ # Remember, no switches have been read yet, when
+ # we've started this routine.
+
+ $self->opt_M_with('Pod::Perldoc::ToPod'); # the always-there fallthru
+ $self->opt_o_with('text');
+ $self->opt_o_with('man') unless $self->is_mswin32 || $self->is_dos
+ || !($ENV{TERM} && (
+ ($ENV{TERM} || '') !~ /dumb|emacs|none|unknown/i
+ ));
+
+ return;
+}
+
+#..........................................................................
+
+sub process {
+ # if this ever returns, its retval will be used for exit(RETVAL)
+
+ my $self = shift;
+ DEBUG > 1 and print " Beginning process.\n";
+ DEBUG > 1 and print " Args: @{$self->{'args'}}\n\n";
+ if(DEBUG > 3) {
+ print "Object contents:\n";
+ my @x = %$self;
+ while(@x) {
+ $x[1] = '<undef>' unless defined $x[1];
+ $x[1] = "@{$x[1]}" if ref( $x[1] ) eq 'ARRAY';
+ print " [$x[0]] => [$x[1]]\n";
+ splice @x,0,2;
+ }
+ print "\n";
+ }
+
+ # TODO: make it deal with being invoked as various different things
+ # such as perlfaq".
+
+ return $self->usage_brief unless @{ $self->{'args'} };
+ $self->pagers_guessing;
+ $self->options_reading;
+ $self->aside(sprintf "$0 => %s v%s\n", ref($self), $self->VERSION);
+ $self->drop_privs_maybe;
+ $self->options_processing;
+
+ # Hm, we have @pages and @found, but we only really act on one
+ # file per call, with the exception of the opt_q hack, and with
+ # -l things
+
+ $self->aside("\n");
+
+ my @pages;
+ $self->{'pages'} = \@pages;
+ if( $self->opt_f) { @pages = qw(perlfunc perlop) }
+ elsif( $self->opt_q) { @pages = ("perlfaq1" .. "perlfaq9") }
+ elsif( $self->opt_v) { @pages = ("perlvar") }
+ else { @pages = @{$self->{'args'}};
+ # @pages = __FILE__
+ # if @pages == 1 and $pages[0] eq 'perldoc';
+ }
+
+ return $self->usage_brief unless @pages;
+
+ $self->find_good_formatter_class();
+ $self->formatter_sanity_check();
+
+ $self->maybe_diddle_INC();
+ # for when we're apparently in a module or extension directory
+
+ my @found = $self->grand_search_init(\@pages);
+ exit ($self->is_vms ? 98962 : 1) unless @found;
+
+ if ($self->opt_l and not $self->opt_q ) {
+ DEBUG and print "We're in -l mode, so byebye after this:\n";
+ print join("\n", @found), "\n";
+ return;
+ }
+
+ $self->tweak_found_pathnames(\@found);
+ $self->assert_closing_stdout;
+ return $self->page_module_file(@found) if $self->opt_m;
+ DEBUG > 2 and print "Found: [@found]\n";
+
+ return $self->render_and_page(\@found);
+}
+
+#..........................................................................
+{
+
+my( %class_seen, %class_loaded );
+sub find_good_formatter_class {
+ my $self = $_[0];
+ my @class_list = @{ $self->{'formatter_classes'} || [] };
+ $self->die( "WHAT? Nothing in the formatter class list!?" ) unless @class_list;
+
+ my $good_class_found;
+ foreach my $c (@class_list) {
+ DEBUG > 4 and print "Trying to load $c...\n";
+ if($class_loaded{$c}) {
+ DEBUG > 4 and print "OK, the already-loaded $c it is!\n";
+ $good_class_found = $c;
+ last;
+ }
+
+ if($class_seen{$c}) {
+ DEBUG > 4 and print
+ "I've tried $c before, and it's no good. Skipping.\n";
+ next;
+ }
+
+ $class_seen{$c} = 1;
+
+ if( $c->can('parse_from_file') ) {
+ DEBUG > 4 and print
+ "Interesting, the formatter class $c is already loaded!\n";
+
+ } elsif(
+ ( $self->is_os2 or $self->is_mswin32 or $self->is_dos or $self->is_os2)
+ # the always case-insensitive filesystems
+ and $class_seen{lc("~$c")}++
+ ) {
+ DEBUG > 4 and print
+ "We already used something quite like \"\L$c\E\", so no point using $c\n";
+ # This avoids redefining the package.
+ } else {
+ DEBUG > 4 and print "Trying to eval 'require $c'...\n";
+
+ local $^W = $^W;
+ if(DEBUG() or $self->opt_D) {
+ # feh, let 'em see it
+ } else {
+ $^W = 0;
+ # The average user just has no reason to be seeing
+ # $^W-suppressible warnings from the the require!
+ }
+
+ eval "require $c";
+ if($@) {
+ DEBUG > 4 and print "Couldn't load $c: $!\n";
+ next;
+ }
+ }
+
+ if( $c->can('parse_from_file') ) {
+ DEBUG > 4 and print "Settling on $c\n";
+ my $v = $c->VERSION;
+ $v = ( defined $v and length $v ) ? " version $v" : '';
+ $self->aside("Formatter class $c$v successfully loaded!\n");
+ $good_class_found = $c;
+ last;
+ } else {
+ DEBUG > 4 and print "Class $c isn't a formatter?! Skipping.\n";
+ }
+ }
+
+ $self->die( "Can't find any loadable formatter class in @class_list?!\nAborting" )
+ unless $good_class_found;
+
+ $self->{'formatter_class'} = $good_class_found;
+ $self->aside("Will format with the class $good_class_found\n");
+
+ return;
+}
+
+}
+#..........................................................................
+
+sub formatter_sanity_check {
+ my $self = shift;
+ my $formatter_class = $self->{'formatter_class'}
+ || $self->die( "NO FORMATTER CLASS YET!?" );
+
+ if(!$self->opt_T # so -T can FORCE sending to STDOUT
+ and $formatter_class->can('is_pageable')
+ and !$formatter_class->is_pageable
+ and !$formatter_class->can('page_for_perldoc')
+ ) {
+ my $ext =
+ ($formatter_class->can('output_extension')
+ && $formatter_class->output_extension
+ ) || '';
+ $ext = ".$ext" if length $ext;
+
+ my $me = $self->program_name;
+ $self->die(
+ "When using Perldoc to format with $formatter_class, you have to\n"
+ . "specify -T or -dsomefile$ext\n"
+ . "See `$me perldoc' for more information on those switches.\n" )
+ ;
+ }
+}
+
+#..........................................................................
+
+sub render_and_page {
+ my($self, $found_list) = @_;
+
+ $self->maybe_generate_dynamic_pod($found_list);
+
+ my($out, $formatter) = $self->render_findings($found_list);
+
+ if($self->opt_d) {
+ printf "Perldoc (%s) output saved to %s\n",
+ $self->{'formatter_class'} || ref($self),
+ $out;
+ print "But notice that it's 0 bytes long!\n" unless -s $out;
+
+
+ } elsif( # Allow the formatter to "page" itself, if it wants.
+ $formatter->can('page_for_perldoc')
+ and do {
+ $self->aside("Going to call $formatter\->page_for_perldoc(\"$out\")\n");
+ if( $formatter->page_for_perldoc($out, $self) ) {
+ $self->aside("page_for_perldoc returned true, so NOT paging with $self.\n");
+ 1;
+ } else {
+ $self->aside("page_for_perldoc returned false, so paging with $self instead.\n");
+ '';
+ }
+ }
+ ) {
+ # Do nothing, since the formatter has "paged" it for itself.
+
+ } else {
+ # Page it normally (internally)
+
+ if( -s $out ) { # Usual case:
+ $self->page($out, $self->{'output_to_stdout'}, $self->pagers);
+
+ } else {
+ # Odd case:
+ $self->aside("Skipping $out (from $$found_list[0] "
+ . "via $$self{'formatter_class'}) as it is 0-length.\n");
+
+ push @{ $self->{'temp_file_list'} }, $out;
+ $self->unlink_if_temp_file($out);
+ }
+ }
+
+ $self->after_rendering(); # any extra cleanup or whatever
+
+ return;
+}
+
+#..........................................................................
+
+sub options_reading {
+ my $self = shift;
+
+ if( defined $ENV{"PERLDOC"} and length $ENV{"PERLDOC"} ) {
+ require Text::ParseWords;
+ $self->aside("Noting env PERLDOC setting of $ENV{'PERLDOC'}\n");
+ # Yes, appends to the beginning
+ unshift @{ $self->{'args'} },
+ Text::ParseWords::shellwords( $ENV{"PERLDOC"} )
+ ;
+ DEBUG > 1 and print " Args now: @{$self->{'args'}}\n\n";
+ } else {
+ DEBUG > 1 and print " Okay, no PERLDOC setting in ENV.\n";
+ }
+
+ DEBUG > 1
+ and print " Args right before switch processing: @{$self->{'args'}}\n";
+
+ Pod::Perldoc::GetOptsOO::getopts( $self, $self->{'args'}, 'YES' )
+ or return $self->usage;
+
+ DEBUG > 1
+ and print " Args after switch processing: @{$self->{'args'}}\n";
+
+ return $self->usage if $self->opt_h;
+
+ return;
+}
+
+#..........................................................................
+
+sub options_processing {
+ my $self = shift;
+
+ if ($self->opt_X) {
+ my $podidx = "$Config{'archlib'}/pod.idx";
+ $podidx = "" unless -f $podidx && -r _ && -M _ <= 7;
+ $self->{'podidx'} = $podidx;
+ }
+
+ $self->{'output_to_stdout'} = 1 if $self->opt_T or ! -t STDOUT;
+
+ $self->options_sanity;
+
+ # This used to set a default, but that's now moved into any
+ # formatter that cares to have a default.
+ if( $self->opt_n ) {
+ $self->add_formatter_option( '__nroffer' => $self->opt_n );
+ }
+
+ # Get language from PERLDOC_POD2 environment variable
+ if ( ! $self->opt_L && $ENV{PERLDOC_POD2} ) {
+ if ( $ENV{PERLDOC_POD2} eq '1' ) {
+ $self->_elem('opt_L',(split(/\_/, $ENV{LC_ALL} || $ENV{LC_LANG} || $ENV{LANG}))[0] );
+ }
+ else {
+ $self->_elem('opt_L', $ENV{PERLDOC_POD2});
+ }
+ };
+
+ # Adjust for using translation packages
+ $self->add_translator(split(/\s+/,$self->opt_L)) if $self->opt_L;
+
+ return;
+}
+
+#..........................................................................
+
+sub options_sanity {
+ my $self = shift;
+
+ # The opts-counting stuff interacts quite badly with
+ # the $ENV{"PERLDOC"} stuff. I.e., if I have $ENV{"PERLDOC"}
+ # set to -t, and I specify -u on the command line, I don't want
+ # to be hectored at that -u and -t don't make sense together.
+
+ #my $opts = grep $_ && 1, # yes, the count of the set ones
+ # $self->opt_t, $self->opt_u, $self->opt_m, $self->opt_l
+ #;
+ #
+ #$self->usage("only one of -t, -u, -m or -l") if $opts > 1;
+
+
+ # Any sanity-checking need doing here?
+
+ # But does not make sense to set either -f or -q in $ENV{"PERLDOC"}
+ if( $self->opt_f or $self->opt_q ) {
+ $self->usage("Only one of -f -or -q") if $self->opt_f and $self->opt_q;
+ $self->warn(
+ "Perldoc is meant for reading one file at a time.\n",
+ "So these parameters are being ignored: ",
+ join(' ', @{$self->{'args'}}),
+ "\n" )
+ if @{$self->{'args'}}
+ }
+ return;
+}
+
+#..........................................................................
+
+sub grand_search_init {
+ my($self, $pages, @found) = @_;
+
+ foreach (@$pages) {
+ if (/^http(s)?:\/\//) {
+ require HTTP::Tiny;
+ require File::Temp;
+ my $response = HTTP::Tiny->new->get($_);
+ if ($response->{success}) {
+ my ($fh, $filename) = File::Temp::tempfile(UNLINK => 1);
+ $fh->print($response->{content});
+ push @found, $filename;
+ ($self->{podnames}{$filename} =
+ m{.*/([^/#?]+)} ? uc $1 : "UNKNOWN")
+ =~ s/\.P(?:[ML]|OD)\z//;
+ }
+ else {
+ print STDERR "No " .
+ ($self->opt_m ? "module" : "documentation") . " found for \"$_\".\n";
+ }
+ next;
+ }
+ if ($self->{'podidx'} && open(PODIDX, $self->{'podidx'})) {
+ my $searchfor = catfile split '::', $_;
+ $self->aside( "Searching for '$searchfor' in $self->{'podidx'}\n" );
+ local $_;
+ while (<PODIDX>) {
+ chomp;
+ push(@found, $_) if m,/$searchfor(?:\.(?:pod|pm))?\z,i;
+ }
+ close(PODIDX) or $self->die( "Can't close $$self{'podidx'}: $!" );
+ next;
+ }
+
+ $self->aside( "Searching for $_\n" );
+
+ if ($self->opt_F) {
+ next unless -r;
+ push @found, $_ if $self->opt_l or $self->opt_m or $self->containspod($_);
+ next;
+ }
+
+ my @searchdirs;
+
+ # prepend extra search directories (including language specific)
+ push @searchdirs, @{ $self->{'extra_search_dirs'} };
+
+ # We must look both in @INC for library modules and in $bindir
+ # for executables, like h2xs or perldoc itself.
+ push @searchdirs, ($self->{'bindir'}, @INC);
+ unless ($self->opt_m) {
+ if ($self->is_vms) {
+ my($i,$trn);
+ for ($i = 0; $trn = $ENV{'DCL$PATH;'.$i}; $i++) {
+ push(@searchdirs,$trn);
+ }
+ push(@searchdirs,'perl_root:[lib.pods]') # installed pods
+ }
+ else {
+ push(@searchdirs, grep(-d, split($Config{path_sep},
+ $ENV{'PATH'})));
+ }
+ }
+ my @files = $self->searchfor(0,$_, at searchdirs);
+ if (@files) {
+ $self->aside( "Found as @files\n" );
+ }
+ # add "perl" prefix, so "perldoc foo" may find perlfoo.pod
+ elsif (BE_LENIENT and !/\W/ and @files = $self->searchfor(0, "perl$_", @searchdirs)) {
+ $self->aside( "Loosely found as @files\n" );
+ }
+ else {
+ # no match, try recursive search
+ @searchdirs = grep(!/^\.\z/s, at INC);
+ @files= $self->searchfor(1,$_, at searchdirs) if $self->opt_r;
+ if (@files) {
+ $self->aside( "Loosely found as @files\n" );
+ }
+ else {
+ print STDERR "No " .
+ ($self->opt_m ? "module" : "documentation") . " found for \"$_\".\n";
+ if ( @{ $self->{'found'} } ) {
+ print STDERR "However, try\n";
+ my $me = $self->program_name;
+ for my $dir (@{ $self->{'found'} }) {
+ opendir(DIR, $dir) or $self->die( "opendir $dir: $!" );
+ while (my $file = readdir(DIR)) {
+ next if ($file =~ /^\./s);
+ $file =~ s/\.(pm|pod)\z//; # XXX: badfs
+ print STDERR "\t$me $_\::$file\n";
+ }
+ closedir(DIR) or $self->die( "closedir $dir: $!" );
+ }
+ }
+ }
+ }
+ push(@found, at files);
+ }
+ return @found;
+}
+
+#..........................................................................
+
+sub maybe_generate_dynamic_pod {
+ my($self, $found_things) = @_;
+ my @dynamic_pod;
+
+ $self->search_perlfunc($found_things, \@dynamic_pod) if $self->opt_f;
+
+ $self->search_perlvar($found_things, \@dynamic_pod) if $self->opt_v;
+
+ $self->search_perlfaqs($found_things, \@dynamic_pod) if $self->opt_q;
+
+ if( ! $self->opt_f and ! $self->opt_q and ! $self->opt_v ) {
+ DEBUG > 4 and print "That's a non-dynamic pod search.\n";
+ } elsif ( @dynamic_pod ) {
+ $self->aside("Hm, I found some Pod from that search!\n");
+ my ($buffd, $buffer) = $self->new_tempfile('pod', 'dyn');
+
+ push @{ $self->{'temp_file_list'} }, $buffer;
+ # I.e., it MIGHT be deleted at the end.
+
+ my $in_list = !$self->not_dynamic && $self->opt_f || $self->opt_v;
+
+ print $buffd "=over 8\n\n" if $in_list;
+ print $buffd @dynamic_pod or $self->die( "Can't print $buffer: $!" );
+ print $buffd "=back\n" if $in_list;
+
+ close $buffd or $self->die( "Can't close $buffer: $!" );
+
+ @$found_things = $buffer;
+ # Yes, so found_things never has more than one thing in
+ # it, by time we leave here
+
+ $self->add_formatter_option('__filter_nroff' => 1);
+
+ } else {
+ @$found_things = ();
+ $self->aside("I found no Pod from that search!\n");
+ }
+
+ return;
+}
+
+#..........................................................................
+
+sub not_dynamic {
+ my ($self,$value) = @_;
+ $self->{__not_dynamic} = $value if @_ == 2;
+ return $self->{__not_dynamic};
+}
+
+#..........................................................................
+
+sub add_formatter_option { # $self->add_formatter_option('key' => 'value');
+ my $self = shift;
+ push @{ $self->{'formatter_switches'} }, [ @_ ] if @_;
+
+ DEBUG > 3 and printf "Formatter switches now: [%s]\n",
+ join ' ', map "[@$_]", @{ $self->{'formatter_switches'} };
+
+ return;
+}
+
+#.........................................................................
+
+sub new_translator { # $tr = $self->new_translator($lang);
+ my $self = shift;
+ my $lang = shift;
+
+ my $pack = 'POD2::' . uc($lang);
+ eval "require $pack";
+ if ( !$@ && $pack->can('new') ) {
+ return $pack->new();
+ }
+
+ eval { require POD2::Base };
+ return if $@;
+
+ return POD2::Base->new({ lang => $lang });
+}
+
+#.........................................................................
+
+sub add_translator { # $self->add_translator($lang);
+ my $self = shift;
+ for my $lang (@_) {
+ my $tr = $self->new_translator($lang);
+ if ( defined $tr ) {
+ push @{ $self->{'translators'} }, $tr;
+ push @{ $self->{'extra_search_dirs'} }, $tr->pod_dirs;
+
+ $self->aside( "translator for '$lang' loaded\n" );
+ } else {
+ # non-installed or bad translator package
+ $self->warn( "Perldoc cannot load translator package for '$lang': ignored\n" );
+ }
+
+ }
+ return;
+}
+
+#..........................................................................
+
+sub search_perlvar {
+ my($self, $found_things, $pod) = @_;
+
+ my $opt = $self->opt_v;
+
+ if ( $opt !~ /^ (?: [\@\%\$]\S+ | [A-Z]\w* ) $/x ) {
+ CORE::die( "'$opt' does not look like a Perl variable\n" );
+ }
+
+ DEBUG > 2 and print "Search: @$found_things\n";
+
+ my $perlvar = shift @$found_things;
+ open(PVAR, "<", $perlvar) # "Funk is its own reward"
+ or $self->die("Can't open $perlvar: $!");
+
+ if ( $opt ne '$0' && $opt =~ /^\$\d+$/ ) { # handle $1, $2, ...
+ $opt = '$<I<digits>>';
+ }
+ my $search_re = quotemeta($opt);
+
+ DEBUG > 2 and
+ print "Going to perlvar-scan for $search_re in $perlvar\n";
+
+ # Skip introduction
+ local $_;
+ while (<PVAR>) {
+ last if /^=over 8/;
+ }
+
+ # Look for our variable
+ my $found = 0;
+ my $inheader = 1;
+ my $inlist = 0;
+ while (<PVAR>) { # "The Mothership Connection is here!"
+ last if /^=head2 Error Indicators/;
+ # \b at the end of $` and friends borks things!
+ if ( m/^=item\s+$search_re\s/ ) {
+ $found = 1;
+ }
+ elsif (/^=item/) {
+ last if $found && !$inheader && !$inlist;
+ }
+ elsif (!/^\s+$/) { # not a blank line
+ if ( $found ) {
+ $inheader = 0; # don't accept more =item (unless inlist)
+ }
+ else {
+ @$pod = (); # reset
+ $inheader = 1; # start over
+ next;
+ }
+ }
+
+ if (/^=over/) {
+ ++$inlist;
+ }
+ elsif (/^=back/) {
+ last if $found && !$inheader && !$inlist;
+ --$inlist;
+ }
+ push @$pod, $_;
+# ++$found if /^\w/; # found descriptive text
+ }
+ @$pod = () unless $found;
+ if (!@$pod) {
+ CORE::die( "No documentation for perl variable '$opt' found\n" );
+ }
+ close PVAR or $self->die( "Can't open $perlvar: $!" );
+
+ return;
+}
+
+#..........................................................................
+
+sub search_perlop {
+ my ($self,$found_things,$pod) = @_;
+
+ $self->not_dynamic( 1 );
+
+ my $perlop = shift @$found_things;
+ open( PERLOP, '<', $perlop ) or $self->die( "Can't open $perlop: $!" );
+
+ my $paragraph = "";
+ my $has_text_seen = 0;
+ my $thing = $self->opt_f;
+ my $list = 0;
+
+ while( my $line = <PERLOP> ){
+ if( $paragraph and $line =~ m!^=(?:head|item)! and $paragraph =~ m!X<+\s*\Q$thing\E\s*>+! ){
+ if( $list ){
+ $paragraph =~ s!=back.*?\z!!s;
+ }
+
+ if( $paragraph =~ m!^=item! ){
+ $paragraph = "=over 8\n\n" . $paragraph . "=back\n";
+ }
+
+ push @$pod, $paragraph;
+ $paragraph = "";
+ $has_text_seen = 0;
+ $list = 0;
+ }
+
+ if( $line =~ m!^=over! ){
+ $list++;
+ }
+ elsif( $line =~ m!^=back! ){
+ $list--;
+ }
+
+ if( $line =~ m!^=(?:head|item)! and $has_text_seen ){
+ $paragraph = "";
+ }
+ elsif( $line !~ m!^=(?:head|item)! and $line !~ m!^\s*$! and $line !~ m!^\s*X<! ){
+ $has_text_seen = 1;
+ }
+
+ $paragraph .= $line;
+ }
+
+ close PERLOP;
+
+ return;
+}
+
+#..........................................................................
+
+sub search_perlfunc {
+ my($self, $found_things, $pod) = @_;
+
+ DEBUG > 2 and print "Search: @$found_things\n";
+
+ my $perlfunc = shift @$found_things;
+ open(PFUNC, "<", $perlfunc) # "Funk is its own reward"
+ or $self->die("Can't open $perlfunc: $!");
+
+ # Functions like -r, -e, etc. are listed under `-X'.
+ my $search_re = ($self->opt_f =~ /^-[rwxoRWXOeszfdlpSbctugkTBMAC]$/)
+ ? '(?:I<)?-X' : quotemeta($self->opt_f) ;
+
+ DEBUG > 2 and
+ print "Going to perlfunc-scan for $search_re in $perlfunc\n";
+
+ my $re = 'Alphabetical Listing of Perl Functions';
+
+ # Check available translator or backup to default (english)
+ if ( $self->opt_L && defined $self->{'translators'}->[0] ) {
+ my $tr = $self->{'translators'}->[0];
+ $re = $tr->search_perlfunc_re if $tr->can('search_perlfunc_re');
+ }
+
+ # Skip introduction
+ local $_;
+ while (<PFUNC>) {
+ last if /^=head2 $re/;
+ }
+
+ # Look for our function
+ my $found = 0;
+ my $inlist = 0;
+
+ my @perlops = qw(m q qq qr qx qw s tr y);
+
+ my @related;
+ my $related_re;
+ while (<PFUNC>) { # "The Mothership Connection is here!"
+ last if( grep{ $self->opt_f eq $_ }@perlops );
+ if ( m/^=item\s+$search_re\b/ ) {
+ $found = 1;
+ }
+ elsif (@related > 1 and /^=item/) {
+ $related_re ||= join "|", @related;
+ if (m/^=item\s+(?:$related_re)\b/) {
+ $found = 1;
+ }
+ else {
+ last;
+ }
+ }
+ elsif (/^=item/) {
+ last if $found > 1 and not $inlist;
+ }
+ elsif ($found and /^X<[^>]+>/) {
+ push @related, m/X<([^>]+)>/g;
+ }
+ next unless $found;
+ if (/^=over/) {
+ ++$inlist;
+ }
+ elsif (/^=back/) {
+ last if $found > 1 and not $inlist;
+ --$inlist;
+ }
+ push @$pod, $_;
+ ++$found if /^\w/; # found descriptive text
+ }
+
+ if( !@$pod ){
+ $self->search_perlop( $found_things, $pod );
+ }
+
+ if (!@$pod) {
+ CORE::die( sprintf
+ "No documentation for perl function '%s' found\n",
+ $self->opt_f )
+ ;
+ }
+ close PFUNC or $self->die( "Can't open $perlfunc: $!" );
+
+ return;
+}
+
+#..........................................................................
+
+sub search_perlfaqs {
+ my( $self, $found_things, $pod) = @_;
+
+ my $found = 0;
+ my %found_in;
+ my $search_key = $self->opt_q;
+
+ my $rx = eval { qr/$search_key/ }
+ or $self->die( <<EOD );
+Invalid regular expression '$search_key' given as -q pattern:
+$@
+Did you mean \\Q$search_key ?
+
+EOD
+
+ local $_;
+ foreach my $file (@$found_things) {
+ $self->die( "invalid file spec: $!" ) if $file =~ /[<>|]/;
+ open(INFAQ, "<", $file) # XXX 5.6ism
+ or $self->die( "Can't read-open $file: $!\nAborting" );
+ while (<INFAQ>) {
+ if ( m/^=head2\s+.*(?:$search_key)/i ) {
+ $found = 1;
+ push @$pod, "=head1 Found in $file\n\n" unless $found_in{$file}++;
+ }
+ elsif (/^=head[12]/) {
+ $found = 0;
+ }
+ next unless $found;
+ push @$pod, $_;
+ }
+ close(INFAQ);
+ }
+ CORE::die("No documentation for perl FAQ keyword '$search_key' found\n")
+ unless @$pod;
+
+ if ( $self->opt_l ) {
+ CORE::die((join "\n", keys %found_in) . "\n");
+ }
+ return;
+}
+
+
+#..........................................................................
+
+sub render_findings {
+ # Return the filename to open
+
+ my($self, $found_things) = @_;
+
+ my $formatter_class = $self->{'formatter_class'}
+ || $self->die( "No formatter class set!?" );
+ my $formatter = $formatter_class->can('new')
+ ? $formatter_class->new
+ : $formatter_class
+ ;
+
+ if(! @$found_things) {
+ $self->die( "Nothing found?!" );
+ # should have been caught before here
+ } elsif(@$found_things > 1) {
+ $self->warn(
+ "Perldoc is only really meant for reading one document at a time.\n",
+ "So these parameters are being ignored: ",
+ join(' ', @$found_things[1 .. $#$found_things] ),
+ "\n" );
+ }
+
+ my $file = $found_things->[0];
+
+ DEBUG > 3 and printf "Formatter switches now: [%s]\n",
+ join ' ', map "[@$_]", @{ $self->{'formatter_switches'} };
+
+ # Set formatter options:
+ if( ref $formatter ) {
+ foreach my $f (@{ $self->{'formatter_switches'} || [] }) {
+ my($switch, $value, $silent_fail) = @$f;
+ if( $formatter->can($switch) ) {
+ eval { $formatter->$switch( defined($value) ? $value : () ) };
+ $self->warn( "Got an error when setting $formatter_class\->$switch:\n$@\n" )
+ if $@;
+ } else {
+ if( $silent_fail or $switch =~ m/^__/s ) {
+ DEBUG > 2 and print "Formatter $formatter_class doesn't support $switch\n";
+ } else {
+ $self->warn( "$formatter_class doesn't recognize the $switch switch.\n" );
+ }
+ }
+ }
+ }
+
+ $self->{'output_is_binary'} =
+ $formatter->can('write_with_binmode') && $formatter->write_with_binmode;
+
+ if( $self->{podnames} and exists $self->{podnames}{$file} and
+ $formatter->can('name') ) {
+ $formatter->name($self->{podnames}{$file});
+ }
+
+ my ($out_fh, $out) = $self->new_output_file(
+ ( $formatter->can('output_extension') && $formatter->output_extension )
+ || undef,
+ $self->useful_filename_bit,
+ );
+
+ # Now, finally, do the formatting!
+ {
+ local $^W = $^W;
+ if(DEBUG() or $self->opt_D) {
+ # feh, let 'em see it
+ } else {
+ $^W = 0;
+ # The average user just has no reason to be seeing
+ # $^W-suppressible warnings from the formatting!
+ }
+
+ eval { $formatter->parse_from_file( $file, $out_fh ) };
+ }
+
+ $self->warn( "Error while formatting with $formatter_class:\n $@\n" ) if $@;
+ DEBUG > 2 and print "Back from formatting with $formatter_class\n";
+
+ close $out_fh
+ or $self->warn( "Can't close $out: $!\n(Did $formatter already close it?)" );
+ sleep 0; sleep 0; sleep 0;
+ # Give the system a few timeslices to meditate on the fact
+ # that the output file does in fact exist and is closed.
+
+ $self->unlink_if_temp_file($file);
+
+ unless( -s $out ) {
+ if( $formatter->can( 'if_zero_length' ) ) {
+ # Basically this is just a hook for Pod::Simple::Checker; since
+ # what other class could /happily/ format an input file with Pod
+ # as a 0-length output file?
+ $formatter->if_zero_length( $file, $out, $out_fh );
+ } else {
+ $self->warn( "Got a 0-length file from $$found_things[0] via $formatter_class!?\n" );
+ }
+ }
+
+ DEBUG and print "Finished writing to $out.\n";
+ return($out, $formatter) if wantarray;
+ return $out;
+}
+
+#..........................................................................
+
+sub unlink_if_temp_file {
+ # Unlink the specified file IFF it's in the list of temp files.
+ # Really only used in the case of -f / -q things when we can
+ # throw away the dynamically generated source pod file once
+ # we've formatted it.
+ #
+ my($self, $file) = @_;
+ return unless defined $file and length $file;
+
+ my $temp_file_list = $self->{'temp_file_list'} || return;
+ if(grep $_ eq $file, @$temp_file_list) {
+ $self->aside("Unlinking $file\n");
+ unlink($file) or $self->warn( "Odd, couldn't unlink $file: $!" );
+ } else {
+ DEBUG > 1 and print "$file isn't a temp file, so not unlinking.\n";
+ }
+ return;
+}
+
+#..........................................................................
+
+
+sub after_rendering {
+ my $self = $_[0];
+ $self->after_rendering_VMS if $self->is_vms;
+ $self->after_rendering_MSWin32 if $self->is_mswin32;
+ $self->after_rendering_Dos if $self->is_dos;
+ $self->after_rendering_OS2 if $self->is_os2;
+ return;
+}
+
+sub after_rendering_VMS { return }
+sub after_rendering_Dos { return }
+sub after_rendering_OS2 { return }
+sub after_rendering_MSWin32 { return }
+
+#..........................................................................
+# : : : : : : : : :
+#..........................................................................
+
+sub minus_f_nocase { # i.e., do like -f, but without regard to case
+
+ my($self, $dir, $file) = @_;
+ my $path = catfile($dir,$file);
+ return $path if -f $path and -r _;
+
+ if(!$self->opt_i
+ or $self->is_vms or $self->is_mswin32
+ or $self->is_dos or $self->is_os2
+ ) {
+ # On a case-forgiving file system, or if case is important,
+ # that is it, all we can do.
+ $self->warn( "Ignored $path: unreadable\n" ) if -f _;
+ return '';
+ }
+
+ local *DIR;
+ my @p = ($dir);
+ my($p,$cip);
+ foreach $p (splitdir $file){
+ my $try = catfile @p, $p;
+ $self->aside("Scrutinizing $try...\n");
+ stat $try;
+ if (-d _) {
+ push @p, $p;
+ if ( $p eq $self->{'target'} ) {
+ my $tmp_path = catfile @p;
+ my $path_f = 0;
+ for (@{ $self->{'found'} }) {
+ $path_f = 1 if $_ eq $tmp_path;
+ }
+ push (@{ $self->{'found'} }, $tmp_path) unless $path_f;
+ $self->aside( "Found as $tmp_path but directory\n" );
+ }
+ }
+ elsif (-f _ && -r _ && lc($try) eq lc($path)) {
+ return $try;
+ }
+ elsif (-f _) {
+ $self->warn( "Ignored $try: unreadable or file/dir mismatch\n" );
+ }
+ elsif (-d catdir(@p)) { # at least we see the containing directory!
+ my $found = 0;
+ my $lcp = lc $p;
+ my $p_dirspec = catdir(@p);
+ opendir DIR, $p_dirspec or $self->die( "opendir $p_dirspec: $!" );
+ while(defined( $cip = readdir(DIR) )) {
+ if (lc $cip eq $lcp){
+ $found++;
+ last; # XXX stop at the first? what if there's others?
+ }
+ }
+ closedir DIR or $self->die( "closedir $p_dirspec: $!" );
+ return "" unless $found;
+
+ push @p, $cip;
+ my $p_filespec = catfile(@p);
+ return $p_filespec if -f $p_filespec and -r _;
+ $self->warn( "Ignored $p_filespec: unreadable\n" ) if -f _;
+ }
+ }
+ return "";
+}
+
+#..........................................................................
+
+sub pagers_guessing {
+ my $self = shift;
+
+ my @pagers;
+ push @pagers, $self->pagers;
+ $self->{'pagers'} = \@pagers;
+
+ if ($self->is_mswin32) {
+ push @pagers, qw( more< less notepad );
+ unshift @pagers, $ENV{PAGER} if $ENV{PAGER};
+ }
+ elsif ($self->is_vms) {
+ push @pagers, qw( most more less type/page );
+ }
+ elsif ($self->is_dos) {
+ push @pagers, qw( less.exe more.com< );
+ unshift @pagers, $ENV{PAGER} if $ENV{PAGER};
+ }
+ else {
+ if ($self->is_os2) {
+ unshift @pagers, 'less', 'cmd /c more <';
+ }
+ push @pagers, qw( more less pg view cat );
+ unshift @pagers, "$ENV{PAGER} <" if $ENV{PAGER};
+ }
+
+ if ($self->is_cygwin) {
+ if (($pagers[0] eq 'less') || ($pagers[0] eq '/usr/bin/less')) {
+ unshift @pagers, '/usr/bin/less -isrR';
+ unshift @pagers, $ENV{PAGER} if $ENV{PAGER};
+ }
+ }
+
+ unshift @pagers, "$ENV{PERLDOC_PAGER} <" if $ENV{PERLDOC_PAGER};
+
+ return;
+}
+
+#..........................................................................
+
+sub page_module_file {
+ my($self, @found) = @_;
+
+ # Security note:
+ # Don't ever just pass this off to anything like MSWin's "start.exe",
+ # since we might be calling on a .pl file, and we wouldn't want that
+ # to actually /execute/ the file that we just want to page thru!
+ # Also a consideration if one were to use a web browser as a pager;
+ # doing so could trigger the browser's MIME mapping for whatever
+ # it thinks .pm/.pl/whatever is. Probably just a (useless and
+ # annoying) "Save as..." dialog, but potentially executing the file
+ # in question -- particularly in the case of MSIE and it's, ahem,
+ # occasionally hazy distinction between OS-local extension
+ # associations, and browser-specific MIME mappings.
+
+ if(@found > 1) {
+ $self->warn(
+ "Perldoc is only really meant for reading one document at a time.\n" .
+ "So these files are being ignored: " .
+ join(' ', @found[1 .. $#found] ) .
+ "\n" )
+ }
+
+ return $self->page($found[0], $self->{'output_to_stdout'}, $self->pagers);
+
+}
+
+#..........................................................................
+
+sub check_file {
+ my($self, $dir, $file) = @_;
+
+ unless( ref $self ) {
+ # Should never get called:
+ $Carp::Verbose = 1;
+ require Carp;
+ Carp::croak( join '',
+ "Crazy ", __PACKAGE__, " error:\n",
+ "check_file must be an object_method!\n",
+ "Aborting"
+ );
+ }
+
+ if(length $dir and not -d $dir) {
+ DEBUG > 3 and print " No dir $dir -- skipping.\n";
+ return "";
+ }
+
+ my $path = $self->minus_f_nocase($dir,$file);
+ if( length $path and ($self->opt_m ? $self->isprintable($path)
+ : $self->containspod($path)) ) {
+ DEBUG > 3 and print
+ " The file $path indeed looks promising!\n";
+ return $path;
+ }
+ DEBUG > 3 and print " No good: $file in $dir\n";
+
+ return "";
+}
+
+sub isprintable {
+ my($self, $file, $readit) = @_;
+ my $size= 1024;
+ my $maxunprintfrac= 0.2; # tolerate some unprintables for UTF-8 comments etc.
+
+ return 1 if !$readit && $file =~ /\.(?:pl|pm|pod|cmd|com|bat)\z/i;
+
+ my $data;
+ local($_);
+ open(TEST,"<", $file) or $self->die( "Can't open $file: $!" );
+ read TEST, $data, $size;
+ close TEST;
+ $size= length($data);
+ $data =~ tr/\x09-\x0D\x20-\x7E//d;
+ return length($data) <= $size*$maxunprintfrac;
+}
+
+#..........................................................................
+
+sub containspod {
+ my($self, $file, $readit) = @_;
+ return 1 if !$readit && $file =~ /\.pod\z/i;
+
+
+ # Under cygwin the /usr/bin/perl is legal executable, but
+ # you cannot open a file with that name. It must be spelled
+ # out as "/usr/bin/perl.exe".
+ #
+ # The following if-case under cygwin prevents error
+ #
+ # $ perldoc perl
+ # Cannot open /usr/bin/perl: no such file or directory
+ #
+ # This would work though
+ #
+ # $ perldoc perl.pod
+
+ if ( $self->is_cygwin and -x $file and -f "$file.exe" )
+ {
+ $self->warn( "Cygwin $file.exe search skipped\n" ) if DEBUG or $self->opt_D;
+ return 0;
+ }
+
+ local($_);
+ open(TEST,"<", $file) or $self->die( "Can't open $file: $!" ); # XXX 5.6ism
+ while (<TEST>) {
+ if (/^=head/) {
+ close(TEST) or $self->die( "Can't close $file: $!" );
+ return 1;
+ }
+ }
+ close(TEST) or $self->die( "Can't close $file: $!" );
+ return 0;
+}
+
+#..........................................................................
+
+sub maybe_diddle_INC {
+ my $self = shift;
+
+ # Does this look like a module or extension directory?
+
+ if (-f "Makefile.PL" || -f "Build.PL") {
+
+ # Add "." and "lib" to @INC (if they exist)
+ eval q{ use lib qw(. lib); 1; } or $self->die;
+
+ # don't add if superuser
+ if ($< && $> && -d "blib") { # don't be looking too hard now!
+ eval q{ use blib; 1 };
+ $self->warn( $@ ) if $@ && $self->opt_D;
+ }
+ }
+
+ return;
+}
+
+#..........................................................................
+
+sub new_output_file {
+ my $self = shift;
+ my $outspec = $self->opt_d; # Yes, -d overrides all else!
+ # So don't call this twice per format-job!
+
+ return $self->new_tempfile(@_) unless defined $outspec and length $outspec;
+
+ # Otherwise open a write-handle on opt_d!f
+
+ my $fh;
+ # If we are running before perl5.6.0, we can't autovivify
+ if ($^V < 5.006) {
+ require Symbol;
+ $fh = Symbol::gensym();
+ }
+ DEBUG > 3 and print "About to try writing to specified output file $outspec\n";
+ $self->die( "Can't write-open $outspec: $!" )
+ unless open($fh, ">", $outspec); # XXX 5.6ism
+
+ DEBUG > 3 and print "Successfully opened $outspec\n";
+ binmode($fh) if $self->{'output_is_binary'};
+ return($fh, $outspec);
+}
+
+#..........................................................................
+
+sub useful_filename_bit {
+ # This tries to provide a meaningful bit of text to do with the query,
+ # such as can be used in naming the file -- since if we're going to be
+ # opening windows on temp files (as a "pager" may well do!) then it's
+ # better if the temp file's name (which may well be used as the window
+ # title) isn't ALL just random garbage!
+ # In other words "perldoc_LWPSimple_2371981429" is a better temp file
+ # name than "perldoc_2371981429". So this routine is what tries to
+ # provide the "LWPSimple" bit.
+ #
+ my $self = shift;
+ my $pages = $self->{'pages'} || return undef;
+ return undef unless @$pages;
+
+ my $chunk = $pages->[0];
+ return undef unless defined $chunk;
+ $chunk =~ s/:://g;
+ $chunk =~ s/\.\w+$//g; # strip any extension
+ if( $chunk =~ m/([^\#\\:\/\$]+)$/s ) { # get basename, if it's a file
+ $chunk = $1;
+ } else {
+ return undef;
+ }
+ $chunk =~ s/[^a-zA-Z0-9]+//g; # leave ONLY a-zA-Z0-9 things!
+ $chunk = substr($chunk, -10) if length($chunk) > 10;
+ return $chunk;
+}
+
+#..........................................................................
+
+sub new_tempfile { # $self->new_tempfile( [$suffix, [$infix] ] )
+ my $self = shift;
+
+ ++$Temp_Files_Created;
+
+ require File::Temp;
+ return File::Temp::tempfile(UNLINK => 1);
+}
+
+#..........................................................................
+
+sub page { # apply a pager to the output file
+ my ($self, $output, $output_to_stdout, @pagers) = @_;
+ if ($output_to_stdout) {
+ $self->aside("Sending unpaged output to STDOUT.\n");
+ open(TMP, "<", $output) or $self->die( "Can't open $output: $!" ); # XXX 5.6ism
+ local $_;
+ while (<TMP>) {
+ print or $self->die( "Can't print to stdout: $!" );
+ }
+ close TMP or $self->die( "Can't close while $output: $!" );
+ $self->unlink_if_temp_file($output);
+ } else {
+ # On VMS, quoting prevents logical expansion, and temp files with no
+ # extension get the wrong default extension (such as .LIS for TYPE)
+
+ $output = VMS::Filespec::rmsexpand($output, '.') if $self->is_vms;
+
+ $output =~ s{/}{\\}g if $self->is_mswin32 || $self->is_dos;
+ # Altho "/" under MSWin is in theory good as a pathsep,
+ # many many corners of the OS don't like it. So we
+ # have to force it to be "\" to make everyone happy.
+
+ foreach my $pager (@pagers) {
+ $self->aside("About to try calling $pager $output\n");
+ if ($self->is_vms) {
+ last if system("$pager $output") == 0;
+ } else {
+ last if system("$pager \"$output\"") == 0;
+ }
+ }
+ }
+ return;
+}
+
+#..........................................................................
+
+sub searchfor {
+ my($self, $recurse,$s, at dirs) = @_;
+ $s =~ s!::!/!g;
+ $s = VMS::Filespec::unixify($s) if $self->is_vms;
+ return $s if -f $s && $self->containspod($s);
+ $self->aside( "Looking for $s in @dirs\n" );
+ my $ret;
+ my $i;
+ my $dir;
+ $self->{'target'} = (splitdir $s)[-1]; # XXX: why not use File::Basename?
+ for ($i=0; $i<@dirs; $i++) {
+ $dir = $dirs[$i];
+ next unless -d $dir;
+ ($dir = VMS::Filespec::unixpath($dir)) =~ s!/\z!! if $self->is_vms;
+ if ( (! $self->opt_m && ( $ret = $self->check_file($dir,"$s.pod")))
+ or ( $ret = $self->check_file($dir,"$s.pm"))
+ or ( $ret = $self->check_file($dir,$s))
+ or ( $self->is_vms and
+ $ret = $self->check_file($dir,"$s.com"))
+ or ( $self->is_os2 and
+ $ret = $self->check_file($dir,"$s.cmd"))
+ or ( ($self->is_mswin32 or $self->is_dos or $self->is_os2) and
+ $ret = $self->check_file($dir,"$s.bat"))
+ or ( $ret = $self->check_file("$dir/pod","$s.pod"))
+ or ( $ret = $self->check_file("$dir/pod",$s))
+ or ( $ret = $self->check_file("$dir/pods","$s.pod"))
+ or ( $ret = $self->check_file("$dir/pods",$s))
+ ) {
+ DEBUG > 1 and print " Found $ret\n";
+ return $ret;
+ }
+
+ if ($recurse) {
+ opendir(D,$dir) or $self->die( "Can't opendir $dir: $!" );
+ my @newdirs = map catfile($dir, $_), grep {
+ not /^\.\.?\z/s and
+ not /^auto\z/s and # save time! don't search auto dirs
+ -d catfile($dir, $_)
+ } readdir D;
+ closedir(D) or $self->die( "Can't closedir $dir: $!" );
+ next unless @newdirs;
+ # what a wicked map!
+ @newdirs = map((s/\.dir\z//,$_)[1], at newdirs) if $self->is_vms;
+ $self->aside( "Also looking in @newdirs\n" );
+ push(@dirs, at newdirs);
+ }
+ }
+ return ();
+}
+
+#..........................................................................
+{
+ my $already_asserted;
+ sub assert_closing_stdout {
+ my $self = shift;
+
+ return if $already_asserted;
+
+ eval q~ END { close(STDOUT) || CORE::die "Can't close STDOUT: $!" } ~;
+ # What for? to let the pager know that nothing more will come?
+
+ $self->die( $@ ) if $@;
+ $already_asserted = 1;
+ return;
+ }
+}
+
+#..........................................................................
+
+sub tweak_found_pathnames {
+ my($self, $found) = @_;
+ if ($self->is_mswin32) {
+ foreach (@$found) { s,/,\\,g }
+ }
+ foreach (@$found) { s,',\\',g } # RT 37347
+ return;
+}
+
+#..........................................................................
+# : : : : : : : : :
+#..........................................................................
+
+sub am_taint_checking {
+ my $self = shift;
+ $self->die( "NO ENVIRONMENT?!?!" ) unless keys %ENV; # reset iterator along the way
+ my($k,$v) = each %ENV;
+ return is_tainted($v);
+}
+
+#..........................................................................
+
+sub is_tainted { # just a function
+ my $arg = shift;
+ my $nada = substr($arg, 0, 0); # zero-length!
+ local $@; # preserve the caller's version of $@
+ eval { eval "# $nada" };
+ return length($@) != 0;
+}
+
+#..........................................................................
+
+sub drop_privs_maybe {
+ my $self = shift;
+
+ # Attempt to drop privs if we should be tainting and aren't
+ if (!( $self->is_vms || $self->is_mswin32 || $self->is_dos
+ || $self->is_os2
+ )
+ && ($> == 0 || $< == 0)
+ && !$self->am_taint_checking()
+ ) {
+ my $id = eval { getpwnam("nobody") };
+ $id = eval { getpwnam("nouser") } unless defined $id;
+ $id = -2 unless defined $id;
+ #
+ # According to Stevens' APUE and various
+ # (BSD, Solaris, HP-UX) man pages, setting
+ # the real uid first and effective uid second
+ # is the way to go if one wants to drop privileges,
+ # because if one changes into an effective uid of
+ # non-zero, one cannot change the real uid any more.
+ #
+ # Actually, it gets even messier. There is
+ # a third uid, called the saved uid, and as
+ # long as that is zero, one can get back to
+ # uid of zero. Setting the real-effective *twice*
+ # helps in *most* systems (FreeBSD and Solaris)
+ # but apparently in HP-UX even this doesn't help:
+ # the saved uid stays zero (apparently the only way
+ # in HP-UX to change saved uid is to call setuid()
+ # when the effective uid is zero).
+ #
+ eval {
+ $< = $id; # real uid
+ $> = $id; # effective uid
+ $< = $id; # real uid
+ $> = $id; # effective uid
+ };
+ if( !$@ && $< && $> ) {
+ DEBUG and print "OK, I dropped privileges.\n";
+ } elsif( $self->opt_U ) {
+ DEBUG and print "Couldn't drop privileges, but in -U mode, so feh."
+ } else {
+ DEBUG and print "Hm, couldn't drop privileges. Ah well.\n";
+ # We used to die here; but that seemed pointless.
+ }
+ }
+ return;
+}
+
+#..........................................................................
+
+1;
+
+__END__
+
+=head1 NAME
+
+Pod::Perldoc - Look up Perl documentation in Pod format.
+
+=head1 SYNOPSIS
+
+ use Pod::Perldoc ();
+
+ Pod::Perldoc->run();
+
+=head1 DESCRIPTION
+
+The guts of L<perldoc> utility.
+
+=head1 SEE ALSO
+
+L<perldoc>
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002-2007 Sean M. Burke.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributions from:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/lib/perldoc.pod
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/lib/perldoc.pod (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/lib/perldoc.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,277 @@
+
+=head1 NAME
+
+perldoc - Look up Perl documentation in Pod format.
+
+=head1 SYNOPSIS
+
+ perldoc [-h] [-D] [-t] [-u] [-m] [-l] [-F]
+ [-i] [-V] [-T] [-r]
+ [-d destination_file]
+ [-o formatname]
+ [-M FormatterClassName]
+ [-w formatteroption:value]
+ [-n nroff-replacement]
+ [-X]
+ [-L language_code]
+ PageName|ModuleName|ProgramName|URL
+
+Examples:
+
+ perldoc -f BuiltinFunction
+
+ perldoc -L it -f BuiltinFunction
+
+ perldoc -q FAQ Keyword
+
+ perldoc -L fr -q FAQ Keyword
+
+ perldoc -v PerlVariable
+
+See below for more description of the switches.
+
+=head1 DESCRIPTION
+
+B<perldoc> looks up a piece of documentation in .pod format that is
+embedded in the perl installation tree or in a perl script, and displays
+it via C<groff -man | $PAGER>. (In addition, if running under HP-UX,
+C<col -x> will be used.) This is primarily used for the documentation for
+the perl library modules.
+
+Your system may also have man pages installed for those modules, in
+which case you can probably just use the man(1) command.
+
+If you are looking for a table of contents to the Perl library modules
+documentation, see the L<perltoc> page.
+
+=head1 OPTIONS
+
+=over 5
+
+=item B<-h>
+
+Prints out a brief B<h>elp message.
+
+=item B<-D>
+
+B<D>escribes search for the item in B<d>etail.
+
+=item B<-t>
+
+Display docs using plain B<t>ext converter, instead of nroff. This may be faster,
+but it probably won't look as nice.
+
+=item B<-u>
+
+Skip the real Pod formatting, and just show the raw Pod source (B<U>nformatted)
+
+=item B<-m> I<module>
+
+Display the entire module: both code and unformatted pod documentation.
+This may be useful if the docs don't explain a function in the detail
+you need, and you'd like to inspect the code directly; perldoc will find
+the file for you and simply hand it off for display.
+
+=item B<-l>
+
+Display onB<l>y the file name of the module found.
+
+=item B<-F>
+
+Consider arguments as file names; no search in directories will be performed.
+
+=item B<-f> I<perlfunc>
+
+The B<-f> option followed by the name of a perl built-in function will
+extract the documentation of this function from L<perlfunc>.
+
+Example:
+
+ perldoc -f sprintf
+
+
+=item B<-q> I<perlfaq-search-regexp>
+
+The B<-q> option takes a regular expression as an argument. It will search
+the B<q>uestion headings in perlfaq[1-9] and print the entries matching
+the regular expression.
+
+Example:
+
+ perldoc -q shuffle
+
+
+=item B<-v> I<perlvar>
+
+The B<-v> option followed by the name of a Perl predefined variable will
+extract the documentation of this variable from L<perlvar>.
+
+Examples:
+
+ perldoc -v '$"'
+ perldoc -v @+
+ perldoc -v DATA
+
+
+=item B<-T>
+
+This specifies that the output is not to be sent to a pager, but is to
+be sent directly to STDOUT.
+
+=item B<-d> I<destination-filename>
+
+This specifies that the output is to be sent neither to a pager nor
+to STDOUT, but is to be saved to the specified filename. Example:
+C<perldoc -oLaTeX -dtextwrapdocs.tex Text::Wrap>
+
+=item B<-o> I<output-formatname>
+
+This specifies that you want Perldoc to try using a Pod-formatting
+class for the output format that you specify. For example:
+C<-oman>. This is actually just a wrapper around the C<-M> switch;
+using C<-oI<formatname>> just looks for a loadable class by adding
+that format name (with different capitalizations) to the end of
+different classname prefixes.
+
+For example, C<-oLaTeX> currently tries all of the following classes:
+Pod::Perldoc::ToLaTeX Pod::Perldoc::Tolatex Pod::Perldoc::ToLatex
+Pod::Perldoc::ToLATEX Pod::Simple::LaTeX Pod::Simple::latex
+Pod::Simple::Latex Pod::Simple::LATEX Pod::LaTeX Pod::latex Pod::Latex
+Pod::LATEX.
+
+=item B<-M> I<module-name>
+
+This specifies the module that you want to try using for formatting the
+pod. The class must at least provide a C<parse_from_file> method.
+For example: C<perldoc -MPod::Perldoc::ToChecker>.
+
+You can specify several classes to try by joining them with commas
+or semicolons, as in C<-MTk::SuperPod;Tk::Pod>.
+
+=item B<-w> I<option:value> or B<-w> I<option>
+
+This specifies an option to call the formatter B<w>ith. For example,
+C<-w textsize:15> will call
+C<< $formatter->textsize(15) >> on the formatter object before it is
+used to format the object. For this to be valid, the formatter class
+must provide such a method, and the value you pass should be valid.
+(So if C<textsize> expects an integer, and you do C<-w textsize:big>,
+expect trouble.)
+
+You can use C<-w optionname> (without a value) as shorthand for
+C<-w optionname:I<TRUE>>. This is presumably useful in cases of on/off
+features like: C<-w page_numbering>.
+
+You can use an "=" instead of the ":", as in: C<-w textsize=15>. This
+might be more (or less) convenient, depending on what shell you use.
+
+=item B<-X>
+
+Use an index if it is present. The B<-X> option looks for an entry
+whose basename matches the name given on the command line in the file
+C<$Config{archlib}/pod.idx>. The F<pod.idx> file should contain fully
+qualified filenames, one per line.
+
+=item B<-L> I<language_code>
+
+This allows one to specify the I<language code> for the desired language
+translation. If the C<POD2::E<lt>language_codeE<gt>> package isn't
+installed in your system, the switch is ignored.
+All available translation packages are to be found under the C<POD2::>
+namespace. See L<POD2::IT> (or L<POD2::FR>) to see how to create new
+localized C<POD2::*> documentation packages and integrate them into
+L<Pod::Perldoc>.
+
+=item B<PageName|ModuleName|ProgramName|URL>
+
+The item you want to look up. Nested modules (such as C<File::Basename>)
+are specified either as C<File::Basename> or C<< File/Basename >>. You may also
+give a descriptive name of a page, such as C<perlfunc>. For URLs, HTTP and
+HTTPS are the only kind currently supported.
+
+For simple names like 'foo', when the normal search fails to find
+a matching page, a search with the "perl" prefix is tried as well.
+So "perldoc intro" is enough to find/render "perlintro.pod".
+
+=item B<-n> I<some-formatter>
+
+Specify replacement for groff
+
+=item B<-r>
+
+Recursive search.
+
+=item B<-i>
+
+Ignore case.
+
+=item B<-V>
+
+Displays the version of perldoc you're running.
+
+=back
+
+=head1 SECURITY
+
+Because B<perldoc> does not run properly tainted, and is known to
+have security issues, when run as the superuser it will attempt to
+drop privileges by setting the effective and real IDs to nobody's
+or nouser's account, or -2 if unavailable. If it cannot relinquish
+its privileges, it will not run.
+
+=head1 ENVIRONMENT
+
+Any switches in the C<PERLDOC> environment variable will be used before the
+command line arguments.
+
+Useful values for C<PERLDOC> include C<-oterm>, C<-otext>, C<-ortf>,
+C<-oxml>, and so on, depending on what modules you have on hand; or
+the formatter class may be specified exactly with C<-MPod::Perldoc::ToTerm>
+or the like.
+
+C<perldoc> also searches directories
+specified by the C<PERL5LIB> (or C<PERLLIB> if C<PERL5LIB> is not
+defined) and C<PATH> environment variables.
+(The latter is so that embedded pods for executables, such as
+C<perldoc> itself, are available.)
+
+In directories where either C<Makefile.PL> or C<Build.PL> exist, C<perldoc>
+will add C<.> and C<lib> first to its search path, and as long as you're not
+the superuser will add C<blib> too. This is really helpful if you're working
+inside of a build directory and want to read through the docs even if you
+have a version of a module previously installed.
+
+C<perldoc> will use, in order of preference, the pager defined in
+C<PERLDOC_PAGER>, C<MANPAGER>, or C<PAGER> before trying to find a pager
+on its own. (C<MANPAGER> is not used if C<perldoc> was told to display
+plain text or unformatted pod.)
+
+One useful value for C<PERLDOC_PAGER> is C<less -+C -E>.
+
+Having PERLDOCDEBUG set to a positive integer will make perldoc emit
+even more descriptive output than the C<-D> switch does; the higher the
+number, the more it emits.
+
+
+=head1 CHANGES
+
+Up to 3.14_05, the switch B<-v> was used to produce verbose
+messages of B<perldoc> operation, which is now enabled by B<-D>.
+
+=head1 SEE ALSO
+
+L<perlpod>, L<Pod::Perldoc>
+
+=head1 AUTHOR
+
+Current maintainer: Mark Allen C<< <mallen at cpan.org> >>
+
+Past contributors are:
+brian d foy C<< <bdfoy at cpan.org> >>
+Adriano R. Ferreira C<< <ferreira at cpan.org> >>,
+Sean M. Burke C<< <sburke at cpan.org> >>,
+Kenneth Albanowski C<< <kjahds at kjahds.com> >>,
+Andy Dougherty C<< <doughera at lafcol.lafayette.edu> >>,
+and many others.
+
+=cut
Added: vendor/perl/dist/cpan/Pod-Perldoc/t/load.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/t/load.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/t/load.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+my @classes = ('Pod::Perldoc', map { "Pod::Perldoc::$_" } qw(
+ BaseTo ToChecker ToNroff ToRtf
+ GetOptsOO ToMan ToPod ToText ToXml
+ ToANSI ToTerm
+) );
+
+if( eval { require Tk; require Tk::Pod; 1 } ) { push @classes, 'Pod::Perldoc::ToTk' }
+else {
+ note "Skip testing Pod::Perldoc::ToTk because there's no Tk";
+ }
+
+plan tests => scalar @classes;
+
+foreach my $class ( @classes ) {
+ require_ok( $class );
+ my $version = do { no strict 'refs'; ${ '$' . $class . '::VERSION' } };
+ note( "$class $version" ) if defined $version
+ }
Added: vendor/perl/dist/cpan/Pod-Perldoc/t/man/_get_columns.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/t/man/_get_columns.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/t/man/_get_columns.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,68 @@
+use Test::More;
+use strict;
+use warnings;
+
+{
+package Local::ToMan;
+use base 'Pod::Perldoc::ToMan';
+use vars qw( $stty_text $is_linux $warning );
+no warnings 'redefine';
+no strict 'refs';
+sub _get_stty { $stty_text }
+sub is_linux { $is_linux }
+sub warn { shift; $warning = join '', @_ }
+}
+
+BEGIN {
+our @columns = qw( EXPECTED IS_LINUX MANWIDTH MANWIDTH_EXPECTED STTY STTY_EXPECTED );
+foreach my $i ( 0 .. $#columns ) {
+ no strict 'refs';
+ *{"$columns[$i]"} = sub () { $i };
+ }
+}
+
+my @tests = (
+ # for linux, choose between manwidth and stty
+ [ 62, 1, undef, 0, "; 62 columns;", 62 ],
+ [ 63, 1, undef, 0, "columns 63", 63 ],
+ [ 57, 1, 57, 57, "columns 63", 63 ],
+ [ 73, 1, undef, 0, " ", 0 ],
+
+ # for not linux, the same
+ [ 62, 0, undef, 0, "; 62 columns;", 62 ],
+ [ 63, 0, undef, 0, "columns 63", 63 ],
+ [ 57, 0, 57, 57, "columns 63", 63 ],
+ [ 73, 0, undef, 0, " ", 0 ],
+
+ # bad manwidths
+ [ 62, 1, -1, 0, "; 62 columns;", 62 ],
+ [ 63, 1, 'abc', 0, "columns 63", 63 ],
+ [ 64, 1, '', 0, "columns 64", 64 ],
+ [ 73, 1, undef, 0, " ", 0 ],
+ );
+
+plan tests => 3 * @tests;
+
+
+foreach my $test ( @tests ) {
+ local $ENV{MANWIDTH} = $test->[MANWIDTH];
+ local $Local::ToMan::stty_text = $test->[STTY];
+ local $Local::ToMan::is_linux = $test->[IS_LINUX];
+
+ {
+ no warnings 'uninitialized';
+ diag( sprintf
+ "MANWIDTH: %s STTY: %s LINUX: %s",
+ defined $ENV{MANWIDTH} ? $ENV{MANWIDTH} : "(undef)",
+ $Local::ToMan::stty_text,
+ $Local::ToMan::is_linux,
+ ) if $ENV{PERLDOCDEBUG};
+ }
+
+ is( Local::ToMan->_get_columns_from_manwidth(), $test->[MANWIDTH_EXPECTED],
+ "_get_columns_from_manwidth returns the right number" );
+ is( Local::ToMan->_get_columns_from_stty(), $test->[STTY_EXPECTED],
+ "_get_columns_from_stty returns the right number" );
+ is( Local::ToMan->_get_columns, $test->[EXPECTED],
+ "_get_columns returns the right number" );
+ }
Added: vendor/perl/dist/cpan/Pod-Perldoc/t/pod.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Perldoc/t/pod.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Perldoc/t/pod.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,11 @@
+use strict;
+use warnings;
+use Test::More;
+
+unless ( $ENV{RELEASE_TESTING} ) {
+ plan skip_all => 'Pod tests not required for installation.';
+}
+
+eval "use Test::Pod 1.22";
+plan skip_all => 'Test::Pod 1.22 or higher not installed.' if $@;
+all_pod_files_ok();
Added: vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn01.txt
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn01.txt (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn01.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,11 @@
+
+=head1 NAME
+
+Encoding Warning 1 - implicitly Latin-1
+
+=head2 DESCRIPTION
+
+This line should warn that the word caf\xE9 contains a non-ASCII character.
+
+But ch\xE2teau should not generate a warning - once is enough.
+
Added: vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn01.xml
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn01.xml (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn01.xml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
+<Document start_line="2">
+ <head1 start_line="2">
+ NAME
+ </head1>
+ <Para start_line="4">
+ Encoding Warning 1 - implicitly Latin-1
+ </Para>
+ <head2 start_line="6">
+ DESCRIPTION
+ </head2>
+ <Para start_line="8">
+ This line should warn that the word café contains a non-ASCII
+ character.
+ </Para>
+ <Para start_line="10">
+ But château should not generate a warning - once is enough.
+ </Para>
+ <head1 errata="1" start_line="-321">
+ POD ERRORS
+ </head1>
+ <Para errata="1" start_line="-321">
+ Hey!
+ <B>
+ The above document had some coding errors, which are explained below:
+ </B>
+ </Para>
+ <over-text errata="1" indent="4" start_line="-321">
+ <item-text start_line="-321">
+ Around line 8:
+ </item-text>
+ <Para start_line="-321">
+ Non-ASCII character seen before =encoding in 'café'. Assuming
+ ISO8859-1
+ </Para>
+ </over-text>
+</Document>
Added: vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn02.txt
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn02.txt (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn02.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,11 @@
+
+=head1 NAME
+
+Encoding Warning 1 - implicitly UTF-8
+
+=head2 DESCRIPTION
+
+This line should warn that the price €9.99 contains a non-ASCII character.
+
+But château should not generate a warning - once is enough.
+
Added: vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn02.xml
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn02.xml (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn02.xml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
+<Document start_line="2">
+ <head1 start_line="2">
+ NAME
+ </head1>
+ <Para start_line="4">
+ Encoding Warning 1 - implicitly UTF-8
+ </Para>
+ <head2 start_line="6">
+ DESCRIPTION
+ </head2>
+ <Para start_line="8">
+ This line should warn that the price €9.99 contains a non-ASCII
+ character.
+ </Para>
+ <Para start_line="10">
+ But château should not generate a warning - once is enough.
+ </Para>
+ <head1 errata="1" start_line="-321">
+ POD ERRORS
+ </head1>
+ <Para errata="1" start_line="-321">
+ Hey!
+ <B>
+ The above document had some coding errors, which are explained below:
+ </B>
+ </Para>
+ <over-text errata="1" indent="4" start_line="-321">
+ <item-text start_line="-321">
+ Around line 8:
+ </item-text>
+ <Para start_line="-321">
+ Non-ASCII character seen before =encoding in '€9.99'.
+ Assuming UTF-8
+ </Para>
+ </over-text>
+</Document>
Added: vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn03.txt
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn03.txt (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn03.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,12 @@
+package MyPackage;
+
+use strict;
+
+# Comment here contains āccénted characters but should not generate any
+# parse warning since they do not occur in a POD section
+
+sub main {
+ print "This file contains no POD\n";
+}
+
+1;
Added: vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn03.xml
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn03.xml (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn03.xml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+<Document contentless="1" start_line="12">
+</Document>
Added: vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn04.txt
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn04.txt (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn04.txt 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,17 @@
+package MyPackage;
+
+use strict;
+
+# Checking encoding warning is generated even on first line of POD
+
+sub main {
+ print "This file contains no POD\n";
+}
+
+1;
+
+=head1 TŨTORIAL
+
+The encoding warning should only fire when the parser is 'in_pod' but that
+should also be true on the first line of POD (above).
+
Added: vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn04.xml
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn04.xml (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/corpus/encwarn04.xml 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,27 @@
+<Document start_line="13">
+ <head1 start_line="13">
+ TŨTORIAL
+ </head1>
+ <Para start_line="15">
+ The encoding warning should only fire when the parser is 'in_pod'
+ but that should also be true on the first line of POD (above).
+ </Para>
+ <head1 errata="1" start_line="-321">
+ POD ERRORS
+ </head1>
+ <Para errata="1" start_line="-321">
+ Hey!
+ <B>
+ The above document had some coding errors, which are explained below:
+ </B>
+ </Para>
+ <over-text errata="1" indent="4" start_line="-321">
+ <item-text start_line="-321">
+ Around line 13:
+ </item-text>
+ <Para start_line="-321">
+ Non-ASCII character seen before =encoding in 'TŨTORIAL'.
+ Assuming UTF-8
+ </Para>
+ </over-text>
+</Document>
Added: vendor/perl/dist/cpan/Pod-Simple/t/emptylists.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/emptylists.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/emptylists.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,69 @@
+BEGIN {
+ if($ENV{PERL_CORE}) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use strict;
+use Test;
+BEGIN { plan tests => 5 };
+
+ok 1;
+
+use Pod::Simple::XMLOutStream;
+print "# Pod::Simple version $Pod::Simple::VERSION\n";
+
+my $x = 'Pod::Simple::XMLOutStream';
+$Pod::Simple::XMLOutStream::ATTR_PAD = ' ';
+$Pod::Simple::XMLOutStream::SORT_ATTRS = 1; # for predictably testable output
+
+sub on {shift->parse_empty_lists(1)}
+sub off {shift->parse_empty_lists(0)}
+
+my $pod = <<POD;
+=over
+
+=over
+
+=over
+
+=over
+
+=back
+
+=over
+
+=back
+
+=back
+
+=back
+
+=back
+POD
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+print "# Testing default behavior (parse_empty_lists( FALSE )) ...\n";
+
+ok( $x->_out($pod),
+ '<Document><over-block indent="4"><over-block indent="4"><over-block indent="4"></over-block></over-block></over-block></Document>'
+);
+
+print "# Testing explicit parse_empty_lists( FALSE ) ...\n";
+
+ok( $x->_out(\&off, $pod),
+ '<Document><over-block indent="4"><over-block indent="4"><over-block indent="4"></over-block></over-block></over-block></Document>'
+);
+
+print "# Testing parse_empty_lists( TRUE ) ...\n";
+
+ok( $x->_out(\&on, $pod),
+ '<Document><over-block indent="4"><over-block indent="4"><over-block indent="4"><over-empty indent="4"></over-empty><over-empty indent="4"></over-empty></over-block></over-block></over-block></Document>'
+);
+
+print "# Wrapping up... one for the road...\n";
+ok 1;
+print "# --- Done with ", __FILE__, " --- \n";
+
Added: vendor/perl/dist/cpan/Pod-Simple/t/enc-chars.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/enc-chars.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/enc-chars.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,61 @@
+# tell parser the source POD has already been decoded from bytes to chars
+# =encoding line should be ignored
+# utf8 characters should come through unscathed
+
+BEGIN {
+ if($ENV{PERL_CORE}) {
+ chdir 't';
+ @INC = '../lib';
+ }
+
+ use Config;
+ if ($Config::Config{'extensions'} !~ /\bEncode\b/) {
+ print "1..0 # Skip: Encode was not built\n";
+ exit 0;
+ }
+}
+
+use strict;
+use Test;
+BEGIN { plan tests => 3 };
+
+use Pod::Simple::DumpAsXML;
+use Pod::Simple::XMLOutStream;
+
+
+my $parser = Pod::Simple::XMLOutStream->new;
+$parser->parse_characters(1);
+my $output = '';
+$parser->output_string( \$output );
+$parser->parse_string_document(qq{
+
+=encoding bogocode
+
+=head1 DESCRIPTION
+
+Confirm that if we tell the parser to expect character data, it avoids all
+the code paths that might attempt to decode the source from bytes to chars.
+
+The r\x{101}in in \x{15E}pain \x{FB02}oods the plain
+
+});
+
+ok(1); # parsed without exception
+
+if($output =~ /POD ERRORS/) {
+ ok(0);
+}
+else {
+ ok(1); # no errors
+}
+
+$output =~ s{&#(\d+);}{chr($1)}eg;
+
+if($output =~ /The r\x{101}in in \x{15E}pain \x{FB02}oods the plain/) {
+ ok(1); # data was not messed up
+}
+else {
+ ok(0);
+}
+
+exit;
Added: vendor/perl/dist/cpan/Pod-Simple/t/encod04.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/encod04.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/encod04.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,143 @@
+# The encoding detection heuristic will choose UTF8 or Latin-1. The current
+# implementation will usually treat CP1252 (aka "Win-Latin-1") as Latin-1 but
+# can be fooled into seeing it as UTF8.
+#
+# Note 1: Neither guess is 'correct' since even if we choose Latin-1, all the
+# smart quote symbols will be rendered as control characters
+#
+# Note 2: the guess is only applied if the source POD omits =encoding, so
+# CP1252 source will render correctly if properly declared
+#
+
+BEGIN {
+ if($ENV{PERL_CORE}) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use strict;
+use Test;
+BEGIN { plan tests => 5 };
+
+ok 1;
+
+use Pod::Simple::DumpAsXML;
+use Pod::Simple::XMLOutStream;
+
+
+# Initial, isolated, non-ASCII byte triggers Latin-1 guess and later
+# multi-byte sequence is not considered by heuristic.
+
+my @output_lines = split m/[\cm\cj]+/, Pod::Simple::XMLOutStream->_out( qq{
+
+=head1 NAME
+
+Em::Dash \x97 \x91CAF\xC9\x92
+
+=cut
+
+} );
+
+my($guess) = "@output_lines" =~ m{Non-ASCII.*?Assuming ([\w-]+)};
+if( $guess ) {
+ if( $guess eq 'ISO8859-1' ) {
+ if( grep m{Dash (\x97|—|)}, @output_lines ) {
+ ok 1;
+ } else {
+ ok 0;
+ print "# failed to find expected control character in output\n"
+ }
+ } else {
+ ok 0;
+ print "# parser guessed wrong encoding expected 'ISO8859-1' got '$guess'\n";
+ }
+} else {
+ ok 0;
+ print "# parser failed to detect non-ASCII bytes in input\n";
+}
+
+
+# Initial smart-quote character triggers Latin-1 guess as expected
+
+ at output_lines = split m/[\cm\cj]+/, Pod::Simple::XMLOutStream->_out( qq{
+
+=head1 NAME
+
+Smart::Quote - \x91FUT\xC9\x92
+
+=cut
+
+} );
+
+($guess) = "@output_lines" =~ m{Non-ASCII.*?Assuming ([\w-]+)};
+if( $guess ) {
+ if( $guess eq 'ISO8859-1' ) {
+ ok 1;
+ } else {
+ ok 0;
+ print "# parser guessed wrong encoding expected 'ISO8859-1' got '$guess'\n";
+ }
+} else {
+ ok 0;
+ print "# parser failed to detect non-ASCII bytes in input\n";
+}
+
+
+# Initial accented character followed by 'smart' apostrophe causes heuristic
+# to choose UTF8 (a rather contrived example)
+
+ at output_lines = split m/[\cm\cj]+/, Pod::Simple::XMLOutStream->_out( qq{
+
+=head1 NAME
+
+Smart::Apostrophe::Fail - L\xC9\x92STRANGE
+
+=cut
+
+} );
+
+($guess) = "@output_lines" =~ m{Non-ASCII.*?Assuming ([\w-]+)};
+if( $guess ) {
+ if( $guess eq 'UTF-8' ) {
+ ok 1;
+ } else {
+ ok 0;
+ print "# parser guessed wrong encoding expected 'UTF-8' got '$guess'\n";
+ }
+} else {
+ ok 0;
+ print "# parser failed to detect non-ASCII bytes in input\n";
+}
+
+
+# The previous example used a CP1252 byte sequence that also happened to be a
+# valid UTF8 byte sequence. In this example the heuristic also guesses 'wrong'
+# despite the byte sequence not being valid UTF8 (it's too short). This could
+# arguably be 'fixed' by using a less naive regex.
+
+ at output_lines = split m/[\cm\cj]+/, Pod::Simple::XMLOutStream->_out( qq{
+
+=head1 NAME
+
+Smart::Apostrophe::Fail - L\xE9\x92Strange
+
+=cut
+
+} );
+
+($guess) = "@output_lines" =~ m{Non-ASCII.*?Assuming ([\w-]+)};
+if( $guess ) {
+ if( $guess eq 'UTF-8' ) {
+ ok 1;
+ } else {
+ ok 0;
+ print "# parser guessed wrong encoding expected 'UTF-8' got '$guess'\n";
+ }
+} else {
+ ok 0;
+ print "# parser failed to detect non-ASCII bytes in input\n";
+}
+
+
+exit;
Added: vendor/perl/dist/cpan/Pod-Simple/t/eol.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/eol.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/eol.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,107 @@
+#!/usr/bin/perl
+
+# t/eol.t - check handling of \r, \n, and \r\n as line separators
+
+BEGIN {
+ chdir 't' if -d 't';
+}
+
+use warnings;
+use strict;
+use lib '../lib';
+use Test::More tests => 7;
+
+use_ok('Pod::Simple::XHTML') or exit;
+
+open(POD, ">$$.pod") or die "$$.pod: $!";
+print POD <<__EOF__;
+=pod
+
+=head1 NAME
+
+crlf
+
+=head1 DESCRIPTION
+
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+
+ crlf crlf crlf crlf
+ crlf crlf crlf crlf
+ crlf crlf crlf crlf
+
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+
+=cut
+__EOF__
+close(POD);
+
+# --- CR ---
+
+my $p1 = Pod::Simple::XHTML->new ();
+isa_ok ($p1, 'Pod::Simple::XHTML');
+
+open(POD, "<$$.pod") or die "$$.pod: $!";
+open(IN, ">$$.in") or die "$$.in: $!";
+while (<POD>) {
+ s/[\r\n]+/\r/g;
+ print IN $_;
+}
+close(POD);
+close(IN);
+
+$p1->output_string(\my $o1);
+$p1->parse_file("$$.in");
+
+# --- LF ---
+
+my $p2 = Pod::Simple::XHTML->new ();
+isa_ok ($p2, 'Pod::Simple::XHTML');
+
+open(POD, "<$$.pod") or die "$$.pod: $!";
+open(IN, ">$$.in") or die "$$.in: $!";
+while (<POD>) {
+ s/[\r\n]+/\n/g;
+ print IN $_;
+}
+close(POD);
+close(IN);
+
+$p2->output_string(\my $o2);
+$p2->parse_file("$$.in");
+
+# --- CRLF ---
+
+my $p3 = Pod::Simple::XHTML->new ();
+isa_ok ($p3, 'Pod::Simple::XHTML');
+
+open(POD, "<$$.pod") or die "$$.pod: $!";
+open(IN, ">$$.in") or die "$$.in: $!";
+while (<POD>) {
+ s/[\r\n]+/\r\n/g;
+ print IN $_;
+}
+close(POD);
+close(IN);
+
+$p3->output_string(\my $o3);
+$p3->parse_file("$$.in");
+
+# --- now test ---
+
+my $cksum1 = unpack("%32C*", $o1);
+my $cksum2 = unpack("%32C*", $o2);
+my $cksum3 = unpack("%32C*", $o3);
+
+ok($cksum1 == $cksum2, "CR vs LF");
+ok($cksum1 == $cksum3, "CR vs CRLF");
+ok($cksum2 == $cksum3, "LF vs CRLF");
+
+END {
+ 1 while unlink("$$.pod", "$$.in");
+}
Added: vendor/perl/dist/cpan/Pod-Simple/t/eol2.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/eol2.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/eol2.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,104 @@
+#!/usr/bin/perl
+
+# t/eol2.t - check handling of \r, \n, and \r\n as line separators (again)
+
+BEGIN {
+ chdir 't' if -d 't';
+}
+
+use warnings;
+use strict;
+use lib '../lib';
+use Test::More tests => 7;
+
+use_ok('Pod::Simple::XHTML') or exit;
+
+open(POD, ">$$.pod") or die "$$.pod: $!";
+print POD <<__EOF__;
+=pod
+
+=head1 NAME
+
+crlf
+
+=head1 DESCRIPTION
+
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+
+ crlf crlf crlf crlf
+ crlf crlf crlf crlf
+ crlf crlf crlf crlf
+
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+
+=cut
+__EOF__
+close(POD);
+
+# --- CR ---
+
+my $p1 = Pod::Simple::XHTML->new ();
+isa_ok ($p1, 'Pod::Simple::XHTML');
+
+open(POD, "<$$.pod") or die "$$.pod: $!";
+my $i1 = '';
+while (<POD>) {
+ s/[\r\n]+/\r/g;
+ $i1 .= $_;
+}
+close(POD);
+
+$p1->output_string(\my $o1);
+$p1->parse_string_document($i1);
+
+# --- LF ---
+
+my $p2 = Pod::Simple::XHTML->new ();
+isa_ok ($p2, 'Pod::Simple::XHTML');
+
+open(POD, "<$$.pod") or die "$$.pod: $!";
+my $i2 = '';
+while (<POD>) {
+ s/[\r\n]+/\n/g;
+ $i2 .= $_;
+}
+close(POD);
+
+$p2->output_string(\my $o2);
+$p2->parse_string_document($i2);
+
+# --- CRLF ---
+
+my $p3 = Pod::Simple::XHTML->new ();
+isa_ok ($p3, 'Pod::Simple::XHTML');
+
+open(POD, "<$$.pod") or die "$$.pod: $!";
+my $i3 = '';
+while (<POD>) {
+ s/[\r\n]+/\r\n/g;
+ $i3 .= $_;
+}
+close(POD);
+
+$p3->output_string(\my $o3);
+$p3->parse_string_document($i3);
+
+# --- now test ---
+
+my $cksum1 = unpack("%32C*", $o1);
+my $cksum2 = unpack("%32C*", $o2);
+my $cksum3 = unpack("%32C*", $o3);
+
+ok($cksum1 == $cksum2, "CR vs LF");
+ok($cksum1 == $cksum3, "CR vs CRLF");
+ok($cksum2 == $cksum3, "LF vs CRLF");
+
+END {
+ 1 while unlink("$$.pod", "$$.in");
+}
Added: vendor/perl/dist/cpan/Pod-Simple/t/fake-closers.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/fake-closers.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/fake-closers.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,71 @@
+BEGIN {
+ if($ENV{PERL_CORE}) {
+ chdir 't';
+ @INC = '../lib';
+ }
+}
+
+use strict;
+use Test::More;
+use Data::Dumper;
+BEGIN { plan tests => 9 };
+
+ok 1;
+
+my $i = 0;
+
+print "# Real closers ...\n";
+
+for my $pod ( "=over\n\nblock\n\n=back",
+ "=over\n\nblock\n\n=cut\n\ncode\n\n=pod\n\n=back",
+ "=begin html\n\ntag\n\n=end html",
+ ) {
+ my $parser = Pod::Simple::Blurb->new();
+ $parser->parse_string_document($pod);
+ is($parser->{'closer-flag'}, -1, "real closer ". ++$i);
+}
+
+$i = 0;
+
+print "# Fake closers ...\n";
+
+for my $pod ("=begin html\n\ntag=cut",
+ "=begin html\n\ntag\n\n=begin xml tag =end xml",
+ "=over\n\nblock=cut",
+ "=over\n\nanother block",
+ ) {
+ my $parser = Pod::Simple::Blurb->new();
+ $parser->parse_string_document($pod);
+ is($parser->{'closer-flag'}, 1, "fake closer ". ++$i);
+}
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+print "# Wrapping up... one for the road...\n";
+ok 1;
+print "# --- Done with ", __FILE__, " --- \n";
+
+1;
+
+package Pod::Simple::Blurb;
+use warnings;
+use strict;
+use base qw/Pod::Simple::Methody/;
+
+sub new {
+ my $new = shift->SUPER::new(@_);
+ $new->output_string(\my $doesnotmatter);
+ $new->accept_targets('*');
+ return $new;
+}
+
+sub end_over_block {
+ shift->set(@_);
+}
+sub end_for {
+ shift->set(@_);
+}
+
+sub set {
+ $_[0]{'closer-flag'} = defined $_[1]{'fake-closer'} ? 1 : -1;
+}
Added: vendor/perl/dist/cpan/Pod-Simple/t/whine.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/whine.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/whine.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,69 @@
+use strict;
+use warnings;
+use Test::More tests => 4;
+
+{
+ package Pod::Simple::ErrorFinder;
+ use base 'Pod::Simple::DumpAsXML'; # arbitrary choice -- rjbs, 2013-04-16
+
+ my @errors;
+ sub whine {
+ my ($self, @rest) = @_;
+ push @errors, [ @rest ];
+ $self->SUPER::whine(@rest);
+ }
+
+ sub scream {
+ my ($self, @rest) = @_;
+ push @errors, [ @rest ];
+ $self->SUPER::scream(@rest);
+ }
+
+ sub errors_for_input {
+ my ($class, $input, $mutor) = @_;
+ @errors = ();
+
+ my $parser = $class->new;
+ my $output = '';
+ $parser->output_string( \$output );
+ $parser->parse_string_document( $input );
+
+ @errors = sort { $a->[0] <=> $b->[0]
+ || $a->[1] cmp $b->[1] } @errors;
+
+ return @errors;
+ }
+}
+
+sub errors { Pod::Simple::ErrorFinder->errors_for_input(@_) }
+
+{
+ my @errors = errors("=over 4\n\n=item 1\n\nHey\n\n");
+ is_deeply(
+ \@errors,
+ [ [ 1, "=over without closing =back" ] ],
+ "no closing =back",
+ );
+}
+
+{
+ for my $l_code ('L< foo>', 'L< bar>') {
+ my $input = "=pod\n\nAmbiguous space: $l_code\n";
+ my @errors = errors("$input");
+ is_deeply(
+ \@errors,
+ [ [ 3, "L<> starts or ends with whitespace" ] ],
+ "warning for space in $l_code",
+ );
+ }
+}
+
+{
+ my $input = "=pod\n\nAmbiguous slash: L<I/O Operators|op/io>\n";
+ my @errors = errors("$input");
+ is_deeply(
+ \@errors,
+ [ [ 3, "alternative text 'I/O Operators' contains non-escaped | or /" ] ],
+ "warning for / in text part of L<>",
+ );
+}
Added: vendor/perl/dist/cpan/Pod-Simple/t/xhtml-bkb.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/xhtml-bkb.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/xhtml-bkb.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+#!/usr/bin/perl -w
+
+# t/xhtml-bkb.t - https://rt.cpan.org/Public/Bug/Display.html?id=77686
+
+use strict;
+use warnings;
+use Test::More tests => 1;
+use Pod::Simple::XHTML;
+my $c = <<EOF;
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perldata>
+EOF
+my $d = Pod::Simple::XHTML->new ();
+$d->index (1);
+my $e;
+$d->output_string (\$e);
+$d->parse_string_document ($c);
+unlike ($e, qr!<a[^>]+><a[^>]+>!);
Added: vendor/perl/dist/cpan/Pod-Simple/t/xhtml15.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/xhtml15.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/xhtml15.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,34 @@
+#!/usr/bin/perl -w
+
+# t/xhtml15.t - test compatibility between Pod::Simple::XHTML and
+# Pod::Simple::HtmlBatch
+
+use strict;
+use warnings;
+use Test::More tests => 4;
+
+use_ok('Pod::Simple::XHTML') or exit;
+
+my ($parser, $results);
+
+initialize();
+my $style = 'http://amazingpants.com/style.css';
+$parser->html_css($style);
+$parser->parse_string_document( '=head1 Foo' );
+like $results, qr/ href="$style" /, 'CSS is correct when link is passed in';
+
+initialize();
+my $link = qq{<link rel="stylesheet" href="$style" type="text/css">};
+$parser->html_css($link);
+$parser->parse_string_document( '=head1 Foo' );
+like $results, qr/ href="$style" /, 'CSS is correct when <link> is passed in';
+
+#note('These methods are called when XHTML is used by HtmlBatch');
+can_ok $parser, qw/batch_mode_page_object_init html_header_after_title/;
+
+sub initialize {
+ $parser = Pod::Simple::XHTML->new;
+ $parser->index(1);
+ $parser->output_string( \$results );
+ $results = '';
+}
Added: vendor/perl/dist/cpan/Pod-Simple/t/xhtml20.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Simple/t/xhtml20.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Simple/t/xhtml20.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,63 @@
+#!/usr/bin/perl -w
+
+# t/xhtml20.t - test subclassing of Pod::Simple::XHTML
+
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+BEGIN {
+ package MyXHTML;
+ use base 'Pod::Simple::XHTML';
+
+ sub handle_code {
+ my($self, $code, $kind) = @_;
+ $code = $kind . "[$code]";
+ $self->SUPER::handle_code($code);
+ }
+
+ sub start_code {
+ my($self, $kind) = @_;
+ $self->{scratch} .= "<code class=\"$kind\">";
+ }
+
+ sub end_code {
+ my($self, $kind) = @_;
+ $self->{scratch} .= "</code><!-- $kind -->";
+ }
+}
+
+
+
+my ($parser, $results);
+
+initialize();
+$parser->parse_string_document(<<'EOT');
+=head1 Foo
+
+This is C<$code> and so is:
+
+ my $foo = 1;
+
+Code might even be C<<< nested( B<< C<1> >> ) >>>.
+EOT
+
+is($results, <<'EOT');
+<h1 id="Foo">Foo</h1>
+
+<p>This is <code class="C">C[$code]</code><!-- C --> and so is:</p>
+
+<pre><code class="Verbatim">Verbatim[ my $foo = 1;]</code><!-- Verbatim --></pre>
+
+<p>Code might even be <code class="C">C[nested( ]<b><code class="C">C[1]</code><!-- C --></b>C[ )]</code><!-- C -->.</p>
+
+EOT
+
+
+sub initialize {
+ $parser = MyXHTML->new;
+ $parser->html_header('');
+ $parser->html_footer('');
+ $parser->output_string( \$results );
+ $results = '';
+}
Added: vendor/perl/dist/cpan/Pod-Usage/lib/Pod/Usage.pm
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/lib/Pod/Usage.pm (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/lib/Pod/Usage.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,767 @@
+#############################################################################
+# Pod/Usage.pm -- print usage messages for the running script.
+#
+# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
+# This file is part of "PodParser". PodParser is free software;
+# you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+#############################################################################
+
+package Pod::Usage;
+use strict;
+
+use vars qw($VERSION @ISA @EXPORT);
+$VERSION = '1.61'; ## Current version of this package
+require 5.005; ## requires this Perl version or later
+
+#use diagnostics;
+use Carp;
+use Config;
+use Exporter;
+use File::Spec;
+
+ at EXPORT = qw(&pod2usage);
+BEGIN {
+ $Pod::Usage::Formatter ||=
+ ( $] >= 5.005_58 ? 'Pod::Text' : 'Pod::PlainText');
+ eval "require $Pod::Usage::Formatter";
+ die $@ if $@;
+ @ISA = ( $Pod::Usage::Formatter );
+}
+
+require Pod::Select;
+
+##---------------------------------------------------------------------------
+
+##---------------------------------
+## Function definitions begin here
+##---------------------------------
+
+sub pod2usage {
+ local($_) = shift;
+ my %opts;
+ ## Collect arguments
+ if (@_ > 0) {
+ ## Too many arguments - assume that this is a hash and
+ ## the user forgot to pass a reference to it.
+ %opts = ($_, @_);
+ }
+ elsif (!defined $_) {
+ $_ = '';
+ }
+ elsif (ref $_) {
+ ## User passed a ref to a hash
+ %opts = %{$_} if (ref($_) eq 'HASH');
+ }
+ elsif (/^[-+]?\d+$/) {
+ ## User passed in the exit value to use
+ $opts{'-exitval'} = $_;
+ }
+ else {
+ ## User passed in a message to print before issuing usage.
+ $_ and $opts{'-message'} = $_;
+ }
+
+ ## Need this for backward compatibility since we formerly used
+ ## options that were all uppercase words rather than ones that
+ ## looked like Unix command-line options.
+ ## to be uppercase keywords)
+ %opts = map {
+ my ($key, $val) = ($_, $opts{$_});
+ $key =~ s/^(?=\w)/-/;
+ $key =~ /^-msg/i and $key = '-message';
+ $key =~ /^-exit/i and $key = '-exitval';
+ lc($key) => $val;
+ } (keys %opts);
+
+ ## Now determine default -exitval and -verbose values to use
+ if ((! defined $opts{'-exitval'}) && (! defined $opts{'-verbose'})) {
+ $opts{'-exitval'} = 2;
+ $opts{'-verbose'} = 0;
+ }
+ elsif (! defined $opts{'-exitval'}) {
+ $opts{'-exitval'} = ($opts{'-verbose'} > 0) ? 1 : 2;
+ }
+ elsif (! defined $opts{'-verbose'}) {
+ $opts{'-verbose'} = (lc($opts{'-exitval'}) eq 'noexit' ||
+ $opts{'-exitval'} < 2);
+ }
+
+ ## Default the output file
+ $opts{'-output'} = (lc($opts{'-exitval'}) eq 'noexit' ||
+ $opts{'-exitval'} < 2) ? \*STDOUT : \*STDERR
+ unless (defined $opts{'-output'});
+ ## Default the input file
+ $opts{'-input'} = $0 unless (defined $opts{'-input'});
+
+ ## Look up input file in path if it doesnt exist.
+ unless ((ref $opts{'-input'}) || (-e $opts{'-input'})) {
+ my $basename = $opts{'-input'};
+ my $pathsep = ($^O =~ /^(?:dos|os2|MSWin32)$/i) ? ';'
+ : (($^O eq 'MacOS' || $^O eq 'VMS') ? ',' : ':');
+ my $pathspec = $opts{'-pathlist'} || $ENV{PATH} || $ENV{PERL5LIB};
+
+ my @paths = (ref $pathspec) ? @$pathspec : split($pathsep, $pathspec);
+ for my $dirname (@paths) {
+ $_ = File::Spec->catfile($dirname, $basename) if length;
+ last if (-e $_) && ($opts{'-input'} = $_);
+ }
+ }
+
+ ## Now create a pod reader and constrain it to the desired sections.
+ my $parser = new Pod::Usage(USAGE_OPTIONS => \%opts);
+ if ($opts{'-verbose'} == 0) {
+ $parser->select('(?:SYNOPSIS|USAGE)\s*');
+ }
+ elsif ($opts{'-verbose'} == 1) {
+ my $opt_re = '(?i)' .
+ '(?:OPTIONS|ARGUMENTS)' .
+ '(?:\s*(?:AND|\/)\s*(?:OPTIONS|ARGUMENTS))?';
+ $parser->select( '(?:SYNOPSIS|USAGE)\s*', $opt_re, "DESCRIPTION/$opt_re" );
+ }
+ elsif ($opts{'-verbose'} >= 2 && $opts{'-verbose'} != 99) {
+ $parser->select('.*');
+ }
+ elsif ($opts{'-verbose'} == 99) {
+ my $sections = $opts{'-sections'};
+ $parser->select( (ref $sections) ? @$sections : $sections );
+ $opts{'-verbose'} = 1;
+ }
+
+ ## Check for perldoc
+ my $progpath = File::Spec->catfile($Config{scriptdirexp}
+ || $Config{scriptdir}, 'perldoc');
+
+ my $version = sprintf("%vd",$^V);
+ if ($Config{versiononly} and $Config{startperl} =~ /\Q$version\E$/ ) {
+ $progpath .= $version;
+ }
+ $opts{'-noperldoc'} = 1 unless -e $progpath;
+
+ ## Now translate the pod document and then exit with the desired status
+ if ( !$opts{'-noperldoc'}
+ and $opts{'-verbose'} >= 2
+ and !ref($opts{'-input'})
+ and $opts{'-output'} == \*STDOUT )
+ {
+ ## spit out the entire PODs. Might as well invoke perldoc
+ print { $opts{'-output'} } ($opts{'-message'}, "\n") if($opts{'-message'});
+ if(defined $opts{-input} && $opts{-input} =~ /^\s*(\S.*?)\s*$/) {
+ # the perldocs back to 5.005 should all have -F
+ # without -F there are warnings in -T scripts
+ system($progpath, '-F', $1);
+ if($?) {
+ # RT16091: fall back to more if perldoc failed
+ system(($Config{pager} || $ENV{PAGER} || '/bin/more'), $1);
+ }
+ } else {
+ croak "Unspecified input file or insecure argument.\n";
+ }
+ }
+ else {
+ $parser->parse_from_file($opts{'-input'}, $opts{'-output'});
+ }
+
+ exit($opts{'-exitval'}) unless (lc($opts{'-exitval'}) eq 'noexit');
+}
+
+##---------------------------------------------------------------------------
+
+##-------------------------------
+## Method definitions begin here
+##-------------------------------
+
+sub new {
+ my $this = shift;
+ my $class = ref($this) || $this;
+ my %params = @_;
+ my $self = {%params};
+ bless $self, $class;
+ if ($self->can('initialize')) {
+ $self->initialize();
+ } else {
+ # pass through options to Pod::Text
+ my %opts;
+ for (qw(alt code indent loose margin quotes sentence stderr utf8 width)) {
+ my $val = $params{USAGE_OPTIONS}{"-$_"};
+ $opts{$_} = $val if defined $val;
+ }
+ $self = $self->SUPER::new(%opts);
+ %$self = (%$self, %params);
+ }
+ return $self;
+}
+
+sub select {
+ my ($self, @sections) = @_;
+ if ($ISA[0]->can('select')) {
+ $self->SUPER::select(@sections);
+ } else {
+ # we're using Pod::Simple - need to mimic the behavior of Pod::Select
+ my $add = ($sections[0] eq '+') ? shift(@sections) : '';
+ ## Reset the set of sections to use
+ unless (@sections) {
+ delete $self->{USAGE_SELECT} unless ($add);
+ return;
+ }
+ $self->{USAGE_SELECT} = []
+ unless ($add && $self->{USAGE_SELECT});
+ my $sref = $self->{USAGE_SELECT};
+ ## Compile each spec
+ for my $spec (@sections) {
+ my $cs = Pod::Select::_compile_section_spec($spec);
+ if ( defined $cs ) {
+ ## Store them in our sections array
+ push(@$sref, $cs);
+ } else {
+ carp qq{Ignoring section spec "$spec"!\n};
+ }
+ }
+ }
+}
+
+# Override Pod::Text->seq_i to return just "arg", not "*arg*".
+sub seq_i { return $_[1] }
+
+# This overrides the Pod::Text method to do something very akin to what
+# Pod::Select did as well as the work done below by preprocess_paragraph.
+# Note that the below is very, very specific to Pod::Text.
+sub _handle_element_end {
+ my ($self, $element) = @_;
+ if ($element eq 'head1') {
+ $self->{USAGE_HEADINGS} = [ $$self{PENDING}[-1][1] ];
+ if ($self->{USAGE_OPTIONS}->{-verbose} < 2) {
+ $$self{PENDING}[-1][1] =~ s/^\s*SYNOPSIS\s*$/USAGE/;
+ }
+ } elsif ($element =~ /^head(\d+)$/ && $1) { # avoid 0
+ my $idx = $1 - 1;
+ $self->{USAGE_HEADINGS} = [] unless($self->{USAGE_HEADINGS});
+ $self->{USAGE_HEADINGS}->[$idx] = $$self{PENDING}[-1][1];
+ }
+ if ($element =~ /^head\d+$/) {
+ $$self{USAGE_SKIPPING} = 1;
+ if (!$$self{USAGE_SELECT} || !@{ $$self{USAGE_SELECT} }) {
+ $$self{USAGE_SKIPPING} = 0;
+ } else {
+ my @headings = @{$$self{USAGE_HEADINGS}};
+ for my $section_spec ( @{$$self{USAGE_SELECT}} ) {
+ my $match = 1;
+ for (my $i = 0; $i < $Pod::Select::MAX_HEADING_LEVEL; ++$i) {
+ $headings[$i] = '' unless defined $headings[$i];
+ my $regex = $section_spec->[$i];
+ my $negated = ($regex =~ s/^\!//);
+ $match &= ($negated ? ($headings[$i] !~ /${regex}/)
+ : ($headings[$i] =~ /${regex}/));
+ last unless ($match);
+ } # end heading levels
+ if ($match) {
+ $$self{USAGE_SKIPPING} = 0;
+ last;
+ }
+ } # end sections
+ }
+
+ # Try to do some lowercasing instead of all-caps in headings, and use
+ # a colon to end all headings.
+ if($self->{USAGE_OPTIONS}->{-verbose} < 2) {
+ local $_ = $$self{PENDING}[-1][1];
+ s{([A-Z])([A-Z]+)}{((length($2) > 2) ? $1 : lc($1)) . lc($2)}ge;
+ s/\s*$/:/ unless (/:\s*$/);
+ $_ .= "\n";
+ $$self{PENDING}[-1][1] = $_;
+ }
+ }
+ if ($$self{USAGE_SKIPPING} && $element !~ m/^over-/) {
+ pop @{ $$self{PENDING} };
+ } else {
+ $self->SUPER::_handle_element_end($element);
+ }
+}
+
+# required for Pod::Simple API
+sub start_document {
+ my $self = shift;
+ $self->SUPER::start_document();
+ my $msg = $self->{USAGE_OPTIONS}->{-message} or return 1;
+ my $out_fh = $self->output_fh();
+ print $out_fh "$msg\n";
+}
+
+# required for old Pod::Parser API
+sub begin_pod {
+ my $self = shift;
+ $self->SUPER::begin_pod(); ## Have to call superclass
+ my $msg = $self->{USAGE_OPTIONS}->{-message} or return 1;
+ my $out_fh = $self->output_handle();
+ print $out_fh "$msg\n";
+}
+
+sub preprocess_paragraph {
+ my $self = shift;
+ local $_ = shift;
+ my $line = shift;
+ ## See if this is a heading and we arent printing the entire manpage.
+ if (($self->{USAGE_OPTIONS}->{-verbose} < 2) && /^=head/) {
+ ## Change the title of the SYNOPSIS section to USAGE
+ s/^=head1\s+SYNOPSIS\s*$/=head1 USAGE/;
+ ## Try to do some lowercasing instead of all-caps in headings
+ s{([A-Z])([A-Z]+)}{((length($2) > 2) ? $1 : lc($1)) . lc($2)}ge;
+ ## Use a colon to end all headings
+ s/\s*$/:/ unless (/:\s*$/);
+ $_ .= "\n";
+ }
+ return $self->SUPER::preprocess_paragraph($_);
+}
+
+1; # keep require happy
+
+__END__
+
+=head1 NAME
+
+Pod::Usage, pod2usage() - print a usage message from embedded pod documentation
+
+=head1 SYNOPSIS
+
+ use Pod::Usage
+
+ my $message_text = "This text precedes the usage message.";
+ my $exit_status = 2; ## The exit status to use
+ my $verbose_level = 0; ## The verbose level to use
+ my $filehandle = \*STDERR; ## The filehandle to write to
+
+ pod2usage($message_text);
+
+ pod2usage($exit_status);
+
+ pod2usage( { -message => $message_text ,
+ -exitval => $exit_status ,
+ -verbose => $verbose_level,
+ -output => $filehandle } );
+
+ pod2usage( -msg => $message_text ,
+ -exitval => $exit_status ,
+ -verbose => $verbose_level,
+ -output => $filehandle );
+
+ pod2usage( -verbose => 2,
+ -noperldoc => 1 )
+
+=head1 ARGUMENTS
+
+B<pod2usage> should be given either a single argument, or a list of
+arguments corresponding to an associative array (a "hash"). When a single
+argument is given, it should correspond to exactly one of the following:
+
+=over 4
+
+=item *
+
+A string containing the text of a message to print I<before> printing
+the usage message
+
+=item *
+
+A numeric value corresponding to the desired exit status
+
+=item *
+
+A reference to a hash
+
+=back
+
+If more than one argument is given then the entire argument list is
+assumed to be a hash. If a hash is supplied (either as a reference or
+as a list) it should contain one or more elements with the following
+keys:
+
+=over 4
+
+=item C<-message>
+
+=item C<-msg>
+
+The text of a message to print immediately prior to printing the
+program's usage message.
+
+=item C<-exitval>
+
+The desired exit status to pass to the B<exit()> function.
+This should be an integer, or else the string "NOEXIT" to
+indicate that control should simply be returned without
+terminating the invoking process.
+
+=item C<-verbose>
+
+The desired level of "verboseness" to use when printing the usage
+message. If the corresponding value is 0, then only the "SYNOPSIS"
+section of the pod documentation is printed. If the corresponding value
+is 1, then the "SYNOPSIS" section, along with any section entitled
+"OPTIONS", "ARGUMENTS", or "OPTIONS AND ARGUMENTS" is printed. If the
+corresponding value is 2 or more then the entire manpage is printed.
+
+The special verbosity level 99 requires to also specify the -sections
+parameter; then these sections are extracted (see L<Pod::Select>)
+and printed.
+
+=item C<-sections>
+
+A string representing a selection list for sections to be printed
+when -verbose is set to 99, e.g. C<"NAME|SYNOPSIS|DESCRIPTION|VERSION">.
+
+Alternatively, an array reference of section specifications can be used:
+
+ pod2usage(-verbose => 99,
+ -sections => [ qw(fred fred/subsection) ] );
+
+=item C<-output>
+
+A reference to a filehandle, or the pathname of a file to which the
+usage message should be written. The default is C<\*STDERR> unless the
+exit value is less than 2 (in which case the default is C<\*STDOUT>).
+
+=item C<-input>
+
+A reference to a filehandle, or the pathname of a file from which the
+invoking script's pod documentation should be read. It defaults to the
+file indicated by C<$0> (C<$PROGRAM_NAME> for users of F<English.pm>).
+
+If you are calling B<pod2usage()> from a module and want to display
+that module's POD, you can use this:
+
+ use Pod::Find qw(pod_where);
+ pod2usage( -input => pod_where({-inc => 1}, __PACKAGE__) );
+
+=item C<-pathlist>
+
+A list of directory paths. If the input file does not exist, then it
+will be searched for in the given directory list (in the order the
+directories appear in the list). It defaults to the list of directories
+implied by C<$ENV{PATH}>. The list may be specified either by a reference
+to an array, or by a string of directory paths which use the same path
+separator as C<$ENV{PATH}> on your system (e.g., C<:> for Unix, C<;> for
+MSWin32 and DOS).
+
+=item C<-noperldoc>
+
+By default, Pod::Usage will call L<perldoc> when -verbose >= 2 is
+specified. This does not work well e.g. if the script was packed
+with L<PAR>. The -noperldoc option suppresses the external call to
+L<perldoc> and uses the simple text formatter (L<Pod::Text>) to
+output the POD.
+
+=back
+
+=head2 Formatting base class
+
+The default text formatter depends on the Perl version (L<Pod::Text> or
+L<Pod::PlainText> for Perl versions E<lt> 5.005_58). The base class for
+Pod::Usage can be defined by pre-setting C<$Pod::Usage::Formatter> I<before>
+loading Pod::Usage, e.g.:
+
+ BEGIN { $Pod::Usage::Formatter = 'Pod::Text::Termcap'; }
+ use Pod::Usage qw(pod2usage);
+
+=head2 Pass-through options
+
+The following options are passed through to the underlying text formatter.
+See the manual pages of these modules for more information.
+
+ alt code indent loose margin quotes sentence stderr utf8 width
+
+=head1 DESCRIPTION
+
+B<pod2usage> will print a usage message for the invoking script (using
+its embedded pod documentation) and then exit the script with the
+desired exit status. The usage message printed may have any one of three
+levels of "verboseness": If the verbose level is 0, then only a synopsis
+is printed. If the verbose level is 1, then the synopsis is printed
+along with a description (if present) of the command line options and
+arguments. If the verbose level is 2, then the entire manual page is
+printed.
+
+Unless they are explicitly specified, the default values for the exit
+status, verbose level, and output stream to use are determined as
+follows:
+
+=over 4
+
+=item *
+
+If neither the exit status nor the verbose level is specified, then the
+default is to use an exit status of 2 with a verbose level of 0.
+
+=item *
+
+If an exit status I<is> specified but the verbose level is I<not>, then the
+verbose level will default to 1 if the exit status is less than 2 and
+will default to 0 otherwise.
+
+=item *
+
+If an exit status is I<not> specified but verbose level I<is> given, then
+the exit status will default to 2 if the verbose level is 0 and will
+default to 1 otherwise.
+
+=item *
+
+If the exit status used is less than 2, then output is printed on
+C<STDOUT>. Otherwise output is printed on C<STDERR>.
+
+=back
+
+Although the above may seem a bit confusing at first, it generally does
+"the right thing" in most situations. This determination of the default
+values to use is based upon the following typical Unix conventions:
+
+=over 4
+
+=item *
+
+An exit status of 0 implies "success". For example, B<diff(1)> exits
+with a status of 0 if the two files have the same contents.
+
+=item *
+
+An exit status of 1 implies possibly abnormal, but non-defective, program
+termination. For example, B<grep(1)> exits with a status of 1 if
+it did I<not> find a matching line for the given regular expression.
+
+=item *
+
+An exit status of 2 or more implies a fatal error. For example, B<ls(1)>
+exits with a status of 2 if you specify an illegal (unknown) option on
+the command line.
+
+=item *
+
+Usage messages issued as a result of bad command-line syntax should go
+to C<STDERR>. However, usage messages issued due to an explicit request
+to print usage (like specifying B<-help> on the command line) should go
+to C<STDOUT>, just in case the user wants to pipe the output to a pager
+(such as B<more(1)>).
+
+=item *
+
+If program usage has been explicitly requested by the user, it is often
+desirable to exit with a status of 1 (as opposed to 0) after issuing
+the user-requested usage message. It is also desirable to give a
+more verbose description of program usage in this case.
+
+=back
+
+B<pod2usage> doesn't force the above conventions upon you, but it will
+use them by default if you don't expressly tell it to do otherwise. The
+ability of B<pod2usage()> to accept a single number or a string makes it
+convenient to use as an innocent looking error message handling function:
+
+ use Pod::Usage;
+ use Getopt::Long;
+
+ ## Parse options
+ GetOptions("help", "man", "flag1") || pod2usage(2);
+ pod2usage(1) if ($opt_help);
+ pod2usage(-verbose => 2) if ($opt_man);
+
+ ## Check for too many filenames
+ pod2usage("$0: Too many files given.\n") if (@ARGV > 1);
+
+Some user's however may feel that the above "economy of expression" is
+not particularly readable nor consistent and may instead choose to do
+something more like the following:
+
+ use Pod::Usage;
+ use Getopt::Long;
+
+ ## Parse options
+ GetOptions("help", "man", "flag1") || pod2usage(-verbose => 0);
+ pod2usage(-verbose => 1) if ($opt_help);
+ pod2usage(-verbose => 2) if ($opt_man);
+
+ ## Check for too many filenames
+ pod2usage(-verbose => 2, -message => "$0: Too many files given.\n")
+ if (@ARGV > 1);
+
+As with all things in Perl, I<there's more than one way to do it>, and
+B<pod2usage()> adheres to this philosophy. If you are interested in
+seeing a number of different ways to invoke B<pod2usage> (although by no
+means exhaustive), please refer to L<"EXAMPLES">.
+
+=head1 EXAMPLES
+
+Each of the following invocations of C<pod2usage()> will print just the
+"SYNOPSIS" section to C<STDERR> and will exit with a status of 2:
+
+ pod2usage();
+
+ pod2usage(2);
+
+ pod2usage(-verbose => 0);
+
+ pod2usage(-exitval => 2);
+
+ pod2usage({-exitval => 2, -output => \*STDERR});
+
+ pod2usage({-verbose => 0, -output => \*STDERR});
+
+ pod2usage(-exitval => 2, -verbose => 0);
+
+ pod2usage(-exitval => 2, -verbose => 0, -output => \*STDERR);
+
+Each of the following invocations of C<pod2usage()> will print a message
+of "Syntax error." (followed by a newline) to C<STDERR>, immediately
+followed by just the "SYNOPSIS" section (also printed to C<STDERR>) and
+will exit with a status of 2:
+
+ pod2usage("Syntax error.");
+
+ pod2usage(-message => "Syntax error.", -verbose => 0);
+
+ pod2usage(-msg => "Syntax error.", -exitval => 2);
+
+ pod2usage({-msg => "Syntax error.", -exitval => 2, -output => \*STDERR});
+
+ pod2usage({-msg => "Syntax error.", -verbose => 0, -output => \*STDERR});
+
+ pod2usage(-msg => "Syntax error.", -exitval => 2, -verbose => 0);
+
+ pod2usage(-message => "Syntax error.",
+ -exitval => 2,
+ -verbose => 0,
+ -output => \*STDERR);
+
+Each of the following invocations of C<pod2usage()> will print the
+"SYNOPSIS" section and any "OPTIONS" and/or "ARGUMENTS" sections to
+C<STDOUT> and will exit with a status of 1:
+
+ pod2usage(1);
+
+ pod2usage(-verbose => 1);
+
+ pod2usage(-exitval => 1);
+
+ pod2usage({-exitval => 1, -output => \*STDOUT});
+
+ pod2usage({-verbose => 1, -output => \*STDOUT});
+
+ pod2usage(-exitval => 1, -verbose => 1);
+
+ pod2usage(-exitval => 1, -verbose => 1, -output => \*STDOUT});
+
+Each of the following invocations of C<pod2usage()> will print the
+entire manual page to C<STDOUT> and will exit with a status of 1:
+
+ pod2usage(-verbose => 2);
+
+ pod2usage({-verbose => 2, -output => \*STDOUT});
+
+ pod2usage(-exitval => 1, -verbose => 2);
+
+ pod2usage({-exitval => 1, -verbose => 2, -output => \*STDOUT});
+
+=head2 Recommended Use
+
+Most scripts should print some type of usage message to C<STDERR> when a
+command line syntax error is detected. They should also provide an
+option (usually C<-H> or C<-help>) to print a (possibly more verbose)
+usage message to C<STDOUT>. Some scripts may even wish to go so far as to
+provide a means of printing their complete documentation to C<STDOUT>
+(perhaps by allowing a C<-man> option). The following complete example
+uses B<Pod::Usage> in combination with B<Getopt::Long> to do all of these
+things:
+
+ use Getopt::Long;
+ use Pod::Usage;
+
+ my $man = 0;
+ my $help = 0;
+ ## Parse options and print usage if there is a syntax error,
+ ## or if usage was explicitly requested.
+ GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
+ pod2usage(1) if $help;
+ pod2usage(-verbose => 2) if $man;
+
+ ## If no arguments were given, then allow STDIN to be used only
+ ## if it's not connected to a terminal (otherwise print usage)
+ pod2usage("$0: No files given.") if ((@ARGV == 0) && (-t STDIN));
+ __END__
+
+ =head1 NAME
+
+ sample - Using GetOpt::Long and Pod::Usage
+
+ =head1 SYNOPSIS
+
+ sample [options] [file ...]
+
+ Options:
+ -help brief help message
+ -man full documentation
+
+ =head1 OPTIONS
+
+ =over 8
+
+ =item B<-help>
+
+ Print a brief help message and exits.
+
+ =item B<-man>
+
+ Prints the manual page and exits.
+
+ =back
+
+ =head1 DESCRIPTION
+
+ B<This program> will read the given input file(s) and do something
+ useful with the contents thereof.
+
+ =cut
+
+=head1 CAVEATS
+
+By default, B<pod2usage()> will use C<$0> as the path to the pod input
+file. Unfortunately, not all systems on which Perl runs will set C<$0>
+properly (although if C<$0> isn't found, B<pod2usage()> will search
+C<$ENV{PATH}> or else the list specified by the C<-pathlist> option).
+If this is the case for your system, you may need to explicitly specify
+the path to the pod docs for the invoking script using something
+similar to the following:
+
+ pod2usage(-exitval => 2, -input => "/path/to/your/pod/docs");
+
+In the pathological case that a script is called via a relative path
+I<and> the script itself changes the current working directory
+(see L<perlfunc/chdir>) I<before> calling pod2usage, Pod::Usage will
+fail even on robust platforms. Don't do that. Or use L<FindBin> to locate
+the script:
+
+ use FindBin;
+ pod2usage(-input => $FindBin::Bin . "/" . $FindBin::Script);
+
+=head1 AUTHOR
+
+Please report bugs using L<http://rt.cpan.org>.
+
+Marek Rouchal E<lt>marekr at cpan.orgE<gt>
+
+Brad Appleton E<lt>bradapp at enteract.comE<gt>
+
+Based on code for B<Pod::Text::pod2text()> written by
+Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
+
+=head1 ACKNOWLEDGMENTS
+
+Steven McDougall E<lt>swmcd at world.std.comE<gt> for his help and patience
+with re-writing this manpage.
+
+=head1 SEE ALSO
+
+B<Pod::Usage> is now a standalone distribution.
+
+L<Pod::Parser>, L<Pod::Perldoc>, L<Getopt::Long>, L<Pod::Find>, L<FindBin>,
+L<Pod::Text>, L<Pod::PlainText>, L<Pod::Text::Termcap>
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Usage/scripts/pod2usage.PL
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/scripts/pod2usage.PL (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/scripts/pod2usage.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,190 @@
+#!/usr/local/bin/perl
+
+use Config;
+use File::Basename qw(&basename &dirname);
+use Cwd;
+
+# List explicitly here the variables you want Configure to
+# generate. Metaconfig only looks for shell variables, so you
+# have to mention them as if they were shell variables, not
+# %Config entries. Thus you write
+# $startperl
+# to ensure Configure will look for $Config{startperl}.
+
+# This forces PL files to create target in same directory as PL file.
+# This is so that make depend always knows where to find PL derivatives.
+$origdir = cwd;
+chdir(dirname($0));
+$file = basename($0, '.PL');
+$file .= '.com' if $^O eq 'VMS';
+
+open OUT,">$file" or die "Can't create $file: $!";
+
+print "Extracting $file (with variable substitutions)\n";
+
+# In this section, perl variables will be expanded during extraction.
+# You can use $Config{...} to use Configure variables.
+
+print OUT <<"!GROK!THIS!";
+$Config{'startperl'}
+ eval 'exec perl -S \$0 "\$@"'
+ if 0;
+!GROK!THIS!
+
+# In the following, perl variables are not expanded during extraction.
+
+print OUT <<'!NO!SUBS!';
+
+#############################################################################
+# pod2usage -- command to print usage messages from embedded pod docs
+#
+# Copyright (c) 1996-2000 by Bradford Appleton. All rights reserved.
+# This file is part of "PodParser". PodParser is free software;
+# you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+#############################################################################
+
+use strict;
+#use diagnostics;
+
+=head1 NAME
+
+pod2usage - print usage messages from embedded pod docs in files
+
+=head1 SYNOPSIS
+
+=over 12
+
+=item B<pod2usage>
+
+[B<-help>]
+[B<-man>]
+[B<-exit>S< >I<exitval>]
+[B<-output>S< >I<outfile>]
+[B<-verbose> I<level>]
+[B<-pathlist> I<dirlist>]
+[B<-formatter> I<module>]
+I<file>
+
+=back
+
+=head1 OPTIONS AND ARGUMENTS
+
+=over 8
+
+=item B<-help>
+
+Print a brief help message and exit.
+
+=item B<-man>
+
+Print this command's manual page and exit.
+
+=item B<-exit> I<exitval>
+
+The exit status value to return.
+
+=item B<-output> I<outfile>
+
+The output file to print to. If the special names "-" or ">&1" or ">&STDOUT"
+are used then standard output is used. If ">&2" or ">&STDERR" is used then
+standard error is used.
+
+=item B<-verbose> I<level>
+
+The desired level of verbosity to use:
+
+ 1 : print SYNOPSIS only
+ 2 : print SYNOPSIS sections and any OPTIONS/ARGUMENTS sections
+ 3 : print the entire manpage (similar to running pod2text)
+
+=item B<-pathlist> I<dirlist>
+
+Specifies one or more directories to search for the input file if it
+was not supplied with an absolute path. Each directory path in the given
+list should be separated by a ':' on Unix (';' on MSWin32 and DOS).
+
+=item B<-formatter> I<module>
+
+Which text formatter to use. Default is L<Pod::Text>, or for very old
+Perl versions L<Pod::PlainText>. An alternative would be e.g.
+L<Pod::Text::Termcap>.
+
+=item I<file>
+
+The pathname of a file containing pod documentation to be output in
+usage message format (defaults to standard input).
+
+=back
+
+=head1 DESCRIPTION
+
+B<pod2usage> will read the given input file looking for pod
+documentation and will print the corresponding usage message.
+If no input file is specified then standard input is read.
+
+B<pod2usage> invokes the B<pod2usage()> function in the B<Pod::Usage>
+module. Please see L<Pod::Usage/pod2usage()>.
+
+=head1 SEE ALSO
+
+L<Pod::Usage>, L<pod2text(1)>
+
+=head1 AUTHOR
+
+Please report bugs using L<http://rt.cpan.org>.
+
+Brad Appleton E<lt>bradapp at enteract.comE<gt>
+
+Based on code for B<pod2text(1)> written by
+Tom Christiansen E<lt>tchrist at mox.perl.comE<gt>
+
+=cut
+
+use Getopt::Long;
+
+## Define options
+my %options = ();
+my @opt_specs = (
+ 'help',
+ 'man',
+ 'exit=i',
+ 'output=s',
+ 'pathlist=s',
+ 'formatter=s',
+ 'verbose=i',
+);
+
+## Parse options
+GetOptions(\%options, @opt_specs) || pod2usage(2);
+$Pod::Usage::Formatter = $options{formatter} if $options{formatter};
+require Pod::Usage;
+Pod::Usage->import();
+pod2usage(1) if ($options{help});
+pod2usage(VERBOSE => 2) if ($options{man});
+
+## Dont default to STDIN if connected to a terminal
+pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
+
+ at ARGV = ('-') unless (@ARGV);
+if (@ARGV > 1) {
+ print STDERR "pod2usage: Too many filenames given\n\n";
+ pod2usage(2);
+}
+
+my %usage = ();
+$usage{-input} = shift(@ARGV);
+$usage{-exitval} = $options{'exit'} if (defined $options{'exit'});
+$usage{-output} = $options{'output'} if (defined $options{'output'});
+$usage{-verbose} = $options{'verbose'} if (defined $options{'verbose'});
+$usage{-pathlist} = $options{'pathlist'} if (defined $options{'pathlist'});
+
+pod2usage(\%usage);
+
+
+!NO!SUBS!
+
+close OUT or die "Can't close $file: $!";
+chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
+exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
+chdir $origdir;
Added: vendor/perl/dist/cpan/Pod-Usage/t/pod/p2u_data.pl
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/t/pod/p2u_data.pl (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/t/pod/p2u_data.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,18 @@
+use Pod::Usage;
+pod2usage(-verbose => 2, -exit => 17, -input => \*DATA);
+
+__DATA__
+=head1 NAME
+
+Test
+
+=head1 SYNOPSIS
+
+perl podusagetest.pl
+
+=head1 DESCRIPTION
+
+This is a test.
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,18 @@
+BEGIN {
+ use File::Basename;
+ my $THISDIR = dirname $0;
+ unshift @INC, $THISDIR;
+ require "testp2pt.pl";
+ import TestPodIncPlainText;
+}
+
+my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
+my $passed = testpodplaintext \%options, $0;
+exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
+
+
+__END__
+
+=include pod2usage.PL
+
+
Added: vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage.xr
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage.xr (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage.xr 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,63 @@
+###### begin =include pod2usage.PL #####
+NAME
+ pod2usage - print usage messages from embedded pod docs in files
+
+SYNOPSIS
+ pod2usage [-help] [-man] [-exit *exitval*] [-output *outfile*]
+ [-verbose *level*] [-pathlist *dirlist*] [-formatter
+ *module*] *file*
+
+OPTIONS AND ARGUMENTS
+ -help Print a brief help message and exit.
+
+ -man Print this command's manual page and exit.
+
+ -exit *exitval*
+ The exit status value to return.
+
+ -output *outfile*
+ The output file to print to. If the special names "-" or ">&1"
+ or ">&STDOUT" are used then standard output is used. If ">&2" or
+ ">&STDERR" is used then standard error is used.
+
+ -verbose *level*
+ The desired level of verbosity to use:
+
+ 1 : print SYNOPSIS only
+ 2 : print SYNOPSIS sections and any OPTIONS/ARGUMENTS sections
+ 3 : print the entire manpage (similar to running pod2text)
+
+ -pathlist *dirlist*
+ Specifies one or more directories to search for the input file
+ if it was not supplied with an absolute path. Each directory
+ path in the given list should be separated by a ':' on Unix (';'
+ on MSWin32 and DOS).
+
+ -formatter *module*
+ Which text formatter to use. Default is the Pod::Text manpage,
+ or for very old Perl versions the Pod::PlainText manpage. An
+ alternative would be e.g. the Pod::Text::Termcap manpage.
+
+ *file* The pathname of a file containing pod documentation to be output
+ in usage message format (defaults to standard input).
+
+DESCRIPTION
+ pod2usage will read the given input file looking for pod documentation
+ and will print the corresponding usage message. If no input file is
+ specified then standard input is read.
+
+ pod2usage invokes the pod2usage() function in the Pod::Usage module.
+ Please see the pod2usage() entry in the Pod::Usage manpage.
+
+SEE ALSO
+ the Pod::Usage manpage, the pod2text(1) manpage
+
+AUTHOR
+ Please report bugs using http://rt.cpan.org.
+
+ Brad Appleton <bradapp at enteract.com>
+
+ Based on code for pod2text(1) written by Tom Christiansen
+ <tchrist at mox.perl.com>
+
+###### end =include pod2usage.PL #####
Added: vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage2.t
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage2.t (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/t/pod/pod2usage2.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,357 @@
+#!/usr/bin/perl -w
+
+use Test::More;
+use strict;
+
+BEGIN {
+ if ($^O eq 'MSWin32' || $^O eq 'VMS') {
+ plan skip_all => "Not portable on Win32 or VMS\n";
+ }
+ else {
+ plan tests => 34;
+ }
+ use_ok ("Pod::Usage");
+}
+
+sub getoutput
+{
+ my ($code) = @_;
+ my $pid = open(TEST_IN, "-|");
+ unless(defined $pid) {
+ die "Cannot fork: $!";
+ }
+ if($pid) {
+ # parent
+ my @out = <TEST_IN>;
+ close(TEST_IN);
+ my $exit = $?>>8;
+ s/^/#/ for @out;
+ local $" = "";
+ print "#EXIT=$exit OUTPUT=+++#@out#+++\n";
+ return($exit, join("", at out));
+ }
+ # child
+ open(STDERR, ">&STDOUT");
+ Test::More->builder->no_ending(1);
+ &$code;
+ print "--NORMAL-RETURN--\n";
+ exit 0;
+}
+
+sub compare
+{
+ my ($left,$right) = @_;
+ $left =~ s/^#\s+/#/gm;
+ $right =~ s/^#\s+/#/gm;
+ $left =~ s/\s+/ /gm;
+ $right =~ s/\s+/ /gm;
+ $left eq $right;
+}
+
+SKIP: {
+if('Pod::Usage'->isa('Pod::Text') && $Pod::Text::VERSION < 2.18) {
+ skip("Formatting with Pod::Text $Pod::Text::VERSION not reliable", 33);
+}
+
+my ($exit, $text) = getoutput( sub { pod2usage() } );
+is ($exit, 2, "Exit status pod2usage ()");
+ok (compare ($text, <<'EOT'), "Output test pod2usage ()");
+#Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] file ...
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(
+ -message => 'You naughty person, what did you say?',
+ -verbose => 1 ) });
+is ($exit, 1, "Exit status pod2usage (-message => '...', -verbose => 1)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-message => '...', -verbose => 1)") or diag("Got:\n$text\n");
+#You naughty person, what did you say?
+# Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] file ...
+#
+# Options:
+# -r | --recursive
+# Run recursively.
+#
+# -f | --force
+# Just do it!
+#
+# -n number
+# Specify number of frobs, default is 42.
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(
+ -verbose => 2, -exit => 42 ) } );
+is ($exit, 42, "Exit status pod2usage (-verbose => 2, -exit => 42)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-verbose => 2, -exit => 42)");
+#NAME
+# frobnicate - do what I mean
+#
+# SYNOPSIS
+# frobnicate [ -r | --recursive ] [ -f | --force ] file ...
+#
+# DESCRIPTION
+# frobnicate does foo and bar and what not.
+#
+# OPTIONS
+# -r | --recursive
+# Run recursively.
+#
+# -f | --force
+# Just do it!
+#
+# -n number
+# Specify number of frobs, default is 42.
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(0) } );
+is ($exit, 0, "Exit status pod2usage (0)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (0)");
+#Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] file ...
+#
+# Options:
+# -r | --recursive
+# Run recursively.
+#
+# -f | --force
+# Just do it!
+#
+# -n number
+# Specify number of frobs, default is 42.
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(42) } );
+is ($exit, 42, "Exit status pod2usage (42)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (42)");
+#Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] file ...
+#
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(-verbose => 0, -exit => 'NOEXIT') } );
+is ($exit, 0, "Exit status pod2usage (-verbose => 0, -exit => 'NOEXIT')");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-verbose => 0, -exit => 'NOEXIT')");
+#Usage:
+# frobnicate [ -r | --recursive ] [ -f | --force ] file ...
+#
+# --NORMAL-RETURN--
+EOT
+
+($exit, $text) = getoutput( sub { pod2usage(-verbose => 99, -sections => 'DESCRIPTION') } );
+is ($exit, 1, "Exit status pod2usage (-verbose => 99, -sections => 'DESCRIPTION')");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-verbose => 99, -sections => 'DESCRIPTION')");
+#Description:
+# frobnicate does foo and bar and what not.
+#
+EOT
+
+# does the __DATA__ work ok as input
+my (@blib, $test_script, $pod_file1, , $pod_file2);
+if (!$ENV{PERL_CORE}) {
+ @blib = '-Mblib';
+}
+$test_script = File::Spec->catfile(qw(t pod p2u_data.pl));
+$pod_file1 = File::Spec->catfile(qw(t pod usage.pod));
+$pod_file2 = File::Spec->catfile(qw(t pod usage2.pod));
+
+
+($exit, $text) = getoutput( sub { system($^X, @blib, $test_script); exit($? >> 8); } );
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+is ($exit, 17, "Exit status pod2usage (-verbose => 2, -input => \*DATA)");
+ok (compare ($text, <<'EOT'), "Output test pod2usage (-verbose => 2, -input => \*DATA)") or diag "Got:\n$text\n";
+#NAME
+# Test
+#
+#SYNOPSIS
+# perl podusagetest.pl
+#
+#DESCRIPTION
+# This is a test.
+#
+EOT
+
+# test that SYNOPSIS and USAGE are printed
+($exit, $text) = getoutput( sub { pod2usage(-input => $pod_file1,
+ -exitval => 0, -verbose => 0); });
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+is ($exit, 0, "Exit status pod2usage with USAGE");
+ok (compare ($text, <<'EOT'), "Output test pod2usage with USAGE") or diag "Got:\n$text\n";
+#Usage:
+# This is a test for CPAN#33020
+#
+#Usage:
+# And this will be also printed.
+#
+EOT
+
+# test that SYNOPSIS and USAGE are printed with options
+($exit, $text) = getoutput( sub { pod2usage(-input => $pod_file1,
+ -exitval => 0, -verbose => 1); });
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+is ($exit, 0, "Exit status pod2usage with USAGE and verbose=1");
+ok (compare ($text, <<'EOT'), "Output test pod2usage with USAGE and verbose=1") or diag "Got:\n$text\n";
+#Usage:
+# This is a test for CPAN#33020
+#
+#Usage:
+# And this will be also printed.
+#
+#Options:
+# And this with verbose == 1
+#
+EOT
+
+# test that only USAGE is printed when requested
+($exit, $text) = getoutput( sub { pod2usage(-input => $pod_file1,
+ -exitval => 0, -verbose => 99, -sections => 'USAGE'); });
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+is ($exit, 0, "Exit status pod2usage with USAGE and verbose=99");
+ok (compare ($text, <<'EOT'), "Output test pod2usage with USAGE and verbose=99") or diag "Got:\n$text\n";
+#Usage:
+# This is a test for CPAN#33020
+#
+EOT
+
+# test with pod_where
+use_ok('Pod::Find', qw(pod_where));
+
+($exit, $text) = getoutput( sub { pod2usage( -input => pod_where({-inc => 1}, 'Pod::Usage'),
+ -exitval => 0, -verbose => 0) } );
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+is ($exit, 0, "Exit status pod2usage with Pod::Find");
+ok (compare ($text, <<'EOT'), "Output test pod2usage with Pod::Find") or diag "Got:\n$text\n";
+#Usage:
+# use Pod::Usage
+#
+# my $message_text = "This text precedes the usage message.";
+# my $exit_status = 2; ## The exit status to use
+# my $verbose_level = 0; ## The verbose level to use
+# my $filehandle = \*STDERR; ## The filehandle to write to
+#
+# pod2usage($message_text);
+#
+# pod2usage($exit_status);
+#
+# pod2usage( { -message => $message_text ,
+# -exitval => $exit_status ,
+# -verbose => $verbose_level,
+# -output => $filehandle } );
+#
+# pod2usage( -msg => $message_text ,
+# -exitval => $exit_status ,
+# -verbose => $verbose_level,
+# -output => $filehandle );
+#
+# pod2usage( -verbose => 2,
+# -noperldoc => 1 )
+#
+EOT
+
+# verify that sections are correctly found after nested headings
+($exit, $text) = getoutput( sub { pod2usage(-input => $pod_file2,
+ -exitval => 0, -verbose => 99,
+ -sections => [qw(BugHeader BugHeader/.*')]) });
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+is ($exit, 0, "Exit status pod2usage with nested headings");
+ok (compare ($text, <<'EOT'), "Output test pod2usage with nested headings") or diag "Got:\n$text\n";
+#BugHeader:
+# Some text
+#
+# BugHeader2:
+# More
+# Still More
+#
+EOT
+
+# Verify that =over =back work OK
+($exit, $text) = getoutput( sub {
+ pod2usage(-input => $pod_file2,
+ -exitval => 0, -verbose => 99, -sections => 'BugHeader/BugHeader2') } );
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+is ($exit, 0, "Exit status pod2usage with over/back");
+ok (compare ($text, <<'EOT'), "Output test pod2usage with over/back") or diag "Got:\n$text\n";
+# BugHeader2:
+# More
+# Still More
+#
+EOT
+
+# new array API for -sections
+($exit, $text) = getoutput( sub {
+ pod2usage(-input => $pod_file2,
+ -exitval => 0, -verbose => 99, -sections => [qw(Heading-1/!.+ Heading-2/.+)]) } );
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+is ($exit, 0, "Exit status pod2usage with -sections => []");
+ok (compare ($text, <<'EOT'), "Output test pod2usage with -sections => []") or diag "Got:\n$text\n";
+#Heading-1:
+# One
+# Two
+#
+# Heading-2.2:
+# More text.
+#
+EOT
+
+# allow subheadings in OPTIONS and ARGUMENTS
+($exit, $text) = getoutput( sub {
+ pod2usage(-input => $pod_file2,
+ -exitval => 0, -verbose => 1) } );
+$text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR
+$text =~ s{[*](destination|files)[*]}{$1}g; # strip * chars
+is ($exit, 0, "Exit status pod2usage with subheadings in OPTIONS");
+ok (compare ($text, <<'EOT'), "Output test pod2usage with subheadings in OPTIONS") or diag "Got:\n$text\n";
+#Options and Arguments:
+# Arguments:
+# The required arguments (which typically follow any options on the
+# command line) are:
+#
+# destination
+# files
+#
+# Options:
+# Options may be abbreviated. Options which take values may be separated
+# from the values by whitespace or the "=" character.
+#
+EOT
+} # end SKIP
+
+__END__
+
+=head1 NAME
+
+frobnicate - do what I mean
+
+=head1 SYNOPSIS
+
+B<frobnicate> S<[ B<-r> | B<--recursive> ]> S<[ B<-f> | B<--force> ]>
+ file ...
+
+=head1 DESCRIPTION
+
+B<frobnicate> does foo and bar and what not.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-r> | B<--recursive>
+
+Run recursively.
+
+=item B<-f> | B<--force>
+
+Just do it!
+
+=item B<-n> number
+
+Specify number of frobs, default is 42.
+
+=back
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Usage/t/pod/testcmp.pl
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/t/pod/testcmp.pl (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/t/pod/testcmp.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,94 @@
+package TestCompare;
+
+use vars qw(@ISA @EXPORT $MYPKG);
+#use strict;
+#use diagnostics;
+use Carp;
+use Exporter;
+use File::Basename;
+use File::Spec;
+use FileHandle;
+
+ at ISA = qw(Exporter);
+ at EXPORT = qw(&testcmp);
+$MYPKG = eval { (caller)[0] };
+
+##--------------------------------------------------------------------------
+
+=head1 NAME
+
+testcmp -- compare two files line-by-line
+
+=head1 SYNOPSIS
+
+ $is_diff = testcmp($file1, $file2);
+
+or
+
+ $is_diff = testcmp({-cmplines => \&mycmp}, $file1, $file2);
+
+=head2 DESCRIPTION
+
+Compare two text files line-by-line and return 0 if they are the
+same, 1 if they differ. Each of $file1 and $file2 may be a filenames,
+or a filehandles (in which case it must already be open for reading).
+
+If the first argument is a hashref, then the B<-cmplines> key in the
+hash may have a subroutine reference as its corresponding value.
+The referenced user-defined subroutine should be a line-comparator
+function that takes two pre-chomped text-lines as its arguments
+(the first is from $file1 and the second is from $file2). It should
+return 0 if it considers the two lines equivalent, and non-zero
+otherwise.
+
+=cut
+
+##--------------------------------------------------------------------------
+
+sub testcmp( $ $ ; $) {
+ my %opts = ref($_[0]) eq 'HASH' ? %{shift()} : ();
+ my ($file1, $file2) = @_;
+ my ($fh1, $fh2) = ($file1, $file2);
+ unless (ref $fh1) {
+ $fh1 = FileHandle->new($file1, "r") or die "Can't open $file1: $!";
+ }
+ unless (ref $fh2) {
+ $fh2 = FileHandle->new($file2, "r") or die "Can't open $file2: $!";
+ }
+
+ my $cmplines = $opts{'-cmplines'} || undef;
+ my ($f1text, $f2text) = ("", "");
+ my ($line, $diffs) = (0, 0);
+
+ while ( defined($f1text) and defined($f2text) ) {
+ defined($f1text = <$fh1>) and chomp($f1text);
+ defined($f2text = <$fh2>) and chomp($f2text);
+ ++$line;
+ last unless ( defined($f1text) and defined($f2text) );
+ # kill any extra line endings
+ $f1text =~ s/[\r\n]+$//s;
+ $f2text =~ s/[\r\n]+$//s;
+ $diffs = (ref $cmplines) ? &$cmplines($f1text, $f2text)
+ : ($f1text ne $f2text);
+ last if $diffs;
+ }
+ close($fh1) unless (ref $file1);
+ close($fh2) unless (ref $file2);
+
+ $diffs = 1 if (defined($f1text) or defined($f2text));
+ if ( defined($f1text) and defined($f2text) ) {
+ ## these two lines must be different
+ warn "$file1 and $file2 differ at line $line\n";
+ }
+ elsif (defined($f1text) and (! defined($f1text))) {
+ ## file1 must be shorter
+ warn "$file1 is shorter than $file2\n";
+ }
+ elsif (defined $f2text) {
+ ## file2 must be longer
+ warn "$file1 is shorter than $file2\n";
+ }
+ return $diffs;
+}
+
+1;
Added: vendor/perl/dist/cpan/Pod-Usage/t/pod/testp2pt.pl
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/t/pod/testp2pt.pl (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/t/pod/testp2pt.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,192 @@
+package TestPodIncPlainText;
+
+BEGIN {
+ use File::Basename;
+ use File::Spec;
+ use Cwd qw(abs_path);
+ push @INC, '..';
+ my $THISDIR = abs_path(dirname $0);
+ unshift @INC, $THISDIR;
+ require "testcmp.pl";
+ import TestCompare;
+ my $PARENTDIR = dirname $THISDIR;
+ push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
+}
+
+#use strict;
+#use diagnostics;
+use Carp;
+use Exporter;
+#use File::Compare;
+#use Cwd qw(abs_path);
+
+use vars qw($MYPKG @EXPORT @ISA);
+$MYPKG = eval { (caller)[0] };
+ at EXPORT = qw(&testpodplaintext);
+BEGIN {
+ require Pod::PlainText;
+ @ISA = qw( Pod::PlainText );
+ require VMS::Filespec if $^O eq 'VMS';
+}
+
+## Hardcode settings for TERMCAP and COLUMNS so we can try to get
+## reproducible results between environments
+ at ENV{qw(TERMCAP COLUMNS)} = ('co=76:do=^J', 76);
+
+sub catfile(@) { File::Spec->catfile(@_); }
+
+my $INSTDIR = abs_path(dirname $0);
+$INSTDIR = VMS::Filespec::unixpath($INSTDIR) if $^O eq 'VMS';
+$INSTDIR =~ s#/$## if $^O eq 'VMS';
+$INSTDIR =~ s#:$## if $^O eq 'MacOS';
+$INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 'pod');
+$INSTDIR =~ s#:$## if $^O eq 'MacOS';
+$INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 't');
+my @PODINCDIRS = ( catfile($INSTDIR, 'lib', 'Pod'),
+ catfile($INSTDIR, 'scripts'),
+ catfile($INSTDIR, 'pod'),
+ catfile($INSTDIR, 't', 'pod')
+ );
+
+# FIXME - we should make the core capable of finding utilities built in
+# locations in ext.
+push @PODINCDIRS, catfile((File::Spec->updir()) x 2, 'pod') if $ENV{PERL_CORE};
+
+## Find the path to the file to =include
+sub findinclude {
+ my $self = shift;
+ my $incname = shift;
+
+ ## See if its already found w/out any "searching;
+ return $incname if (-r $incname);
+
+ ## Need to search for it. Look in the following directories ...
+ ## 1. the directory containing this pod file
+ my $thispoddir = dirname $self->input_file;
+ ## 2. the parent directory of the above
+ my $parentdir = dirname $thispoddir;
+ my @podincdirs = ($thispoddir, $parentdir, @PODINCDIRS);
+
+ for (@podincdirs) {
+ my $incfile = catfile($_, $incname);
+ return $incfile if (-r $incfile);
+ }
+ warn("*** Can't find =include file $incname in @podincdirs\n");
+ return "";
+}
+
+sub command {
+ my $self = shift;
+ my ($cmd, $text, $line_num, $pod_para) = @_;
+ $cmd = '' unless (defined $cmd);
+ local $_ = $text || '';
+ my $out_fh = $self->output_handle;
+
+ ## Defer to the superclass for everything except '=include'
+ return $self->SUPER::command(@_) unless ($cmd eq "include");
+
+ ## We have an '=include' command
+ my $incdebug = 1; ## debugging
+ my @incargs = split;
+ if (@incargs == 0) {
+ warn("*** No filename given for '=include'\n");
+ return;
+ }
+ my $incfile = $self->findinclude(shift @incargs) or return;
+ my $incbase = basename $incfile;
+ print $out_fh "###### begin =include $incbase #####\n" if ($incdebug);
+ $self->parse_from_file( {-cutting => 1}, $incfile );
+ print $out_fh "###### end =include $incbase #####\n" if ($incdebug);
+}
+
+sub begin_input {
+ $_[0]->{_INFILE} = VMS::Filespec::unixify($_[0]->{_INFILE}) if $^O eq 'VMS';
+}
+
+sub podinc2plaintext( $ $ ) {
+ my ($infile, $outfile) = @_;
+ local $_;
+ my $text_parser = $MYPKG->new;
+ $text_parser->parse_from_file($infile, $outfile);
+}
+
+sub testpodinc2plaintext( @ ) {
+ my %args = @_;
+ my $infile = $args{'-In'} || croak "No input file given!";
+ my $outfile = $args{'-Out'} || croak "No output file given!";
+ my $cmpfile = $args{'-Cmp'} || croak "No compare-result file given!";
+
+ my $different = '';
+ my $testname = basename $cmpfile, '.t', '.xr';
+
+ unless (-e $cmpfile) {
+ my $msg = "*** Can't find comparison file $cmpfile for testing $infile";
+ warn "$msg\n";
+ return $msg;
+ }
+
+ print "# Running testpodinc2plaintext for '$testname'...\n";
+ ## Compare the output against the expected result
+ podinc2plaintext($infile, $outfile);
+ if ( testcmp($outfile, $cmpfile) ) {
+ $different = "$outfile is different from $cmpfile";
+ }
+ else {
+ unlink($outfile);
+ }
+ return $different;
+}
+
+sub testpodplaintext( @ ) {
+ my %opts = (ref $_[0] eq 'HASH') ? %{shift()} : ();
+ my @testpods = @_;
+ my ($testname, $testdir) = ("", "");
+ my ($podfile, $cmpfile) = ("", "");
+ my ($outfile, $errfile) = ("", "");
+ my $passes = 0;
+ my $failed = 0;
+ local $_;
+
+ print "1..", scalar @testpods, "\n" unless ($opts{'-xrgen'});
+
+ for $podfile (@testpods) {
+ ($testname, $_) = fileparse($podfile);
+ $testdir ||= $_;
+ $testname =~ s/\.t$//;
+ $cmpfile = $testdir . $testname . '.xr';
+ $outfile = $testdir . $testname . '.OUT';
+
+ if ($opts{'-xrgen'}) {
+ if ($opts{'-force'} or ! -e $cmpfile) {
+ ## Create the comparison file
+ print "# Creating expected result for \"$testname\"" .
+ " pod2plaintext test ...\n";
+ podinc2plaintext($podfile, $cmpfile);
+ }
+ else {
+ print "# File $cmpfile already exists" .
+ " (use '-force' to regenerate it).\n";
+ }
+ next;
+ }
+
+ my $failmsg = testpodinc2plaintext
+ -In => $podfile,
+ -Out => $outfile,
+ -Cmp => $cmpfile;
+ if ($failmsg) {
+ ++$failed;
+ print "#\tFAILED. ($failmsg)\n";
+ print "not ok ", $failed+$passes, "\n";
+ }
+ else {
+ ++$passes;
+ unlink($outfile);
+ print "#\tPASSED.\n";
+ print "ok ", $failed+$passes, "\n";
+ }
+ }
+ return $passes;
+}
+
+1;
Added: vendor/perl/dist/cpan/Pod-Usage/t/pod/usage.pod
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/t/pod/usage.pod (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/t/pod/usage.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,18 @@
+=head1 NAME
+
+usage.pod - example for testing USAGE and SYNOPSIS
+
+=head1 USAGE
+
+This is a test for CPAN#33020
+
+=head1 SYNOPSIS
+
+And this will be also printed.
+
+=head1 OPTIONS
+
+And this with verbose == 1
+
+=cut
+
Added: vendor/perl/dist/cpan/Pod-Usage/t/pod/usage2.pod
===================================================================
--- vendor/perl/dist/cpan/Pod-Usage/t/pod/usage2.pod (rev 0)
+++ vendor/perl/dist/cpan/Pod-Usage/t/pod/usage2.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,56 @@
+=head1 Heading-1
+
+=over 100
+
+=item One
+
+=item Two
+
+=back
+
+=head2 Heading 2
+
+Some text
+
+=head1 BugHeader
+
+Some text
+
+=head2 BugHeader2
+
+=over 4
+
+=item More
+
+=item Still More
+
+=back
+
+=head1 Heading-2
+
+=head2 Heading-2.2
+
+More text.
+
+=head1 OPTIONS AND ARGUMENTS
+
+=head2 Arguments
+
+The required arguments (which typically follow any options on the
+command line) are:
+
+=over
+
+=item I<destination>
+
+=item I<files>
+
+=back
+
+=head2 Options
+
+Options may be abbreviated. Options which take values may be separated
+from the values by whitespace or the "=" character.
+
+=cut
+
Added: vendor/perl/dist/cpan/Socket/Makefile.PL
===================================================================
--- vendor/perl/dist/cpan/Socket/Makefile.PL (rev 0)
+++ vendor/perl/dist/cpan/Socket/Makefile.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,266 @@
+#!perl
+use strict;
+use warnings;
+
+use ExtUtils::MakeMaker;
+use ExtUtils::Constant 0.23 'WriteConstants';
+use Config;
+
+my @DEFINES;
+
+my $cb;
+my $seq = 0;
+sub check_for
+{
+ my %args = @_;
+ return if $ENV{PERL_CORE};
+ return if defined $Config{$args{confkey}};
+
+ require ExtUtils::CBuilder;
+ $cb ||= ExtUtils::CBuilder->new( quiet => 1 );
+
+ my $main = $args{main};
+
+ print "Checking $args{define}...\n";
+
+ my $file_base = "test-$seq"; $seq++;
+
+ my $file_source = "$file_base.c";
+
+ {
+ open( my $file_source_fh, ">", $file_source ) or die "Cannot write $file_source - $!";
+ print $file_source_fh <<"EOF";
+#include <sys/types.h>
+#ifdef WIN32
+# include <ws2tcpip.h>
+# include <winsock.h>
+#else
+# include <sys/socket.h>
+# include <netdb.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+#endif
+int main(int argc, char *argv[])
+ {
+ (void)argc;
+ (void)argv;
+ $main
+ return 0;
+ }
+EOF
+ }
+
+ my $file_obj = eval { $cb->compile( source => $file_source ) };
+ unlink $file_source;
+
+ return 0 unless defined $file_obj;
+
+ my $file_exe = eval { $cb->link_executable( objects => $file_obj ) };
+ unlink $file_obj;
+
+ return 0 unless defined $file_exe;
+
+ # Don't need to try running it
+ unlink $file_exe;
+
+ push @DEFINES, $args{define};
+}
+
+sub check_for_func
+{
+ my %args = @_;
+ my $func = delete $args{func};
+ check_for( %args, main => "void *p = &$func; (void)p;" );
+}
+
+my %defines = (
+ # -Dfoo func() $Config{key}
+ HAS_GETADDRINFO => [ "getaddrinfo", "d_getaddrinfo" ],
+ HAS_GETNAMEINFO => [ "getnameinfo", "d_getnameinfo" ],
+ HAS_INET_ATON => [ "inet_aton", "d_inetaton" ],
+ HAS_INETNTOP => [ "inet_ntop", "d_inetntop" ],
+ HAS_INETPTON => [ "inet_pton", "d_inetpton" ],
+);
+
+foreach my $define ( sort keys %defines ) {
+ my ( $func, $key ) = @{$defines{$define}};
+ check_for_func(
+ confkey => $key,
+ define => $define,
+ func => $func
+ );
+}
+
+check_for(
+ confkey => "d_sockaddr_sa_len",
+ define => "HAS_SOCKADDR_SA_LEN",
+ main => "struct sockaddr sa; sa.sa_len = 0;"
+);
+
+check_for(
+ confkey => "d_sockaddr_in6",
+ define => "HAS_SOCKADDR_IN6",
+ main => "struct sockaddr_in6 sin6; sin6.sin6_family = AF_INET6;"
+);
+
+check_for(
+ confkey => "d_sin6_scope_id",
+ define => "HAS_SIN6_SCOPE_ID",
+ main => "struct sockaddr_in6 sin6; sin6.sin6_scope_id = 0;"
+);
+
+check_for(
+ confkey => "d_ip_mreq",
+ define => "HAS_IP_MREQ",
+ main => "struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = INADDR_ANY;"
+);
+
+# TODO: Needs adding to perl5 core before importing dual-life again
+check_for(
+ confkey => "d_ip_mreq_source",
+ define => "HAS_IP_MREQ_SOURCE",
+ main => "struct ip_mreq_source mreq; mreq.imr_multiaddr.s_addr = INADDR_ANY;"
+);
+
+check_for(
+ confkey => "d_ipv6_mreq",
+ define => "HAS_IPV6_MREQ",
+ main => "struct ipv6_mreq mreq; mreq.ipv6mr_interface = 0;"
+);
+
+my %makefile_args;
+
+# Since we're providing a later version of a core module, before 5.12 the
+# @INC order is wrong so we'll have to go in perl rather than site dirs
+$makefile_args{INSTALLDIRS} = "perl" if $] < 5.012;
+
+WriteMakefile(
+ NAME => 'Socket',
+ VERSION_FROM => 'Socket.pm',
+ # ABSTRACT_FROM gets confused by C<Socket>
+ ABSTRACT => 'networking constants and support functions',
+ ($Config{libs} =~ /(-lsocks\S*)/ ? (LIBS => [ "$1" ] ) : ()),
+ XSPROTOARG => '-noprototypes', # XXX remove later?
+ realclean => {FILES=> 'const-c.inc const-xs.inc'},
+ DEFINE => join( " ", map { "-D$_" } @DEFINES ),
+ CONFIGURE_REQUIRES => {
+ 'ExtUtils::CBuilder' => 0,
+ 'ExtUtils::Constant' => '0.23',
+ },
+ MIN_PERL_VERSION => '5.006001',
+ LICENSE => 'perl',
+ %makefile_args,
+);
+my @names = (
+ qw(
+ AF_802 AF_AAL AF_APPLETALK AF_CCITT AF_CHAOS AF_CTF AF_DATAKIT
+ AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_INET6
+ AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_MAX AF_NBS AF_NIT AF_NS AF_OSI
+ AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER AF_WAN
+ AF_X25
+
+ AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN
+ AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST
+ AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED
+
+ EAI_ADDRFAMILY EAI_AGAIN EAI_BADFLAGS EAI_BADHINTS EAI_FAIL EAI_FAMILY
+ EAI_NODATA EAI_NONAME EAI_PROTOCOL EAI_SERVICE EAI_SOCKTYPE EAI_SYSTEM
+
+ IOV_MAX
+
+ IP_ADD_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP IP_DROP_MEMBERSHIP
+ IP_DROP_SOURCE_MEMBERSHIP IP_HDRINCL IP_MULTICAST_IF IP_MULTICAST_LOOP
+ IP_MULTICAST_TTL IP_OPTIONS IP_RECVOPTS IP_RECVRETOPTS IP_RETOPTS IP_TOS
+ IP_TTL
+
+ IPV6_ADD_MEMBERSHIP IPV6_DROP_MEMBERSHIP IPV6_JOIN_GROUP
+ IPV6_LEAVE_GROUP IPV6_MTU IPV6_MTU_DISCOVER IPV6_MULTICAST_HOPS
+ IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_UNICAST_HOPS IPV6_V6ONLY
+
+ MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_DONTWAIT MSG_EOF
+ MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FIN MSG_MAXIOVLEN MSG_MCAST
+ MSG_NOSIGNAL MSG_RST MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE
+
+ NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES
+ NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV
+
+ PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT
+ PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6
+ PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_MAX PF_NBS PF_NIT PF_NS PF_OSI
+ PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER PF_WAN
+ PF_X25
+
+ SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_TIMESTAMP
+
+ SOCK_DGRAM SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM
+ SOCK_NONBLOCK SOCK_CLOEXEC
+
+ SOL_SOCKET
+
+ SOMAXCONN
+
+ SO_ACCEPTCONN SO_ATTACH_FILTER SO_BACKLOG SO_BROADCAST SO_CHAMELEON
+ SO_DEBUG SO_DETACH_FILTER SO_DGRAM_ERRIND SO_DOMAIN SO_DONTLINGER
+ SO_DONTROUTE SO_ERROR SO_FAMILY SO_KEEPALIVE SO_LINGER SO_OOBINLINE
+ SO_PASSCRED SO_PASSIFNAME SO_PEERCRED SO_PROTOCOL SO_PROTOTYPE
+ SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_REUSEPORT
+ SO_SECURITY_AUTHENTICATION SO_SECURITY_ENCRYPTION_NETWORK
+ SO_SECURITY_ENCRYPTION_TRANSPORT SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO
+ SO_STATE SO_TYPE SO_USELOOPBACK SO_XOPEN SO_XSE
+
+ TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT TCP_INFO
+ TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT TCP_KEEPIDLE TCP_KEEPINTVL
+ TCP_LINGER2 TCP_MAXRT TCP_MAXSEG TCP_MD5SIG TCP_NODELAY TCP_NOOPT
+ TCP_NOPUSH TCP_QUICKACK TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT
+ TCP_WINDOW_CLAMP
+
+ UIO_MAXIOV
+ ),
+ {name=>"IPPROTO_IP", type=>"IV", default=>["IV", 0]},
+ {name=>"IPPROTO_IPV6", type=>"IV", default=>["IV", 41]},
+ {name=>"IPPROTO_RAW", type=>"IV", default=>["IV", 255]},
+ {name=>"IPPROTO_ICMP", type=>"IV", default=>["IV", 1]},
+ {name=>"IPPROTO_TCP", type=>"IV", default=>["IV", 6]},
+ {name=>"IPPROTO_UDP", type=>"IV", default=>["IV", 17]},
+ {name=>"SHUT_RD", type=>"IV", default=>["IV", "0"]},
+ {name=>"SHUT_WR", type=>"IV", default=>["IV", "1"]},
+ {name=>"SHUT_RDWR", type=>"IV", default=>["IV", "2"]},
+);
+
+push @names, {
+ name => $_,
+ type => "IV",
+ macro => [ "#if defined($_) || defined(HAS_$_) /* might be an enum */\n",
+ "#endif\n" ]
+} foreach qw (MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS);
+
+push @names, {
+ name => $_,
+ type => "SV",
+ pre => "struct in_addr ip_address; ip_address.s_addr = htonl($_);",
+ value => "newSVpvn_flags((char *)&ip_address,sizeof(ip_address), SVs_TEMP)",
+} foreach qw(INADDR_ANY INADDR_LOOPBACK INADDR_NONE INADDR_BROADCAST);
+
+push @names, {
+ name => $_,
+ type => "SV",
+ macro => [ "#ifdef ${_}_INIT\n",
+ "#endif\n" ],
+ pre => "struct in6_addr ip6_address = ${_}_INIT;",
+ value => "newSVpvn_flags((char *)&ip6_address,sizeof(ip6_address), SVs_TEMP)",
+} foreach qw(IN6ADDR_ANY IN6ADDR_LOOPBACK);
+
+# Work around an old Perl core bug that affects ExtUtils::Constants on
+# pre-5.8.2 Perls. EU:C should be amended to work around this itself.
+if("$]" < 5.008002) {
+ require ExtUtils::Constant::ProxySubs;
+ no warnings "once";
+ $ExtUtils::Constant::ProxySubs::type_to_C_value{$_} = sub { () }
+ foreach qw(YES NO UNDEF), "";
+}
+
+WriteConstants(
+ PROXYSUBS => {autoload => 1},
+ NAME => 'Socket',
+ NAMES => \@names,
+);
Added: vendor/perl/dist/cpan/Socket/Socket.pm
===================================================================
--- vendor/perl/dist/cpan/Socket/Socket.pm (rev 0)
+++ vendor/perl/dist/cpan/Socket/Socket.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1114 @@
+package Socket;
+
+use strict;
+{ use 5.006001; }
+
+our $VERSION = '2.009';
+
+=head1 NAME
+
+C<Socket> - networking constants and support functions
+
+=head1 SYNOPSIS
+
+C<Socket> a low-level module used by, among other things, the L<IO::Socket>
+family of modules. The following examples demonstrate some low-level uses but
+a practical program would likely use the higher-level API provided by
+C<IO::Socket> or similar instead.
+
+ use Socket qw(PF_INET SOCK_STREAM pack_sockaddr_in inet_aton);
+
+ socket(my $socket, PF_INET, SOCK_STREAM, 0)
+ or die "socket: $!";
+
+ my $port = getservbyname "echo", "tcp";
+ connect($socket, pack_sockaddr_in($port, inet_aton("localhost")))
+ or die "connect: $!";
+
+ print $socket "Hello, world!\n";
+ print <$socket>;
+
+See also the L</EXAMPLES> section.
+
+=head1 DESCRIPTION
+
+This module provides a variety of constants, structure manipulators and other
+functions related to socket-based networking. The values and functions
+provided are useful when used in conjunction with Perl core functions such as
+socket(), setsockopt() and bind(). It also provides several other support
+functions, mostly for dealing with conversions of network addresses between
+human-readable and native binary forms, and for hostname resolver operations.
+
+Some constants and functions are exported by default by this module; but for
+backward-compatibility any recently-added symbols are not exported by default
+and must be requested explicitly. When an import list is provided to the
+C<use Socket> line, the default exports are not automatically imported. It is
+therefore best practice to always to explicitly list all the symbols required.
+
+Also, some common socket "newline" constants are provided: the constants
+C<CR>, C<LF>, and C<CRLF>, as well as C<$CR>, C<$LF>, and C<$CRLF>, which map
+to C<\015>, C<\012>, and C<\015\012>. If you do not want to use the literal
+characters in your programs, then use the constants provided here. They are
+not exported by default, but can be imported individually, and with the
+C<:crlf> export tag:
+
+ use Socket qw(:DEFAULT :crlf);
+
+ $sock->print("GET / HTTP/1.0$CRLF");
+
+The entire getaddrinfo() subsystem can be exported using the tag C<:addrinfo>;
+this exports the getaddrinfo() and getnameinfo() functions, and all the
+C<AI_*>, C<NI_*>, C<NIx_*> and C<EAI_*> constants.
+
+=cut
+
+=head1 CONSTANTS
+
+In each of the following groups, there may be many more constants provided
+than just the ones given as examples in the section heading. If the heading
+ends C<...> then this means there are likely more; the exact constants
+provided will depend on the OS and headers found at compile-time.
+
+=cut
+
+=head2 PF_INET, PF_INET6, PF_UNIX, ...
+
+Protocol family constants to use as the first argument to socket() or the
+value of the C<SO_DOMAIN> or C<SO_FAMILY> socket option.
+
+=head2 AF_INET, AF_INET6, AF_UNIX, ...
+
+Address family constants used by the socket address structures, to pass to
+such functions as inet_pton() or getaddrinfo(), or are returned by such
+functions as sockaddr_family().
+
+=head2 SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, ...
+
+Socket type constants to use as the second argument to socket(), or the value
+of the C<SO_TYPE> socket option.
+
+=head2 SOCK_NONBLOCK. SOCK_CLOEXEC
+
+Linux-specific shortcuts to specify the C<O_NONBLOCK> and C<FD_CLOEXEC> flags
+during a C<socket(2)> call.
+
+ socket( my $sockh, PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0 )
+
+=head2 SOL_SOCKET
+
+Socket option level constant for setsockopt() and getsockopt().
+
+=head2 SO_ACCEPTCONN, SO_BROADCAST, SO_ERROR, ...
+
+Socket option name constants for setsockopt() and getsockopt() at the
+C<SOL_SOCKET> level.
+
+=head2 IP_OPTIONS, IP_TOS, IP_TTL, ...
+
+Socket option name constants for IPv4 socket options at the C<IPPROTO_IP>
+level.
+
+=head2 MSG_BCAST, MSG_OOB, MSG_TRUNC, ...
+
+Message flag constants for send() and recv().
+
+=head2 SHUT_RD, SHUT_RDWR, SHUT_WR
+
+Direction constants for shutdown().
+
+=head2 INADDR_ANY, INADDR_BROADCAST, INADDR_LOOPBACK, INADDR_NONE
+
+Constants giving the special C<AF_INET> addresses for wildcard, broadcast,
+local loopback, and invalid addresses.
+
+Normally equivalent to inet_aton('0.0.0.0'), inet_aton('255.255.255.255'),
+inet_aton('localhost') and inet_aton('255.255.255.255') respectively.
+
+=head2 IPPROTO_IP, IPPROTO_IPV6, IPPROTO_TCP, ...
+
+IP protocol constants to use as the third argument to socket(), the level
+argument to getsockopt() or setsockopt(), or the value of the C<SO_PROTOCOL>
+socket option.
+
+=head2 TCP_CORK, TCP_KEEPALIVE, TCP_NODELAY, ...
+
+Socket option name constants for TCP socket options at the C<IPPROTO_TCP>
+level.
+
+=head2 IN6ADDR_ANY, IN6ADDR_LOOPBACK
+
+Constants giving the special C<AF_INET6> addresses for wildcard and local
+loopback.
+
+Normally equivalent to inet_pton(AF_INET6, "::") and
+inet_pton(AF_INET6, "::1") respectively.
+
+=head2 IPV6_ADD_MEMBERSHIP, IPV6_MTU, IPV6_V6ONLY, ...
+
+Socket option name constants for IPv6 socket options at the C<IPPROTO_IPV6>
+level.
+
+=cut
+
+# Still undocumented: SCM_*, SOMAXCONN, IOV_MAX, UIO_MAXIOV
+
+=head1 STRUCTURE MANIPULATORS
+
+The following functions convert between lists of Perl values and packed binary
+strings representing structures.
+
+=cut
+
+=head2 $family = sockaddr_family $sockaddr
+
+Takes a packed socket address (as returned by pack_sockaddr_in(),
+pack_sockaddr_un() or the perl builtin functions getsockname() and
+getpeername()). Returns the address family tag. This will be one of the
+C<AF_*> constants, such as C<AF_INET> for a C<sockaddr_in> addresses or
+C<AF_UNIX> for a C<sockaddr_un>. It can be used to figure out what unpack to
+use for a sockaddr of unknown type.
+
+=head2 $sockaddr = pack_sockaddr_in $port, $ip_address
+
+Takes two arguments, a port number and an opaque string (as returned by
+inet_aton(), or a v-string). Returns the C<sockaddr_in> structure with those
+arguments packed in and C<AF_INET> filled in. For Internet domain sockets,
+this structure is normally what you need for the arguments in bind(),
+connect(), and send().
+
+=head2 ($port, $ip_address) = unpack_sockaddr_in $sockaddr
+
+Takes a C<sockaddr_in> structure (as returned by pack_sockaddr_in(),
+getpeername() or recv()). Returns a list of two elements: the port and an
+opaque string representing the IP address (you can use inet_ntoa() to convert
+the address to the four-dotted numeric format). Will croak if the structure
+does not represent an C<AF_INET> address.
+
+In scalar context will return just the IP address.
+
+=head2 $sockaddr = sockaddr_in $port, $ip_address
+
+=head2 ($port, $ip_address) = sockaddr_in $sockaddr
+
+A wrapper of pack_sockaddr_in() or unpack_sockaddr_in(). In list context,
+unpacks its argument and returns a list consisting of the port and IP address.
+In scalar context, packs its port and IP address arguments as a C<sockaddr_in>
+and returns it.
+
+Provided largely for legacy compatibility; it is better to use
+pack_sockaddr_in() or unpack_sockaddr_in() explicitly.
+
+=head2 $sockaddr = pack_sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]]
+
+Takes two to four arguments, a port number, an opaque string (as returned by
+inet_pton()), optionally a scope ID number, and optionally a flow label
+number. Returns the C<sockaddr_in6> structure with those arguments packed in
+and C<AF_INET6> filled in. IPv6 equivalent of pack_sockaddr_in().
+
+=head2 ($port, $ip6_address, $scope_id, $flowinfo) = unpack_sockaddr_in6 $sockaddr
+
+Takes a C<sockaddr_in6> structure. Returns a list of four elements: the port
+number, an opaque string representing the IPv6 address, the scope ID, and the
+flow label. (You can use inet_ntop() to convert the address to the usual
+string format). Will croak if the structure does not represent an C<AF_INET6>
+address.
+
+In scalar context will return just the IP address.
+
+=head2 $sockaddr = sockaddr_in6 $port, $ip6_address, [$scope_id, [$flowinfo]]
+
+=head2 ($port, $ip6_address, $scope_id, $flowinfo) = sockaddr_in6 $sockaddr
+
+A wrapper of pack_sockaddr_in6() or unpack_sockaddr_in6(). In list context,
+unpacks its argument according to unpack_sockaddr_in6(). In scalar context,
+packs its arguments according to pack_sockaddr_in6().
+
+Provided largely for legacy compatibility; it is better to use
+pack_sockaddr_in6() or unpack_sockaddr_in6() explicitly.
+
+=head2 $sockaddr = pack_sockaddr_un $path
+
+Takes one argument, a pathname. Returns the C<sockaddr_un> structure with that
+path packed in with C<AF_UNIX> filled in. For C<PF_UNIX> sockets, this
+structure is normally what you need for the arguments in bind(), connect(),
+and send().
+
+=head2 ($path) = unpack_sockaddr_un $sockaddr
+
+Takes a C<sockaddr_un> structure (as returned by pack_sockaddr_un(),
+getpeername() or recv()). Returns a list of one element: the pathname. Will
+croak if the structure does not represent an C<AF_UNIX> address.
+
+=head2 $sockaddr = sockaddr_un $path
+
+=head2 ($path) = sockaddr_un $sockaddr
+
+A wrapper of pack_sockaddr_un() or unpack_sockaddr_un(). In a list context,
+unpacks its argument and returns a list consisting of the pathname. In a
+scalar context, packs its pathname as a C<sockaddr_un> and returns it.
+
+Provided largely for legacy compatibility; it is better to use
+pack_sockaddr_un() or unpack_sockaddr_un() explicitly.
+
+These are only supported if your system has E<lt>F<sys/un.h>E<gt>.
+
+=head2 $ip_mreq = pack_ip_mreq $multiaddr, $interface
+
+Takes an IPv4 multicast address and optionally an interface address (or
+C<INADDR_ANY>). Returns the C<ip_mreq> structure with those arguments packed
+in. Suitable for use with the C<IP_ADD_MEMBERSHIP> and C<IP_DROP_MEMBERSHIP>
+sockopts.
+
+=head2 ($multiaddr, $interface) = unpack_ip_mreq $ip_mreq
+
+Takes an C<ip_mreq> structure. Returns a list of two elements; the IPv4
+multicast address and interface address.
+
+=head2 $ip_mreq_source = pack_ip_mreq_source $multiaddr, $source, $interface
+
+Takes an IPv4 multicast address, source address, and optionally an interface
+address (or C<INADDR_ANY>). Returns the C<ip_mreq_source> structure with those
+arguments packed in. Suitable for use with the C<IP_ADD_SOURCE_MEMBERSHIP>
+and C<IP_DROP_SOURCE_MEMBERSHIP> sockopts.
+
+=head2 ($multiaddr, $source, $interface) = unpack_ip_mreq_source $ip_mreq
+
+Takes an C<ip_mreq_source> structure. Returns a list of three elements; the
+IPv4 multicast address, source address and interface address.
+
+=head2 $ipv6_mreq = pack_ipv6_mreq $multiaddr6, $ifindex
+
+Takes an IPv6 multicast address and an interface number. Returns the
+C<ipv6_mreq> structure with those arguments packed in. Suitable for use with
+the C<IPV6_ADD_MEMBERSHIP> and C<IPV6_DROP_MEMBERSHIP> sockopts.
+
+=head2 ($multiaddr6, $ifindex) = unpack_ipv6_mreq $ipv6_mreq
+
+Takes an C<ipv6_mreq> structure. Returns a list of two elements; the IPv6
+address and an interface number.
+
+=cut
+
+=head1 FUNCTIONS
+
+=cut
+
+=head2 $ip_address = inet_aton $string
+
+Takes a string giving the name of a host, or a textual representation of an IP
+address and translates that to an packed binary address structure suitable to
+pass to pack_sockaddr_in(). If passed a hostname that cannot be resolved,
+returns C<undef>. For multi-homed hosts (hosts with more than one address),
+the first address found is returned.
+
+For portability do not assume that the result of inet_aton() is 32 bits wide,
+in other words, that it would contain only the IPv4 address in network order.
+
+This IPv4-only function is provided largely for legacy reasons. Newly-written
+code should use getaddrinfo() or inet_pton() instead for IPv6 support.
+
+=head2 $string = inet_ntoa $ip_address
+
+Takes a packed binary address structure such as returned by
+unpack_sockaddr_in() (or a v-string representing the four octets of the IPv4
+address in network order) and translates it into a string of the form
+C<d.d.d.d> where the C<d>s are numbers less than 256 (the normal
+human-readable four dotted number notation for Internet addresses).
+
+This IPv4-only function is provided largely for legacy reasons. Newly-written
+code should use getnameinfo() or inet_ntop() instead for IPv6 support.
+
+=head2 $address = inet_pton $family, $string
+
+Takes an address family (such as C<AF_INET> or C<AF_INET6>) and a string
+containing a textual representation of an address in that family and
+translates that to an packed binary address structure.
+
+See also getaddrinfo() for a more powerful and flexible function to look up
+socket addresses given hostnames or textual addresses.
+
+=head2 $string = inet_ntop $family, $address
+
+Takes an address family and a packed binary address structure and translates
+it into a human-readable textual representation of the address; typically in
+C<d.d.d.d> form for C<AF_INET> or C<hhhh:hhhh::hhhh> form for C<AF_INET6>.
+
+See also getnameinfo() for a more powerful and flexible function to turn
+socket addresses into human-readable textual representations.
+
+=head2 ($err, @result) = getaddrinfo $host, $service, [$hints]
+
+Given both a hostname and service name, this function attempts to resolve the
+host name into a list of network addresses, and the service name into a
+protocol and port number, and then returns a list of address structures
+suitable to connect() to it.
+
+Given just a host name, this function attempts to resolve it to a list of
+network addresses, and then returns a list of address structures giving these
+addresses.
+
+Given just a service name, this function attempts to resolve it to a protocol
+and port number, and then returns a list of address structures that represent
+it suitable to bind() to. This use should be combined with the C<AI_PASSIVE>
+flag; see below.
+
+Given neither name, it generates an error.
+
+If present, $hints should be a reference to a hash, where the following keys
+are recognised:
+
+=over 4
+
+=item flags => INT
+
+A bitfield containing C<AI_*> constants; see below.
+
+=item family => INT
+
+Restrict to only generating addresses in this address family
+
+=item socktype => INT
+
+Restrict to only generating addresses of this socket type
+
+=item protocol => INT
+
+Restrict to only generating addresses for this protocol
+
+=back
+
+The return value will be a list; the first value being an error indication,
+followed by a list of address structures (if no error occurred).
+
+The error value will be a dualvar; comparable to the C<EI_*> error constants,
+or printable as a human-readable error message string. If no error occurred it
+will be zero numerically and an empty string.
+
+Each value in the results list will be a hash reference containing the following
+fields:
+
+=over 4
+
+=item family => INT
+
+The address family (e.g. C<AF_INET>)
+
+=item socktype => INT
+
+The socket type (e.g. C<SOCK_STREAM>)
+
+=item protocol => INT
+
+The protocol (e.g. C<IPPROTO_TCP>)
+
+=item addr => STRING
+
+The address in a packed string (such as would be returned by
+pack_sockaddr_in())
+
+=item canonname => STRING
+
+The canonical name for the host if the C<AI_CANONNAME> flag was provided, or
+C<undef> otherwise. This field will only be present on the first returned
+address.
+
+=back
+
+The following flag constants are recognised in the $hints hash. Other flag
+constants may exist as provided by the OS.
+
+=over 4
+
+=item AI_PASSIVE
+
+Indicates that this resolution is for a local bind() for a passive (i.e.
+listening) socket, rather than an active (i.e. connecting) socket.
+
+=item AI_CANONNAME
+
+Indicates that the caller wishes the canonical hostname (C<canonname>) field
+of the result to be filled in.
+
+=item AI_NUMERICHOST
+
+Indicates that the caller will pass a numeric address, rather than a hostname,
+and that getaddrinfo() must not perform a resolve operation on this name. This
+flag will prevent a possibly-slow network lookup operation, and instead return
+an error if a hostname is passed.
+
+=back
+
+=head2 ($err, $hostname, $servicename) = getnameinfo $sockaddr, [$flags, [$xflags]]
+
+Given a packed socket address (such as from getsockname(), getpeername(), or
+returned by getaddrinfo() in a C<addr> field), returns the hostname and
+symbolic service name it represents. $flags may be a bitmask of C<NI_*>
+constants, or defaults to 0 if unspecified.
+
+The return value will be a list; the first value being an error condition,
+followed by the hostname and service name.
+
+The error value will be a dualvar; comparable to the C<EI_*> error constants,
+or printable as a human-readable error message string. The host and service
+names will be plain strings.
+
+The following flag constants are recognised as $flags. Other flag constants may
+exist as provided by the OS.
+
+=over 4
+
+=item NI_NUMERICHOST
+
+Requests that a human-readable string representation of the numeric address be
+returned directly, rather than performing a name resolve operation that may
+convert it into a hostname. This will also avoid potentially-blocking network
+IO.
+
+=item NI_NUMERICSERV
+
+Requests that the port number be returned directly as a number representation
+rather than performing a name resolve operation that may convert it into a
+service name.
+
+=item NI_NAMEREQD
+
+If a name resolve operation fails to provide a name, then this flag will cause
+getnameinfo() to indicate an error, rather than returning the numeric
+representation as a human-readable string.
+
+=item NI_DGRAM
+
+Indicates that the socket address relates to a C<SOCK_DGRAM> socket, for the
+services whose name differs between TCP and UDP protocols.
+
+=back
+
+The following constants may be supplied as $xflags.
+
+=over 4
+
+=item NIx_NOHOST
+
+Indicates that the caller is not interested in the hostname of the result, so
+it does not have to be converted. C<undef> will be returned as the hostname.
+
+=item NIx_NOSERV
+
+Indicates that the caller is not interested in the service name of the result,
+so it does not have to be converted. C<undef> will be returned as the service
+name.
+
+=back
+
+=head1 getaddrinfo() / getnameinfo() ERROR CONSTANTS
+
+The following constants may be returned by getaddrinfo() or getnameinfo().
+Others may be provided by the OS.
+
+=over 4
+
+=item EAI_AGAIN
+
+A temporary failure occurred during name resolution. The operation may be
+successful if it is retried later.
+
+=item EAI_BADFLAGS
+
+The value of the C<flags> hint to getaddrinfo(), or the $flags parameter to
+getnameinfo() contains unrecognised flags.
+
+=item EAI_FAMILY
+
+The C<family> hint to getaddrinfo(), or the family of the socket address
+passed to getnameinfo() is not supported.
+
+=item EAI_NODATA
+
+The host name supplied to getaddrinfo() did not provide any usable address
+data.
+
+=item EAI_NONAME
+
+The host name supplied to getaddrinfo() does not exist, or the address
+supplied to getnameinfo() is not associated with a host name and the
+C<NI_NAMEREQD> flag was supplied.
+
+=item EAI_SERVICE
+
+The service name supplied to getaddrinfo() is not available for the socket
+type given in the $hints.
+
+=back
+
+=cut
+
+=head1 EXAMPLES
+
+=head2 Lookup for connect()
+
+The getaddrinfo() function converts a hostname and a service name into a list
+of structures, each containing a potential way to connect() to the named
+service on the named host.
+
+ use IO::Socket;
+ use Socket qw(SOCK_STREAM getaddrinfo);
+
+ my %hints = (socktype => SOCK_STREAM);
+ my ($err, @res) = getaddrinfo("localhost", "echo", \%hints);
+ die "Cannot getaddrinfo - $err" if $err;
+
+ my $sock;
+
+ foreach my $ai (@res) {
+ my $candidate = IO::Socket->new();
+
+ $candidate->socket($ai->{family}, $ai->{socktype}, $ai->{protocol})
+ or next;
+
+ $candidate->connect($ai->{addr})
+ or next;
+
+ $sock = $candidate;
+ last;
+ }
+
+ die "Cannot connect to localhost:echo" unless $sock;
+
+ $sock->print("Hello, world!\n");
+ print <$sock>;
+
+Because a list of potential candidates is returned, the C<while> loop tries
+each in turn until it it finds one that succeeds both the socket() and
+connect() calls.
+
+This function performs the work of the legacy functions gethostbyname(),
+getservbyname(), inet_aton() and pack_sockaddr_in().
+
+In practice this logic is better performed by L<IO::Socket::IP>.
+
+=head2 Making a human-readable string out of an address
+
+The getnameinfo() function converts a socket address, such as returned by
+getsockname() or getpeername(), into a pair of human-readable strings
+representing the address and service name.
+
+ use IO::Socket::IP;
+ use Socket qw(getnameinfo);
+
+ my $server = IO::Socket::IP->new(LocalPort => 12345, Listen => 1) or
+ die "Cannot listen - $@";
+
+ my $socket = $server->accept or die "accept: $!";
+
+ my ($err, $hostname, $servicename) = getnameinfo($socket->peername);
+ die "Cannot getnameinfo - $err" if $err;
+
+ print "The peer is connected from $hostname\n";
+
+Since in this example only the hostname was used, the redundant conversion of
+the port number into a service name may be omitted by passing the
+C<NIx_NOSERV> flag.
+
+ use Socket qw(getnameinfo NIx_NOSERV);
+
+ my ($err, $hostname) = getnameinfo($socket->peername, 0, NIx_NOSERV);
+
+This function performs the work of the legacy functions unpack_sockaddr_in(),
+inet_ntoa(), gethostbyaddr() and getservbyport().
+
+In practice this logic is better performed by L<IO::Socket::IP>.
+
+=head2 Resolving hostnames into IP addresses
+
+To turn a hostname into a human-readable plain IP address use getaddrinfo()
+to turn the hostname into a list of socket structures, then getnameinfo() on
+each one to make it a readable IP address again.
+
+ use Socket qw(:addrinfo SOCK_RAW);
+
+ my ($err, @res) = getaddrinfo($hostname, "", {socktype => SOCK_RAW});
+ die "Cannot getaddrinfo - $err" if $err;
+
+ while( my $ai = shift @res ) {
+ my ($err, $ipaddr) = getnameinfo($ai->{addr}, NI_NUMERICHOST, NIx_NOSERV);
+ die "Cannot getnameinfo - $err" if $err;
+
+ print "$ipaddr\n";
+ }
+
+The C<socktype> hint to getaddrinfo() filters the results to only include one
+socket type and protocol. Without this most OSes return three combinations,
+for C<SOCK_STREAM>, C<SOCK_DGRAM> and C<SOCK_RAW>, resulting in triplicate
+output of addresses. The C<NI_NUMERICHOST> flag to getnameinfo() causes it to
+return a string-formatted plain IP address, rather than reverse resolving it
+back into a hostname.
+
+This combination performs the work of the legacy functions gethostbyname()
+and inet_ntoa().
+
+=head2 Accessing socket options
+
+The many C<SO_*> and other constants provide the socket option names for
+getsockopt() and setsockopt().
+
+ use IO::Socket::INET;
+ use Socket qw(SOL_SOCKET SO_RCVBUF IPPROTO_IP IP_TTL);
+
+ my $socket = IO::Socket::INET->new(LocalPort => 0, Proto => 'udp')
+ or die "Cannot create socket: $@";
+
+ $socket->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024) or
+ die "setsockopt: $!";
+
+ print "Receive buffer is ", $socket->getsockopt(SOL_SOCKET, SO_RCVBUF),
+ " bytes\n";
+
+ print "IP TTL is ", $socket->getsockopt(IPPROTO_IP, IP_TTL), "\n";
+
+As a convenience, L<IO::Socket>'s setsockopt() method will convert a number
+into a packed byte buffer, and getsockopt() will unpack a byte buffer of the
+correct size back into a number.
+
+=cut
+
+=head1 AUTHOR
+
+This module was originally maintained in Perl core by the Perl 5 Porters.
+
+It was extracted to dual-life on CPAN at version 1.95 by
+Paul Evans <leonerd at leonerd.org.uk>
+
+=cut
+
+use Carp;
+use warnings::register;
+
+require Exporter;
+require XSLoader;
+our @ISA = qw(Exporter);
+
+# <@Nicholas> you can't change @EXPORT without breaking the implicit API
+# Please put any new constants in @EXPORT_OK!
+
+# List re-ordered to match documentation above. Try to keep the ordering
+# consistent so it's easier to see which ones are or aren't documented.
+our @EXPORT = qw(
+ PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT
+ PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6
+ PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_MAX PF_NBS PF_NIT PF_NS PF_OSI
+ PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER PF_WAN
+ PF_X25
+
+ AF_802 AF_AAL AF_APPLETALK AF_CCITT AF_CHAOS AF_CTF AF_DATAKIT
+ AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_INET6
+ AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_MAX AF_NBS AF_NIT AF_NS AF_OSI
+ AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER AF_WAN
+ AF_X25
+
+ SOCK_DGRAM SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM
+
+ SOL_SOCKET
+
+ SO_ACCEPTCONN SO_ATTACH_FILTER SO_BACKLOG SO_BROADCAST SO_CHAMELEON
+ SO_DEBUG SO_DETACH_FILTER SO_DGRAM_ERRIND SO_DOMAIN SO_DONTLINGER
+ SO_DONTROUTE SO_ERROR SO_FAMILY SO_KEEPALIVE SO_LINGER SO_OOBINLINE
+ SO_PASSCRED SO_PASSIFNAME SO_PEERCRED SO_PROTOCOL SO_PROTOTYPE
+ SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_REUSEPORT
+ SO_SECURITY_AUTHENTICATION SO_SECURITY_ENCRYPTION_NETWORK
+ SO_SECURITY_ENCRYPTION_TRANSPORT SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO
+ SO_STATE SO_TYPE SO_USELOOPBACK SO_XOPEN SO_XSE
+
+ IP_OPTIONS IP_HDRINCL IP_TOS IP_TTL IP_RECVOPTS IP_RECVRETOPTS
+ IP_RETOPTS
+
+ MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_CTRUNC MSG_DONTROUTE
+ MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FIN
+ MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL MSG_OOB MSG_PEEK MSG_PROXY MSG_RST
+ MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE
+
+ SHUT_RD SHUT_RDWR SHUT_WR
+
+ INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE
+
+ SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_RIGHTS SCM_TIMESTAMP
+
+ SOMAXCONN
+
+ IOV_MAX
+ UIO_MAXIOV
+
+ sockaddr_family
+ pack_sockaddr_in unpack_sockaddr_in sockaddr_in
+ pack_sockaddr_in6 unpack_sockaddr_in6 sockaddr_in6
+ pack_sockaddr_un unpack_sockaddr_un sockaddr_un
+
+ inet_aton inet_ntoa
+);
+
+# List re-ordered to match documentation above. Try to keep the ordering
+# consistent so it's easier to see which ones are or aren't documented.
+our @EXPORT_OK = qw(
+ CR LF CRLF $CR $LF $CRLF
+
+ SOCK_NONBLOCK SOCK_CLOEXEC
+
+ IP_ADD_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP IP_DROP_MEMBERSHIP
+ IP_DROP_SOURCE_MEMBERSHIP IP_MULTICAST_IF IP_MULTICAST_LOOP
+ IP_MULTICAST_TTL
+
+ IPPROTO_IP IPPROTO_IPV6 IPPROTO_RAW IPPROTO_ICMP IPPROTO_TCP
+ IPPROTO_UDP
+
+ TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT TCP_INFO
+ TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT TCP_KEEPIDLE TCP_KEEPINTVL
+ TCP_LINGER2 TCP_MAXRT TCP_MAXSEG TCP_MD5SIG TCP_NODELAY TCP_NOOPT
+ TCP_NOPUSH TCP_QUICKACK TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT
+ TCP_WINDOW_CLAMP
+
+ IN6ADDR_ANY IN6ADDR_LOOPBACK
+
+ IPV6_ADD_MEMBERSHIP IPV6_DROP_MEMBERSHIP IPV6_JOIN_GROUP
+ IPV6_LEAVE_GROUP IPV6_MTU IPV6_MTU_DISCOVER IPV6_MULTICAST_HOPS
+ IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_UNICAST_HOPS IPV6_V6ONLY
+
+ pack_ip_mreq unpack_ip_mreq pack_ip_mreq_source unpack_ip_mreq_source
+
+ pack_ipv6_mreq unpack_ipv6_mreq
+
+ inet_pton inet_ntop
+
+ getaddrinfo getnameinfo
+
+ AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN
+ AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST
+ AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED
+
+ NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES
+ NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV
+
+ NIx_NOHOST NIx_NOSERV
+
+ EAI_ADDRFAMILY EAI_AGAIN EAI_BADFLAGS EAI_BADHINTS EAI_FAIL EAI_FAMILY
+ EAI_NODATA EAI_NONAME EAI_PROTOCOL EAI_SERVICE EAI_SOCKTYPE EAI_SYSTEM
+);
+
+our %EXPORT_TAGS = (
+ crlf => [qw(CR LF CRLF $CR $LF $CRLF)],
+ addrinfo => [qw(getaddrinfo getnameinfo), grep m/^(?:AI|NI|NIx|EAI)_/, @EXPORT_OK],
+ all => [@EXPORT, @EXPORT_OK],
+);
+
+BEGIN {
+ sub CR () {"\015"}
+ sub LF () {"\012"}
+ sub CRLF () {"\015\012"}
+
+ # These are not gni() constants; they're extensions for the perl API
+ # The definitions in Socket.pm and Socket.xs must match
+ sub NIx_NOHOST() {1 << 0}
+ sub NIx_NOSERV() {1 << 1}
+}
+
+*CR = \CR();
+*LF = \LF();
+*CRLF = \CRLF();
+
+sub sockaddr_in {
+ if (@_ == 6 && !wantarray) { # perl5.001m compat; use this && die
+ my($af, $port, @quad) = @_;
+ warnings::warn "6-ARG sockaddr_in call is deprecated"
+ if warnings::enabled();
+ pack_sockaddr_in($port, inet_aton(join('.', @quad)));
+ } elsif (wantarray) {
+ croak "usage: (port,iaddr) = sockaddr_in(sin_sv)" unless @_ == 1;
+ unpack_sockaddr_in(@_);
+ } else {
+ croak "usage: sin_sv = sockaddr_in(port,iaddr))" unless @_ == 2;
+ pack_sockaddr_in(@_);
+ }
+}
+
+sub sockaddr_in6 {
+ if (wantarray) {
+ croak "usage: (port,in6addr,scope_id,flowinfo) = sockaddr_in6(sin6_sv)" unless @_ == 1;
+ unpack_sockaddr_in6(@_);
+ }
+ else {
+ croak "usage: sin6_sv = sockaddr_in6(port,in6addr,[scope_id,[flowinfo]])" unless @_ >= 2 and @_ <= 4;
+ pack_sockaddr_in6(@_);
+ }
+}
+
+sub sockaddr_un {
+ if (wantarray) {
+ croak "usage: (filename) = sockaddr_un(sun_sv)" unless @_ == 1;
+ unpack_sockaddr_un(@_);
+ } else {
+ croak "usage: sun_sv = sockaddr_un(filename)" unless @_ == 1;
+ pack_sockaddr_un(@_);
+ }
+}
+
+XSLoader::load(__PACKAGE__, $VERSION);
+
+my %errstr;
+
+if( defined &getaddrinfo ) {
+ # These are not part of the API, nothing uses them, and deleting them
+ # reduces the size of %Socket:: by about 12K
+ delete $Socket::{fake_getaddrinfo};
+ delete $Socket::{fake_getnameinfo};
+} else {
+ require Scalar::Util;
+
+ *getaddrinfo = \&fake_getaddrinfo;
+ *getnameinfo = \&fake_getnameinfo;
+
+ # These numbers borrowed from GNU libc's implementation, but since
+ # they're only used by our emulation, it doesn't matter if the real
+ # platform's values differ
+ my %constants = (
+ AI_PASSIVE => 1,
+ AI_CANONNAME => 2,
+ AI_NUMERICHOST => 4,
+ AI_V4MAPPED => 8,
+ AI_ALL => 16,
+ AI_ADDRCONFIG => 32,
+ # RFC 2553 doesn't define this but Linux does - lets be nice and
+ # provide it since we can
+ AI_NUMERICSERV => 1024,
+
+ EAI_BADFLAGS => -1,
+ EAI_NONAME => -2,
+ EAI_NODATA => -5,
+ EAI_FAMILY => -6,
+ EAI_SERVICE => -8,
+
+ NI_NUMERICHOST => 1,
+ NI_NUMERICSERV => 2,
+ NI_NOFQDN => 4,
+ NI_NAMEREQD => 8,
+ NI_DGRAM => 16,
+
+ # Constants we don't support. Export them, but croak if anyone tries to
+ # use them
+ AI_IDN => 64,
+ AI_CANONIDN => 128,
+ AI_IDN_ALLOW_UNASSIGNED => 256,
+ AI_IDN_USE_STD3_ASCII_RULES => 512,
+ NI_IDN => 32,
+ NI_IDN_ALLOW_UNASSIGNED => 64,
+ NI_IDN_USE_STD3_ASCII_RULES => 128,
+
+ # Error constants we'll never return, so it doesn't matter what value
+ # these have, nor that we don't provide strings for them
+ EAI_SYSTEM => -11,
+ EAI_BADHINTS => -1000,
+ EAI_PROTOCOL => -1001
+ );
+
+ foreach my $name ( keys %constants ) {
+ my $value = $constants{$name};
+
+ no strict 'refs';
+ defined &$name or *$name = sub () { $value };
+ }
+
+ %errstr = (
+ # These strings from RFC 2553
+ EAI_BADFLAGS() => "invalid value for ai_flags",
+ EAI_NONAME() => "nodename nor servname provided, or not known",
+ EAI_NODATA() => "no address associated with nodename",
+ EAI_FAMILY() => "ai_family not supported",
+ EAI_SERVICE() => "servname not supported for ai_socktype",
+ );
+}
+
+# The following functions are used if the system does not have a
+# getaddrinfo(3) function in libc; and are used to emulate it for the AF_INET
+# family
+
+# Borrowed from Regexp::Common::net
+my $REGEXP_IPv4_DECIMAL = qr/25[0-5]|2[0-4][0-9]|1?[0-9][0-9]{1,2}/;
+my $REGEXP_IPv4_DOTTEDQUAD = qr/$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL/;
+
+sub fake_makeerr
+{
+ my ( $errno ) = @_;
+ my $errstr = $errno == 0 ? "" : ( $errstr{$errno} || $errno );
+ return Scalar::Util::dualvar( $errno, $errstr );
+}
+
+sub fake_getaddrinfo
+{
+ my ( $node, $service, $hints ) = @_;
+
+ $node = "" unless defined $node;
+
+ $service = "" unless defined $service;
+
+ my ( $family, $socktype, $protocol, $flags ) = @$hints{qw( family socktype protocol flags )};
+
+ $family ||= Socket::AF_INET(); # 0 == AF_UNSPEC, which we want too
+ $family == Socket::AF_INET() or return fake_makeerr( EAI_FAMILY() );
+
+ $socktype ||= 0;
+
+ $protocol ||= 0;
+
+ $flags ||= 0;
+
+ my $flag_passive = $flags & AI_PASSIVE(); $flags &= ~AI_PASSIVE();
+ my $flag_canonname = $flags & AI_CANONNAME(); $flags &= ~AI_CANONNAME();
+ my $flag_numerichost = $flags & AI_NUMERICHOST(); $flags &= ~AI_NUMERICHOST();
+ my $flag_numericserv = $flags & AI_NUMERICSERV(); $flags &= ~AI_NUMERICSERV();
+
+ # These constants don't apply to AF_INET-only lookups, so we might as well
+ # just ignore them. For AI_ADDRCONFIG we just presume the host has ability
+ # to talk AF_INET. If not we'd have to return no addresses at all. :)
+ $flags &= ~(AI_V4MAPPED()|AI_ALL()|AI_ADDRCONFIG());
+
+ $flags & (AI_IDN()|AI_CANONIDN()|AI_IDN_ALLOW_UNASSIGNED()|AI_IDN_USE_STD3_ASCII_RULES()) and
+ croak "Socket::getaddrinfo() does not support IDN";
+
+ $flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
+
+ $node eq "" and $service eq "" and return fake_makeerr( EAI_NONAME() );
+
+ my $canonname;
+ my @addrs;
+ if( $node ne "" ) {
+ return fake_makeerr( EAI_NONAME() ) if( $flag_numerichost and $node !~ m/^$REGEXP_IPv4_DOTTEDQUAD$/ );
+ ( $canonname, undef, undef, undef, @addrs ) = gethostbyname( $node );
+ defined $canonname or return fake_makeerr( EAI_NONAME() );
+
+ undef $canonname unless $flag_canonname;
+ }
+ else {
+ $addrs[0] = $flag_passive ? Socket::inet_aton( "0.0.0.0" )
+ : Socket::inet_aton( "127.0.0.1" );
+ }
+
+ my @ports; # Actually ARRAYrefs of [ socktype, protocol, port ]
+ my $protname = "";
+ if( $protocol ) {
+ $protname = getprotobynumber( $protocol );
+ }
+
+ if( $service ne "" and $service !~ m/^\d+$/ ) {
+ return fake_makeerr( EAI_NONAME() ) if( $flag_numericserv );
+ getservbyname( $service, $protname ) or return fake_makeerr( EAI_SERVICE() );
+ }
+
+ foreach my $this_socktype ( Socket::SOCK_STREAM(), Socket::SOCK_DGRAM(), Socket::SOCK_RAW() ) {
+ next if $socktype and $this_socktype != $socktype;
+
+ my $this_protname = "raw";
+ $this_socktype == Socket::SOCK_STREAM() and $this_protname = "tcp";
+ $this_socktype == Socket::SOCK_DGRAM() and $this_protname = "udp";
+
+ next if $protname and $this_protname ne $protname;
+
+ my $port;
+ if( $service ne "" ) {
+ if( $service =~ m/^\d+$/ ) {
+ $port = "$service";
+ }
+ else {
+ ( undef, undef, $port, $this_protname ) = getservbyname( $service, $this_protname );
+ next unless defined $port;
+ }
+ }
+ else {
+ $port = 0;
+ }
+
+ push @ports, [ $this_socktype, scalar getprotobyname( $this_protname ) || 0, $port ];
+ }
+
+ my @ret;
+ foreach my $addr ( @addrs ) {
+ foreach my $portspec ( @ports ) {
+ my ( $socktype, $protocol, $port ) = @$portspec;
+ push @ret, {
+ family => $family,
+ socktype => $socktype,
+ protocol => $protocol,
+ addr => Socket::pack_sockaddr_in( $port, $addr ),
+ canonname => undef,
+ };
+ }
+ }
+
+ # Only supply canonname for the first result
+ if( defined $canonname ) {
+ $ret[0]->{canonname} = $canonname;
+ }
+
+ return ( fake_makeerr( 0 ), @ret );
+}
+
+sub fake_getnameinfo
+{
+ my ( $addr, $flags, $xflags ) = @_;
+
+ my ( $port, $inetaddr );
+ eval { ( $port, $inetaddr ) = Socket::unpack_sockaddr_in( $addr ) }
+ or return fake_makeerr( EAI_FAMILY() );
+
+ my $family = Socket::AF_INET();
+
+ $flags ||= 0;
+
+ my $flag_numerichost = $flags & NI_NUMERICHOST(); $flags &= ~NI_NUMERICHOST();
+ my $flag_numericserv = $flags & NI_NUMERICSERV(); $flags &= ~NI_NUMERICSERV();
+ my $flag_nofqdn = $flags & NI_NOFQDN(); $flags &= ~NI_NOFQDN();
+ my $flag_namereqd = $flags & NI_NAMEREQD(); $flags &= ~NI_NAMEREQD();
+ my $flag_dgram = $flags & NI_DGRAM() ; $flags &= ~NI_DGRAM();
+
+ $flags & (NI_IDN()|NI_IDN_ALLOW_UNASSIGNED()|NI_IDN_USE_STD3_ASCII_RULES()) and
+ croak "Socket::getnameinfo() does not support IDN";
+
+ $flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
+
+ $xflags ||= 0;
+
+ my $node;
+ if( $xflags & NIx_NOHOST ) {
+ $node = undef;
+ }
+ elsif( $flag_numerichost ) {
+ $node = Socket::inet_ntoa( $inetaddr );
+ }
+ else {
+ $node = gethostbyaddr( $inetaddr, $family );
+ if( !defined $node ) {
+ return fake_makeerr( EAI_NONAME() ) if $flag_namereqd;
+ $node = Socket::inet_ntoa( $inetaddr );
+ }
+ elsif( $flag_nofqdn ) {
+ my ( $shortname ) = split m/\./, $node;
+ my ( $fqdn ) = gethostbyname $shortname;
+ $node = $shortname if defined $fqdn and $fqdn eq $node;
+ }
+ }
+
+ my $service;
+ if( $xflags & NIx_NOSERV ) {
+ $service = undef;
+ }
+ elsif( $flag_numericserv ) {
+ $service = "$port";
+ }
+ else {
+ my $protname = $flag_dgram ? "udp" : "";
+ $service = getservbyport( $port, $protname );
+ if( !defined $service ) {
+ $service = "$port";
+ }
+ }
+
+ return ( fake_makeerr( 0 ), $node, $service );
+}
+
+1;
Added: vendor/perl/dist/cpan/Socket/Socket.xs
===================================================================
--- vendor/perl/dist/cpan/Socket/Socket.xs (rev 0)
+++ vendor/perl/dist/cpan/Socket/Socket.xs 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1160 @@
+#define PERL_NO_GET_CONTEXT
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <stddef.h>
+
+#ifdef I_SYS_TYPES
+# include <sys/types.h>
+#endif
+#if !defined(ultrix) /* Avoid double definition. */
+# include <sys/socket.h>
+#endif
+#if defined(USE_SOCKS) && defined(I_SOCKS)
+# include <socks.h>
+#endif
+#ifdef MPE
+# define PF_INET AF_INET
+# define PF_UNIX AF_UNIX
+# define SOCK_RAW 3
+#endif
+#ifdef I_SYS_UN
+# include <sys/un.h>
+#endif
+/* XXX Configure test for <netinet/in_systm.h needed XXX */
+#if defined(NeXT) || defined(__NeXT__)
+# include <netinet/in_systm.h>
+#endif
+#if defined(__sgi) && !defined(AF_LINK) && defined(PF_LINK) && PF_LINK == AF_LNK
+# undef PF_LINK
+#endif
+#if defined(I_NETINET_IN) || defined(__ultrix__)
+# include <netinet/in.h>
+#endif
+#ifdef I_NETDB
+# if !defined(ultrix) /* Avoid double definition. */
+# include <netdb.h>
+# endif
+#endif
+#ifdef I_ARPA_INET
+# include <arpa/inet.h>
+#endif
+#ifdef I_NETINET_TCP
+# include <netinet/tcp.h>
+#endif
+
+#ifdef WIN32
+# include <ws2tcpip.h>
+#endif
+
+#ifdef NETWARE
+NETDB_DEFINE_CONTEXT
+NETINET_DEFINE_CONTEXT
+#endif
+
+#ifdef I_SYSUIO
+# include <sys/uio.h>
+#endif
+
+#ifndef AF_NBS
+# undef PF_NBS
+#endif
+
+#ifndef AF_X25
+# undef PF_X25
+#endif
+
+#ifndef INADDR_NONE
+# define INADDR_NONE 0xffffffff
+#endif /* INADDR_NONE */
+#ifndef INADDR_BROADCAST
+# define INADDR_BROADCAST 0xffffffff
+#endif /* INADDR_BROADCAST */
+#ifndef INADDR_LOOPBACK
+# define INADDR_LOOPBACK 0x7F000001
+#endif /* INADDR_LOOPBACK */
+
+#ifndef C_ARRAY_LENGTH
+#define C_ARRAY_LENGTH(arr) (sizeof(arr) / sizeof(*(arr)))
+#endif /* !C_ARRAY_LENGTH */
+
+#ifndef PERL_UNUSED_VAR
+# define PERL_UNUSED_VAR(x) ((void)x)
+#endif /* !PERL_UNUSED_VAR */
+
+#ifndef PERL_UNUSED_ARG
+# define PERL_UNUSED_ARG(x) PERL_UNUSED_VAR(x)
+#endif /* !PERL_UNUSED_ARG */
+
+#ifndef Newx
+# define Newx(v,n,t) New(0,v,n,t)
+#endif /* !Newx */
+
+#ifndef croak_sv
+# define croak_sv(sv) croak(SvPV_nolen(sv))
+#endif
+
+#ifndef hv_stores
+# define hv_stores(hv, keystr, val) \
+ hv_store(hv, ""keystr"", sizeof(keystr)-1, val, 0)
+#endif /* !hv_stores */
+
+#ifndef newSVpvn_flags
+# define newSVpvn_flags(s,len,flags) my_newSVpvn_flags(aTHX_ s,len,flags)
+static SV *my_newSVpvn_flags(pTHX_ const char *s, STRLEN len, U32 flags)
+{
+ SV *sv = newSVpvn(s, len);
+ SvFLAGS(sv) |= (flags & SVf_UTF8);
+ return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
+}
+#endif /* !newSVpvn_flags */
+
+#ifndef SvRV_set
+# define SvRV_set(sv, val) (SvRV(sv) = (val))
+#endif /* !SvRV_set */
+
+#ifndef SvPV_nomg
+# define SvPV_nomg SvPV
+#endif /* !SvPV_nomg */
+
+#ifndef HEK_FLAGS
+# define HEK_FLAGS(hek) 0
+# define HVhek_UTF8 1
+#endif /* !HEK_FLAGS */
+
+#ifndef hv_common
+/* These magic numbers are arbitrarily chosen (copied from perl core in fact)
+ * and only have to match between this definition and the code that uses them
+ */
+# define HV_FETCH_ISSTORE 0x04
+# define HV_FETCH_LVALUE 0x10
+# define hv_common(hv, keysv, key, klen, flags, act, val, hash) \
+ my_hv_common(aTHX_ hv, keysv, key, klen, flags, act, val, hash)
+static void *my_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
+ int flags, int act, SV *val, U32 hash)
+{
+ /*
+ * This only handles the usage actually made by the code
+ * generated by ExtUtils::Constant. EU:C really ought to arrange
+ * portability of its generated code itself.
+ */
+ if (!keysv) {
+ keysv = sv_2mortal(newSVpvn(key, klen));
+ if (flags & HVhek_UTF8)
+ SvUTF8_on(keysv);
+ }
+ if (act == HV_FETCH_LVALUE) {
+ return (void*)hv_fetch_ent(hv, keysv, 1, hash);
+ } else if (act == HV_FETCH_ISSTORE) {
+ return (void*)hv_store_ent(hv, keysv, val, hash);
+ } else {
+ croak("panic: my_hv_common: act=0x%x", act);
+ }
+}
+#endif /* !hv_common */
+
+#ifndef hv_common_key_len
+# define hv_common_key_len(hv, key, kl, act, val, hash) \
+ my_hv_common_key_len(aTHX_ hv, key, kl, act, val, hash)
+static void *my_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 kl,
+ int act, SV *val, U32 hash)
+{
+ STRLEN klen;
+ int flags;
+ if (kl < 0) {
+ klen = -kl;
+ flags = HVhek_UTF8;
+ } else {
+ klen = kl;
+ flags = 0;
+ }
+ return hv_common(hv, NULL, key, klen, flags, act, val, hash);
+}
+#endif /* !hv_common_key_len */
+
+#ifndef mPUSHi
+# define mPUSHi(i) sv_setiv_mg(PUSHs(sv_newmortal()), (IV)(i))
+#endif /* !mPUSHi */
+#ifndef mPUSHp
+# define mPUSHp(p,l) sv_setpvn_mg(PUSHs(sv_newmortal()), (p), (l))
+#endif /* !mPUSHp */
+#ifndef mPUSHs
+# define mPUSHs(s) PUSHs(sv_2mortal(s))
+#endif /* !mPUSHs */
+
+#ifndef CvCONST_on
+# undef newCONSTSUB
+# define newCONSTSUB(stash, name, val) my_newCONSTSUB(aTHX_ stash, name, val)
+static CV *my_newCONSTSUB(pTHX_ HV *stash, char *name, SV *val)
+{
+ /*
+ * This has to satisfy code generated by ExtUtils::Constant.
+ * It depends on the 5.8+ layout of constant subs. It has
+ * two calls to newCONSTSUB(): one for real constants, and one
+ * for undefined constants. In the latter case, it turns the
+ * initially-generated constant subs into something else, and
+ * it needs the return value from newCONSTSUB() which Perl 5.6
+ * doesn't provide.
+ */
+ GV *gv;
+ CV *cv;
+ Perl_newCONSTSUB(aTHX_ stash, name, val);
+ ENTER;
+ SAVESPTR(PL_curstash);
+ PL_curstash = stash;
+ gv = gv_fetchpv(name, 0, SVt_PVCV);
+ cv = GvCV(gv);
+ LEAVE;
+ CvXSUBANY(cv).any_ptr = &PL_sv_undef;
+ return cv;
+}
+# define CvCONST_off(cv) my_CvCONST_off(aTHX_ cv)
+static void my_CvCONST_off(pTHX_ CV *cv)
+{
+ op_free(CvROOT(cv));
+ CvROOT(cv) = NULL;
+ CvSTART(cv) = NULL;
+}
+#endif /* !CvCONST_on */
+
+#ifndef HAS_INET_ATON
+
+/*
+ * Check whether "cp" is a valid ascii representation
+ * of an Internet address and convert to a binary address.
+ * Returns 1 if the address is valid, 0 if not.
+ * This replaces inet_addr, the return value from which
+ * cannot distinguish between failure and a local broadcast address.
+ */
+static int
+my_inet_aton(register const char *cp, struct in_addr *addr)
+{
+ dTHX;
+ register U32 val;
+ register int base;
+ register char c;
+ int nparts;
+ const char *s;
+ unsigned int parts[4];
+ register unsigned int *pp = parts;
+
+ if (!cp || !*cp)
+ return 0;
+ for (;;) {
+ /*
+ * Collect number up to ".".
+ * Values are specified as for C:
+ * 0x=hex, 0=octal, other=decimal.
+ */
+ val = 0; base = 10;
+ if (*cp == '0') {
+ if (*++cp == 'x' || *cp == 'X')
+ base = 16, cp++;
+ else
+ base = 8;
+ }
+ while ((c = *cp) != '\0') {
+ if (isDIGIT(c)) {
+ val = (val * base) + (c - '0');
+ cp++;
+ continue;
+ }
+ if (base == 16 && (s=strchr(PL_hexdigit,c))) {
+ val = (val << 4) +
+ ((s - PL_hexdigit) & 15);
+ cp++;
+ continue;
+ }
+ break;
+ }
+ if (*cp == '.') {
+ /*
+ * Internet format:
+ * a.b.c.d
+ * a.b.c (with c treated as 16-bits)
+ * a.b (with b treated as 24 bits)
+ */
+ if (pp >= parts + 3 || val > 0xff)
+ return 0;
+ *pp++ = val, cp++;
+ } else
+ break;
+ }
+ /*
+ * Check for trailing characters.
+ */
+ if (*cp && !isSPACE(*cp))
+ return 0;
+ /*
+ * Concoct the address according to
+ * the number of parts specified.
+ */
+ nparts = pp - parts + 1; /* force to an int for switch() */
+ switch (nparts) {
+
+ case 1: /* a -- 32 bits */
+ break;
+
+ case 2: /* a.b -- 8.24 bits */
+ if (val > 0xffffff)
+ return 0;
+ val |= parts[0] << 24;
+ break;
+
+ case 3: /* a.b.c -- 8.8.16 bits */
+ if (val > 0xffff)
+ return 0;
+ val |= (parts[0] << 24) | (parts[1] << 16);
+ break;
+
+ case 4: /* a.b.c.d -- 8.8.8.8 bits */
+ if (val > 0xff)
+ return 0;
+ val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
+ break;
+ }
+ addr->s_addr = htonl(val);
+ return 1;
+}
+
+#undef inet_aton
+#define inet_aton my_inet_aton
+
+#endif /* ! HAS_INET_ATON */
+
+/* These are not gni() constants; they're extensions for the perl API */
+/* The definitions in Socket.pm and Socket.xs must match */
+#define NIx_NOHOST (1 << 0)
+#define NIx_NOSERV (1 << 1)
+
+
+static int
+not_here(const char *s)
+{
+ croak("Socket::%s not implemented on this architecture", s);
+ return -1;
+}
+
+#define PERL_IN_ADDR_S_ADDR_SIZE 4
+
+/*
+* Bad assumptions possible here.
+*
+* Bad Assumption 1: struct in_addr has no other fields
+* than the s_addr (which is the field we care about
+* in here, really). However, we can be fed either 4-byte
+* addresses (from pack("N", ...), or va.b.c.d, or ...),
+* or full struct in_addrs (from e.g. pack_sockaddr_in()),
+* which may or may not be 4 bytes in size.
+*
+* Bad Assumption 2: the s_addr field is a simple type
+* (such as an int, u_int32_t). It can be a bit field,
+* in which case using & (address-of) on it or taking sizeof()
+* wouldn't go over too well. (Those are not attempted
+* now but in case someone thinks to change the below code
+* to use addr.s_addr instead of addr, you have been warned.)
+*
+* Bad Assumption 3: the s_addr is the first field in
+* an in_addr, or that its bytes are the first bytes in
+* an in_addr.
+*
+* These bad assumptions are wrong in UNICOS which has
+* struct in_addr { struct { u_long st_addr:32; } s_da };
+* #define s_addr s_da.st_addr
+* and u_long is 64 bits.
+*
+* --jhi */
+
+#include "const-c.inc"
+
+#ifdef HAS_GETADDRINFO
+static SV *err_to_SV(pTHX_ int err)
+{
+ SV *ret = sv_newmortal();
+ (void) SvUPGRADE(ret, SVt_PVNV);
+
+ if(err) {
+ const char *error = gai_strerror(err);
+ sv_setpv(ret, error);
+ }
+ else {
+ sv_setpv(ret, "");
+ }
+
+ SvIV_set(ret, err); SvIOK_on(ret);
+
+ return ret;
+}
+
+static void xs_getaddrinfo(pTHX_ CV *cv)
+{
+ dXSARGS;
+
+ SV *host;
+ SV *service;
+ SV *hints;
+
+ char *hostname = NULL;
+ char *servicename = NULL;
+ STRLEN len;
+ struct addrinfo hints_s;
+ struct addrinfo *res;
+ struct addrinfo *res_iter;
+ int err;
+ int n_res;
+
+ PERL_UNUSED_ARG(cv);
+ if(items > 3)
+ croak("Usage: Socket::getaddrinfo(host, service, hints)");
+
+ SP -= items;
+
+ if(items < 1)
+ host = &PL_sv_undef;
+ else
+ host = ST(0);
+
+ if(items < 2)
+ service = &PL_sv_undef;
+ else
+ service = ST(1);
+
+ if(items < 3)
+ hints = NULL;
+ else
+ hints = ST(2);
+
+ SvGETMAGIC(host);
+ if(SvOK(host)) {
+ hostname = SvPV_nomg(host, len);
+ if (!len)
+ hostname = NULL;
+ }
+
+ SvGETMAGIC(service);
+ if(SvOK(service)) {
+ servicename = SvPV_nomg(service, len);
+ if (!len)
+ servicename = NULL;
+ }
+
+ Zero(&hints_s, sizeof(hints_s), char);
+ hints_s.ai_family = PF_UNSPEC;
+
+ if(hints && SvOK(hints)) {
+ HV *hintshash;
+ SV **valp;
+
+ if(!SvROK(hints) || SvTYPE(SvRV(hints)) != SVt_PVHV)
+ croak("hints is not a HASH reference");
+
+ hintshash = (HV*)SvRV(hints);
+
+ if((valp = hv_fetch(hintshash, "flags", 5, 0)) != NULL && SvOK(*valp))
+ hints_s.ai_flags = SvIV(*valp);
+ if((valp = hv_fetch(hintshash, "family", 6, 0)) != NULL && SvOK(*valp))
+ hints_s.ai_family = SvIV(*valp);
+ if((valp = hv_fetch(hintshash, "socktype", 8, 0)) != NULL && SvOK(*valp))
+ hints_s.ai_socktype = SvIV(*valp);
+ if((valp = hv_fetch(hintshash, "protocol", 8, 0)) != NULL && SvOK(*valp))
+ hints_s.ai_protocol = SvIV(*valp);
+ }
+
+ err = getaddrinfo(hostname, servicename, &hints_s, &res);
+
+ XPUSHs(err_to_SV(aTHX_ err));
+
+ if(err)
+ XSRETURN(1);
+
+ n_res = 0;
+ for(res_iter = res; res_iter; res_iter = res_iter->ai_next) {
+ HV *res_hv = newHV();
+
+ (void)hv_stores(res_hv, "family", newSViv(res_iter->ai_family));
+ (void)hv_stores(res_hv, "socktype", newSViv(res_iter->ai_socktype));
+ (void)hv_stores(res_hv, "protocol", newSViv(res_iter->ai_protocol));
+
+ (void)hv_stores(res_hv, "addr", newSVpvn((char*)res_iter->ai_addr, res_iter->ai_addrlen));
+
+ if(res_iter->ai_canonname)
+ (void)hv_stores(res_hv, "canonname", newSVpv(res_iter->ai_canonname, 0));
+ else
+ (void)hv_stores(res_hv, "canonname", newSV(0));
+
+ XPUSHs(sv_2mortal(newRV_noinc((SV*)res_hv)));
+ n_res++;
+ }
+
+ freeaddrinfo(res);
+
+ XSRETURN(1 + n_res);
+}
+#endif
+
+#ifdef HAS_GETNAMEINFO
+static void xs_getnameinfo(pTHX_ CV *cv)
+{
+ dXSARGS;
+
+ SV *addr;
+ int flags;
+ int xflags;
+
+ char host[1024];
+ char serv[256];
+ char *sa; /* we'll cast to struct sockaddr * when necessary */
+ STRLEN addr_len;
+ int err;
+
+ int want_host, want_serv;
+
+ PERL_UNUSED_ARG(cv);
+ if(items < 1 || items > 3)
+ croak("Usage: Socket::getnameinfo(addr, flags=0, xflags=0)");
+
+ SP -= items;
+
+ addr = ST(0);
+
+ if(items < 2)
+ flags = 0;
+ else
+ flags = SvIV(ST(1));
+
+ if(items < 3)
+ xflags = 0;
+ else
+ xflags = SvIV(ST(2));
+
+ want_host = !(xflags & NIx_NOHOST);
+ want_serv = !(xflags & NIx_NOSERV);
+
+ if(!SvPOK(addr))
+ croak("addr is not a string");
+
+ addr_len = SvCUR(addr);
+
+ /* We need to ensure the sockaddr is aligned, because a random SvPV might
+ * not be due to SvOOK */
+ Newx(sa, addr_len, char);
+ Copy(SvPV_nolen(addr), sa, addr_len, char);
+#ifdef HAS_SOCKADDR_SA_LEN
+ ((struct sockaddr *)sa)->sa_len = addr_len;
+#endif
+
+ err = getnameinfo((struct sockaddr *)sa, addr_len,
+ want_host ? host : NULL, want_host ? sizeof(host) : 0,
+ want_serv ? serv : NULL, want_serv ? sizeof(serv) : 0,
+ flags);
+
+ Safefree(sa);
+
+ XPUSHs(err_to_SV(aTHX_ err));
+
+ if(err)
+ XSRETURN(1);
+
+ XPUSHs(want_host ? sv_2mortal(newSVpv(host, 0)) : &PL_sv_undef);
+ XPUSHs(want_serv ? sv_2mortal(newSVpv(serv, 0)) : &PL_sv_undef);
+
+ XSRETURN(3);
+}
+#endif
+
+MODULE = Socket PACKAGE = Socket
+
+INCLUDE: const-xs.inc
+
+BOOT:
+#ifdef HAS_GETADDRINFO
+ newXS("Socket::getaddrinfo", xs_getaddrinfo, __FILE__);
+#endif
+#ifdef HAS_GETNAMEINFO
+ newXS("Socket::getnameinfo", xs_getnameinfo, __FILE__);
+#endif
+
+void
+inet_aton(host)
+ char * host
+ CODE:
+ {
+ struct in_addr ip_address;
+ struct hostent * phe;
+
+ if ((*host != '\0') && inet_aton(host, &ip_address)) {
+ ST(0) = sv_2mortal(newSVpvn((char *)&ip_address, sizeof(ip_address)));
+ XSRETURN(1);
+ }
+
+ phe = gethostbyname(host);
+ if (phe && phe->h_addrtype == AF_INET && phe->h_length == 4) {
+ ST(0) = sv_2mortal(newSVpvn((char *)phe->h_addr, phe->h_length));
+ XSRETURN(1);
+ }
+
+ XSRETURN_UNDEF;
+ }
+
+void
+inet_ntoa(ip_address_sv)
+ SV * ip_address_sv
+ CODE:
+ {
+ STRLEN addrlen;
+ struct in_addr addr;
+ char * ip_address;
+ if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
+ croak("Wide character in %s", "Socket::inet_ntoa");
+ ip_address = SvPVbyte(ip_address_sv, addrlen);
+ if (addrlen == sizeof(addr) || addrlen == 4)
+ addr.s_addr =
+ (ip_address[0] & 0xFF) << 24 |
+ (ip_address[1] & 0xFF) << 16 |
+ (ip_address[2] & 0xFF) << 8 |
+ (ip_address[3] & 0xFF);
+ else
+ croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf,
+ "Socket::inet_ntoa", (UV)addrlen, (UV)sizeof(addr));
+ /* We could use inet_ntoa() but that is broken
+ * in HP-UX + GCC + 64bitint (returns "0.0.0.0"),
+ * so let's use this sprintf() workaround everywhere.
+ * This is also more threadsafe than using inet_ntoa(). */
+ ST(0) = sv_2mortal(Perl_newSVpvf(aTHX_ "%d.%d.%d.%d", /* IPv6? */
+ ((addr.s_addr >> 24) & 0xFF),
+ ((addr.s_addr >> 16) & 0xFF),
+ ((addr.s_addr >> 8) & 0xFF),
+ ( addr.s_addr & 0xFF)));
+ }
+
+void
+sockaddr_family(sockaddr)
+ SV * sockaddr
+ PREINIT:
+ STRLEN sockaddr_len;
+ char *sockaddr_pv = SvPVbyte(sockaddr, sockaddr_len);
+ CODE:
+ if (sockaddr_len < offsetof(struct sockaddr, sa_data))
+ croak("Bad arg length for %s, length is %"UVuf", should be at least %"UVuf,
+ "Socket::sockaddr_family", (UV)sockaddr_len,
+ (UV)offsetof(struct sockaddr, sa_data));
+ ST(0) = sv_2mortal(newSViv(((struct sockaddr*)sockaddr_pv)->sa_family));
+
+void
+pack_sockaddr_un(pathname)
+ SV * pathname
+ CODE:
+ {
+#ifdef I_SYS_UN
+ struct sockaddr_un sun_ad; /* fear using sun */
+ STRLEN len;
+ char * pathname_pv;
+ int addr_len;
+
+ Zero(&sun_ad, sizeof(sun_ad), char);
+ sun_ad.sun_family = AF_UNIX;
+ pathname_pv = SvPV(pathname,len);
+ if (len > sizeof(sun_ad.sun_path))
+ len = sizeof(sun_ad.sun_path);
+# ifdef OS2 /* Name should start with \socket\ and contain backslashes! */
+ {
+ int off;
+ char *s, *e;
+
+ if (pathname_pv[0] != '/' && pathname_pv[0] != '\\')
+ croak("Relative UNIX domain socket name '%s' unsupported",
+ pathname_pv);
+ else if (len < 8
+ || pathname_pv[7] != '/' && pathname_pv[7] != '\\'
+ || !strnicmp(pathname_pv + 1, "socket", 6))
+ off = 7;
+ else
+ off = 0; /* Preserve names starting with \socket\ */
+ Copy("\\socket", sun_ad.sun_path, off, char);
+ Copy(pathname_pv, sun_ad.sun_path + off, len, char);
+
+ s = sun_ad.sun_path + off - 1;
+ e = s + len + 1;
+ while (++s < e)
+ if (*s = '/')
+ *s = '\\';
+ }
+# else /* !( defined OS2 ) */
+ Copy(pathname_pv, sun_ad.sun_path, len, char);
+# endif
+ if (0) not_here("dummy");
+ if (len > 1 && sun_ad.sun_path[0] == '\0') {
+ /* Linux-style abstract-namespace socket.
+ * The name is not a file name, but an array of arbitrary
+ * character, starting with \0 and possibly including \0s,
+ * therefore the length of the structure must denote the
+ * end of that character array */
+ addr_len = (char *)&(sun_ad.sun_path) - (char *)&sun_ad + len;
+ } else {
+ addr_len = sizeof(sun_ad);
+ }
+# ifdef HAS_SOCKADDR_SA_LEN
+ sun_ad.sun_len = addr_len;
+# endif
+ ST(0) = sv_2mortal(newSVpvn((char *)&sun_ad, addr_len));
+#else
+ ST(0) = (SV*)not_here("pack_sockaddr_un");
+#endif
+
+ }
+
+void
+unpack_sockaddr_un(sun_sv)
+ SV * sun_sv
+ CODE:
+ {
+#ifdef I_SYS_UN
+ struct sockaddr_un addr;
+ STRLEN sockaddrlen;
+ char * sun_ad = SvPVbyte(sun_sv,sockaddrlen);
+ int addr_len;
+# ifdef __linux__
+ /* On Linux sockaddrlen on sockets returned by accept, recvfrom,
+ getpeername and getsockname is not equal to sizeof(addr). */
+ if (sockaddrlen < sizeof(addr)) {
+ Copy(sun_ad, &addr, sockaddrlen, char);
+ Zero(((char*)&addr) + sockaddrlen, sizeof(addr) - sockaddrlen, char);
+ } else {
+ Copy(sun_ad, &addr, sizeof(addr), char);
+ }
+# else
+ if (sockaddrlen != sizeof(addr))
+ croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf,
+ "Socket::unpack_sockaddr_un", (UV)sockaddrlen, (UV)sizeof(addr));
+ Copy(sun_ad, &addr, sizeof(addr), char);
+# endif
+
+ if (addr.sun_family != AF_UNIX)
+ croak("Bad address family for %s, got %d, should be %d",
+ "Socket::unpack_sockaddr_un", addr.sun_family, AF_UNIX);
+
+ if (addr.sun_path[0] == '\0') {
+ /* Linux-style abstract socket address begins with a nul
+ * and can contain nuls. */
+ addr_len = (char *)&addr - (char *)&(addr.sun_path) + sockaddrlen;
+ } else {
+ for (addr_len = 0; addr.sun_path[addr_len]
+ && addr_len < (int)sizeof(addr.sun_path); addr_len++);
+ }
+
+ ST(0) = sv_2mortal(newSVpvn(addr.sun_path, addr_len));
+#else
+ ST(0) = (SV*)not_here("unpack_sockaddr_un");
+#endif
+ }
+
+void
+pack_sockaddr_in(port, ip_address_sv)
+ unsigned short port
+ SV * ip_address_sv
+ CODE:
+ {
+ struct sockaddr_in sin;
+ struct in_addr addr;
+ STRLEN addrlen;
+ char * ip_address;
+ if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
+ croak("Wide character in %s", "Socket::pack_sockaddr_in");
+ ip_address = SvPVbyte(ip_address_sv, addrlen);
+ if (addrlen == sizeof(addr) || addrlen == 4)
+ addr.s_addr =
+ (ip_address[0] & 0xFF) << 24 |
+ (ip_address[1] & 0xFF) << 16 |
+ (ip_address[2] & 0xFF) << 8 |
+ (ip_address[3] & 0xFF);
+ else
+ croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf,
+ "Socket::pack_sockaddr_in",
+ (UV)addrlen, (UV)sizeof(addr));
+ Zero(&sin, sizeof(sin), char);
+ sin.sin_family = AF_INET;
+ sin.sin_port = htons(port);
+ sin.sin_addr.s_addr = htonl(addr.s_addr);
+# ifdef HAS_SOCKADDR_SA_LEN
+ sin.sin_len = sizeof(sin);
+# endif
+ ST(0) = sv_2mortal(newSVpvn((char *)&sin, sizeof(sin)));
+ }
+
+void
+unpack_sockaddr_in(sin_sv)
+ SV * sin_sv
+ PPCODE:
+ {
+ STRLEN sockaddrlen;
+ struct sockaddr_in addr;
+ SV *ip_address_sv;
+ char * sin = SvPVbyte(sin_sv,sockaddrlen);
+ if (sockaddrlen != sizeof(addr)) {
+ croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf,
+ "Socket::unpack_sockaddr_in", sockaddrlen, sizeof(addr));
+ }
+ Copy(sin, &addr, sizeof(addr), char);
+ if (addr.sin_family != AF_INET) {
+ croak("Bad address family for %s, got %d, should be %d",
+ "Socket::unpack_sockaddr_in", addr.sin_family, AF_INET);
+ }
+ ip_address_sv = newSVpvn((char *)&addr.sin_addr, sizeof(addr.sin_addr));
+
+ if(GIMME_V == G_ARRAY) {
+ EXTEND(SP, 2);
+ mPUSHi(ntohs(addr.sin_port));
+ mPUSHs(ip_address_sv);
+ }
+ else {
+ mPUSHs(ip_address_sv);
+ }
+ }
+
+void
+pack_sockaddr_in6(port, sin6_addr, scope_id=0, flowinfo=0)
+ unsigned short port
+ SV * sin6_addr
+ unsigned long scope_id
+ unsigned long flowinfo
+ CODE:
+ {
+#ifdef HAS_SOCKADDR_IN6
+ struct sockaddr_in6 sin6;
+ char * addrbytes;
+ STRLEN addrlen;
+ if (DO_UTF8(sin6_addr) && !sv_utf8_downgrade(sin6_addr, 1))
+ croak("Wide character in %s", "Socket::pack_sockaddr_in6");
+ addrbytes = SvPVbyte(sin6_addr, addrlen);
+ if (addrlen != sizeof(sin6.sin6_addr))
+ croak("Bad arg length %s, length is %"UVuf", should be %"UVuf,
+ "Socket::pack_sockaddr_in6", (UV)addrlen, (UV)sizeof(sin6.sin6_addr));
+ Zero(&sin6, sizeof(sin6), char);
+ sin6.sin6_family = AF_INET6;
+ sin6.sin6_port = htons(port);
+ sin6.sin6_flowinfo = htonl(flowinfo);
+ Copy(addrbytes, &sin6.sin6_addr, sizeof(sin6.sin6_addr), char);
+# ifdef HAS_SIN6_SCOPE_ID
+ sin6.sin6_scope_id = scope_id;
+# else
+ if (scope_id != 0)
+ warn("%s cannot represent non-zero scope_id %d",
+ "Socket::pack_sockaddr_in6", scope_id);
+# endif
+# ifdef HAS_SOCKADDR_SA_LEN
+ sin6.sin6_len = sizeof(sin6);
+# endif
+ ST(0) = sv_2mortal(newSVpvn((char *)&sin6, sizeof(sin6)));
+#else
+ ST(0) = (SV*)not_here("pack_sockaddr_in6");
+#endif
+ }
+
+void
+unpack_sockaddr_in6(sin6_sv)
+ SV * sin6_sv
+ PPCODE:
+ {
+#ifdef HAS_SOCKADDR_IN6
+ STRLEN addrlen;
+ struct sockaddr_in6 sin6;
+ char * addrbytes = SvPVbyte(sin6_sv, addrlen);
+ SV *ip_address_sv;
+ if (addrlen != sizeof(sin6))
+ croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf,
+ "Socket::unpack_sockaddr_in6", (UV)addrlen, (UV)sizeof(sin6));
+ Copy(addrbytes, &sin6, sizeof(sin6), char);
+ if (sin6.sin6_family != AF_INET6)
+ croak("Bad address family for %s, got %d, should be %d",
+ "Socket::unpack_sockaddr_in6", sin6.sin6_family, AF_INET6);
+ ip_address_sv = newSVpvn((char *)&sin6.sin6_addr, sizeof(sin6.sin6_addr));
+
+ if(GIMME_V == G_ARRAY) {
+ EXTEND(SP, 4);
+ mPUSHi(ntohs(sin6.sin6_port));
+ mPUSHs(ip_address_sv);
+# ifdef HAS_SIN6_SCOPE_ID
+ mPUSHi(sin6.sin6_scope_id);
+# else
+ mPUSHi(0);
+# endif
+ mPUSHi(ntohl(sin6.sin6_flowinfo));
+ }
+ else {
+ mPUSHs(ip_address_sv);
+ }
+#else
+ ST(0) = (SV*)not_here("pack_sockaddr_in6");
+#endif
+ }
+
+void
+inet_ntop(af, ip_address_sv)
+ int af
+ SV * ip_address_sv
+ CODE:
+#ifdef HAS_INETNTOP
+ STRLEN addrlen;
+#ifdef AF_INET6
+ struct in6_addr addr;
+ char str[INET6_ADDRSTRLEN];
+#else
+ struct in_addr addr;
+ char str[INET_ADDRSTRLEN];
+#endif
+ char *ip_address;
+
+ if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
+ croak("Wide character in %s", "Socket::inet_ntop");
+
+ ip_address = SvPV(ip_address_sv, addrlen);
+
+ switch(af) {
+ case AF_INET:
+ if(addrlen != 4)
+ croak("Bad address length for Socket::inet_ntop on AF_INET;"
+ " got %"UVuf", should be 4", (UV)addrlen);
+ break;
+#ifdef AF_INET6
+ case AF_INET6:
+ if(addrlen != 16)
+ croak("Bad address length for Socket::inet_ntop on AF_INET6;"
+ " got %"UVuf", should be 16", (UV)addrlen);
+ break;
+#endif
+ default:
+ croak("Bad address family for %s, got %d, should be"
+#ifdef AF_INET6
+ " either AF_INET or AF_INET6",
+#else
+ " AF_INET",
+#endif
+ "Socket::inet_ntop", af);
+ }
+
+ if(addrlen < sizeof(addr)) {
+ Copy(ip_address, &addr, addrlen, char);
+ Zero(((char*)&addr) + addrlen, sizeof(addr) - addrlen, char);
+ }
+ else {
+ Copy(ip_address, &addr, sizeof addr, char);
+ }
+ inet_ntop(af, &addr, str, sizeof str);
+
+ ST(0) = sv_2mortal(newSVpvn(str, strlen(str)));
+#else
+ ST(0) = (SV*)not_here("inet_ntop");
+#endif
+
+void
+inet_pton(af, host)
+ int af
+ const char * host
+ CODE:
+#ifdef HAS_INETPTON
+ int ok;
+ int addrlen = 0;
+#ifdef AF_INET6
+ struct in6_addr ip_address;
+#else
+ struct in_addr ip_address;
+#endif
+
+ switch(af) {
+ case AF_INET:
+ addrlen = 4;
+ break;
+#ifdef AF_INET6
+ case AF_INET6:
+ addrlen = 16;
+ break;
+#endif
+ default:
+ croak("Bad address family for %s, got %d, should be"
+#ifdef AF_INET6
+ " either AF_INET or AF_INET6",
+#else
+ " AF_INET",
+#endif
+ "Socket::inet_pton", af);
+ }
+ ok = (*host != '\0') && inet_pton(af, host, &ip_address);
+
+ ST(0) = sv_newmortal();
+ if (ok) {
+ sv_setpvn( ST(0), (char *)&ip_address, addrlen);
+ }
+#else
+ ST(0) = (SV*)not_here("inet_pton");
+#endif
+
+void
+pack_ip_mreq(multiaddr, interface=&PL_sv_undef)
+ SV * multiaddr
+ SV * interface
+ CODE:
+ {
+#ifdef HAS_IP_MREQ
+ struct ip_mreq mreq;
+ char * multiaddrbytes;
+ char * interfacebytes;
+ STRLEN len;
+ if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
+ croak("Wide character in %s", "Socket::pack_ip_mreq");
+ multiaddrbytes = SvPVbyte(multiaddr, len);
+ if (len != sizeof(mreq.imr_multiaddr))
+ croak("Bad arg length %s, length is %"UVuf", should be %"UVuf,
+ "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_multiaddr));
+ Zero(&mreq, sizeof(mreq), char);
+ Copy(multiaddrbytes, &mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr), char);
+ if(SvOK(interface)) {
+ if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
+ croak("Wide character in %s", "Socket::pack_ip_mreq");
+ interfacebytes = SvPVbyte(interface, len);
+ if (len != sizeof(mreq.imr_interface))
+ croak("Bad arg length %s, length is %"UVuf", should be %"UVuf,
+ "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_interface));
+ Copy(interfacebytes, &mreq.imr_interface, sizeof(mreq.imr_interface), char);
+ }
+ else
+ mreq.imr_interface.s_addr = INADDR_ANY;
+ ST(0) = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)));
+#else
+ not_here("pack_ip_mreq");
+#endif
+ }
+
+void
+unpack_ip_mreq(mreq_sv)
+ SV * mreq_sv
+ PPCODE:
+ {
+#ifdef HAS_IP_MREQ
+ struct ip_mreq mreq;
+ STRLEN mreqlen;
+ char * mreqbytes = SvPVbyte(mreq_sv, mreqlen);
+ if (mreqlen != sizeof(mreq))
+ croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf,
+ "Socket::unpack_ip_mreq", (UV)mreqlen, (UV)sizeof(mreq));
+ Copy(mreqbytes, &mreq, sizeof(mreq), char);
+ EXTEND(SP, 2);
+ mPUSHp((char *)&mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr));
+ mPUSHp((char *)&mreq.imr_interface, sizeof(mreq.imr_interface));
+#else
+ not_here("unpack_ip_mreq");
+#endif
+ }
+
+void
+pack_ip_mreq_source(multiaddr, source, interface=&PL_sv_undef)
+ SV * multiaddr
+ SV * source
+ SV * interface
+ CODE:
+ {
+#if defined(HAS_IP_MREQ_SOURCE) && defined (IP_ADD_SOURCE_MEMBERSHIP)
+ struct ip_mreq_source mreq;
+ char * multiaddrbytes;
+ char * sourcebytes;
+ char * interfacebytes;
+ STRLEN len;
+ if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
+ croak("Wide character in %s", "Socket::pack_ip_mreq_source");
+ multiaddrbytes = SvPVbyte(multiaddr, len);
+ if (len != sizeof(mreq.imr_multiaddr))
+ croak("Bad arg length %s, length is %"UVuf", should be %"UVuf,
+ "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_multiaddr));
+ if (DO_UTF8(source) && !sv_utf8_downgrade(source, 1))
+ croak("Wide character in %s", "Socket::pack_ip_mreq_source");
+ if (len != sizeof(mreq.imr_sourceaddr))
+ croak("Bad arg length %s, length is %"UVuf", should be %"UVuf,
+ "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_sourceaddr));
+ sourcebytes = SvPVbyte(source, len);
+ Zero(&mreq, sizeof(mreq), char);
+ Copy(multiaddrbytes, &mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr), char);
+ Copy(sourcebytes, &mreq.imr_sourceaddr, sizeof(mreq.imr_sourceaddr), char);
+ if(SvOK(interface)) {
+ if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
+ croak("Wide character in %s", "Socket::pack_ip_mreq");
+ interfacebytes = SvPVbyte(interface, len);
+ if (len != sizeof(mreq.imr_interface))
+ croak("Bad arg length %s, length is %"UVuf", should be %"UVuf,
+ "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_interface));
+ Copy(interfacebytes, &mreq.imr_interface, sizeof(mreq.imr_interface), char);
+ }
+ else
+ mreq.imr_interface.s_addr = INADDR_ANY;
+ ST(0) = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)));
+#else
+ not_here("pack_ip_mreq_source");
+#endif
+ }
+
+void
+unpack_ip_mreq_source(mreq_sv)
+ SV * mreq_sv
+ PPCODE:
+ {
+#if defined(HAS_IP_MREQ_SOURCE) && defined (IP_ADD_SOURCE_MEMBERSHIP)
+ struct ip_mreq_source mreq;
+ STRLEN mreqlen;
+ char * mreqbytes = SvPVbyte(mreq_sv, mreqlen);
+ if (mreqlen != sizeof(mreq))
+ croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf,
+ "Socket::unpack_ip_mreq_source", (UV)mreqlen, (UV)sizeof(mreq));
+ Copy(mreqbytes, &mreq, sizeof(mreq), char);
+ EXTEND(SP, 3);
+ mPUSHp((char *)&mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr));
+ mPUSHp((char *)&mreq.imr_sourceaddr, sizeof(mreq.imr_sourceaddr));
+ mPUSHp((char *)&mreq.imr_interface, sizeof(mreq.imr_interface));
+#else
+ not_here("unpack_ip_mreq_source");
+#endif
+ }
+
+void
+pack_ipv6_mreq(multiaddr, interface)
+ SV * multiaddr
+ unsigned int interface
+ CODE:
+ {
+#ifdef HAS_IPV6_MREQ
+ struct ipv6_mreq mreq;
+ char * multiaddrbytes;
+ STRLEN len;
+ if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
+ croak("Wide character in %s", "Socket::pack_ipv6_mreq");
+ multiaddrbytes = SvPVbyte(multiaddr, len);
+ if (len != sizeof(mreq.ipv6mr_multiaddr))
+ croak("Bad arg length %s, length is %"UVuf", should be %"UVuf,
+ "Socket::pack_ipv6_mreq", (UV)len, (UV)sizeof(mreq.ipv6mr_multiaddr));
+ Zero(&mreq, sizeof(mreq), char);
+ Copy(multiaddrbytes, &mreq.ipv6mr_multiaddr, sizeof(mreq.ipv6mr_multiaddr), char);
+ mreq.ipv6mr_interface = interface;
+ ST(0) = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)));
+#else
+ not_here("pack_ipv6_mreq");
+#endif
+ }
+
+void
+unpack_ipv6_mreq(mreq_sv)
+ SV * mreq_sv
+ PPCODE:
+ {
+#ifdef HAS_IPV6_MREQ
+ struct ipv6_mreq mreq;
+ STRLEN mreqlen;
+ char * mreqbytes = SvPVbyte(mreq_sv, mreqlen);
+ if (mreqlen != sizeof(mreq))
+ croak("Bad arg length for %s, length is %"UVuf", should be %"UVuf,
+ "Socket::unpack_ipv6_mreq", (UV)mreqlen, (UV)sizeof(mreq));
+ Copy(mreqbytes, &mreq, sizeof(mreq), char);
+ EXTEND(SP, 2);
+ mPUSHp((char *)&mreq.ipv6mr_multiaddr, sizeof(mreq.ipv6mr_multiaddr));
+ mPUSHi(mreq.ipv6mr_interface);
+#else
+ not_here("unpack_ipv6_mreq");
+#endif
+ }
Added: vendor/perl/dist/cpan/Socket/t/Socket.t
===================================================================
--- vendor/perl/dist/cpan/Socket/t/Socket.t (rev 0)
+++ vendor/perl/dist/cpan/Socket/t/Socket.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,102 @@
+#!./perl
+
+BEGIN {
+ require Config; import Config;
+ if ($Config{'extensions'} !~ /\bSocket\b/ &&
+ !(($^O eq 'VMS') && $Config{d_socket})) {
+ print "1..0\n";
+ exit 0;
+ }
+ $has_alarm = $Config{d_alarm};
+}
+
+use Socket qw(:all);
+use Test::More tests => 6;
+
+$has_echo = $^O ne 'MSWin32';
+$alarmed = 0;
+sub arm { $alarmed = 0; alarm(shift) if $has_alarm }
+sub alarmed { $alarmed = 1 }
+$SIG{ALRM} = 'alarmed' if $has_alarm;
+
+SKIP: {
+ unless(socket(T, PF_INET, SOCK_STREAM, IPPROTO_TCP)) {
+ skip "No PF_INET", 3;
+ }
+
+ pass "socket(PF_INET)";
+
+ arm(5);
+ my $host = $^O eq 'MacOS' || ($^O eq 'irix' && $Config{osvers} == 5) ?
+ '127.0.0.1' : 'localhost';
+ my $localhost = inet_aton($host);
+
+ SKIP: {
+ unless($has_echo && defined $localhost && connect(T,pack_sockaddr_in(7,$localhost))) {
+ skip "Unable to connect to localhost:7", 2;
+ }
+
+ arm(0);
+
+ pass "PF_INET echo localhost connected";
+
+ diag "Connected to " .
+ inet_ntoa((unpack_sockaddr_in(getpeername(T)))[1])."\n";
+
+ arm(5);
+ syswrite(T,"hello",5);
+ arm(0);
+
+ arm(5);
+ $read = sysread(T,$buff,10); # Connection may be granted, then closed!
+ arm(0);
+
+ while ($read > 0 && length($buff) < 5) {
+ # adjust for fact that TCP doesn't guarantee size of reads/writes
+ arm(5);
+ $read = sysread(T,$buff,10,length($buff));
+ arm(0);
+ }
+
+ ok(($read == 0 || $buff eq "hello"), "PF_INET echo localhost reply");
+ }
+}
+
+SKIP: {
+ unless(socket(S, PF_INET, SOCK_STREAM, IPPROTO_TCP)) {
+ skip "No PF_INET", 3;
+ }
+
+ pass "socket(PF_INET)";
+
+ SKIP: {
+ arm(5);
+ unless($has_echo && connect(S,pack_sockaddr_in(7,INADDR_LOOPBACK))) {
+ skip "Unable to connect to localhost:7", 2;
+ }
+
+ arm(0);
+
+ pass "PF_INET echo INADDR_LOOPBACK connected";
+
+ diag "Connected to " .
+ inet_ntoa((unpack_sockaddr_in(getpeername(S)))[1])."\n";
+
+ arm(5);
+ syswrite(S,"olleh",5);
+ arm(0);
+
+ arm(5);
+ $read = sysread(S,$buff,10); # Connection may be granted, then closed!
+ arm(0);
+
+ while ($read > 0 && length($buff) < 5) {
+ # adjust for fact that TCP doesn't guarantee size of reads/writes
+ arm(5);
+ $read = sysread(S,$buff,10,length($buff));
+ arm(0);
+ }
+
+ ok(($read == 0 || $buff eq "olleh"), "PF_INET echo INADDR_LOOPBACK reply");
+ }
+}
Added: vendor/perl/dist/cpan/Socket/t/getaddrinfo.t
===================================================================
--- vendor/perl/dist/cpan/Socket/t/getaddrinfo.t (rev 0)
+++ vendor/perl/dist/cpan/Socket/t/getaddrinfo.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,122 @@
+use strict;
+use warnings;
+use Test::More tests => 30;
+
+use Socket qw(:addrinfo AF_INET SOCK_STREAM IPPROTO_TCP unpack_sockaddr_in inet_aton);
+
+my ( $err, @res );
+
+( $err, @res ) = getaddrinfo( "127.0.0.1", "80", { socktype => SOCK_STREAM } );
+cmp_ok( $err, "==", 0, '$err == 0 for host=127.0.0.1/service=80/socktype=STREAM' );
+cmp_ok( $err, "eq", "", '$err eq "" for host=127.0.0.1/service=80/socktype=STREAM' );
+is( scalar @res, 1,
+ '@res has 1 result' );
+
+is( $res[0]->{family}, AF_INET,
+ '$res[0] family is AF_INET' );
+is( $res[0]->{socktype}, SOCK_STREAM,
+ '$res[0] socktype is SOCK_STREAM' );
+ok( $res[0]->{protocol} == 0 || $res[0]->{protocol} == IPPROTO_TCP,
+ '$res[0] protocol is 0 or IPPROTO_TCP' );
+ok( defined $res[0]->{addr},
+ '$res[0] addr is defined' );
+if (length $res[0]->{addr}) {
+ is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ],
+ [ 80, inet_aton( "127.0.0.1" ) ],
+ '$res[0] addr is {"127.0.0.1", 80}' );
+} else {
+ fail( '$res[0] addr is empty: check $socksizetype' );
+}
+
+# Check actual IV integers work just as well as PV strings
+( $err, @res ) = getaddrinfo( "127.0.0.1", 80, { socktype => SOCK_STREAM } );
+cmp_ok( $err, "==", 0, '$err == 0 for host=127.0.0.1/service=80/socktype=STREAM' );
+is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ],
+ [ 80, inet_aton( "127.0.0.1" ) ],
+ '$res[0] addr is {"127.0.0.1", 80}' );
+
+( $err, @res ) = getaddrinfo( "127.0.0.1", "" );
+cmp_ok( $err, "==", 0, '$err == 0 for host=127.0.0.1' );
+# Might get more than one; e.g. different socktypes
+ok( scalar @res > 0, '@res has results' );
+
+( $err, @res ) = getaddrinfo( "127.0.0.1", undef );
+cmp_ok( $err, "==", 0, '$err == 0 for host=127.0.0.1/service=undef' );
+
+# Test GETMAGIC
+{
+ "127.0.0.1" =~ /(.+)/;
+ ( $err, @res ) = getaddrinfo($1, undef);
+ cmp_ok( $err, "==", 0, '$err == 0 for host=$1' );
+ ok( scalar @res > 0, '@res has results' );
+ is( (unpack_sockaddr_in $res[0]->{addr})[1],
+ inet_aton( "127.0.0.1" ),
+ '$res[0] addr is {"127.0.0.1", ??}' );
+}
+
+( $err, @res ) = getaddrinfo( "", "80", { family => AF_INET, socktype => SOCK_STREAM } );
+cmp_ok( $err, "==", 0, '$err == 0 for service=80/family=AF_INET/socktype=STREAM' );
+is( scalar @res, 1, '@res has 1 result' );
+
+# Just pick the first one
+is( $res[0]->{family}, AF_INET,
+ '$res[0] family is AF_INET' );
+is( $res[0]->{socktype}, SOCK_STREAM,
+ '$res[0] socktype is SOCK_STREAM' );
+ok( $res[0]->{protocol} == 0 || $res[0]->{protocol} == IPPROTO_TCP,
+ '$res[0] protocol is 0 or IPPROTO_TCP' );
+
+# Now some tests of a few well-known internet hosts
+my $goodhost = "cpan.perl.org";
+
+SKIP: {
+ skip "Resolver has no answer for $goodhost", 2 unless gethostbyname( $goodhost );
+
+ ( $err, @res ) = getaddrinfo( "cpan.perl.org", "ftp", { socktype => SOCK_STREAM } );
+ cmp_ok( $err, "==", 0, '$err == 0 for host=cpan.perl.org/service=ftp/socktype=STREAM' );
+ # Might get more than one; e.g. different families
+ ok( scalar @res > 0, '@res has results' );
+}
+
+# Now something I hope doesn't exist - we put it in a known-missing TLD
+my $missinghost = "TbK4jM2M0OS.lm57DWIyu4i";
+
+# Some CPAN testing machines seem to have wildcard DNS servers that reply to
+# any request. We'd better check for them
+
+SKIP: {
+ skip "Resolver has an answer for $missinghost", 1 if gethostbyname( $missinghost );
+
+ # Some OSes return $err == 0 but no results
+ ( $err, @res ) = getaddrinfo( $missinghost, "ftp", { socktype => SOCK_STREAM } );
+ ok( $err != 0 || ( $err == 0 && @res == 0 ),
+ '$err != 0 or @res == 0 for host=TbK4jM2M0OS.lm57DWIyu4i/service=ftp/socktype=SOCK_STREAM' );
+ if( @res ) {
+ # Diagnostic that might help
+ while( my $r = shift @res ) {
+ diag( "family=$r->{family} socktype=$r->{socktype} protocol=$r->{protocol} addr=[" . length( $r->{addr} ) . " bytes]" );
+ diag( " addr=" . join( ", ", map { sprintf '0x%02x', ord $_ } split m//, $r->{addr} ) );
+ }
+ }
+}
+
+# Now check that names with AI_NUMERICHOST fail
+
+( $err, @res ) = getaddrinfo( "localhost", "ftp", { flags => AI_NUMERICHOST, socktype => SOCK_STREAM } );
+ok( $err != 0, '$err != 0 for host=localhost/service=ftp/flags=AI_NUMERICHOST/socktype=SOCK_STREAM' );
+
+# Some sanity checking on the hints hash
+ok( defined eval { getaddrinfo( "127.0.0.1", "80", undef ); 1 },
+ 'getaddrinfo() with undef hints works' );
+ok( !defined eval { getaddrinfo( "127.0.0.1", "80", "hints" ); 1 },
+ 'getaddrinfo() with string hints dies' );
+ok( !defined eval { getaddrinfo( "127.0.0.1", "80", [] ); 1 },
+ 'getaddrinfo() with ARRAY hints dies' );
+
+# Ensure it doesn't segfault if args are missing
+
+( $err, @res ) = getaddrinfo();
+ok( defined $err, '$err defined for getaddrinfo()' );
+
+( $err, @res ) = getaddrinfo( "127.0.0.1" );
+ok( defined $err, '$err defined for getaddrinfo("127.0.0.1")' );
Added: vendor/perl/dist/cpan/Socket/t/getnameinfo.t
===================================================================
--- vendor/perl/dist/cpan/Socket/t/getnameinfo.t (rev 0)
+++ vendor/perl/dist/cpan/Socket/t/getnameinfo.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,42 @@
+use strict;
+use warnings;
+use Test::More tests => 14;
+
+use Socket qw(:addrinfo AF_INET pack_sockaddr_in inet_aton);
+
+my ( $err, $host, $service );
+
+( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST|NI_NUMERICSERV );
+cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST|NI_NUMERICSERV' );
+cmp_ok( $err, "eq", "", '$err eq "" for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST|NI_NUMERICSERV' );
+
+is( $host, "127.0.0.1", '$host is 127.0.0.1 for NH/NS' );
+is( $service, "80", '$service is 80 for NH/NS' );
+
+( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST|NI_NUMERICSERV, NIx_NOHOST );
+is( $host, undef, '$host is undef for NIx_NOHOST' );
+is( $service, "80", '$service is 80 for NS, NIx_NOHOST' );
+
+( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST|NI_NUMERICSERV, NIx_NOSERV );
+is( $host, "127.0.0.1", '$host is undef for NIx_NOSERV' );
+is( $service, undef, '$service is 80 for NS, NIx_NOSERV' );
+
+# Probably "localhost" but we'd better ask the system to be sure
+my $expect_host = gethostbyaddr( inet_aton( "127.0.0.1" ), AF_INET );
+defined $expect_host or $expect_host = "127.0.0.1";
+
+( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICSERV );
+cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICSERV' );
+
+is( $host, $expect_host, "\$host is $expect_host for NS" );
+is( $service, "80", '$service is 80 for NS' );
+
+# Probably "www" but we'd better ask the system to be sure
+my $expect_service = getservbyport( 80, "tcp" );
+defined $expect_service or $expect_service = "80";
+
+( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST );
+cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST' );
+
+is( $host, "127.0.0.1", '$host is 127.0.0.1 for NH' );
+is( $service, $expect_service, "\$service is $expect_service for NH" );
Added: vendor/perl/dist/cpan/Socket/t/ip_mreq.t
===================================================================
--- vendor/perl/dist/cpan/Socket/t/ip_mreq.t (rev 0)
+++ vendor/perl/dist/cpan/Socket/t/ip_mreq.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,41 @@
+use strict;
+use warnings;
+use Test::More;
+
+use Socket qw(
+ INADDR_ANY
+ pack_ip_mreq unpack_ip_mreq
+ pack_ip_mreq_source unpack_ip_mreq_source
+);
+
+# Check that pack/unpack_ip_mreq either croak with "Not implemented", or
+# roundtrip as identity
+
+my $packed;
+eval {
+ $packed = pack_ip_mreq "\xe0\0\0\1", INADDR_ANY;
+};
+if( !defined $packed ) {
+ plan skip_all => "No pack_ip_mreq" if $@ =~ m/ not implemented /;
+ die $@;
+}
+
+plan tests => 6;
+
+my @unpacked = unpack_ip_mreq $packed;
+
+is( $unpacked[0], "\xe0\0\0\1", 'unpack_ip_mreq multiaddr' );
+is( $unpacked[1], INADDR_ANY, 'unpack_ip_mreq interface' );
+
+is( (unpack_ip_mreq pack_ip_mreq "\xe0\0\0\1")[1], INADDR_ANY, 'pack_ip_mreq interface defaults to INADDR_ANY' );
+
+SKIP: {
+ my $mreq;
+ skip "No pack_ip_mreq_source", 3 unless defined eval { $mreq = pack_ip_mreq_source "\xe0\0\0\2", "\x0a\0\0\1", INADDR_ANY };
+
+ @unpacked = unpack_ip_mreq_source $mreq;
+
+ is( $unpacked[0], "\xe0\0\0\2", 'unpack_ip_mreq_source multiaddr' );
+ is( $unpacked[1], "\x0a\0\0\1", 'unpack_ip_mreq_source source' );
+ is( $unpacked[2], INADDR_ANY, 'unpack_ip_mreq_source interface' );
+}
Added: vendor/perl/dist/cpan/Socket/t/ipv6_mreq.t
===================================================================
--- vendor/perl/dist/cpan/Socket/t/ipv6_mreq.t (rev 0)
+++ vendor/perl/dist/cpan/Socket/t/ipv6_mreq.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,26 @@
+use strict;
+use warnings;
+use Test::More;
+
+use Socket qw(
+ pack_ipv6_mreq unpack_ipv6_mreq
+);
+
+# Check that pack/unpack_ipv6_mreq either croak with "Not implemented", or
+# roundtrip as identity
+
+my $packed;
+eval {
+ $packed = pack_ipv6_mreq "ANADDRESSIN16CHR", 123;
+};
+if( !defined $packed ) {
+ plan skip_all => "No pack_ipv6_mreq" if $@ =~ m/ not implemented /;
+ die $@;
+}
+
+plan tests => 2;
+
+my @unpacked = unpack_ipv6_mreq $packed;
+
+is( $unpacked[0], "ANADDRESSIN16CHR", 'unpack_ipv6_mreq multiaddr' );
+is( $unpacked[1], 123, 'unpack_ipv6_mreq ifindex' );
Added: vendor/perl/dist/cpan/Socket/t/sockaddr.t
===================================================================
--- vendor/perl/dist/cpan/Socket/t/sockaddr.t (rev 0)
+++ vendor/perl/dist/cpan/Socket/t/sockaddr.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,137 @@
+#!./perl
+
+use strict;
+use warnings;
+
+use Socket qw(
+ AF_INET
+ inet_ntoa inet_aton inet_ntop inet_pton
+ pack_sockaddr_in unpack_sockaddr_in sockaddr_in
+ sockaddr_family
+ sockaddr_un
+);
+use Test::More tests => 33;
+
+# inet_aton, inet_ntoa
+{
+ is(join(".", unpack("C*",inet_aton("10.20.30.40"))), "10.20.30.40", 'inet_aton returns packed bytes');
+
+ is(inet_ntoa(v10.20.30.40), "10.20.30.40", 'inet_ntoa from v-string');
+
+ is(inet_ntoa(inet_aton("10.20.30.40")), "10.20.30.40", 'inet_aton->inet_ntoa roundtrip');
+
+ local $@;
+ eval { inet_ntoa(v10.20.30.400) };
+ like($@, qr/^Wide character in Socket::inet_ntoa at/, 'inet_ntoa warns about wide characters');
+}
+
+# inet_ntop, inet_pton
+SKIP: {
+ skip "No inet_ntop", 5 unless defined eval { inet_pton(AF_INET, "10.20.30.40") };
+
+ is(join(".", unpack("C*",inet_pton(AF_INET, "10.20.30.40"))), "10.20.30.40", 'inet_pton AF_INET returns packed bytes');
+
+ is(inet_ntop(AF_INET, v10.20.30.40), "10.20.30.40", 'inet_ntop AF_INET from v-string');
+
+ is(inet_ntop(AF_INET, inet_pton(AF_INET, "10.20.30.40")), "10.20.30.40", 'inet_pton->inet_ntop AF_INET roundtrip');
+ is(inet_ntop(AF_INET, inet_aton("10.20.30.40")), "10.20.30.40", 'inet_aton->inet_ntop AF_INET roundtrip');
+
+ local $@;
+ eval { inet_ntop(AF_INET, v10.20.30.400) };
+ like($@, qr/^Wide character in Socket::inet_ntop at/, 'inet_ntop warns about wide characters');
+}
+
+SKIP: {
+ skip "No AF_INET6", 3 unless my $AF_INET6 = eval { Socket::AF_INET6() };
+ skip "No inet_ntop", 3 unless defined eval { inet_pton($AF_INET6, "2460::1") };
+
+ is(uc unpack("H*",inet_pton($AF_INET6, "2001:503:BA3E::2:30")), "20010503BA3E00000000000000020030",
+ 'inet_pton AF_INET6 returns packed bytes');
+
+ is(uc inet_ntop($AF_INET6, "\x20\x01\x05\x03\xBA\x3E\x00\x00\x00\x00\x00\x00\x00\x02\x00\x30"), "2001:503:BA3E::2:30",
+ 'inet_ntop AF_INET6 from octet string');
+
+ is(lc inet_ntop($AF_INET6, inet_pton($AF_INET6, "2001:503:BA3E::2:30")), "2001:503:ba3e::2:30",
+ 'inet_pton->inet_ntop AF_INET6 roundtrip');
+}
+
+# sockaddr_family
+{
+ local $@;
+ eval { sockaddr_family("") };
+ like($@, qr/^Bad arg length for Socket::sockaddr_family, length is 0, should be at least \d+/, 'sockaddr_family warns about argument length');
+}
+
+# pack_sockaddr_in, unpack_sockaddr_in
+# sockaddr_in
+{
+ my $sin = pack_sockaddr_in 100, inet_aton("10.20.30.40");
+ ok(defined $sin, 'pack_sockaddr_in defined');
+
+ is(sockaddr_family($sin), AF_INET, 'sockaddr_family of pack_sockaddr_in' );
+
+ is( (unpack_sockaddr_in($sin))[0] , 100, 'pack_sockaddr_in->unpack_sockaddr_in port');
+ is(inet_ntoa((unpack_sockaddr_in($sin))[1]), "10.20.30.40", 'pack_sockaddr_in->unpack_sockaddr_in addr');
+
+ is(inet_ntoa(scalar unpack_sockaddr_in($sin)), "10.20.30.40", 'unpack_sockaddr_in in scalar context yields addr');
+
+ is_deeply( [ sockaddr_in($sin) ], [ unpack_sockaddr_in($sin) ],
+ 'sockaddr_in in list context unpacks' );
+
+ is(sockaddr_family(scalar sockaddr_in(200,v10.30.50.70)), AF_INET,
+ 'sockaddr_in in scalar context packs');
+}
+
+# pack_sockaddr_in6, unpack_sockaddr_in6
+# sockaddr_in6
+SKIP: {
+ skip "No AF_INET6", 9 unless my $AF_INET6 = eval { Socket::AF_INET6() };
+ skip "Cannot pack_sockaddr_in6()", 9 unless my $sin6 = eval { Socket::pack_sockaddr_in6(0x1234, "0123456789abcdef", 0, 89) };
+
+ ok(defined $sin6, 'pack_sockaddr_in6 defined');
+
+ is(sockaddr_family($sin6), $AF_INET6, 'sockaddr_family of pack_sockaddr_in6');
+
+ is((Socket::unpack_sockaddr_in6($sin6))[0], 0x1234, 'pack_sockaddr_in6->unpack_sockaddr_in6 port');
+ is((Socket::unpack_sockaddr_in6($sin6))[1], "0123456789abcdef", 'pack_sockaddr_in6->unpack_sockaddr_in6 addr');
+ is((Socket::unpack_sockaddr_in6($sin6))[2], 0, 'pack_sockaddr_in6->unpack_sockaddr_in6 scope_id');
+ is((Socket::unpack_sockaddr_in6($sin6))[3], 89, 'pack_sockaddr_in6->unpack_sockaddr_in6 flowinfo');
+
+ is(scalar Socket::unpack_sockaddr_in6($sin6), "0123456789abcdef", 'unpack_sockaddr_in6 in scalar context yields addr');
+
+ is_deeply( [ Socket::sockaddr_in6($sin6) ], [ Socket::unpack_sockaddr_in6($sin6) ],
+ 'sockaddr_in6 in list context unpacks' );
+
+ is(sockaddr_family(scalar Socket::sockaddr_in6(0x1357, "02468ace13579bdf")), $AF_INET6,
+ 'sockaddr_in6 in scalar context packs' );
+}
+
+# sockaddr_un
+SKIP: {
+ # see if we can handle abstract sockets
+ skip "Abstract AF_UNIX paths unsupported", 2 unless $^O eq "linux";
+
+ my $test_abstract_socket = chr(0) . '/org/perl/hello'. chr(0) . 'world';
+ my $addr = sockaddr_un ($test_abstract_socket);
+ my ($path) = sockaddr_un ($addr);
+ is($path, $test_abstract_socket, 'sockaddr_un can handle abstract AF_UNIX paths');
+
+ # see if we calculate the address structure length correctly
+ is(length ($test_abstract_socket) + 2, length $addr, 'sockaddr_un abstract address length');
+}
+
+# warnings
+{
+ my $w = 0;
+ local $SIG{__WARN__} = sub {
+ ++ $w if $_[0] =~ /^6-ARG sockaddr_in call is deprecated/ ;
+ };
+
+ no warnings 'Socket';
+ sockaddr_in(1,2,3,4,5,6) ;
+ is($w, 0, "sockaddr_in deprecated form doesn't warn without lexical warnings");
+
+ use warnings 'Socket';
+ sockaddr_in(1,2,3,4,5,6) ;
+ is($w, 1, "sockaddr_in deprecated form warns with lexical warnings");
+}
Added: vendor/perl/dist/cpan/Socket/t/socketpair.t
===================================================================
--- vendor/perl/dist/cpan/Socket/t/socketpair.t (rev 0)
+++ vendor/perl/dist/cpan/Socket/t/socketpair.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,244 @@
+#!./perl -w
+
+my $child;
+my $can_fork;
+my $has_perlio;
+
+BEGIN {
+ require Config; import Config;
+ $can_fork = $Config{'d_fork'} || $Config{'d_pseudofork'};
+
+ if ($^O eq "hpux" or $Config{'extensions'} !~ /\bSocket\b/ &&
+ !(($^O eq 'VMS') && $Config{d_socket})) {
+ print "1..0\n";
+ exit 0;
+ }
+}
+
+{
+ # This was in the BEGIN block, but since Test::More 0.47 added support to
+ # detect forking, we don't need to fork before Test::More initialises.
+
+ # Too many things in this test will hang forever if something is wrong,
+ # so we need a self destruct timer. And IO can hang despite an alarm.
+
+ if( $can_fork) {
+ my $parent = $$;
+ $child = fork;
+ die "Fork failed" unless defined $child;
+ if (!$child) {
+ $SIG{INT} = sub {exit 0}; # You have 60 seconds. Your time starts now.
+ my $must_finish_by = time + 60;
+ my $remaining;
+ while (($remaining = $must_finish_by - time) > 0) {
+ sleep $remaining;
+ }
+ warn "Something unexpectedly hung during testing";
+ kill "INT", $parent or die "Kill failed: $!";
+ exit 1;
+ }
+ }
+ unless ($has_perlio = PerlIO::Layer->can("find") && PerlIO::Layer->find('perlio')) {
+ print <<EOF;
+# Since you don't have perlio you might get failures with UTF-8 locales.
+EOF
+ }
+}
+
+use Socket;
+use Test::More;
+use strict;
+use warnings;
+use Errno;
+
+my $skip_reason;
+
+if( !$Config{d_alarm} ) {
+ plan skip_all => "alarm() not implemented on this platform";
+} elsif( !$can_fork ) {
+ plan skip_all => "fork() not implemented on this platform";
+} else {
+ # This should fail but not die if there is real socketpair
+ eval {socketpair LEFT, RIGHT, -1, -1, -1};
+ if ($@ =~ /^Unsupported socket function "socketpair" called/ ||
+ $! =~ /^The operation requested is not supported./) { # Stratus VOS
+ plan skip_all => 'No socketpair (real or emulated)';
+ } else {
+ eval {AF_UNIX};
+ if ($@ =~ /^Your vendor has not defined Socket macro AF_UNIX/) {
+ plan skip_all => 'No AF_UNIX';
+ } else {
+ plan tests => 45;
+ }
+ }
+}
+
+# But we'll install an alarm handler in case any of the races below fail.
+$SIG{ALRM} = sub {die "Unexpected alarm during testing"};
+
+ok (socketpair (LEFT, RIGHT, AF_UNIX, SOCK_STREAM, PF_UNSPEC),
+ "socketpair (LEFT, RIGHT, AF_UNIX, SOCK_STREAM, PF_UNSPEC)")
+ or print "# \$\! = $!\n";
+
+if ($has_perlio) {
+ binmode(LEFT, ":bytes");
+ binmode(RIGHT, ":bytes");
+}
+
+my @left = ("hello ", "world\n");
+my @right = ("perl ", "rules!"); # Not like I'm trying to bias any survey here.
+
+foreach (@left) {
+ # is (syswrite (LEFT, $_), length $_, "write " . _qq ($_) . " to left");
+ is (syswrite (LEFT, $_), length $_, "syswrite to left");
+}
+foreach (@right) {
+ # is (syswrite (RIGHT, $_), length $_, "write " . _qq ($_) . " to right");
+ is (syswrite (RIGHT, $_), length $_, "syswrite to right");
+}
+
+# stream socket, so our writes will become joined:
+my ($buffer, $expect);
+$expect = join '', @right;
+undef $buffer;
+is (read (LEFT, $buffer, length $expect), length $expect, "read on left");
+is ($buffer, $expect, "content what we expected?");
+$expect = join '', @left;
+undef $buffer;
+is (read (RIGHT, $buffer, length $expect), length $expect, "read on right");
+is ($buffer, $expect, "content what we expected?");
+
+ok (shutdown(LEFT, SHUT_WR), "shutdown left for writing");
+# This will hang forever if eof is buggy, and alarm doesn't interrupt system
+# Calls. Hence the child process minder.
+SKIP: {
+ skip "SCO Unixware / OSR have a bug with shutdown",2 if $^O =~ /^(?:svr|sco)/;
+ local $SIG{ALRM} = sub { warn "EOF on right took over 3 seconds" };
+ local $TODO = "Known problems with unix sockets on $^O"
+ if $^O eq 'hpux' || $^O eq 'super-ux';
+ alarm 3;
+ $! = 0;
+ ok (eof RIGHT, "right is at EOF");
+ local $TODO = "Known problems with unix sockets on $^O"
+ if $^O eq 'unicos' || $^O eq 'unicosmk';
+ is ($!, '', 'and $! should report no error');
+ alarm 60;
+}
+
+my $err = $!;
+$SIG{PIPE} = 'IGNORE';
+{
+ local $SIG{ALRM} =
+ sub { warn "syswrite to left didn't fail within 3 seconds" };
+ alarm 3;
+ # Split the system call from the is() - is() does IO so
+ # (say) a flush may do a seek which on a pipe may disturb errno
+ my $ans = syswrite (LEFT, "void");
+ $err = $!;
+ is ($ans, undef, "syswrite to shutdown left should fail");
+ alarm 60;
+}
+{
+ # This may need skipping on some OSes - restoring value saved above
+ # should help
+ $! = $err;
+ ok (($!{EPIPE} or $!{ESHUTDOWN}), '$! should be EPIPE or ESHUTDOWN')
+ or printf "\$\!=%d(%s)\n", $err, $err;
+}
+
+my @gripping = (chr 255, chr 127);
+foreach (@gripping) {
+ is (syswrite (RIGHT, $_), length $_, "syswrite to right");
+}
+
+ok (!eof LEFT, "left is not at EOF");
+
+$expect = join '', @gripping;
+undef $buffer;
+is (read (LEFT, $buffer, length $expect), length $expect, "read on left");
+is ($buffer, $expect, "content what we expected?");
+
+ok (close LEFT, "close left");
+ok (close RIGHT, "close right");
+
+
+# And now datagrams
+# I suspect we also need a self destruct time-bomb for these, as I don't see any
+# guarantee that the stack won't drop a UDP packet, even if it is for localhost.
+
+SKIP: {
+ skip "No usable SOCK_DGRAM for socketpair", 24 if ($^O =~ /^(MSWin32|os2)\z/);
+ skip "alarm doesn't interrupt I/O on this Perl", 24 if "$]" < 5.008;
+ local $TODO = "socketpair not supported on $^O" if $^O eq 'nto';
+
+ ok (socketpair (LEFT, RIGHT, AF_UNIX, SOCK_DGRAM, PF_UNSPEC),
+ "socketpair (LEFT, RIGHT, AF_UNIX, SOCK_DGRAM, PF_UNSPEC)")
+ or print "# \$\! = $!\n";
+
+ if ($has_perlio) {
+ binmode(LEFT, ":bytes");
+ binmode(RIGHT, ":bytes");
+ }
+
+ foreach (@left) {
+ # is (syswrite (LEFT, $_), length $_, "write " . _qq ($_) . " to left");
+ is (syswrite (LEFT, $_), length $_, "syswrite to left");
+ }
+ foreach (@right) {
+ # is (syswrite (RIGHT, $_), length $_, "write " . _qq ($_) . " to right");
+ is (syswrite (RIGHT, $_), length $_, "syswrite to right");
+ }
+
+ # stream socket, so our writes will become joined:
+ my ($total);
+ $total = join '', @right;
+ foreach $expect (@right) {
+ undef $buffer;
+ is (sysread (LEFT, $buffer, length $total), length $expect, "read on left");
+ is ($buffer, $expect, "content what we expected?");
+ }
+ $total = join '', @left;
+ foreach $expect (@left) {
+ undef $buffer;
+ is (sysread (RIGHT, $buffer, length $total), length $expect, "read on right");
+ is ($buffer, $expect, "content what we expected?");
+ }
+
+ ok (shutdown(LEFT, 1), "shutdown left for writing");
+
+ # eof uses buffering. eof is indicated by a sysread of zero.
+ # but for a datagram socket there's no way it can know nothing will ever be
+ # sent
+ SKIP: {
+ skip "$^O does length 0 udp reads", 2 if ($^O eq 'os390');
+
+ my $alarmed = 0;
+ local $SIG{ALRM} = sub { $alarmed = 1; };
+ print "# Approximate forever as 3 seconds. Wait 'forever'...\n";
+ alarm 3;
+ undef $buffer;
+ is (sysread (RIGHT, $buffer, 1), undef,
+ "read on right should be interrupted");
+ is ($alarmed, 1, "alarm should have fired");
+ }
+
+ alarm 30;
+
+ foreach (@gripping) {
+ is (syswrite (RIGHT, $_), length $_, "syswrite to right");
+ }
+
+ $total = join '', @gripping;
+ foreach $expect (@gripping) {
+ undef $buffer;
+ is (sysread (LEFT, $buffer, length $total), length $expect, "read on left");
+ is ($buffer, $expect, "content what we expected?");
+ }
+
+ ok (close LEFT, "close left");
+ ok (close RIGHT, "close right");
+
+} # end of DGRAM SKIP
+
+kill "INT", $child or warn "Failed to kill child process $child: $!";
+exit 0;
Added: vendor/perl/dist/cpan/Socket/typemap
===================================================================
--- vendor/perl/dist/cpan/Socket/typemap (rev 0)
+++ vendor/perl/dist/cpan/Socket/typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+TYPEMAP
+const char * T_PV
Added: vendor/perl/dist/cpan/Sys-Syslog/t/facilities-routing.t
===================================================================
--- vendor/perl/dist/cpan/Sys-Syslog/t/facilities-routing.t (rev 0)
+++ vendor/perl/dist/cpan/Sys-Syslog/t/facilities-routing.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,143 @@
+#!perl -w
+# --------------------------------------------------------------------
+# Try to send messages with all combinations of facilities and levels
+# to a POE syslog server.
+# --------------------------------------------------------------------
+use strict;
+use warnings;
+
+use Test::More;
+use Socket;
+use Sys::Syslog 0.30 qw< :standard :extended :macros >;
+
+
+# check than POE is available
+plan skip_all => "POE is not available" unless eval "use POE; 1";
+
+# check than POE::Component::Server::Syslog is available and recent enough
+plan skip_all => "POE::Component::Server::Syslog is not available"
+ unless eval "use POE::Component::Server::Syslog; 1";
+plan skip_all => "POE::Component::Server::Syslog is too old"
+ if POE::Component::Server::Syslog->VERSION < 1.14;
+
+
+my $host = "127.0.0.1";
+my $port = 5140;
+my $proto = "udp";
+my $ident = "pocosyslog";
+
+my @levels = qw< emerg alert crit err warning notice info debug >;
+my @facilities = qw<
+ auth cron daemon ftp kern lpr mail news syslog user uucp
+ local0 local1 local2 local3 local4 local5 local6 local7
+>;
+
+my %received;
+my $parent_pid = $$;
+my $child_pid = fork();
+
+if ($child_pid) {
+ # parent: setup a syslog server
+ POE::Component::Server::Syslog->spawn(
+ Alias => 'syslog',
+ Type => $proto,
+ BindAddress => $host,
+ BindPort => $port,
+
+ InputState => \&client_input,
+ ErrorState => \&client_error,
+ );
+
+ # signal handlers
+ POE::Kernel->sig_child($child_pid, sub { wait() });
+ $SIG{TERM} = sub {
+ POE::Kernel->post(syslog => "shutdown");
+ POE::Kernel->stop;
+ };
+
+ # run everything
+ plan tests => @facilities * @levels * 2;
+ POE::Kernel->run;
+
+ # check if some messages are missing
+ my @miss = grep { $received{$_} < 2 } keys %received;
+ diag "@miss" if @miss;
+}
+else {
+ # child: send messages to the syslog server
+ sleep 2;
+ setlogsock({ host => $host, type => $proto, port => $port });
+
+ # first way, set the facility each time with openlog()
+ for my $facility (@facilities) {
+ openlog($ident, "ndelay,pid", $facility);
+
+ for my $level (@levels) {
+ eval { syslog($level => "<$facility\:$level>") }
+ or warn "error: syslog($level => '<$facility\:$level>'): $@";
+ }
+ }
+
+ # second way, set the facility once with openlog(), then set
+ # the message facility with syslog()
+ openlog($ident, "ndelay,pid", "user");
+
+ for my $facility (@facilities) {
+ for my $level (@levels) {
+ eval { syslog("$facility.$level" => "<$facility\:$level>") }
+ or warn "error: syslog('$facility.$level' => '<$facility\:$level>'): $@";
+ }
+ }
+
+ sleep 2;
+
+ # send SIGTERM to the parent
+ kill 15 => $parent_pid;
+}
+
+
+sub client_input {
+ my $message = $_[&ARG0];
+
+ # extract the sent facility and level from the message text
+ my ($sent_facility, $sent_level) = $message->{msg} =~ /<(\w+):(\w+)>/;
+ $received{"$sent_facility\:$sent_level"}++;
+
+ # resolve their numeric values
+ my ($sent_fac_num, $sent_lev_num);
+ {
+ no strict "refs";
+ $sent_fac_num = eval { my $n = uc "LOG_$sent_facility"; &$n } >> 3;
+ $sent_lev_num = eval { my $n = uc "LOG_$sent_level"; &$n };
+ }
+
+ is_deeply(
+ { # received message
+ facility => $message->{facility},
+ severity => $message->{severity},
+ },
+ { # sent message
+ facility => $sent_fac_num,
+ severity => $sent_lev_num,
+ },
+ "sent<facility=$sent_facility($sent_fac_num), level=$sent_level" .
+ "($sent_lev_num)> - rcvd<facility=$message->{facility}, " .
+ "level=$message->{severity}>"
+ );
+}
+
+
+sub client_error {
+ my $message = $_[&ARG0];
+
+ require Data::Dumper;
+ $Data::Dumper::Indent = 0; $Data::Dumper::Indent = 0;
+ $Data::Dumper::Sortkeys = 1; $Data::Dumper::Sortkeys = 1;
+ fail "checking syslog message";
+ diag "[client_error] message = ", Data::Dumper::Dumper($message);
+
+ kill 15 => $child_pid;
+ POE::Kernel->post(syslog => "shutdown");
+ POE::Kernel->stop;
+}
+
Added: vendor/perl/dist/cpan/Term-ANSIColor/t/aliases-func.t
===================================================================
--- vendor/perl/dist/cpan/Term-ANSIColor/t/aliases-func.t (rev 0)
+++ vendor/perl/dist/cpan/Term-ANSIColor/t/aliases-func.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,88 @@
+#!/usr/bin/perl
+#
+# Test setting color aliases via the function interface.
+#
+# Copyright 2012 Russ Allbery <rra at stanford.edu>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+use warnings;
+
+use Test::More tests => 23;
+
+# Load the module.
+BEGIN {
+ delete $ENV{ANSI_COLORS_ALIASES};
+ delete $ENV{ANSI_COLORS_DISABLED};
+ use_ok('Term::ANSIColor', qw(color colored colorvalid uncolor coloralias));
+}
+
+# Confirm our test alias doesn't exist.
+my $output = eval { color('alert') };
+ok(!$output, 'alert color not recognized');
+like(
+ $@,
+ qr{ \A Invalid [ ] attribute [ ] name [ ] alert [ ] at [ ] }xms,
+ '...with the right error'
+);
+
+# Basic alias functionality.
+is(coloralias('alert', 'red'), 'red', 'coloralias works and returns color');
+is(color('alert'), color('red'), 'alert now works as a color');
+is(colored('test', 'alert'), "\e[31mtest\e[0m", '..and colored works');
+ok(colorvalid('alert'), '...and alert is now a valid color');
+is(coloralias('alert'), 'red', 'coloralias with one arg returns value');
+
+# The alias can be changed.
+is(coloralias('alert', 'green'), 'green', 'changing the alias works');
+is(coloralias('alert'), 'green', '...and changed the mapping');
+is(color('alert'), color('green'), '...and now returns its new value');
+
+# uncolor ignores aliases.
+is_deeply([uncolor("\e[32m")], ['green'], 'uncolor ignores aliases');
+
+# Asking for the value of an unknown alias returns undef.
+is(coloralias('warning'), undef, 'coloralias on unknown alias returns undef');
+
+# Invalid alias names.
+$output = eval { coloralias('foo;bar', 'green') };
+ok(!$output, 'invalid alias name rejected');
+like(
+ $@,
+ qr{ \A Invalid [ ] alias [ ] name [ ] "foo;bar" [ ] at [ ] }xms,
+ '...with the right error'
+);
+$output = eval { coloralias(q{}, 'green') };
+ok(!$output, 'empty alias name rejected');
+like(
+ $@,
+ qr{ \A Invalid [ ] alias [ ] name [ ] "" [ ] at [ ] }xms,
+ '...with the right error'
+);
+
+# Aliasing an existing color.
+$output = eval { coloralias('red', 'green') };
+ok(!$output, 'aliasing an existing color rejected');
+like(
+ $@,
+ qr{ \A Cannot [ ] alias [ ] standard [ ] color [ ] "red" [ ] at [ ] }xms,
+ '...with the right error'
+);
+
+# Aliasing to a color that doesn't exist, or to another alias.
+$output = eval { coloralias('warning', 'chartreuse') };
+ok(!$output, 'aliasing to an unknown color rejected');
+like(
+ $@,
+ qr{ \A Invalid [ ] attribute [ ] name [ ] "chartreuse" [ ] at [ ] }xms,
+ '...with the right error'
+);
+$output = eval { coloralias('warning', 'alert') };
+ok(!$output, 'aliasing to an alias rejected');
+like(
+ $@,
+ qr{ \A Invalid [ ] attribute [ ] name [ ] "alert" [ ] at [ ] }xms,
+ '...with the right error'
+);
Added: vendor/perl/dist/cpan/Term-ANSIColor/t/basic256.t
===================================================================
--- vendor/perl/dist/cpan/Term-ANSIColor/t/basic256.t (rev 0)
+++ vendor/perl/dist/cpan/Term-ANSIColor/t/basic256.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,129 @@
+#!/usr/bin/perl
+#
+# Tests for 256-color support.
+#
+# Copyright 2012 Kurt Starsinic <kstarsinic at gmail.com>
+# Copyright 2012, 2013 Russ Allbery <rra at stanford.edu>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+use warnings;
+
+use Test::More tests => 92;
+
+# Load the module.
+BEGIN {
+ delete $ENV{ANSI_COLORS_ALIASES};
+ delete $ENV{ANSI_COLORS_DISABLED};
+ use_ok('Term::ANSIColor', qw(:constants256 color uncolor colorvalid));
+}
+
+# Test basic 256-color codes.
+is(color('ansi0'), "\e[38;5;0m", 'ANSI 0');
+is(color('ansi15'), "\e[38;5;15m", 'ANSI 15');
+is(color('rgb000'), "\e[38;5;16m", 'RGB 000');
+is(color('rgb555'), "\e[38;5;231m", 'RGB 555');
+is(color('grey0'), "\e[38;5;232m", 'Grey 0');
+is(color('grey23'), "\e[38;5;255m", 'Grey 23');
+
+# Errors at boundary cases.
+for my $color (qw(ansi16 rgb600 rgb060 rgb006 rgb666 rgb999 rgb0000 grey24)) {
+ my $output = eval { color($color) };
+ is($output, undef, 'color on unknown color name fails');
+ like(
+ $@,
+ qr{ \A Invalid [ ] attribute [ ] name [ ] \Q$color\E [ ] at [ ] }xms,
+ '...with the right error'
+ );
+ ok(!colorvalid($color), '...and colorvalid says it is invalid');
+}
+
+# Check that various 256-color codes are valid.
+for my $color (qw(ansi0 ansi15 rgb000 rgb555 grey0 grey23)) {
+ ok(colorvalid($color), "Color $color is valid");
+}
+
+# Check uncolor with 256-color codes.
+is_deeply([uncolor('38;5;0')], ['ansi0'], 'uncolor of ansi0');
+is_deeply([uncolor("\e[38;5;231m")], ['rgb555'], 'uncolor of rgb555');
+is_deeply([uncolor("\e[48;05;001m")], ['on_ansi1'], 'uncolor with leading 0s');
+
+# An invalid 256-color code should report an error on the part that makes it
+# invalid. Check truncated codes (should report on the 38 or 48), codes with
+# an invalid second part (likewise), and codes with an invalid third part
+# (should report the complete code).
+#
+# This is a hash of test escape sequences to the invalid sequence that should
+# be reported.
+my %uncolor_tests = (
+ "\e[38m" => 38,
+ "\e[38;5m" => 38,
+ "\e[38;5;256m" => '38;5;256',
+ "\e[38;5;777m" => '38;5;777',
+ "\e[48m" => 48,
+ "\e[48;5m" => 48,
+ "\e[48;5;256m" => '48;5;256',
+ "\e[48;5;777m" => '48;5;777',
+);
+while (my ($escape, $invalid) = each %uncolor_tests) {
+ my $output = eval { uncolor($escape) };
+ is($output, undef, "uncolor on unknown color code \Q$escape\E fails");
+ like(
+ $@,
+ qr{ \A No [ ] name [ ] for [ ] escape [ ] sequence [ ] \Q$invalid\E
+ [ ] at [ ] }xms,
+ '...with the right error'
+ );
+}
+
+# Test all the variations of a few different constants.
+is((ANSI0 't'), "\e[38;5;0mt", 'Basic constant works for ANSI0');
+is((ANSI15 't'), "\e[38;5;15mt", '...and for ANSI15');
+is((RGB000 't'), "\e[38;5;16mt", '...and for RGB000');
+is((RGB555 't'), "\e[38;5;231mt", '...and for RGB555');
+is((GREY0 't'), "\e[38;5;232mt", '...and for GREY0');
+is((GREY23 't'), "\e[38;5;255mt", '...and for GREY23');
+
+# Do the same for disabled colors.
+local $ENV{ANSI_COLORS_DISABLED} = 1;
+is(ANSI0, q{}, 'ANSI_COLORS_DISABLED works for ANSI0');
+is(ANSI15, q{}, '...and for ANSI15');
+is(RGB000, q{}, '...and for RGB000');
+is(RGB555, q{}, '...and for RGB555');
+is(GREY0, q{}, '...and for GREY0');
+is(GREY23, q{}, '...and for GREY23');
+delete $ENV{ANSI_COLORS_DISABLED};
+
+# Do the same for AUTORESET.
+$Term::ANSIColor::AUTORESET = 1;
+is((ANSI0 't'), "\e[38;5;0mt\e[0m", 'AUTORESET works for ANSI0');
+is((ANSI15 't'), "\e[38;5;15mt\e[0m", '...and for ANSI15');
+is((RGB000 't'), "\e[38;5;16mt\e[0m", '...and for RGB000');
+is((RGB555 't'), "\e[38;5;231mt\e[0m", '...and for RGB555');
+is((GREY0 't'), "\e[38;5;232mt\e[0m", '...and for GREY0');
+is((GREY23 't'), "\e[38;5;255mt\e[0m", '...and for GREY23');
+is((ANSI0), "\e[38;5;0m", 'AUTORESET without text for ANSI0');
+is((ANSI15), "\e[38;5;15m", '...and for ANSI15');
+is((RGB000), "\e[38;5;16m", '...and for RGB000');
+is((RGB555), "\e[38;5;231m", '...and for RGB555');
+is((GREY0), "\e[38;5;232m", '...and for GREY0');
+is((GREY23), "\e[38;5;255m", '...and for GREY23');
+$Term::ANSIColor::AUTORESET = 0;
+
+# Do the same for AUTOLOCAL.
+$Term::ANSIColor::AUTOLOCAL = 1;
+is((ANSI0 't'), "\e[38;5;0mt\e[0m", 'AUTOLOCAL works for ANSI0');
+is((ANSI15 't'), "\e[38;5;15mt\e[0m", '...and for ANSI15');
+is((RGB000 't'), "\e[38;5;16mt\e[0m", '...and for RGB000');
+is((RGB555 't'), "\e[38;5;231mt\e[0m", '...and for RGB555');
+is((GREY0 't'), "\e[38;5;232mt\e[0m", '...and for GREY0');
+is((GREY23 't'), "\e[38;5;255mt\e[0m", '...and for GREY23');
+is((ANSI0), "\e[38;5;0m", 'AUTOLOCAL without text for ANSI0');
+is((ANSI15), "\e[38;5;15m", '...and for ANSI15');
+is((RGB000), "\e[38;5;16m", '...and for RGB000');
+is((RGB555), "\e[38;5;231m", '...and for RGB555');
+is((GREY0), "\e[38;5;232m", '...and for GREY0');
+is((GREY23), "\e[38;5;255m", '...and for GREY23');
+$Term::ANSIColor::AUTOLOCAL = 0;
Added: vendor/perl/dist/cpan/Term-ANSIColor/t/eval.t
===================================================================
--- vendor/perl/dist/cpan/Term-ANSIColor/t/eval.t (rev 0)
+++ vendor/perl/dist/cpan/Term-ANSIColor/t/eval.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+#
+# Test suite for $@ preservation with constants.
+#
+# Earlier versions of Term::ANSIColor would clobber $@ during AUTOLOAD
+# processing and lose its value or leak $@ values to the calling program.
+# This is a regression test to ensure that this problem doesn't return.
+#
+# Copyright 2012 Russ Allbery <rra at stanford.edu>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+
+# We refer to $@ in the test descriptions.
+## no critic (ValuesAndExpressions::RequireInterpolationOfMetachars)
+
+# Load the module.
+BEGIN {
+ delete $ENV{ANSI_COLORS_ALIASES};
+ delete $ENV{ANSI_COLORS_DISABLED};
+ use_ok('Term::ANSIColor', qw(:constants));
+}
+
+# Ensure that using a constant doesn't leak anything in $@.
+is((BOLD 'test'), "\e[1mtest", 'BOLD works');
+is($@, q{}, '... and $@ is empty');
+
+# Store something in $@ and ensure it doesn't get clobbered.
+## no critic (BuiltinFunctions::ProhibitStringyEval)
+## no critic (ErrorHandling::RequireCheckingReturnValueOfEval)
+eval 'sub { syntax';
+is((BLINK 'test'), "\e[5mtest", 'BLINK works after eval failure');
+isnt($@, q{}, '... and $@ still contains something useful');
Added: vendor/perl/dist/cpan/Term-ANSIColor/t/stringify.t
===================================================================
--- vendor/perl/dist/cpan/Term-ANSIColor/t/stringify.t (rev 0)
+++ vendor/perl/dist/cpan/Term-ANSIColor/t/stringify.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+#
+# Test suite for stringify interaction.
+#
+# Copyright 2011 Revilo Reegiles
+# Copyright 2011 Russ Allbery <rra at stanford.edu>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+use warnings;
+
+use Test::More tests => 6;
+
+# Create a dummy class that implements stringification.
+## no critic (Modules::ProhibitMultiplePackages)
+package Test::Stringify;
+use overload '""' => 'stringify';
+sub new { return bless {}, 'Test::Stringify' }
+sub stringify { return "Foo Bar\n" }
+
+# Back to the main package.
+package main;
+
+# Load the module.
+BEGIN {
+ delete $ENV{ANSI_COLORS_ALIASES};
+ delete $ENV{ANSI_COLORS_DISABLED};
+ use_ok('Term::ANSIColor', qw(colored));
+}
+
+# Some basic tests of colored without stringification.
+my $result = colored(['blue', 'bold'], 'testing');
+is($result, "\e[34;1mtesting\e[0m", 'colored with an array reference');
+$result = colored("ok\n", 'bold blue');
+is($result, "\e[1;34mok\n\e[0m", 'colored with a following string');
+
+# Create a stringifiable object and repeat the tests.
+my $test = Test::Stringify->new;
+$result = colored($test . q{}, 'bold blue');
+is($result, "\e[1;34mFoo Bar\n\e[0m", 'colored with forced stringification');
+$result = colored($test, 'bold blue');
+is($result, "\e[1;34mFoo Bar\n\e[0m", 'colored with a non-array reference');
+
+# Create a hash reference and try stringifying it.
+my %foo = (foo => 'bar');
+$result = colored(\%foo, 'bold blue');
+like(
+ $result,
+ qr{ \e\[1;34m HASH\(.*\) \e\[0m }xms,
+ 'colored with a hash reference'
+);
Added: vendor/perl/dist/cpan/Term-ANSIColor/t/taint.t
===================================================================
--- vendor/perl/dist/cpan/Term-ANSIColor/t/taint.t (rev 0)
+++ vendor/perl/dist/cpan/Term-ANSIColor/t/taint.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,39 @@
+#!/usr/bin/perl -T
+#
+# Check that Term::ANSIColor untaints generated constants.
+#
+# It's possible that the name of the constant function that we're calling
+# could be tained (such as by loading the name of the constant function from
+# an environment variable). Term::ANSIColor does the work to untaint it; be
+# sure that the taint flag is properly cleared.
+#
+# Copyright 2012 Russ Allbery <rra at stanford.edu>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+
+# Load the module.
+BEGIN {
+ delete $ENV{ANSI_COLORS_ALIASES};
+ delete $ENV{ANSI_COLORS_DISABLED};
+ use_ok('Term::ANSIColor', qw(:pushpop));
+}
+
+# Generate a tainted constant name. PATH is always tainted, and tainting is
+# sticky, so we can prepend the name to whatever PATH holds and then chop it
+# off again.
+my $constant = substr 'BOLD' . $ENV{PATH}, 0, length 'BOLD';
+
+# Using that as a constant should now work without any tainting problems.
+## no critic (TestingAndDebugging::ProhibitNoStrict)
+{
+ no strict 'refs';
+ is(&{$constant}(), "\e[1m", 'Constant subs are not tainted');
+ is(BOLD(), "\e[1m", '...and we can call the sub again');
+ ok(defined(&Term::ANSIColor::BOLD), '...and it is now defined');
+}
Added: vendor/perl/dist/cpan/Test-Harness/t/compat/env_opts.t
===================================================================
--- vendor/perl/dist/cpan/Test-Harness/t/compat/env_opts.t (rev 0)
+++ vendor/perl/dist/cpan/Test-Harness/t/compat/env_opts.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Test::More tests => 12;
+
+use Test::Harness;
+
+sub _has_module {
+ my $module = shift;
+ eval "use $module";
+ return $@ ? 0 : 1;
+}
+
+{
+
+ # Should add a fake home dir? to test the rc stuff..
+ local $ENV{HARNESS_OPTIONS} = 'j4:c';
+
+ ok my $harness = Test::Harness::_new_harness, 'made harness';
+ is( $harness->color, 1, "set color correctly" );
+ is( $harness->jobs, 4, "set jobs correctly" );
+}
+SKIP: {
+ skip 'Can\'t locate object method "color" via package "TAP::Formatter::HTML" (RT 82738)',4;
+ skip "requires TAP::Formatter::HTML", 4
+ unless _has_module('TAP::Formatter::HTML');
+
+ local $ENV{HARNESS_OPTIONS} = 'j4:c:fTAP-Formatter-HTML';
+
+ ok my $harness = Test::Harness::_new_harness, 'made harness';
+ is( $harness->color, 1, "set color correctly" );
+ is( $harness->jobs, 4, "set jobs correctly" );
+ is( $harness->formatter_class, "TAP::Formatter::HTML",
+ "correct formatter" );
+
+}
+SKIP: {
+ skip "requires TAP::Harness::Archive", 5
+ unless _has_module('TAP::Harness::Archive');
+
+ # Test archive
+ local $ENV{HARNESS_OPTIONS} = 'j4:c:a/archive.tgz';
+
+ ok my $harness = Test::Harness::_new_harness, 'made harness';
+ is( $harness->color, 1, "set color correctly" );
+ is( $harness->jobs, 4, "set jobs correctly" );
+ isa_ok( $harness, "TAP::Harness::Archive", "correct harness subclass" );
+
+ # XXX: this is nasty :(
+ is( $harness->{__archive_file}, "/archive.tgz", "correct archive found" );
+
+}
+
Added: vendor/perl/dist/cpan/Test-Harness/t/nowarn.t
===================================================================
--- vendor/perl/dist/cpan/Test-Harness/t/nowarn.t (rev 0)
+++ vendor/perl/dist/cpan/Test-Harness/t/nowarn.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
+#!perl
+
+use Test::More tests => 1;
+
+# Make sure that warnings are only enabled if we enable them
+# specifically.
+ok !$^W, 'warnings disabled';
+
+# vim:ts=2:sw=2:et:ft=perl
+
Added: vendor/perl/dist/cpan/Text-Tabs/t/Tabs-ElCid.t
===================================================================
--- vendor/perl/dist/cpan/Text-Tabs/t/Tabs-ElCid.t (rev 0)
+++ vendor/perl/dist/cpan/Text-Tabs/t/Tabs-ElCid.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,177 @@
+#!perl
+
+BEGIN {
+ if ($] <= 5.010) {
+ print "1..0 # skip this test requires perl 5.010 or greater\n";
+ exit 0;
+ }
+}
+
+use strict;
+use warnings "FATAL" => "all";
+use Text::Tabs;
+
+require bytes;
+
+our $Errors = 0;
+
+our @DATA = (
+ [ # DATALINE #0
+ sub { die "there is no line 0" }
+ ],
+ { # DATALINE #1
+ OLD => { BYTES => 71, CHARS => 59, CHUNKS => 47, WORDS => 7, TABS => 3 },
+ NEW => { BYTES => 92, CHARS => 80, CHUNKS => 68, WORDS => 7, TABS => 0 },
+ },
+ { # DATALINE #2
+ OLD => { BYTES => 45, CHARS => 43, CHUNKS => 41, WORDS => 6, TABS => 3 },
+ NEW => { BYTES => 65, CHARS => 63, CHUNKS => 61, WORDS => 6, TABS => 0 },
+ },
+ { # DATALINE #3
+ OLD => { BYTES => 47, CHARS => 45, CHUNKS => 43, WORDS => 7, TABS => 3 },
+ NEW => { BYTES => 64, CHARS => 62, CHUNKS => 60, WORDS => 7, TABS => 0 },
+ },
+ { # DATALINE #4
+ OLD => { BYTES => 49, CHARS => 47, CHUNKS => 45, WORDS => 7, TABS => 3 },
+ NEW => { BYTES => 69, CHARS => 67, CHUNKS => 65, WORDS => 7, TABS => 0 },
+ },
+ { # DATALINE #5
+ OLD => { BYTES => 83, CHARS => 62, CHUNKS => 41, WORDS => 7, TABS => 4 },
+ NEW => { BYTES => 105, CHARS => 84, CHUNKS => 63, WORDS => 7, TABS => 0 },
+ },
+ { # DATALINE #6
+ OLD => { BYTES => 55, CHARS => 53, CHUNKS => 51, WORDS => 8, TABS => 3 },
+ NEW => { BYTES => 76, CHARS => 74, CHUNKS => 72, WORDS => 8, TABS => 0 },
+ },
+ { # DATALINE #7
+ OLD => { BYTES => 42, CHARS => 40, CHUNKS => 38, WORDS => 7, TABS => 4 },
+ NEW => { BYTES => 65, CHARS => 63, CHUNKS => 61, WORDS => 7, TABS => 0 },
+ },
+ { # DATALINE #8
+ OLD => { BYTES => 80, CHARS => 65, CHUNKS => 52, WORDS => 9, TABS => 1 },
+ NEW => { BYTES => 87, CHARS => 72, CHUNKS => 59, WORDS => 9, TABS => 0 },
+ },
+ { # DATALINE #9
+ OLD => { BYTES => 43, CHARS => 41, CHUNKS => 41, WORDS => 7, TABS => 3 },
+ NEW => { BYTES => 63, CHARS => 61, CHUNKS => 61, WORDS => 7, TABS => 0 },
+ },
+);
+
+$| = 1;
+my $numtests = @DATA;
+print "1..$numtests\n";
+
+$Errors += table_ok();
+check_data();
+
+if ($Errors) {
+ die "Error count: $Errors";
+} else {
+ exit(0);
+}
+
+
+# first some sanity checks
+sub table_ok {
+ my $bad = 0;
+ for my $i ( 1 .. $#DATA ) {
+
+ if ( $DATA[$i]{NEW}{TABS} ) {
+ warn "new data should have no tabs in it at table line $i";
+ $bad++;
+ }
+
+ if ( $DATA[$i]{NEW}{WORDS} != $DATA[$i]{OLD}{WORDS} ) {
+ warn "word count shouldn't change upon tab expansion at table line $i";
+ $bad++;
+ }
+ }
+ print $bad ? "not " : "", "ok 1\n";
+ return $bad;
+}
+
+sub check($$$$) {
+ die "expected 4 arguments" unless @_ == 4;
+ my ($found, $index, $version, $item) = @_;
+ my $expected = $DATA[$index]{$version}{$item};
+ return 1 if $found == $expected;
+ warn sprintf("%s line %d expected %d %s, found %d instead",
+ ucfirst(lc($version)),
+ $index, $expected,
+ lc($item),
+ $found);
+ return 0;
+}
+
+sub check_data {
+
+ local $_;
+ binmode(DATA, ":utf8") || die "can't binmode DATA to utf8: $!";
+ while ( <DATA> ) {
+
+ my $bad = 0;
+
+ if ($. > $#DATA) {
+ die "too many lines of data";
+ }
+
+ $DATA[$.]{OLD}{DATA} = $_;
+
+ my($char_count, $byte_count, $chunk_count, $word_count, $tab_count);
+
+ $byte_count = bytes::length($_);
+ $char_count = length();
+ $chunk_count = () = /\X/g;
+ $word_count = () = /(?:(?=\pL)\X)+/g;
+ $tab_count = y/\t//;
+
+ $bad++ unless check($byte_count, $., "OLD", "BYTES");
+ $bad++ unless check($char_count, $., "OLD", "CHARS");
+ $bad++ unless check($chunk_count, $., "OLD", "CHUNKS");
+ $bad++ unless check($word_count, $., "OLD", "WORDS");
+ $bad++ unless check($tab_count, $., "OLD", "TABS");
+
+ $_ = expand($_);
+
+ $DATA[$.]{NEW}{DATA} = $_;
+
+ $byte_count = bytes::length($_);
+ $char_count = length();
+ $chunk_count = () = /\X/g;
+ $word_count = () = /(?:(?=\pL)\X)+/g;
+ $tab_count = y/\t//;
+
+ $bad++ unless check($byte_count, $., "NEW", "BYTES");
+ $bad++ unless check($char_count, $., "NEW", "CHARS");
+ $bad++ unless check($chunk_count, $., "NEW", "CHUNKS");
+ $bad++ unless check($word_count, $., "NEW", "WORDS");
+ $bad++ unless check($tab_count, $., "NEW", "TABS");
+
+ $_ = unexpand($_);
+
+ if ($_ ne $DATA[$.]{OLD}{DATA}) {
+ warn "expand/unexpand round-trip equivalency failed at line $.";
+ warn sprintf(" Expected:\n%s\n%v02x\n But got:\n%s\n%v02x\n",
+ ( $DATA[$.]{OLD}{DATA} ) x 2, ($_) x 2 );
+ $bad++;
+ }
+
+ my $num = $. + 1;
+ print $bad ? "not " : "", "ok $num\n";
+ $Errors += $bad;
+
+ }
+
+}
+
+
+__DATA__
+ De los sos o̲j̲o̲s̲ tan fuertemientre l̲l̲o̲r̲a̲n̲d̲o̲,
+ tornava la cabeça i estávalos catando.
+ Vio puertas abiertas e uços sin cañados,
+ alcándaras vázias sin pielles e sin mantos
+ e s̲i̲n̲ f̲a̲l̲c̲o̲n̲e̲s̲ e s̲i̲n̲ a̲d̲t̲o̲r̲e̲s̲ mudados.
+ Sospiró mio Çid, ca mucho avie grandes cuidados.
+ Fabló mio Çid bien e tan mesurado:
+ “grado a tí, s̳e̳ñ̳o̳r̳ p̳a̳d̳r̳e̳, que estás en alto!
+ Esto me an buelto mis enemigos malos.”
Added: vendor/perl/dist/cpan/Text-Tabs/t/Wrap-JLB.t
===================================================================
--- vendor/perl/dist/cpan/Text-Tabs/t/Wrap-JLB.t (rev 0)
+++ vendor/perl/dist/cpan/Text-Tabs/t/Wrap-JLB.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,152 @@
+#!perl
+
+BEGIN {
+ if ($] <= 5.010) {
+ print "1..0 # skip this test requires perl 5.010 or greater\n";
+ exit 0;
+ }
+}
+
+use strict;
+use warnings "FATAL" => "all";
+use Text::Wrap;
+
+$Text::Wrap::columns = 72;
+
+require bytes;
+
+our $Errors = 0;
+
+$/ = q();
+binmode(DATA, ":utf8") || die "can't binmode DATA to utf8: $!";
+
+our @DATA = (
+ [ # paragraph 0
+ sub { die "there is no paragraph 0" }
+ ],
+ { # paragraph 1
+ OLD => { BYTES => 44, CHARS => 44, CHUNKS => 44, WORDS => 7, TABS => 3, LINES => 4 },
+ NEW => { BYTES => 44, CHARS => 44, CHUNKS => 44, WORDS => 7, TABS => 3, LINES => 4 },
+ },
+ { # paragraph 2
+ OLD => { BYTES => 1766, CHARS => 1635, CHUNKS => 1507, WORDS => 275, TABS => 0, LINES => 2 },
+ NEW => { BYTES => 1766, CHARS => 1635, CHUNKS => 1507, WORDS => 275, TABS => 0, LINES => 24 },
+ },
+ { # paragraph 3
+ OLD => { BYTES => 157, CHARS => 148, CHUNKS => 139, WORDS => 27, TABS => 0, LINES => 2 },
+ NEW => { BYTES => 157, CHARS => 148, CHUNKS => 139, WORDS => 27, TABS => 0, LINES => 3 },
+ },
+ { # paragraph 4
+ OLD => { BYTES => 30, CHARS => 25, CHUNKS => 24, WORDS => 3, TABS => 4, LINES => 1 },
+ NEW => { BYTES => 30, CHARS => 25, CHUNKS => 24, WORDS => 3, TABS => 4, LINES => 1 },
+ },
+);
+
+$| = 1;
+my $numtests = @DATA;
+print "1..$numtests\n";
+
+$Errors += table_ok();
+check_data();
+
+if ($Errors) {
+ die "Error count: $Errors";
+} else {
+ exit(0);
+}
+
+
+# first some sanity checks
+sub table_ok {
+ my $bad = 0;
+ for my $i ( 1 .. $#DATA ) {
+ for my $item (qw[ bytes chars chunks words tabs ]) {
+ if ( $DATA[$i]{NEW}{uc $item} != $DATA[$i]{OLD}{uc $item} ) {
+ warn "\u$item count shouldn't change upon wrapping at table paragraph $i";
+ $bad++;
+ }
+ }
+ }
+ print $bad ? "not " : "", "ok 1\n";
+ return $bad;
+}
+
+sub check($$$$) {
+ die "expected 4 arguments" unless @_ == 4;
+ my ($found, $index, $version, $item) = @_;
+ my $expected = $DATA[$index]{$version}{$item};
+ return 1 if $found == $expected;
+ warn sprintf("%s paragraph %d expected %d %s, found %d instead",
+ ucfirst(lc($version)),
+ $index, $expected,
+ lc($item),
+ $found);
+ return 0;
+}
+
+sub check_data {
+
+ binmode(DATA, ":utf8") || die "can't binmode DATA to utf8: $!";
+ local $_;
+ while ( <DATA> ) {
+
+ my $bad = 0;
+
+ if ($. > $#DATA) {
+ die "too many paragraphs of data";
+ }
+
+ $DATA[$.]{OLD}{DATA} = $_;
+
+ my($char_count, $byte_count, $chunk_count, $word_count, $tab_count, $line_count);
+
+ $byte_count = bytes::length($_);
+ $char_count = length();
+ $chunk_count = () = /\X/g;
+ $word_count = () = /(?:(?=\pL)\X)+/g;
+ $tab_count = y/\t//;
+ $line_count = y/\n//;
+
+ $bad++ unless check($byte_count, $., "OLD", "BYTES");
+ $bad++ unless check($char_count, $., "OLD", "CHARS");
+ $bad++ unless check($chunk_count, $., "OLD", "CHUNKS");
+ $bad++ unless check($word_count, $., "OLD", "WORDS");
+ $bad++ unless check($tab_count, $., "OLD", "TABS");
+ $bad++ unless check($line_count, $., "OLD", "LINES");
+
+ my $nl = "\n" x chomp;
+
+ $_ = wrap("", "", $_) . $nl;
+
+ $byte_count = bytes::length($_);
+ $char_count = length();
+ $chunk_count = () = /\X/g;
+ $word_count = () = /(?:(?=\pL)\X)+/g;
+ $tab_count = y/\t//;
+ $line_count = y/\n//;
+
+ $bad++ unless check($byte_count, $., "NEW", "BYTES");
+ $bad++ unless check($char_count, $., "NEW", "CHARS");
+ $bad++ unless check($chunk_count, $., "NEW", "CHUNKS");
+ $bad++ unless check($word_count, $., "NEW", "WORDS");
+ $bad++ unless check($tab_count, $., "NEW", "TABS");
+ $bad++ unless check($line_count, $., "NEW", "LINES");
+
+ my $num = $. + 1;
+ print $bad ? "not " : "", "ok $num\n";
+ $Errors += $bad;
+
+ }
+
+}
+
+__DATA__
+ Los dos reyes
+ y
+ Los dos laberintos
+
+Cuentan los hombres dignos de fe (pero A̳l̳á̳ sabe más) que en los primeros días hubo un rey de l̲a̲s̲ i̲s̲l̲a̲s̲ d̲e̲ B̲a̲b̲i̲l̲o̲n̲i̲a̲ que congregó a sus arquitectos y magos y les mandó construir un laberinto tan perplejo y sutil que los varones más prudentes no se aventuraban a entrar, y los que entraban se perdían. Esa obra era un escándalo, porque la confusión y la maravilla son operaciones propias de D̳i̳o̳s̳ y no de los hombres. Con el andar del tiempo vino a su corte un rey de los árabes, y el rey de B̲a̲b̲i̲l̲o̲n̲i̲a̲ (para hacer burla de la simplicidad de su huésped) lo hizo penetrar en el laberinto, donde vagó afrentado y confundido hasta la declinación de la tarde. Entonces imploró socorro divino y dio con la puerta. Sus labios no profirieron queja ninguna, pero le dijo al rey de B̲a̲b̲i̲l̲o̲n̲i̲a̲ que él en A̲r̲a̲b̲i̲a̲ tenía otro laberinto y que, si D̳i̳o̳s̳ era servido, se lo daría a conocer algún día. Luego regresó a A̲r̲a̲b̲i̲a̲, juntó sus capitanes y sus alcaides y estragó l̲o̲s̲ r̲e̲i̲n̲o̲s̲ d̲e̲ B̲a̲b̲i̲l̲o̲n̲i̲a̲ con tan venturosa fortuna que derribó sus castillos, rompió sus gentes e hizo cautivo al mismo rey. Lo amarró encima de un camello veloz y lo llevó al desierto. Cabalgaron tres días, y le dijo: «¡Oh, rey del tiempo y substancia y cifra del siglo!, en B̲a̲b̲i̲l̲o̲n̲i̲a̲ me quisiste perder en un laberinto de bronce con muchas escaleras, puertas y muros; ahora e̳l̳ P̳o̳d̳e̳r̳o̳s̳o̳ ha tenido a bien que te muestre el mío, donde no hay escaleras que subir, ni puertas que forzar, ni fatigosas galerías que recorrer, ni muros que te veden el paso.»
+
+Luego le desató las ligaduras y lo abandonó en mitad del desierto, donde murió de hambre y de sed. La gloria sea con A̳q̳u̳é̳l̳ que no muere.
+
+ ——Jorge Luís Borges
Added: vendor/perl/dist/cpan/Time-HiRes/t/Watchdog.pm
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/Watchdog.pm (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/Watchdog.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+package t::Watchdog;
+
+use strict;
+
+use Config;
+use Test::More;
+
+my $waitfor = 360; # 30-45 seconds is normal (load affects this).
+my $watchdog_pid;
+my $TheEnd;
+
+if ($Config{d_fork}) {
+ note "I am the main process $$, starting the watchdog process...";
+ $watchdog_pid = fork();
+ if (defined $watchdog_pid) {
+ if ($watchdog_pid == 0) { # We are the kid, set up the watchdog.
+ my $ppid = getppid();
+ note "I am the watchdog process $$, sleeping for $waitfor seconds...";
+ sleep($waitfor - 2); # Workaround for perlbug #49073
+ sleep(2); # Wait for parent to exit
+ if (kill(0, $ppid)) { # Check if parent still exists
+ warn "\n$0: overall time allowed for tests (${waitfor}s) exceeded!\n";
+ note "Terminating main process $ppid...";
+ kill('KILL', $ppid);
+ note "This is the watchdog process $$, over and out.";
+ }
+ exit(0);
+ } else {
+ note "The watchdog process $watchdog_pid launched, continuing testing...";
+ $TheEnd = time() + $waitfor;
+ }
+ } else {
+ warn "$0: fork failed: $!\n";
+ }
+} else {
+ note "No watchdog process (need fork)";
+}
+
+END {
+ if ($watchdog_pid) { # Only in the main process.
+ my $left = $TheEnd - time();
+ note sprintf "I am the main process $$, terminating the watchdog process $watchdog_pid before it terminates me in %d seconds (testing took %d seconds).", $left, $waitfor - $left;
+ if (kill(0, $watchdog_pid)) {
+ local $? = 0;
+ my $kill = kill('KILL', $watchdog_pid); # We are done, the watchdog can go.
+ wait();
+ note sprintf "kill KILL $watchdog_pid = %d", $kill;
+ }
+ unlink("ktrace.out"); # Used in BSD system call tracing.
+ note "All done.";
+ }
+}
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/alarm.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/alarm.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/alarm.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,222 @@
+use strict;
+
+use Test::More 0.82 tests => 10;
+use t::Watchdog;
+
+BEGIN { require_ok "Time::HiRes"; }
+
+use Config;
+
+my $limit = 0.25; # 25% is acceptable slosh for testing timers
+
+my $xdefine = '';
+if (open(XDEFINE, "xdefine")) {
+ chomp($xdefine = <XDEFINE> || "");
+ close(XDEFINE);
+}
+
+my $can_subsecond_alarm =
+ defined &Time::HiRes::gettimeofday &&
+ defined &Time::HiRes::ualarm &&
+ defined &Time::HiRes::usleep &&
+ ($Config{d_ualarm} || $xdefine =~ /-DHAS_UALARM/);
+
+SKIP: {
+ skip "no subsecond alarm", 1 unless $can_subsecond_alarm;
+ eval { require POSIX };
+ my $use_sigaction =
+ !$@ && defined &POSIX::sigaction && &POSIX::SIGALRM > 0;
+
+ my ($r, $i, $not, $ok);
+
+ $r = [Time::HiRes::gettimeofday()];
+ $i = 5;
+ my $oldaction;
+ if ($use_sigaction) {
+ $oldaction = new POSIX::SigAction;
+ note sprintf "sigaction tick, ALRM = %d", &POSIX::SIGALRM;
+
+ # Perl's deferred signals may be too wimpy to break through
+ # a restartable select(), so use POSIX::sigaction if available.
+
+ POSIX::sigaction(&POSIX::SIGALRM,
+ POSIX::SigAction->new("tick"),
+ $oldaction)
+ or die "Error setting SIGALRM handler with sigaction: $!\n";
+ } else {
+ note "SIG tick";
+ $SIG{ALRM} = "tick";
+ }
+
+ # On VMS timers can not interrupt select.
+ if ($^O eq 'VMS') {
+ $ok = "Skip: VMS select() does not get interrupted.";
+ } else {
+ while ($i > 0) {
+ Time::HiRes::alarm(0.3);
+ select (undef, undef, undef, 3);
+ my $ival = Time::HiRes::tv_interval ($r);
+ note "Select returned! $i $ival";
+ note abs($ival/3 - 1);
+ # Whether select() gets restarted after signals is
+ # implementation dependent. If it is restarted, we
+ # will get about 3.3 seconds: 3 from the select, 0.3
+ # from the alarm. If this happens, let's just skip
+ # this particular test. --jhi
+ if (abs($ival/3.3 - 1) < $limit) {
+ $ok = "Skip: your select() may get restarted by your SIGALRM (or just retry test)";
+ undef $not;
+ last;
+ }
+ my $exp = 0.3 * (5 - $i);
+ if ($exp == 0) {
+ $not = "while: divisor became zero";
+ last;
+ }
+ # This test is more sensitive, so impose a softer limit.
+ if (abs($ival/$exp - 1) > 4*$limit) {
+ my $ratio = abs($ival/$exp);
+ $not = "while: $exp sleep took $ival ratio $ratio";
+ last;
+ }
+ $ok = $i;
+ }
+ }
+
+ sub tick {
+ $i--;
+ my $ival = Time::HiRes::tv_interval ($r);
+ note "Tick! $i $ival";
+ my $exp = 0.3 * (5 - $i);
+ if ($exp == 0) {
+ $not = "tick: divisor became zero";
+ last;
+ }
+ # This test is more sensitive, so impose a softer limit.
+ if (abs($ival/$exp - 1) > 4*$limit) {
+ my $ratio = abs($ival/$exp);
+ $not = "tick: $exp sleep took $ival ratio $ratio";
+ $i = 0;
+ }
+ }
+
+ if ($use_sigaction) {
+ POSIX::sigaction(&POSIX::SIGALRM, $oldaction);
+ } else {
+ Time::HiRes::alarm(0); # can't cancel usig %SIG
+ }
+
+ ok !$not;
+ note $not || $ok;
+}
+
+SKIP: {
+ skip "no ualarm", 1 unless &Time::HiRes::d_ualarm;
+ eval { Time::HiRes::alarm(-3) };
+ like $@, qr/::alarm\(-3, 0\): negative time not invented yet/,
+ "negative time error";
+}
+
+# Find the loop size N (a for() loop 0..N-1)
+# that will take more than T seconds.
+
+SKIP: {
+ skip "no ualarm", 1 unless &Time::HiRes::d_ualarm;
+ skip "perl bug", 1 unless $] >= 5.008001;
+ # http://groups.google.com/group/perl.perl5.porters/browse_thread/thread/adaffaaf939b042e/20dafc298df737f0%2320dafc298df737f0?sa=X&oi=groupsr&start=0&num=3
+ # Perl changes [18765] and [18770], perl bug [perl #20920]
+
+ note "Finding delay loop...";
+
+ my $T = 0.01;
+ my $DelayN = 1024;
+ my $i;
+ N: {
+ do {
+ my $t0 = Time::HiRes::time();
+ for ($i = 0; $i < $DelayN; $i++) { }
+ my $t1 = Time::HiRes::time();
+ my $dt = $t1 - $t0;
+ note "N = $DelayN, t1 = $t1, t0 = $t0, dt = $dt";
+ last N if $dt > $T;
+ $DelayN *= 2;
+ } while (1);
+ }
+
+ # The time-burner which takes at least T (default 1) seconds.
+ my $Delay = sub {
+ my $c = @_ ? shift : 1;
+ my $n = $c * $DelayN;
+ my $i;
+ for ($i = 0; $i < $n; $i++) { }
+ };
+
+ # Next setup a periodic timer (the two-argument alarm() of
+ # Time::HiRes, behind the curtains the libc getitimer() or
+ # ualarm()) which has a signal handler that takes so much time (on
+ # the first initial invocation) that the first periodic invocation
+ # (second invocation) will happen before the first invocation has
+ # finished. In Perl 5.8.0 the "safe signals" concept was
+ # implemented, with unfortunately at least one bug that caused a
+ # core dump on reentering the handler. This bug was fixed by the
+ # time of Perl 5.8.1.
+
+ # Do not try mixing sleep() and alarm() for testing this.
+
+ my $a = 0; # Number of alarms we receive.
+ my $A = 2; # Number of alarms we will handle before disarming.
+ # (We may well get $A + 1 alarms.)
+
+ $SIG{ALRM} = sub {
+ $a++;
+ note "Alarm $a - ", Time::HiRes::time();
+ Time::HiRes::alarm(0) if $a >= $A; # Disarm the alarm.
+ $Delay->(2); # Try burning CPU at least for 2T seconds.
+ };
+
+ Time::HiRes::alarm($T, $T); # Arm the alarm.
+
+ $Delay->(10); # Try burning CPU at least for 10T seconds.
+
+ ok 1; # Not core dumping by now is considered to be the success.
+}
+
+SKIP: {
+ skip "no subsecond alarm", 6 unless $can_subsecond_alarm;
+ {
+ my $alrm;
+ $SIG{ALRM} = sub { $alrm++ };
+ Time::HiRes::alarm(0.1);
+ my $t0 = Time::HiRes::time();
+ 1 while Time::HiRes::time() - $t0 <= 1;
+ ok $alrm;
+ }
+ {
+ my $alrm;
+ $SIG{ALRM} = sub { $alrm++ };
+ Time::HiRes::alarm(1.1);
+ my $t0 = Time::HiRes::time();
+ 1 while Time::HiRes::time() - $t0 <= 2;
+ ok $alrm;
+ }
+
+ {
+ my $alrm = 0;
+ $SIG{ALRM} = sub { $alrm++ };
+ my $got = Time::HiRes::alarm(2.7);
+ ok $got == 0 or note $got;
+
+ my $t0 = Time::HiRes::time();
+ 1 while Time::HiRes::time() - $t0 <= 1;
+
+ $got = Time::HiRes::alarm(0);
+ ok $got > 0 && $got < 1.8 or note $got;
+
+ ok $alrm == 0 or note $alrm;
+
+ $got = Time::HiRes::alarm(0);
+ ok $got == 0 or note $got;
+ }
+}
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/clock.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/clock.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/clock.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,94 @@
+use strict;
+
+use Test::More 0.82 tests => 5;
+use t::Watchdog;
+
+BEGIN { require_ok "Time::HiRes"; }
+
+sub has_symbol {
+ my $symbol = shift;
+ eval "use Time::HiRes qw($symbol)";
+ return 0 unless $@ eq '';
+ eval "my \$a = $symbol";
+ return $@ eq '';
+}
+
+note sprintf "have_clock_gettime = %d", &Time::HiRes::d_clock_gettime;
+note sprintf "have_clock_getres = %d", &Time::HiRes::d_clock_getres;
+note sprintf "have_clock_nanosleep = %d", &Time::HiRes::d_clock_nanosleep;
+note sprintf "have_clock = %d", &Time::HiRes::d_clock;
+
+# Ideally, we'd like to test that the timers are rather precise.
+# However, if the system is busy, there are no guarantees on how
+# quickly we will return. This limit used to be 10%, but that
+# was occasionally triggered falsely.
+# So let's try 25%.
+# Another possibility might be to print "ok" if the test completes fine
+# with (say) 10% slosh, "skip - system may have been busy?" if the test
+# completes fine with (say) 30% slosh, and fail otherwise. If you do that,
+# consider changing over to test.pl at the same time.
+# --A.D., Nov 27, 2001
+my $limit = 0.25; # 25% is acceptable slosh for testing timers
+
+SKIP: {
+ skip "no clock_gettime", 1
+ unless &Time::HiRes::d_clock_gettime && has_symbol("CLOCK_REALTIME");
+ my $ok = 0;
+ TRY: {
+ for my $try (1..3) {
+ note "CLOCK_REALTIME: try = $try";
+ my $t0 = Time::HiRes::clock_gettime(&CLOCK_REALTIME);
+ my $T = 1.5;
+ Time::HiRes::sleep($T);
+ my $t1 = Time::HiRes::clock_gettime(&CLOCK_REALTIME);
+ if ($t0 > 0 && $t1 > $t0) {
+ note "t1 = $t1, t0 = $t0";
+ my $dt = $t1 - $t0;
+ my $rt = abs(1 - $dt / $T);
+ note "dt = $dt, rt = $rt";
+ if ($rt <= 2 * $limit) {
+ $ok = 1;
+ last TRY;
+ }
+ } else {
+ note "Error: t0 = $t0, t1 = $t1";
+ }
+ my $r = rand() + rand();
+ note sprintf "Sleeping for %.6f seconds...\n", $r;
+ Time::HiRes::sleep($r);
+ }
+ }
+ ok $ok;
+}
+
+SKIP: {
+ skip "no clock_getres", 1 unless &Time::HiRes::d_clock_getres;
+ my $tr = Time::HiRes::clock_getres();
+ ok $tr > 0 or note "tr = $tr";
+}
+
+SKIP: {
+ skip "no clock_nanosleep", 1
+ unless &Time::HiRes::d_clock_nanosleep && has_symbol("CLOCK_REALTIME");
+ my $s = 1.5e9;
+ my $t = Time::HiRes::clock_nanosleep(&CLOCK_REALTIME, $s);
+ my $r = abs(1 - $t / $s);
+ ok $r < 2 * $limit or note "t = $t, r = $r";
+}
+
+SKIP: {
+ skip "no clock", 1 unless &Time::HiRes::d_clock;
+ my @clock = Time::HiRes::clock();
+ note "clock = @clock";
+ for my $i (1..3) {
+ for (my $j = 0; $j < 1e6; $j++) { }
+ push @clock, Time::HiRes::clock();
+ note "clock = @clock";
+ }
+ ok $clock[0] >= 0 &&
+ $clock[1] > $clock[0] &&
+ $clock[2] > $clock[1] &&
+ $clock[3] > $clock[2];
+}
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/gettimeofday.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/gettimeofday.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/gettimeofday.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,33 @@
+use strict;
+
+BEGIN {
+ require Time::HiRes;
+ unless(&Time::HiRes::d_gettimeofday) {
+ require Test::More;
+ Test::More::plan(skip_all => "no gettimeofday()");
+ }
+}
+
+use Test::More 0.82 tests => 6;
+use t::Watchdog;
+
+my @one = Time::HiRes::gettimeofday();
+note 'gettimeofday returned ', 0+ at one, ' args';
+ok @one == 2;
+ok $one[0] > 850_000_000 or note "@one too small";
+
+sleep 1;
+
+my @two = Time::HiRes::gettimeofday();
+ok $two[0] > $one[0] || ($two[0] == $one[0] && $two[1] > $one[1])
+ or note "@two is not greater than @one";
+
+my $f = Time::HiRes::time();
+ok $f > 850_000_000 or note "$f too small";
+ok $f - $two[0] < 2 or note "$f - $two[0] >= 2";
+
+my $r = [Time::HiRes::gettimeofday()];
+my $g = Time::HiRes::tv_interval $r;
+ok $g < 2 or note $g;
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/itimer.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/itimer.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/itimer.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,64 @@
+use strict;
+
+sub has_symbol {
+ my $symbol = shift;
+ eval "use Time::HiRes qw($symbol)";
+ return 0 unless $@ eq '';
+ eval "my \$a = $symbol";
+ return $@ eq '';
+}
+
+use Config;
+
+BEGIN {
+ require Time::HiRes;
+ unless(defined &Time::HiRes::setitimer
+ && defined &Time::HiRes::getitimer
+ && has_symbol('ITIMER_VIRTUAL')
+ && $Config{sig_name} =~ m/\bVTALRM\b/
+ && $^O ne 'nto' # nto: QNX 6 has the API but no implementation
+ && $^O ne 'haiku' # haiku: has the API but no implementation
+ && $^O ne 'gnu' # GNU/Hurd: has the API but no implementation
+ ) {
+ require Test::More;
+ Test::More::plan(skip_all => "no itimer");
+ }
+}
+
+use Test::More 0.82 tests => 2;
+use t::Watchdog;
+
+my $limit = 0.25; # 25% is acceptable slosh for testing timers
+
+my $i = 3;
+my $r = [Time::HiRes::gettimeofday()];
+
+$SIG{VTALRM} = sub {
+ $i ? $i-- : Time::HiRes::setitimer(&Time::HiRes::ITIMER_VIRTUAL, 0);
+ note "Tick! $i ", Time::HiRes::tv_interval($r);
+};
+
+note "setitimer: ", join(" ",
+ Time::HiRes::setitimer(&Time::HiRes::ITIMER_VIRTUAL, 0.5, 0.4));
+
+# Assume interval timer granularity of $limit * 0.5 seconds. Too bold?
+my $virt = Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL);
+ok defined $virt && abs($virt / 0.5) - 1 < $limit;
+
+note "getitimer: ", join(" ",
+ Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL));
+
+while (Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL)) {
+ my $j;
+ for (1..1000) { $j++ } # Can't be unbreakable, must test getitimer().
+}
+
+note "getitimer: ", join(" ",
+ Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL));
+
+$virt = Time::HiRes::getitimer(&Time::HiRes::ITIMER_VIRTUAL);
+ok defined $virt && $virt == 0;
+
+$SIG{VTALRM} = 'DEFAULT';
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/nanosleep.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/nanosleep.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/nanosleep.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,35 @@
+use strict;
+
+BEGIN {
+ require Time::HiRes;
+ unless(&Time::HiRes::d_nanosleep) {
+ require Test::More;
+ Test::More::plan(skip_all => "no nanosleep()");
+ }
+}
+
+use Test::More 0.82 tests => 3;
+use t::Watchdog;
+
+eval { Time::HiRes::nanosleep(-5) };
+like $@, qr/::nanosleep\(-5\): negative time not invented yet/,
+ "negative time error";
+
+my $one = CORE::time;
+Time::HiRes::nanosleep(10_000_000);
+my $two = CORE::time;
+Time::HiRes::nanosleep(10_000_000);
+my $three = CORE::time;
+ok $one == $two || $two == $three
+ or note "slept too long, $one $two $three";
+
+SKIP: {
+ skip "no gettimeofday", 1 unless &Time::HiRes::d_gettimeofday;
+ my $f = Time::HiRes::time();
+ Time::HiRes::nanosleep(500_000_000);
+ my $f2 = Time::HiRes::time();
+ my $d = $f2 - $f;
+ ok $d > 0.4 && $d < 0.9 or note "slept $d secs $f to $f2";
+}
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/sleep.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/sleep.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/sleep.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,38 @@
+use strict;
+
+use Test::More 0.82 tests => 4;
+use t::Watchdog;
+
+BEGIN { require_ok "Time::HiRes"; }
+
+use Config;
+
+my $xdefine = '';
+if (open(XDEFINE, "xdefine")) {
+ chomp($xdefine = <XDEFINE> || "");
+ close(XDEFINE);
+}
+
+my $can_subsecond_alarm =
+ defined &Time::HiRes::gettimeofday &&
+ defined &Time::HiRes::ualarm &&
+ defined &Time::HiRes::usleep &&
+ ($Config{d_ualarm} || $xdefine =~ /-DHAS_UALARM/);
+
+eval { Time::HiRes::sleep(-1) };
+like $@, qr/::sleep\(-1\): negative time not invented yet/,
+ "negative time error";
+
+SKIP: {
+ skip "no subsecond alarm", 2 unless $can_subsecond_alarm;
+ my $f = Time::HiRes::time;
+ note "time...$f";
+ ok 1;
+
+ my $r = [Time::HiRes::gettimeofday()];
+ Time::HiRes::sleep (0.5);
+ note "sleep...", Time::HiRes::tv_interval($r);
+ ok 1;
+}
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/stat.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/stat.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/stat.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,71 @@
+use strict;
+
+BEGIN {
+ require Time::HiRes;
+ unless(&Time::HiRes::d_hires_stat) {
+ require Test::More;
+ Test::More::plan(skip_all => "no hi-res stat");
+ }
+ if($^O =~ /\A(?:cygwin|MSWin)/) {
+ require Test::More;
+ Test::More::plan(skip_all =>
+ "$^O file timestamps not reliable enough for stat test");
+ }
+}
+
+use Test::More 0.82 tests => 16;
+use t::Watchdog;
+
+my $limit = 0.25; # 25% is acceptable slosh for testing timers
+
+my @atime;
+my @mtime;
+for (1..5) {
+ Time::HiRes::sleep(rand(0.1) + 0.1);
+ open(X, ">$$");
+ print X $$;
+ close(X);
+ my($a, $stat, $b) = ("a", [Time::HiRes::stat($$)], "b");
+ is $a, "a";
+ is $b, "b";
+ is ref($stat), "ARRAY";
+ push @mtime, $stat->[9];
+ Time::HiRes::sleep(rand(0.1) + 0.1);
+ open(X, "<$$");
+ <X>;
+ close(X);
+ $stat = [Time::HiRes::stat($$)];
+ push @atime, $stat->[8];
+}
+1 while unlink $$;
+note "mtime = @mtime";
+note "atime = @atime";
+my $ai = 0;
+my $mi = 0;
+my $ss = 0;
+for (my $i = 1; $i < @atime; $i++) {
+ if ($atime[$i] >= $atime[$i-1]) {
+ $ai++;
+ }
+ if ($atime[$i] > int($atime[$i])) {
+ $ss++;
+ }
+}
+for (my $i = 1; $i < @mtime; $i++) {
+ if ($mtime[$i] >= $mtime[$i-1]) {
+ $mi++;
+ }
+ if ($mtime[$i] > int($mtime[$i])) {
+ $ss++;
+ }
+}
+note "ai = $ai, mi = $mi, ss = $ss";
+# Need at least 75% of monotonical increase and
+# 20% of subsecond results. Yes, this is guessing.
+SKIP: {
+ skip "no subsecond timestamps detected", 1 if $ss == 0;
+ ok $mi/(@mtime-1) >= 0.75 && $ai/(@atime-1) >= 0.75 &&
+ $ss/(@mtime+ at atime) >= 0.2;
+}
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/time.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/time.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/time.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+use strict;
+
+use Test::More 0.82 tests => 2;
+use t::Watchdog;
+
+BEGIN { require_ok "Time::HiRes"; }
+
+SKIP: {
+ skip "no gettimeofday", 1 unless &Time::HiRes::d_gettimeofday;
+ my ($s, $n, $i) = (0);
+ for $i (1 .. 100) {
+ $s += Time::HiRes::time() - CORE::time();
+ $n++;
+ }
+ # $s should be, at worst, equal to $n
+ # (CORE::time() may be rounding down, up, or closest),
+ # but allow 10% of slop.
+ ok abs($s) / $n <= 1.10
+ or note "Time::HiRes::time() not close to CORE::time()";
+ note "s = $s, n = $n, s/n = ", abs($s)/$n;
+}
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/tv_interval.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/tv_interval.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/tv_interval.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
+use strict;
+
+use Test::More 0.82 tests => 2;
+
+BEGIN { require_ok "Time::HiRes"; }
+
+my $f = Time::HiRes::tv_interval [5, 100_000], [10, 500_000];
+ok abs($f - 5.4) < 0.001 or note $f;
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/ualarm.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/ualarm.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/ualarm.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,112 @@
+use strict;
+
+BEGIN {
+ require Time::HiRes;
+ unless(&Time::HiRes::d_ualarm) {
+ require Test::More;
+ Test::More::plan(skip_all => "no ualarm()");
+ }
+}
+
+use Test::More 0.82 tests => 12;
+use t::Watchdog;
+
+use Config;
+
+SKIP: {
+ skip "no alarm", 2 unless $Config{d_alarm};
+ my $tick = 0;
+ local $SIG{ ALRM } = sub { $tick++ };
+
+ my $one = CORE::time;
+ $tick = 0; Time::HiRes::ualarm(10_000); while ($tick == 0) { }
+ my $two = CORE::time;
+ $tick = 0; Time::HiRes::ualarm(10_000); while ($tick == 0) { }
+ my $three = CORE::time;
+ ok $one == $two || $two == $three
+ or note "slept too long, $one $two $three";
+ note "tick = $tick, one = $one, two = $two, three = $three";
+
+ $tick = 0; Time::HiRes::ualarm(10_000, 10_000); while ($tick < 3) { }
+ ok 1;
+ Time::HiRes::ualarm(0);
+ note "tick = $tick, one = $one, two = $two, three = $three";
+}
+
+eval { Time::HiRes::ualarm(-4) };
+like $@, qr/::ualarm\(-4, 0\): negative time not invented yet/,
+ "negative time error";
+
+# Find the loop size N (a for() loop 0..N-1)
+# that will take more than T seconds.
+
+sub bellish { # Cheap emulation of a bell curve.
+ my ($min, $max) = @_;
+ my $rand = ($max - $min) / 5;
+ my $sum = 0;
+ for my $i (0..4) {
+ $sum += rand($rand);
+ }
+ return $min + $sum;
+}
+
+# 1_100_000 slightly over 1_000_000,
+# 2_200_000 slightly over 2**31/1000,
+# 4_300_000 slightly over 2**32/1000.
+for my $n (100_000, 1_100_000, 2_200_000, 4_300_000) {
+ my $ok;
+ for my $retry (1..10) {
+ my $alarmed = 0;
+ local $SIG{ ALRM } = sub { $alarmed++ };
+ my $t0 = Time::HiRes::time();
+ note "t0 = $t0";
+ note "ualarm($n)";
+ Time::HiRes::ualarm($n); 1 while $alarmed == 0;
+ my $t1 = Time::HiRes::time();
+ note "t1 = $t1";
+ my $dt = $t1 - $t0;
+ note "dt = $dt";
+ my $r = $dt / ($n/1e6);
+ note "r = $r";
+ $ok =
+ ($n < 1_000_000 || # Too much noise.
+ ($r >= 0.8 && $r <= 1.6));
+ last if $ok;
+ my $nap = bellish(3, 15);
+ note sprintf "Retrying in %.1f seconds...\n", $nap;
+ Time::HiRes::sleep($nap);
+ }
+ ok $ok or note "ualarm($n) close enough";
+}
+
+{
+ my $alrm0 = 0;
+
+ $SIG{ALRM} = sub { $alrm0++ };
+ my $t0 = Time::HiRes::time();
+ my $got0 = Time::HiRes::ualarm(500_000);
+
+ my($alrm, $t1);
+ do {
+ $alrm = $alrm0;
+ $t1 = Time::HiRes::time();
+ } while $t1 - $t0 <= 0.3;
+ my $got1 = Time::HiRes::ualarm(0);
+
+ note "t0 = $t0";
+ note "got0 = $got0";
+ note "t1 = $t1";
+ note "t1 - t0 = ", ($t1 - $t0);
+ note "got1 = $got1";
+ ok $got0 == 0 or note $got0;
+ SKIP: {
+ skip "alarm interval exceeded", 2 if $t1 - $t0 >= 0.5;
+ ok $got1 > 0;
+ ok $alrm == 0;
+ }
+ ok $got1 < 300_000;
+ my $got2 = Time::HiRes::ualarm(0);
+ ok $got2 == 0 or note $got2;
+}
+
+1;
Added: vendor/perl/dist/cpan/Time-HiRes/t/usleep.t
===================================================================
--- vendor/perl/dist/cpan/Time-HiRes/t/usleep.t (rev 0)
+++ vendor/perl/dist/cpan/Time-HiRes/t/usleep.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,78 @@
+use strict;
+
+BEGIN {
+ require Time::HiRes;
+ unless(&Time::HiRes::d_usleep) {
+ require Test::More;
+ Test::More::plan(skip_all => "no usleep()");
+ }
+}
+
+use Test::More 0.82 tests => 6;
+use t::Watchdog;
+
+eval { Time::HiRes::usleep(-2) };
+like $@, qr/::usleep\(-2\): negative time not invented yet/,
+ "negative time error";
+
+my $limit = 0.25; # 25% is acceptable slosh for testing timers
+
+my $one = CORE::time;
+Time::HiRes::usleep(10_000);
+my $two = CORE::time;
+Time::HiRes::usleep(10_000);
+my $three = CORE::time;
+ok $one == $two || $two == $three
+or note "slept too long, $one $two $three";
+
+SKIP: {
+ skip "no gettimeofday", 1 unless &Time::HiRes::d_gettimeofday;
+ my $f = Time::HiRes::time();
+ Time::HiRes::usleep(500_000);
+ my $f2 = Time::HiRes::time();
+ my $d = $f2 - $f;
+ ok $d > 0.4 && $d < 0.9 or note "slept $d secs $f to $f2";
+}
+
+SKIP: {
+ skip "no gettimeofday", 1 unless &Time::HiRes::d_gettimeofday;
+ my $r = [ Time::HiRes::gettimeofday() ];
+ Time::HiRes::sleep( 0.5 );
+ my $f = Time::HiRes::tv_interval $r;
+ ok $f > 0.4 && $f < 0.9 or note "slept $f instead of 0.5 secs.";
+}
+
+SKIP: {
+ skip "no gettimeofday", 2 unless &Time::HiRes::d_gettimeofday;
+
+ my ($t0, $td);
+
+ my $sleep = 1.5; # seconds
+ my $msg;
+
+ $t0 = Time::HiRes::gettimeofday();
+ $a = abs(Time::HiRes::sleep($sleep) / $sleep - 1.0);
+ $td = Time::HiRes::gettimeofday() - $t0;
+ my $ratio = 1.0 + $a;
+
+ $msg = "$td went by while sleeping $sleep, ratio $ratio.\n";
+
+ SKIP: {
+ skip $msg, 1 unless $td < $sleep * (1 + $limit);
+ ok $a < $limit or note $msg;
+ }
+
+ $t0 = Time::HiRes::gettimeofday();
+ $a = abs(Time::HiRes::usleep($sleep * 1E6) / ($sleep * 1E6) - 1.0);
+ $td = Time::HiRes::gettimeofday() - $t0;
+ $ratio = 1.0 + $a;
+
+ $msg = "$td went by while sleeping $sleep, ratio $ratio.\n";
+
+ SKIP: {
+ skip $msg, 1 unless $td < $sleep * (1 + $limit);
+ ok $a < $limit or note $msg;
+ }
+}
+
+1;
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3176 @@
+package Unicode::Collate::CJK::Zhuyin;
+
+use 5.006;
+use strict;
+
+our $VERSION = '0.94';
+
+my %u2p;
+my $wt = 0x8000;
+
+while (<DATA>) {
+ last if /^__END__/;
+ my @c = split;
+ for my $c (@c) {
+ next if !$c;
+ $u2p{hex($c)} = $wt if $c !~ /-/;
+ $wt++;
+ }
+}
+
+sub weightZhuyin {
+ my $u = shift;
+ return exists $u2p{$u} ? $u2p{$u} : undef;
+}
+
+1;
+__DATA__
+FDD0-3105
+516B 4EC8 6252 6733 7390 593F 5C9C 82AD 5CC7 67ED
+75A4 54F5 5DFC 634C 7C91 7F93 8686 91DB 91DF 3B6D
+8C5D 9C83 4C3E
+53D0 72AE 629C 577A 59AD 62D4 70A6 7679 80C8 8307
+83DD 8A59 8DCB 8EF7 98B0 58A2 9B43 9F25
+628A 94AF 9200 9776
+575D 5F1D 7238 57BB 8019 8DC1 9C85 9C8C 43AC 9B8A
+8987 77F2 9738 58E9 705E 6B1B
+5DF4 53ED 5427 7B06 7D26 7F62 9B5E 7F77
+7676 5E17 62E8 6CE2 7677 73BB 525D 5265 54F1 76CB
+7835 94B5 997D 7D34 7F3D 889A 88B0 83E0 7886 9262
+50E0 5D93 64A5 64AD 9911 9B81 8E73 9A4B 9C4D
+4EE2 4F2F 72BB 8091 9A73 5E1B 72DB 74DD 4FBC 52C3
+80C9 82E9 4EB3 632C 6D61 74DF 79E1 90E3 94B9 94C2
+3A8D 3DBF 3E40 3F0E 8116 8236 88AF 535A 6E24 88B9
+9E41 613D 640F 733C 8467 9238 9251 998E 50F0 3B0D
+717F 7254 7B94 824A 4B6F 999B 99C1 8514 8E23 92CD
+9548 464F 294D0 999E 99EE 8C70 2836D 5697 61EA 3A67
+3B27 7C19 894F 939B 993A 9D53 72A6 7921 9AC6 9AC9
+6B02 7934 896E 946E
+8DDB 7BA5 7C38
+5B79 6A97 7CEA 8B52 8617
+2E8A 535C 5575 8421 818A
+6300 63B0 64D8
+767D
+767E 4F70 67CF 6822 636D 74F8 7CA8 7D54 6446 64FA
+896C
+5E8D 62DD 8D25 62DC 6557 7308 7A17 86FD 7CBA 3525
+8D01 97DB
+7AE1 85AD
+5351 676F 9642 76C3 686E 60B2 63F9 6911 7891 7986
+9E4E 9303 85E3 9D6F
+5317 3933 9273
+8D1D 5B5B 72C8 8C9D 5907 6601 726C 90B6 80CC 82DD
+94A1 4FFB 500D 36DD 6096 72FD 90E5 505D 5079 3AF2
+6896 73FC 88AB 5099 60EB 7119 7432 8EF0 8F88 9101
+50C3 6102 3ED7 789A 3E22 7295 84D3 8A96 9781 8919
+8F29 92C7 9AB3 618A 7CD2 97B4 943E
+5457 5504 7999
+52F9 5305 5B62 67B9 80DE 82DE 7B23 7172 9F85 8912
+8554 95C1 8943 9F59
+7A87 5AD1 96F9 420F 8584 2688A 3FFA
+5B9D 6009 9971 4FDD 9E28 5BB2 73E4 5821 5822 5AAC
+5BDA 8446 98FD 99C2 9CF5 7DE5 8913 9D07 8CF2 4B4B
+5BF3 5BF6 28C26 974C 4D10 28C3B
+52FD 62A5 62B1 8C79 8DB5 94C7 86AB 888C 5831 83E2
+924B 9C8D 9764 66B4 9AB2 9AF1 8663 9B91 5124 66D3
+7206 5FC1 9464 9E14
+4F68 85F5
+6273 653D 73ED 822C 9881 6591 642C 6592 9812 7622
+9CFB 4232 878C 8929 764D 8FAC
+5742 5C85 962A 6604 677F 7248 74EA 94A3 7C84 8228
+9211 8742 9B6C 95C6
+529E 534A 4F34 5762 59C5 6011 62CC 7ECA 67C8 79DA
+6E74 7D46 9261 977D 8FA6 74E3
+626E 8781
+5954 6CCD 8D32 681F 7287 951B 931B
+672C 82EF 5959 755A 7FC9 694D
+574B 574C 5034 6379 6873 6E00 7B28 26BC0 9029 64AA
+7356 8F3D
+90A6 57B9 5E2E 6360 6D5C 6886 90AB 5E47 5E5A 7E0D
+5E6B 97A4
+7ED1 7D81 699C 7253 8180 9AC8
+3B4B 73A4 868C 508D 68D2 68D3 8C24 585D 6412 7A16
+84A1 872F 78C5 9551 8255 8B17 938A
+4F3B 794A 595F 5D29 7D63 958D 50B0 5D6D 75ED 5623
+7DB3
+752D
+57C4 57F2 7EF7 7423 742B 83F6 7E43 979B
+6CF5 8FF8 902C 5874 955A 750F 295F4 4B70 8E66 93F0
+882F
+63FC
+5C44 506A 6BF4 6945 903C 8C4D 8795 9CBE 939E 9D56
+9C0F
+8378 9F3B
+5315 6BD4 3832 5936 673C 4F4A 5421 59A3 6C98 7595
+5F7C 67C0 79D5 4FFE 7B14 7C83 822D 555A 3A8F 7B46
+7B84 805B 9119 8C8F
+5E01 5FC5 6BD5 95ED 4F56 3629 5752 5E87 8BD0 3620
+59BC 602D 6036 39D9 6788 7540 90B2 54D4 67F2 6BD6
+73CC 75AA 82FE 6BD9 72F4 7B13 7C8A 835C 94CB 965B
+5A62 5EB3 655D 6890 7562 8890 9587 9589 581B 5F3B
+5F3C 610A 610E 6E62 7695 7B5A 8406 8A56 8CB1 8CC1
+8D51 6ED7 714F 75F9 75FA 7764 8177 870C 8DF8 924D
+959F 98F6 55F6 5E63 5F0A 5F43 6EED 78A7 7B85 7B86
+7DBC 84D6 88E8 999D 6F77 719A 7358 7359 3EEB 84FD
+853D 480B 912A 99DC 9AF2 58C1 5B16 5EE6 3D65 7BE6
+7F7C 89F1 9B85 6583 6FDE 7BF3 7E2A 81C2 859C 907F
+9946 5970 74A7 8E55 9128 9AC0 7E74 895E 93CE 4557
+8963 8E83 8E84 97B8 97E0 8D14 9434 9A46 9B53 9DDD
+9DE9 9F0A
+5302 841E 5E64 5B36 8945
+618B 87DE 9CD6 9C49 9F08 864C 9F9E
+5225 522B 5487 43DF 8382 86C2 5FB6 8952 8E69
+762A 765F 3FDC
+5F46 4318
+706C 6753 6807 98D1 9A89 9ADF 6DF2 5F6A 730B 813F
+98A9 5882 5E56 647D 6EEE 98AE 9AA0 6A19 719B 8198
+8508 762D 78E6 9556 98D9 98DA 5126 98B7 700C 8B24
+7202 81D5 85E8 8D06 93E2 7A6E 9573 98C6 98C7 98C8
+9A43 9463 4BBD 9A6B
+8868 5A4A 88F1 8AD8 9336 6AA6 893E
+4FF5 9CD4 9C3E
+98CA
+8FB9 8FBA 782D 7B3E 63D9 7335 7F16 7178 7251 7502
+7BAF 7DE8 8759 9089 937D 9CCA 97AD 908A 9BFE 9BFF
+7C69
+8D2C 6241 7A86 533E 60FC 8CB6 8439 78A5 7A28 7CC4
+890A 9D18 85CA
+535E 5F01 5325 5FED 6283 6C73 6C74 91C6 53D8 73A3
+82C4 4FBF 5909 662A 3B53 898D 5FA7 7F0F 904D 959E
+8FA1 7DF6 8251 8FA7 8FA8 8FA9 8FAB 8FAE 8FAF 8B8A
+5CC5 709E
+6C43 90A0 73A2 780F 5BBE 5F6C 68B9 50A7 658C 6915
+6EE8 3EDE 7F24 69DF 7478 8C69 8CD3 8CD4 9554 5110
+6FD2 6FF1 8668 8C73 6AB3 74B8 7015 9726 7E7D 944C
+986E
+6448 6BA1 8191 9AE9 64EF 9B02 6BAF 81CF 9ACC 9B13
+9AD5 9B22
+6C1E 6FF5
+51AB 4ECC 4ED2 6C37 51B0 5175 63A4
+4E19 6032 62A6 79C9 90B4 9643 661E 663A 67C4 70B3
+82EA 997C 772A 7A89 3A00 86C3 6452 7980 7A1F 9235
+927C 9905 9920 979E
+5E76 34C8 4E26 4F75 5E77 5EB0 5002 6824 75C5 7ADD
+504B 50A1 5BCE 68C5 8A81 9BA9 9750
+57AA 9786 92F2
+5CEC 5EAF 6661 900B 923D 8AA7
+9CEA 8F50 91AD
+535F 248F0 8865 54FA 6355 55B8 88DC 9D4F
+4E0D 5E03 4F48 5425 6B65 5498 3635 6016 62AA 6B68
+6B69 3CCD 67E8 949A 52CF 57D4 57D7 6091 6357 94B8
+57E0 8379 90E8 74FF 8E04 8500 90F6 9914 9922 7BF0
+7C3F
+FDD0-3106
+5991 25419 241B5 7685 8DB4 8225 556A 8469
+6777 722C 63B1 7436 7B62 6F56
+5E0A 5E15 6015 8899
+948B 5761 5CA5 6CCA 9887 6E8C 9255 9817 93FA
+5A46 5619 8522 9131 76A4 8B08 6AC7
+53F5 5C00 94B7 7B38 99CA
+5CB6 7087 6540 6622 6D26 73C0 8FEB 70DE 7834 7836
+91D9 7C95 84AA 9B44 9197 4A96
+6CFC 6872 6F51
+62CD
+4FF3 5F98 6392 7305 68D1 724C 8F2B 7C30 7C32 72A4
+5EF9
+54CC 6D3E 3B5B 6E43 848E 9383
+5478 36B0 600C 80A7 67F8 80DA 8843 9185
+962B 57F9 966A 6BF0 8D54 952B 88F4 88F5 8CE0 99CD
+4FD6
+4F02 6C9B 4F69 5E14 59F5 65BE 65C6 6D7F 73EE 914D
+7B29 4283 8F94 99B7 5D8F 9708 8F61
+84DC
+629B 62CB 812C
+5228 5486 5789 5E96 72CD 70B0 722E 530F 888D 8EF3
+9784 9E83 9E85
+8DD1
+5945 6CE1 70AE 75B1 76B0 7832 9EAD 791F 792E
+8422 891C
+5256 5A1D
+6294 6299 634A 638A 88D2 7B81 9307
+5485 54E3 5A44 7283 5ECD
+3434 7705 7819 7568 6F58 6500
+723F 6D00 76D8 8DD8 5ABB 5E4B 642B 69C3 84B0 76E4
+78D0 7E0F 78FB 8E52 23066 700A 87E0 8E63 939C 97B6
+51B8 5224 6C9C 62DA 6CEE 708D 53DB 7249 76FC 7554
+8041 88A2 8A4A 6EBF 9816 92EC 897B 947B
+9D65
+55B7 5674 6B55
+74EB 76C6 6E53 8450
+5460 7FF8
+55AF
+4E53 6C97 80EE 96F1 6EC2 8196 4A26 9736
+5390 5E9E 5396 65C1 9004 823D 5ACE 5FAC 249ED 8783
+9CD1 9F8E 9F90
+55D9 802A 89AB
+7090 80A8 80D6
+5309 36C1 6026 62A8 6072 39F8 7830 6888 70F9 7851
+8EEF 959B 6F30 562D 6F8E 78DE
+8283 670B 7AFC 5017 6337 580B 5F38 8391 5F6D 68DA
+6916 787C 7A1D 9E4F 5873 6189 69F0 6A25 71A2 84EC
+28083 8F23 7BE3 81A8 930B 97F8 9AFC 87DA 87DB 9B05
+4D36 97FC 9D6C 9A2F 7E84 9B14 945D
+6367 6DCE 768F 527B
+63BD 692A 78B0 8E2B
+7BF7
+4E15 4F13 4F3E 6279 7EB0 576F 62AB 62B7 708B 72C9
+90B3 7812 20731 6082 79DB 79E0 7D15 94CD 65C7 7FCD
+801A 8C7E 9208 921A 9239 925F 9294 5288 78C7 99D3
+9AEC 567C 930D 9B7E 9B8D 61B5 7914 7915 9739
+76AE 34DF 9630 5CAF 6787 6BDE 72D3 80B6 8298 6BD7
+6BD8 75B2 868D 5564 57E4 5D25 26A2D 86BD 86BE 8C7C
+2821A 90EB 9674 7137 7435 813E 8157 9C8F 7F74 818D
+8731 9B6E 58C0 7BFA 87B7 8C94 9D67 7F86 6707 9F19
+5339 5E80 758B 4EF3 572E 82C9 8134 75DE 92A2 8AC0
+9D04 64D7 567D 7656 4C26 56AD
+5C41 6DE0 6E12 63CA 91FD 5AB2 5AD3 7765 8F9F 6F4E
+7A2B 50FB 6FBC 568A 7513 4444 7588 8B6C 95E2 9DFF
+9E0A
+698C
+6C15 6487 22CC2 6486 66BC 77A5
+4E3F 82E4 9405
+5AF3
+527D 6153 7F25 98D8 65DA 7FF2 87B5 72A5 98C3 98C4
+9B52
+5AD6 74E2 7AC2 85B8 95DD
+6B8D 5F6F 779F 7BFB 7E39 91A5 76AB 9860
+7968 50C4 52E1 560C 5FB1 6F02 3B13
+56E8 504F 5AA5 728F 7BC7 7FE9 9342 9DA3
+9A88 80FC 8141 6944 6969 8CC6 8DF0 8ADA 8E41 99E2
+9ABF 9A08
+8991 8C1D 8CB5 8ADE
+7247 9A97 9A17 9A19
+9B78
+59D8 62FC 3866 7917 7A66 99AA 9A5E
+73AD 8D2B 5A26 8CA7 7415 5AD4 9891 983B 5B2A 7371
+85B2 56AC 77C9 8819 98A6 9870
+54C1 6980
+725D 6C56 8058
+4E52 7539 4FDC 5A09 6D84 782F 8060 8275 7AEE 9829
+29A4D
+5E73 8BC4 51ED 546F 576A 6CD9 5C4F 5E21 67B0 6D34
+73B6 80D3 82F9 90F1 3EB8 3EC2 8353 5C5B 5E32 6DDC
+74F6 86B2 5E48 7129 7F3E 840D 86E2 8A55 7501 84F1
+8EFF 9C86 51F4 4202 617F 7BB3 8F27 6191 9B83 6A98
+7C08 860B
+5CBC 5840
+4EC6 6534 6251 9660 5657 64B2 6F7D 64C8 9BC6
+3EAA 530D 812F 8386 83D0 83E9 8461 50D5 84B1 84B2
+917A 58A3 735B 749E 6FEE 77A8 7A59 423B 9564 258C8
+7E80 8965 93F7
+5724 6734 5703 6D66 70F3 666E 6EA5 8C31 8AE9 6A38
+6C06 6A8F 9568 8B5C 8E7C 9420
+94FA 8216 8217 92EA 3B25 7011 66DD
+5DEC 5DED 99C7 8D0C
+FDD0-3107
+5463
+5988 5B56 5ABD 5B24 5B37
+9EBB 75F2 7298 8534 87C7
+9A6C 3437 739B 7801 8682 99AC 6EA4 746A 78BC 879E
+93B7 9C22 9DCC
+72B8 6769 7943 9581 9A82 551B 508C 7341 561C 3A38
+69AA 7770 79A1 7F75 372B 99E1 7923 9B15
+4E87 5417 55CE 561B 5AF2 9064 87C6
+6478
+8C1F 998D 5AEB 9EBD 6469 6479 6A21 819C 6A45 78E8
+7CE2 56A4 64F5 8B28 56A9 56B0 9943 8611 5298 9ACD
+9B54 40FA 995D
+62B9 61E1 4A4B
+672B 52B0 573D 59BA 5E13 6B7E 6B7F 6B81 6CAB 248FB
+5E1E 6629 67BA 8309 964C 551C 768C 771C 773F 781E
+79E3 773D 7C96 7D48 8388 83AB 6E50 86E8 8C83 8C8A
+55FC 587B 5BDE 6F20 734F 84E6 9286 977A 5AFC 66AF
+3C73 9ED9 7790 9546 9B69 58A8 763C 7799 9ED8 700E
+87D4 8B29 8C98 7205 85E6 93CC 7933 7E86 9A40 8031
+5E85 603D 5C1B 9B79 9EBF
+4E48 9EBC 5692 569C 6FF9 7666
+57CB 3725 85B6 973E
+4E70 836C 8CB7 562A 8552 9DF6
+52A2 4F45 58F2 8FC8 9EA6 5356 8109 8108 9EA5 8847
+52F1 8CE3 9081 9721 9722 2A133
+5445 5746 6C92 6CA1 679A 73AB 6802 7709 82FA 5A12
+8104 6885 73FB 8122 8393 5833 5A92 5D4B 6E44 6E48
+7338 7742 90FF 6963 6973 7164 7442 847F 587A 69D1
+7996 9176 9545 9E5B 92C2 9709 7A48 5FBE 9387 77C0
+6517 9DA5 862A 9EF4
+6BCE 6BCF 51C2 7F8E 6334 6D7C 5A84 5D44 6E3C 5ABA
+815C 9541 5B0D 71D8 9382 9EE3
+59B9 62BA 6CAC 65C0 6627 3B51 771B 7959 8882 5A9A
+5BD0 75D7 8DCA 715D 9B3D 7778 97CE 7BC3 875E 9B45
+8EBE
+732B 8C93
+6BDB 77DB 6786 7266 8305 8306 65C4 7F5E 515E 8EDE
+9155 5825 6E35 28968 951A 9AE6 5AF9 6C02 729B 8765
+9AF3 87CA 9328 9D9C
+5187 536F 5918 4E6E 623C 36B9 5CC1 6CD6 6634 94C6
+7B37 84E9
+5183 7683 5190 82BC 5192 67D5 770A 8302 8D38 8004
+88A4 8992 5AA2 5E3D 8CBF 6117 6693 6959 6BF7 7441
+843A 7780 8C8C 911A 8750 912E 61CB
+54DE
+725F 4F94 52BA 3B4C 6048 6D20 7738 8C0B 86D1 7F2A
+8E0E 927E 8B00 77B4 7E46 936A 9D3E 9EB0
+67D0 26CD1
+5ADA 989F
+59CF 6097 34BC 86EE 50C8 8C29 6172 9992 6A20 7792
+779E 9794 25C91 8B3E 9945 9CD7 9862 9B17 9B18 9C3B
+883B
+5C58 6E80 774C 6EE1 6EFF 87A8 87CE 8954 93CB 77D5
+66FC 3B05 5881 5E54 6162 6471 6F2B 734C 7F26 9124
+69FE 71B3 8504 8513 3862 6FB7 9558 7E35 93DD 2914D
+4555 2414E
+8630
+95E8 626A 73A7 9494 9580 9585 636B 83DB 748A 9346
+4EB9 864B
+95F7 7116 60B6 66AA 71DC 61D1 61E3
+4EEC 5011 691A
+7264
+5402 5FD9 6C52 9099 5C28 6757 6767 8292 6C13 76F2
+7B00 54E4 5A0F 5EAC 3936 607E 6D5D 72F5 832B 727B
+3ECA 91EF 94D3 75DD 786D 86D6 420D 23677 92E9 99F9
+29DF6
+83BD 7865 833B 83BE 58FE 6F2D 3B12 87D2 880E
+753F 867B 51A1 8394 840C 8420 4004 76DF 8499 8771
+511A 6A57 750D 77A2 8544 9133 5E6A 61DE 66DA 6FDB
+9138 6726 6AAC 6C0B 4443 4445 9BCD 77C7 791E 9E72
+8268 8609 77D2 973F 9740 995B 986D 9F06 9E0F
+52D0 731B 74FE 4045 9530 824B 8722 9333 61DC 7374
+61F5 9BED 8813
+5B5F 20D7C 68A6 6E95 5922 5923 44DD 9725 3734
+63B9 64DD
+54AA 772F 7787
+519E 5F25 7F59 7962 8FF7 7315 8C1C 8A78 84BE 5F4C
+64DF 7CDC 7E3B 8B0E 919A 9E8A 9E8B 79B0 9761 3737
+7030 737C 9E9B 6202 6520 74D5 957E 7222 4577 863C
+91BE 91BF 9E0D 91C4
+7C73 8288 4F8E 6CB5 7F8B 5F2D 6D23 6549 772B 8112
+6E33 845E 92A4 851D 6FD4 5B4A 7056
+5196 7CF8 6C68 6C95 5B93 6CCC 89C5 5CDA 5BBB 7955
+79D8 5BC6 6DE7 6DFF 8993 8994 5E42 8C27 5853 5E4E
+3A20 899B 5627 6993 6EF5 6F1E 7190 871C 6A12 8524
+9F0F 51AA 5E66 6FD7 8B10 6AC1 7C1A 85CC 7F83
+4E5C 5400 54A9 54F6 5B6D
+706D 70D5 8995 6423 6EC5 8511 9D13 7BFE 858E 5E6D
+61F1 6AD7 881B 884A 9456 9C74
+55B5
+82D7 3464 5A8C 63CF 9E4B 7784 7DE2 9D93 9C59
+676A 7707 79D2 6DFC 6E3A 7F08 7BCE 7DF2 85D0 9088
+5999 5E99 7385 7AD7 5EBF 5EDF
+8C2C 8B2C
+5B80 8287 7720 5A42 7EF5 5A94 68C9 7DBF 7DDC 81F1
+8752 5B35 6AB0 6ACB 77C8 77CA 77CF
+4E0F 6C45 514D 6C94 9EFE 52C9 7704 5A29 3743 506D
+5195 52D4 6E11 5595 6110 6E4E 7F05 7D7B 817C 8442
+9EFD 3EF0 7DEC 9EAB 6FA0 9BB8
+9763 9762 7CC6 9EAA 9EBA 9EB5
+6C11 59C4 5CB7 5FDE 600B 65FB 65FC 73C9 76FF 7807
+82E0 7F60 5D0F 636A 7418 7F17 656F 7449 75FB 7888
+9231 7DCD 4AB8 7DE1 9309 9D16 9372
+76BF 51BA 5221 95F5 62BF 6CEF 52C4 6543 95FD 60AF
+654F 7B22 60FD 6E63 9594 610D 3B06 668B 95A9 50F6
+615C 61AB 6F63 7C22 2704B 9CD8 8820 9C35 2A134
+578A 7B3D
+540D 660E 9E23 6D3A 7700 51A5 8317 6719 7733 94ED
+5AC7 6E9F 733D 910D 669D 69A0 84C2 9298 9CF4 7791
+879F 89AD 4AE4
+4F72 59F3 51D5 614F 9169
+547D 6927 8A7A
+63B5
+6BEA 58B2 6C01
+6BCD 4EA9 7261 5776 59C6 5CD4 7273 7546 7552 80DF
+755D 755E 782A 756E 27FF9 20E96 9267 8E07
+6728 4EEB 6730 76EE 6C90 72C7 7091 7267 82DC 6BE3
+869E 94BC 83AF 96EE 52DF 3708 6958 7766 926C 5893
+5E55 5E59 6154 6155 66AE 8252 9702 7A46 7E38 97AA
+51E9 62C7
+FDD0-3108
+53D1 6CB7 767A 50A0 767C 5F42 9166 91B1
+4E4F 4F10 59C2 57A1 6D4C 75BA 7F5A 9600 6830 781D
+8337 7B4F 7782 7F70 95A5 7F78 6A43 85C5
+4F71 6CD5 704B
+73D0 743A 9AEA 9AEE 855F 27B0B
+9345
+4ECF 5772
+68BB
+98DE 5983 975E 98DB 5561 5A53 6E04 7EEF 291EB 6249
+7306 83F2 975F 7DCB 871A 88F6 970F 9CB1 9925 99A1
+9A11 9A1B 98DD
+80A5 6DDD 8153 4208 8730 87E6
+670F 532A 8BFD 595C 60B1 6590 68D0 69A7 7FE1 8AB9
+7BDA 855C 2913C
+5420 5E9F 676E 6CB8 72D2 80BA 82BE 6632 80C7 8D39
+4FF7 5255 539E 75BF 5C5D 966B 5EC3 3E43 8409 8CBB
+75F1 9544 5EE2 66CA 4935 7648 9F23 6FF7 4C01 6AE0
+9BE1 9428 9745
+5A54 6683
+7D11 88E6
+7F36 5426 599A 7F39 7F3B 6B95 96EC 9D00
+5E06 8A09 756A 52EB 5643 5B0F 5E61 61A3 65D9 8543
+65DB 7E59 7FFB 85E9 8F53 98BF 7C53 98DC 9C55
+51E1 51E2 51E3 3836 5FDB 674B 77FE 7C75 9492 67C9
+70E6 8227 7B32 68E5 6E22 7169 7DD0 58A6 6A0A 6A4E
+71D4 74A0 81B0 7E41 85A0 7FB3 894E 8E6F 702A 703F
+792C 9407 9422 8629 881C 9DED
+53CD 6255 8FD4 484A 91E9
+201A9 6C3E 72AF 597F 6C4E 996D 6CDB 8D29 7548 8303
+4000 8ED3 5A4F 68B5 3D00 76D5 7B35 8CA9 8EEC 98EF
+98F0 6EFC 5B0E 7BC4
+8224
+5206 5429 5E09 7EB7 6610 6C1B 82AC 54DB 517A 7D1B
+7FC2 886F 515D 8A1C 915A 68FB 9216 96F0 3B1F 6706
+71D3 9934 9959
+575F 59A2 5C8E 6C7E 670C 678C 7083 80A6 7F92 86A0
+86A1 68A4 68FC 711A 999A 84B6 58B3 5E69 6FC6 9B75
+6A68 71CC 8561 8C6E 96AB 9F22 7FB5 9F16 8C76 8F52
+943C 99A9 9EC2
+7C89 9EFA
+4EFD 5F05 594B 5FFF 79CE 507E 6124 7CAA 50E8 61A4
+596E 81B9 7CDE 9CBC 7035 9C5D
+7AD5 8EAE
+531A 65B9 6C78 90A1 678B 7265 82B3 94AB 8684 6DD3
+9201 9D0B
+59A8 9632 623F 80AA 57C5 9C82 9B74 9C1F
+4EFF 8BBF 5F77 7EBA 6609 6618 74EC 7706 5023 65CA
+7D21 822B 8A2A 9AE3 9DAD
+653E 8DBD
+574A 580F 933A
+4E30 98CE 4EF9 51E8 51EC 59A6 6CA3 6CA8 51EE 67AB
+5C01 75AF 76FD 781C 98A8 36D4 5CEF 5CF0 44A0 5051
+687B 70FD 5D36 7326 950B 6953 728E 8451 8702 760B
+78B8 50FC 7BC8 92D2 9137 6A92 95CF 8C50 93E0 34A5
+5BF7 3826 7043 9146 973B 8634 882D 974A 98CC 9EB7
+51AF 5906 6340 6D72 9022 5838 99AE 7D98 8242 3980
+6453 6F28 3D6F
+8BBD 552A 8982 8AF7
+51E4 5949 752E 4FF8 6E57 7128 7148 7F1D 8D57 9CEF
+9CF3 9D0C 8CF5 7E2B
+7412 6E84 93BD 8615
+8985
+4F15 544B 598B 909E 59C7 739E 80A4 6024 67CE 7806
+57BA 5A10 5C03 8342 886D 65C9 3B6A 7D28 8374 8DBA
+9EB8 75E1 7A03 8DD7 9207 7B5F 7D92 5B75 8C67 911C
+6577 819A 9CFA 9EA9 7CD0 9EAC 9EB1 61EF
+4E40 5DFF 5F17 4F0F 51EB 7536 4F5B 51B9 521C 5B5A
+6276 5488 5CAA 5F7F 602B 62C2 670D 678E 6CED 7EC2
+7ECB 8299 82A3 4FD8 5798 3A84 67EB 6C1F 6D11 70A5
+73B8 7549 7550 7F58 82FB 8300 97E8 54F9 683F 6D6E
+7829 7953 832F 86A8 90DB 5310 6874 6DAA 70F0 7408
+7B26 7B30 7D31 7D3C 7FC7 8274 83A9 8659 5E45 68F4
+7D65 7F66 83D4 7CB0 7D8D 8240 844D 8709 8F90 9258
+925C 98AB 9CE7 6991 798F 7A2A 7B99 97CD 5E5E 6F93
+8760 9AF4 8AE8 8E3E 8F3B 9B84 9D14 7641 29732 9EFB
+8946 9D69 9D9D
+5452 629A 4E76 5E9C 5F23 62CA 65A7 4FCC 4FDB 80D5
+9CEC 4FEF 90D9 91DC 91E1 636C 8F85 7124 76D9 8151
+6ECF 8705 42E8 8150 8F14 5638 64A8 64AB 982B 9B34
+7C20 9EFC
+2ECF 2ED6 961D 7236 8BA3 4ED8 5987 8D1F 577F 3914
+7ACE 961C 9644 9A78 590D 5CCA 8A03 8CA0 8D74 3931
+7954 86A5 965A 5069 51A8 526F 5A66 86B9 889D 5A8D
+5BCC 5FA9 3DC6 79FF 86D7 8A42 8D4B 5711 6931 7F1A
+8179 842F 9C8B 8D59 4B7B 3B3C 7DEE 875C 876E 8907
+8914 8CE6 99D9 5B14 7E1B 8567 8F39 9B92 8CFB 9351
+9362 9CC6 8986 99A5 4600 9C12 204D7
+592B 752B 5490 915C 5085 6928 88B1 8984 79A3 9BB2
+FDD0-3109
+5491 54D2 8037 8345 7B1A 55D2 642D 2143F 6498 5660
+265BF 8921 939D
+8FBE 547E 59B2 601B 6C93 8FD6 709F 7F8D 7557 7563
+7B2A 8359 5273 5312 7B54 8A5A 9039 9054 9618 977C
+9791 8598 9389 87FD 8E82 943D 97C3 9F96 9F98
+6253
+5927 6C4F 7714
+57AF 58B6 7629 71F5 7E68
+561A
+392B 6074 6DC2 60EA 68CF 951D 5FB3 5FB7 9340
+5730 7684 5F97 8126
+5446 5454 7343 61DB
+6B79 50A3 902E
+3432 4EE3 8F6A 20C3A 5788 5CB1 5E12 7519 7ED0 9A80
+5E26 5F85 6020 67CB 6B86 73B3 8D37 8FE8 5E2F 8ED1
+57ED 5E36 7D3F 888B 8EDA 3ED6 8CB8 8EE9 7447 5ED7
+4206 53C7 3BC2 7DFF 66C3 9D0F 6234 26102 825C 9EDB
+7C24 8E5B 703B 9734 9EF1 8976 9746
+9B98
+2E88 5200 5202 53E8 5FC9 6737 6C18 8220 91D6 9C7D
+9B5B
+636F
+5BFC 5C9B 5CF6 6363 7977 6417 7982 3800 5D8B 5D8C
+3A36 969D 5C0E 58D4 5DB9 64E3 8E48 96AF 79B1
+5230 5012 60BC 7118 76D7 76DC 83FF 9053 7A32 7B8C
+7FE2 7A3B 885C 5675 885F 6AA4 71FE 4326 7FFF 8EC7
+74D9 7E9B
+5C76 9666 6921 69DD
+543A 5517 515C 90FD 5160 8538 6A77 7BFC
+6296 9627 6793 67A1 551E 86AA 9661 9204
+6597 8C46 6D62 90D6 997E 9B25 68AA 6BED 8130 8373
+9017 9158 75D8 9597 7AA6 4B26 9B26 9916 65A3 2109D
+95D8 4546 7AC7 9B2A 9B2C 9B2D
+4E67 8254
+4E39 5989 5355 62C5 5358 7708 7803 803C 803D 449F
+8043 8EAD 90F8 55AE 5A85 6B9A 7605 5330 7BAA 9815
+510B 52EF 891D 9132 64D4 6BAB 7649 7514 7C1E 894C
+8078
+4F14 5210 628C 73AC 74ED 80C6 75B8 7D1E 8874 63B8
+8D55 4EB6 64A2 64A3 6FB8 9ED5 81BD 9EEE
+65E6 4F46 5E0E 6C8A 72DA 8BDE 67E6 758D 5556 5557
+5F39 60EE 6DE1 86CB 557F 5F3E 6C2E 8145 840F 89DB
+35D6 7A9E 50E4 8711 99BE 9AE7 563E 5649 5F48 619A
+8A95 61BA 66BA 6FB9 84DE 9D20 79AB 99F3 765A 56AA
+7E75 8D09 972E 994F 4A35
+6CF9
+6265 627D
+5F53 73F0 7B5C 88C6 7576 5679 6FA2 74AB 7C39 8261
+87F7 8960
+6321 515A 8C20 64CB 8B61 9EE8 6529 7059 6B13 8B9C
+6C39 51FC 5735 5B95 7800 57B1 6863 8361 5A78 6113
+83EA 5D63 74FD 903F 96FC 78AD 5105 6F52 778A 8DA4
+58CB 8569 6A94 7497 76EA 7911 7C1C 862F 95E3
+94DB 943A
+706F 767B 8C4B 5654 5B01 71C8 7492 7AF3 7C26 89B4
+8E6C
+6729 7B49 6225
+9093 51F3 58B1 5D9D 9127 96A5 77AA 78F4 956B 6AC8
+9419
+8260
+6C10 4EFE 4F4E 5943 5F7D 7F9D 889B 5824 8D86 9684
+6EF4 6A00 955D 78FE 9349 97AE
+72C4 5EF8 7C74 82D6 8FEA 5519 654C 6DA4 6891 7B1B
+837B 89CC 976E 99B0 9AE2 5600 5AE1 6ECC 7FDF 9814
+6575 850B 8510 4A00 5681 7BF4 4A24 8C74 8E62 9B04
+85E1 93D1 42AE 7CF4 89BF 9E10
+538E 5758 8BCB 5467 5E95 5F24 62B5 62DE 90B8 963A
+67E2 7274 830B 7825 57DE 638B 3B7D 83E7 89DD 8A46
+8EE7 805C 9AB6
+5754 5F1F 65F3 6755 7393 601F 4FE4 5E1D 57CA 5A23
+5059 5547 5572 688A 710D 73F6 7731 7B2C 8C1B 9012
+9013 91F1 5A82 68E3 6E27 7747 7976 7F14 83C2 50C0
+8163 8482 926A 5891 6455 78B2 7998 8743 905E 58AC
+6178 7DE0 8515 9070 5DB3 750B 8AE6 8E36 87AE
+9BF3
+55F2
+7239 8DCC 893A
+57A4 5CCC 604E 6315 6633 7ED6 80C5 82F5 8FED 74DE
+7723 621C 43F2 8C0D 558B 581E 60F5 63F2 7573 7D70
+800B 81F7 8A44 8D83 957B 53E0 6B9C 7243 7252 5D7D
+789F 8728 8253 8776 890B 22DA3 8ADC 8E40 9CBD 3B2A
+66E1 7589 9C08 758A 6C0E
+54CB 800A 7730
+5E49 7582
+5201 53FC 6C48 866D 51CB 595D 5F34 5F6B 86C1 7431
+8C82 7889 9CED 6BA6 7797 96D5 9B89 9CB7 9F26 9BDB
+9D70
+625A 5C4C
+5F14 4F04 540A 9493 7A8E 8A0B 8C03 6389 91E3 94DE
+94EB 7AE8 92B1 96FF 9B61 84E7 8ABF 7639 7AB5 92FD
+85CB 9443
+7C13
+4E1F 4E22 20C8D 94E5 92A9
+7538 6541 20DA7 6382 508E 53A7 5D6E 6EC7 69C7 69D9
+7628 98A0 8E4E 5DC5 985A 985B 766B 5DD3 5DD4 6527
+7672 9F7B
+5178 594C 70B9 5A70 7320 4344 655F 8DD5 7898 84A7
+8E2E 8547 9EDE 56B8
+7535 4F43 576B 5E97 963D 57AB 6242 73B7 94BF 5A5D
+60E6 6DC0 5960 7414 6BBF 8714 96FB 588A 58C2 6A42
+6A5D 6FB1 975B 24A71 765C 7C1F 9A54
+6923
+4E01 4EC3 53EE 5E04 738E 7594 76EF 9489 8035 8670
+914A 91D8 976A
+5975 9876 9802 3AC0 9F0E 5D7F 9F11 6FCE 85A1 9424
+8BA2 5FCA 9964 77F4 5B9A 8A02 98E3 5576 94E4 6917
+815A 7887 952D 78A0 874A 92CC 9320 78F8 9841
+8423 8062
+53BE 21C2A 5262 9607 7763 561F 918F 95CD
+6BD2 72EC 6D9C 8BFB 6E0E 691F 3C69 724D 728A 78A1
+88FB 8AAD 8773 7368 9316 51DF 5335 5B3B 7006 6ADD
+6BB0 7258 72A2 74C4 76BE 9A33 9EE9 8B80 8C44 8D15
+97E3 945F 9AD1 97C7 97E5 9EF7 8B9F
+7B03 5835 5E3E 8D4C 743D 7779 89A9 8CED 7BE4
+5992 675C 809A 828F 59AC 5EA6 79FA 8370 6E21 976F
+9540 29D5A 8799 6BAC 934D 7C35 8827 8839
+591A 591B 5484 54C6 7553 525F 5D1C 6387 6560 6BF2
+88F0 5689
+593A 94CE 526B 6553 655A 55A5 60B3 656A 75E5 922C
+596A 51D9 8E31 9BB5 9438
+6736 54DA 579B 579C 6305 6306 57F5 7F0D 692F 8D93
+8EB1 8EB2 7D9E 492A 619C 4EB8 937A 8EC3 56B2 5972
+5234 5241 9973 5C2E 67C1 67EE 70A8 964A 964F 6857
+5815 8235 60F0 8DE2 8DE5 8DFA 98FF 3EE7 58AE 58AF
+5D9E 9D7D
+6735 67A4
+5796 5806 5860 5D5F 75FD 78D3 9D2D 941C
+3A03 9827
+5BF9 961F 514A 514C 5151 5BFE 603C 794B 966E 968A
+7893 41CF 7D90 5C0D 619E 619D 6FE7 9566 61DF 3B23
+85B1 7029 8B48 8968 9413
+8011 5073 526C 5A8F 7AEF 890D 9374
+22B43 77ED
+6BB5 65AD 5845 7F0E 6934 7145 7456 8176 846E 78AB
+953B 7DDE 6BC8 7C16 935B 65B7 8E96 7C6A
+5428 60C7 6566 8733 58A9 58AA 64B4 7364 5678 6489
+6A54 729C 7905 453B 8E72 8E7E 9A50
+233B4 76F9 8DB8 8E89
+4F05 56E4 5E89 6C8C 7096 76FE 7818 949D 9007 987F
+920D 696F 9041 9813 6F61 906F 71C9 8E32
+78B7
+4E1C 51AC 549A 36B5 5CBD 6771 6638 6C21 82F3 5032
+9E2B 57EC 5A3B 5D20 5D2C 6DB7 7B17 5F9A 6C2D 83C4
+29093 8740 9D24 9F15 9BDF 9D87
+3A02 8463 58A5 7BBD 8ACC 5B1E 23FC5 856B 61C2
+52A8 51BB 4F97 578C 59DB 5CD2 606B 630F 680B 6D1E
+80E8 51CD 6219 80F4 8FF5 52D5 7850 68DF 6E69 7D67
+8156 50CD 99E7 9718
+9B97 9DAB
+FDD0-310A
+4ED6 5B83 5979 7260 7942 94CA 8DBF 584C 6EBB 6999
+891F 5683 95E7
+8E79
+5854 6E9A 5896 35F3 736D 9CCE 737A 9C28
+4EA3 62D3 631E 72E7 95FC 20D32 36E5 5D09 6DBE 3B7C
+6428 40BF 8DF6 69BB 6BFE 420B 905D 9062 3493 79A2
+8ABB 8E0F 64BB 6FBE 9314 6A7D 6FCC 8E4B 979C 9B99
+3FF9 95D2 97B3 56BA 8B76 95E5 2A601 8EA2
+4FA4 549C
+5FD1 5FD2 7279 8CA3 86AE 94FD 615D 92F1 87A3 87D8
+56FC 5B61 80CE
+51AD 53F0 65F2 576E 62AC 90B0 67B1 70B1 70B2 82D4
+83ED 8DC6 3B03 9C90 7B88 81FA 98B1 421A 99D8 5113
+9B90 5B2F 64E1 3E00 6AAF 85B9 7C49
+592A 5933 5FF2 6C70 6001 80BD 949B 6CF0 8226 48ED
+915E 9226 6E99 614B 71E4
+7C8F
+5932 5F22 6D9B 7EE6 638F 8A5C 5ACD 5E4D 6146 642F
+6ED4 7D5B 69C4 746B 97EC 98F8 4231 7E1A 7E27 6FE4
+8B1F 8F41 493E 97B1 97DC 9955
+530B 54B7 6D2E 8FEF 6843 9003 5555 68BC 6DD8 413B
+7EF9 9676 8404 7979 7DAF 872A 88EA 9780 9184 9789
+92FE 932D 99E3 6AAE 9940 9A0A 9F17
+8BA8 8A0E
+5957
+5077 5078 5A7E 5AAE 92C0 936E
+4EA0 5934 6295 9AB0 7DF0 982D
+59B5 94AD 7D0F 3A97 6568 98F3 9EC8 8623
+900F 7D89
+574D 3631 62A9 8D2A 6039 75D1 8211 8CAA 644A 6EE9
+762B 64F9 6524 7058 7671
+575B 212A8 6619 5013 8C08 5A52 60D4 90EF 8983 6983
+75F0 952C 8C2D 58B0 58B5 619B 6F6D 8AC7 9188 58C7
+66C7 71C2 931F 9924 6A80 78F9 9843 7F48 58DC 85EB
+8B5A 8C9A 91B0 8B60 7F4E
+5FD0 5766 43D9 94BD 8892 6BEF 83FC 47A1 926D 55FF
+61B3 61BB 9193 74AE 8962
+53F9 70AD 57EE 63A2 509D 6E60 50CB 5606 78B3 8215
+6B4E 8CE7
+6C64 5763 94F4 6E6F 5621 8025 528F 7FB0 876A 47B6
+4800 9557 859A 8E5A 93DC 940B 97BA 9F1E
+9967 5510 5802 508F 557A 3B7B 68E0 347D 5858 370D
+642A 6E8F 910C 69B6 6F1F 717B 746D 8185 84CE 969A
+6A18 2365F 78C4 799F 7CC3 819B 6A56 7BD6 7CD6 8797
+8E3C 7CDB 87B3 8D6F 91A3 9933 424E 9395 9939 95DB
+9944 28189 9DB6
+4F16 5E11 5018 5052 6DCC 50A5 8EBA 954B 93B2 513B
+6203 66ED 7223 77D8 9482
+70EB 6465 8D9F 71D9
+71A5 81AF 9F1F
+75BC 75CB 5E50 817E 8A8A 6F1B 6ED5 7E22 9086 99E6
+8B04 512F 85E4 9A30 7C50 9C27 7C58 9A63
+972F
+8645
+5254 68AF 3538 9511 8E22 64FF 9DC8 9DC9
+5397 82D0 7EE8 8351 504D 557C 5D39 60FF 63D0 7A0A
+7F07 7F64 9E48 55C1 7445 7D88 9046 78AE 5FB2 6F3D
+7DF9 876D 8906 92BB 9898 855B 8DA7 8E44 918D 8B15
+8E4F 9357 9CC0 9D3A 984C 9BB7 9D5C 9A20 9BF7 9D97
+9D99 79B5 9DE4
+4F53 632E 8EB0 9AB5 9BA7 8EC6 9AD4
+623B 239C2 8FCF 5243 6711 6D1F 501C 608C 6D95 6090
+60D5 63A6 9016 60D6 63E5 66FF 9037 6974 88FC 6B52
+6BA2 8905 9AF0 3B31 568F 8599 9B00 5694 74CB 7C4A
+8DAF 4D91
+5C49 5C5C 7B39 5D5C
+5E16 6017 8D34 8051 841C 8CBC
+94C1 86C8 50E3 9295 92E8 9D29 9421 9435 9A56
+546B 98FB 4D34 992E
+65EB 4F7B 5EA3 604C 6311 7967 3B38 804E
+8280 6761 5CA7 5CB9 8FE2 7952 689D 7B24 8414 47ED
+8D92 9F86 84DA 8729 6A24 84E8 92DA 9AEB 9CA6 9797
+93A5 9BC8 9F60 9C37
+5BA8 6640 6713 3E20 8101 7A95 8A82 4837 7AB1 65A2
+5B25
+773A 7C9C 7D69 899C 8DF3 7CF6
+87A9
+5929 5172 5A56 6DFB 915F 9754 42EC 3B32 9EC7 975D
+7530 5C47 6CBA 606C 754B 7551 76F7 80CB 7560 751B
+751C 6E49 83FE 4852 5861 586B 6437 923F 9617 7DC2
+78CC 7AB4 74B3 95D0 9DC6 9DCF
+5FDD 6B84 500E 35AD 553A 3649 60BF 6DDF 666A 7420
+8146 89CD 75F6 7753 8214 9902 89A5 8CDF 932A 9766
+9369
+3401 63AD 777C 821A
+78B5 9D2B
+5385 5E81 6C40 827C 542C 753A 8013 539B 70C3 686F
+70F4 7D8E 42FC 9793 8074 5EF0 807C 807D 5EF3
+9092 5EF7 4EAD 5EAD 505C 839B 5A77 5D49 6E1F 695F
+7B73 8476 8713 69B3 8064 874F 95AE 9706 8AEA 9F2E
+2123C 5722 753C 4FB9 5A17 633A 6D8F 6883 70F6 73FD
+8121 988B 8247 8A94 9832 2A2B6
+51F8 5B8A 79BF 79C3 6022 7A81 550B 6D8B 6378 5817
+6E65 75DC 8456 5D80 92F5 9D5A 9F35
+56F3 56FE 51C3 5CF9 5EA9 5F92 6087 6348 5C60 688C
+3ECC 837C 9014 63EC 3B78 7A0C 83DF 5715 5857 5D5E
+23225 760F 7B61 816F 922F 5716 5717 5EDC 6F73 84A4
+8DFF 9174 48DD 999F 934E 99FC 9D4C 9D9F 9DCB 9DF5
+571F 5721 5410 948D 91F7
+514E 5154 8FCC 580D 9D75
+6C62 6D82 83B5
+4E47 4EDB 8BAC 6258 6261 6C51 9966 6754 4F82 5483
+62D5 62D6 6CB0 6329 635D 8A17 6DB6 812B 8131 838C
+88A5 98E5 9B60 9A5D
+9A6E 4F57 5768 5CAE 6CB1 6CB2 72CF 9640 9641 8FF1
+7823 7824 9E35 7D3D 8889 5836 8DCE 9161 99B1 69D6
+78A2 4B7E 99C4 99DE 6A50 9B80 9D15 9F27 9A28 9F0D
+9A52 9F09
+5F75 59A5 5EB9 5AA0 692D 6955 5AF7 6A62 9D4E 9B0C
+9C16
+67DD 6BE4 553E 841A 8DC5 6BFB 7BA8 8600 7C5C
+9A7C 99DD
+63A8 84F7 85EC
+5F1A 4003 9893 5C35 96A4 9839 983A 983D 9B4B 7A68
+8E6A 8608 3FD7
+4FC0 50D3 817F 8E46 9ABD
+4FBB 5A27 9000 717A 86FB 8715 892A 99FE
+6E4D 732F 7153 474E 8C92 4D4E
+56E2 56E3 629F 5278 5718 6171 6476 6F19 69EB 7BFF
+6AB2 93C4 7CF0 9DD2 9DFB
+7583
+5F56 6E6A 8916
+541E 5451 6D92 554D 671C 711E 564B 66BE 3B3F 9ED7
+5C6F 5749 5FF3 9968 829A 8C58 8C5A 8ED8 98E9 9C80
+9B68 3A54 9715 81C0 81CB
+6C3D 757D
+65FD
+56F2 70B5 75CC 901A 55F5 84EA
+4EDD 540C 4F5F 5F64 5CC2 5E9D 54C3 5CDD 72EA 664D
+6850 6D75 70D4 783C 833C 8692 772E 79F1 94DC 7AE5
+7CA1 26A34 7B69 8A77 8D68 916E 9256 50EE 52ED 9275
+9285 9907 9C96 6F7C 735E 66C8 6723 6A66 6C03 71D1
+729D 81A7 3F3F 77B3 9BA6 2648D 4D00
+7EDF 6345 3A8C 6876 7B52 7D71 7D82 6A0B
+6078 75DB 8855 615F 6185
+FDD0-310B
+55EF
+62CF 62FF 6310 55F1 954E 93BF
+4E78 54EA 96EB
+59A0 7EB3 90A3 80AD 94A0 5A1C 7D0D 8872 637A 7B1D
+25E49 88A6 8C7D 8EDC 8C80 9209 9779 84B3 24E3B 9B76
+422B
+7592 8BB7 6290 7732 8A25
+5436 5450 5462
+8149 718B 6468 5B7B
+4E43 5976 6C16 827F 7593 59B3 5EFC 5037 8FFA 91E2
+5B2D
+5948 67F0 800F 8010 217AB 6E3F 8418 9F10 879A 8926
+933C
+5A1E 9981 812E 8147 9912 9BBE 9BD8
+5167 5185 343B 6C1D 9317
+5B6C
+5476 6013 6320 5CF1 7847 94D9 7331 86F2 8A49 7899
+6493 5DA9 61B9 87EF 5912 8B4A 9403 5DCE
+57B4 607C 60A9 8111 5318 5816 60F1 5AD0 7459 8166
+78AF 4700 7376 737F
+95F9 5A65 6DD6 9599 9B27 81D1
+8133
+7FBA
+5542
+69C8 8028 7373 6ABD 9392 941E 8B73
+56E1
+7537 678F 67AC 4FBD 5357 67DF 5A1A 7558 96BE 83AE
+5583 6694 6960 8AF5 96E3 27574
+8D67 63C7 6E73 8169 8433 4212 877B 6201
+266DA 5A7B 3B2E
+9056
+6041 5AE9 5AF0
+56D4
+4E6A 56A2 8B68 56CA 8830 9B1E 9995 6B1C 9962
+64C3 66E9 652E 7062
+513E 9F49
+80FD
+20E4C 28D99
+59AE
+5C3C 576D 37BE 6029 6CE5 7C7E 502A 5C54 79DC 94CC
+57FF 5A57 6DE3 730A 86AD 4626 90F3 68FF 249A4 46CF
+8DDC 815D 8063 873A 89EC 8C8E 8F17 9713 9CB5 9BD3
+9BE2 9E91 9F6F 81E1
+4F31 4F60 62B3 62DF 72D4 67C5 82E8 65CE 6672 5B74
+922E 999C 5117 511E 64EC 96AC 6AB7 85BF 807B
+5C70 6C3C 4F32 23CB7 6635 80D2 8FE1 7724 9006 533F
+5804 60C4 6135 6EBA 7768 817B 5ADF 66B1 8ABD 4065
+7E0C 81A9 5B3A 2A65B
+88AE
+634F 63D1
+82F6
+5E07 26612 573C 67BF 6D85 75C6 8042 81EC 9667 556E
+60D7 55A6 655C 6E7C 83CD 9689 55EB 5D72 8E02 565B
+6470 69F7 8E17 954A 954D 5DAD 7BDE 81F2 931C 989E
+8E51 5699 8076 93B3 95D1 5B7C 3738 5B7D 6AF1 7C4B
+56C1 8616 9F67 23033 7CF1 8825 9448 7CF5 56D3 8B98
+8EA1 9477 9873 9480 4BC0
+5DD5
+9E1F 8311 3B64 8885 9CE5 5ACB 88CA 6A22 8526 5B1D
+892D 5B32 3735
+5C3F 8132
+599E
+2EA7 725B 6C7C
+5FF8 626D 72C3 7EBD 7084 94AE 7D10 83A5 9215 9775
+8842 42F4
+725C
+62C8 852B
+5E74 79CA 79E5 9C87 9B8E 9CB6 9ECF 9BF0
+6D8A 637B 6DF0 713E 8DC8 8F87 8F97 649A 64B5 78BE
+8F26 7C10 8E4D 6506 8E68 8E8E
+5344 5EFF 5FF5 59E9 5538 57DD 824C 9F30
+54D6 9D47
+56DC 60A8 42FB
+62F0
+810C
+5B22 5B43
+917F 91B8 91C0
+5A18
+5B81 549B 62E7 72DE 67E0 82E7 804D 5BCD 5BD5 752F
+5BD7 5BDC 5BE7 511C 51DD 5680 5B23 64F0 7370 6AB8
+85B4 8079 27B48 944F 9B21 9E0B
+6A63 77C3
+4F5E 4FAB 6CDE 6FD8
+6F9D
+5974 5B65 9A7D 7B2F 99D1
+4F2E 52AA 5F29 782E 80EC
+6012 5089 6419
+90CD 632A 689B 50A9 513A
+6A60
+8BFA 558F 611E 2272A 63BF 6426 903D 9518 643B 6992
+7A2C 7CD1 8AFE 8E43 61E6 61E7 7CE5 7A64 7CEF
+597B
+6E1C 3B09 6696 7156 7157 992A
+9EC1
+519C 4FAC 54DD 6D53 8113 79FE 8FB2 5102 8FB3 5665
+6FC3 6A82 71F6 81BF 857D 79AF 7A60 895B 91B2 6B01
+7E77
+5F04 630A 7651 9F48
+5973 9495 7C79 91F9
+6C91 6067 6712 8844 46BC
+759F 8650 7878 7627
+FDD0-310C
+5783 62C9 67C6 7FCB 83C8 641A 908B
+65EF 524C 782C 63E6 78D6
+5587 85DE
+814A 63E7 694B 760C 8721 874B 8FA2 8FA3 8772 81C8
+650B 7209 81D8 9B0E 74CE 9574 9BFB 881F 945E
+5566 6E82 97A1 56B9
+56D6
+808B
+4EC2 3539 4E50 53FB 5FC7 6250 6C3B 961E 738F 827B
+6CD0 7AFB 7833 697D 97F7 6A02 7C15 39A1 9CD3 9C33
+4E86 9979 990E
+6765 4F86 4FEB 5008 5D03 5F95 6D9E 5A61 5D0D 5EB2
+5FA0 68BE 6DF6 730D 83B1 90F2 68F6 741C 7B59 840A
+9028 94FC 7B82 42F1 28090 9338 9A0B 9BE0 9D86 9EB3
+553B 8D49 7750 775E 8D56 8CDA 6FD1 8CF4 983C 9842
+21096 765E 9D63 7028 702C 7C41 6AF4 3E0A 85FE 7669
+7C5F 8970
+52D2
+96F7 5AD8 7F27 757E 8502 64C2 3D62 6A91 7E32 790C
+956D 6AD1 74C3 7FB8 7927 7E8D 7F4D 881D 9433 8632
+8F60 513D 58E8 9458 9741 6B19 8646 7E9D 9F3A
+53BD 8012 8BD4 5792 7D6B 8142 50AB 8A84 6A0F 78CA
+78E5 854C 5121 4242 857E 58D8 3D7D 7657 6AD0 85DF
+7928 7045 8B84 863D 9478 9E13
+6CEA 6D21 7C7B 6D99 6DDA 7D2F 28024 9179 9287 981B
+982A 9311 48AE 6502 98A3 985E 426A 7E87 8631 79B7
+5841 561E 9C69
+635E 6488
+52B3 52B4 7262 7A82 54F0 5520 5D02 6D76 52DE 75E8
+94F9 50D7 562E 37A0 5D97 61A5 24A42 7646 78F1 7C29
+87E7 91AA 9412 985F 9ADD
+8002 8001 4F6C 54BE 59E5 6045 72EB 6833 8356 94D1
+41ED 92A0 6F66 6A51 8F51
+6D9D 70D9 8022 916A 5AEA 61A6 6F87 8EBC 6A6F 802E
+8EC2
+73EF 7853 266E8 7CA9 86EF 6725 9BB1
+779C
+5245 5A04 507B 5A41 6E87 50C2 697C 848C 5ED4 617A
+6F0A 6A13 71A1 8027 851E 877C 9071 802C 825B 87BB
+8B31 8EC1 9AC5 97BB 9ACF
+5D5D 6402 587F 5D81 645F 7BD3 750A 7C0D
+3537 964B 5C5A 6F0F 7618 9542 763A 763B 93E4
+55BD 560D
+5170 5C9A 62E6 680F 5A6A 60CF 5D50 9611 847B 84DD
+8C30 53B1 6F9C 5116 6593 7BEE 8934 61E2 71E3 71F7
+9567 95CC 74BC 85CD 8955 8B4B 2814F 5E71 6514 703E
+7C43 7E7F 8964 6595 6B04 7046 862D 7937 7C63 8974
+56D2 7061 8B95 8E9D 6B17 9484 97CA
+89C8 6D68 36E6 63FD 7F06 6984 6F24 7F71 9182 58C8
+61D2 89A7 3A5C 64E5 5B3E 61F6 5B44 89BD 432B 5B4F
+652C 7060 56D5 6B16 9872 7E9C
+70C2 6EE5 71D7 5682 6FEB 7201 721B 74D3 7224 946D
+7CF7
+7226 897D
+5577
+52C6 90CE 6B34 72FC 90DE 9606 658F 6879 3C62 7405
+5ACF 5ECA 7860 7A02 9512 6994 746F 7B64 8246 84C8
+870B 8EB4 8782 92C3 93AF 99FA
+6717 6716 70FA 365F 5871 6A03 84E2 8A8F 3BBE 6724
+57CC 5D00 6D6A 3AF0 83A8 20E98 8497 95AC
+5525 90D2
+3604
+5D1A 5844 68F1 695E 7890 7A1C 8F18 4244 8590
+51B7
+5030 580E 6123 7756 8E1C
+5215 675D 5398 5253 9A8A 60A1 68A8 68A9 68B8 7281
+740D 79BB 7C9A 8372 55B1 68C3 3D1D 7282 83DE 9E42
+527A 6F13 3E48 775D 7B63 7F21 8243 870A 20ED7 20F1D
+5AE0 5B77 76E0 8C8D 3992 6A06 7483 7CCE 84E0 92EB
+9CA1 9ECE 7F79 853E 26E99 9305 7BF1 7E2D 4527 87CD
+8935 569F 8B27 91A8 91D0 96E2 6584 3C00 74C8 85DC
+908C 93EB 9BEC 9D79 9EE7 56C4 8821 9A39 5B4B 5EF2
+6521 7055 5299 863A 9457 7A72 7C6C 7E9A 9A6A 9C7A
+9E1D
+793C 91CC 4FDA 5CDB 5CE2 5A0C 5CF2 6D6C 7406 9026
+9502 7CB4 88CF 8C4A 92F0 9CA4 5163 6FA7 79AE 9BC9
+87F8 91B4 9CE2 9090 9C67 6B1A
+529B 5386 5389 5C74 7ACB 540F 6738 4E3D 5229 52B1
+5456 575C 6CA5 4F8B 3578 5CA6 623E 67A5 6CB4 75A0
+82C8 96B6 4FD0 4FEA 3926 680E 75AC 7805 82D9 8D72
+8F79 3466 550E 60A7 6817 681B 6D96 7301 73D5 783A
+783E 79DD 8318 8354 90E6 5533 5A6F 7B20 7C92 7C9D
+8137 8385 8389 86B8 86CE 5088 51D3 53A4 68D9 75E2
+86E0 8A48 8DDE 96F3 53AF 585B 6144 642E 6EA7 925D
+9CE8 3B0F 66A6 6B74 746E 7D9F 849A 849E 8727 53B2
+8777 66C6 6B77 7BE5 4509 96B7 29D98 9D17 52F5 3EFA
+78FF 96B8 9B01 512E 5DC1 6FFF 7658 9398 56A6 58E2
+650A 66DE 6AD4 6ADF 701D 7204 72A1 74C5 8807 9E97
+6AEA 720F 74D1 76AA 76ED 77CB 792A 792B 79B2 85F6
+34A7 5137 7667 7930 7CF2 8823 882B 9DC5 9E9C 56C7
+6526 2789D 89FB 8E92 8F62 9148 6B10 8B88 2829B 8F63
+652D 74E5 9742 299C3 9C71 9C73 974B
+674E 6803 54E9 5A33 72F8 88E1 6AAA 9BCF
+4FE9 5006
+5217 52A3 51BD 52BD 39DC 59F4 6312 6D0C 54F7 57D2
+57D3 3920 3B5E 6835 6D56 70C8 8322 8FFE 6369 3B69
+730E 811F 86DA 88C2 716D 7759 8057 8D94 5DE4 98B2
+5120 9BA4 9D37 64F8 7375 72A3 8E90 9B1B 3B2F 9B23
+9C72
+6BDF 54A7 6318 70EE 731F
+64A9 8E7D
+8FBD 7597 804A 50DA 5BE5 5D7A 6180 6F3B 818B 5639
+5AFD 5BEE 5D9A 5D9B 6579 7360 7F2D 66B8 71CE 7499
+81AB 907C 3D73 7642 9E69 5C6A 5EEB 7C1D 7E5A 87DF
+8C42 8CFF 8E58 9410 85D4 98C9 9ACE 9DEF
+53FE 4126 948C 91D5 911D 61AD 84FC 77AD 66E2 957D
+7212
+5C25 5C26 7093 6599 5C1E 5ED6 6482 7AB7 9563
+720E
+6E9C 7198 8E53
+5218 6CA0 7544 6D41 6D4F 7409 7559 65C8 7571 786B
+88D7 28EE7 5AB9 5D67 65D2 84C5 998F 9A9D 69B4 7460
+84A5 905B 98D7 5289 746C 7624 78C2 954F 99E0 9E60
+6A4A 74A2 7581 9560 7645 87C9 295E9 99F5 56A0 61F0
+700F 938F 93A6 9E8D 85F0 93D0 98C0 9A2E 98C5 9C21
+9DB9 9A51
+39D5 67F3 6801 73CB 687A 7EFA 950D 925A 98F9 7DB9
+71AE 7F76 92F6 6A6E 5B3C 7F80
+516D 7542 7FCF 586F 5EC7 6F91 78DF 9E68 9724 993E
+96E1 9402 98C2 9B38 9DDA
+685E
+5941 5E18 601C 8FDE 6D9F 68BF 83B2 467A 9023 8054
+4EB7 5EC9 6E93 5332 55F9 5969 6169 6F23 7191 88E2
+899D 5286 5333 5652 5AFE 6190 69E4 78CF 806B 84EE
+9CA2 6FC2 6FD3 806E 878A 71EB 7E3A 7FF4 806F 81C1
+8595 8933 8B30 8E65 938C 9570 6AE3 7C3E 880A 9B11
+4965 942E 9C31 7C62 7C68
+655B 740F 8138 88E3 6459 7489 8539 5B1A 6582 3BEC
+81C9 913B 7FB7 895D 861E
+7EC3 70BC 604B 6D70 6B93 581C 3703 5AA1 3C68 6E45
+94FE 50C6 695D 7149 7453 8430 6F4B 7DF4 6FB0 932C
+6BAE 934A 93C8 3D91 7032 9C0A 861D 6200 373B 7E9E
+8068
+62CE
+53B8 6797 90BB 4E34 51A7 77DD 5549 5D0A 6DCB 667D
+7433 7CA6 75F3 7884 7B96 7CBC 5D99 6F7E 735C 9130
+96A3 65B4 66BD 71D0 7498 8F9A 9074 9716 77B5 78F7
+81E8 7E57 7FF7 9E90 8F54 58E3 7036 93FB 9CDE 9A4E
+9C57 9E9F
+342D 3A06 83FB 4E83 51DB 51DC 649B 5EE9 5EEA 61CD
+61D4 6F9F 6A81 6AA9 765B 765D
+541D 6061 608B 8D41 711B 8CC3 50EF 853A 6A49 81A6
+95B5 7510 7584 8E78 85FA 8E8F 8E99 8EAA 8F65
+826F 4FCD 51C9 6881 6DBC 690B 8F8C 7CAE 7CB1 589A
+7DA1 8E09 6A11 8F2C 7CE7
+4E21 4E24 34B3 5169 5521 5562 639A 813C 7DC9 873D
+88F2 9B49 9B4E
+4EAE 54F4 60A2 8C05 8F86 55A8 667E 6E78 91CF 8F0C
+8AD2 8F1B 9344
+7177 7C17
+3007 5222 7075 56F9 577D 590C 59C8 5CBA 5F7E 6CE0
+72D1 6624 670E 67C3 73B2 82D3 51CC 74F4 768A 7831
+79E2 7ADB 94C3 9E30 5A48 6395 68C2 6DE9 740C 7B2D
+7D37 7EEB 4345 7F9A 7FCE 8046 8232 86C9 8851 9675
+83F1 8A45 8DC9 8EE8 797E 9234 959D 96F6 9F84 420A
+7DBE 88EC 8506 970A 99D6 6FAA 9302 9B7F 9CAE 9D12
+9E77 3B21 71EF 4241 4516 8576 971B 971D 9F62 9BEA
+5B41 9143 9F61 6AFA 8626 91BD 9748 2331F 6B1E 7227
+24AE9 9EA2 4585 9F97
+5CAD 963E 888A 9886 9818 5DBA
+4EE4 53E6 5464 70A9
+4F36 84E4 9717 702E
+565C 64B8
+5362 5E90 5786 6CF8 7089 82A6 3B54 680C 80EA 8F73
+9E2C 7388 823B 9885 9C88 9B72 76E7 56A7 58DA 3820
+5EEC 650E 6ADA 7018 7379 74B7 66E5 6AE8 7210 74D0
+81DA 8606 77D1 7C5A 7E91 7F4F 826B 8826 8F64 946A
+9871 9AD7 9C78 9E15 9EF8
+5364 864F 63B3 9E75 7875 9C81 865C 5877 6EF7 6A10
+84FE 9B6F 64C4 6A79 78E0 9565 5695 64FC 7002 6AD3
+6C0C 8263 93C0 826A 942A 9465
+5725 752A 4F93 5774 5F54 5F55 9646 5CCD 52CE 8D42
+8F82 5A3D 6DD5 6DE5 6E0C 7849 9678 9E7F 3A90 6902
+742D 7984 4402 83C9 902F 50C7 5279 52E0 76DD 7769
+788C 797F 7A11 8CC2 8DEF 5876 5ED8 645D 6F09 7B93
+7CB6 21014 622E 6A1A 719D 8194 850D 89EE 8DA2 8E1B
+8F98 9181 3BDD 6F5E 7A4B 9304 9332 9334 7490 7C0F
+8557 87B0 8E57 8F46 9A04 298F1 9E6D 7C2C 7C36 93D5
+9BE5 9D66 9D71 9E93 93F4 9732 9A3C 7C59 9DFA 8642
+67A6 822E 9229 6F9B 6C07
+7F57 5570 9831 56C9
+7F56 7321 8136 6924 841D 8999 903B 8161 9523 7BA9
+9AA1 9559 87BA 7F85 89B6 93CD 5138 89BC 9A3E 21922
+651E 7380 6B0F 268C7 863F 908F 9A58 9E01 7C6E 947C
+9960
+5246 502E 84CF 88F8 8EB6 7630 3A61 3C01 8803 81DD
+66EA 7673
+6CFA 5CC8 6D1B 7EDC 9A86 6D1C 73DE 8366 7866 7B3F
+7D61 55E0 843D 645E 6F2F 7296 927B 96D2 99F1 9BA5
+9D3C 9D45 6FFC 277CC 7E99
+5A08 5B6A 5CE6 631B 683E 9E3E 8114 6EE6 92AE 9D49
+571D 5971 5B4C 5B7F 5DD2 6523 66EB 6B12 7053 7F89
+81E0 571E 7064 864A 947E 7674 7675 9E1E
+5375
+4E71 91E0 4E82
+62A1 6384
+4ED1 4F26 56F5 6CA6 7EB6 4F96 8F6E 502B 5707 5A68
+5D18 5D19 60C0 6DEA 966F 68C6 3DCD 8140 83D5 4201
+7DB8 8726 8E1A 8F2A 9300 9BE9
+57E8 7896 7A10 8023
+8BBA 6EA3 8AD6
+78EE
+9F99 5C78 5499 6CF7 663D 680A 73D1 80E7 830F 772C
+783B 7ADC 7B3C 804B 6E70 9686 6EDD 20F90 5D90 6F0B
+3863 7BED 856F 9F8D 7643 56A8 5DC3 5DC4 7027 7C3C
+93E7 66E8 6727 3C0D 6AF3 7216 74CF 8622 9733 77D3
+7931 7932 9F92 7C60 807E 882A 882C 8971 8C45 8E98
+9468 9747 4BBE 9A61 9E17
+5784 5785 62E2 9647 3D33 7BE2 5131 58DF 58E0 650F
+96B4 7AC9 9F93
+54E2 6335 6887 5FBF 8D1A
+69DE 7ABF
+9A74 95FE 90D8 6988 99BF 6C00 81A2 95AD 85D8 9DDC
+9A62
+5415 5442 4FA3 4FB6 6314 36CE 634B 635B 65C5 3B5A
+68A0 7963 7A06 94DD 5C61 7F15 7D7D 5C62 8182 5C65
+891B 92C1 8190 5122 7A5E 7E37 8938 7A6D
+5BFD 578F 5F8B 8651 7387 7EFF 20DC8 5D42 6C2F 6EE4
+844E 7DA0 7DD1 616E 7BBB 819F 52F4 7E42 6FFE 6AD6
+7208 9462
+7112
+7567 950A 7A24 3500 5719 3A3C 92DD 92E2 64FD
+FDD0-310D
+65EE 5477 560E 5620
+9486 5C1C 5676 9337
+5C15 738D
+5C2C 9B40
+6208 4EE1 572A 72B5 7EA5 20BEB 6213 8090 726B 7599
+54AF 7271 54E5 80F3 9E3D 5272 6401 88BC 20E9D 6ED2
+6228 6B4C 29FB7 9D10 9D1A 64F1 8B0C 9D3F 93B6
+5444 3837 4F6E 530C 630C 9601 9769 654B 3B58 683C
+8316 9B32 6105 81F5 86D2 55DD 5865 6EC6 845B 88D3
+89E1 9694 643F 69C5 8188 95A3 95A4 4213 9549 9788
+97D0 7366 8AFD 8F35 9ABC 9BAF 97DA 97B7 9A14 4601
+8F55
+54FF 8238
+4E2A 5404 867C 500B 784C 94EC 55F0 7B87
+5F41 6ACA
+4F85 8BE5 5793 59DF 5CD0 90C2 9654 6650 8344 8D45
+7561 7974 7D6F 8A72 8C65 8CC5
+5FCB 6539 7D60
+4E10 4E62 5303 5304 9623 675A 9499 76D6 6461 6E89
+9223 6224 6982 8462 8CCC 9691 6F11 84CB 3562 69E9
+69EA 74C2
+7ED9 7D66
+768B 7F94 7F99 9AD8 7690 2690E 9AD9 81EF 6EDC 69D4
+777E 818F 69F9 6A70 7BD9 7CD5 993B 6ADC 9DCE 9F1B
+9DF1
+5930 6772 83D2 641E 7F1F 66A0 69C0 69C1 3D46 7A3E
+7A3F 9550 7E1E 6ABA 85C1 85F3
+543F 544A 52C2 53DD 8BF0 90DC 796E 7970 9506 7170
+7B76 8AA5 799E 92EF
+97DF
+52FE 4F5D 6C9F 94A9 88A7 7F11 920E 6E9D 9264 7DF1
+7BDD 8920 97B2 97DD
+5CA3 72D7 82B6 67B8 73BD 8007 82DF 7B31 8008 8009
+86BC 8C7F
+5778 6784 8BDF 8D2D 57A2 59E4 5193 8329 591F 5920
+8A3D 5ABE 5F40 6406 8A6C 96CA 69CB 7179 89CF 9058
+6480 89AF 8CFC
+7518 5FD3 653C 6746 3DA5 7395 809D 8289 8FC0 5769
+6CD4 77F8 4E79 67D1 7AFF 82F7 75B3 9150 4E7E 7C93
+4E81 51F2 5C32 5C34 7B78 6F27 9CF1 5C36 5C37 9B50
+4EE0 625E 76AF 79C6 8866 8D76 687F 7B34 6562 7A08
+611F 8D95 6F89 64C0 6A44 7C33 9C14 9CE1 9C64
+5E72 65F0 6C75 76F0 7EC0 501D 51CE 6DE6 7D3A 8A4C
+5E79 9AAD 69A6 6A8A 8D11 8D63 8D1B 7068
+6839 8DDF
+54CF
+826E
+4E98 4E99 831B 63EF
+5188 7F53 51AE 521A 6760 7EB2 809B 5CA1 3B4E 7268
+7598 77FC 7F38 94A2 525B 7F61 5808 6386 91ED 68E1
+7285 583D 7DB1 7F41 92FC 93A0
+5C97 3F58 5D17 6E2F
+7135 7B7B 69D3 6205 6206
+522F 5E9A 754A 6D6D 3E74 8015 6404 713F 7D5A 83EE
+8D53 9E52 7DEA 7E06 7FAE 8CE1 7FB9 9D8A
+54FD 57C2 5CFA 632D 7EE0 803F 90E0 231B3 6897 8384
+3F98 7D86 4304 9CA0 9ABE 9BC1
+66F4 5829 6685 4C4D 4C6D
+63B6 6929
+4F30 5471 59D1 5B64 6CBD 6CD2 67E7 82FD 8F71 5502
+7F5B 9E2A 7B1F 86C4 83F0 89DA 8EF1 8EF2 8F9C 9164
+9232 7B8D 7B9B 5AF4 6A6D 443B 9B95 9D23
+9DBB
+5903 53E4 6262 6C69 8BC2 8C37 80A1 726F 2EE3 5503
+4026 7F5F 7F96 94B4 9AA8 5552 6DC8 8135 86CA 86CC
+8A41 9E44 5C33 6132 6BC2 9237 9989 9F13 9F14 560F
+6996 69BE 76B7 84C7 7A40 9E58 7CD3 7E0E 6FF2 76BC
+81CC 85A3 8F42 7014 76EC 77BD 9936 4D9C 8831
+56FA 6545 51C5 987E 580C 5D13 5D2E 688F 727F 68DD
+96C7 75FC 797B 7A12 9522 50F1 932E 9CB4 9BDD 9867
+5495 5CE0 9027 50A6 83C7 7BD0
+74DC 522E 80CD 681D 20D6F 9E39 8052 44B7 6B44 7171
+8D8F 5280 7DFA 92BD 98B3 8E3B 9D30 9A27
+53E7 518E 5250 526E 5BE1 4211
+5366 576C 8BD6 6302 5569 639B 7F63 7D53 7F6B 8A7F
+8902
+98AA
+5459 54BC 57DA 5D1E 90ED 581D 921B 9505 5613 588E
+7611 8748 5F49 35FB 6FC4 87C8 934B 5F4D
+56EF 56F6 56FB 56FD 5700 570B 5E3C 8158 5E57 6156
+6F0D 805D 8195 852E 8662 9998 27C12 4190
+679C 60C8 6DC9 7313 9983 6901 83D3 7CBF 7DB6 873E
+88F9 69E8 8F20 9301 991C 9439
+8FC7 904E
+556F
+4E56 63B4 6451
+62D0 67B4 67FA 27285 7B89
+592C 53CF 602A 39D4 6060
+5F52 572D 59AB 9F9F 89C4 7688 90BD 95FA 5E30 73EA
+80FF 8325 4E80 7845 4145 7A90 898F 5080 5AAF 691D
+88BF 5EC6 90CC 5AE2 646B 7470 95A8 9C91 5B00 69FB
+69FC 749D 81AD 879D 9F9C 9BAD 5DC2 6B78 9B36 74CC
+9A29 9B39 6AF7
+5B84 6C3F 6739 8F68 5E8B 4F79 5326 8BE1 20C53 579D
+59FD 6051 6531 7678 8ECC 9652 5EAA 9B3C 532D 796A
+6677 6E40 436F 86EB 3533 89E4 8A6D 53AC 3A33 4925
+87E1 77A1 7C0B
+6530 523D 523F 660B 7094 67DC 8D35 3A88 6842 6867
+7324 7B40 8CB4 8DEA 5331 84D5 528A 528C 5DA1 648C
+69F6 4210 4434 6A9C 77B6 7C02 6AC3 7650 79AC 8958
+9CDC 97BC 9C56 9C65
+6922
+5173 89C2 5B98 51A0 898C 500C 20D28 68FA 7AA4 8484
+95A2 761D 764F 89B3 95D7 9CCF 95DC 9C25 9C5E 89C0
+839E 9986 742F 75EF 7B66 7BA1 8F28 8218 9327 9928
+9CE4
+6BCC 4E31 8D2F 6CF4 60BA 60EF 63BC 6DAB 8CAB 60B9
+3D26 3BA1 797C 6163 645C 6F45 6A0C 9066 76E5 7F46
+465B 96DA 93C6 704C 721F 74D8 9E73 77D4 7936 7F50
+9475 9C79 9E1B
+4E28 200CC 886E 60C3 7EF2 889E 88AC 8F8A 6EDA 6EFE
+7DC4 84D8 78D9 8509 8F25 9CA7 25566 9B8C 9BC0
+68CD 7754 3665 7774 74AD 8B34
+5149 706E 4F8A 7097 709B 54A3 5799 59EF 6D38 6844
+70E1 80F1 832A 8F04 50D9 92A7 9EC6 299C9
+5E7F 5E83 72B7 5EE3 81E9 7377 2A1F5
+4FC7 73D6 901B 81E6 6497 29448
+709A 6B1F
+5DE5 5F13 516C 53B7 529F 653B 675B 4F9B 739C 7CFC
+80B1 5BAB 5BAE 606D 8EAC 9F9A 5311 5868 5E4A 6129
+89E5 7195 8EB3 78BD 9AF8 4CCD 89F5 9F8F 9F94
+5EFE 5DE9 6C5E 62F1 39EC 62F2 3B5F 6831 73D9 3F26
+8F01 92DB 978F 4C4B
+5171 8D21 7FBE 551D 8CA2 83BB 3536
+86A3 6150
+FDD0-310E
+5494 5496 5580 8849 64D6
+5361 4F67 80E9 9272
+57B0 88C3
+533C 3E2F 22208 67EF 7241 73C2 79D1 80E2 82DB 8F72
+75B4 7822 8DB7 68F5 8EFB 988F 55D1 6415 7290 7A1E
+7AA0 842A 9233 69BC 4426 9897 6A16 778C 78D5 4300
+874C 9312 8596 9198 9846 9AC1 791A
+58F3 63E2 6BBC 7FD7
+53EF 5777 37B9 5CA2 3ABC 70A3 6E07 5D51 6564 6E34
+5DB1 790D
+514B 523B 524B 52C0 52CA 5BA2 606A 20CED 5A14 5C05
+8BFE 20DB2 5801 6C2A 9A92 7F02 6119 6E98 951E 78A6
+7DD9 8250 8AB2 790A 9A0D 2A0ED
+5D59
+5F00 5952 63E9 950E 958B 4924 9426
+51EF 5240 57B2 607A 95FF 94E0 51F1 5274 6168 584F
+5D66 6137 6977 8488 8F06 5605 669F 9534 4057 9347
+93A7 95D3 98BD
+5FFE 708C 708F 6B2C 70D7 52D3 6112 613E 938E
+5C3B 9ADB
+4E02 6537 8003 62F7 6D18 6832 70E4 7A01 9C93 71FA
+94D0 7292 92AC 9760 9BB3 9BCC
+62A0 26B05 82A4 770D 527E 5F44 6473 7798 4071
+53E3 24618 52B6
+53E9 6263 6542 51A6 5BBC 5BC7 3C2F 91E6 7A9B 7B58
+6EF1 7789 8532 853B 7C06 9DC7
+520A 681E 52D8 9F9B 582A 5D41 6221 9F95
+519A 574E 4F83 780D 5058 57F3 60C2 83B0 6B3F 586A
+6B41 69DB 8F21 6ABB 9851 7AF7 8F57
+770B 884E 5D01 5888 78E1 77B0 95DE 77D9
+808E 80AF 80BB 57A6 6073 5543 8C64 9F88 58BE 9339
+61C7 9F66
+63AF 88C9 8903
+5FFC 95F6 780A 7C87 5EB7 21413 5ADD 5D7B 6177 6F2E
+69FA 7A45 41B2 7CE0 8EBF 93EE 9C47
+625B 6443
+4849
+4EA2 4F09 531F 56E5 6297 72BA 909F 7095 94AA 9227
+958C
+52A5 542D 5751 5994 962C 6333 7841 727C 785C 94FF
+787B 647C 8A99 92B5 40D8 935E 93D7
+625D 5233 77FB 67AF 80D0 90C0 54ED 684D 5800 5D2B
+35C4 5710 8DCD 7A9F 9AB7 26846 9BAC
+72DC 82E6
+3838 5E93 4FC8 7ED4 5EAB 79D9 8DB6 7105 55BE 7D5D
+88B4 88E4 7614 9177 5EE4 8932 56B3
+5938 59F1 8A87
+4F89 54B5 57AE 9299
+3404 630E 80EF 8DE8 9ABB
+823F
+6269 62E1 62EC 6304 6870 7B48 86DE 9614 843F 8440
+5ED3 9822 9AFA 6FF6 95CA 979F 61D6 64F4 9729 97B9
+9B20
+97D5
+39DF 84AF 64D3
+5DDC 51F7 5757 5FEB 4FA9 54D9 72EF 90D0 810D 584A
+3C6E 7B77 9C99 5108 58A4 5672 5EE5 736A 9136 81BE
+65DD 7CE9 9C60
+5726
+4E8F 5232 5CBF 609D 76D4 7AA5 8067 7ABA 8667 95DA
+985D 5DCB 862C
+594E 6646 9804 9997 55B9 63C6 45AF 9035 9108 9A99
+6223 668C 694F 6951 8475 9697 777D 9B41 8770 4906
+982F 367A 9368 9377 6AC6 85C8 9A24 5914 8637 8641
+5DD9 2A1B4 72AA 8EA8
+7143 8DEC 980D 8E5E
+5C2F 532E 6B33 559F 6126 6E83 8143 9988 5ABF 6127
+8489 7786 5633 5B07 6192 6F70 7BD1 8069 4646 6A3B
+806D 8562 8B09 7C23 8075 993D 7C44 9400 994B 944E
+4C0E
+5BBD 5BDB 5BEC 81D7 9ACB 9AD6
+6B35 6B3E 6B40 7ABE 4540
+7ABD 9467
+5764 6606 5803 5A6B 5D10 5D11 665C 7311 711C 7428
+83CE 88C8 9AE0 8C87 951F 9AE1 9E4D 872B 88E9 9AE8
+747B 890C 918C 9315 9CB2 9A09 9BE4 9D7E 9DA4
+6083 6346 9603 58F8 68B1 7871 7975 7A07 58FC 7A1B
+7D91 88CD 95AB 95B8 9F6B
+56F0 6D83 3AFB 774F
+5812 5C21 6F49 71B4
+5321 344C 52BB 8BD3 5329 54D0 6047 6D2D 90BC 6846
+7844 7B50 44B0 8A86 8EED
+5FF9 6282 72C2 8BF3 8ED6 8A91 9D5F
+593C 5123 61ED
+535D 5739 7EA9 909D 51B5 65F7 5CB2 6CC1 77FF 663F
+8D36 7716 7736 7D56 8CBA 8EE6 9271 58D9 8E80 913A
+9ECB 61EC 66E0 720C 77CC 7926 7A6C 7E8A 945B
+783F 7D4B 7B7A
+7A7A 369A 5025 57EA 5D06 60BE 6DB3 787F 7B9C 9313
+9D7C
+5B54 233FA 6050
+63A7 26048 979A
+8EBB
+FDD0-310F
+5677
+54C8 94EA
+86E4
+5964
+4E37
+8BC3 62B2 6B31 559D 8A36 55EC 881A
+79BE 5408 4F55 52BE 5392 548A 548C 59C0 6CB3 5CC6
+3A83 66F7 67C7 72E2 76C7 7C7A 7D07 90C3 9602 9978
+54EC 3A89 6546 6838 76C9 76CD 555D 3B71 6DB8 76D2
+79F4 8377 86B5 9F81 60D2 6E2E 83CF 8402 8A38 988C
+6941 6BFC 8A65 8C88 47A6 8F05 924C 9616 9C84 3561
+7186 9E56 9EA7 6F95 3FE5 981C 7BD5 7FEE 879B 9B7A
+7909 95D4 97A8 9F55 8988 9DA1 76AC 9449 9FA2
+4F6B 578E 8D3A 7103 8894 8CC0 55C3 7142 788B 7187
+8D6B 3D51 8910 9E64 3B1E 7A52 7FEF 58D1 764B 8B1E
+7200 9DAE 9DB4 974E 9E16 974F
+7CAD 974D
+548D 54B3 55E8
+8FD8 5B69 9826 9AB8 9084
+6D77 80F2 70F8 917C 91A2
+4EA5 598E 39E1 9A87 5BB3 6C26 55D0 9900 99ED 26926
+995A
+5870 56A1
+9ED2 9ED1 563F 6F76 28B46
+8320 84BF 5686 8585 85A7
+6BDC 869D 6BEB 6903 55E5 7346 8C89 5651 7354 8C6A
+295B8 5637 3B14 734B 8AD5 512B 568E 58D5 3819 6FE0
+7C47 8814 8B79
+597D 90DD
+53F7 36AA 3740 660A 6626 79CF 54E0 5CFC 604F 608E
+6D69 8017 6667 3B36 6DCF 5090 7693 6EC8 8055 865F
+9117 66A4 66AD 6F94 769C 769E 66CD 76A1 76A5 8583
+93AC 98A2 704F 9865 9C1D 705D
+7AD3
+9F41
+4FAF 3927 77E6 5589 5E3F 7334 9107 3B0B 8454 760A
+777A 7BCC 7CC7 7FED 9ABA 7FF5 936D 9931 9BF8
+543C 72BC
+540E 539A 5795 5F8C 6D09 90C8 9005 5820 8C5E 9C8E
+9C98 9B9C 9C5F
+5019
+4F44 70B6 9878 3937 86B6 9163 9807 5AE8 8C3D 61A8
+99A0 6B5B 9F3E
+9097 542B 51FD 5481 80A3 90AF 51FE 8677 5505 5705
+5A22 6D5B 5D21 6657 6892 6DB5 7113 7400 5BD2 5D45
+3B80 97E9 751D 7B68 4204 872C 6F8F 92E1 9B7D 97D3
+4E06 5388 7F55 6D6B 558A 961A 850A 3E01 8C43 9B2B
+361A
+6C49 5C7D 6C57 95EC 65F1 5CBE 54FB 57BE 608D 634D
+6D86 7302 3A8B 6658 6665 710A 839F 91EC 9588 7694
+7745 83E1 50BC 86FF 9894 99AF 6F22 872D 8C8B 6496
+66B5 71AF 92B2 92CE 61BE 64BC 24CC9 7FF0 8792 9837
+9844 99FB 96D7 701A 8B40 862B 9DBE
+516F 7233
+62EB 75D5 978E
+4F77 5F88 72E0 8A6A
+6068
+592F 3C20
+65BB 676D 82C0 8FD2 7ED7 73E9 7B10 822A 86A2 4615
+9883 8CA5 7B55 7D4E 980F 28048 9B67
+6C86
+57B3
+4EA8 54FC 6099 5548 811D
+3530 59EE 6046 6052 6841 70C6 80FB 9E3B 6A2A 6A6B
+8861 9D34 8605 9445
+583C
+6DA5 9D46
+4E6F 5322 864D 547C 5780 5FFD 6612 66F6 6CD8 6057
+70C0 82F8 8F77 532B 553F 60DA 39FE 6DF4 8656 8EE4
+5611 5BE3 6EF9 44E4 96D0 5E60 622F 6B51 27A53 81B4
+8B3C
+56EB 6287 5F27 72D0 80E1 58F6 74F3 96BA 20D31 58F7
+659B 7100 35C5 5596 58FA 5AA9 6E56 7322 7D57 6430
+695C 7173 745A 846B 561D 2430D 9E55 69F2 7BB6 851B
+8774 885A 9B71 7E20 879C 9190 9836 89F3 9378 992C
+4B4C 9D60 702B 9B0D 9C17 9D98 9DA6
+4E55 6C7B 864E 6D52 4FFF 7425 8400 865D 6EF8
+4E65 4E92 5F16 6236 6237 6238 3E26 51B1 51B4 5E0D
+62A4 6C8D 6CAA 8290 5CB5 6019 623D 6608 6791 6018
+795C 7B0F 5A5F 6248 74E0 55C0 695B 7D94 96FD 5AED
+5AEE 6462 6EEC 9120 69F4 71A9 8530 9CF8 7C04 9359
+569B 9E71 8B77 9CE0 97C4 9800 9C6F 9E0C
+4E4E 7C90 552C 7CCA 933F 9BF1
+82B1 82B2 54D7 5629 848A 9335
+534E 3572 3B49 59E1 9A85 91EA 91EB 94E7 83EF 6433
+6ED1 733E 380F 398A 64B6 78C6 92D8 8550 8796 8B41
+93F5 9A4A 9DE8
+5316 5212 3566 593B 3577 6779 753B 8BDD 6866 5A73
+5D0B 756B 7575 89DF 8A71 5283 6466 5AFF 5B05 69EC
+6F85 6A3A 8AE3 7E63 8219 9ECA 8B6E
+57D6 5A72 691B 7874 7CC0 8AAE 748D
+5419 5268 8020 952A 5290 9343 5684 8C41 6509 9A1E
+4F78 6D3B 79EE 79F3
+706B 4F19 90A9 94AC 9225 5925 6F37
+6C8E 6216 8D27 549F 7809 4100 4FF0 6347 7713 9584
+20D7E 639D 83B7 8CA8 60D1 6E71 7978 65E4 6947 3A2F
+798D 84A6 35F2 596F 970D 6FE9 7372 8B0B 6AB4 956C
+56AF 7016 77C6 7A6B 4C5B 66E4 802F 81DB 8267 85FF
+8816 56BF 7668 77D0 944A 9743
+6000 5F8A 6DEE 69D0 8E1D 61D0 8922 8931 3733 3822
+61F7 7024 6AF0 8032 8639
+574F 54B6 8AD9 58CA 58DE 863E
+7070 39D1 8BD9 54B4 6062 62FB 6325 6D03 867A 6656
+70E3 73F2 8886 8C57 5A4E 5645 5A88 63EE 3DC7 7FDA
+8F89 6689 694E 7147 8A7C 9693 5E51 7773 7988 649D
+5655 7FEC 8918 8F1D 9EBE 5FBD 7008 96B3 8633 9C34
+56D8 56DE 56EC 4F6A 5EFB 605B 6D04 5EFD 70E0 8334
+8698 8FF4 75D0 9025 86D4 86D5 8716 9BB0
+6094 6BC0 6BC1 26799 6BC7 6A93 71EC 8B6D
+5349 6C47 4F1A 8BB3 6CCB 54D5 21726 6D4D 7ED8 8294
+8BF2 605A 6075 70E9 835F 8D3F 5F57 6666 79FD 5599
+60E0 6E4F 7D75 7F0B 7FD9 9613 532F 5F59 5F5A 3963
+6703 6ED9 8A6F 8CC4 9892 50E1 5612 3A39 8AA8 571A
+5BED 6167 6193 66B3 69E5 6F53 7623 8527 49E5 5666
+5B12 5FBB 6A5E 6BA8 6FAE 6FCA 7369 8559 8AF1 982E
+71F4 74AF 7BF2 8588 8589 992F 5696 77BA 7A62 7E62
+87EA 3B29 6AD8 7E6A 7FFD 85F1 8B53 5136 93F8 95E0
+5B48 942C 9767 8B7F 986A
+5C77 7073 74A4 61F3
+72BF 6B53 9D05 3E55 9D4D 56BE 61FD 737E 9144 8B99
+8C9B 9A69
+73AF 5CD8 6D39 72DF 90C7 6853 8341 5BCF 7D59 8408
+8411 96C8 7D84 7FA6 8C86 926E 953E 571C 5B1B 5BF0
+6FB4 7F33 49A1 961B 74B0 8C72 9370 956E 9E6E 7CEB
+7E6F 8F58 9436 95E4 9B1F 74DB 4D09
+7F13 4220 7DE9 650C
+5E7B 5942 8092 5950 5BA6 5524 6362 6D63 6DA3 70C9
+60A3 6899 7115 559A 559B 5D48 610C 63DB 6E19 75EA
+7746 902D 3B07 3B0A 7165 744D 8C62 6F36 7613 69F5
+9CA9 64D0 6FA3 9BC7 85E7 9C00
+6B22 77A3 6B61
+660F 662C 8364 5A5A 60DB 6DBD 960D 68D4 6B99 7767
+8477 776F 95BD
+5FF6 6D51 68A1 9984 581A 6E3E 743F 9B42 991B 7E49
+8F4B 4B9D 9F32
+9BF6
+8BE8 4FD2 5031 5702 638D 6DF7 711D 6EB7 6141 89E8
+8AE2
+5DDF 3835 8093 8841 8352 671A 5843 614C 3B3B
+7687 505F 51F0 55A4 582D 5A93 5D32 5FA8 60F6 6E5F
+968D 9EC3 9EC4 697B 714C 745D 845F 9051 953D 58B4
+6F62 735A 7BC1 7BCA 824E 8757 71BF 749C 8AFB 7640
+78FA 417F 7A54 9360 992D 9CC7 7C27 87E5 97F9 8DAA
+9A1C 9404 9C09 5164 9C51 9DEC
+6033 604D 70BE 5BBA 6644 595B 8C0E 5E4C 8A64 7180
+4420 8B0A 6ACE
+6130 3A2A 6EC9 69A5 769D 66C2 93A4 76A9
+6643 7E28
+53FF 543D 544D 7074 8F70 54C4 8A07 70D8 8EE3 63C8
+6E39 7122 7861 8C3E 29420 8F37 85A8 9367 569D 8F5F
+4EDC 5F18 5985 7EA2 5430 5B8F 6C6F 7392 7EAE 95F3
+5B96 6CD3 57AC 5A02 6D2A 7AD1 427A 7D05 82F0 8679
+5CF5 6D64 7D18 7FC3 803E 836D 7854 7D2D 8C39 9E3F
+6E31 7AE4 7CA0 921C 958E 7D8B 7FDD 8452 8453 8C3C
+6F42 28306 9277 9783 9B5F 92D0 5F4B 9710 857B 971F
+9D3B 9EC9 2410F 9ECC
+664E 3B34 55CA
+8BA7 8A0C 95A7 6494 6F8B 6F92 92BE 95C2 9B28
+FDD0-3110
+4E0C 22A66 8BA5 51FB 5209 53FD 9965 4E69 520F 673A
+7391 808C 573E 77F6 9E21 6785 82A8 54AD 59EB 525E
+5527 59EC 5C50 79EF 7B04 8FF9 98E2 57FA 7EE9 559E
+5D46 5D47 6567 671E 7284 7B53 7F09 8D4D 52E3 55D8
+7578 7A18 8DE1 8DFB 9CEE 50DF 20F3B 6BC4 7B95 9288
+5630 69E3 757F 7A3D 7DDD 89ED 8CEB 8EB8 9F51 58BC
+6A5F 6FC0 74A3 7A4D 9324 64CA 78EF 79A8 7C0A 7E3E
+7F81 8940 8CF7 96AE 6AC5 802D 8E5F 96DE 8B4F 913F
+97F2 9D8F 8B64 9416 9951 8E8B 97BF 9DC4 9F4E 7F87
+9447 8640 8989 9459 9F4F 7F88 9E04 898A
+4EBC 53CA 4F0B 5409 7EA7 5373 5C8C 5F76 5FE3 6781
+6C72 7680 4E9F 4F76 8BD8 9491 537D 59DE 6025 72E4
+90C6 63E4 75BE 768D 7B08 7D1A 810A 4798 506E 5359
+5EB4 3B72 710F 89D9 8C3B 35CA 68D8 6E52 96C6 5849
+5AC9 6131 6222 696B 6975 6B9B 8D8C 69C9 8024 818C
+84BA 92A1 35F1 6483 6F57 7620 799D 7BBF 8E16 9E61
+5DAF 6A76 6FC8 8540 878F 64EE 6A9D 857A 8E50 9353
+85C9 894B 8265 7C4D 8F5A 93F6 4CED 9735 9DBA 9DD1
+96E6 96E7
+51E0 5DF1 4E2E 5980 72B1 6CF2 866E 6324 638E 9C7E
+5E7E 39B8 621F 9218 5D74 9E82 9B62 64A0 64E0 7A56
+87E3 9B55
+2E95 5F50 5F51 65E1 8BA1 8BB0 4F0E 7EAA 5756 5993
+5FCC 6280 5242 5B63 82B0 9645 54DC 578D 5CDC 65E2
+6D0E 6D4E 7D00 830D 8A08 5264 7D12 7EE7 8324 8360
+89CA 8A18 5048 5BC2 5BC4 3831 5F9B 394D 60B8 65E3
+689E 6E08 796D 5848 60CE 3ED1 4400 81EE 517E 75F5
+7D99 846A 8507 88DA 66A8 6F03 6F08 7A29 7A4A 84DF
+8900 8A8B 8DFD 969B 9701 9B3E 9C9A 66A9 7A37 8AC5
+9CAB 5180 5291 66C1 7A44 9AFB 568C 6A95 6FDF 7F7D
+858A 89AC 6AB5 3E04 85BA 9D4B 9F4C 61FB 7660 7A67
+7E4B 9AA5 9BDA 7031 7E7C 860E 29949 9C40 862E 973D
+9C36 9C3F 863B 9C6D 9A65
+4EBD 8F91 6A2D 8F2F 5EED 766A
+52A0 4E6B 5939 4F3D 593E 4F73 62B8 62C1 6CC7 3E62
+67B7 6BE0 6D43 73C8 8304 8FE6 57C9 5BB6 6D79 75C2
+689C 7B33 801E 8888 50A2 7333 8DCF 20EA2 728C 8175
+846D 926B 5609 927F 9553 8C6D 8C91 29D9B 93B5 4552
+9E9A
+573F 5FE6 6274 90CF 550A 605D 835A 90DF 621B 83A2
+94D7 621E 86F1 88B7 988A 3B96 86FA 88CC 8DF2 9782
+9904 92CF 982C 9830 9D36 9D4A
+7532 4EEE 5CAC 53DA 73BE 80DB 659A 8D3E 94BE 5047
+5A7D 5FA6 659D 6935 8CC8 9240 698E 69DA 7615 6A9F
+4EF7 9A7E 67B6 22C4C 5AC1 5E4F 69A2 50F9 99D5
+7A3C 7CD8
+7596 9636 7686 63A5 63B2 23D8F 75CE 79F8 5588 5826
+5A98 63ED 6904 6E5D 813B 83E8 8857 968E 55DF 5AC5
+716F 40C8 7A2D 8754 64D1 7664 8B2F 9D9B
+5369 536A 5B51 5C10 8BA6 8282 5226 5227 52AB 5C8A
+523C 351A 52BC 6605 6770 758C 3636 36C3 62EE 6D01
+7ED3 5022 6840 8871 8A10 8FFC 507C 5A55 5D28 6377
+83AD 5091 55BC 3A17 4039 7D50 7D5C 88BA 9889 5D65
+3A29 696C 6976 6ED0 776B 7BC0 8710 874D 8A70 9263
+9B5D 622A 69A4 78A3 7AED 26D74 9C92 6F54 7FAF 84F5
+8AB1 8E15 978A 5E6F 937B 9B9A 5DC0 6AED 881E 8818
+883D
+6BD1 5A8E 89E3 89E7 98F7 6A9E
+4E2F 4ECB 5424 5C95 3839 5E8E 6212 5C46 5C4A 73A0
+82A5 754C 754D 75A5 780E 8BEB 501F 6088 86A7 8878
+5FA3 583A 6950 743E 86F6 7297 8AA1 9AB1 9B6A 892F
+9385 8EA4
+59D0 685D
+4EA4 827D 8281 59E3 5A07 5CE7 6D47 90CA 9A84 80F6
+832D 832E 6912 7126 86DF 8DE4 50EC 5604 213ED 8660
+9C9B 5B0C 5D95 5DA3 618D 6F86 81A0 71CB 81B2 8549
+7901 7A5A 9BAB 9D41 9E6A 7C25 87ED 8F47 940E 9DCD
+9A55 9DE6 9DEE
+3B42 81EB 89D2 4F7C 4FA5 6054 6322 72E1 7EDE 997A
+6341 6648 70C4 768E 77EB 811A 94F0 6405 6E6B 7D5E
+527F 656B 6E6C 714D 8173 8CCB 50E5 6477 669E 8E0B
+9278 9903 510C 528B 5FBA 649F 64B9 5FBC 61BF 657D
+657F 71DE 7F34 96A6 66D2 74AC 77EF 76A6 87DC 7E73
+8B51 5B42 3A70 27088 652A 705A 9C4E
+53EB 544C 5CE4 630D 8A06 73D3 7A8C 8F7F 8F83 654E
+6559 7A96 3C3E 6ED8 8F03 5602 5626 65A0 6F16 9175
+564D 5DA0 6F50 566D 5B13 7365 85E0 8DAD 8F4E 91AE
+8B65 3B2D 76AD 91C2
+9D64 6AF5 7E90
+4E29 52FC 7EA0 673B 725E 7A76 7CFA 9E20 7CFE 8D73
+28CCA 9604 557E 63C2 63EA 841B 63EB 9CE9 644E 6A1B
+9B0F 9B2E
+4E5D 4E45 4E46 4E63 597A 7078 7396 820F 97ED 7D24
+9152 9579 97EE
+531B 65E7 3EA9 81FC 548E 759A 4192 67E9 67FE 5003
+6344 6855 5313 53A9 6551 5AA8 5C31 5EC4 8205 50E6
+5ECF 5ED0 6166 6BA7 9E6B 820A 5336 9BE6 9E94 9F68
+9DF2
+6C63 6766 6B0D
+620B 5978 5C16 5E75 575A 6B7C 95F4 51BF 6214 73AA
+80A9 8270 59E6 59E7 517C 76D1 5042 5805 60E4 3B74
+730F 7B3A 8C5C 6E54 724B 7F04 83C5 83FA 9593 641B
+6937 693E 714E 728D 744A 788A 7F23 844C 8C63 76E3
+7777 7B8B 84B9 6A2B 719E 7DD8 9CA3 9CFD 9E63 71B8
+2585D 7BEF 7E11 8551 8573 8271 9930 99A2 9E89 7010
+97AC 97AF 9CD2 791B 4320 89B8 9D73 7038 9427 6AFC
+6BB2 9DBC 97C0 9C39 56CF 8643 946F 97C9
+56DD 62E3 67A7 4FED 67EC 5039 6338 6361 7B15 8327
+51CF 526A 6898 68C0 583F 63C0 63C3 691C 6E1B 6E55
+7751 7877 8A43 950F 5F3F 6695 7450 7B67 7B80 7D78
+88E5 8C2B 8DBC 6229 622C 3A35 78B1 5109 7FE6 64BF
+6AA2 2372D 8B07 8E47 77BC 7906 7C21 85C6 8947 8949
+8B2D 7E6D 9B0B 9E78 703D 8812 9417 9C0E 5297 9E7B
+7C5B 8B7E 9E7C 897A
+89C1 4EF6 898B 996F 5251 5EFA 6D0A 726E 8D31 4FF4
+5263 682B 6DA7 73D4 8230 8350 5065 5271 5FA4 6E10
+8C0F 91FC 5BCB 6E85 81F6 88B8 8DF5 65D4 6957 6BFD
+249E3 8171 8465 8CCE 9274 952E 50ED 3A34 6997 6F38
+528D 528E 3D4E 6F97 7BAD 7CCB 852A 8AD3 8CE4 8D9D
+8E10 8E3A 5292 5294 8AEB 92FB 991E 77B7 78F5 85A6
+87B9 9373 9375 64F6 6FFA 7E5D 3C04 89B5 93E9 7033
+8266 8B7C 8F5E 9431 9451 9452 946C 9473
+5F45 58B9 6A7A 7900 6BB1
+5DFE 4ECA 65A4 9485 5153 91D1 6D25 77DC 89D4 57D0
+73D2 7D1F 8355 887F 60CD 583B 7B4B 91FF 5D9C 9E76
+9EC5 895F
+4EC5 5C3D 4FAD 537A 5DF9 7D27 5807 83EB 50C5 53AA
+8C28 9526 5AE4 5ED1 6F0C 76E1 7DCA 9991 69FF 747E
+84F3 5118 9326 8B39 9949
+4F12 52A4 52B2 5997 6783 8FD1 8FDB 52C1 6D55 6649
+664B 6D78 70EC 8369 8D46 552B 740E 7972 9032 5BD6
+6422 6E8D 7981 7F19 9773 5890 3A37 3B10 669C 7468
+50F8 51DA 6B4F 6BA3 89D0 5664 3B1C 6FC5 74A1 7E09
+8CEE 568D 5B27 3BF2 6FDC 71FC 74B6 85CE 89B2 8D10
+9F7D
+91D2 781B 743B 58D7
+6C5F 59DC 5C06 6D46 7555 8333 8C47 5C07 757A 8441
+646A 7FDE 50F5 6F3F 8780 58C3 7F30 6A7F 6BAD 8591
+87BF 9CC9 7585 7913 7586 7E6E 97C1 9C42
+8BB2 5956 6868 508B 5968 848B 596C 69F3 734E 8199
+8523 8029 4243 8B1B 985C
+531E 5905 5F1C 6D1A 7EDB 964D 5F36 7D73 88B6 52E5
+9171 5D79 647E 6EF0 5F4A 236A6 729F 7CE1 7CE8 91A4
+8B3D 91AC
+5320 6762 6AE4
+5755 5759 5DE0 4EAC 6CFE 7ECF 4EB0 79D4 830E 6D87
+834A 5A5B 60CA 65CC 65CD 7304 7D4C 8396 6676 7A09
+8148 8346 83C1 7CB3 7D93 844F 5162 7CBE 8059 9CB8
+9D5B 9BE8 9D81 9D84 9E96 9F31 9A5A 9EA0
+4E95 4E3C 522D 362B 5753 5B91 6C6B 9631 6C6C 80BC
+5244 7A7D 9888 666F 981A 5106 5E5C 61AC 66BB 71DB
+749F 9838 61BC 74A5 87FC 4718 8B66
+598C 51C0 5F2A 5F84 4FD3 205CA 6D44 80EB 8FF3 501E
+51C8 5F33 5F91 75C9 7ADE 5A59 5A67 6871 68B7 6DE8
+811B 9015 291D5 7ADF 75D9 7AE7 9753 50B9 656C 3B0C
+7AEB 9756 5883 734D 8AA9 8E01 9759 477C 975A 955C
+975C 66D4 6FEA 701E 93E1 7AF6 7AF8
+775B 6A78 71DD
+51E5 521F 6285 530A 5C45 62D8 6CC3 72D9 9A79 82F4
+6336 75BD 75C0 7717 7820 7F5D 5A35 5A6E 5D0C 63AC
+68AE 6DBA 9671 6910 741A 8152 83F9 8D84 8DD4 9514
+96CE 824D 871B 88FE 8E18 8E19 92E6 99D2 9B88 9D21
+97A0 97AB 9D8B
+26951 5C40 3632 6CE6 4FB7 72CA 6854 6BE9 5579 5A45
+6DD7 7117 6908 6BF1 6E68 83CA 90F9 7291 8F02 50EA
+7CB7 8DFC 8ACA 8D9C 8EB9 95B0 6A58 6A8B 99F6 4CD4
+9D59 8E6B 9D74 5DC8 9DAA 861C 9F33 9A67
+5480 5F06 6CAE 4E3E 6319 8392 6907 6989 6998 7B65
+9F83 849F 8065 8209 8E3D 64E7 9F5F 6AF8 6B05
+53E5 5DE8 4E6C 5DEA 8BB5 5177 59D6 5CA0 6007 6010
+601A 62D2 62E0 6D30 90AD 661B 6B6B 70AC 82E3 949C
+4FF1 5028 5036 51A3 5267 79EC 57E7 57FE 60E7 636E
+7C94 801F 86B7 8893 728B 8A4E 8DD9 8DDD 98D3 8C66
+9245 952F 5BE0 6133 7AAD 805A 8661 5287 52EE 5C66
+8E1E 99CF 58C9 61C5 64DA 6FBD 7AB6 422E 92F8 9B94
+5C68 907D 98B6 8C97 7C34 8E86 91B5 61FC 943B 3B2C
+77E9 7220 8977
+5658 6485 64A7 5C69 8E7B
+4E85 2010C 5B52 5B53 51B3 5214 6C12 8BC0 6289 6C7A
+5F21 3B48 6CEC 73A6 73A8 82B5 6317 73CF 75A6 7804
+7EDD 8673 89C9 5014 6354 6B2E 8697 5D1B 6398 658D
+6877 6B8C 8990 89D6 8A23 8D7D 8DB9 4848 5095 53A5
+3B7E 7133 7D55 7D76 899A 8D89 902B 920C 37F2 5282
+3522 52EA 7474 8C32 99C3 5DA5 61B0 71A6 7234 7357
+761A 9D02 9D03 5671 61A0 6A5B 6A5C 855D 8568 7235
+81C4 9562 87E8 87E9 5C6B 8B4E 8E76 8E77 9D8C 5337
+56BC 7211 77CD 89BA 940D 941D 721D 89FC 5F4F 6204
+652B 7383 9DE2 6B14 77E1 9FA3 28C1C 8C9C 8EA9 9481
+59E2 5A1F 6350 6D93 7106 8127 74F9 9E43 88D0 52EC
+48FA 954C 93B8 9D51 942B 8832
+5377 545F 5E23 57CD 6372 83E4 9529 3DF7 9308 81C7
+52B5 5946 5DFB 5026 52CC 684A 72F7 7EE2 96BD 6DC3
+7737 774A 7D6D 7F65 45AD 9104 7760 7D79 96CB 98EC
+21840 617B 8528 990B 7367 7E33 7F82
+519B 208D5 541B 5747 36AC 6C6E 59F0 8ECD 94A7 8690
+8880 687E 76B2 8399 83CC 921E 7885 76B8 76B9 89A0
+9281 929E 9CAA 9E87 9355 9BB6 9E8F 9E95
+5441 4FCA 3F59 57C8 5CFB 6343 6D5A 90E1 9656 9982
+9A8F 35A5 6659 710C 73FA 2797A 347A 68DE 756F 7AE3
+3766 41F9 7B98 7B9F 8720 28318 5101 3559 9915 5BEF
+61CF 71C7 6FEC 99FF 9D54 9D58 6508 4551 651F
+2E86 5182 518B 5770 6243 57DB 7D45 99C9 99EB 860F
+8614
+518F 56E7 38A0 6CC2 7085 4FB0 70AF 8FE5 6D7B 9008
+70F1 489B 7A98 988E 715A 7D97 50D2 715B 71B2 6F83
+8927
+FDD0-3111
+4E03 6C8F 8FC9 59BB 67D2 501B 51C4 6816 6864 5A38
+60BD 687C 6DD2 90EA 6532 671F 68F2 6B3A 3C66 840B
+86E3 50DB 5601 617D 69BF 6F06 7DC0 617C 69ED 25250
+8AC6 8AFF 970B 45E9 8E4A 3B24 9B4C 4953 93DA 9D88
+4E93 9F50 573B 5C90 5C93 5FEF 4E9D 5176 5947 6589
+6B67 7541 7941 80B5 82AA 4FDF 75A7 7947 7948 7AD2
+5258 658A 65C2 8006 8110 8691 8694 869A 9880 57FC
+5D0E 5E3A 6391 6DC7 7309 7566 8DC2 8EDD 91EE 9A90
+9A91 68CA 68CB 7426 742A 8401 8415 86F4 612D 7881
+7895 797A 44C5 951C 980E 65D7 7CB8 7DA5 7DA6 7DA8
+44EB 871D 871E 9B3F 9F4A 7482 8E11 79A5 8572 9321
+9CAF 61E0 6FDD 2A5C6 6AB1 6AC0 24A8C 81CD 85C4 9A0E
+9A0F 9CCD 4C07 9BD5 9D78 9D80 9E92 7E83 8269 8604
+8810 9B10 9C2D 7382 9EA1
+4E5E 4F01 5C7A 5C82 9094 542F 5447 675E 7398 76C0
+8291 5518 8C48 8D77 5553 5554 5A4D 555F 7EEE 6675
+68E8 410E 7DAE 7DBA 8AEC 95D9
+6C14 8BAB 5FD4 6C17 6C54 5F03 6C7D 77F5 8FC4 546E
+6CE3 7081 76F5 829E 54A0 5951 780C 6814 6B2B 6C23
+8A16 552D 5921 68C4 6E46 6E47 789B 847A 6456 66A3
+78B6 5650 6187 7508 27858 5668 61A9 78DC 78E7 78E9
+468D 7F4A 87FF 9F1C
+7F3C 621A 6E0F 7DD5 8904 87A7 7C2F 7C31 7C4F
+6390 845C
+62E4
+8DD2 9160
+5736 51BE 34E4 5E22 6070 6D3D 6B8E 7848 6118 9AC2
+9790
+767F 21D90 49A7 807A
+4E14
+5207 59BE 602F 5327 7A83 90C4 20CB5 608F 6308 6D2F
+3932 60EC 6DC1 7B21 611C 86EA 3966 6705 7BA7 7DC1
+9532 21424 7BCB 8E25 7A55 9365 85D2 9BDC 9411 7ACA
+2383A
+82C6 503F 5AAB 7C61
+6084 7857 90FB 5D6A 8DF7 5281 6572 6BC3 8E0D 9121
+9125 9539 589D 981D 58BD 5E67 22FE3 6A47 71C6 7F32
+9AB9 78FD 936B 936C 7E51 8DAC 8E7A 9430
+4E54 4FA8 6865 834D 835E 785A 55AC 83EC 50D1 8C2F
+563A 5AF6 376F 6194 9792 6A35 6A4B 854E 7644 4009
+77A7 7904 4397 8DAB 85EE 9408 97BD 9866 2710D
+5DE7 91E5 6100 9ADC
+4FCF 8BEE 5CED 5E29 7A8D 9657 6BBB 7FD8 8A9A 9ADA
+50FA 64AC 64BD 9798 97D2 7AC5 7FF9 8B59 8E88 3681
+69D7 729E
+3400 4E18 4E20 20C0B 5775 36B1 3CCB 90B1 6058 79CB
+79CC 86AF 5A9D 6978 8429 9E59 7BCD 7DE7 84F2 8775
+7A50 8DA5 4A02 9CC5 87D7 97A6 97A7 9C0C 9C0D 9D96
+8824 9F9D
+53F4 56DA 624F 72B0 738C 6C53 808D 6C42 866C 6CC5
+42B5 866F 4FC5 89D3 8A04 8A05 914B 91D3 5512 3797
+3939 3B5D 6D57 7D0C 91DA 6882 6B8F 6BEC 7403 838D
+8D47 900E 9011 5D37 5DEF 3962 6E1E 6E6D 76B3 76DA
+5DF0 716A 7D7F 86F7 88D8 9052 89E9 8CD5 7486 8764
+92B6 9194 9B82 9F3D 9BC4 9C3D
+641D 7CD7
+91FB 8612
+5343 4EDF 5731 5732 5977 6266 6C58 9621 4F65 5C8D
+6744 6C67 828A 8FC1 6B26 74E9 81E4 833E 948E 62EA
+7275 7C81 515B 60AD 8C38 94C5 5A5C 5B6F 727D 91FA
+6394 8688 8C26 9206 96C3 50C9 6106 7B7E 925B 9A9E
+9E50 6173 6434 6481 7B9E 8AD0 9077 8930 8B19 9845
+6AB6 6510 6ACF 7C3D 9D6E 5B45 6513 9A2B 6511 9B1D
+9B1C 3A77 7C64 97C6
+4EF1 5C92 5FF4 6272 62D1 524D 94A4 6B6C 8654 94B1
+94B3 63AE 8EE1 5A8A 63F5 9210 976C 9257 5898 69A9
+7B9D 92AD 6F5B 6F5C 7FAC 6A6C 8541 9322 9ED4 9EDA
+6FF3 9A1A 9A1D 704A 9C2C
+51F5 80B7 6D45 6DFA 8125 55DB 5D70 69CF 8181 8738
+9063 8C34 7F31 7E7E 8B74
+6B20 520B 3438 82A1 4FD4 5029 6093 831C 5811 5094
+5D4C 68C8 6920 614A 7698 5879 371E 37FB 6B49 7DAA
+84A8 69E7 7BCF 8533 8F24 5119 7BDF 58CD 7E34 4945
+9C1C
+7ACF 9386 93F2 7C56 9453
+4EB2 4FB5 94A6 887E 9A8E 5A87 5D5A 6B3D 7D85 8A9B
+5D94 89AA 9849 99F8 9BBC 5BF4
+3626 5E88 3A81 82A9 82B9 57C1 73E1 79E6 8039 8699
+6366 7434 7439 83E6 83F3 9219 96C2 52E4 55EA 5AC0
+6EB1 79BD 9772 616C 5659 65B3 9CF9 61C4 3A52 64D2
+6FBF 763D 8793 61C3 6A8E 9B35 8804 9D6D
+5745 6611 7B09 68AB 8D7E 5BD1 9513 5BDD 5BE2 92DF
+87BC
+5422 5423 3908 628B 6C81 551A 63FF 83E3 29088 6407
+64B3 421C 7019 85FD
+545B 6215 6217 65A8 67AA 73B1 7F8C 7F97 7310 8DC4
+690C 8154 55C6 6EAC 9516 5D88 6227 69CD 7244 7472
+7FAB 8723 9535 7BEC 9306 8B12 8E4C 956A 8E61 9397
+93D8
+4E2C 5F37 5F3A 5899 5AF1 6F12 6A2F 8503 8537 58BB
+5B19 5EE7 6AA3 7246 8594 8262 8620
+62A2 7F9F 6436 7FA5 588F 7E48 8941 7E66 93F9
+709D 5534 7197 7FBB
+55F4 7347
+72C5 9751 9752 6C22 8F7B 503E 537F 570A 57E5 5BC8
+6C2B 6DF8 6E05 90EC 50BE 873B 8F15 4A1D 9CAD 944B
+591D 7520 5260 52CD 60C5 6B91 6674 68FE 6C30 6692
+845D 6A08 64CF 64CE 3BF3 6AA0 9EE5
+9877 82D8 8BF7 5EBC 9803 5ECE 6F00 3DEB 8ACB 6ABE
+5E86 51CA 6385 6BB8 7883 7B90 9758 6176 78D8 78EC
+7F44 8B26
+7858 6AE6
+533A 66F2 4F39 4F49 5324 5C96 8BCE 9A71 5765 5C48
+5CA8 5CB4 62BE 9639 3B55 6D40 80E0 795B 5340 7D36
+86C6 88AA 8EAF 7B41 7CAC 86D0 8A58 8D8B 5D87 6188
+420C 99C6 657A 8AB3 957C 99C8 9EB9 9AF7 9B7C 8DA8
+9EAF 89B0 8EC0 9EB4 9EE2 89BB 9A45 9C38 9C4B
+4F62 52AC 65AA 6710 80CA 9E32 6DED 7D47 7FD1 6E20
+83C3 8EE5 844B 24A0E 7496 8556 9D1D 74A9 78F2 87B6
+77BF 87DD 9F29 3739 5FC2 7048 8627 6235 6B0B 6C0D
+81DE 766F 7C67 8837 8862 8EA3 883C 947A 9E1C
+53D6 7AD8 5A36 8A53 7AEC 877A 9F8B 9F72
+53BA 53BB 521E 547F 3C26 551F 801D 9612 89D1 8DA3
+95B4 9EAE 95C3 9F01 89B7
+8FF2 8850
+7F3A 9619 849B
+7638
+5374 537B 57C6 5D05 5BC9 60AB 96C0 7437 785E 786E
+9615 5859 6409 76B5 788F 6128 69B7 58A7 6164 78BA
+78BB 8D9E 71E9 95CB 7910 95D5 704D 792D
+9E4A 9D72
+5CD1 5F2E 606E 609B 5708 570F 68EC 99E9 9409
+34B0 5168 6743 4F7A 8BE0 59FE 6CC9 6D24 62F3 7277
+8343 8F81 5573 57E2 5A58 60D3 75CA 7842 94E8 6E76
+7288 7B4C 7D5F 643C 7454 8472 89E0 8A6E 8DE7 8F07
+8737 9293 6A29 8E21 7E13 919B 9CC8 9B08 9A21 9C01
+5B49 5DCF 9F64 6B0A 98A7 8838 9874
+21FE8 72AC 6C71 754E 70C7 7EFB 7DA3 8647
+529D 5238 7276 52E7 97CF 52F8
+72AD 6926 697E 95CE
+590B 56F7 5CEE 9021
+5BAD 5E2C 3A8A 7FA3 7FA4 88D9 88E0
+828E 5314
+536D 5B86 909B 7A77 7A79 8315 684F 4143 7B3B 8D79
+60F8 712A 712D 743C 7B47 823C 86E9 86EC 21983 7162
+7758 8DEB 928E 778F 7AAE 511D 618C 6A69 749A 74CA
+7AC6 85D1 85ED 74D7
+718D
+FDD0-3112
+5915 516E 5FDA 6C50 8980 5438 5E0C 6271 6278 5365
+6614 6790 7A78 80B8 80B9 4FD9 5F86 6038 6053 997B
+550F 595A 36D3 5C56 6095 6C25 6D60 727A 72F6 90D7
+553D 6089 60DC 637F 665E 6878 6B37 6DC5 70EF 7101
+7108 740B 7852 8383 8D65 91F8 5092 60C1 6670 6673
+3C64 711F 712C 7280 774E 7A00 7C9E 7FD5 823E 83E5
+5380 5D60 5FAF 6EAA 7699 910E 9521 50D6 69BD 7155
+7184 7188 7199 7DC6 84A0 8725 8C68 990F 563B 564F
+5B06 5B09 6F5D 3FB7 761C 78CE 819D 51DE 20615 5DB2
+6199 3B1B 6A28 6A40 71B9 71BA 71BB 7AB8 7E18 7FB2
+8785 8787 932B 3C46 71E8 406F 77A6 87CB 8C3F 8C40
+8C6F 8C95 7CE6 7E65 96DF 9D57 8B46 91AF 93ED 5DC7
+66E6 7214 72A7 89F9 96B5 9145 89FD 9F37 8835 9E02
+89FF 9474
+4E60 90CB 5E2D 7FD2 88AD 89CB 5AB3 693A 3804 5D8D
+6F1D 84B5 84C6 89A1 8D98 69E2 3A57 6A84 8582 96B0
+8B35 93B4 972B 9CDB 98C1 9A31 9A3D 8972 9C3C 9A68
+67B2 6D17 73BA 5F99 94E3 559C 9222 8448 8478 9268
+9269 5C63 6F07 6198 84F0 66BF 6B56 8AF0 58D0 79A7
+7E30 8B11 87E2 8E5D 74BD 56CD 9C5A 77D6 8EA7
+5338 534C 620F 5C43 7CFB 9969 546C 5FE5 602C 77FD
+7EC6 4FC2 54A5 6044 76FB 3938 3B61 6B2F 7EE4 90E4
+7D30 91F3 960B 55BA 691E 7FD6 8203 8204 8D87 6140
+6ECA 7D8C 8D69 588D 7182 7294 798A 7A27 9699 969F
+6F5F 89A4 6231 6F99 422A 856E 9ED6 6232 78F6 4B8E
+8669 993C 9B29 7E6B 56B1 95DF 3E0D 973C 5C6D 884B
+897F 606F 6E13 6A72 72A0 7902 9BD1
+8672 75A8 867E 3520 8C3A 5084 9595 7146 7175 98AC
+271CD 778E 8766 9C15
+5323 4FA0 72CE 4FE0 5CE1 67D9 70A0 72ED 5CFD 70DA
+72F9 73E8 965C 7856 796B 7FC8 823A 35C7 7864 967F
+656E 6687 7455 7B6A 821D 9050 78AC 8F96 78CD 7E00
+7E16 8D6E 9B7B 8578 8F44 935C 971E 938B 9EE0 9A22
+9DB7
+959C
+4E05 4E0B 4E64 5413 759C 590F 3648 7771 5687 61D7
+7F45 5913 93BC 93EC
+5737 68BA 6E8A
+4E9B 3C54 63F3 7332 6954 6B47 874E 880D
+52A6 534F 65EA 90AA 5354 80C1 57A5 604A 62F9 631F
+594A 5CEB 633E 8105 8107 887A 5055 659C 3B68 8C10
+35BF 7FD3 55CB 6136 643A 744E 7D8A 26CC3 3666 7181
+818E 52F0 64B7 7DF3 7F2C 8762 978B 9821 64D5 8AE7
+71F2 3A66 64F7 97B5 651C 7E88 896D 8B97 9FA4
+5199 51A9 5BEB 85DB
+4F33 707A 5378 6CC4 6CFB 7EC1 7F37 6D29 70A7 7944
+5A0E 5C51 5C53 22B3F 505E 5070 5368 5FA2 68B0 70F2
+710E 7D32 4EB5 5A9F 5C5F 6E2B 245C8 79BC 7D4F 7D6C
+8C22 50C1 586E 698D 69AD 3D3D 5C67 66AC 7DE4 8909
+5667 5DB0 5EE8 61C8 6FA5 736C 7CCF 27735 97F0 71EE
+85A2 85A4 893B 8B1D 9082 99F4 7009 97A2 7023 7215
+424F 7E72 87F9 880F 9F58 9F5B 9F65 9F42 8E9E
+810B 5911
+7071 7072 547A 67AD 4FBE 54D3 67B5 9A81 54EE 5BAF
+5BB5 5EA8 6D88 7EE1 8653 9E2E 5A4B 689F 7107 7307
+900D 75DA 75DF 785D 7863 7A99 8427 9500 63F1 7D83
+7FDB 8437 560B 5610 6B4A 6F47 7BAB 8E03 5635 5F47
+61A2 3A4B 7362 92B7 9704 81AE 856D 9D1E 7A58 7C18
+87C2 87CF 9B48 9D35 56A3 7C2B 85C3 87F0 701F 6AF9
+24473 9AC7 56BB 56C2 8828 9A4D 9AD0 6BCA 8648
+6D28 3B35 7B05 5D24 6DC6 8A24 90E9 6BBD 7B4A 8AB5
+2E8C 2E8D 5C0F 6653 6681 7B71 7B7F 769B 66C9 7BE0
+76A2 8B0F
+5B5D 8096 52B9 54B2 4FF2 6548 6821 6D8D 7B11 5578
+509A 6569 35DB 8A68 5628 8A9F 562F 6B57 71BD 97A9
+6585 6586 4567
+6077 6EE7
+4F11 4FE2 54BB 5EA5 3CDC 4FEE 70CB 70CC 7F9E 8119
+8129 9E3A 81F9 8C85 9990 929D 9AE4 6A07 9AF9 9380
+9D42 93C5 9948 9C43 98CD
+82EC
+673D 7D87 6EEB 7CD4
+79C0 5CAB 5CC0 73DB 7EE3 7407 8896 9508 55C5 6EB4
+7493 890E 890F 92B9 8791 7E4D 7E61 93E5 93FD 9F45
+9BB4
+353E 4EDA 5C73 5148 597E 7EA4 4F61 5FFA 6C19 6774
+79C8 67AE 7946 7C7C 82EE 73D7 6380 83B6 8A2E 94E6
+23519 50CA 8DF9 9170 9528 5615 929B 9C9C 97EF 5B10
+61B8 66B9 9341 859F 893C 97F1 9BAE 8E6E 99A6 4D4C
+5EEF 6515 7E8E 9DB1 8E9A 7E96 8973 9C7B
+4F2D 95F2 59B6 5F26 8D24 54B8 6326 80D8 5A34 550C
+5563 5A39 5A71 6D8E 7D43 8237 86BF 8854 3B79 75EB
+86DD 9591 9592 9E47 5ACC 8858 929C 5AFA 5AFB 61AA
+648F 6F96 7509 7A34 8AB8 8CE2 3BD7 3D6A 71C5 8AF4
+8F31 918E 7647 764E 77AF 85D6 3C0A 7925 4554 9E79
+9E99 8D12 9DF3 9DF4 9DFC
+51BC 72DD 39E5 663E 5D04 3B60 6BE8 70CD 7303 86AC
+9669 8D7B 967A 7B45 5C1F 5C20 641F 8DE3 3B0E 7992
+9291 7BB2 5DAE 736B 96AA 736E 934C 71F9 85D3 9855
+5E70 6507 6AF6 8B63 861A 4606 496A 7381 97C5 986F
+7066
+4F23 53BF 5C98 2070E 73B0 7EBF 81FD 82CB 549E 59ED
+5BAA 770C 9650 54EF 57B7 5A0A 5A28 5CF4 3A87 6D80
+9665 665B 73FE 784D 83A7 9677 9985 774D 7D64 7F10
+7FA1 732E 7CAF 7FA8 817A 8706 49DF 50E9 50F4 21416
+7DAB 8AA2 648A 7DDA 92E7 61B2 3B17 6A4C 7E23 930E
+9921 58CF 8C4F 493C 9EB2 7017 81D4 737B 7CEE 9F38
+4ED9 50F2 7E4A 9466
+5FC3 59A1 5FFB 8F9B 90A4 6615 677A 6B23 7098 82AF
+76FA 4FFD 3B62 60DE 8A22 920A 950C 65B0 6B46 5EDE
+92C5 5B1C 85AA 99A8 946B 99AB
+6794 3726 8951 9414
+4F08
+3430 4F29 56DF 9620 5B5E 3B44 248F2 4FE1 8ED0 812A
+8845 8A2B 712E 7161 99B8 820B 9856 91C1
+5FC4 567A
+4E61 8297 76F8 9999 53A2 554C 90F7 5EC2 6E58 7F03
+9109 910A 7A25 8459 9115 7BB1 7DD7 81B7 858C 8944
+5FC0 9AA7 9E98 6B00 74D6 9576 9472 9A64
+4F6D 74E8 8BE6 5EA0 6819 7965 7D74 7FD4 8A73 8DED
+4EAB 4EAF 54CD 9977 6651 98E8 60F3 9284 9909 9C9E
+66CF 9B9D 8801 9BD7 97FF 9957 995F 9C76
+5411 59E0 5DF7 8683 9879 73E6 5842 7F3F 8856 8C61
+9805 842B 50CF 52E8 9297 5D91 6A61 95C0 56AE 87D3
+8950 940C 9C4C
+697F 9C5C
+661F 57B6 9A8D 60FA 7329 714B 7446 8165 86F5 89EA
+7BB5 7BC2 9B8F 66D0 89F2 935F 9A02 76A8 9BF9
+5211 884C 5F62 90A2 4F80 9649 578B 6D10 90C9 9498
+5A19 8365 9658 784E 94CF 9203 6ECE 9276 9292 92DE
+3A18 7772 9192 64E4
+5174 674F 59D3 5E78 6027 5016 8347 5A5E 60BB 6DAC
+8395 7DC8 8208 5B39 81D6
+54D8 88C4 8B03
+5401 620C 65F4 759E 76F1 6B28 80E5 987B 6647 8A0F
+987C 8657 865A 8C1E 5AAD 5E41 63DF 6E51 247E0 865B
+88C7 9808 6948 7AA2 980A 5618 9700 5653 589F 5B03
+7E03 8751 9B46 6B54 8566 8ADD 8B43 7E7B 9450 9A49
+9B1A 9B56
+4FC6 5F90 84A3
+8BB8 5474 59C1 8BE9 5194 6829 73DD 5066 8A31 668A
+8A61 7A30 7CC8 9126 9191 76E8
+65ED 4F35 5E8F 6C7F 4F90 5379 6034 6C80 82A7 53D9
+6064 662B 6D2B 460F 57BF 6B30 6B88 70C5 73EC 52D6
+654D 6558 52D7 70FC 7EEA 7EED 9157 55A3 58FB 5A7F
+6702 6E86 7D6E 8A39 6149 7166 8CC9 69D2 6F35 6F4A
+76E2 7781 7DD2 805F 84C4 928A 735D 7A38 7DD6 9B63
+77B2 85C7 85DA 7E8C 9C6E
+8053 7D9A 84FF
+524A 75B6 3EE1 8486 9774 35FE 8FA5 8FAA 859B 97BE
+7A74 6588 4E74 5B66 5CA4 5CC3 6CF6 8313 9E34 8895
+8E05 58C6 5B78 5DA8 6FA9 71E2 3D85 89F7 96E4 9DFD
+96EA 9CD5 9C48
+8840 3570 5437 5779 72D8 6856 8C11 8D90 8B14 7025
+81A4 6A30 825D 8F4C
+5405 8F69 660D 5BA3 5F32 8ED2 688B 8C16 55A7 5847
+5A97 6103 610B 63CE 6684 714A 7444 8431 8432 777B
+84D2 5107 7BAE 7E07 7FE7 8756 92D7 61C1 79A4 8AE0
+8AFC 857F 9379 99FD 7FFE 8809 77CE 85FC 8610 8B5E
+7384 73B9 3623 75C3 60AC 65CB 7401 8701 5AD9 6F29
+66B6 7487 4062 6A88 74BF 61F8
+54BA 6645 70DC 9009 3535 9078 9848 7663 766C
+6030 6CEB 39E6 6621 70AB 7EDA 7729 94C9 7404 7734
+8852 88A8 6E32 7D62 6965 6966 9249 78B9 8519 955F
+9799 98B4 7E3C 7E4F 93C7 8B82 8D19
+9C1A
+5743 52CB 57D9 7104 52DB 5864 718F 7AA8 52F2 8512
+52F3 99E8 58CE 736F 85AB 66DB 71FB 81D0 85B0 77C4
+7E81 860D 58E6 91BA
+5BFB 5EF5 65EC 9A6F 674A 5DE1 7543 8BE2 5CCB 6042
+6D35 6D54 7D03 6812 686A 6BE5 73E3 8340 8368 5071
+3704 5C0B 5FAA 63D7 295B0 8A62 99B4 69C6 6F43 9C9F
+565A 3D4C 6F6F 9129 6533 6A33 71D6 7495 87F3 9C4F
+9C58 7065
+5342 8BAF 4F28 6C5B 8FC5 4F9A 5DFA 5F87 72E5 6B89
+8A0A 8A19 8FFF 900A 595E 5DFD 6BBE 7A04 613B 8CD0
+905C 5640 6F60 8548 9D55 720B 9868 9442
+8BAD 8A13 5691
+51F6 5144 342B 5147 5308 8BBB 5FF7 6C79 54C5 605F
+6D36 80F7 80F8 8A29 8A7E 8CEF
+96C4 718A
+713D
+8BC7 7138 8A57 5910 657B 22FCC
+FDD0-3113
+4E4B 652F 536E 6C41 5431 5DF5 6C65 5767 679D 6CDC
+77E5 7EC7 80A2 829D 6800 79D3 79D6 80D1 80DD 5001
+75B7 7957 79EA 8102 887C 96BB 6894 796C 6925 81F8
+6220 6418 7A19 7D95 69B0 7994 8718 99B6 3BC4 9CF7
+9D32 9D44 7E54 9F05 8635
+6267 4F84 59B7 76F4 59EA 5024 503C 8040 91DE 57F4
+57F7 21E1C 6DD4 804C 8CAD 690D 6B96 7286 7D77 8901
+8DD6 55ED 74E1 7983 9244 588C 646D 99BD 5B02 6179
+6F10 8E2F 6A34 81B1 5128 7E36 8077 87D9 8E60 8EC4
+8E91
+5902 6B62 53EA 52A7 65E8 5740 5741 5E0B 627A 6C66
+6C9A 7EB8 962F 603E 62A7 23CB5 82B7 54AB 6049 6307
+67B3 6D14 780B 7949 8F75 75BB 41DB 7D19 8879 6DFD
+8A28 8DBE 8EF9 4920 9EF9 916F 85E2 8967
+81F3 9624 5FD7 5FEE 627B 8296 8C78 28468 5236 5394
+5781 5E19 5E1C 6CBB 7099 8D28 5CD9 5EA2 5EA4 6303
+67E3 6809 6D37 81F4 8FE3 90C5 5A21 5F8F 2267A 631A
+664A 684E 72FE 7951 79E9 8D3D 8F7E 965F 4E7F 506B
+202B7 5F9D 3A01 63B7 68BD 6956 7318 7564 75D4 79F2
+79F7 7A92 7D29 7FD0 889F 88A0 89D7 94DA 9E37 5082
+21376 5D3B 5F58 667A 6EDE 75E3 86ED 8EFD 9A98 5BD8
+5ECC 6431 6ECD 7A1A 7B6B 7F6E 8DF1 8F0A 9527 96C9
+5886 21839 6EEF 6F4C 7590 43BA 88FD 899F 8A8C 928D
+5E5F 6184 646F 71AB 7A3A 7DFB 442D 81A3 89EF 8CEA
+8E2C 92D5 64F3 65D8 7004 99E4 9D19 5295 61E5 6ADB
+7A49 4245 87B2 3609 3731 61EB 64F2 8D04 6ACD 74C6
+89F6 9BEF 7929 8C51 9A2D 9A3A 9A47 8E93 9DD9 9455
+8C52
+51EA 4FE7 5F94 8B22
+624E 5412 62AF 5953 6313 67E4 67FB 54F3 5067 55B3
+63F8 6E23 6942 5284 6463 76B6 6A1D 89F0 76BB 8B47
+9F44 9F47
+672D 7534 95F8 86BB 94E1 7160 7250 9598 7B9A 802B
+9358 8B57
+538F 62C3 82F2 7728 781F 6429 9C8A 9C9D 8E37 9B93
+9BBA 4562
+4E4D 7079 8BC8 54A4 67DE 6805 70B8 5BB1 75C4 86B1
+8A50 643E 6EA0 69A8 27A0A 9705 91A1
+8707 55FB 5AEC 906E
+5387 6298 6B7D 77FA 7813 7C77 8674 54F2 57D1 3B59
+7C8D 5560 608A 6662 6663 3B6F 88A9 8F84 5586 86F0
+8A5F 41FD 8C2A 99B2 647A 8F12 78D4 8F19 92B8 8F99
+87C4 569E 8B2B 8B3A 9BBF 8F4D 8B81 8B8B
+8005 4E7D 556B 9517 7987 8D6D 8936 8975
+8FD9 67D8 6D59 6DDB 9019 6A1C 6F6A 9E67 87C5 4826
+9DD3
+7740 8457 8517
+635A 658B 658E 6458 69B8 451D 9F4B 29C73
+5B85 6AA1
+7A84 9259
+503A 7826 50B5 5BE8 7635
+5908 7C82
+4F4B 948A 59B1 5DF6 62DB 662D 76C4 91D7 5541 924A
+99CB 7ABC 9363 76BD
+722A 627E 6CBC 7475 4203
+53EC 5146 8BCF 679B 5797 70A4 72E3 8D75 7B0A 8081
+65D0 68F9 436E 8A54 7167 7F69 4207 8087 8088 8D99
+66CC 71F3 9BA1 6AC2 77BE 7F84
+2EA5 722B 7F40
+5DDE 821F 8BCC 4F9C 5468 6D32 8BEA 70D0 73D8 8F80
+5F9F 3A04 63AB 6DCD 77EA 90EE 9E3C 558C 7CA5 8D52
+9031 8F08 44DF 9282 8CD9 8F16 970C 76E9 8B05 9D43
+9A06 8B78
+59AF 8F74 8EF8
+8098 759B 666D 83F7 776D 7B92 9BDE
+7EA3 4F37 546A 5492 5B99 7EC9 5191 54AE 663C 7D02
+80C4 76B1 836E 914E 665D 7C99 3473 8A4B 8464 8A76
+7503 50FD 76BA 99CE 5663 243F2 7E10 9AA4 7C40 7C55
+7C52 9A5F
+5E1A 70BF 99F2
+6CBE 6BE1 65C3 6834 7C98 86C5 98E6 60C9 8A40 8D88
+8A79 959A 8C35 5661 5DA6 9711 6C08 6C0A 859D 9085
+77BB 9E6F 65DC 8B6B 9958 9CE3 9A59 9B59 9C63 9E07
+8B9D
+65A9 98D0 5C55 76CF 5D2D 65AC 382D 692B 7416 370A
+640C 76DE 5D83 5D84 6990 98AD 5AF8 9186 6A4F 406A
+8F3E 28AC0 27B06 2217A 9EF5
+5360 4F54 6218 6808 685F 7AD9 5061 7EFD 68E7 6E5B
+83DA 6226 7DBB 5D98 8F1A 6230 8665 8666 89B1 8F4F
+8B67 29947 9A4F 8638
+8D1E 3630 9488 4FA6 6D48 73CD 73CE 80D7 8C9E 3598
+5E2A 6815 6862 771E 771F 7827 91DD 5075 686D 796F
+9159 5BCA 5AC3 21EC8 6438 659F 6968 7349 8474 9049
+9241 9755 699B 6B9D 7467 7504 78AA 798E 8496 84C1
+6F67 799B 7BB4 6A3C 6FB5 81FB 9331 8F43 937C 85BD
+7C48 9C75
+3431 8BCA 62AE 6795 5F2B 6623 8F78 5C52 755B 75B9
+7715 7D3E 8044 8897 8A3A 8EEB 7D7C 7F1C 88D6 4AB4
+7A39 99D7 7E25 9B12 9EF0
+5733 7EBC 9635 753D 4FB2 630B 42B6 9E29 632F 6715
+681A 7D16 9663 7739 8D48 9156 63D5 5866 7471 8AAB
+8CD1 47F4 6576 9547 9707 9D06 93AD 93AE
+8419 92F4
+5F20 5F35 7AE0 50BD 5887 5ADC 5F70 22554 615E 6F33
+7350 7CBB 9123 66B2 6A1F 24364 748B 8501 9067 9926
+87D1 9A3F 9C46 9E9E
+4EC9 957F 9577 6DA8 638C 6F32 7903
+4E08 4ED7 6259 5E10 6756 80C0 8D26 5E33 6DB1 8139
+75EE 5D82 5E5B 969C 8CEC 762C 7634 7795
+7C80 5E65 93F1 9423
+4E89 4F42 59C3 5F81 6014 722D 8BE4 20C9C 5CE5 6323
+70A1 72F0 70DD 7710 94B2 57E9 5D1D 5D22 6399 7319
+7741 8047 28713 94EE 5A9C 63C1 7B5D 3B39 5FB0 775C
+9266 5FB4 84B8 7B8F 5FB5 8E2D 7BDC 931A 9B07 9BD6
+7665
+6C36 628D 7CFD 62EF 639F 6678 6138 649C 6574
+6B63 8BC1 5E27 653F 90D1 75C7 5E40 8A3C 5863 40BB
+27D84 4223 8ACD 912D 9D0A 8B49 496D
+51E7
+6731 52AF 4F8F 8BDB 6D19 90BE 682A 73E0 8331 8BF8
+732A 7843 79FC 94E2 7D51 86DB 88BE 8A85 8DE6 69E0
+876B 9296 6A65 6F74 8AF8 8C6C 99EF 9BA2 9D38 7026
+6AEB 6AE7 9BFA 9F04 8829
+7AF9 6CCF 7AFA 70A2 7B01 70DB 7A8B 833F 7B1C 8233
+9010 7603 7BC9 71ED 880B 8E85 9C41 5B4E 705F 66EF
+6B18 7225 883E
+4E36 4E3B 20C0D 5B94 62C4 7F5C 6E1A 967C 716E 8A5D
+7151 5631 6FD0 9E88 77A9 529A 56D1 65B8 77DA
+4F2B 4F47 4F4F 52A9 7EBB 577E 677C 6CE8 82CE 8D2E
+8FEC 9A7B 58F4 67F1 6BB6 70B7 75B0 771D 782B 795D
+7ADA 7969 7D35 7D38 7F9C 8387 86C0 5D40 7B51 8A3B
+8CAF 8DD3 8EF4 94F8 7B6F 9252 99B5 7BB8 7FE5 6A26
+92F3 99D0 7BEB 9714 9E86 9444
+58B8
+6293 6A9B 81BC 9AFD 7C3B
+5353 62D9 70AA 502C 6349 684C 68C1 6DBF 68F3 7A5B
+25F1A 4B93 7A71 883F
+5734 5F74 6C4B 72B3 707C 53D5 59B0 65AB 6D4A 8301
+4E35 6D5E 8BFC 914C 5544 5545 5A3A 39FB 3B6C 68B2
+70F5 65B1 666B 6913 7438 4401 251CD 787A 7AA1 7F6C
+65B2 69D5 64AF 64C6 799A 4175 8AC1 8AD1 92DC 6FC1
+7BE7 289E7 64E2 6580 65B5 6FEF 243F8 6AE1 8B36 956F
+9D6B 7042 8817 942F 9432 7C57 9DDF 7C71
+5285
+7AA7
+62FD
+8DE9
+96B9 8FFD 9A93 9525 9310 9A05 9D7B
+6C9D
+5760 6858 7B0D 5A37 60F4 7F12 7577 7500 787E 8187
+8D58 589C 8AC8 918A 7E0B 9323 991F 7908 8D05 8B75
+8F5B 9446
+7F00 7DB4
+4E13 53C0 5C02 7816 5C08 587C 5AE5 911F 747C 78D7
+819E 989B 750E 78DA 8AEF 87E4 9853 9C44
+8F6C 5B68 8EE2 7AF1 4871 8F49
+7077 556D 581F 7451 815E 8483 50CE 8D5A 64B0 7BC6
+9994 7BF9 8CFA 8948 8B54 994C 56C0 7C51
+5B92 80AB 8FCD 7A80 8C06 8AC4 8860
+51C6 57FB 6E96 7DA7
+8A30 7A15
+51D6
+5986 5E84 599D 5A24 6869 8358 6889 838A 6E77 7CA7
+88C5 88DD 6A01 7CDA
+58EE 58EF 72B6 72C0 58F5 710B 6F34 649E 6207
+5E92
+4E2D 4F00 6C77 5223 5990 5F78 5FE0 6CC8 7082 7EC8
+26B15 67CA 76C5 949F 41D7 822F 8873 8877 7D42 9221
+5E52 953A 8520 92BF 87A4 87BD 937E 9F28 8E71 9418
+2915E 7C66
+80BF 79CD 51A2 55A0 5C30 585A 585C 6B71 7144 816B
+7607 7A2E 8E35 7A5C
+4EF2 4F17 5995 72C6 794C 91CD 833D 869B 8876 5045
+773E 5839 5A91 7B57 8846 8AE5
+8FDA
+FDD0-3114
+5403 4F99 54E7 5F68 80F5 86A9 9E31 7735 7B1E 55AB
+74FB 8A35 55E4 5AB8 75F4 7D7A 645B 5644 8ABA 779D
+9D1F 87AD 7661 9F5D 9B51 5F72 9ED0
+5F1B 6C60 9A70 577B 5CBB 8FDF 6301 7AFE 830C 6B6D
+834E 86B3 8D7F 7B42 8CBE 8D8D 9045 99B3 7B8E 905F
+5880 6F26 8E1F 7BEA 9072 8B18 28A32
+5C3A 53FA 544E 4F88 5376 9F7F 5791 80E3 6065 3DB4
+7C8E 42BC 803B 8687 6B3C 6B6F 88B2 88B3 88ED 9279
+9F52 892B
+5F73 53F1 65A5 6758 707B 8D64 996C 62B6 52C5 605C
+70BD 52D1 7FC4 7FC5 6555 70FE 75D3 557B 3961 6E41
+7873 98ED 50BA 75F8 815F 8DEE 9253 96F4 7608 7FE4
+9290 6157 618F 761B 7FE8 906B 71BE 61D8 8DA9 4820
+994E 9D92 9DD8
+599B 9EB6
+53C9 6260 6748 2472F 809E 81FF 633F 505B 63D2 63F7
+9987 55CF 929F 9538 7580 8256 9364 9937
+79C5 579E 67E5 832C 8336 5D56 7339 976B 643D 8A67
+5BDF 69CE 78B4 25ED7 6AAB 297D4
+8869 8E45 9572 9454
+597C 6C4A 5C94 4F98 8BE7 59F9 7D01 5DEE 47D5 8A6B
+8F66 4F21 8ECA 4FE5 7817 5513 8397 7868 86FC
+626F 5056 47A3 64A6
+5C6E 5F7B 577C 8FE0 3934 70E2 3FED 352D 8045 63A3
+7869 9819 5FB9 64A4 6F88 3B1A 52F6 77AE 4720 7221
+8286 62C6 9497 91F5
+4FAA 67F4 8C7A 7961 558D 5115 9F5C
+831D
+867F 8883 8A0D 7625 8806 56C6
+6284 2207E 5F28 600A 6B29 949E 8A2C 712F 24674 8D85
+9214 52E6 4AFF
+724A 6641 5DE2 5DE3 671D 9F0C 6F05 911B 5632 6A14
+6F6E 7AB2 7F7A 8F48 9F02 8B3F
+5435 7092 7727 7123 717C 9EA8 5DD0
+4EE6 4EEF 8016 89D8
+62BD 5A64 640A 7633 7BD8 72A8 72AB
+4EC7 601E 4FE6 5E31 6826 60C6 7D2C 7EF8 6906 7574
+7D52 83D7 6101 7697 7A20 7B79 9167 7DA2 88EF 8E0C
+5114 96D4 568B 5B26 5E6C 61E4 71FD 85B5 96E0 7587
+7C4C 8E8A 91BB 8B8E 8B90
+4E11 4E12 541C 677B 677D 4FB4 5062 7785 919C 77C1
+9B57
+81ED 81F0 6BA0 905A
+916C
+8FBF 89C7 6400 68B4 8998 9246 88E7 92D3 5E68 895C
+6519
+5A75 8C17 68CE 6E79 998B 7158 7985 7F20 50DD 7351
+8749 8A97 5103 5B0B 5EDB 6F79 6F7A 7DFE 6FB6 78DB
+92CB 6BDA 79AA 9561 700D 87EC 913D 5133 5296 87FE
+56B5 5DC9 703A 9141 6B03 7E8F 7E92 8E94 9575 826C
+8B92 9471 995E
+4EA7 522C 65F5 4E33 65BA 6D50 5257 8C04 5574 7522
+7523 94F2 9610 5277 8487 5D7C 644C 6EFB 563D 5E5D
+8AC2 95B3 9AA3 71C0 8546 7C05 5181 7E5F 8B42 8FB4
+93DF 95E1 56C5 705B 8B87
+5FCF 785F 3B04 6472 61F4 98A4 61FA 7FBC 97C2 986B
+58E5
+62BB 6375 90F4 741B 55D4 7D9D 778B 8AC3 8CDD 7E1D
+8B13
+5C18 81E3 5FF1 6C88 6C89 8FB0 9648 8FE7 5BB8 831E
+6550 8380 8390 8A26 8C0C 8ED9 9673 6116 63E8 9202
+7141 5875 760E 6A04 852F 9703 8AF6 87B4 85BC 9E8E
+66DF 9DD0
+8DBB 7876 789C 588B 5926 78E3 8E38 9356 8D02 91A6
+75A2 886C 9F80 8D81 8D82 6987 9F53 512C 9F54 512D
+56AB 8C36 6AEC 896F 8B96
+70E5 6668
+4F25 660C 5000 5A3C 6DD0 7316 960A 667F 7429 83D6
+9520 88EE 9329 95B6 9CB3 4B96 9BE7 2A087 9F1A
+4EE7 514F 80A0 82CC 9578 5C1D 507F 5E38 5F9C 74FA
+8407 751E 8178 5617 5872 5AE6 747A 8193 92FF 511F
+5690 9CBF 93DB 9C68
+5382 573A 6636 60DD 5834 50D8 53B0 5EE0 6C05 92F9
+6005 739A 7545 5021 9B2F 5531 60B5 713B 7452 66A2
+757C 8AAF 97D4
+655E 6919 87D0
+6CDF 9637 67FD 722F 6D7E 79F0 5041 86CF 36F5 68E6
+6E5E 725A 7424 8D6A 50DC 6186 645A 7A31 9757 6490
+6491 7DFD 6A55 77A0 8D6C 9833 6A89 7AC0 7A6A 87F6
+93F3 93FF 9953
+4E1E 6210 673E 5448 627F 67A8 8BDA 4E57 57CE 5A0D
+5CF8 6D06 90D5 4E58 57D5 5BAC 6330 665F 73F9 8100
+6381 73F5 7A9A 812D 837F 94D6 5818 60E9 68D6 6909
+7A0B 7B6C 7D7E 584D 5856 6E97 7880 41F8 88CE 8AA0
+757B 9172 92EE 6195 6F82 6F84 6A59 6A99 7013 61F2
+2815D 9A2C
+4FB1 5F8E 609C 9A8B 5EB1 901E 7748 9A01
+79E4
+9BCE
+51FA 5C80 521D 6474 6A17 8C99 9F63
+520D 82BB 9664 53A8 8C60 9504 5AB0 6EC1 8021 870D
+8D8E 924F 96CF 3551 7293 84A2 84AD 3861 5EDA 854F
+92E4 6A71 7BE8 5E6E 6AC9 96DB 6AE5 85F8 8E70 8E87
+9DB5 8E95
+51E6 6775 7840 50A8 6918 696E 891A 6FCB 5132 6A9A
+790E 9F6D 9E00 9F7C
+4E8D 5904 7ACC 6035 62C0 7ECC 8C56 67F7 6B2A 7AD0
+4FF6 654A 755C 3647 57F1 73FF 7D40 8655 5097 7421
+6410 6EC0 89E6 9110 8E00 95A6 510A 563C 84EB 8AD4
+61B7 65B6 6B5C 81C5 9EDC 89F8 77D7
+695A 698B 6A7B 74B4 87F5
+6B3B 6B58
+9034 8E14 6233
+2ECC 2ECD 8FB6 8FB5 3C8B 5A15 5A16 60D9 6DB0 7EF0
+5A7C 814F 8F8D 44CE 916B 7DBD 8DA0 8F1F 9F8A 64C9
+78ED 7E5B 6B60 56BD 9F6A 9461
+63E3 640B
+8197
+555C 562C 81AA 8E39
+5439 708A
+5782 5015 57C0 6376 68F0 690E 8144 9672 6425 83D9
+9524 69CC 7BA0 9318 9840 939A
+9FA1
+5DDB 5DDD 6C1A 7A7F 5276 732D 744F
+4F1D 4F20 8221 8229 8239 570C 50B3 693D 9044 66B7
+7BC5 8F32
+821B 8348 5598 6B42 50E2 8E33
+6C4C 4E32 7394 948F 91E7 8CD7 9DA8
+65FE 6776 6625 583E 5A8B 8405 6699 693F 7443 7BBA
+877D 6A41 8F34 81A5 6AC4 9C06 9D9E 2A0B9
+7EAF 5507 6D71 7D14 9659 6DF3 8123 83BC 6E7B 7289
+6EE3 6F18 8493 84F4 9187 9195 931E 9BD9
+5046 60F7 8436 7776 8CF0 8822
+9E51 9D89
+5205 75AE 7A93 7A97 724E 6450 7255 7621 7ABB
+5E8A 7240 5647 5E62
+95EF 50B8 6464 78E2 95D6
+521B 6006 5231 524F 5259 51D4 5275 6134
+5145 51B2 5FE1 6C96 833A 6D7A 73EB 7FC0 8202 5603
+644F 5FB8 6183 61A7 885D 41B9 7F7F 825F 8E56
+866B 5D07 5D08 9680 7DDF 8769 8908 87F2 721E
+5BA0 57EB 205A5 5BF5
+94F3 63F0 9283
+FDD0-3115
+5C38 5931 5E08 545E 8671 8BD7 9E24 5C4D 65BD 6D49
+72EE 90BF 5E2B 7D41 91F6 6E64 6E7F 921F 6EAE 6EBC
+7345 8479 8A69 9247 9248 7461 8492 84CD 9CF2 8768
+9CFE 27A79 9CBA 6FD5 26488 8937 9366 2A014 9BF4 9C24
+9DB3 8979
+5341 9963 77F3 4E6D 8FBB 65F6 20C34 5B9E 5B9F 65F9
+59FC 5CD5 70BB 8680 98DF 98E0 57D8 6642 794F 83B3
+5BD4 6E5C 5852 6EA1 9048 9250 5BE6 69AF 8494 8755
+4215 9CA5 9F2B 9F2D 9C23
+53F2 77E2 4E68 8C55 4F7F 59CB 9A76 5158 5BA9 5C4E
+7B36 9242 99DB
+58EB 6C0F 793B 4E17 4E16 4ED5 5E02 2EAC 793A 534B
+5F0F 5FD5 2EAE 4E8A 4F3C 53D3 623A 4E8B 4F8D 52BF
+5469 67F9 8BD5 9970 519F 5BA4 6040 6043 62ED 662F
+6630 67BE 67FF 7702 89C6 8D33 683B 70D2 770E 7721
+8210 8F7C 9002 94C8 8996 8C49 901D 91C8 5A9E 5D3C
+5F11 5FA5 63D3 8C25 8CB0 91CA 52E2 55DC 5F12 7757
+7B6E 89E2 8A66 8EFE 9230 9243 98FE 8213 8A93 927D
+596D 9069 492D 92B4 9919 566C 5B15 6FA8 8ADF 8AE1
+991D 87AB 8B1A 907E 7C2D 91CB 896B
+4F66 7ACD 8BC6 62FE 5319 5D75 6981 7176 7BD2 9B96
+7C42 8B58 9C18
+6740 6C99 7EB1 4E77 5239 524E 7802 5526 7300 7C86
+7D17 686C 6BBA 6BEE 3E3A 838E 94E9 75E7 7870 715E
+88DF 699D 6A27 8531 9B66 9CA8 9BCA 9BCB 93A9
+50BB 510D
+503D 553C 5551 5565 5E39 53A6 55A2 8410 5EC8 3C3C
+6B43 7FDC 4209 7B91 7FE3 95AF 970E
+7E4C
+5962 731E 8D4A 756C 7572 8F0B 8CD2 8CD6 6AA8
+820C 4F58 8675 86C7 86E5 27D73
+820D 6368 4B37
+538D 8BBE 793E 5399 5C04 6D89 6DBB 6E09 8A2D 8D66
+5F3D 6151 6442 6444 6EE0 6174 6475 850E 6B59 97D8
+9A07 8802 4713 61FE 651D 7044 9E9D 6B07
+820E
+3D13 7B5B 917E 7BE9 7C01 7C1B 91C3
+7E7A
+6652 3B20 95B7 66EC
+5F30 634E 70E7 68A2 83A6 713C 7A0D 65D3 7B72 8244
+86F8 8F0E 71D2 4230 98B5 9AFE 9BB9
+52FA 828D 67D6 73BF 82D5 7AF0 97F6
+5C11 28218 4520
+52AD 5372 7ECD 90B5 54E8 5A0B 7D39 8891 7744 7DA4
+6F72
+8571
+53CE 6536
+624B 5B88 57A8 9996 824F
+5BFF 53D7 72E9 517D 552E 6388 6DAD 7EF6 75E9 58FD
+7DAC 5900 7626 46F5 7378 93C9
+624C 7363
+5C71 5F61 9096 5220 522A 6749 59CD 59D7 829F 9490
+67F5 72E6 73CA 8222 82EB 886B 57CF 75C1 8ED5 633B
+7B18 8120 8DDA 527C 6427 5607 5E53 717D 6F78 6F98
+6A86 7E3F 81BB 7FB4 7FB6 9BC5 3C11
+27A3E
+95EA 9655 9583 965D 3A8E 6671 7154 7752 718C 89A2
+8BAA 6C55 38CC 759D 5261 6247 8A15 8D78 639E 91E4
+5093 5584 928F 9A9F 50D0 58A0 58A1 6F6C 25531 7F2E
+912F 5B17 64C5 6A3F 6B5A 81B3 4C49 78F0 8B06 8D61
+4120 7E55 87EE 4947 87FA 8B71 8D0D 9425 994D 9A38
+9CDD 7057 9C53 9C54
+5738 6763 958A 657E
+7533 5C7E 625F 4F38 8EAB 4F81 547B 59BD 7C76 7EC5
+8BDC 59FA 67DB 6C20 73C5 7A7C 7C78 5A20 5CF7 7521
+7712 7837 6552 6DF1 7D33 8398 515F 68FD 8A37 8460
+88D1 8A75 20EDD 7527 84E1 8518 71CA 99EA 9CB9 66D1
+8593 9D62 9BF5 9C3A
+4EC0 751A 795E 4C20
+5F1E 90A5 5BA1 77E4 54C2 77E7 5BB7 8C02 8C09 5A76
+6E16 8A20 5BE9 8AD7 9823 9B6B 66CB 9825 77AB 5B38
+700B 3C02 89BE 8B85
+80BE 4FBA 661A 80C2 6D81 7718 6E17 8124 7973 814E
+613C 614E 6939 7606 7F67 8703 8704 6EF2 92E0 762E
+5814 698A 9C30
+4F24 6B87 5546 89DE 50B7 5892 616F 6EF3 6F21 6BA4
+71B5 850F 87AA 89F4 8B2A 9B3A
+57A7 6244 664C 8D4F 8CDE 8D18 945C
+4E04 4E0A 5C19 5C1A 6066 7EF1 7DD4 979D
+4EE9 88F3
+5347 751F 544F 58F0 6598 9629 6607 6CE9 72CC 680D
+6B85 7272 73C4 82FC 3C61 965E 7B19 9679 6E66 713A
+7525 924E 8072 9F2A 9D7F
+7EF3 61B4 7E69 8B5D
+7701 771A 5057 6E3B
+5723 80DC 6660 5270 76DB 5269 52DD 8CB9 5D4A 741E
+8056 58AD 69BA 8542 8CF8
+7AD4 66FB 6A73
+4E66 6BB3 5C17 6292 7EBE 3450 53D4 6778 67A2 59DD
+964E 500F 5010 66F8 6B8A 7D13 6393 68B3 6DD1 7102
+8ED7 758E 758F 8212 83FD 9103 6445 6BF9 7D80 8F93
+8DFE 8E08 6A1E 7479 852C 8F38 6A7E 9B9B 6504 5135
+9D68
+79EB 5A4C 5B70 8D4E 587E 719F 74B9 8D16
+9F21 5C5E 6691 9ECD 668F 7F72 8700 9F20 6F7B 66D9
+3EFF 85A5 85AF 7659 85F7 8961 5C6C 8969 9483
+672E 672F 620D 675F 6CAD 4FB8 51C1 54B0 6037 6811
+7AD6 8FF0 6055 6352 8357 5EB6 5EBB 7D49 8853 5C0C
+9683 6570 7AEA 8167 8481 88CB 9265 5885 6F31 6F44
+6578 6F8D 8C4E 6A39 6FD6 9330 4240 93E3 9D90 866A
+702D 7CEC 8834 9C6A 9C70
+5237 5530
+800D
+8A9C
+8BF4 54FE 8AAA 8AAC
+5981 70C1 6714 94C4 6B36 7855 77DF 6420 69CA 78A9
+84B4 7361 7BBE 26097 9399 720D 9460
+8870 6454 2812E
+7529
+5E05 5E25 2361A 87C0 535B
+8C01 813D 8AB0
+6C34
+5E28 6D97 6D9A 7971 7A05 7A0E 7761 88DE 7793
+6C35 6C3A 9596
+95E9 62F4 9582 6813
+6DAE 8168
+542E
+987A 821C 9806 6A53 779A 8563 77AC 9B0A
+53CC 971C 96D9 5B40 9AA6 5B47 9A3B 6B06 7935 9DDE
+9E74 4276 826D 9A66 9E18
+723D 587D 6161 6F3A 6A09 7E14 45EE
+7040
+93EF
+FDD0-3116
+2E9C 65E5 9A72 56F8 91F0 9224 99B9
+60F9
+70ED 71B1
+5A06 9976 6861 835B 5B08 6A48 8558 8953 9952
+6270 96A2 64FE
+7ED5 9076 7E5E
+53B9 79B8 67D4 5A83 63C9 6E18 7163 7448 4413 8447
+7CC5 875A 8E42 8F2E 9352 97A3 74C7 9A25 9C07 9D94
+7C88 697A 97D6
+2EBC 8089 5B8D 816C
+5465 80B0 86A6 887B 8887 86BA 88A1 7136 9AE5 562B
+3723 9AEF 71C3 7E4E 4533
+5184 5189 59CC 67D3 73C3 82D2 5AA3 6A6A
+8485
+4EBA 4EBB 4EC1 58EC 5FC8 6732 5FCE 79C2 82A2 9213
+9B5C 928B 433E 9D40
+5FCD 6820 6823 834F 79F9 8375 68EF 7A14
+5203 5204 8BA4 4EDE 4EED 8BB1 4EFB 5C7B 5C83 3834
+6268 7EAB 2EB6 2634C 598A 6752 7263 7EB4 8095 8F6B
+97E7 996A 59D9 794D 7D09 7D1D 887D 8A12 8ED4 6895
+3E3E 8EE0 41EE 7D4D 814D 88B5 976D 9771 97CC 98EA
+845A 8A8D 9901
+7D9B 8EB5
+7A63 5134 52F7 703C 737D 8618 74E4 79B3 7A70 4274
+8E9F 9B24
+58CC 56B7 58E4 6518 7219 7E95
+8BA9 61F9 8B72 8B93
+6254
+4ECD 20BA8 3B41 8FB8 793D 3EB1 967E
+82BF
+633C
+5982 909A 4F9E 5E24 6847 8339 94F7 6E2A 7B4E 88BD
+8498 92A3 8761 5112 8560 9D11 5685 5B2C 5B7A 6FE1
+9D3D 66D8 71F8 85B7 8815 8966 98A5 91B9 986C 9C6C
+6C5D 8097 4E73 8FB1 910F 64E9
+5165 6D33 55D5 5AB7 6EBD 7F1B 84D0 7E1F 8925
+6256 6741 8FBC 9CF0 5DBF
+637C
+53D2 82E5 5F31 504C 6E03 712B 9100 6949 84BB 7BAC
+7BDB 7207 9C19 9C2F 9DB8
+5D76
+5A51 6875 7524 7DCC 8564 4B10
+6A64 854A 854B 7E60 8602 8603
+6C6D 6798 82AE 4132 868B 9510 745E 777F 8739 92B3
+92ED 53E1 289E8 3AAB 58E1
+5827 648B 58D6
+962E 670A 8F6F 800E 5044 8EDF 5A86 744C 789D 7DDB
+44F4 8F2D 74C0 791D
+77A4
+95F0 6DA6 958F 95A0 6F64 6A4D 81B6
+8338
+620E 809C 6804 72E8 7ED2 5BB9 3B5C 6BE7 8319 8363
+70FF 4846 5D58 41EF 7D68 7FA2 5AB6 5AC6 5D64 6408
+6411 6EB6 38D1 6995 69AE 69B5 7194 7462 84C9 7A41
+877E 9555 7E19 878D 878E 8923 99E5 9AF6 5B2B 5DB8
+7203 9394 701C 5DC6 66E7 8811 2A0FE
+5197 5B82 5748 22AE8 5087 8EF5 6C04
+9D27
+7A43
+FDD0-3117
+4E72 5B5C 5179 54A8 59D5 59FF 830A 6825 7386 7D0E
+8332 8D40 8D44 6DC4 79F6 7F01 8C18 55DE 5B73 5D6B
+6914 6E7D 6ECB 7CA2 8F8E 5B76 8458 89DC 8A3E 8CB2
+8CC7 8D91 9111 9531 798C 7A35 7DC7 922D 9543 9F87
+8F1C 6FAC 8AEE 8DA6 8F3A 9319 9AED 9CBB 9F12 937F
+93A1 74BE 983F 983E 9BD4 9D85 9F4D 2A5CB 9C26
+84FB
+20094 4ED4 5407 674D 3EAD 59C9 59CA 77F7 79C4 5470
+7C7D 8014 80CF 8678 79ED 6893 7B2B 91E8 5559 7D2B
+6ED3 8A3F 699F
+5B57 81EA 8293 39D8 5033 525A 6063 7278 8321 6E0D
+7725 7726 80D4 80FE 6F2C 3C74
+5B50 5D30 6A74
+5E00 531D 6C9E 5482 8FCA 62F6 7D25 7D2E 9254 9B73
+81DC 81E2
+6742 7838 507A 5592 97F4 96D1 22D8D 5DBB 78FC 894D
+96DC 56CB 56D0 96E5
+548B
+5219 629E 6CA2 62E9 6CCE 6CFD 8D23 5247 8FEE 835D
+5536 5567 5E3B 7B2E 8234 8CAC 6EAD 77E0 5616 5AE7
+5E58 7BA6 6A0D 8ACE 8D5C 64C7 6FA4 769F 7794 7C00
+790B 8B2E 8CFE 880C 8957 9F5A 456A 9F70 9E05
+5928 4EC4 5E82 6C44 6603 6617 6351 5D31
+4F2C 8536
+707D 707E 753E 54C9 683D 70D6 6E3D 83D1 7775 8CF3
+5BB0 5D3D 43C1
+518D 5728 6257 4FA2 6D05 8F7D 50A4 8F09 9168 510E
+7E21
+8D3C 621D 8CCA 9C97 9BFD 8808 9C02 9C61
+50AE 906D 7CDF 8E67 91A9
+51FF 947F
+65E9 67A3 86A4 68D7 6FA1 74AA 85BB 7E70 85FB
+7076 7681 7682 5515 5523 688D 9020 55BF 8241 6165
+566A 71E5 7C09 8B5F 8DAE 8E81 7AC3 7AC8
+6806
+90B9 9A7A 8BF9 90F0 966C 68F7 68F8 83C6 9112 7B83
+7DC5 8ACF 9CB0 9139 9BEB 9EC0 9A36 9F71 9F7A
+8D71 8D70
+594F 63CD 6971 3D75
+9BD0
+5142 7CCC 7C2A 7C2E 9415 941F
+54B1
+661D 6CAF 685A 5BC1 3CEB 63DD 5646 648D 5127 6505
+6512 5139 6522 8DB1 7938 8DB2
+6682 3506 66AB 8CDB 8D5E 933E 6FFD 8E54 913C 74C9
+8D0A 93E8 74D2 373A 7052 8B83 9147 74DA 79B6 8978
+8B9A 9961
+600E
+8C2E 8B56 8B5B
+56CE
+5328 7242 7F98 8D43 8CCD 81E7 8CD8 8535 8D13 9AD2
+8D1C
+9A75 99D4
+3638 5958 5F09 810F 585F 846C 92BA 81D3 81DF
+5897 589E 618E 7F2F 912B 6A67 71B7 7494 77F0 78F3
+7F7E 7E52 8B44
+9503 92E5 8D60 7511 8D08
+9C5B
+79DF 8445 84A9
+5346 8DB3 5352 54EB 5D12 5D2A 65CF 50B6 7BA4 8E24
+8E3F 955E 93C3
+8BC5 7EC4 963B 4FCE 723C 73C7 7956 7D44 8A5B 977B
+4503
+93BA
+6628 79E8 637D 838B 690A 7422 7A13 7B70 923C
+20087 5DE6 4F50 5528 7E53
+4F5C 5750 3634 5C9D 5C9E 600D 963C 4FB3 80D9 5511
+5EA7 795A 505A 3930 3B6E 888F 8443 8444 98F5 3600
+7CF3
+5497 84D9
+539C 6718 3B70 55FA 6A36 87D5 7E97
+5D8A 5634 5DB5 567F 74BB
+682C 7D4A 9154 6700 666C 797D 7A21 7F6A 8FA0 69DC
+917B 9189 855E 92F7 930A 6A87 6A8C
+67A0 7A5D
+94BB 28256 8E9C 947D
+7E64 7F35 7E82 7E89 7C6B 7E98
+6525 945A
+5C0A 58AB 58FF 5D9F 6A3D 9075 7E5C 7F47 940F 9CDF
+9C52 9DF7
+50D4 5642 6499 453F 8B50
+6358 928C
+9D8E
+5B97 5027 7EFC 9A94 582B 5D4F 5D55 60FE 68D5 7323
+8159 6721 6936 847C 5D78 4053 7A2F 7D9C 7DC3 71A7
+4226 7DF5 7FEA 876C 8E28 8E2A 78EB 9350 8C75 8E64
+9A0C 9B03 9A23 9B09 9B37 9BEE 9BFC 9441
+603B 506C 6374 60E3 6121 63D4 6403 50AF 3DD3 6460
+7DCF 84D7 7E02 7E3D 93D3
+7EB5 662E 75AD 500A 7314 7882 7CBD 7CC9 7632 7E26
+931D 7E31 7CED
+6F48
+FDD0-3118
+5472 75B5 8D7C 5068 8D80 8DD0 29A28 9AB4 7E12 8800
+9ACA 9F79
+8BCD 3639 5790 67CC 73C1 5832 7960 8308 8328 3935
+74F7 46D0 8A5E 8F9D 8F9E 6148 7506 78C1 96CC 4A0F
+9E5A 7CCD 8FA4 98FA 9908 3602 5B28 6FE8 858B 9D1C
+7920 8FAD 9DBF 9DC0
+6B64 4F4C 6CDA 73BC 7689 7D2A 9B86
+673F 6B21 4F3A 4F7D 523A 523E 5E9B 6828 8326 7D58
+83BF 86D3 8D50 8CDC 8786 3A5E
+5693 64E6 6503
+7924
+906A 56C3
+518A 518C 4FA7 5395 607B 62FA 6D4B 6547 755F 5074
+53A0 7B27 7CA3 5EC1 60FB 6E2C 7B56 8417 7B5E 7B74
+8434 5884 3A32 7BA3 84DB 61A1 25C21 7C0E
+5072 5A47 731C
+624D 72B2 6750 8D22 8CA1 88C1 6EA8 7E94
+6BDD 91C7 5038 554B 5BC0 5F69 63A1 776C 8DF4 7DB5
+8E29
+57F0 68CC 83DC 8521 7E29
+64A1 64CD 7CD9
+66FA 66F9 5608 5D86 6F15 69FD 84F8 25562 825A 87AC
+893F 93EA
+8278 8349 613A 61C6 9A32
+808F 9135 8959
+2EBE 8279
+51D1 6E4A 8160 8F8F 8F33
+53C2 53C3 53C4 98E1 9A96 53C5 55B0 6E4C 50AA 5B20
+9910 9A42
+6B8B 8695 60ED 6B98 615A 8745 6159 45DD 5B31 8836
+883A
+60E8 6701 6158 61AF 7A47 7BF8 9EEA 9EF2
+707F 36D1 63BA 5B71 7CB2 647B 6FAF 71E6 74A8 8592
+8B32
+510F 7218
+5D7E
+5C91 6D94 7B12 68A3
+4ED3 4EFA 4F27 6CA7 82CD 9E27 5009 8231 5096 5D62
+6EC4 734A 84BC 8259 87A5 9DAC
+85CF 9476
+416E 8CF6
+6FF8 7F49 6B0C
+66FD 564C
+5C42 66FE 5C64 5D92 3B1D 7AF2 4255 9A53
+8E6D
+7C97 89D5 9E81 9E84 9EA4
+5F82 6B82
+4FC3 731D 8128 9162 7604 8A8E 8D97 5648 61B1 851F
+8E27 918B 762F 7C07 7E2C 8E59 4944 9F00 8E74 8E75
+9863
+6413 7473 64AE 78CB 9073 8E49 919D
+3B6B 8658 75E4 7749 77EC 5D6F 5D73 84AB 8516 9E7E
+9142 9E7A 8EA6
+811E
+5249 5252 539D 590E 632B 63AA 839D 83A1 65AE 68E4
+902A 9509 9519 84CC 6B75 92BC 932F
+5D14 50AC 51D7 7F1E 5894 3720 5D89 615B 6467 69B1
+7355 69EF 78EA 7E17 93D9
+6F3C 7480 8DA1 76A0
+4F1C 5FF0 75A9 5005 7C8B 7D23 7FC6 8103 8106 5550
+555B 60B4 6DEC 6BF3 7120 813A 8403 7601 7CB9 7DB7
+7FE0 81AC 81B5 6FE2 7AC1 9847 81CE 894A
+4E7C
+6C46 64BA 92D1 9569 8E7F 651B 8EA5 9479
+6AD5 5DD1 6B11 7A73
+7A9C 6BA9 71B6 7BE1 7C12 7AC4 7228
+6751 90A8 76B4 8E06 6F8A 7AF4
+5B58 4F9F 62F5
+520C 5FD6
+5BF8 540B 7C7F
+5306 56EA 56F1 5FE9 679E 82C1 6031 60A4 217DF 68C7
+7127 249DA 8471 6F17 8061 9AA2 66B0 6A05 6A2C 719C
+747D 7481 7DEB 8066 806A 84EF 8525 779B 71EA 7BF5
+8070 87CC 936F 7E71 93E6 9A18 9A44
+4ECE 4E1B 5F93 5A43 5B6E 5F96 5F9E 60B0 6DD9 742E
+6152 6F0E 6F40 6F68 8AB4 8CE8 8CE9 6A37 53E2 85C2
+7047 6B09 721C
+6181 8B25
+8310
+FDD0-3119
+53B6 7E9F 4E1D 53F8 3EA8 7CF9 79C1 549D 6CC0 601D
+8652 9E36 5AA4 65AF 7D72 7F0C 86F3 6952 3D32 9270
+98D4 51D8 53AE 69B9 7997 7F73 8724 9536 5636 565D
+21852 5EDD 6495 6F8C 78C3 79A0 25BE8 7DE6 92D6 71CD
+856C 8784 452E 87D6 87F4 98B8 9A26 9401 29170 9DE5
+9F36 7C6D
+6B7B
+5DF3 4E96 56DB 5BFA 6C5C 4F40 4FA1 5155 59D2 5B60
+676B 6CD7 6CE4 7940 9972 9A77 3B52 67F6 726D 5A30
+6D0D 6D98 8082 98E4 7B25 801C 91F2 7AE2 8997 55E3
+8086 8C84 9236 923B 98FC 99DF 79A9 5129 857C 7003
+4FEC 6056 92AF
+4EE8 6331 6332 6492
+6D12 8A2F 9778 6F75 7051 8EA0
+5345 6CE7 98D2 810E 9212 8428 644B 98AF 99BA 85A9
+6AD2 8644
+20BBF 96A1
+95AA
+8272 6D13 681C 6DA9 556C 94EF 6B6E 7417 96ED 55C7
+745F 6B70 92AB 6F81 61CE 64CC 6FC7 7637 7A51 6F80
+74B1 7012 7A61 7E6C 8F56 93FC 8B45 98CB
+6E0B 6FCF 7A6F
+6BE2 6122 63CC 585E 6BF8 816E 567B 9CC3 984B 4C04
+9C13
+4222
+55EE 8D5B 50FF 8CFD 7C3A
+5625
+63BB 9A9A 6145 6414 6E9E 7F2B 7E45 81CA 9CCB 9A12
+9A37 9C20 9C62
+626B 6383 5AC2 4545
+57FD 7619 6C09 77C2 9ADE
+87A6
+635C 5EC0 998A 55D6 5ECB 641C 6449 6EB2 7340 910B
+6457 22CB7 8490 84C3 953C 98D5 422D 8258 878B 9199
+93AA 993F 98BC 98BE 9A2A
+53DC 53DF 5081 55FE 778D 64DE 85AE 64FB 6AE2 85EA
+7C54
+8184 7636
+55FD
+4E09 5F0E 53C1 6BF5 4200 6BFF 7299 9B16
+4ED0 4F1E 5098 7CC1 7CC2 9993 7CDD 7CE3 7CE4 7E56
+93D2 93FE 9730 994A
+4FD5 5E34 60B7 6563 9590
+58ED 6BF6 5381 6A75
+68EE 692E 69EE 8942
+6852 6851
+55D3 6421 78C9 892C 98A1 939F 9859
+4E27 55AA
+69E1
+50E7 448F 9B19
+82CF 7526 9165 7A23 7AA3 7A4C 6AEF 8607 8613 56CC
+4FD7
+738A 5919 6CDD 8083 6D2C 6D91 73DF 7D20 5BBF 6880
+6B90 7C9B 83A4 901F 9A95 5083 7C9F 8C21 55C9 5850
+5851 5ACA 612B 6EAF 6EB8 8085 9E54 50F3 3504 612C
+69A1 8186 89EB 8D9A 9061 619F 6A0E 6A15 6F5A 6F65
+24882 78BF 850C 906C 92C9 9917 3B18 6A5A 749B 7E24
+7C0C 8B16 8E5C 85D7 9A4C 9C50 9DEB
+8BC9 8A34 9BC2
+5506 36D6 5A11 686B 68AD 838F 509E 7743 55CD 7FA7
+644D 7F29 84D1 8D96 7C11 450B 7C14 7E2E 9AFF 9BBB
+6240 4E7A 3ABD 5522 7D22 7410 60E2 9501 55E9 22C62
+6E91 669B 7463 7485 8928 459B 9388 938D 9396 93BB
+93C1
+9024 6EB9 8736
+7411 55E6
+590A 6535 8295 867D 5020 54F8 6D7D 772D 837D 837E
+6ED6 7762 7D8F 8470 71A3 6FC9 9796 96D6
+7EE5 968B 9040 968F 96A8 74CD
+81B8 4B49 7021 9AC4 9AD3
+4E97 5C81 7815 795F 8C07 57E3 5D57 21ED5 6B72 6B73
+716B 775F 788E 9042 7A42 8AB6 8CE5 5B18 6FBB 96A7
+6A85 6A96 71E7 74B2 7A57 7E40 9083 79AD 7A5F 7E50
+65DE 7E78 895A 8B62 9406 9429 97E2
+72FB 75E0 9178
+5334
+7958 7B07 7B6D 7B97 849C
+5B59 72F2 5B6B 836A 98E7 640E 733B 98F1 69C2 84C0
+8575 859E
+635F 7B0B 96BC 7B4D 640D 69AB 7BB0 7C28 93A8 9DBD
+5FEA 677E 6780 5A00 67D7 502F 51C7 5D27 5EBA 68A5
+6DDE 83D8 5D69 7879 8719 61BD 6FCD 290ED 6AA7 9376
+9B06
+6002 609A 8038 7AE6 50B1 612F 3A26 6964 5D77 616B
+8073 99F7
+8BBC 5B8B 8BF5 9001 9882 8A1F 980C 8AA6 9938
+67A9 93B9
+FDD0-311A
+5475 963F 9515
+55C4
+554A
+FDD0-311B
+5594 5662
+54E6
+7B7D
+FDD0-311C
+59B8 59BF 94B6 5A3F 5A40 5C59 75FE
+8BB9 542A 56EE 8FD7 4FC4 5A25 5CE8 5CE9 6D90 73F4
+83AA 8A1B 7692 774B 4109 920B 9507 9E45 86FE 8A90
+78C0 981F 989D 9B64 96B2 984D 9D5D 9D5E 8B4C 21145
+9C2A
+6799 7808 980B 5641 9A00
+5384 5C75 6239 6B7A 5443 5C8B 627C 9628 545D 82CA
+8F6D 9638 54A2 54B9 20C65 57A9 59F6 5CC9 7810 530E
+6076 7828 4465 8685 997F 5054 537E 580A 60AA 63A0
+7565 7846 8C14 8EDB 960F 35C1 582E 5D3F 60E1 6115
+6E42 4748 8C5F 8EF6 9102 922A 5EC5 6424 6439 3B99
+7427 816D 843C 8A7B 904C 904F 50EB 8741 9537 9E57
+981E 989A 9913 9B65 5669 855A 89A8 8AE4 95BC 9929
+8C96 9354 9CC4 6B5E 984E 7918 6AEE 9C10 9D9A 8B8D
+9F43 9469 9F76 9C77
+64DC 9D48
+FDD0-311E
+54C0 54CE 5509 57C3 5A2D 6328 6B38 55F3 6EBE 92B0
+953F 566F 9384
+5540 6371 7691 6EB0 560A 6571 6573 769A 764C 9A03
+6BD0 6639 5A3E 77EE 853C 8EB7 6FED 972D 85F9 9744
+4F0C 827E 3637 7231 7839 784B 35D2 55CC 5867 5AD2
+611B 788D 9698 53C6 66A7 7477 95A1 50FE 416C 5B21
+61D3 58D2 61DD 66D6 74A6 8586 9932 9D31 76A7 77B9
+453D 99A4 7919 8B6A 8B7A 9440 9749
+9C6B
+FDD0-311F
+8BF6 8A92
+FDD0-3120
+51F9 356D 67EA 688E 8EEA 720A
+6556 53AB 55F7 55F8 5D85 5ED2 6EF6 7353 7352 969E
+646E 23281 71AC 7488 851C 9068 78DD 7FF1 8071 87AF
+7FFA 8B37 8B38 9CCC 93D6 9C32 9DD4 9F07
+629D 62D7 82BA 8884 957A 5AAA 5ABC 8956
+362D 5C99 6277 5773 5787 5CB0 5961 5965 50B2 5967
+9A9C 371C 5AEF 6160 22CC6 58BA 5DB4 61CA 64D9 6FB3
+96A9 93CA 9A41
+7FF6
+FDD0-3121
+8BB4 6CA4 6B27 6BB4 74EF 9E25 5878 6F1A 6B50 6BC6
+71B0 9D0E 750C 210BF 8B33 6AD9 93C2 9DD7 4972
+8192 9F75
+20676 5418 5455 5076 8162 5614 3496 8026 8545 85D5
+6004 616A
+85F2
+FDD0-3122
+5B89 4F92 5CD6 6849 6C28 5EB5 4002 8C19 5A95 83F4
+75F7 8164 843B 844A 9E4C 8A9D 84ED 978C 978D 76E6
+8AF3 99A3 76EB 9D6A 97FD 9D95
+73B5 557D 96F8 5111
+57B5 4FFA 5535 57EF 94F5 63DE 968C 7F6F 92A8
+72B4 5CB8 6309 6D1D 6848 80FA 834C 8C7B 5813 5A69
+4141 667B 6697 930C 95C7 9B9F 4B97 9EEF
+FDD0-3123
+5940 6069 217EF 717E 84BD
+5CCE
+6441 4B53
+FDD0-3124
+80AE 9AAF
+536C 5C87 6602 663B 44A2 3B7F
+678A 76CE 91A0
+FDD0-3125
+97A5
+FDD0-3126
+513F 800C 5150 4F95 5152 5CCF 6D0F 9651 682D 80F9
+834B 5532 9E38 7CAB 804F 88BB 8F00 42E9 9C95 9AF5
+96AD 9B9E 9D2F 8F5C
+53BC 5C12 5C13 5C14 8033 6D31 8FE9 9975 682E 6BE6
+73E5 94D2 723E 990C 99EC 85BE 9087 8DB0
+4E8C 5F0D 5F10 4F74 5235 54A1 36C5 8D30 8CAE 8848
+8CB3 8A80 927A 6A32
+FDD0-3127
+4E00 4E4A 5F0C 4F0A 8863 533B 541A 58F1 4F9D 54BF
+20C96 36C4 3CD6 6D22 794E 2343F 6098 7317 94F1 58F9
+63D6 6B39 86DC 90FC 5ADB 6F2A 7995 7A26 92A5 5B04
+566B 5901 747F 9E65 7E44 4AD1 6AB9 6BC9 91AB 9EDF
+8B69 9DD6 9EF3
+4E41 4EEA 531C 572F 5937 519D 5B90 6C82 8BD2 8FC6
+4F87 6021 6CB6 72CB 9974 54A6 59E8 5CD3 5DF8 5F2C
+605E 62F8 67C2 73C6 886A 8D3B 8FE4 5BA7 6245 6818
+684B 3EBF 74F5 7719 80F0 8A11 8CA4 8FFB 75CD 79FB
+801B 8898 51D2 7FA0 8413 86E6 8A51 8A52 8CBD 5A90
+6686 6938 8A83 8DE0 9057 9809 9890 98F4 7591 5100
+71AA 7BB7 5DAC 5F5B 5F5C 8794 907A 9824 5BF2 5DB7
+7C03 984A 294E7 4C4C 5F5D 5F5E 8B3B 93D4 89FA 3C18
+8B89 9E03
+4E59 5DF2 4EE5 9487 4F41 20BCB 653A 77E3 8094 5EA1
+8223 82E1 82E2 8681 91D4 501A 6246 914F 506F 7B16
+9018 5D3A 65D1 6905 9CE6 926F 65D6 88FF 8E26 8F22
+657C 8798 49E7 6AA5 4B72 7912 8264 87FB 9857 8F59
+9F6E
+4E42 20086 4E49 4EBF 5F0B 5208 5FC6 808A 827A 8BAE
+4EA6 3439 4F07 5C79 5F02 4F3F 4F5A 52AE 5453 5744
+5F79 6291 6759 8034 8285 8BD1 9091 4F7E 546D 5479
+5CC4 6008 603F 6613 678D 6B25 3CD1 6CC6 7088 79C7
+7ECE 82C5 8BE3 9A7F 4FCB 5955 5E1F 5E20 5F08 223D7
+67BB 6D02 6D42 73B4 75AB 7FBF 263F8 8F76 3465 5508
+57BC 6092 6339 6359 6827 683A 6B2D 6D65 6D73 76CA
+8875 8C0A 52DA 57F6 57F8 60A5 639C 6BB9 7570 785B
+7F9B 7FCA 7FCC 88A3 8A32 8A33 8C59 8C5B 91F4 966D
+96BF 5E46 6561 6679 68ED 6B94 6E59 7132 2497F 433B
+86E1 8A4D 8DC7 8EFC 9038 9220 4E84 517F 3534 610F
+6EA2 7348 75EC 776A 7AE9 41FC 7F22 7FA9 8084 88D4
+88DB 8A63 9AAE 52E9 5AD5 5ED9 698F 7617 8189 8734
+977E 99C5 5104 3989 648E 69F8 6BC5 6F69 71A0 71A4
+761E 84FA 8ABC 9552 9E5D 9E62 9ED3 5293 3601 571B
+58BF 5B11 5B1F 5DA7 61B6 61CC 66C0 6BAA 3D69 6FBA
+71BC 71DA 7631 7796 7A53 7E0A 8257 87A0 5BF1 6581
+66CE 6A8D 6B5D 71E1 71F1 7FF3 7FFC 81C6 858F 8939
+8CF9 9BA8 7654 8D00 93B0 9571 7E76 7E79 85D9 85DD
+8C77 972C 9BE3 9D82 9D83 39A4 7037 8B6F 8B70 91B3
+91B7 9950 2113B 25725 8619 943F 9DC1 9DCA 56C8 61FF
+9A5B 9DE7 9DFE 8649 897C 9F78 8B9B
+5307 8864 8FB7 5B9C 7569 692C 841F 9D8D 7C4E
+4E2B 5727 538B 5416 5E98 62BC 6792 57AD 9E26 6860
+9E2D 57E1 5B72 690F 9D09 930F 9D28 58D3 9D76 941A
+7259 4F22 5391 5C88 5393 73A1 82BD 7B0C 869C 5810
+5D15 5D16 6DAF 731A 740A 7458 775A 8859 6F04 9F56
+2A632
+24D13 538A 5E8C 54D1 5516 555E 75D6 96C5 7602 279DD
+8565
+529C 5720 8F67 4E9A 897E 8BB6 4E9C 72BD 4E9E 8ECB
+8FD3 5A05 631C 7811 4FF9 6C29 5A6D 6397 8A1D 94D4
+63E0 6C2C 7330 8050 26716 5714 7A0F 7AAB 9F7E
+2E84 4E5B 5440
+54DF 5537 55B2
+503B 6396 668D 6930 564E 6F71 882E
+8036 6353 94D8 63F6 91FE 92E3 64E8 9381
+4E5F 5414 51B6 57DC 91CE 5622 6F1C 58C4
+4E1A 53F6 66F3 9875 66F5 591C 62B4 90BA 4EB1 67BC
+9801 6654 67BD 70E8 35A1 5558 6DB2 8C12 5828 6B97
+814B 696A 696D 8449 9113 998C 50F7 6B4B 58B7 420E
+9765 5DAA 5DAB 64DB 66C4 66C5 6FB2 71C1 2681C 8B01
+9134 9923 5688 64EB 66D7 76A3 77B1 9371 64EA 77B8
+790F 42A6 9391 9941 9D7A 7217 9437 9768 9A5C 9E08
+7237 4EAA 723A
+5E7A 592D 5406 5996 6796 6B80 7945 8A1E 5593 6946
+8170 847D 4301 4645 9D01 9080
+723B 5C27 5C2D 80B4 579A 59DA 5CE3 409A 8F7A 5004
+70D1 73E7 7A91 509C 582F 63FA 8C23 8EFA 347E 55C2
+5AB1 5FAD 612E 6416 6447 733A 3A31 669A 69A3 7464
+7476 9059 9065 929A 98D6 9906 5DA2 5DA4 7AAF 7AB0
+4504 991A 7E47 8B20 8B21 26FBE 9390 9CD0 4B19 98BB
+8628 908E 9864 9C29
+4EF8 5B8E 5C86 62AD 6773 72D5 54AC 67FC 82ED 7711
+7A85 7A88 8200 5060 5A79 5D3E 6E94 699A 84D4 9D22
+9F3C 95C4 9A15 9F69 9DD5
+7A7E 8981 94A5 25052 836F 7A94 888E 7B44 8A4F 846F
+718E 899E 977F 735F 9E5E 25AAF 85AC 66DC 71FF 825E
+77C5 85E5 8000 7E85 9DC2 8B91 9470
+4F18 5FE7 6538 5466 602E 6CD1 5E7D 60A0 900C 9E80
+6EFA 6182 512A 5698 7000 913E 6ACC 7E8B 8030
+5C22 5C24 7531 6C8B 72B9 3F55 233DE 6CB9 80AC 90AE
+6023 65BF 75A3 5CF3 6D5F 79DE 4343 94C0 5064 839C
+83B8 86B0 8A27 6E38 7336 9030 90F5 9C7F 6962 7337
+904A 923E 9C89 8F0F 99C0 8763 9B77 8555 8F36 9B8B
+6AFE
+6709 4E23 5363 9149 82C3 3DAD 7F91 5EAE 682F 7F90
+6884 8048 811C 83A0 94D5 6E75 870F 7989 92AA 4B00
+69F1 7256 9EDD 61EE
+2E80 53C8 53F3 5E7C 4F51 4F91 72D6 7CFF 54CA 56FF
+59F7 5BA5 5CDF 67DA 7270 8BF1 5500 7950 8FF6 4001
+86B4 4EB4 8C81 91C9 916D 8A98 9F2C
+53CB 5B67 848F 7257
+6079 5266 70DF 73DA 80ED 5063 5571 5D26 393F 6DCA
+6DF9 7109 7111 479B 9609 6E6E 7312 814C 83F8 7159
+787D 5AE3 6F39 4167 9122 9183 95B9 5B2E 61E8 7BF6
+61D5 81D9 9EEB
+8BA0 4E25 8A00 5CA9 5EF6 6616 6CBF 708E 82AB 598D
+59F8 7814 5A2E 76D0 5A2B 72FF 7402 784F 90D4 9586
+960E 5D52 5D53 6E7A 839A 5869 63C5 694C 41FE 8A7D
+789E 7B75 7D96 8712 8505 989C 8664 95BB 53B3 6A90
+984F 9854 58DB 7C37 56B4 5DCC 6AE9 9EEC 5DD7 58E7
+5B4D 5DD6 9E7D 7939 9EA3
+5935 6281 6C87 4E75 5156 5944 4FE8 5157 533D 5F07
+884D 5043 53A3 63A9 773C 9153 5D43 611D 624A 63DC
+3B7A 68EA 6E30 6E37 7430 8412 90FE 693C 7F68 9043
+9692 6F14 88FA 5D96 622D 8758 8917 565E 8EBD 9B47
+7E2F 6ABF 9A13 9EE1 53B4 2502C 9C0B 9DA0 9EE4 9F5E
+9F91 7517 9EED 513C 9869 9F34 5DD8 5DDA 9F39 66EE
+9B58 9F74 9EF6
+538C 95EB 599F 89C3 726A 54BD 59F2 5F65 5F66 781A
+5501 5BB4 664F 8273 898E 9A8C 5050 7114 8C1A 55AD
+5830 6565 70FB 7130 7131 786F 9681 96C1 50BF 693B
+6E8E 6EDF 8455 9CEB 53AD 5895 66A5 917D 5B0A 8C33
+290C0 990D 9D08 3DF3 3DFC 71C4 71D5 8AFA 8D5D 48AD
+9B33 66D5 9D33 9A10 56A5 5B3F 8276 8D0B 9140 4A04
+4CE1 3B2B 66E3 7213 91B6 9A34 9DC3 7054 8D17 89FE
+8B8C 91BC 995C 9A57 9DF0 8277 2A64A 704E 9A60 7067
+8B9E 8C53 91C5 8C54 7069
+8A01 6A2E 7196 8EC5 6B15
+56D9 56E0 9625 9634 4F8C 5794 59FB 39E2 6D07 97F3
+9A83 6836 6BB7 6C24 8335 51D0 5A63 4104 79F5 836B
+94DF 9670 5591 5819 6114 7B43 7D6A 88C0 967B 9682
+6B45 6EB5 6147 647F 7616 798B 92A6 7DF8 852D 9787
+8AF2 9712 290EC 99F0 567E 95C9 9720 3D8F 97FE
+5198 4E51 3542 541F 72BE 65A6 82C2 57A0 6CFF 3597
+5701 5CFE 70CE 72FA 73E2 8A14 8A1A 5A6C 5BC5 5D1F
+5D2F 6DEB 8376 8A21 94F6 921D 9F82 6EDB 7892 5924
+911E 9280 5656 6BA5 748C 8529 8ABE 569A 6AAD 87EB
+4D26 972A 9F57 9DE3
+4E5A 200CA 5EF4 5C39 5F15 5432 996E 8693 8D7A 6DFE
+920F 9690 98F2 9777 98EE 6704 8F11 96A0 78E4 8D9B
+763E 5DBE 6A83 6FE5 6FE6 87BE 96B1 6AFD 861F 766E
+8B94
+5370 6D15 80E4 57BD 831A 5837 6E5A 730C 5ED5 8491
+9173 616D 6196 6197 764A 9BA3 3865 61DA 6ABC 4543
+7C8C
+592E 5489 59CE 62B0 6CF1 6B83 80E6 770F 79E7 9E2F
+9260 96F5 9785 9D26
+626C 7F8A 65F8 6768 7080 9626 9633 98CF 4F6F 52B7
+6C1C 75A1 9496 579F 5F89 661C 6D0B 7F8F 70CA 73DC
+26B75 773B 5D35 5D38 63DA 86D8 967D 656D 6698 694A
+716C 760D 7993 3B15 8AF9 8F30 935A 9D39 98BA 940A
+9C11 9737 9E09
+4EF0 4F52 5771 5C9F 517B 67CD 70B4 6C27 75D2 7D3B
+509F 8EEE 6143 6967 6C31 8746 990A 99DA 3526 61E9
+6501 4446 7662
+600F 6059 6837 7F95 8A47 69D8 6F3E 6A23 7001
+594D 7FAA 7922
+5E94 5FDC 82F1 685C 5040 5568 5A74 7EEC 83BA 20E04
+21398 5A96 6E36 48D0 5AC8 6720 7150 745B 5624 6484
+78A4 7F28 7F42 8CCF 9533 6A31 748E 7507 7DD3 8767
+7F43 892E 9348 9D2C 9E66 5B30 61C9 81BA 9719 97FA
+9E70 7516 9D91 56B6 5B46 5B7E 6516 7F4C 8B4D 9DA7
+6AFB 74D4 792F 8621 8B7B 9DAF 944D 7E93 8833 9DEA
+9DF9 9E0E 9E1A
+76C1 8FCE 76C8 8314 8367 55B6 83B9 86CD 2870F 6E81
+6E8B 8424 8426 50CC 584B 6979 6EE2 8425 843E 6F46
+7192 84E5 7469 4294 877F 5B34 7E08 87A2 6FD9 6FDA
+6FF4 71DF 89AE 8B0D 8D62 7005 85C0 93A3 650D 701B
+7020 2294F 702F 7034 8D0F 6AFF 7C5D 7C6F
+77E8 6D67 90E2 68AC 988D 9895 9896 646C 4B2C 5F71
+6F41 7484 763F 7A4E 9834 5DCA 5EEE 766D
+6620 786C 5AB5 668E 81A1 565F 9795 941B 9C66
+73F1 6125 8747 7E04 8805 651A 7050 705C 8EC8
+FDD0-3128
+4E4C 572C 5F19 6C59 6C5A 6C61 545C 5DEB 6747 90AC
+5C4B 6D3F 8BEC 94A8 70CF 526D 7A8F 55DA 9114 6B4D
+8AA3 7BBC 8790 9D2E 93A2 9C1E
+65E0 6BCB 5433 5434 543E 5449 829C 5514 5A2A 6D16
+6D6F 90DA 68A7 73F8 8323 8381 7121 7966 94FB 9E40
+8708 8A88 7991 7491 856A 87F1 9BC3 9D50 8B55 9F2F
+9DE1
+4E94 5348 4EF5 59A9 5E91 5FE4 6003 65FF 3B33 6B66
+739D 4FAE 4FC9 5035 6342 554E 5A2C 727E 73F7 6440
+7894 9E49 7193 7466 821E 5AF5 5EE1 61AE 6F55 511B
+6A46 7512 9D61 8E8C
+5140 52FF 3433 620A 4F06 5C7C 6264 9622 575E 5C89
+674C 5FE2 7269 77F9 82B4 8FD5 537C 6544 8BEF 609E
+609F 60AE 7C85 6664 7110 901C 5A7A 5D4D 75E6 9770
+9A9B 5862 5966 5D68 6EA9 9696 96FA 96FE 5BE4 7183
+8AA4 9E5C 92C8 7AB9 907B 4A01 971A 9F3F 9727 9A16
+9F40 8601 9DA9
+4E44 52A1 4F0D 52D9 933B
+7A75 52B8 6316 6D3C 5A32 7556 7A8A 5AA7 86D9 55D7
+6432 6E9B 6F25 7AAA 9F03 6528
+5A03
+74E6 4F64 5493 39DA 90B7
+8049 889C 55E2 817D 8183 896A 97C8 97E4
+5C72 54C7 74F2
+631D 502D 6DA1 5529 6DB9 83B4 6E26 7327 7A9D 8435
+8717 7AA9 8778 8E12 64BE
+6211 5A50 6370 4C00
+4EF4 6C83 809F 5367 6782 81E5 5053 637E 6DB4 5A89
+5E44 63E1 6E25 7125 786A 6943 815B 65A1 7783 20FDF
+64ED 6FE3 9F8C 74C1 81D2 96D8 9F77
+6B6A 558E 7AF5
+5D34
+5916 20C3B 591E 9861
+5371 5A01 20CFF 70D3 504E 55B4 364E 5A99 6104 63CB
+63FB 6E28 840E 9036 9687 9688 5FAE 6933 6972 6EA6
+7168 8468 8473 8A74 8732 875B 89A3 71F0 8587 9CC2
+9C03 9C04 5DCD
+56D7 97E6 5729 56F4 5E0F 6CA9 95F1 8FDD 5CD7 5CDE
+6D08 97CB 6845 6DA0 552F 5E37 60DF 7859 7EF4 55A1
+570D 5A81 5E43 6E4B 6E88 741F 912C 5D6C 9055 6F4D
+7DAD 6F59 6F7F 78D1 84F6 9180 6FF0 934F 95C8 9BA0
+7653 4260 89B9 973A 6B08 72A9
+5383 4F1F 4F2A 5C3E 7EAC 59D4 3B4F 709C 73AE 829B
+82C7 6D27 5A13 5C57 6D58 8BFF 5049 507D 5D23 68B6
+75CF 784A 8371 5BEA 5D54 5FAB 6107 7325 9AA9 6690
+6932 7152 744B 75FF 41FB 8172 8249 8466 848D 97EA
+9AAA 9AAB 50DE 9C94 5130 64B1 78C8 25BE4 7DEF 8AC9
+8E13 97D1 9820 3B19 853F 285E8 9361 9BAA 6FFB 85B3
+97D9 98B9 58DD 7022 8624 97E1 6596
+536B 4E3A 672A 4F4D 5473 70BA 754F 80C3 82FF 53DE
+8ECE 5C09 8C13 5582 5AA6 6E2D 3DC9 7232 83CB 715F
+78A8 873C 6170 71AD 729A 7DED 851A 885B 61C0 748F
+7F7B 885E 8B02 9927 9B87 87B1 893D 9935 8F4A 9B4F
+85EF 93CF 9728 9CDA 9956 8636 8B86 8E97 4C81 8B8F
+8E9B
+6364 7140 732C 589B 7E05 875F 5DB6
+5F2F 525C 5A60 5E35 5846 6E7E 873F 6F6B 8C4C 5F4E
+58EA 7063
+4E38 5213 6C4D 7EA8 5B8C 5C8F 628F 8284 73A9 7D08
+6356 987D 70F7 7413 9811 4BC8 7FEB
+5B9B 5007 550D 633D 76CC 57E6 5A49 60CB 665A 6669
+689A 7EFE 8118 667C 6900 742C 7696 83C0 8416 7579
+7755 7897 7DA9 7DB0 8F13 8E20 92C4 92D4 4A4A 3736
+4E07 534D 5350 59A7 5FE8 6365 8115 8CA6 8155 842C
+8F10 6FAB 933D 858D 87C3 8D03 93AB 4951 8D0E
+909C 6764 7B02
+6637 6E29 586D 3B08 6985 6EAB 8F92 6B9F 7465 761F
+8570 8F3C 8C71 8F40 9CC1 97B0 29948 9C1B 9C2E
+5301 6587 5F63 7EB9 7086 739F 82A0 95FB 7D0B 8689
+868A 73F3 960C 741D 96EF 7612 805E 99BC 9B70 9CFC
+9D0D 87A1 95BA 95BF 87C1 95C5 9F24 95E6
+520E 543B 5FDF 6286 5461 80B3 7D0A 687D 8117 7A33
+7A4F 7A69
+95EE 598F 6C76 554F 6E02 83AC 63FE 6435 9850 74BA
+545A 922B 93BE
+21BC1 5C23 5C29 5C2A 5C2B 6C6A
+4EA1 4EBE 5166 738B 4EFC 5F7A 869F 83A3
+34C1 7F52 7F51 5F80 5F83 7F54 5F8D 60D8 6680 68E2
+83F5 86E7 8F8B 7DB2 8744 8AB7 8F1E 7007 9B4D
+5984 5FD8 65FA 76F3 8FCB 671B 6722 4911
+6789 7139
+7FC1 55E1 6EC3 9E5F 8789 9393 9DB2
+3622 52DC 5963 5855 5D61 66A1 4425 84CA 7788 806C
+3732
+74EE 8579 7515 7F4B 9F46
+FDD0-3129
+625C 7EA1 8FC2 8FC3 7A7B 7D06 8676 9653 5539 6DE4
+76D3 6BFA 7600 7B8A
+4E90 4E8E 4F03 36A5 3B30 9098 4F59 59A4 6275 6745
+6B24 7397 7399 65BC 76C2 81FE 9C7C 4E7B 4FDE 516A
+79BA 7AFD 4342 8867 5A1B 5A2F 5A31 6859 72F3 8201
+8330 8C00 9151 9980 6E14 96E9 9B5A 5823 582C 5D33
+5D4E 5D5B 3965 6109 63C4 6970 6E1D 6E61 756D 7862
+8174 8438 9685 611A 65D5 3B02 6961 6986 6B48 724F
+745C 8245 842E 865E 89CE 903E 9AAC 6F01 776E 7AAC
+6B76 7FAD 4433 8753 8915 8ADB 96D3 9918 4C3B 6F9E
+8206 854D 89A6 8E30 5B29 87B8 8F3F 935D 28A36 6B5F
+74B5 8B23 9BBD 9A1F 9AC3 65DF 7C45 861B 9C05 4CA3
+9DE0 9E06
+4E0E 4E88 4F1B 5B87 5C7F 7FBD 2ED7 96E8 4FC1 4FE3
+79B9 8BED 5704 5CFF 504A 3531 532C 5709 5EBE 6554
+7964 3762 659E 9105 50B4 5BD9 6940 7440 7610 842D
+38C3 8207 8A9E 7AB3 92D9 9828 9F89 5673 8C90 5DBC
+61D9 399B 6594 9E8C 860C 9F6C
+8080 7389 9A6D 572B 807F 59AA 5FEC 828B 828C 996B
+80B2 3922 6631 72F1 79D7 90C1 4FFC 5CEA 5F67 6D74
+7821 831F 94B0 9884 57DF 5809 5FA1 6086 60D0 6B32
+6DE2 6DEF 8C15 9608 5585 5590 55A9 55BB 5A80 5BD3
+5EBD 68DB 68DC 68EB 7134 7419 77DE 7872 26C40 9033
+98EB 99AD 9E46 6108 6BD3 6EEA 715C 3F63 7A22 7F6D
+8248 88D5 8A89 9047 923A 9810 5AD7 5D8E 622B 7344
+7609 4205 42ED 7DCE 84AE 84E3 871F 872E 463B 8F0D
+9289 564A 617E 6F4F 7A36 84F9 92CA 9CFF 224B0 6FA6
+71CF 79A6 8AED 8C6B 9079 9325 95BE 9D25 9D2A 5125
+2148A 71E0 7BFD 8577 8581 9E6C 7652 7907 7916 7E58
+27450 91A7 9B4A 9D52 791C 7A65 9947 6AF2 9731 8B7D
+8F5D 942D 6B0E 9A48 9B3B 7C5E 9C4A 9DF8 6B1D 9E12
+9FA5 8EC9 9B30 9B31 706A 7C72 7229
+6327 8362 6F9A 9BF2
+66F0 66F1 7EA6 7D04 7BB9 5F5F 77F1 5F60
+2E9D 6708 6209 5216 599C 5C84 6288 216DF 5CB3 73A5
+793F 6071 4195 6085 60A6 868E 868F 8ECF 94BA 9605
+6373 8DC0 8DC3 4847 7CA4 8D8A 9205 7CB5 925E 4926
+95B1 95B2 6A3E 7BD7 5B33 5DBD 294E5 9FA0 3730 3B26
+7039 7C46 9EE6 721A 8625 8E8D 79B4 7C65 9E11 7C70
+9E19
+56E6 9E22 5248 51A4 6081 7722 9E33 5BC3 6DF5 6E01
+6E06 6E0A 6E15 60CC 68E9 3F93 847E 870E 9E53 7BA2
+84AC 8735 88F7 9CF6 485D 99CC 9D1B 5B3D 4949 9D77
+7041 9F18 9F1D
+5143 5186 8D20 5458 56ED 6C85 90A7 676C 57A3 7230
+8C9F 539F 54E1 5706 7B0E 8696 8881 53A1 570E 63F4
+6E72 7328 7F18 8312 9F0B 5712 5713 586C 5AB4 5AC4
+6E90 6E92 733F 7342 699E 69AC 849D 8F95 7DE3 7E01
+875D 876F 9B6D 4CAE 6A7C 7FB1 8788 8597 8B1C 8F45
+9EFF 93B1 6ADE 908D 9A35 9DA2 9DB0 53B5
+8FDC 76F6 903A 9060 92FA
+5917 8099 59B4 3B47 6028 82D1 57B8 884F 9662 5086
+5A9B 63BE 7457 613F 7990 88EB 8911 566E 8924 9858
+915B 9228
+6655 7F0A 6688 7174 8480 596B 6C32 6C33 8495 7E15
+8779 8D5F 9835 8D07 99A7
+4E91 52FB 5300 56E9 5998 6C84 7EAD 6600 82B8 7547
+7703 79D0 6DA2 7D1C 8018 803A 90E7 96F2 612A 6EB3
+7B60 7B7C 9116 69B2 7189 84B7 6F90 92C6 6A52 7BD4
+7E1C 8553 9942
+5141 593D 628E 72C1 962D 9668 6B92 837A 5597 491E
+9217 9695 6B9E 99BB 78D2 891E 8CF1 9723 9F73
+5B55 679F 8FD0 607D 90D3 915D 508A 60F2 6120 9106
+614D 816A 904B 97EB 97F5 7185 71A8 7DF7 7DFC 4CB0
+8574 9196 8580 919E 992B 97D7 85F4 97DE 97FB 860A
+62A3 7E67
+4F63 62E5 75C8 9095 5EB8 50AD 55C8 96CD 5889 5ADE
+6175 6EFD 9118 69E6 5670 58C5 64C1 6FAD 90FA 955B
+81C3 7655 96DD 93DE 9CD9 5EF1 7049 9954 9C45 9DDB
+7670
+5581 63D8 7245 9899 9852 9C2B
+6C38 752C 548F 6CF3 4FD1 52C7 52C8 6810 57C7 6080
+67E1 6D8C 607F 3D04 509B 60E5 6111 6E67 7867 8A60
+584E 5D71 5F6E 6139 86F9 6142 8E0A 799C 9CAC 8E34
+9BD2
+7528 82DA 919F
+603A 783D
+__END__
+
+=head1 NAME
+
+Unicode::Collate::CJK::Zhuyin - weighting CJK Unified Ideographs
+for Unicode::Collate
+
+=head1 SYNOPSIS
+
+ use Unicode::Collate;
+ use Unicode::Collate::CJK::Zhuyin;
+
+ my $collator = Unicode::Collate->new(
+ overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin
+ );
+
+=head1 DESCRIPTION
+
+C<Unicode::Collate::CJK::Zhuyin> provides C<weightZhuyin()>,
+that is adequate for C<overrideCJK> of C<Unicode::Collate>
+and makes tailoring of CJK Unified Ideographs in the order
+of CLDR's zhuyin (bopomofo) ordering.
+
+=head1 CAVEAT
+
+The zhuyin ordering includes some characters that are not
+CJK Unified Ideographs and can't utilize C<weightZhuyin()>
+for collation. For them, use C<entry> instead.
+
+=head1 SEE ALSO
+
+=over 4
+
+=item CLDR - Unicode Common Locale Data Repository
+
+L<http://cldr.unicode.org/>
+
+=item Unicode Locale Data Markup Language (LDML) - UTS #35
+
+L<http://www.unicode.org/reports/tr35/>
+
+=item L<Unicode::Collate>
+
+=item L<Unicode::Collate::Locale>
+
+=back
+
+=cut
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/as.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/as.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/as.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,13 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0982 ; [.204B.0020.0002.0982][.FFF1.0000.0000.0000] # BENGALI SIGN ANUSVARA
+0981 ; [.204B.0020.0002.0981][.FFF2.0000.0000.0000] # BENGALI SIGN CANDRABINDU
+0983 ; [.204B.0020.0002.0983][.FFF3.0000.0000.0000] # BENGALI SIGN VISARGA
+0994 ; [.204B.0020.0002.0994][.FFF0.0000.0000.0000] # BENGALI LETTER AU
+09A4 09CD 200D ; [.205A.0020.0002.09A4][.FFF1.0000.0000.0000] # <BENGALI LETTER TA, BENGALI SIGN VIRAMA, ZERO WIDTH JOINER>
+09A3 ; [.205A.0020.0002.09A3][.FFF0.0000.0000.0000] # BENGALI LETTER NNA
+0995 09CD 09B7 ; [.206D.0020.0002.0995][.FFF1.0000.0000.0000] # <BENGALI LETTER KA, BENGALI SIGN VIRAMA, BENGALI LETTER SSA>
+09B9 ; [.206D.0020.0002.09B9][.FFF0.0000.0000.0000] # BENGALI LETTER HA
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/be.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/be.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/be.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,43 @@
++{
+ locale_version => 0.93,
+ suppress => [0x0410, 0x0430, 0x04D8, 0x04D9, 0x0413, 0x0433, 0x0415, 0x0435,
+ 0x0416, 0x0436, 0x0417, 0x0437, 0x0406, 0x0456, 0x041E, 0x043E,
+ 0x04E8, 0x04E9, 0x041A, 0x043A, 0x0427, 0x0447, 0x042B, 0x044B,
+ 0x042D, 0x044D, 0x0474, 0x0475],
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0451 ; [.19DA.0020.0002.0451] # CYRILLIC SMALL LETTER IO
+0435 0308 ; [.19DA.0020.0002.0451] # CYRILLIC SMALL LETTER IO
+0401 ; [.19DA.0020.0008.0401] # CYRILLIC CAPITAL LETTER IO
+0415 0308 ; [.19DA.0020.0008.0401] # CYRILLIC CAPITAL LETTER IO
+04D1 ; [.1991.0020.0002.0430][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER A WITH BREVE
+04D0 ; [.1991.0020.0008.0410][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D3 ; [.1991.0020.0002.0430][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D2 ; [.1991.0020.0008.0410][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04DB ; [.199D.0020.0002.04D9][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DA ; [.199D.0020.0008.04D8][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+0453 ; [.19B1.0020.0002.0433][.0000.0032.0002.0301] # CYRILLIC SMALL LETTER GJE
+0403 ; [.19B1.0020.0008.0413][.0000.0032.0002.0301] # CYRILLIC CAPITAL LETTER GJE
+04D7 ; [.19D9.0020.0002.0435][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER IE WITH BREVE
+04D6 ; [.19D9.0020.0008.0415][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04DD ; [.19E5.0020.0002.0436][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DC ; [.19E5.0020.0008.0416][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DF ; [.19F2.0020.0002.0437][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04DE ; [.19F2.0020.0008.0417][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+0457 ; [.1A16.0020.0002.0456][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER YI
+0407 ; [.1A16.0020.0008.0406][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER YI
+04E7 ; [.1A77.0020.0002.043E][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E6 ; [.1A77.0020.0008.041E][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04EB ; [.1A7F.0020.0002.04E9][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EA ; [.1A7F.0020.0008.04E8][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+045C ; [.1A28.0020.0002.043A][.0000.0032.0002.0301] # CYRILLIC SMALL LETTER KJE
+040C ; [.1A28.0020.0008.041A][.0000.0032.0002.0301] # CYRILLIC CAPITAL LETTER KJE
+04F5 ; [.1B0C.0020.0002.0447][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F4 ; [.1B0C.0020.0008.0427][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F9 ; [.1B3F.0020.0002.044B][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04F8 ; [.1B3F.0020.0008.042B][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04ED ; [.1B54.0020.0002.044D][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EC ; [.1B54.0020.0008.042D][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+0477 ; [.1B8A.0020.0002.0475][.0000.0065.0002.030F] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0476 ; [.1B8A.0020.0008.0474][.0000.0065.0002.030F] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/bg.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/bg.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/bg.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
++{
+ locale_version => 0.93,
+ suppress => [0x0410, 0x0430, 0x04D8, 0x04D9, 0x0413, 0x0433, 0x0415, 0x0435,
+ 0x0416, 0x0436, 0x0417, 0x0437, 0x0406, 0x0456, 0x041E, 0x043E,
+ 0x04E8, 0x04E9, 0x041A, 0x043A, 0x0423, 0x0443, 0x0427, 0x0447,
+ 0x042B, 0x044B, 0x042D, 0x044D, 0x0474, 0x0475],
+ entry => <<'ENTRY', # for DUCET v6.2.0
+04D1 ; [.1991.0020.0002.0430][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER A WITH BREVE
+04D0 ; [.1991.0020.0008.0410][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D3 ; [.1991.0020.0002.0430][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D2 ; [.1991.0020.0008.0410][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04DB ; [.199D.0020.0002.04D9][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DA ; [.199D.0020.0008.04D8][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+0453 ; [.19B1.0020.0002.0433][.0000.0032.0002.0301] # CYRILLIC SMALL LETTER GJE
+0403 ; [.19B1.0020.0008.0413][.0000.0032.0002.0301] # CYRILLIC CAPITAL LETTER GJE
+04D7 ; [.19D9.0020.0002.0435][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER IE WITH BREVE
+04D6 ; [.19D9.0020.0008.0415][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04DD ; [.19E5.0020.0002.0436][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DC ; [.19E5.0020.0008.0416][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DF ; [.19F2.0020.0002.0437][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04DE ; [.19F2.0020.0008.0417][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+0457 ; [.1A16.0020.0002.0456][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER YI
+0407 ; [.1A16.0020.0008.0406][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER YI
+04E7 ; [.1A77.0020.0002.043E][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E6 ; [.1A77.0020.0008.041E][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04EB ; [.1A7F.0020.0002.04E9][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EA ; [.1A7F.0020.0008.04E8][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+045C ; [.1A28.0020.0002.043A][.0000.0032.0002.0301] # CYRILLIC SMALL LETTER KJE
+040C ; [.1A28.0020.0008.041A][.0000.0032.0002.0301] # CYRILLIC CAPITAL LETTER KJE
+045E ; [.1AB9.0020.0002.0443][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER SHORT U
+040E ; [.1AB9.0020.0008.0423][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER SHORT U
+04F1 ; [.1AB9.0020.0002.0443][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F0 ; [.1AB9.0020.0008.0423][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F3 ; [.1AB9.0020.0002.0443][.0000.004D.0002.030B] # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F2 ; [.1AB9.0020.0008.0423][.0000.004D.0002.030B] # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F5 ; [.1B0C.0020.0002.0447][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F4 ; [.1B0C.0020.0008.0427][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F9 ; [.1B3F.0020.0002.044B][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04F8 ; [.1B3F.0020.0008.042B][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04ED ; [.1B54.0020.0002.044D][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EC ; [.1B54.0020.0008.042D][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+0477 ; [.1B8A.0020.0002.0475][.0000.0065.0002.030F] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0476 ; [.1B8A.0020.0008.0474][.0000.0065.0002.030F] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/bn.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/bn.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/bn.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0982 ; [.204B.0020.0002.0982][.FFF1.0000.0000.0000] # BENGALI SIGN ANUSVARA
+0983 ; [.204B.0020.0002.0983][.FFF2.0000.0000.0000] # BENGALI SIGN VISARGA
+0981 ; [.204B.0020.0002.0981][.FFF3.0000.0000.0000] # BENGALI SIGN CANDRABINDU
+0994 ; [.204B.0020.0002.0994][.FFF0.0000.0000.0000] # BENGALI LETTER AU
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ee.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ee.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ee.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
++{
+ locale_version => 0.95,
+# d-tail, open-e, f-hook, gamma, eng, open-o, v-hook don't require tailoring
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0302 ; [.0000.0042.0002.0302] # COMBINING CIRCUMFLEX ACCENT
+00E2 ; [.15EF.0020.0002.0061][.0000.0042.0002.0302] # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00C2 ; [.15EF.0020.0008.0041][.0000.0042.0002.0302] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00EA ; [.164C.0020.0002.0065][.0000.0042.0002.0302] # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00CA ; [.164C.0020.0008.0045][.0000.0042.0002.0302] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00EE ; [.16CD.0020.0002.0069][.0000.0042.0002.0302] # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00CE ; [.16CD.0020.0008.0049][.0000.0042.0002.0302] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00F4 ; [.1771.0020.0002.006F][.0000.0042.0002.0302] # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00D4 ; [.1771.0020.0008.004F][.0000.0042.0002.0302] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00FB ; [.1836.0020.0002.0075][.0000.0042.0002.0302] # LATIN SMALL LETTER U WITH CIRCUMFLEX
+00DB ; [.1836.0020.0008.0055][.0000.0042.0002.0302] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0177 ; [.1880.0020.0002.0079][.0000.0042.0002.0302] # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0176 ; [.1880.0020.0008.0059][.0000.0042.0002.0302] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0064 007A ; [.1632.0020.0002.0064] # <LATIN SMALL LETTER D, LATIN SMALL LETTER Z>
+0044 007A ; [.1632.0020.0007.0044] # <LATIN CAPITAL LETTER D, LATIN SMALL LETTER Z>
+0044 005A ; [.1632.0020.0008.0044] # <LATIN CAPITAL LETTER D, LATIN CAPITAL LETTER Z>
+0067 0062 ; [.1692.0020.0002.0067] # <LATIN SMALL LETTER G, LATIN SMALL LETTER B>
+0047 0062 ; [.1692.0020.0007.0047] # <LATIN CAPITAL LETTER G, LATIN SMALL LETTER B>
+0047 0042 ; [.1692.0020.0008.0047] # <LATIN CAPITAL LETTER G, LATIN CAPITAL LETTER B>
+0078 ; [.16B5.0020.0002.0078] # LATIN SMALL LETTER X
+0058 ; [.16B5.0020.0008.0058] # LATIN CAPITAL LETTER X
+006B 0070 ; [.1700.0020.0002.006B] # <LATIN SMALL LETTER K, LATIN SMALL LETTER P>
+004B 0070 ; [.1700.0020.0007.004B] # <LATIN CAPITAL LETTER K, LATIN SMALL LETTER P>
+004B 0050 ; [.1700.0020.0008.004B] # <LATIN CAPITAL LETTER K, LATIN CAPITAL LETTER P>
+006E 0079 ; [.1750.0020.0002.006E] # <LATIN SMALL LETTER N, LATIN SMALL LETTER Y>
+004E 0079 ; [.1750.0020.0007.004E] # <LATIN CAPITAL LETTER N, LATIN SMALL LETTER Y>
+004E 0059 ; [.1750.0020.0008.004E] # <LATIN CAPITAL LETTER N, LATIN CAPITAL LETTER Y>
+0074 0073 ; [.1817.0020.0002.0074] # <LATIN SMALL LETTER T, LATIN SMALL LETTER S>
+0054 0073 ; [.1817.0020.0007.0054] # <LATIN CAPITAL LETTER T, LATIN SMALL LETTER S>
+0054 0053 ; [.1817.0020.0008.0054] # <LATIN CAPITAL LETTER T, LATIN CAPITAL LETTER S>
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/fa.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/fa.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/fa.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,51 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0650 ; [.0000.00AE.0002.0650] # ARABIC KASRA
+064B ; [.0000.00B3.0002.064B] # ARABIC FATHATAN
+064D ; [.0000.00B4.0002.064D] # ARABIC KASRATAN
+064C ; [.0000.00B5.0002.064C] # ARABIC DAMMATAN
+0622 ; [.1C9B.0020.0002.0622][.FFF1.0000.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE
+0627 0653 ; [.1C9B.0020.0002.0622][.FFF1.0000.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE
+08AC ; [.1C9B.0020.0002.08AC][.FFF0.0000.0000.0000] # ARABIC LETTER ROHINGYA YEH
+0671 ; [.1C9C.0021.0002.0671] # ARABIC LETTER ALEF WASLA
+0621 ; [.1C9D.0020.0002.0621][.FFF0.0000.0000.0000] # ARABIC LETTER HAMZA
+0623 ; [.1C9D.0021.0002.0623][.FFF0.0000.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE
+0627 0654 ; [.1C9D.0021.0002.0623][.FFF0.0000.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE
+0672 ; [.1C9D.0022.0002.0672][.FFF0.0000.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0625 ; [.1C9D.0023.0002.0625][.FFF0.0000.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW
+0627 0655 ; [.1C9D.0023.0002.0625][.FFF0.0000.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW
+0673 ; [.1C9D.0024.0002.0673][.FFF0.0000.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0624 ; [.1C9D.0025.0002.0624][.FFF0.0000.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE
+0648 0654 ; [.1C9D.0025.0002.0624][.FFF0.0000.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE
+06CC 0654 ; [.1C9D.0026.0002.06CC][.FFF0.0000.0000.0000] # <ARABIC LETTER FARSI YEH, ARABIC HAMZA ABOVE>
+0649 0654 ; [.1C9D.0026.0003.0649][.FFF0.0000.0000.0000] # <ARABIC LETTER ALEF MAKSURA, ARABIC HAMZA ABOVE>
+0626 ; [.1C9D.0026.0004.0626][.FFF0.0000.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE
+064A 0654 ; [.1C9D.0026.0004.0626][.FFF0.0000.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE
+066E ; [.1C9D.0020.0002.066E][.FFF1.0000.0000.0000] # ARABIC LETTER DOTLESS BEH
+06AA ; [.1D0E.0021.0002.06AA] # ARABIC LETTER SWASH KAF
+06AB ; [.1D0E.0022.0002.06AB] # ARABIC LETTER KAF WITH RING
+0643 ; [.1D0E.0023.0002.0643] # ARABIC LETTER KAF
+06AC ; [.1D0E.0024.0002.06AC] # ARABIC LETTER KAF WITH DOT ABOVE
+06AD ; [.1D0E.0025.0002.06AD] # ARABIC LETTER NG
+06AE ; [.1D0E.0026.0002.06AE] # ARABIC LETTER KAF WITH THREE DOTS BELOW
+0647 ; [.1D43.0020.0002.0647][.FFF1.0000.0000.0000] # ARABIC LETTER HEH
+06D5 ; [.1D43.0021.0002.06D5][.FFF1.0000.0000.0000] # ARABIC LETTER AE
+06C1 ; [.1D43.0022.0002.06C1][.FFF1.0000.0000.0000] # ARABIC LETTER HEH GOAL
+06C2 ; [.1D43.0022.0002.06C1][.FFF1.0000.0000.0000][.0000.00BE.0002.0654] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+0629 ; [.1D43.0023.0002.0629][.FFF1.0000.0000.0000] # ARABIC LETTER TEH MARBUTA
+06C3 ; [.1D43.0024.0002.06C3][.FFF1.0000.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL
+06C0 ; [.1D43.0025.0002.06C0][.FFF1.0000.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE
+06D5 0654 ; [.1D43.0025.0002.06C0][.FFF1.0000.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE
+06BE ; [.1D43.0026.0002.06BE][.FFF1.0000.0000.0000] # ARABIC LETTER HEH DOACHASHMEE
+06CF ; [.1D43.0020.0002.06CF][.FFF0.0000.0000.0000] # ARABIC LETTER WAW WITH DOT ABOVE
+0649 ; [.1D49.0021.0002.0649] # ARABIC LETTER ALEF MAKSURA
+06D2 ; [.1D49.0022.0002.06D2] # ARABIC LETTER YEH BARREE
+06D3 ; [.1D49.0022.0002.06D2][.0000.00BE.0002.0654] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+064A ; [.1D49.0023.0002.064A] # ARABIC LETTER YEH
+06D0 ; [.1D49.0024.0002.06D0] # ARABIC LETTER E
+06D1 ; [.1D49.0025.0002.06D1] # ARABIC LETTER YEH WITH THREE DOTS BELOW
+06CD ; [.1D49.0026.0002.06CD] # ARABIC LETTER YEH WITH TAIL
+06CE ; [.1D49.0027.0002.06CE] # ARABIC LETTER YEH WITH SMALL V
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/fi_phone.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/fi_phone.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/fi_phone.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,62 @@
++{
+ locale_version => 0.93,
+# in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ?
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0111 ; [.1631.0021.0002.0111][.0000.007D.0002.0335] # LATIN SMALL LETTER D WITH STROKE
+0110 ; [.1631.0021.0008.0110][.0000.007D.0002.0335] # LATIN CAPITAL LETTER D WITH STROKE
+01E5 ; [.1691.0021.0002.01E5][.0000.007D.0002.0335] # LATIN SMALL LETTER G WITH STROKE
+01E4 ; [.1691.0021.0008.01E4][.0000.007D.0002.0335] # LATIN CAPITAL LETTER G WITH STROKE
+014B ; [.174F.0021.0002.014B][.0000.007D.0002.0335] # LATIN SMALL LETTER ENG
+014A ; [.174F.0021.0008.014A][.0000.007D.0002.0335] # LATIN CAPITAL LETTER ENG
+0167 ; [.1816.0021.0002.0167][.0000.007D.0002.0335] # LATIN SMALL LETTER T WITH STROKE
+0166 ; [.1816.0021.0008.0166][.0000.007D.0002.0335] # LATIN CAPITAL LETTER T WITH STROKE
+00FC ; [.1880.0021.0002.00FC] # LATIN SMALL LETTER U WITH DIAERESIS
+0075 0308 ; [.1880.0021.0002.00FC] # LATIN SMALL LETTER U WITH DIAERESIS
+00DC ; [.1880.0021.0008.00DC] # LATIN CAPITAL LETTER U WITH DIAERESIS
+0055 0308 ; [.1880.0021.0008.00DC] # LATIN CAPITAL LETTER U WITH DIAERESIS
+01DC ; [.1880.0021.0002.00FC][.0000.0035.0002.0300] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DB ; [.1880.0021.0008.00DC][.0000.0035.0002.0300] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01D8 ; [.1880.0021.0002.00FC][.0000.0032.0002.0301] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D7 ; [.1880.0021.0008.00DC][.0000.0032.0002.0301] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D6 ; [.1880.0021.0002.00FC][.0000.005B.0002.0304] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D5 ; [.1880.0021.0008.00DC][.0000.005B.0002.0304] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01DA ; [.1880.0021.0002.00FC][.0000.0041.0002.030C] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01D9 ; [.1880.0021.0008.00DC][.0000.0041.0002.030C] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+0292 ; [.1895.0021.0002.0292][.0000.007D.0002.0335] # LATIN SMALL LETTER EZH
+01B7 ; [.1895.0021.0008.01B7][.0000.007D.0002.0335] # LATIN CAPITAL LETTER EZH
+01EF ; [.1895.0021.0002.0292][.0000.007D.0002.0335][.0000.0041.0002.030C] # LATIN SMALL LETTER EZH WITH CARON
+01EE ; [.1895.0021.0008.01B7][.0000.007D.0002.0335][.0000.0041.0002.030C] # LATIN CAPITAL LETTER EZH WITH CARON
+00E5 ; [.1906.0020.0002.00E5] # LATIN SMALL LETTER A WITH RING ABOVE
+0061 030A ; [.1906.0020.0002.00E5] # LATIN SMALL LETTER A WITH RING ABOVE
+00C5 ; [.1906.0020.0008.00C5] # LATIN CAPITAL LETTER A WITH RING ABOVE
+0041 030A ; [.1906.0020.0008.00C5] # LATIN CAPITAL LETTER A WITH RING ABOVE
+212B ; [.1906.0020.0008.00C5] # ANGSTROM SIGN
+01FB ; [.1906.0020.0002.00E5][.0000.0032.0002.0301] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FA ; [.1906.0020.0008.00C5][.0000.0032.0002.0301] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+00E4 ; [.1907.0020.0002.00E4] # LATIN SMALL LETTER A WITH DIAERESIS
+0061 0308 ; [.1907.0020.0002.00E4] # LATIN SMALL LETTER A WITH DIAERESIS
+00C4 ; [.1907.0020.0008.00C4] # LATIN CAPITAL LETTER A WITH DIAERESIS
+0041 0308 ; [.1907.0020.0008.00C4] # LATIN CAPITAL LETTER A WITH DIAERESIS
+01DF ; [.1907.0020.0002.00E4][.0000.005B.0002.0304] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01DE ; [.1907.0020.0008.00C4][.0000.005B.0002.0304] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+00E6 ; [.1907.0021.0002.00E6] # LATIN SMALL LETTER AE
+00C6 ; [.1907.0021.0008.00C6] # LATIN CAPITAL LETTER AE
+1D2D ; [.1907.0021.0014.1D2D] # MODIFIER LETTER CAPITAL AE
+01FD ; [.1907.0021.0002.00E6][.0000.0032.0002.0301] # LATIN SMALL LETTER AE WITH ACUTE
+01FC ; [.1907.0021.0008.00C6][.0000.0032.0002.0301] # LATIN CAPITAL LETTER AE WITH ACUTE
+01E3 ; [.1907.0021.0002.00E6][.0000.005B.0002.0304] # LATIN SMALL LETTER AE WITH MACRON
+01E2 ; [.1907.0021.0008.00C6][.0000.005B.0002.0304] # LATIN CAPITAL LETTER AE WITH MACRON
+00F6 ; [.1908.0020.0002.00F6] # LATIN SMALL LETTER O WITH DIAERESIS
+006F 0308 ; [.1908.0020.0002.00F6] # LATIN SMALL LETTER O WITH DIAERESIS
+00D6 ; [.1908.0020.0008.00D6] # LATIN CAPITAL LETTER O WITH DIAERESIS
+004F 0308 ; [.1908.0020.0008.00D6] # LATIN CAPITAL LETTER O WITH DIAERESIS
+022B ; [.1908.0020.0002.00F6][.0000.005B.0002.0304] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022A ; [.1908.0020.0008.00D6][.0000.005B.0002.0304] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+00F8 ; [.1908.0021.0002.00F8] # LATIN SMALL LETTER O WITH STROKE
+006F 0338 ; [.1908.0021.0002.00F8] # LATIN SMALL LETTER O WITH STROKE
+00D8 ; [.1908.0021.0008.00D8] # LATIN CAPITAL LETTER O WITH STROKE
+004F 0338 ; [.1908.0021.0008.00D8] # LATIN CAPITAL LETTER O WITH STROKE
+01FF ; [.1908.0021.0002.00F8][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+01FE ; [.1908.0021.0008.00D8][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/gu.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/gu.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/gu.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0A82 ; [.20B7.0020.0002.0A82][.FFF1.0000.0000.0000] # GUJARATI SIGN ANUSVARA
+0A81 ; [.20B7.0021.0002.0A81][.FFF1.0000.0000.0A81] # GUJARATI SIGN CANDRABINDU
+0A83 ; [.20B7.0020.0002.0A83][.FFF2.0000.0000.0000] # GUJARATI SIGN VISARGA
+0AD0 ; [.20B7.0020.0002.0AD0][.FFF0.0000.0000.0000] # GUJARATI OM
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/hi.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/hi.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/hi.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0902 ; [.1FDC.0020.0002.0902][.FFF1.0000.0000.0000] # DEVANAGARI SIGN ANUSVARA
+0901 ; [.1FDC.0021.0002.0901][.FFF1.0000.0000.0901] # DEVANAGARI SIGN CANDRABINDU
+0903 ; [.1FDC.0020.0002.0903][.FFF2.0000.0000.0000] # DEVANAGARI SIGN VISARGA
+0950 ; [.1FDC.0020.0002.0950][.FFF0.0000.0000.0000] # DEVANAGARI OM
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/kn.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/kn.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/kn.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0C82 ; [.21C7.0020.0002.0C82][.FFF1.0000.0000.0000] # KANNADA SIGN ANUSVARA
+0C83 ; [.21C7.0020.0002.0C83][.FFF2.0000.0000.0000] # KANNADA SIGN VISARGA
+0CF1 ; [.21C7.0020.0002.0CF1][.FFF3.0000.0000.0000] # KANNADA SIGN JIHVAMULIYA
+0CF2 ; [.21C7.0020.0002.0CF2][.FFF4.0000.0000.0000] # KANNADA SIGN UPADHMANIYA
+0C94 ; [.21C7.0020.0002.0C94][.FFF0.0000.0000.0000] # KANNADA LETTER AU
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/kok.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/kok.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/kok.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,13 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0902 ; [.1FDC.0020.0002.0902][.FFF1.0000.0000.0000] # DEVANAGARI SIGN ANUSVARA
+0901 ; [.1FDC.0021.0002.0901][.FFF1.0000.0000.0901] # DEVANAGARI SIGN CANDRABINDU
+0903 ; [.1FDC.0020.0002.0903][.FFF2.0000.0000.0000] # DEVANAGARI SIGN VISARGA
+0950 ; [.1FDC.0020.0002.0950][.FFF0.0000.0000.0000] # DEVANAGARI OM
+0933 ; [.201D.0020.0002.0933][.FFF1.0000.0000.0000] # DEVANAGARI LETTER LLA
+0934 ; [.201D.0020.0002.0933][.FFF1.0000.0000.0000][.0000.00F1.0002.093C] # DEVANAGARI LETTER LLLA
+0915 094D 0937 ; [.201D.0020.0002.0915][.FFF2.0000.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA>
+0939 ; [.201D.0020.0002.0939][.FFF0.0000.0000.0000] # DEVANAGARI LETTER HA
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ln.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ln.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ln.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,12 @@
++{
+ locale_version => 0.93,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+025B ; [.164D.0020.0002.025B] # LATIN SMALL LETTER OPEN E
+0190 ; [.164D.0020.0008.0190] # LATIN CAPITAL LETTER OPEN E
+2107 ; [.164D.0020.000A.2107] # EULER CONSTANT
+1D4B ; [.164D.0020.0014.1D4B] # MODIFIER LETTER SMALL OPEN E
+0254 ; [.1771.0021.0002.0254] # LATIN SMALL LETTER OPEN O
+0186 ; [.1771.0021.0008.0186] # LATIN CAPITAL LETTER OPEN O
+1D53 ; [.1771.0021.0014.1D53] # MODIFIER LETTER SMALL OPEN O
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/mk.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/mk.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/mk.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
++{
+ locale_version => 0.93,
+ suppress => [0x0410, 0x0430, 0x04D8, 0x04D9, 0x0415, 0x0435, 0x0416, 0x0436,
+ 0x0417, 0x0437, 0x0418, 0x0438, 0x0406, 0x0456, 0x041E, 0x043E,
+ 0x04E8, 0x04E9, 0x0423, 0x0443, 0x0427, 0x0447, 0x042B, 0x044B,
+ 0x042D, 0x044D, 0x0474, 0x0475],
+ entry => <<'ENTRY', # for DUCET v6.2.0
+04D1 ; [.1991.0020.0002.0430][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER A WITH BREVE
+04D0 ; [.1991.0020.0008.0410][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D3 ; [.1991.0020.0002.0430][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D2 ; [.1991.0020.0008.0410][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04DB ; [.199D.0020.0002.04D9][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DA ; [.199D.0020.0008.04D8][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04D7 ; [.19D9.0020.0002.0435][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER IE WITH BREVE
+04D6 ; [.19D9.0020.0008.0415][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04DD ; [.19E5.0020.0002.0436][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DC ; [.19E5.0020.0008.0416][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DF ; [.19F2.0020.0002.0437][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04DE ; [.19F2.0020.0008.0417][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E5 ; [.1A0A.0020.0002.0438][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E4 ; [.1A0A.0020.0008.0418][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+0457 ; [.1A16.0020.0002.0456][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER YI
+0407 ; [.1A16.0020.0008.0406][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER YI
+0439 ; [.1A0A.0020.0002.0438][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER SHORT I
+0419 ; [.1A0A.0020.0008.0418][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER SHORT I
+04E7 ; [.1A77.0020.0002.043E][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E6 ; [.1A77.0020.0008.041E][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04EB ; [.1A7F.0020.0002.04E9][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EA ; [.1A7F.0020.0008.04E8][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+045E ; [.1AB9.0020.0002.0443][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER SHORT U
+040E ; [.1AB9.0020.0008.0423][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER SHORT U
+04F1 ; [.1AB9.0020.0002.0443][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F0 ; [.1AB9.0020.0008.0423][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F3 ; [.1AB9.0020.0002.0443][.0000.004D.0002.030B] # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F2 ; [.1AB9.0020.0008.0423][.0000.004D.0002.030B] # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F5 ; [.1B0C.0020.0002.0447][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F4 ; [.1B0C.0020.0008.0427][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F9 ; [.1B3F.0020.0002.044B][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04F8 ; [.1B3F.0020.0008.042B][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04ED ; [.1B54.0020.0002.044D][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EC ; [.1B54.0020.0008.042D][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+0477 ; [.1B8A.0020.0002.0475][.0000.0065.0002.030F] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0476 ; [.1B8A.0020.0008.0474][.0000.0065.0002.030F] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ml.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ml.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ml.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
++{
+ locale_version => 0.93,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0D3D ; [.0000.00F5.0002.0D3D] # MALAYALAM SIGN AVAGRAHA
+0D57 ; [.2246.0020.0002.0D57] # MALAYALAM AU LENGTH MARK
+0D4C ; [.2246.0020.0003.0D4C] # MALAYALAM VOWEL SIGN AU
+0D46 0D57 ; [.2246.0020.0003.0D4C] # MALAYALAM VOWEL SIGN AU
+0D15 0D4D 200D ; [.2211.0020.0002.0D15][.2248.0021.0002.0D15] # <MALAYALAM LETTER KA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
+0D7F ; [.2211.0020.0003.0D7F][.2248.0021.0002.0D7F] # MALAYALAM LETTER CHILLU K
+0D23 0D4D 200D ; [.221F.0020.0002.0D23][.2248.0021.0002.0D23] # <MALAYALAM LETTER NNA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
+0D7A ; [.221F.0020.0003.0D7A][.2248.0021.0002.0D7A] # MALAYALAM LETTER CHILLU NN
+0D28 0D4D 200D ; [.2224.0020.0002.0D28][.2248.0021.0002.0D28] # <MALAYALAM LETTER NA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
+0D7B ; [.2224.0020.0003.0D7B][.2248.0021.0002.0D7B] # MALAYALAM LETTER CHILLU N
+0D30 0D4D 200D ; [.222C.0020.0002.0D30][.2248.0021.0002.0D30] # <MALAYALAM LETTER RA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
+0D7C ; [.222C.0020.0003.0D7C][.2248.0021.0002.0D7C] # MALAYALAM LETTER CHILLU RR
+0D32 0D4D 200D ; [.222D.0020.0002.0D32][.2248.0021.0002.0D32] # <MALAYALAM LETTER LA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
+0D7D ; [.222D.0020.0003.0D7D][.2248.0021.0002.0D7D] # MALAYALAM LETTER CHILLU L
+0D33 0D4D 200D ; [.2233.0020.0002.0D33][.2248.0021.0002.0D33] # <MALAYALAM LETTER LLA, MALAYALAM SIGN VIRAMA, ZERO WIDTH JOINER>
+0D7E ; [.2233.0020.0003.0D7E][.2248.0021.0002.0D7E] # MALAYALAM LETTER CHILLU LL
+0D02 ; [.222A.0020.0002.0D2E][.2248.0021.0002.0D02] # MALAYALAM SIGN ANUSVARA
+0D7B 0D4D ; [.2224.0020.0002.0D28][.2248.0020.0003.0D7B] # <MALAYALAM LETTER CHILLU N, MALAYALAM SIGN VIRAMA>
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/mr.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/mr.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/mr.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0902 ; [.1FDC.0020.0002.0902][.FFF1.0000.0000.0000] # DEVANAGARI SIGN ANUSVARA
+0901 ; [.1FDC.0021.0002.0901][.FFF1.0000.0000.0901] # DEVANAGARI SIGN CANDRABINDU
+0903 ; [.1FDC.0020.0002.0903][.FFF2.0000.0000.0000] # DEVANAGARI SIGN VISARGA
+0950 ; [.1FDC.0020.0002.0950][.FFF0.0000.0000.0000] # DEVANAGARI OM
+0933 ; [.201D.0020.0002.0933][.FFF1.0000.0000.0000] # DEVANAGARI LETTER LLA
+0934 ; [.201D.0020.0002.0933][.FFF1.0000.0000.0000][.0000.00F1.0002.093C] # DEVANAGARI LETTER LLLA
+0915 094D 0937 ; [.201D.0020.0002.0915][.FFF2.0000.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA>
+091C 094D 091E ; [.201D.0020.0002.091C][.FFF3.0000.0000.0000] # <DEVANAGARI LETTER JA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER NYA>
+0939 ; [.201D.0020.0002.0939][.FFF0.0000.0000.0000] # DEVANAGARI LETTER HA
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/or.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/or.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/or.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,12 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0B01 ; [.2108.0020.0002.0B01][.FFF1.0000.0000.0000] # ORIYA SIGN CANDRABINDU
+0B02 ; [.2108.0020.0002.0B02][.FFF2.0000.0000.0000] # ORIYA SIGN ANUSVARA
+0B03 ; [.2108.0020.0002.0B03][.FFF3.0000.0000.0000] # ORIYA SIGN VISARGA
+0B14 ; [.2108.0020.0002.0B14][.FFF0.0000.0000.0000] # ORIYA LETTER AU
+0B15 0B4D 0B37 ; [.212C.0020.0002.0B15][.FFF1.0000.0000.0000] # <ORIYA LETTER KA, ORIYA SIGN VIRAMA, ORIYA LETTER SSA>
+0B39 ; [.212C.0020.0002.0B39][.FFF0.0000.0000.0000] # ORIYA LETTER HA
+0B5F ; [.2122.0021.0002.0B5F] # ORIYA LETTER YYA
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/pa.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/pa.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/pa.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,27 @@
++{
+ locale_version => 0.93,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0A71 ; [.0000.00F2.0002.0A71] # GURMUKHI ADDAK
+0A03 ; [.0000.00F1.0002.0A03] # GURMUKHI SIGN VISARGA
+0A70 ; [.0000.00F3.0002.0A70] # GURMUKHI TIPPI
+0A02 ; [.0000.00F4.0002.0A02] # GURMUKHI SIGN BINDI
+0A01 ; [.0000.00F5.0002.0A01] # GURMUKHI SIGN ADAK BINDI
+0A3C ; [.0000.00F6.0002.0A3C] # GURMUKHI SIGN NUKTA
+0A33 ; [.20AA.0020.0002.0A32][.0000.00F6.0002.0A3C] # GURMUKHI LETTER LLA
+0A36 ; [.208B.0020.0002.0A38][.0000.00F6.0002.0A3C] # GURMUKHI LETTER SHA
+0A59 ; [.208F.0020.0002.0A16][.0000.00F6.0002.0A3C] # GURMUKHI LETTER KHHA
+0A5A ; [.2090.0020.0002.0A17][.0000.00F6.0002.0A3C] # GURMUKHI LETTER GHHA
+0A5B ; [.2095.0020.0002.0A1C][.0000.00F6.0002.0A3C] # GURMUKHI LETTER ZA
+0A5E ; [.20A3.0020.0002.0A2B][.0000.00F6.0002.0A3C] # GURMUKHI LETTER FA
+0A4D ; [.20AD.0020.0002.0A4D] # GURMUKHI SIGN VIRAMA
+0A3E ; [.20AE.0020.0002.0A3E] # GURMUKHI VOWEL SIGN AA
+0A3F ; [.20AF.0020.0002.0A3F] # GURMUKHI VOWEL SIGN I
+0A40 ; [.20B0.0020.0002.0A40] # GURMUKHI VOWEL SIGN II
+0A41 ; [.20B1.0020.0002.0A41] # GURMUKHI VOWEL SIGN U
+0A42 ; [.20B2.0020.0002.0A42] # GURMUKHI VOWEL SIGN UU
+0A47 ; [.20B3.0020.0002.0A47] # GURMUKHI VOWEL SIGN EE
+0A48 ; [.20B4.0020.0002.0A48] # GURMUKHI VOWEL SIGN AI
+0A4B ; [.20B5.0020.0002.0A4B] # GURMUKHI VOWEL SIGN OO
+0A4C ; [.20B6.0020.0002.0A4C] # GURMUKHI VOWEL SIGN AU
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sa.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sa.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sa.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0902 ; [.1FDC.0020.0002.0902][.FFF1.0000.0000.0000] # DEVANAGARI SIGN ANUSVARA
+0901 ; [.1FDC.0021.0002.0901][.FFF1.0000.0000.0901] # DEVANAGARI SIGN CANDRABINDU
+0903 ; [.1FDC.0020.0002.0903][.FFF2.0000.0000.0000] # DEVANAGARI SIGN VISARGA
+0950 ; [.1FDC.0020.0002.0950][.FFF0.0000.0000.0000] # DEVANAGARI OM
+0933 ; [.201D.0020.0002.0933][.FFF1.0000.0000.0000] # DEVANAGARI LETTER LLA
+0934 ; [.201D.0020.0002.0933][.FFF1.0000.0000.0000][.0000.00F1.0002.093C] # DEVANAGARI LETTER LLLA
+0915 094D 0937 ; [.201D.0020.0002.0915][.FFF2.0000.0000.0000] # <DEVANAGARI LETTER KA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER SSA>
+091C 094D 091E ; [.201D.0020.0002.091C][.FFF3.0000.0000.0000] # <DEVANAGARI LETTER JA, DEVANAGARI SIGN VIRAMA, DEVANAGARI LETTER NYA>
+0939 ; [.201D.0020.0002.0939][.FFF0.0000.0000.0000] # DEVANAGARI LETTER HA
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/si.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/si.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/si.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0D82 ; [.225A.0020.0002.0D82][.FFF1.0000.0000.0000] # SINHALA SIGN ANUSVARAYA
+0D83 ; [.225A.0020.0002.0D83][.FFF2.0000.0000.0000] # SINHALA SIGN VISARGAYA
+0D96 ; [.225A.0020.0002.0D96][.FFF0.0000.0000.0000] # SINHALA LETTER AUYANNA
+0DA5 ; [.2265.0020.0002.0DA5] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA4 ; [.2266.0020.0002.0DA4] # SINHALA LETTER TAALUJA NAASIKYAYA
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/si_dict.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/si_dict.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/si_dict.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0D82 ; [.225A.0020.0002.0D82][.FFF1.0000.0000.0000] # SINHALA SIGN ANUSVARAYA
+0D83 ; [.225A.0020.0002.0D83][.FFF2.0000.0000.0000] # SINHALA SIGN VISARGAYA
+0D96 ; [.225A.0020.0002.0D96][.FFF0.0000.0000.0000] # SINHALA LETTER AUYANNA
+0DA5 ; [.2263.0020.0002.0DA2][.2295.0020.0002.0DCA][.2265.0021.0002.0DA5] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sr.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sr.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sr.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
++{
+ locale_version => 0.93,
+ suppress => [0x0410, 0x0430, 0x04D8, 0x04D9, 0x0413, 0x0433, 0x0415, 0x0435,
+ 0x0416, 0x0436, 0x0417, 0x0437, 0x0418, 0x0438, 0x0406, 0x0456,
+ 0x041E, 0x043E, 0x04E8, 0x04E9, 0x041A, 0x043A, 0x0423, 0x0443,
+ 0x0427, 0x0447, 0x042B, 0x044B, 0x042D, 0x044D, 0x0474, 0x0475],
+ entry => <<'ENTRY', # for DUCET v6.2.0
+04D1 ; [.1991.0020.0002.0430][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER A WITH BREVE
+04D0 ; [.1991.0020.0008.0410][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D3 ; [.1991.0020.0002.0430][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D2 ; [.1991.0020.0008.0410][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04DB ; [.199D.0020.0002.04D9][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DA ; [.199D.0020.0008.04D8][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+0453 ; [.19B1.0020.0002.0433][.0000.0032.0002.0301] # CYRILLIC SMALL LETTER GJE
+0403 ; [.19B1.0020.0008.0413][.0000.0032.0002.0301] # CYRILLIC CAPITAL LETTER GJE
+04D7 ; [.19D9.0020.0002.0435][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER IE WITH BREVE
+04D6 ; [.19D9.0020.0008.0415][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04DD ; [.19E5.0020.0002.0436][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DC ; [.19E5.0020.0008.0416][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DF ; [.19F2.0020.0002.0437][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04DE ; [.19F2.0020.0008.0417][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E5 ; [.1A0A.0020.0002.0438][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E4 ; [.1A0A.0020.0008.0418][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+0457 ; [.1A16.0020.0002.0456][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER YI
+0407 ; [.1A16.0020.0008.0406][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER YI
+0439 ; [.1A0A.0020.0002.0438][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER SHORT I
+0419 ; [.1A0A.0020.0008.0418][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER SHORT I
+04E7 ; [.1A77.0020.0002.043E][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E6 ; [.1A77.0020.0008.041E][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04EB ; [.1A7F.0020.0002.04E9][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EA ; [.1A7F.0020.0008.04E8][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+045C ; [.1A28.0020.0002.043A][.0000.0032.0002.0301] # CYRILLIC SMALL LETTER KJE
+040C ; [.1A28.0020.0008.041A][.0000.0032.0002.0301] # CYRILLIC CAPITAL LETTER KJE
+045E ; [.1AB9.0020.0002.0443][.0000.0037.0002.0306] # CYRILLIC SMALL LETTER SHORT U
+040E ; [.1AB9.0020.0008.0423][.0000.0037.0002.0306] # CYRILLIC CAPITAL LETTER SHORT U
+04F1 ; [.1AB9.0020.0002.0443][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F0 ; [.1AB9.0020.0008.0423][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F3 ; [.1AB9.0020.0002.0443][.0000.004D.0002.030B] # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F2 ; [.1AB9.0020.0008.0423][.0000.004D.0002.030B] # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F5 ; [.1B0C.0020.0002.0447][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F4 ; [.1B0C.0020.0008.0427][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F9 ; [.1B3F.0020.0002.044B][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04F8 ; [.1B3F.0020.0008.042B][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04ED ; [.1B54.0020.0002.044D][.0000.0047.0002.0308] # CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EC ; [.1B54.0020.0008.042D][.0000.0047.0002.0308] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+0477 ; [.1B8A.0020.0002.0475][.0000.0065.0002.030F] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0476 ; [.1B8A.0020.0008.0474][.0000.0065.0002.030F] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sv_refo.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sv_refo.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/sv_refo.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,85 @@
++{
+ locale_version => 0.93,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0111 ; [.1631.0021.0002.0111] # LATIN SMALL LETTER D WITH STROKE
+0064 0335 ; [.1631.0021.0002.0111] # LATIN SMALL LETTER D WITH STROKE
+0110 ; [.1631.0021.0008.0110] # LATIN CAPITAL LETTER D WITH STROKE
+0044 0335 ; [.1631.0021.0008.0110] # LATIN CAPITAL LETTER D WITH STROKE
+00F0 ; [.1631.0022.0002.00F0] # LATIN SMALL LETTER ETH
+00D0 ; [.1631.0022.0008.00D0] # LATIN CAPITAL LETTER ETH
+00FE ; [.1816.0020.0003.00FE][.16B4.0020.0003.00FE] # LATIN SMALL LETTER THORN
+00DE ; [.1816.0020.0009.00DE][.16B4.0020.0009.00DE] # LATIN CAPITAL LETTER THORN
+00FC ; [.1880.0021.0002.00FC] # LATIN SMALL LETTER U WITH DIAERESIS
+0075 0308 ; [.1880.0021.0002.00FC] # LATIN SMALL LETTER U WITH DIAERESIS
+00DC ; [.1880.0021.0008.00DC] # LATIN CAPITAL LETTER U WITH DIAERESIS
+0055 0308 ; [.1880.0021.0008.00DC] # LATIN CAPITAL LETTER U WITH DIAERESIS
+01DC ; [.1880.0021.0002.00FC][.0000.0035.0002.0300] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DB ; [.1880.0021.0008.00DC][.0000.0035.0002.0300] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01D8 ; [.1880.0021.0002.00FC][.0000.0032.0002.0301] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D7 ; [.1880.0021.0008.00DC][.0000.0032.0002.0301] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D6 ; [.1880.0021.0002.00FC][.0000.005B.0002.0304] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D5 ; [.1880.0021.0008.00DC][.0000.005B.0002.0304] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01DA ; [.1880.0021.0002.00FC][.0000.0041.0002.030C] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01D9 ; [.1880.0021.0008.00DC][.0000.0041.0002.030C] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+0171 ; [.1880.0022.0002.0171] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0075 030B ; [.1880.0022.0002.0171] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0170 ; [.1880.0022.0008.0170] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0055 030B ; [.1880.0022.0008.0170] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+00E5 ; [.1906.0020.0002.00E5] # LATIN SMALL LETTER A WITH RING ABOVE
+0061 030A ; [.1906.0020.0002.00E5] # LATIN SMALL LETTER A WITH RING ABOVE
+00C5 ; [.1906.0020.0008.00C5] # LATIN CAPITAL LETTER A WITH RING ABOVE
+0041 030A ; [.1906.0020.0008.00C5] # LATIN CAPITAL LETTER A WITH RING ABOVE
+212B ; [.1906.0020.0008.00C5] # ANGSTROM SIGN
+01FB ; [.1906.0020.0002.00E5][.0000.0032.0002.0301] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FA ; [.1906.0020.0008.00C5][.0000.0032.0002.0301] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+00E4 ; [.1907.0020.0002.00E4] # LATIN SMALL LETTER A WITH DIAERESIS
+0061 0308 ; [.1907.0020.0002.00E4] # LATIN SMALL LETTER A WITH DIAERESIS
+00C4 ; [.1907.0020.0008.00C4] # LATIN CAPITAL LETTER A WITH DIAERESIS
+0041 0308 ; [.1907.0020.0008.00C4] # LATIN CAPITAL LETTER A WITH DIAERESIS
+01DF ; [.1907.0020.0002.00E4][.0000.005B.0002.0304] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01DE ; [.1907.0020.0008.00C4][.0000.005B.0002.0304] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+00E6 ; [.1907.0021.0002.00E6] # LATIN SMALL LETTER AE
+00C6 ; [.1907.0021.0008.00C6] # LATIN CAPITAL LETTER AE
+1D2D ; [.1907.0021.0014.1D2D] # MODIFIER LETTER CAPITAL AE
+01FD ; [.1907.0021.0002.00E6][.0000.0032.0002.0301] # LATIN SMALL LETTER AE WITH ACUTE
+01FC ; [.1907.0021.0008.00C6][.0000.0032.0002.0301] # LATIN CAPITAL LETTER AE WITH ACUTE
+01E3 ; [.1907.0021.0002.00E6][.0000.005B.0002.0304] # LATIN SMALL LETTER AE WITH MACRON
+01E2 ; [.1907.0021.0008.00C6][.0000.005B.0002.0304] # LATIN CAPITAL LETTER AE WITH MACRON
+0119 ; [.1907.0022.0002.0119] # LATIN SMALL LETTER E WITH OGONEK
+0065 0328 ; [.1907.0022.0002.0119] # LATIN SMALL LETTER E WITH OGONEK
+0118 ; [.1907.0022.0008.0118] # LATIN CAPITAL LETTER E WITH OGONEK
+0045 0328 ; [.1907.0022.0008.0118] # LATIN CAPITAL LETTER E WITH OGONEK
+00F6 ; [.1908.0020.0002.00F6] # LATIN SMALL LETTER O WITH DIAERESIS
+006F 0308 ; [.1908.0020.0002.00F6] # LATIN SMALL LETTER O WITH DIAERESIS
+00D6 ; [.1908.0020.0008.00D6] # LATIN CAPITAL LETTER O WITH DIAERESIS
+004F 0308 ; [.1908.0020.0008.00D6] # LATIN CAPITAL LETTER O WITH DIAERESIS
+022B ; [.1908.0020.0002.00F6][.0000.005B.0002.0304] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022A ; [.1908.0020.0008.00D6][.0000.005B.0002.0304] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+00F8 ; [.1908.0021.0002.00F8] # LATIN SMALL LETTER O WITH STROKE
+006F 0338 ; [.1908.0021.0002.00F8] # LATIN SMALL LETTER O WITH STROKE
+00D8 ; [.1908.0021.0008.00D8] # LATIN CAPITAL LETTER O WITH STROKE
+004F 0338 ; [.1908.0021.0008.00D8] # LATIN CAPITAL LETTER O WITH STROKE
+01FF ; [.1908.0021.0002.00F8][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+01FE ; [.1908.0021.0008.00D8][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0151 ; [.1908.0022.0002.0151] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+006F 030B ; [.1908.0022.0002.0151] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0150 ; [.1908.0022.0008.0150] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+004F 030B ; [.1908.0022.0008.0150] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0153 ; [.1908.0023.0002.0153] # LATIN SMALL LIGATURE OE
+0152 ; [.1908.0023.0008.0152] # LATIN CAPITAL LIGATURE OE
+00F4 ; [.1908.0024.0002.00F4] # LATIN SMALL LETTER O WITH CIRCUMFLEX
+006F 0302 ; [.1908.0024.0002.00F4] # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00D4 ; [.1908.0024.0008.00D4] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+004F 0302 ; [.1908.0024.0008.00D4] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+1ED3 ; [.1908.0024.0002.00F4][.0000.0035.0002.0300] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED2 ; [.1908.0024.0008.00D4][.0000.0035.0002.0300] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED1 ; [.1908.0024.0002.00F4][.0000.0032.0002.0301] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED0 ; [.1908.0024.0008.00D4][.0000.0032.0002.0301] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED7 ; [.1908.0024.0002.00F4][.0000.004E.0002.0303] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED6 ; [.1908.0024.0008.00D4][.0000.004E.0002.0303] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED5 ; [.1908.0024.0002.00F4][.0000.0064.0002.0309] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED4 ; [.1908.0024.0008.00D4][.0000.0064.0002.0309] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED9 ; [.1908.0024.0002.00F4][.0000.0070.0002.0323] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1ED8 ; [.1908.0024.0008.00D4][.0000.0070.0002.0323] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ta.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ta.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ta.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,55 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0B82 ; [.214B.0020.0002.0B82][.FFF0.0000.0000.0000] # TAMIL SIGN ANUSVARA
+0B83 ; [.214B.0020.0002.0B83][.FFF1.0000.0000.0000] # TAMIL SIGN VISARGA
+0B95 0BCD 0BB7 0BCD ; [.2162.0020.0002.0B95][.FFF2.0000.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA, TAMIL LETTER SSA, TAMIL SIGN VIRAMA>
+0B95 0BCD 0BB7 ; [.2162.0020.0002.0B95][.FFF3.0000.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA, TAMIL LETTER SSA>
+0B95 0BCD ; [.214C.0020.0002.0B95][.FFF0.0000.0000.0000] # <TAMIL LETTER KA, TAMIL SIGN VIRAMA>
+0B95 ; [.214C.0020.0002.0B95][.FFF1.0000.0000.0000] # TAMIL LETTER KA
+0B99 0BCD ; [.214D.0020.0002.0B99][.FFF0.0000.0000.0000] # <TAMIL LETTER NGA, TAMIL SIGN VIRAMA>
+0B99 ; [.214D.0020.0002.0B99][.FFF1.0000.0000.0000] # TAMIL LETTER NGA
+0B9A 0BCD ; [.214E.0020.0002.0B9A][.FFF0.0000.0000.0000] # <TAMIL LETTER CA, TAMIL SIGN VIRAMA>
+0B9A ; [.214E.0020.0002.0B9A][.FFF1.0000.0000.0000] # TAMIL LETTER CA
+0B9E 0BCD ; [.214F.0020.0002.0B9E][.FFF0.0000.0000.0000] # <TAMIL LETTER NYA, TAMIL SIGN VIRAMA>
+0B9E ; [.214F.0020.0002.0B9E][.FFF1.0000.0000.0000] # TAMIL LETTER NYA
+0B9F 0BCD ; [.2150.0020.0002.0B9F][.FFF0.0000.0000.0000] # <TAMIL LETTER TTA, TAMIL SIGN VIRAMA>
+0B9F ; [.2150.0020.0002.0B9F][.FFF1.0000.0000.0000] # TAMIL LETTER TTA
+0BA3 0BCD ; [.2151.0020.0002.0BA3][.FFF0.0000.0000.0000] # <TAMIL LETTER NNA, TAMIL SIGN VIRAMA>
+0BA3 ; [.2151.0020.0002.0BA3][.FFF1.0000.0000.0000] # TAMIL LETTER NNA
+0BA4 0BCD ; [.2152.0020.0002.0BA4][.FFF0.0000.0000.0000] # <TAMIL LETTER TA, TAMIL SIGN VIRAMA>
+0BA4 ; [.2152.0020.0002.0BA4][.FFF1.0000.0000.0000] # TAMIL LETTER TA
+0BA8 0BCD ; [.2153.0020.0002.0BA8][.FFF0.0000.0000.0000] # <TAMIL LETTER NA, TAMIL SIGN VIRAMA>
+0BA8 ; [.2153.0020.0002.0BA8][.FFF1.0000.0000.0000] # TAMIL LETTER NA
+0BAA 0BCD ; [.2154.0020.0002.0BAA][.FFF0.0000.0000.0000] # <TAMIL LETTER PA, TAMIL SIGN VIRAMA>
+0BAA ; [.2154.0020.0002.0BAA][.FFF1.0000.0000.0000] # TAMIL LETTER PA
+0BAE 0BCD ; [.2155.0020.0002.0BAE][.FFF0.0000.0000.0000] # <TAMIL LETTER MA, TAMIL SIGN VIRAMA>
+0BAE ; [.2155.0020.0002.0BAE][.FFF1.0000.0000.0000] # TAMIL LETTER MA
+0BAF 0BCD ; [.2156.0020.0002.0BAF][.FFF0.0000.0000.0000] # <TAMIL LETTER YA, TAMIL SIGN VIRAMA>
+0BAF ; [.2156.0020.0002.0BAF][.FFF1.0000.0000.0000] # TAMIL LETTER YA
+0BB0 0BCD ; [.2157.0020.0002.0BB0][.FFF0.0000.0000.0000] # <TAMIL LETTER RA, TAMIL SIGN VIRAMA>
+0BB0 ; [.2157.0020.0002.0BB0][.FFF1.0000.0000.0000] # TAMIL LETTER RA
+0BB2 0BCD ; [.2158.0020.0002.0BB2][.FFF0.0000.0000.0000] # <TAMIL LETTER LA, TAMIL SIGN VIRAMA>
+0BB2 ; [.2158.0020.0002.0BB2][.FFF1.0000.0000.0000] # TAMIL LETTER LA
+0BB5 0BCD ; [.2159.0020.0002.0BB5][.FFF0.0000.0000.0000] # <TAMIL LETTER VA, TAMIL SIGN VIRAMA>
+0BB5 ; [.2159.0020.0002.0BB5][.FFF1.0000.0000.0000] # TAMIL LETTER VA
+0BB4 0BCD ; [.215A.0020.0002.0BB4][.FFF0.0000.0000.0000] # <TAMIL LETTER LLLA, TAMIL SIGN VIRAMA>
+0BB4 ; [.215A.0020.0002.0BB4][.FFF1.0000.0000.0000] # TAMIL LETTER LLLA
+0BB3 0BCD ; [.215B.0020.0002.0BB3][.FFF0.0000.0000.0000] # <TAMIL LETTER LLA, TAMIL SIGN VIRAMA>
+0BB3 ; [.215B.0020.0002.0BB3][.FFF1.0000.0000.0000] # TAMIL LETTER LLA
+0BB1 0BCD ; [.215C.0020.0002.0BB1][.FFF0.0000.0000.0000] # <TAMIL LETTER RRA, TAMIL SIGN VIRAMA>
+0BB1 ; [.215C.0020.0002.0BB1][.FFF1.0000.0000.0000] # TAMIL LETTER RRA
+0BA9 0BCD ; [.215D.0020.0002.0BA9][.FFF0.0000.0000.0000] # <TAMIL LETTER NNNA, TAMIL SIGN VIRAMA>
+0BA9 ; [.215D.0020.0002.0BA9][.FFF1.0000.0000.0000] # TAMIL LETTER NNNA
+0B9C 0BCD ; [.215E.0020.0002.0B9C][.FFF0.0000.0000.0000] # <TAMIL LETTER JA, TAMIL SIGN VIRAMA>
+0B9C ; [.215E.0020.0002.0B9C][.FFF1.0000.0000.0000] # TAMIL LETTER JA
+0BB6 0BCD ; [.215F.0020.0002.0BB6][.FFF0.0000.0000.0000] # <TAMIL LETTER SHA, TAMIL SIGN VIRAMA>
+0BB6 ; [.215F.0020.0002.0BB6][.FFF1.0000.0000.0000] # TAMIL LETTER SHA
+0BB7 0BCD ; [.2160.0020.0002.0BB7][.FFF0.0000.0000.0000] # <TAMIL LETTER SSA, TAMIL SIGN VIRAMA>
+0BB7 ; [.2160.0020.0002.0BB7][.FFF1.0000.0000.0000] # TAMIL LETTER SSA
+0BB8 0BCD ; [.2161.0020.0002.0BB8][.FFF0.0000.0000.0000] # <TAMIL LETTER SA, TAMIL SIGN VIRAMA>
+0BB8 ; [.2161.0020.0002.0BB8][.FFF1.0000.0000.0000] # TAMIL LETTER SA
+0BB9 0BCD ; [.2162.0020.0002.0BB9][.FFF0.0000.0000.0000] # <TAMIL LETTER HA, TAMIL SIGN VIRAMA>
+0BB9 ; [.2162.0020.0002.0BB9][.FFF1.0000.0000.0000] # TAMIL LETTER HA
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/te.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/te.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/te.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0C01 ; [.217F.0020.0002.0C01][.FFF1.0000.0000.0000] # TELUGU SIGN CANDRABINDU
+0C02 ; [.217F.0020.0002.0C02][.FFF2.0000.0000.0000] # TELUGU SIGN ANUSVARA
+0C03 ; [.217F.0020.0002.0C03][.FFF3.0000.0000.0000] # TELUGU SIGN VISARGA
+0C14 ; [.217F.0020.0002.0C14][.FFF0.0000.0000.0000] # TELUGU LETTER AU
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/th.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/th.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/th.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
++{
+ locale_version => 0.96,
+ variable => 'shifted',
+ alternate => 'shifted',
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0E2F ; [*03BE.0020.0002.0E2F][*FFF0.0000.0000.0000] # THAI CHARACTER PAIYANNOI
+0E5A ; [*03BE.0020.0002.0E5A][*FFF1.0000.0000.0000] # THAI CHARACTER ANGKHANKHU
+0E46 ; [*03BF.0020.0002.0E46][*FFF1.0000.0000.0000] # THAI CHARACTER MAIYAMOK
+0E5B ; [*03BF.0020.0002.0E5B][*FFF0.0000.0000.0000] # THAI CHARACTER KHOMUT
+0E4C ; [.0000.00FF.0002.0E4C] # THAI CHARACTER THANTHAKHAT
+0E47 ; [.0000.0100.0002.0E47] # THAI CHARACTER MAITAIKHU
+0E48 ; [.0000.0101.0002.0E48] # THAI CHARACTER MAI EK
+0E49 ; [.0000.0102.0002.0E49] # THAI CHARACTER MAI THO
+0E4A ; [.0000.0103.0002.0E4A] # THAI CHARACTER MAI TRI
+0E4B ; [.0000.0104.0002.0E4B] # THAI CHARACTER MAI CHATTAWA
+0E4D ; [.24B6.0020.0002.0E4D] # THAI CHARACTER NIKHAHIT
+0E45 ; [.24B9.0020.0003.0E45] # THAI CHARACTER LAKKHANGYAO
+0E4D 0E32 ; [.24B9.0020.0002.0E32][.24B6.0020.0003.0E4D] # THAI CHARACTER SARA AM
+0E33 ; [.24B9.0020.0002.0E32][.24B6.0020.0004.0E33] # THAI CHARACTER SARA AM
+0E45 0E4D ; [.24B6.0020.0002.0E4D][.24B9.0020.0004.0E45] # <THAI CHARACTER LAKKHANGYAO, THAI CHARACTER NIKHAHIT>
+0E3A ; [.24C7.0020.0002.0E3A] # THAI CHARACTER PHINTHU
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ur.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ur.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/ur.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,89 @@
++{
+ locale_version => 0.96,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0623 ; [.1C9C.0021.0002.0623] # ARABIC LETTER ALEF WITH HAMZA ABOVE
+0627 0654 ; [.1C9C.0021.0002.0623] # ARABIC LETTER ALEF WITH HAMZA ABOVE
+0622 ; [.1C9D.0020.0002.0622][.FFC0.0000.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE
+0627 0653 ; [.1C9D.0020.0002.0622][.FFC0.0000.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE
+0628 ; [.1C9D.0020.0002.0628][.FFC1.0000.0000.0000] # ARABIC LETTER BEH
+0628 06BE ; [.1C9D.0020.0002.0628][.FFC2.0000.0000.0000] # <ARABIC LETTER BEH, ARABIC LETTER HEH DOACHASHMEE>
+067E ; [.1C9D.0020.0002.067E][.FFC3.0000.0000.0000] # ARABIC LETTER PEH
+067E 06BE ; [.1C9D.0020.0002.067E][.FFC4.0000.0000.0000] # <ARABIC LETTER PEH, ARABIC LETTER HEH DOACHASHMEE>
+062A ; [.1C9D.0020.0002.062A][.FFC5.0000.0000.0000] # ARABIC LETTER TEH
+062A 06BE ; [.1C9D.0020.0002.062A][.FFC6.0000.0000.0000] # <ARABIC LETTER TEH, ARABIC LETTER HEH DOACHASHMEE>
+0679 ; [.1C9D.0020.0002.0679][.FFC7.0000.0000.0000] # ARABIC LETTER TTEH
+0679 06BE ; [.1C9D.0020.0002.0679][.FFC8.0000.0000.0000] # <ARABIC LETTER TTEH, ARABIC LETTER HEH DOACHASHMEE>
+062B ; [.1C9D.0020.0002.062B][.FFC9.0000.0000.0000] # ARABIC LETTER THEH
+062C ; [.1C9D.0020.0002.062C][.FFCA.0000.0000.0000] # ARABIC LETTER JEEM
+062C 06BE ; [.1C9D.0020.0002.062C][.FFCB.0000.0000.0000] # <ARABIC LETTER JEEM, ARABIC LETTER HEH DOACHASHMEE>
+0686 ; [.1C9D.0020.0002.0686][.FFCC.0000.0000.0000] # ARABIC LETTER TCHEH
+0686 06BE ; [.1C9D.0020.0002.0686][.FFCD.0000.0000.0000] # <ARABIC LETTER TCHEH, ARABIC LETTER HEH DOACHASHMEE>
+062D ; [.1C9D.0020.0002.062D][.FFCE.0000.0000.0000] # ARABIC LETTER HAH
+062E ; [.1C9D.0020.0002.062E][.FFCF.0000.0000.0000] # ARABIC LETTER KHAH
+062F ; [.1C9D.0020.0002.062F][.FFD0.0000.0000.0000] # ARABIC LETTER DAL
+062F 06BE ; [.1C9D.0020.0002.062F][.FFD1.0000.0000.0000] # <ARABIC LETTER DAL, ARABIC LETTER HEH DOACHASHMEE>
+0688 ; [.1C9D.0020.0002.0688][.FFD2.0000.0000.0000] # ARABIC LETTER DDAL
+0688 06BE ; [.1C9D.0020.0002.0688][.FFD3.0000.0000.0000] # <ARABIC LETTER DDAL, ARABIC LETTER HEH DOACHASHMEE>
+0630 ; [.1C9D.0020.0002.0630][.FFD4.0000.0000.0000] # ARABIC LETTER THAL
+0631 ; [.1C9D.0020.0002.0631][.FFD5.0000.0000.0000] # ARABIC LETTER REH
+0631 06BE ; [.1C9D.0020.0002.0631][.FFD6.0000.0000.0000] # <ARABIC LETTER REH, ARABIC LETTER HEH DOACHASHMEE>
+0691 ; [.1C9D.0020.0002.0691][.FFD7.0000.0000.0000] # ARABIC LETTER RREH
+0691 06BE ; [.1C9D.0020.0002.0691][.FFD8.0000.0000.0000] # <ARABIC LETTER RREH, ARABIC LETTER HEH DOACHASHMEE>
+0632 ; [.1C9D.0020.0002.0632][.FFD9.0000.0000.0000] # ARABIC LETTER ZAIN
+0698 ; [.1C9D.0020.0002.0698][.FFDA.0000.0000.0000] # ARABIC LETTER JEH
+0633 ; [.1C9D.0020.0002.0633][.FFDB.0000.0000.0000] # ARABIC LETTER SEEN
+0634 ; [.1C9D.0020.0002.0634][.FFDC.0000.0000.0000] # ARABIC LETTER SHEEN
+0635 ; [.1C9D.0020.0002.0635][.FFDD.0000.0000.0000] # ARABIC LETTER SAD
+0636 ; [.1C9D.0020.0002.0636][.FFDE.0000.0000.0000] # ARABIC LETTER DAD
+0637 ; [.1C9D.0020.0002.0637][.FFDF.0000.0000.0000] # ARABIC LETTER TAH
+0638 ; [.1C9D.0020.0002.0638][.FFE0.0000.0000.0000] # ARABIC LETTER ZAH
+0639 ; [.1C9D.0020.0002.0639][.FFE1.0000.0000.0000] # ARABIC LETTER AIN
+063A ; [.1C9D.0020.0002.063A][.FFE2.0000.0000.0000] # ARABIC LETTER GHAIN
+0641 ; [.1C9D.0020.0002.0641][.FFE3.0000.0000.0000] # ARABIC LETTER FEH
+0642 ; [.1C9D.0020.0002.0642][.FFE4.0000.0000.0000] # ARABIC LETTER QAF
+06A9 ; [.1C9D.0020.0002.06A9][.FFE5.0000.0000.0000] # ARABIC LETTER KEHEH
+06A9 06BE ; [.1C9D.0020.0002.06A9][.FFE6.0000.0000.0000] # <ARABIC LETTER KEHEH, ARABIC LETTER HEH DOACHASHMEE>
+06AF ; [.1C9D.0020.0002.06AF][.FFE7.0000.0000.0000] # ARABIC LETTER GAF
+06AF 06BE ; [.1C9D.0020.0002.06AF][.FFE8.0000.0000.0000] # <ARABIC LETTER GAF, ARABIC LETTER HEH DOACHASHMEE>
+0644 ; [.1C9D.0020.0002.0644][.FFE9.0000.0000.0000] # ARABIC LETTER LAM
+0644 06BE ; [.1C9D.0020.0002.0644][.FFEA.0000.0000.0000] # <ARABIC LETTER LAM, ARABIC LETTER HEH DOACHASHMEE>
+0645 ; [.1C9D.0020.0002.0645][.FFEB.0000.0000.0000] # ARABIC LETTER MEEM
+0645 06BE ; [.1C9D.0020.0002.0645][.FFEC.0000.0000.0000] # <ARABIC LETTER MEEM, ARABIC LETTER HEH DOACHASHMEE>
+0646 ; [.1C9D.0020.0002.0646][.FFED.0000.0000.0000] # ARABIC LETTER NOON
+0646 06BE ; [.1C9D.0020.0002.0646][.FFEE.0000.0000.0000] # <ARABIC LETTER NOON, ARABIC LETTER HEH DOACHASHMEE>
+06BA ; [.1C9D.0020.0002.06BA][.FFEF.0000.0000.0000] # ARABIC LETTER NOON GHUNNA
+06BA 06BE ; [.1C9D.0020.0002.06BA][.FFF0.0000.0000.0000] # <ARABIC LETTER NOON GHUNNA, ARABIC LETTER HEH DOACHASHMEE>
+0648 ; [.1C9D.0020.0002.0648][.FFF1.0000.0000.0000] # ARABIC LETTER WAW
+0624 ; [.1C9D.0021.0002.0624][.FFF1.0000.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE
+0648 0654 ; [.1C9D.0021.0002.0624][.FFF1.0000.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE
+0648 06BE ; [.1C9D.0020.0002.0648][.FFF2.0000.0000.0000] # <ARABIC LETTER WAW, ARABIC LETTER HEH DOACHASHMEE>
+06C1 ; [.1C9D.0020.0002.06C1][.FFF3.0000.0000.0000] # ARABIC LETTER HEH GOAL
+06C2 ; [.1C9D.0021.0002.06C2][.FFF3.0000.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06C1 0654 ; [.1C9D.0021.0002.06C2][.FFF3.0000.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06BE ; [.1C9D.0020.0002.06BE][.FFF4.0000.0000.0000] # ARABIC LETTER HEH DOACHASHMEE
+06C3 ; [.1C9D.0020.0002.06C3][.FFF5.0000.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL
+0621 ; [.1C9D.0020.0002.0621][.FFF6.0000.0000.0000] # ARABIC LETTER HAMZA
+06CC ; [.1C9D.0020.0002.06CC][.FFF7.0000.0000.0000] # ARABIC LETTER FARSI YEH
+0626 ; [.1C9D.0021.0002.0626][.FFF7.0000.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE
+064A 0654 ; [.1C9D.0021.0002.0626][.FFF7.0000.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE
+06CC 06BE ; [.1C9D.0020.0002.06CC][.FFF8.0000.0000.0000] # <ARABIC LETTER FARSI YEH, ARABIC LETTER HEH DOACHASHMEE>
+06D2 ; [.1C9D.0020.0002.06D2][.FFF9.0000.0000.0000] # ARABIC LETTER YEH BARREE
+06D3 ; [.1C9D.0021.0002.06D3][.FFF9.0000.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D2 0654 ; [.1C9D.0021.0002.06D3][.FFF9.0000.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+066E ; [.1C9D.0020.0002.066E][.FFFA.0000.0000.0000] # ARABIC LETTER DOTLESS BEH
+0652 ; [.0000.00AF.0002.0652] # ARABIC SUKUN
+064E ; [.0000.00B0.0002.064E] # ARABIC FATHA
+0650 ; [.0000.00B1.0002.0650] # ARABIC KASRA
+064F ; [.0000.00B2.0002.064F] # ARABIC DAMMA
+0670 ; [.0000.00B3.0002.0670] # ARABIC LETTER SUPERSCRIPT ALEF
+0656 ; [.0000.00B4.0002.0656] # ARABIC SUBSCRIPT ALEF
+0657 ; [.0000.00B5.0002.0657] # ARABIC INVERTED DAMMA
+064B ; [.0000.00B6.0002.064B] # ARABIC FATHATAN
+064D ; [.0000.00B7.0002.064D] # ARABIC KASRATAN
+064C ; [.0000.00B8.0002.064C] # ARABIC DAMMATAN
+0654 ; [.0000.00B9.0002.0654] # ARABIC HAMZA ABOVE
+0651 ; [.0000.00BA.0002.0651] # ARABIC SHADDA
+0658 ; [.0000.00BB.0002.0658] # ARABIC MARK NOON GHUNNA
+0653 ; [.0000.00BC.0002.0653] # ARABIC MADDAH ABOVE
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/wae.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/wae.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/wae.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,24 @@
++{
+ locale_version => 0.93,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+0061 0061 ; [.15EF.0020.0002.0061][.0000.0032.0002.0301] # <LATIN SMALL LETTER A, LATIN SMALL LETTER A>
+00E4 00E4 ; [.15EF.0020.0002.0061][.0000.004E.0002.0303] # <LATIN SMALL LETTER A WITH DIAERESIS, LATIN SMALL LETTER A WITH DIAERESIS>
+00E4 0061 0308 ; [.15EF.0020.0002.0061][.0000.004E.0002.0303] # <LATIN SMALL LETTER A WITH DIAERESIS, LATIN SMALL LETTER A, COMBINING DIAERESIS>
+0061 0308 00E4 ; [.15EF.0020.0002.0061][.0000.004E.0002.0303] # <LATIN SMALL LETTER A, COMBINING DIAERESIS, LATIN SMALL LETTER A WITH DIAERESIS>
+0061 0308 0061 0308 ; [.15EF.0020.0002.0061][.0000.004E.0002.0303] # <LATIN SMALL LETTER A, COMBINING DIAERESIS, LATIN SMALL LETTER A, COMBINING DIAERESIS>
+0065 0065 ; [.164C.0020.0002.0065][.0000.0032.0002.0301] # <LATIN SMALL LETTER E, LATIN SMALL LETTER E>
+0069 0069 ; [.16CD.0020.0002.0069][.0000.0032.0002.0301] # <LATIN SMALL LETTER I, LATIN SMALL LETTER I>
+006F 006F ; [.1771.0020.0002.006F][.0000.0032.0002.0301] # <LATIN SMALL LETTER O, LATIN SMALL LETTER O>
+00F6 00F6 ; [.1771.0020.0002.006F][.0000.004E.0002.0303] # <LATIN SMALL LETTER O WITH DIAERESIS, LATIN SMALL LETTER O WITH DIAERESIS>
+00F6 006F 0308 ; [.1771.0020.0002.006F][.0000.004E.0002.0303] # <LATIN SMALL LETTER O WITH DIAERESIS, LATIN SMALL LETTER O, COMBINING DIAERESIS>
+006F 0308 00F6 ; [.1771.0020.0002.006F][.0000.004E.0002.0303] # <LATIN SMALL LETTER O, COMBINING DIAERESIS, LATIN SMALL LETTER O WITH DIAERESIS>
+006F 0308 006F 0308 ; [.1771.0020.0002.006F][.0000.004E.0002.0303] # <LATIN SMALL LETTER O, COMBINING DIAERESIS, LATIN SMALL LETTER O, COMBINING DIAERESIS>
+0063 0068 ; [.161D.0020.0002.0063][.0000.0041.0002.030C] # <LATIN SMALL LETTER C, LATIN SMALL LETTER H>
+0073 0063 0068 ; [.17F3.0020.0002.0073][.0000.0041.0002.030C] # <LATIN SMALL LETTER S, LATIN SMALL LETTER C, LATIN SMALL LETTER H>
+0075 0075 ; [.1836.0020.0002.0075][.0000.0032.0002.0301] # <LATIN SMALL LETTER U, LATIN SMALL LETTER U>
+00FC 00FC ; [.1836.0020.0002.0075][.0000.004E.0002.0303] # <LATIN SMALL LETTER U WITH DIAERESIS, LATIN SMALL LETTER U WITH DIAERESIS>
+00FC 0075 0308 ; [.1836.0020.0002.0075][.0000.004E.0002.0303] # <LATIN SMALL LETTER U WITH DIAERESIS, LATIN SMALL LETTER U, COMBINING DIAERESIS>
+0075 0308 00FC ; [.1836.0020.0002.0075][.0000.004E.0002.0303] # <LATIN SMALL LETTER U, COMBINING DIAERESIS, LATIN SMALL LETTER U WITH DIAERESIS>
+0075 0308 0075 0308 ; [.1836.0020.0002.0075][.0000.004E.0002.0303] # <LATIN SMALL LETTER U, COMBINING DIAERESIS, LATIN SMALL LETTER U, COMBINING DIAERESIS>
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1563 @@
+use Unicode::Collate::CJK::Zhuyin;
++{
+ locale_version => 0.94,
+ overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin,
+ entry => <<'ENTRY', # for DUCET v6.2.0
+02C9 ; [.0000.0199.0002.02C9] # MODIFIER LETTER MACRON
+02CA ; [.019A.0020.0002.02CA] # MODIFIER LETTER ACUTE ACCENT
+02C7 ; [.019B.0020.0002.02C7] # CARON
+02CB ; [.019C.0020.0002.02CB] # MODIFIER LETTER GRAVE ACCENT
+02D9 ; [.019D.0020.0002.02D9] # DOT ABOVE
+02EA ; [.019E.0020.0002.02EA] # MODIFIER LETTER YIN DEPARTING TONE MARK
+02EB ; [.019F.0020.0002.02EB] # MODIFIER LETTER YANG DEPARTING TONE MARK
+0101 ; [.15EF.001C.0002.0101] # LATIN SMALL LETTER A WITH MACRON
+0061 0304 ; [.15EF.001C.0002.0101] # LATIN SMALL LETTER A WITH MACRON
+0100 ; [.15EF.001C.0008.0100] # LATIN CAPITAL LETTER A WITH MACRON
+0041 0304 ; [.15EF.001C.0008.0100] # LATIN CAPITAL LETTER A WITH MACRON
+00E1 ; [.15EF.001D.0002.00E1] # LATIN SMALL LETTER A WITH ACUTE
+0061 0301 ; [.15EF.001D.0002.00E1] # LATIN SMALL LETTER A WITH ACUTE
+0061 0341 ; [.15EF.001D.0002.00E1] # LATIN SMALL LETTER A WITH ACUTE
+00C1 ; [.15EF.001D.0008.00C1] # LATIN CAPITAL LETTER A WITH ACUTE
+0041 0301 ; [.15EF.001D.0008.00C1] # LATIN CAPITAL LETTER A WITH ACUTE
+0041 0341 ; [.15EF.001D.0008.00C1] # LATIN CAPITAL LETTER A WITH ACUTE
+01CE ; [.15EF.001E.0002.01CE] # LATIN SMALL LETTER A WITH CARON
+0061 030C ; [.15EF.001E.0002.01CE] # LATIN SMALL LETTER A WITH CARON
+01CD ; [.15EF.001E.0008.01CD] # LATIN CAPITAL LETTER A WITH CARON
+0041 030C ; [.15EF.001E.0008.01CD] # LATIN CAPITAL LETTER A WITH CARON
+00E0 ; [.15EF.001F.0002.00E0] # LATIN SMALL LETTER A WITH GRAVE
+0061 0300 ; [.15EF.001F.0002.00E0] # LATIN SMALL LETTER A WITH GRAVE
+0061 0340 ; [.15EF.001F.0002.00E0] # LATIN SMALL LETTER A WITH GRAVE
+00C0 ; [.15EF.001F.0008.00C0] # LATIN CAPITAL LETTER A WITH GRAVE
+0041 0300 ; [.15EF.001F.0008.00C0] # LATIN CAPITAL LETTER A WITH GRAVE
+0041 0340 ; [.15EF.001F.0008.00C0] # LATIN CAPITAL LETTER A WITH GRAVE
+0113 ; [.164C.001C.0002.0113] # LATIN SMALL LETTER E WITH MACRON
+0065 0304 ; [.164C.001C.0002.0113] # LATIN SMALL LETTER E WITH MACRON
+0112 ; [.164C.001C.0008.0112] # LATIN CAPITAL LETTER E WITH MACRON
+0045 0304 ; [.164C.001C.0008.0112] # LATIN CAPITAL LETTER E WITH MACRON
+00E9 ; [.164C.001D.0002.00E9] # LATIN SMALL LETTER E WITH ACUTE
+0065 0301 ; [.164C.001D.0002.00E9] # LATIN SMALL LETTER E WITH ACUTE
+0065 0341 ; [.164C.001D.0002.00E9] # LATIN SMALL LETTER E WITH ACUTE
+00C9 ; [.164C.001D.0008.00C9] # LATIN CAPITAL LETTER E WITH ACUTE
+0045 0301 ; [.164C.001D.0008.00C9] # LATIN CAPITAL LETTER E WITH ACUTE
+0045 0341 ; [.164C.001D.0008.00C9] # LATIN CAPITAL LETTER E WITH ACUTE
+011B ; [.164C.001E.0002.011B] # LATIN SMALL LETTER E WITH CARON
+0065 030C ; [.164C.001E.0002.011B] # LATIN SMALL LETTER E WITH CARON
+011A ; [.164C.001E.0008.011A] # LATIN CAPITAL LETTER E WITH CARON
+0045 030C ; [.164C.001E.0008.011A] # LATIN CAPITAL LETTER E WITH CARON
+00E8 ; [.164C.001F.0002.00E8] # LATIN SMALL LETTER E WITH GRAVE
+0065 0300 ; [.164C.001F.0002.00E8] # LATIN SMALL LETTER E WITH GRAVE
+0065 0340 ; [.164C.001F.0002.00E8] # LATIN SMALL LETTER E WITH GRAVE
+00C8 ; [.164C.001F.0008.00C8] # LATIN CAPITAL LETTER E WITH GRAVE
+0045 0300 ; [.164C.001F.0008.00C8] # LATIN CAPITAL LETTER E WITH GRAVE
+0045 0340 ; [.164C.001F.0008.00C8] # LATIN CAPITAL LETTER E WITH GRAVE
+00EA 0304 ; [.164C.0021.0002.00EA] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
+00CA 0304 ; [.164C.0021.0008.00CA] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING MACRON>
+0065 0302 0304 ; [.164C.0021.0002.00EA] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
+0045 0302 0304 ; [.164C.0021.0008.00CA] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING MACRON>
+1EBF ; [.164C.0022.0002.1EBF] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+0065 0302 0301 ; [.164C.0022.0002.1EBF] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+0065 0302 0341 ; [.164C.0022.0002.1EBF] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EBE ; [.164C.0022.0008.1EBE] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+0045 0302 0301 ; [.164C.0022.0008.1EBE] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+0045 0302 0341 ; [.164C.0022.0008.1EBE] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+00EA 0301 ; [.164C.0022.0002.1EBF] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
+00EA 0341 ; [.164C.0022.0002.1EBF] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
+00CA 0301 ; [.164C.0022.0008.1EBE] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE ACCENT>
+00CA 0341 ; [.164C.0022.0008.1EBE] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING ACUTE TONE MARK>
+00EA 030C ; [.164C.0023.0002.00EA] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
+00CA 030C ; [.164C.0023.0008.00CA] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING CARON>
+0065 0302 030C ; [.164C.0023.0002.00EA] # <LATIN SMALL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
+0045 0302 030C ; [.164C.0023.0008.00CA] # <LATIN CAPITAL LETTER E, COMBINING CIRCUMFLEX ACCENT, COMBINING CARON>
+1EC1 ; [.164C.0024.0002.1EC1] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+0065 0302 0300 ; [.164C.0024.0002.1EC1] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+0065 0302 0340 ; [.164C.0024.0002.1EC1] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC0 ; [.164C.0024.0008.1EC0] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+0045 0302 0300 ; [.164C.0024.0008.1EC0] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+0045 0302 0340 ; [.164C.0024.0008.1EC0] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+00EA 0300 ; [.164C.0024.0002.1EC1] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
+00EA 0340 ; [.164C.0024.0002.1EC1] # <LATIN SMALL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
+00CA 0300 ; [.164C.0024.0008.1EC0] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE ACCENT>
+00CA 0340 ; [.164C.0024.0008.1EC0] # <LATIN CAPITAL LETTER E WITH CIRCUMFLEX, COMBINING GRAVE TONE MARK>
+00EA ; [.164C.0025.0002.00EA] # LATIN SMALL LETTER E WITH CIRCUMFLEX
+0065 0302 ; [.164C.0025.0002.00EA] # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00CA ; [.164C.0025.0008.00CA] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0045 0302 ; [.164C.0025.0008.00CA] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+1EC5 ; [.164C.0025.0002.00EA][.0000.004E.0002.0303] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC4 ; [.164C.0025.0008.00CA][.0000.004E.0002.0303] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC3 ; [.164C.0025.0002.00EA][.0000.0064.0002.0309] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC2 ; [.164C.0025.0008.00CA][.0000.0064.0002.0309] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC7 ; [.164C.0025.0002.00EA][.0000.0070.0002.0323] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC6 ; [.164C.0025.0008.00CA][.0000.0070.0002.0323] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+012B ; [.16CD.001C.0002.012B] # LATIN SMALL LETTER I WITH MACRON
+0069 0304 ; [.16CD.001C.0002.012B] # LATIN SMALL LETTER I WITH MACRON
+012A ; [.16CD.001C.0008.012A] # LATIN CAPITAL LETTER I WITH MACRON
+0049 0304 ; [.16CD.001C.0008.012A] # LATIN CAPITAL LETTER I WITH MACRON
+00ED ; [.16CD.001D.0002.00ED] # LATIN SMALL LETTER I WITH ACUTE
+0069 0301 ; [.16CD.001D.0002.00ED] # LATIN SMALL LETTER I WITH ACUTE
+0069 0341 ; [.16CD.001D.0002.00ED] # LATIN SMALL LETTER I WITH ACUTE
+00CD ; [.16CD.001D.0008.00CD] # LATIN CAPITAL LETTER I WITH ACUTE
+0049 0301 ; [.16CD.001D.0008.00CD] # LATIN CAPITAL LETTER I WITH ACUTE
+0049 0341 ; [.16CD.001D.0008.00CD] # LATIN CAPITAL LETTER I WITH ACUTE
+01D0 ; [.16CD.001E.0002.01D0] # LATIN SMALL LETTER I WITH CARON
+0069 030C ; [.16CD.001E.0002.01D0] # LATIN SMALL LETTER I WITH CARON
+01CF ; [.16CD.001E.0008.01CF] # LATIN CAPITAL LETTER I WITH CARON
+0049 030C ; [.16CD.001E.0008.01CF] # LATIN CAPITAL LETTER I WITH CARON
+00EC ; [.16CD.001F.0002.00EC] # LATIN SMALL LETTER I WITH GRAVE
+0069 0300 ; [.16CD.001F.0002.00EC] # LATIN SMALL LETTER I WITH GRAVE
+0069 0340 ; [.16CD.001F.0002.00EC] # LATIN SMALL LETTER I WITH GRAVE
+00CC ; [.16CD.001F.0008.00CC] # LATIN CAPITAL LETTER I WITH GRAVE
+0049 0300 ; [.16CD.001F.0008.00CC] # LATIN CAPITAL LETTER I WITH GRAVE
+0049 0340 ; [.16CD.001F.0008.00CC] # LATIN CAPITAL LETTER I WITH GRAVE
+006D 0304 ; [.1741.001C.0002.006D] # <LATIN SMALL LETTER M, COMBINING MACRON>
+004D 0304 ; [.1741.001C.0008.004D] # <LATIN CAPITAL LETTER M, COMBINING MACRON>
+1E3F ; [.1741.001D.0002.1E3F] # LATIN SMALL LETTER M WITH ACUTE
+006D 0301 ; [.1741.001D.0002.1E3F] # LATIN SMALL LETTER M WITH ACUTE
+006D 0341 ; [.1741.001D.0002.1E3F] # LATIN SMALL LETTER M WITH ACUTE
+1E3E ; [.1741.001D.0008.1E3E] # LATIN CAPITAL LETTER M WITH ACUTE
+004D 0301 ; [.1741.001D.0008.1E3E] # LATIN CAPITAL LETTER M WITH ACUTE
+004D 0341 ; [.1741.001D.0008.1E3E] # LATIN CAPITAL LETTER M WITH ACUTE
+006D 030C ; [.1741.001E.0002.006D] # <LATIN SMALL LETTER M, COMBINING CARON>
+004D 030C ; [.1741.001E.0008.004D] # <LATIN CAPITAL LETTER M, COMBINING CARON>
+006D 0300 ; [.1741.001F.0002.006D] # <LATIN SMALL LETTER M, COMBINING GRAVE ACCENT>
+006D 0340 ; [.1741.001F.0002.006D] # <LATIN SMALL LETTER M, COMBINING GRAVE TONE MARK>
+004D 0300 ; [.1741.001F.0008.004D] # <LATIN CAPITAL LETTER M, COMBINING GRAVE ACCENT>
+004D 0340 ; [.1741.001F.0008.004D] # <LATIN CAPITAL LETTER M, COMBINING GRAVE TONE MARK>
+006E 0304 ; [.174F.001C.0002.006E] # <LATIN SMALL LETTER N, COMBINING MACRON>
+004E 0304 ; [.174F.001C.0008.004E] # <LATIN CAPITAL LETTER N, COMBINING MACRON>
+0144 ; [.174F.001D.0002.0144] # LATIN SMALL LETTER N WITH ACUTE
+006E 0301 ; [.174F.001D.0002.0144] # LATIN SMALL LETTER N WITH ACUTE
+006E 0341 ; [.174F.001D.0002.0144] # LATIN SMALL LETTER N WITH ACUTE
+0143 ; [.174F.001D.0008.0143] # LATIN CAPITAL LETTER N WITH ACUTE
+004E 0301 ; [.174F.001D.0008.0143] # LATIN CAPITAL LETTER N WITH ACUTE
+004E 0341 ; [.174F.001D.0008.0143] # LATIN CAPITAL LETTER N WITH ACUTE
+0148 ; [.174F.001E.0002.0148] # LATIN SMALL LETTER N WITH CARON
+006E 030C ; [.174F.001E.0002.0148] # LATIN SMALL LETTER N WITH CARON
+0147 ; [.174F.001E.0008.0147] # LATIN CAPITAL LETTER N WITH CARON
+004E 030C ; [.174F.001E.0008.0147] # LATIN CAPITAL LETTER N WITH CARON
+01F9 ; [.174F.001F.0002.01F9] # LATIN SMALL LETTER N WITH GRAVE
+006E 0300 ; [.174F.001F.0002.01F9] # LATIN SMALL LETTER N WITH GRAVE
+006E 0340 ; [.174F.001F.0002.01F9] # LATIN SMALL LETTER N WITH GRAVE
+01F8 ; [.174F.001F.0008.01F8] # LATIN CAPITAL LETTER N WITH GRAVE
+004E 0300 ; [.174F.001F.0008.01F8] # LATIN CAPITAL LETTER N WITH GRAVE
+004E 0340 ; [.174F.001F.0008.01F8] # LATIN CAPITAL LETTER N WITH GRAVE
+014D ; [.1771.001C.0002.014D] # LATIN SMALL LETTER O WITH MACRON
+006F 0304 ; [.1771.001C.0002.014D] # LATIN SMALL LETTER O WITH MACRON
+014C ; [.1771.001C.0008.014C] # LATIN CAPITAL LETTER O WITH MACRON
+004F 0304 ; [.1771.001C.0008.014C] # LATIN CAPITAL LETTER O WITH MACRON
+00F3 ; [.1771.001D.0002.00F3] # LATIN SMALL LETTER O WITH ACUTE
+006F 0301 ; [.1771.001D.0002.00F3] # LATIN SMALL LETTER O WITH ACUTE
+006F 0341 ; [.1771.001D.0002.00F3] # LATIN SMALL LETTER O WITH ACUTE
+00D3 ; [.1771.001D.0008.00D3] # LATIN CAPITAL LETTER O WITH ACUTE
+004F 0301 ; [.1771.001D.0008.00D3] # LATIN CAPITAL LETTER O WITH ACUTE
+004F 0341 ; [.1771.001D.0008.00D3] # LATIN CAPITAL LETTER O WITH ACUTE
+01D2 ; [.1771.001E.0002.01D2] # LATIN SMALL LETTER O WITH CARON
+006F 030C ; [.1771.001E.0002.01D2] # LATIN SMALL LETTER O WITH CARON
+01D1 ; [.1771.001E.0008.01D1] # LATIN CAPITAL LETTER O WITH CARON
+004F 030C ; [.1771.001E.0008.01D1] # LATIN CAPITAL LETTER O WITH CARON
+00F2 ; [.1771.001F.0002.00F2] # LATIN SMALL LETTER O WITH GRAVE
+006F 0300 ; [.1771.001F.0002.00F2] # LATIN SMALL LETTER O WITH GRAVE
+006F 0340 ; [.1771.001F.0002.00F2] # LATIN SMALL LETTER O WITH GRAVE
+00D2 ; [.1771.001F.0008.00D2] # LATIN CAPITAL LETTER O WITH GRAVE
+004F 0300 ; [.1771.001F.0008.00D2] # LATIN CAPITAL LETTER O WITH GRAVE
+004F 0340 ; [.1771.001F.0008.00D2] # LATIN CAPITAL LETTER O WITH GRAVE
+016B ; [.1836.001C.0002.016B] # LATIN SMALL LETTER U WITH MACRON
+0075 0304 ; [.1836.001C.0002.016B] # LATIN SMALL LETTER U WITH MACRON
+016A ; [.1836.001C.0008.016A] # LATIN CAPITAL LETTER U WITH MACRON
+0055 0304 ; [.1836.001C.0008.016A] # LATIN CAPITAL LETTER U WITH MACRON
+00FA ; [.1836.001D.0002.00FA] # LATIN SMALL LETTER U WITH ACUTE
+0075 0301 ; [.1836.001D.0002.00FA] # LATIN SMALL LETTER U WITH ACUTE
+0075 0341 ; [.1836.001D.0002.00FA] # LATIN SMALL LETTER U WITH ACUTE
+00DA ; [.1836.001D.0008.00DA] # LATIN CAPITAL LETTER U WITH ACUTE
+0055 0301 ; [.1836.001D.0008.00DA] # LATIN CAPITAL LETTER U WITH ACUTE
+0055 0341 ; [.1836.001D.0008.00DA] # LATIN CAPITAL LETTER U WITH ACUTE
+01D4 ; [.1836.001E.0002.01D4] # LATIN SMALL LETTER U WITH CARON
+0075 030C ; [.1836.001E.0002.01D4] # LATIN SMALL LETTER U WITH CARON
+01D3 ; [.1836.001E.0008.01D3] # LATIN CAPITAL LETTER U WITH CARON
+0055 030C ; [.1836.001E.0008.01D3] # LATIN CAPITAL LETTER U WITH CARON
+00F9 ; [.1836.001F.0002.00F9] # LATIN SMALL LETTER U WITH GRAVE
+0075 0300 ; [.1836.001F.0002.00F9] # LATIN SMALL LETTER U WITH GRAVE
+0075 0340 ; [.1836.001F.0002.00F9] # LATIN SMALL LETTER U WITH GRAVE
+00D9 ; [.1836.001F.0008.00D9] # LATIN CAPITAL LETTER U WITH GRAVE
+0055 0300 ; [.1836.001F.0008.00D9] # LATIN CAPITAL LETTER U WITH GRAVE
+0055 0340 ; [.1836.001F.0008.00D9] # LATIN CAPITAL LETTER U WITH GRAVE
+01D6 ; [.1836.0021.0002.01D6] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+0075 0308 0304 ; [.1836.0021.0002.01D6] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D5 ; [.1836.0021.0008.01D5] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+0055 0308 0304 ; [.1836.0021.0008.01D5] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+00FC 0304 ; [.1836.0021.0002.01D6] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING MACRON>
+00DC 0304 ; [.1836.0021.0008.01D5] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING MACRON>
+01D8 ; [.1836.0022.0002.01D8] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+0075 0308 0301 ; [.1836.0022.0002.01D8] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+0075 0308 0341 ; [.1836.0022.0002.01D8] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D7 ; [.1836.0022.0008.01D7] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+0055 0308 0301 ; [.1836.0022.0008.01D7] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+0055 0308 0341 ; [.1836.0022.0008.01D7] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+00FC 0301 ; [.1836.0022.0002.01D8] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
+00FC 0341 ; [.1836.0022.0002.01D8] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
+00DC 0301 ; [.1836.0022.0008.01D7] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE ACCENT>
+00DC 0341 ; [.1836.0022.0008.01D7] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING ACUTE TONE MARK>
+01DA ; [.1836.0023.0002.01DA] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+0075 0308 030C ; [.1836.0023.0002.01DA] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01D9 ; [.1836.0023.0008.01D9] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+0055 0308 030C ; [.1836.0023.0008.01D9] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+00FC 030C ; [.1836.0023.0002.01DA] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING CARON>
+00DC 030C ; [.1836.0023.0008.01D9] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING CARON>
+01DC ; [.1836.0024.0002.01DC] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+0075 0308 0300 ; [.1836.0024.0002.01DC] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+0075 0308 0340 ; [.1836.0024.0002.01DC] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DB ; [.1836.0024.0008.01DB] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+0055 0308 0300 ; [.1836.0024.0008.01DB] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+0055 0308 0340 ; [.1836.0024.0008.01DB] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+00FC 0300 ; [.1836.0024.0002.01DC] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
+00FC 0340 ; [.1836.0024.0002.01DC] # <LATIN SMALL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
+00DC 0300 ; [.1836.0024.0008.01DB] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE ACCENT>
+00DC 0340 ; [.1836.0024.0008.01DB] # <LATIN CAPITAL LETTER U WITH DIAERESIS, COMBINING GRAVE TONE MARK>
+00FC ; [.1836.0025.0002.00FC] # LATIN SMALL LETTER U WITH DIAERESIS
+0075 0308 ; [.1836.0025.0002.00FC] # LATIN SMALL LETTER U WITH DIAERESIS
+00DC ; [.1836.0025.0008.00DC] # LATIN CAPITAL LETTER U WITH DIAERESIS
+0055 0308 ; [.1836.0025.0008.00DC] # LATIN CAPITAL LETTER U WITH DIAERESIS
+FDD0 3105 ; [.8000.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER B>
+2E8A ; [.80B5.0020.0002.2E8A] # CJK RADICAL DIVINATION
+FDD0 3106 ; [.83B1.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER P>
+FDD0 3107 ; [.8626.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER M>
+FDD0 3108 ; [.897F.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER F>
+2ECF ; [.8BC0.0020.0002.2ECF] # CJK RADICAL CITY
+2ED6 ; [.8BC1.0020.0002.2ED6] # CJK RADICAL MOUND TWO
+FDD0 3109 ; [.8C0D.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER D>
+2E88 ; [.8C86.0020.0002.2E88] # CJK RADICAL KNIFE ONE
+FDD0 310A ; [.901F.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER T>
+FDD0 310B ; [.93D9.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER N>
+2EA7 ; [.9525.0020.0002.2EA7] # CJK RADICAL COW
+FDD0 310C ; [.95D9.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER L>
+3007 ; [.9A41.0020.0002.3007] # IDEOGRAPHIC NUMBER ZERO
+FDD0 310D ; [.9C5F.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER G>
+2EE3 ; [.9E0A.0020.0002.2EE3] # CJK RADICAL BONE
+FDD0 310E ; [.9FD2.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER K>
+FDD0 310F ; [.A223.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER H>
+FDD0 3110 ; [.A697.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER J>
+2E95 ; [.A762.0020.0002.2E95] # CJK RADICAL SNOUT TWO
+2E86 ; [.AD18.0020.0002.2E86] # CJK RADICAL BOX
+FDD0 3111 ; [.AD38.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER Q>
+FDD0 3112 ; [.B164.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER X>
+2E8C ; [.B383.0020.0002.2E8C] # CJK RADICAL SMALL ONE
+2E8D ; [.B384.0020.0002.2E8D] # CJK RADICAL SMALL TWO
+FDD0 3113 ; [.B6E9.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER ZH>
+2EA5 ; [.B8AC.0020.0002.2EA5] # CJK RADICAL PAW TWO
+FDD0 3114 ; [.BBAC.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER CH>
+2ECC ; [.BE9D.0020.0002.2ECC] # CJK RADICAL SIMPLIFIED WALK
+2ECD ; [.BE9E.0020.0002.2ECD] # CJK RADICAL WALK ONE
+FDD0 3115 ; [.BF5A.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER SH>
+2EAC ; [.BFBC.0020.0002.2EAC] # CJK RADICAL SPIRIT ONE
+2EAE ; [.BFC1.0020.0002.2EAE] # CJK RADICAL BAMBOO
+FDD0 3116 ; [.C2A2.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER R>
+2E9C ; [.C2A3.0020.0002.2E9C] # CJK RADICAL SUN
+2EBC ; [.C2D3.0020.0002.2EBC] # CJK RADICAL MEAT
+2EB6 ; [.C311.0020.0002.2EB6] # CJK RADICAL SHEEP
+FDD0 3117 ; [.C402.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER Z>
+FDD0 3118 ; [.C630.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER C>
+2EBE ; [.C6CA.0020.0002.2EBE] # CJK RADICAL GRASS ONE
+FDD0 3119 ; [.C7F6.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER S>
+FDD0 311A ; [.CA13.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER A>
+FDD0 311B ; [.CA19.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER O>
+FDD0 311C ; [.CA1E.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER E>
+FDD0 311E ; [.CAA0.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER AI>
+FDD0 311F ; [.CAE8.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER EI>
+FDD0 3120 ; [.CAEB.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER AU>
+FDD0 3121 ; [.CB2E.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER OU>
+FDD0 3122 ; [.CB51.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER AN>
+FDD0 3123 ; [.CB8B.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER EN>
+FDD0 3124 ; [.CB94.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER ANG>
+FDD0 3125 ; [.CBA0.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER ENG>
+FDD0 3126 ; [.CBA2.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER ER>
+FDD0 3127 ; [.CBDB.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER I>
+2E84 ; [.CDB5.0020.0002.2E84] # CJK RADICAL SECOND THREE
+2E80 ; [.CEDF.0020.0002.2E80] # CJK RADICAL REPEAT
+FDD0 3128 ; [.D16F.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER U>
+FDD0 3129 ; [.D403.0020.0002.FDD0] # <noncharacter-FDD0, BOPOMOFO LETTER IU>
+2ED7 ; [.D47E.0020.0002.2ED7] # CJK RADICAL RAIN
+2E9D ; [.D53B.0020.0002.2E9D] # CJK RADICAL MOON
+3220 ; [*02FB.0020.0004.3220][.CBDC.0020.0004.3220][*02FC.0020.001F.3220] # PARENTHESIZED IDEOGRAPH ONE
+3226 ; [*02FB.0020.0004.3226][.AD39.0020.0004.3226][*02FC.0020.001F.3226] # PARENTHESIZED IDEOGRAPH SEVEN
+3222 ; [*02FB.0020.0004.3222][.C8DF.0020.0004.3222][*02FC.0020.001F.3222] # PARENTHESIZED IDEOGRAPH THREE
+3228 ; [*02FB.0020.0004.3228][.A95D.0020.0004.3228][*02FC.0020.001F.3228] # PARENTHESIZED IDEOGRAPH NINE
+3221 ; [*02FB.0020.0004.3221][.CBCD.0020.0004.3221][*02FC.0020.001F.3221] # PARENTHESIZED IDEOGRAPH TWO
+3224 ; [*02FB.0020.0004.3224][.D1A9.0020.0004.3224][*02FC.0020.001F.3224] # PARENTHESIZED IDEOGRAPH FIVE
+3239 ; [*02FB.0020.0004.3239][.8C57.0020.0004.3239][*02FC.0020.001F.3239] # PARENTHESIZED IDEOGRAPH REPRESENT
+323D ; [*02FB.0020.0004.323D][.ADC1.0020.0004.323D][*02FC.0020.001F.323D] # PARENTHESIZED IDEOGRAPH ENTERPRISE
+3241 ; [*02FB.0020.0004.3241][.B3A8.0020.0004.3241][*02FC.0020.001F.3241] # PARENTHESIZED IDEOGRAPH REST
+3227 ; [*02FB.0020.0004.3227][.8001.0020.0004.3227][*02FC.0020.001F.3227] # PARENTHESIZED IDEOGRAPH EIGHT
+3225 ; [*02FB.0020.0004.3225][.9953.0020.0004.3225][*02FC.0020.001F.3225] # PARENTHESIZED IDEOGRAPH SIX
+3238 ; [*02FB.0020.0004.3238][.969E.0020.0004.3238][*02FC.0020.001F.3238] # PARENTHESIZED IDEOGRAPH LABOR
+3229 ; [*02FB.0020.0004.3229][.BF85.0020.0004.3229][*02FC.0020.001F.3229] # PARENTHESIZED IDEOGRAPH TEN
+323F ; [*02FB.0020.0004.323F][.B2BC.0020.0004.323F][*02FC.0020.001F.323F] # PARENTHESIZED IDEOGRAPH ALLIANCE
+3234 ; [*02FB.0020.0004.3234][.892A.0020.0004.3234][*02FC.0020.001F.3234] # PARENTHESIZED IDEOGRAPH NAME
+323A ; [*02FB.0020.0004.323A][.A3B5.0020.0004.323A][*02FC.0020.001F.323A] # PARENTHESIZED IDEOGRAPH CALL
+3223 ; [*02FB.0020.0004.3223][.C82E.0020.0004.3223][*02FC.0020.001F.3223] # PARENTHESIZED IDEOGRAPH FOUR
+322F ; [*02FB.0020.0004.322F][.92EA.0020.0004.322F][*02FC.0020.001F.322F] # PARENTHESIZED IDEOGRAPH EARTH
+323B ; [*02FB.0020.0004.323B][.B5F0.0020.0004.323B][*02FC.0020.001F.323B] # PARENTHESIZED IDEOGRAPH STUDY
+3230 ; [*02FB.0020.0004.3230][.C2A4.0020.0004.3230][*02FC.0020.001F.3230] # PARENTHESIZED IDEOGRAPH SUN
+322A ; [*02FB.0020.0004.322A][.D53C.0020.0004.322A][*02FC.0020.001F.322A] # PARENTHESIZED IDEOGRAPH MOON
+3232 ; [*02FB.0020.0004.3232][.CEC7.0020.0004.3232][*02FC.0020.001F.3232] # PARENTHESIZED IDEOGRAPH HAVE
+322D ; [*02FB.0020.0004.322D][.895F.0020.0004.322D][*02FC.0020.001F.322D] # PARENTHESIZED IDEOGRAPH WOOD
+3231 ; [*02FB.0020.0004.3231][.BA36.0020.0004.3231][*02FC.0020.001F.3231] # PARENTHESIZED IDEOGRAPH STOCK
+322C ; [*02FB.0020.0004.322C][.C26E.0020.0004.322C][*02FC.0020.001F.322C] # PARENTHESIZED IDEOGRAPH WATER
+322B ; [*02FB.0020.0004.322B][.A48C.0020.0004.322B][*02FC.0020.001F.322B] # PARENTHESIZED IDEOGRAPH FIRE
+3235 ; [*02FB.0020.0004.3235][.9060.0020.0004.3235][*02FC.0020.001F.3235] # PARENTHESIZED IDEOGRAPH SPECIAL
+323C ; [*02FB.0020.0004.323C][.A9B3.0020.0004.323C][*02FC.0020.001F.323C] # PARENTHESIZED IDEOGRAPH SUPERVISE
+3233 ; [*02FB.0020.0004.3233][.C05E.0020.0004.3233][*02FC.0020.001F.3233] # PARENTHESIZED IDEOGRAPH SOCIETY
+3237 ; [*02FB.0020.0004.3237][.BA90.0020.0004.3237][*02FC.0020.001F.3237] # PARENTHESIZED IDEOGRAPH CONGRATULATION
+3240 ; [*02FB.0020.0004.3240][.A78C.0020.0004.3240][*02FC.0020.001F.3240] # PARENTHESIZED IDEOGRAPH FESTIVAL
+3242 ; [*02FB.0020.0004.3242][.C457.0020.0004.3242][*02FC.0020.001F.3242] # PARENTHESIZED IDEOGRAPH SELF
+3243 ; [*02FB.0020.0004.3243][.B766.0020.0004.3243][*02FC.0020.001F.3243] # PARENTHESIZED IDEOGRAPH REACH
+3236 ; [*02FB.0020.0004.3236][.C69F.0020.0004.3236][*02FC.0020.001F.3236] # PARENTHESIZED IDEOGRAPH FINANCIAL
+323E ; [*02FB.0020.0004.323E][.C421.0020.0004.323E][*02FC.0020.001F.323E] # PARENTHESIZED IDEOGRAPH RESOURCE
+322E ; [*02FB.0020.0004.322E][.AA72.0020.0004.322E][*02FC.0020.001F.322E] # PARENTHESIZED IDEOGRAPH METAL
+3358 ; [.15E5.0020.0004.3358][.8E99.0020.001F.3358] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+33E9 ; [.15E6.0020.0004.33E9][.15E5.0020.0004.33E9][.C2A4.0020.001F.33E9] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+32C9 ; [.15E6.0020.0004.32C9][.15E5.0020.0004.32C9][.D53C.0020.001F.32C9] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+3362 ; [.15E6.0020.0004.3362][.15E5.0020.0004.3362][.8E99.0020.001F.3362] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+33EA ; [.15E6.0020.0004.33EA][.15E6.0020.0004.33EA][.C2A4.0020.001F.33EA] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+32CA ; [.15E6.0020.0004.32CA][.15E6.0020.0004.32CA][.D53C.0020.001F.32CA] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+3363 ; [.15E6.0020.0004.3363][.15E6.0020.0004.3363][.8E99.0020.001F.3363] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+33EB ; [.15E6.0020.0004.33EB][.15E7.0020.0004.33EB][.C2A4.0020.001F.33EB] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+32CB ; [.15E6.0020.0004.32CB][.15E7.0020.0004.32CB][.D53C.0020.001F.32CB] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+3364 ; [.15E6.0020.0004.3364][.15E7.0020.0004.3364][.8E99.0020.001F.3364] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+33EC ; [.15E6.0020.0004.33EC][.15E8.0020.0004.33EC][.C2A4.0020.001F.33EC] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+3365 ; [.15E6.0020.0004.3365][.15E8.0020.0004.3365][.8E99.0020.001F.3365] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+33ED ; [.15E6.0020.0004.33ED][.15E9.0020.0004.33ED][.C2A4.0020.001F.33ED] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+3366 ; [.15E6.0020.0004.3366][.15E9.0020.0004.3366][.8E99.0020.001F.3366] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+33EE ; [.15E6.0020.0004.33EE][.15EA.0020.0004.33EE][.C2A4.0020.001F.33EE] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+3367 ; [.15E6.0020.0004.3367][.15EA.0020.0004.3367][.8E99.0020.001F.3367] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+33EF ; [.15E6.0020.0004.33EF][.15EB.0020.0004.33EF][.C2A4.0020.001F.33EF] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+3368 ; [.15E6.0020.0004.3368][.15EB.0020.0004.3368][.8E99.0020.001F.3368] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+33F0 ; [.15E6.0020.0004.33F0][.15EC.0020.0004.33F0][.C2A4.0020.001F.33F0] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+3369 ; [.15E6.0020.0004.3369][.15EC.0020.0004.3369][.8E99.0020.001F.3369] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+33F1 ; [.15E6.0020.0004.33F1][.15ED.0020.0004.33F1][.C2A4.0020.001F.33F1] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+336A ; [.15E6.0020.0004.336A][.15ED.0020.0004.336A][.8E99.0020.001F.336A] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+33F2 ; [.15E6.0020.0004.33F2][.15EE.0020.0004.33F2][.C2A4.0020.001F.33F2] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+336B ; [.15E6.0020.0004.336B][.15EE.0020.0004.336B][.8E99.0020.001F.336B] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+33E0 ; [.15E6.0020.0004.33E0][.C2A4.0020.001F.33E0] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+32C0 ; [.15E6.0020.0004.32C0][.D53C.0020.001F.32C0] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+3359 ; [.15E6.0020.0004.3359][.8E99.0020.001F.3359] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+33F3 ; [.15E7.0020.0004.33F3][.15E5.0020.0004.33F3][.C2A4.0020.001F.33F3] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+336C ; [.15E7.0020.0004.336C][.15E5.0020.0004.336C][.8E99.0020.001F.336C] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+33F4 ; [.15E7.0020.0004.33F4][.15E6.0020.0004.33F4][.C2A4.0020.001F.33F4] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+336D ; [.15E7.0020.0004.336D][.15E6.0020.0004.336D][.8E99.0020.001F.336D] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+33F5 ; [.15E7.0020.0004.33F5][.15E7.0020.0004.33F5][.C2A4.0020.001F.33F5] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+336E ; [.15E7.0020.0004.336E][.15E7.0020.0004.336E][.8E99.0020.001F.336E] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+33F6 ; [.15E7.0020.0004.33F6][.15E8.0020.0004.33F6][.C2A4.0020.001F.33F6] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+336F ; [.15E7.0020.0004.336F][.15E8.0020.0004.336F][.8E99.0020.001F.336F] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+33F7 ; [.15E7.0020.0004.33F7][.15E9.0020.0004.33F7][.C2A4.0020.001F.33F7] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+3370 ; [.15E7.0020.0004.3370][.15E9.0020.0004.3370][.8E99.0020.001F.3370] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+33F8 ; [.15E7.0020.0004.33F8][.15EA.0020.0004.33F8][.C2A4.0020.001F.33F8] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+33F9 ; [.15E7.0020.0004.33F9][.15EB.0020.0004.33F9][.C2A4.0020.001F.33F9] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+33FA ; [.15E7.0020.0004.33FA][.15EC.0020.0004.33FA][.C2A4.0020.001F.33FA] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+33FB ; [.15E7.0020.0004.33FB][.15ED.0020.0004.33FB][.C2A4.0020.001F.33FB] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+33FC ; [.15E7.0020.0004.33FC][.15EE.0020.0004.33FC][.C2A4.0020.001F.33FC] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+33E1 ; [.15E7.0020.0004.33E1][.C2A4.0020.001F.33E1] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+32C1 ; [.15E7.0020.0004.32C1][.D53C.0020.001F.32C1] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+335A ; [.15E7.0020.0004.335A][.8E99.0020.001F.335A] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+33FD ; [.15E8.0020.0004.33FD][.15E5.0020.0004.33FD][.C2A4.0020.001F.33FD] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+33FE ; [.15E8.0020.0004.33FE][.15E6.0020.0004.33FE][.C2A4.0020.001F.33FE] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+33E2 ; [.15E8.0020.0004.33E2][.C2A4.0020.001F.33E2] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+32C2 ; [.15E8.0020.0004.32C2][.D53C.0020.001F.32C2] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+335B ; [.15E8.0020.0004.335B][.8E99.0020.001F.335B] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+33E3 ; [.15E9.0020.0004.33E3][.C2A4.0020.001F.33E3] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+32C3 ; [.15E9.0020.0004.32C3][.D53C.0020.001F.32C3] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+335C ; [.15E9.0020.0004.335C][.8E99.0020.001F.335C] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+33E4 ; [.15EA.0020.0004.33E4][.C2A4.0020.001F.33E4] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+32C4 ; [.15EA.0020.0004.32C4][.D53C.0020.001F.32C4] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+335D ; [.15EA.0020.0004.335D][.8E99.0020.001F.335D] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+33E5 ; [.15EB.0020.0004.33E5][.C2A4.0020.001F.33E5] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+32C5 ; [.15EB.0020.0004.32C5][.D53C.0020.001F.32C5] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+335E ; [.15EB.0020.0004.335E][.8E99.0020.001F.335E] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+33E6 ; [.15EC.0020.0004.33E6][.C2A4.0020.001F.33E6] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+32C6 ; [.15EC.0020.0004.32C6][.D53C.0020.001F.32C6] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+335F ; [.15EC.0020.0004.335F][.8E99.0020.001F.335F] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+33E7 ; [.15ED.0020.0004.33E7][.C2A4.0020.001F.33E7] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+32C7 ; [.15ED.0020.0004.32C7][.D53C.0020.001F.32C7] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+3360 ; [.15ED.0020.0004.3360][.8E99.0020.001F.3360] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+33E8 ; [.15EE.0020.0004.33E8][.C2A4.0020.001F.33E8] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+32C8 ; [.15EE.0020.0004.32C8][.D53C.0020.001F.32C8] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+3361 ; [.15EE.0020.0004.3361][.8E99.0020.001F.3361] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+1F241 ; [*0359.0020.0004.1F241][.C8DF.0020.0004.1F241][*035A.0020.001F.1F241] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
+1F242 ; [*0359.0020.0004.1F242][.CBCD.0020.0004.1F242][*035A.0020.001F.1F242] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
+1F247 ; [*0359.0020.0004.1F247][.C1CC.0020.0004.1F247][*035A.0020.001F.1F247] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
+1F243 ; [*0359.0020.0004.1F243][.CB52.0020.0004.1F243][*035A.0020.001F.1F243] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
+1F245 ; [*0359.0020.0004.1F245][.8C38.0020.0004.1F245][*035A.0020.001F.1F245] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
+1F248 ; [*0359.0020.0004.1F248][.80CD.0020.0004.1F248][*035A.0020.001F.1F248] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F240 ; [*0359.0020.0004.1F240][.819A.0020.0004.1F240][*035A.0020.001F.1F240] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
+1F244 ; [*0359.0020.0004.1F244][.8E99.0020.0004.1F244][*035A.0020.001F.1F244] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
+1F246 ; [*0359.0020.0004.1F246][.8CA9.0020.0004.1F246][*035A.0020.001F.1F246] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
+2F00 ; [.CBDC.0020.0004.2F00] # KANGXI RADICAL ONE
+3192 ; [.CBDC.0020.0014.3192] # IDEOGRAPHIC ANNOTATION ONE MARK
+3280 ; [.CBDC.0020.0006.3280] # CIRCLED IDEOGRAPH ONE
+1F229 ; [.CBDC.0020.001C.1F229] # SQUARED CJK UNIFIED IDEOGRAPH-4E00
+319C ; [.8EC1.0020.0014.319C] # IDEOGRAPHIC ANNOTATION FOURTH MARK
+3286 ; [.AD39.0020.0006.3286] # CIRCLED IDEOGRAPH SEVEN
+3194 ; [.C8DF.0020.0014.3194] # IDEOGRAPHIC ANNOTATION THREE MARK
+3282 ; [.C8DF.0020.0006.3282] # CIRCLED IDEOGRAPH THREE
+1F22A ; [.C8DF.0020.001C.1F22A] # SQUARED CJK UNIFIED IDEOGRAPH-4E09
+3196 ; [.C19C.0020.0014.3196] # IDEOGRAPHIC ANNOTATION TOP MARK
+32A4 ; [.C19C.0020.0006.32A4] # CIRCLED IDEOGRAPH HIGH
+3198 ; [.B2A0.0020.0014.3198] # IDEOGRAPHIC ANNOTATION BOTTOM MARK
+32A6 ; [.B2A0.0020.0006.32A6] # CIRCLED IDEOGRAPH LOW
+319B ; [.8355.0020.0014.319B] # IDEOGRAPHIC ANNOTATION THIRD MARK
+2F01 ; [.9F64.0020.0004.2F01] # KANGXI RADICAL LINE
+3197 ; [.BB6D.0020.0014.3197] # IDEOGRAPHIC ANNOTATION MIDDLE MARK
+32A5 ; [.BB6D.0020.0006.32A5] # CIRCLED IDEOGRAPH CENTRE
+1F22D ; [.BB6D.0020.001C.1F22D] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D
+2F02 ; [.BA6A.0020.0004.2F02] # KANGXI RADICAL DOT
+2F03 ; [.8558.0020.0004.2F03] # KANGXI RADICAL SLASH
+2F04 ; [.CC59.0020.0004.2F04] # KANGXI RADICAL SECOND
+319A ; [.CC59.0020.0014.319A] # IDEOGRAPHIC ANNOTATION SECOND MARK
+3288 ; [.A95D.0020.0006.3288] # CIRCLED IDEOGRAPH NINE
+2F05 ; [.AC3C.0020.0004.2F05] # KANGXI RADICAL HOOK
+2F06 ; [.CBCD.0020.0004.2F06] # KANGXI RADICAL TWO
+3193 ; [.CBCD.0020.0014.3193] # IDEOGRAPHIC ANNOTATION TWO MARK
+3281 ; [.CBCD.0020.0006.3281] # CIRCLED IDEOGRAPH TWO
+1F214 ; [.CBCD.0020.001C.1F214] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C
+3284 ; [.D1A9.0020.0006.3284] # CIRCLED IDEOGRAPH FIVE
+2F07 ; [.90D4.0020.0004.2F07] # KANGXI RADICAL LID
+1F218 ; [.A8BE.0020.001C.1F218] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4
+2F08 ; [.C2EF.0020.0004.2F08] # KANGXI RADICAL MAN
+319F ; [.C2EF.0020.0014.319F] # IDEOGRAPHIC ANNOTATION MAN MARK
+32AD ; [.ADC1.0020.0006.32AD] # CIRCLED IDEOGRAPH ENTERPRISE
+32A1 ; [.B3A8.0020.0006.32A1] # CIRCLED IDEOGRAPH REST
+329D ; [.CE97.0020.0006.329D] # CIRCLED IDEOGRAPH EXCELLENT
+2F09 ; [.CBA3.0020.0004.2F09] # KANGXI RADICAL LEGS
+2F0A ; [.C376.0020.0004.2F0A] # KANGXI RADICAL ENTER
+2F0B ; [.8001.0020.0004.2F0B] # KANGXI RADICAL EIGHT
+3287 ; [.8001.0020.0006.3287] # CIRCLED IDEOGRAPH EIGHT
+3285 ; [.9953.0020.0006.3285] # CIRCLED IDEOGRAPH SIX
+2F0C ; [.AD19.0020.0004.2F0C] # KANGXI RADICAL DOWN BOX
+1F21E ; [.C4C2.0020.001C.1F21E] # SQUARED CJK UNIFIED IDEOGRAPH-518D
+2F0D ; [.8867.0020.0004.2F0D] # KANGXI RADICAL COVER
+32A2 ; [.B2E9.0020.0006.32A2] # CIRCLED IDEOGRAPH COPY
+2F0E ; [.834E.0020.0004.2F0E] # KANGXI RADICAL ICE
+2F0F ; [.A74C.0020.0004.2F0F] # KANGXI RADICAL TABLE
+2F10 ; [.AF59.0020.0004.2F10] # KANGXI RADICAL OPEN BOX
+2F11 ; [.8C87.0020.0004.2F11] # KANGXI RADICAL KNIFE
+1F220 ; [.BE3B.0020.001C.1F220] # SQUARED CJK UNIFIED IDEOGRAPH-521D
+1F21C ; [.AF3B.0020.001C.1F21C] # SQUARED CJK UNIFIED IDEOGRAPH-524D
+1F239 ; [.9C7B.0020.001C.1F239] # SQUARED CJK UNIFIED IDEOGRAPH-5272
+2F12 ; [.9804.0020.0004.2F12] # KANGXI RADICAL POWER
+3298 ; [.969E.0020.0006.3298] # CIRCLED IDEOGRAPH LABOR
+2F13 ; [.811A.0020.0004.2F13] # KANGXI RADICAL WRAP
+2F14 ; [.81FC.0020.0004.2F14] # KANGXI RADICAL SPOON
+2F15 ; [.8A9F.0020.0004.2F15] # KANGXI RADICAL RIGHT OPEN BOX
+2F16 ; [.B224.0020.0004.2F16] # KANGXI RADICAL HIDING ENCLOSURE
+32A9 ; [.CBE1.0020.0006.32A9] # CIRCLED IDEOGRAPH MEDICINE
+2F17 ; [.BF85.0020.0004.2F17] # KANGXI RADICAL TEN
+3038 ; [.BF85.0020.0004.3038] # HANGZHOU NUMERAL TEN
+3289 ; [.BF85.0020.0006.3289] # CIRCLED IDEOGRAPH TEN
+3039 ; [.954F.0020.0004.3039] # HANGZHOU NUMERAL TWENTY
+303A ; [.C861.0020.0004.303A] # HANGZHOU NUMERAL THIRTY
+32AF ; [.B2BC.0020.0006.32AF] # CIRCLED IDEOGRAPH ALLIANCE
+2F18 ; [.80B6.0020.0004.2F18] # KANGXI RADICAL DIVINATION
+2F19 ; [.A84F.0020.0004.2F19] # KANGXI RADICAL SEAL
+329E ; [.D06B.0020.0006.329E] # CIRCLED IDEOGRAPH PRINT
+2F1A ; [.BDC0.0020.0004.2F1A] # KANGXI RADICAL CLIFF
+2F1B ; [.C7F7.0020.0004.2F1B] # KANGXI RADICAL PRIVATE
+2F1C ; [.CEE0.0020.0004.2F1C] # KANGXI RADICAL AGAIN
+1F212 ; [.C28A.0020.001C.1F212] # SQUARED CJK UNIFIED IDEOGRAPH-53CC
+2F1D ; [.A070.0020.0004.2F1D] # KANGXI RADICAL MOUTH
+1F251 ; [.A007.0020.0006.1F251] # CIRCLED IDEOGRAPH ACCEPT
+32A8 ; [.CEE1.0020.0006.32A8] # CIRCLED IDEOGRAPH RIGHT
+1F22E ; [.CEE1.0020.001C.1F22E] # SQUARED CJK UNIFIED IDEOGRAPH-53F3
+1F234 ; [.A232.0020.001C.1F234] # SQUARED CJK UNIFIED IDEOGRAPH-5408
+3294 ; [.892A.0020.0006.3294] # CIRCLED IDEOGRAPH NAME
+1F225 ; [.BEBE.0020.001C.1F225] # SQUARED CJK UNIFIED IDEOGRAPH-5439
+3244 ; [.D3B7.0020.0006.3244] # CIRCLED IDEOGRAPH QUESTION
+1F23A ; [.D120.0020.001C.1F23A] # SQUARED CJK UNIFIED IDEOGRAPH-55B6
+2F1E ; [.D27D.0020.0004.2F1E] # KANGXI RADICAL ENCLOSURE
+3195 ; [.C82E.0020.0014.3195] # IDEOGRAPHIC ANNOTATION FOUR MARK
+3283 ; [.C82E.0020.0006.3283] # CIRCLED IDEOGRAPH FOUR
+2F1F ; [.92EA.0020.0004.2F1F] # KANGXI RADICAL EARTH
+328F ; [.92EA.0020.0006.328F] # CIRCLED IDEOGRAPH EARTH
+319E ; [.8C4B.0020.0014.319E] # IDEOGRAPHIC ANNOTATION EARTH MARK
+2F20 ; [.BFB5.0020.0004.2F20] # KANGXI RADICAL SCHOLAR
+1F224 ; [.C1A8.0020.001C.1F224] # SQUARED CJK UNIFIED IDEOGRAPH-58F0
+2F21 ; [.B740.0020.0004.2F21] # KANGXI RADICAL GO
+2F22 ; [.C986.0020.0004.2F22] # KANGXI RADICAL GO SLOWLY
+2F23 ; [.B165.0020.0004.2F23] # KANGXI RADICAL EVENING
+1F215 ; [.8F35.0020.001C.1F215] # SQUARED CJK UNIFIED IDEOGRAPH-591A
+32B0 ; [.CDD7.0020.0006.32B0] # CIRCLED IDEOGRAPH NIGHT
+2F24 ; [.8C39.0020.0004.2F24] # KANGXI RADICAL BIG
+337D ; [.8C39.0020.001C.337D][.BA1E.0020.001C.337D] # SQUARE ERA NAME TAISYOU
+319D ; [.923B.0020.0014.319D] # IDEOGRAPHIC ANNOTATION HEAVEN MARK
+1F217 ; [.923B.0020.001C.1F217] # SQUARED CJK UNIFIED IDEOGRAPH-5929
+2F25 ; [.95CC.0020.0004.2F25] # KANGXI RADICAL WOMAN
+329B ; [.95CC.0020.0006.329B] # CIRCLED IDEOGRAPH FEMALE
+2F26 ; [.C466.0020.0004.2F26] # KANGXI RADICAL CHILD
+1F211 ; [.C456.0020.001C.1F211] # SQUARED CJK UNIFIED IDEOGRAPH-5B57
+32AB ; [.B5F0.0020.0006.32AB] # CIRCLED IDEOGRAPH STUDY
+2F27 ; [.88BF.0020.0004.2F27] # KANGXI RADICAL ROOF
+32AA ; [.C5ED.0020.0006.32AA] # CIRCLED IDEOGRAPH RELIGION
+2F28 ; [.C7B4.0020.0004.2F28] # KANGXI RADICAL INCH
+2F29 ; [.B385.0020.0004.2F29] # KANGXI RADICAL SMALL
+2F2A ; [.CE9E.0020.0004.2F2A] # KANGXI RADICAL LAME
+2F2B ; [.BF5B.0020.0004.2F2B] # KANGXI RADICAL CORPSE
+2F2C ; [.BC63.0020.0004.2F2C] # KANGXI RADICAL SPROUT
+2F2D ; [.C0C5.0020.0004.2F2D] # KANGXI RADICAL MOUNTAIN
+2F2E ; [.BED1.0020.0004.2F2E] # KANGXI RADICAL RIVER
+2F2F ; [.9F9E.0020.0004.2F2F] # KANGXI RADICAL WORK
+32A7 ; [.C593.0020.0006.32A7] # CIRCLED IDEOGRAPH LEFT
+1F22C ; [.C593.0020.001C.1F22C] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6
+2F30 ; [.A74D.0020.0004.2F30] # KANGXI RADICAL ONESELF
+2F31 ; [.AA6D.0020.0004.2F31] # KANGXI RADICAL TURBAN
+2F32 ; [.9D7F.0020.0004.2F32] # KANGXI RADICAL DRY
+337B ; [.85BF.0020.001C.337B][.BDFC.0020.001C.337B] # SQUARE ERA NAME HEISEI
+2F33 ; [.CE11.0020.0004.2F33] # KANGXI RADICAL SHORT THREAD
+3245 ; [.CEE2.0020.0006.3245] # CIRCLED IDEOGRAPH KINDERGARTEN
+2F34 ; [.9F8F.0020.0004.2F34] # KANGXI RADICAL DOTTED CLIFF
+2F35 ; [.D04E.0020.0004.2F35] # KANGXI RADICAL LONG STRIDE
+2F36 ; [.9FBB.0020.0004.2F36] # KANGXI RADICAL TWO HANDS
+2F37 ; [.CC86.0020.0004.2F37] # KANGXI RADICAL SHOOT
+2F38 ; [.9F9F.0020.0004.2F38] # KANGXI RADICAL BOW
+2F39 ; [.A763.0020.0004.2F39] # KANGXI RADICAL SNOUT
+2F3A ; [.C0C6.0020.0004.2F3A] # KANGXI RADICAL BRISTLE
+2F3B ; [.BBF9.0020.0004.2F3B] # KANGXI RADICAL STEP
+1F21D ; [.A30D.0020.001C.1F21D] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C
+1F250 ; [.8C4D.0020.0006.1F250] # CIRCLED IDEOGRAPH ADVANTAGE
+2F3C ; [.B4AB.0020.0004.2F3C] # KANGXI RADICAL HEART
+2F3D ; [.9C6C.0020.0004.2F3D] # KANGXI RADICAL HALBERD
+2F3E ; [.A40C.0020.0004.2F3E] # KANGXI RADICAL DOOR
+2F3F ; [.C0AE.0020.0004.2F3F] # KANGXI RADICAL HAND
+1F210 ; [.C0AE.0020.001C.1F210] # SQUARED CJK UNIFIED IDEOGRAPH-624B
+1F231 ; [.8C38.0020.001C.1F231] # SQUARED CJK UNIFIED IDEOGRAPH-6253
+1F227 ; [.90D6.0020.001C.1F227] # SQUARED CJK UNIFIED IDEOGRAPH-6295
+1F22F ; [.B753.0020.001C.1F22F] # SQUARED CJK UNIFIED IDEOGRAPH-6307
+1F228 ; [.838E.0020.001C.1F228] # SQUARED CJK UNIFIED IDEOGRAPH-6355
+2F40 ; [.B6EB.0020.0004.2F40] # KANGXI RADICAL BRANCH
+2F41 ; [.85EC.0020.0004.2F41] # KANGXI RADICAL RAP
+2F42 ; [.D38D.0020.0004.2F42] # KANGXI RADICAL SCRIPT
+3246 ; [.D38D.0020.0006.3246] # CIRCLED IDEOGRAPH SCHOOL
+2F43 ; [.8CCF.0020.0004.2F43] # KANGXI RADICAL DIPPER
+1F21B ; [.9905.0020.001C.1F21B] # SQUARED CJK UNIFIED IDEOGRAPH-6599
+2F44 ; [.AA6F.0020.0004.2F44] # KANGXI RADICAL AXE
+1F21F ; [.B4BC.0020.001C.1F21F] # SQUARED CJK UNIFIED IDEOGRAPH-65B0
+2F45 ; [.8AA0.0020.0004.2F45] # KANGXI RADICAL SQUARE
+2F46 ; [.D18A.0020.0004.2F46] # KANGXI RADICAL NOT
+2F47 ; [.C2A4.0020.0004.2F47] # KANGXI RADICAL SUN
+3290 ; [.C2A4.0020.0006.3290] # CIRCLED IDEOGRAPH SUN
+337E ; [.892B.0020.001C.337E][.B773.0020.001C.337E] # SQUARE ERA NAME MEIZI
+1F219 ; [.D15D.0020.001C.1F219] # SQUARED CJK UNIFIED IDEOGRAPH-6620
+337C ; [.B884.0020.001C.337C][.A237.0020.001C.337C] # SQUARE ERA NAME SYOUWA
+2F48 ; [.D533.0020.0004.2F48] # KANGXI RADICAL SAY
+2F49 ; [.D53C.0020.0004.2F49] # KANGXI RADICAL MOON
+328A ; [.D53C.0020.0006.328A] # CIRCLED IDEOGRAPH MOON
+1F237 ; [.D53C.0020.001C.1F237] # SQUARED CJK UNIFIED IDEOGRAPH-6708
+3292 ; [.CEC7.0020.0006.3292] # CIRCLED IDEOGRAPH HAVE
+1F236 ; [.CEC7.0020.001C.1F236] # SQUARED CJK UNIFIED IDEOGRAPH-6709
+2F4A ; [.895F.0020.0004.2F4A] # KANGXI RADICAL TREE
+328D ; [.895F.0020.0006.328D] # CIRCLED IDEOGRAPH WOOD
+3291 ; [.BA36.0020.0006.3291] # CIRCLED IDEOGRAPH STOCK
+337F ; [.BA36.0020.001C.337F][.BFBF.0020.001C.337F][.A51A.0020.001C.337F][.C05E.0020.001C.337F] # SQUARE CORPORATION
+2F4B ; [.AF68.0020.0004.2F4B] # KANGXI RADICAL LACK
+2F4C ; [.B741.0020.0004.2F4C] # KANGXI RADICAL STOP
+32A3 ; [.BA1E.0020.0006.32A3] # CIRCLED IDEOGRAPH CORRECT
+2F4D ; [.8C53.0020.0004.2F4D] # KANGXI RADICAL DEATH
+2F4E ; [.C1D9.0020.0004.2F4E] # KANGXI RADICAL WEAPON
+2F4F ; [.D18B.0020.0004.2F4F] # KANGXI RADICAL DO NOT
+2E9F ; [.894D.0020.0004.2E9F] # CJK RADICAL MOTHER
+2F50 ; [.81FD.0020.0004.2F50] # KANGXI RADICAL COMPARE
+2F51 ; [.8727.0020.0004.2F51] # KANGXI RADICAL FUR
+2F52 ; [.BFB6.0020.0004.2F52] # KANGXI RADICAL CLAN
+2F53 ; [.ADDA.0020.0004.2F53] # KANGXI RADICAL STEAM
+2F54 ; [.C26E.0020.0004.2F54] # KANGXI RADICAL WATER
+328C ; [.C26E.0020.0006.328C] # CIRCLED IDEOGRAPH WATER
+329F ; [.BA84.0020.0006.329F] # CIRCLED IDEOGRAPH ATTENTION
+1F235 ; [.8793.0020.001C.1F235] # SQUARED CJK UNIFIED IDEOGRAPH-6E80
+1F226 ; [.CF75.0020.001C.1F226] # SQUARED CJK UNIFIED IDEOGRAPH-6F14
+2F55 ; [.A48C.0020.0004.2F55] # KANGXI RADICAL FIRE
+328B ; [.A48C.0020.0006.328B] # CIRCLED IDEOGRAPH FIRE
+1F21A ; [.D19A.0020.001C.1F21A] # SQUARED CJK UNIFIED IDEOGRAPH-7121
+2F56 ; [.B88D.0020.0004.2F56] # KANGXI RADICAL CLAW
+2F57 ; [.8BC3.0020.0004.2F57] # KANGXI RADICAL FATHER
+2F58 ; [.CE21.0020.0004.2F58] # KANGXI RADICAL DOUBLE X
+2F59 ; [.8453.0020.0004.2F59] # KANGXI RADICAL HALF TREE TRUNK
+2F5A ; [.8593.0020.0004.2F5A] # KANGXI RADICAL SLICE
+2F5B ; [.CD78.0020.0004.2F5B] # KANGXI RADICAL FANG
+2F5C ; [.9526.0020.0004.2F5C] # KANGXI RADICAL COW
+3295 ; [.9060.0020.0006.3295] # CIRCLED IDEOGRAPH SPECIAL
+2F5D ; [.B123.0020.0004.2F5D] # KANGXI RADICAL DOG
+2F5E ; [.B63A.0020.0004.2F5E] # KANGXI RADICAL PROFOUND
+2F5F ; [.D4A7.0020.0004.2F5F] # KANGXI RADICAL JADE
+2F60 ; [.9E4D.0020.0004.2F60] # KANGXI RADICAL MELON
+2F61 ; [.D216.0020.0004.2F61] # KANGXI RADICAL TILE
+2F62 ; [.9D4E.0020.0004.2F62] # KANGXI RADICAL SWEET
+2F63 ; [.C1A6.0020.0004.2F63] # KANGXI RADICAL LIFE
+1F222 ; [.C1A6.0020.001C.1F222] # SQUARED CJK UNIFIED IDEOGRAPH-751F
+2F64 ; [.D68B.0020.0004.2F64] # KANGXI RADICAL USE
+2F65 ; [.9245.0020.0004.2F65] # KANGXI RADICAL FIELD
+3199 ; [.A814.0020.0014.3199] # IDEOGRAPHIC ANNOTATION FIRST MARK
+1F238 ; [.C125.0020.001C.1F238] # SQUARED CJK UNIFIED IDEOGRAPH-7533
+329A ; [.9459.0020.0006.329A] # CIRCLED IDEOGRAPH MALE
+2F66 ; [.852E.0020.0004.2F66] # KANGXI RADICAL BOLT OF CLOTH
+2F67 ; [.93F9.0020.0004.2F67] # KANGXI RADICAL SICKNESS
+2F68 ; [.8046.0020.0004.2F68] # KANGXI RADICAL DOTTED TENT
+2F69 ; [.80BD.0020.0004.2F69] # KANGXI RADICAL WHITE
+2F6A ; [.8504.0020.0004.2F6A] # KANGXI RADICAL SKIN
+2F6B ; [.890B.0020.0004.2F6B] # KANGXI RADICAL DISH
+32AC ; [.A9B3.0020.0006.32AC] # CIRCLED IDEOGRAPH SUPERVISE
+2F6C ; [.8962.0020.0004.2F6C] # KANGXI RADICAL EYE
+2F6D ; [.8728.0020.0004.2F6D] # KANGXI RADICAL SPEAR
+2F6E ; [.BFA9.0020.0004.2F6E] # KANGXI RADICAL ARROW
+2F6F ; [.BF87.0020.0004.2F6F] # KANGXI RADICAL STONE
+2F70 ; [.BFBD.0020.0004.2F70] # KANGXI RADICAL SPIRIT
+3293 ; [.C05E.0020.0006.3293] # CIRCLED IDEOGRAPH SOCIETY
+3297 ; [.BA90.0020.0006.3297] # CIRCLED IDEOGRAPH CONGRATULATION
+1F232 ; [.AAB2.0020.001C.1F232] # SQUARED CJK UNIFIED IDEOGRAPH-7981
+2F71 ; [.C2BD.0020.0004.2F71] # KANGXI RADICAL TRACK
+2F72 ; [.A231.0020.0004.2F72] # KANGXI RADICAL GRAIN
+3299 ; [.8871.0020.0006.3299] # CIRCLED IDEOGRAPH SECRET
+2F73 ; [.B5ED.0020.0004.2F73] # KANGXI RADICAL CAVE
+1F233 ; [.A211.0020.001C.1F233] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A
+2F74 ; [.9808.0020.0004.2F74] # KANGXI RADICAL STAND
+2F75 ; [.BA53.0020.0004.2F75] # KANGXI RADICAL BAMBOO
+3247 ; [.BA0D.0020.0006.3247] # CIRCLED IDEOGRAPH KOTO
+2F76 ; [.8856.0020.0004.2F76] # KANGXI RADICAL RICE
+2F77 ; [.8868.0020.0004.2F77] # KANGXI RADICAL SILK
+1F221 ; [.BB7F.0020.001C.1F221] # SQUARED CJK UNIFIED IDEOGRAPH-7D42
+2F78 ; [.89F6.0020.0004.2F78] # KANGXI RADICAL JAR
+2F79 ; [.D3D1.0020.0004.2F79] # KANGXI RADICAL NET
+2F7A ; [.D08F.0020.0004.2F7A] # KANGXI RADICAL SHEEP
+2F7B ; [.D47D.0020.0004.2F7B] # KANGXI RADICAL FEATHER
+2F7C ; [.96B7.0020.0004.2F7C] # KANGXI RADICAL OLD
+2F7D ; [.CBA4.0020.0004.2F7D] # KANGXI RADICAL AND
+2F7E ; [.966B.0020.0004.2F7E] # KANGXI RADICAL PLOW
+2F7F ; [.CBBF.0020.0004.2F7F] # KANGXI RADICAL EAR
+2F80 ; [.D4AA.0020.0004.2F80] # KANGXI RADICAL BRUSH
+2F81 ; [.C2D4.0020.0004.2F81] # KANGXI RADICAL MEAT
+2F82 ; [.BD5B.0020.0004.2F82] # KANGXI RADICAL MINISTER
+2F83 ; [.C457.0020.0004.2F83] # KANGXI RADICAL SELF
+2F84 ; [.B766.0020.0004.2F84] # KANGXI RADICAL ARRIVE
+2F85 ; [.A96D.0020.0004.2F85] # KANGXI RADICAL MORTAR
+2F86 ; [.C053.0020.0004.2F86] # KANGXI RADICAL TONGUE
+2F87 ; [.BEE4.0020.0004.2F87] # KANGXI RADICAL OPPOSE
+2F88 ; [.B8B0.0020.0004.2F88] # KANGXI RADICAL BOAT
+2F89 ; [.9D94.0020.0004.2F89] # KANGXI RADICAL STOPPING
+2F8A ; [.C870.0020.0004.2F8A] # KANGXI RADICAL COLOR
+2F8B ; [.C6C2.0020.0004.2F8B] # KANGXI RADICAL GRASS
+2F8C ; [.A3B4.0020.0004.2F8C] # KANGXI RADICAL TIGER
+2F8D ; [.BF4A.0020.0004.2F8D] # KANGXI RADICAL INSECT
+2F8E ; [.B604.0020.0004.2F8E] # KANGXI RADICAL BLOOD
+2F8F ; [.B543.0020.0004.2F8F] # KANGXI RADICAL WALK ENCLOSURE
+2F90 ; [.CBE0.0020.0004.2F90] # KANGXI RADICAL CLOTHES
+2F91 ; [.CD9C.0020.0004.2F91] # KANGXI RADICAL WEST
+2F92 ; [.AA1C.0020.0004.2F92] # KANGXI RADICAL SEE
+2F93 ; [.A8EB.0020.0004.2F93] # KANGXI RADICAL HORN
+1F216 ; [.A898.0020.001C.1F216] # SQUARED CJK UNIFIED IDEOGRAPH-89E3
+2F94 ; [.CF21.0020.0004.2F94] # KANGXI RADICAL SPEECH
+2F95 ; [.9E07.0020.0004.2F95] # KANGXI RADICAL VALLEY
+2F96 ; [.8CD0.0020.0004.2F96] # KANGXI RADICAL BEAN
+2F97 ; [.BFAB.0020.0004.2F97] # KANGXI RADICAL PIG
+2F98 ; [.B76C.0020.0004.2F98] # KANGXI RADICAL BADGER
+2F99 ; [.80EB.0020.0004.2F99] # KANGXI RADICAL SHELL
+3296 ; [.C69F.0020.0006.3296] # CIRCLED IDEOGRAPH FINANCIAL
+1F223 ; [.8A4B.0020.001C.1F223] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9
+32AE ; [.C421.0020.0006.32AE] # CIRCLED IDEOGRAPH RESOURCE
+2F9A ; [.BBFE.0020.0004.2F9A] # KANGXI RADICAL RED
+2F9B ; [.C50C.0020.0004.2F9B] # KANGXI RADICAL RUN
+1F230 ; [.C50C.0020.001C.1F230] # SQUARED CJK UNIFIED IDEOGRAPH-8D70
+2F9C ; [.C571.0020.0004.2F9C] # KANGXI RADICAL FOOT
+2F9D ; [.C129.0020.0004.2F9D] # KANGXI RADICAL BODY
+2F9E ; [.BC58.0020.0004.2F9E] # KANGXI RADICAL CART
+2F9F ; [.B4AE.0020.0004.2F9F] # KANGXI RADICAL BITTER
+2FA0 ; [.BD5F.0020.0004.2FA0] # KANGXI RADICAL MORNING
+2FA1 ; [.BEA0.0020.0004.2FA1] # KANGXI RADICAL WALK
+1F22B ; [.CEBC.0020.001C.1F22B] # SQUARED CJK UNIFIED IDEOGRAPH-904A
+329C ; [.BFFC.0020.0006.329C] # CIRCLED IDEOGRAPH SUITABLE
+2FA2 ; [.CC9C.0020.0004.2FA2] # KANGXI RADICAL CITY
+2FA3 ; [.CECA.0020.0004.2FA3] # KANGXI RADICAL WINE
+2FA4 ; [.8308.0020.0004.2FA4] # KANGXI RADICAL DISTINGUISH
+2FA5 ; [.97EB.0020.0004.2FA5] # KANGXI RADICAL VILLAGE
+2FA6 ; [.AA72.0020.0004.2FA6] # KANGXI RADICAL GOLD
+328E ; [.AA72.0020.0006.328E] # CIRCLED IDEOGRAPH METAL
+2FA7 ; [.B9D1.0020.0004.2FA7] # KANGXI RADICAL LONG
+2FA8 ; [.87B7.0020.0004.2FA8] # KANGXI RADICAL GATE
+2FA9 ; [.8BCB.0020.0004.2FA9] # KANGXI RADICAL MOUND
+2FAA ; [.9819.0020.0004.2FAA] # KANGXI RADICAL SLAVE
+2FAB ; [.BAFD.0020.0004.2FAB] # KANGXI RADICAL SHORT TAILED BIRD
+2FAC ; [.D47F.0020.0004.2FAC] # KANGXI RADICAL RAIN
+2FAD ; [.B01B.0020.0004.2FAD] # KANGXI RADICAL BLUE
+2FAE ; [.89A9.0020.0004.2FAE] # KANGXI RADICAL WRONG
+2FAF ; [.88EB.0020.0004.2FAF] # KANGXI RADICAL FACE
+2FB0 ; [.9C8F.0020.0004.2FB0] # KANGXI RADICAL LEATHER
+2FB1 ; [.D288.0020.0004.2FB1] # KANGXI RADICAL TANNED LEATHER
+2FB2 ; [.A965.0020.0004.2FB2] # KANGXI RADICAL LEEK
+2FB3 ; [.CFF8.0020.0004.2FB3] # KANGXI RADICAL SOUND
+2FB4 ; [.CDDC.0020.0004.2FB4] # KANGXI RADICAL LEAF
+32A0 ; [.B520.0020.0006.32A0] # CIRCLED IDEOGRAPH ITEM
+2FB5 ; [.8AD5.0020.0004.2FB5] # KANGXI RADICAL WIND
+2FB6 ; [.89AA.0020.0004.2FB6] # KANGXI RADICAL FLY
+2FB7 ; [.BF93.0020.0004.2FB7] # KANGXI RADICAL EAT
+2FB8 ; [.C0B1.0020.0004.2FB8] # KANGXI RADICAL HEAD
+2FB9 ; [.B4E1.0020.0004.2FB9] # KANGXI RADICAL FRAGRANT
+2FBA ; [.8637.0020.0004.2FBA] # KANGXI RADICAL HORSE
+2FBB ; [.9E10.0020.0004.2FBB] # KANGXI RADICAL BONE
+2FBC ; [.9CEC.0020.0004.2FBC] # KANGXI RADICAL TALL
+2FBD ; [.82AD.0020.0004.2FBD] # KANGXI RADICAL HAIR
+2FBE ; [.8CD4.0020.0004.2FBE] # KANGXI RADICAL FIGHT
+2FBF ; [.BDCE.0020.0004.2FBF] # KANGXI RADICAL SACRIFICIAL WINE
+2FC0 ; [.9C94.0020.0004.2FC0] # KANGXI RADICAL CAULDRON
+2FC1 ; [.9EF1.0020.0004.2FC1] # KANGXI RADICAL GHOST
+2FC2 ; [.D436.0020.0004.2FC2] # KANGXI RADICAL FISH
+2FC3 ; [.9519.0020.0004.2FC3] # KANGXI RADICAL BIRD
+2FC4 ; [.9AD5.0020.0004.2FC4] # KANGXI RADICAL SALT
+2FC5 ; [.9AFD.0020.0004.2FC5] # KANGXI RADICAL DEER
+2FC6 ; [.86CC.0020.0004.2FC6] # KANGXI RADICAL WHEAT
+2FC7 ; [.862D.0020.0004.2FC7] # KANGXI RADICAL HEMP
+2FC8 ; [.A607.0020.0004.2FC8] # KANGXI RADICAL YELLOW
+2FC9 ; [.C20C.0020.0004.2FC9] # KANGXI RADICAL MILLET
+2FCA ; [.A2AD.0020.0004.2FCA] # KANGXI RADICAL BLACK
+2FCB ; [.B762.0020.0004.2FCB] # KANGXI RADICAL EMBROIDERY
+2FCC ; [.88E4.0020.0004.2FCC] # KANGXI RADICAL FROG
+2FCD ; [.8ED2.0020.0004.2FCD] # KANGXI RADICAL TRIPOD
+2FCE ; [.9E1D.0020.0004.2FCE] # KANGXI RADICAL DRUM
+2FCF ; [.C210.0020.0004.2FCF] # KANGXI RADICAL RAT
+2FD0 ; [.81FB.0020.0004.2FD0] # KANGXI RADICAL NOSE
+2FD1 ; [.ADA1.0020.0004.2FD1] # KANGXI RADICAL EVEN
+2FD2 ; [.BBF7.0020.0004.2FD2] # KANGXI RADICAL TOOTH
+2FD3 ; [.9BE4.0020.0004.2FD3] # KANGXI RADICAL DRAGON
+2FD4 ; [.9ED7.0020.0004.2FD4] # KANGXI RADICAL TURTLE
+2EF3 ; [.9EB8.0020.0004.2EF3] # CJK RADICAL C-SIMPLIFIED TURTLE
+2FD5 ; [.D560.0020.0004.2FD5] # KANGXI RADICAL FLUTE
+F967 ; [.8392.0020.0002.4E0D] # CJK COMPATIBILITY IDEOGRAPH-F967
+FA70 ; [.836F.0020.0002.4E26] # CJK COMPATIBILITY IDEOGRAPH-FA70
+F905 ; [.BEEB.0020.0002.4E32] # CJK COMPATIBILITY IDEOGRAPH-F905
+2F801 ; [.D334.0020.0002.4E38] # CJK COMPATIBILITY IDEOGRAPH-2F801
+F95E ; [.8CEB.0020.0002.4E39] # CJK COMPATIBILITY IDEOGRAPH-F95E
+2F800 ; [.980B.0020.0002.4E3D] # CJK COMPATIBILITY IDEOGRAPH-2F800
+2F802 ; [.CC07.0020.0002.4E41] # CJK COMPATIBILITY IDEOGRAPH-2F802
+F91B ; [.9BA8.0020.0002.4E82] # CJK COMPATIBILITY IDEOGRAPH-F91B
+F9BA ; [.9615.0020.0002.4E86] # CJK COMPATIBILITY IDEOGRAPH-F9BA
+F977 ; [.9A32.0020.0002.4EAE] # CJK COMPATIBILITY IDEOGRAPH-F977
+F9FD ; [.C151.0020.0002.4EC0] # CJK COMPATIBILITY IDEOGRAPH-F9FD
+2F819 ; [.834F.0020.0002.4ECC] # CJK COMPATIBILITY IDEOGRAPH-2F819
+F9A8 ; [.9A9B.0020.0002.4EE4] # CJK COMPATIBILITY IDEOGRAPH-F9A8
+2F804 ; [.94AF.0020.0002.4F60] # CJK COMPATIBILITY IDEOGRAPH-2F804
+FA73 ; [.B546.0020.0002.4F80] # CJK COMPATIBILITY IDEOGRAPH-FA73
+F92D ; [.9619.0020.0002.4F86] # CJK COMPATIBILITY IDEOGRAPH-F92D
+F9B5 ; [.9811.0020.0002.4F8B] # CJK COMPATIBILITY IDEOGRAPH-F9B5
+FA30 ; [.D1B4.0020.0002.4FAE] # CJK COMPATIBILITY IDEOGRAPH-FA30
+2F805 ; [.D1B4.0020.0002.4FAE] # CJK COMPATIBILITY IDEOGRAPH-2F805
+2F806 ; [.935A.0020.0002.4FBB] # CJK COMPATIBILITY IDEOGRAPH-2F806
+F965 ; [.830C.0020.0002.4FBF] # CJK COMPATIBILITY IDEOGRAPH-F965
+2F807 ; [.8373.0020.0002.5002] # CJK COMPATIBILITY IDEOGRAPH-2F807
+F9D4 ; [.9BB2.0020.0002.502B] # CJK COMPATIBILITY IDEOGRAPH-F9D4
+2F808 ; [.C477.0020.0002.507A] # CJK COMPATIBILITY IDEOGRAPH-2F808
+2F809 ; [.80FF.0020.0002.5099] # CJK COMPATIBILITY IDEOGRAPH-2F809
+2F80B ; [.B522.0020.0002.50CF] # CJK COMPATIBILITY IDEOGRAPH-2F80B
+F9BB ; [.98D4.0020.0002.50DA] # CJK COMPATIBILITY IDEOGRAPH-F9BB
+FA31 ; [.C90E.0020.0002.50E7] # CJK COMPATIBILITY IDEOGRAPH-FA31
+2F80A ; [.C90E.0020.0002.50E7] # CJK COMPATIBILITY IDEOGRAPH-2F80A
+FA0C ; [.D1CB.0020.0002.5140] # CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA74 ; [.BF37.0020.0002.5145] # CJK COMPATIBILITY IDEOGRAPH-FA74
+FA32 ; [.88D2.0020.0002.514D] # CJK COMPATIBILITY IDEOGRAPH-FA32
+2F80E ; [.88D2.0020.0002.514D] # CJK COMPATIBILITY IDEOGRAPH-2F80E
+2F80F ; [.92F0.0020.0002.5154] # CJK COMPATIBILITY IDEOGRAPH-2F80F
+2F810 ; [.A627.0020.0002.5164] # CJK COMPATIBILITY IDEOGRAPH-2F810
+2F814 ; [.9422.0020.0002.5167] # CJK COMPATIBILITY IDEOGRAPH-2F814
+FA72 ; [.B0F4.0020.0002.5168] # CJK COMPATIBILITY IDEOGRAPH-FA72
+F978 ; [.9A28.0020.0002.5169] # CJK COMPATIBILITY IDEOGRAPH-F978
+F9D1 ; [.9953.0020.0002.516D] # CJK COMPATIBILITY IDEOGRAPH-F9D1
+2F811 ; [.ABF3.0020.0002.5177] # CJK COMPATIBILITY IDEOGRAPH-2F811
+FA75 ; [.A7A9.0020.0002.5180] # CJK COMPATIBILITY IDEOGRAPH-FA75
+2F815 ; [.C4C2.0020.0002.518D] # CJK COMPATIBILITY IDEOGRAPH-2F815
+2F8D2 ; [.874F.0020.0002.5192] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
+2F8D3 ; [.88DA.0020.0002.5195] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
+2F817 ; [.C3F9.0020.0002.5197] # CJK COMPATIBILITY IDEOGRAPH-2F817
+2F818 ; [.D571.0020.0002.51A4] # CJK COMPATIBILITY IDEOGRAPH-2F818
+2F81A ; [.8FE3.0020.0002.51AC] # CJK COMPATIBILITY IDEOGRAPH-2F81A
+FA71 ; [.A1F5.0020.0002.51B5] # CJK COMPATIBILITY IDEOGRAPH-FA71
+2F81B ; [.A1F5.0020.0002.51B5] # CJK COMPATIBILITY IDEOGRAPH-2F81B
+F92E ; [.9793.0020.0002.51B7] # CJK COMPATIBILITY IDEOGRAPH-F92E
+F979 ; [.9A18.0020.0002.51C9] # CJK COMPATIBILITY IDEOGRAPH-F979
+F955 ; [.9A51.0020.0002.51CC] # CJK COMPATIBILITY IDEOGRAPH-F955
+F954 ; [.99F8.0020.0002.51DC] # CJK COMPATIBILITY IDEOGRAPH-F954
+FA15 ; [.B1BC.0020.0002.51DE] # CJK COMPATIBILITY IDEOGRAPH-FA15
+2F81D ; [.AF59.0020.0002.51F5] # CJK COMPATIBILITY IDEOGRAPH-2F81D
+2F81E ; [.C305.0020.0002.5203] # CJK COMPATIBILITY IDEOGRAPH-2F81E
+FA00 ; [.AE24.0020.0002.5207] # CJK COMPATIBILITY IDEOGRAPH-FA00
+2F850 ; [.AE24.0020.0002.5207] # CJK COMPATIBILITY IDEOGRAPH-2F850
+F99C ; [.98A1.0020.0002.5217] # CJK COMPATIBILITY IDEOGRAPH-F99C
+F9DD ; [.980C.0020.0002.5229] # CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9FF ; [.C66A.0020.0002.523A] # CJK COMPATIBILITY IDEOGRAPH-F9FF
+2F820 ; [.A014.0020.0002.523B] # CJK COMPATIBILITY IDEOGRAPH-2F820
+2F821 ; [.9B64.0020.0002.5246] # CJK COMPATIBILITY IDEOGRAPH-2F821
+2F822 ; [.9C7B.0020.0002.5272] # CJK COMPATIBILITY IDEOGRAPH-2F822
+2F823 ; [.BD2E.0020.0002.5277] # CJK COMPATIBILITY IDEOGRAPH-2F823
+F9C7 ; [.9926.0020.0002.5289] # CJK COMPATIBILITY IDEOGRAPH-F9C7
+F98A ; [.9804.0020.0002.529B] # CJK COMPATIBILITY IDEOGRAPH-F98A
+F99D ; [.98A2.0020.0002.52A3] # CJK COMPATIBILITY IDEOGRAPH-F99D
+2F992 ; [.969D.0020.0002.52B3] # CJK COMPATIBILITY IDEOGRAPH-2F992
+FA76 ; [.D671.0020.0002.52C7] # CJK COMPATIBILITY IDEOGRAPH-FA76
+2F825 ; [.D671.0020.0002.52C7] # CJK COMPATIBILITY IDEOGRAPH-2F825
+FA33 ; [.88D5.0020.0002.52C9] # CJK COMPATIBILITY IDEOGRAPH-FA33
+2F826 ; [.88D5.0020.0002.52C9] # CJK COMPATIBILITY IDEOGRAPH-2F826
+F952 ; [.964C.0020.0002.52D2] # CJK COMPATIBILITY IDEOGRAPH-F952
+F92F ; [.96A5.0020.0002.52DE] # CJK COMPATIBILITY IDEOGRAPH-F92F
+FA34 ; [.AFAD.0020.0002.52E4] # CJK COMPATIBILITY IDEOGRAPH-FA34
+2F827 ; [.AFAD.0020.0002.52E4] # CJK COMPATIBILITY IDEOGRAPH-2F827
+F97F ; [.985C.0020.0002.52F5] # CJK COMPATIBILITY IDEOGRAPH-F97F
+FA77 ; [.C096.0020.0002.52FA] # CJK COMPATIBILITY IDEOGRAPH-FA77
+2F828 ; [.C096.0020.0002.52FA] # CJK COMPATIBILITY IDEOGRAPH-2F828
+2F829 ; [.811B.0020.0002.5305] # CJK COMPATIBILITY IDEOGRAPH-2F829
+2F82A ; [.C7B7.0020.0002.5306] # CJK COMPATIBILITY IDEOGRAPH-2F82A
+F963 ; [.80E5.0020.0002.5317] # CJK COMPATIBILITY IDEOGRAPH-F963
+2F82B ; [.80E5.0020.0002.5317] # CJK COMPATIBILITY IDEOGRAPH-2F82B
+F9EB ; [.94CA.0020.0002.533F] # CJK COMPATIBILITY IDEOGRAPH-F9EB
+2F82C ; [.A518.0020.0002.5349] # CJK COMPATIBILITY IDEOGRAPH-2F82C
+FA35 ; [.80D7.0020.0002.5351] # CJK COMPATIBILITY IDEOGRAPH-FA35
+2F82D ; [.80D7.0020.0002.5351] # CJK COMPATIBILITY IDEOGRAPH-2F82D
+2F82E ; [.807E.0020.0002.535A] # CJK COMPATIBILITY IDEOGRAPH-2F82E
+2F82F ; [.A6FF.0020.0002.5373] # CJK COMPATIBILITY IDEOGRAPH-2F82F
+F91C ; [.9BA5.0020.0002.5375] # CJK COMPATIBILITY IDEOGRAPH-F91C
+2F830 ; [.A70A.0020.0002.537D] # CJK COMPATIBILITY IDEOGRAPH-2F830
+2F831 ; [.B020.0020.0002.537F] # CJK COMPATIBILITY IDEOGRAPH-2F831
+2F832 ; [.B020.0020.0002.537F] # CJK COMPATIBILITY IDEOGRAPH-2F832
+2F833 ; [.B020.0020.0002.537F] # CJK COMPATIBILITY IDEOGRAPH-2F833
+F96B ; [.C6D2.0020.0002.53C3] # CJK COMPATIBILITY IDEOGRAPH-F96B
+2F836 ; [.A6FB.0020.0002.53CA] # CJK COMPATIBILITY IDEOGRAPH-2F836
+2F837 ; [.C8D2.0020.0002.53DF] # CJK COMPATIBILITY IDEOGRAPH-2F837
+F906 ; [.ABEE.0020.0002.53E5] # CJK COMPATIBILITY IDEOGRAPH-F906
+2F839 ; [.A922.0020.0002.53EB] # CJK COMPATIBILITY IDEOGRAPH-2F839
+2F83A ; [.BBFA.0020.0002.53F1] # CJK COMPATIBILITY IDEOGRAPH-2F83A
+2F83B ; [.CE13.0020.0002.5406] # CJK COMPATIBILITY IDEOGRAPH-2F83B
+F9DE ; [.9809.0020.0002.540F] # CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9ED ; [.9A03.0020.0002.541D] # CJK COMPATIBILITY IDEOGRAPH-F9ED
+2F83D ; [.B16A.0020.0002.5438] # CJK COMPATIBILITY IDEOGRAPH-2F83D
+F980 ; [.9C24.0020.0002.5442] # CJK COMPATIBILITY IDEOGRAPH-F980
+2F83E ; [.BDFE.0020.0002.5448] # CJK COMPATIBILITY IDEOGRAPH-2F83E
+2F83F ; [.B8B3.0020.0002.5468] # CJK COMPATIBILITY IDEOGRAPH-2F83F
+2F83C ; [.B473.0020.0002.549E] # CJK COMPATIBILITY IDEOGRAPH-2F83C
+2F840 ; [.CA56.0020.0002.54A2] # CJK COMPATIBILITY IDEOGRAPH-2F840
+F99E ; [.CF9A.0020.0002.54BD] # CJK COMPATIBILITY IDEOGRAPH-F99E
+2F841 ; [.8891.0020.0002.54F6] # CJK COMPATIBILITY IDEOGRAPH-2F841
+2F842 ; [.9144.0020.0002.5510] # CJK COMPATIBILITY IDEOGRAPH-2F842
+2F843 ; [.ADCE.0020.0002.5553] # CJK COMPATIBILITY IDEOGRAPH-2F843
+FA79 ; [.90B6.0020.0002.5555] # CJK COMPATIBILITY IDEOGRAPH-FA79
+2F844 ; [.B415.0020.0002.5563] # CJK COMPATIBILITY IDEOGRAPH-2F844
+2F845 ; [.C100.0020.0002.5584] # CJK COMPATIBILITY IDEOGRAPH-2F845
+2F846 ; [.C100.0020.0002.5584] # CJK COMPATIBILITY IDEOGRAPH-2F846
+F90B ; [.95E6.0020.0002.5587] # CJK COMPATIBILITY IDEOGRAPH-F90B
+FA7A ; [.A52B.0020.0002.5599] # CJK COMPATIBILITY IDEOGRAPH-FA7A
+2F847 ; [.A52B.0020.0002.5599] # CJK COMPATIBILITY IDEOGRAPH-2F847
+FA36 ; [.A22D.0020.0002.559D] # CJK COMPATIBILITY IDEOGRAPH-FA36
+FA78 ; [.A22D.0020.0002.559D] # CJK COMPATIBILITY IDEOGRAPH-FA78
+2F848 ; [.BBB6.0020.0002.55AB] # CJK COMPATIBILITY IDEOGRAPH-2F848
+2F849 ; [.B7F6.0020.0002.55B3] # CJK COMPATIBILITY IDEOGRAPH-2F849
+FA0D ; [.A422.0020.0002.55C0] # CJK COMPATIBILITY IDEOGRAPH-FA0D
+2F84A ; [.CE34.0020.0002.55C2] # CJK COMPATIBILITY IDEOGRAPH-2F84A
+FA7B ; [.D21D.0020.0002.55E2] # CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA37 ; [.912C.0020.0002.5606] # CJK COMPATIBILITY IDEOGRAPH-FA37
+2F84C ; [.912C.0020.0002.5606] # CJK COMPATIBILITY IDEOGRAPH-2F84C
+2F84E ; [.A2BD.0020.0002.5651] # CJK COMPATIBILITY IDEOGRAPH-2F84E
+FA38 ; [.ADFD.0020.0002.5668] # CJK COMPATIBILITY IDEOGRAPH-FA38
+2F84F ; [.847B.0020.0002.5674] # CJK COMPATIBILITY IDEOGRAPH-2F84F
+F9A9 ; [.9A44.0020.0002.56F9] # CJK COMPATIBILITY IDEOGRAPH-F9A9
+2F84B ; [.92DB.0020.0002.5716] # CJK COMPATIBILITY IDEOGRAPH-2F84B
+2F84D ; [.92DC.0020.0002.5717] # CJK COMPATIBILITY IDEOGRAPH-2F84D
+2F855 ; [.B548.0020.0002.578B] # CJK COMPATIBILITY IDEOGRAPH-2F855
+2F852 ; [.BE03.0020.0002.57CE] # CJK COMPATIBILITY IDEOGRAPH-2F852
+2F853 ; [.B720.0020.0002.57F4] # CJK COMPATIBILITY IDEOGRAPH-2F853
+2F854 ; [.92F2.0020.0002.580D] # CJK COMPATIBILITY IDEOGRAPH-2F854
+2F857 ; [.8151.0020.0002.5831] # CJK COMPATIBILITY IDEOGRAPH-2F857
+2F856 ; [.C642.0020.0002.5832] # CJK COMPATIBILITY IDEOGRAPH-2F856
+FA39 ; [.85EA.0020.0002.5840] # CJK COMPATIBILITY IDEOGRAPH-FA39
+FA10 ; [.BB92.0020.0002.585A] # CJK COMPATIBILITY IDEOGRAPH-FA10
+FA7C ; [.BB92.0020.0002.585A] # CJK COMPATIBILITY IDEOGRAPH-FA7C
+F96C ; [.C892.0020.0002.585E] # CJK COMPATIBILITY IDEOGRAPH-F96C
+FA3A ; [.86A0.0020.0002.58A8] # CJK COMPATIBILITY IDEOGRAPH-FA3A
+2F858 ; [.8E0D.0020.0002.58AC] # CJK COMPATIBILITY IDEOGRAPH-2F858
+FA7D ; [.8A7A.0020.0002.58B3] # CJK COMPATIBILITY IDEOGRAPH-FA7D
+F94A ; [.9679.0020.0002.58D8] # CJK COMPATIBILITY IDEOGRAPH-F94A
+F942 ; [.9C0B.0020.0002.58DF] # CJK COMPATIBILITY IDEOGRAPH-F942
+2F851 ; [.BB63.0020.0002.58EE] # CJK COMPATIBILITY IDEOGRAPH-2F851
+2F85A ; [.86C6.0020.0002.58F2] # CJK COMPATIBILITY IDEOGRAPH-2F85A
+2F85B ; [.A3DA.0020.0002.58F7] # CJK COMPATIBILITY IDEOGRAPH-2F85B
+2F85C ; [.8AFA.0020.0002.5906] # CJK COMPATIBILITY IDEOGRAPH-2F85C
+2F85D ; [.8F35.0020.0002.591A] # CJK COMPATIBILITY IDEOGRAPH-2F85D
+2F85E ; [.882A.0020.0002.5922] # CJK COMPATIBILITY IDEOGRAPH-2F85E
+FA7E ; [.CF5B.0020.0002.5944] # CJK COMPATIBILITY IDEOGRAPH-FA7E
+F90C ; [.9410.0020.0002.5948] # CJK COMPATIBILITY IDEOGRAPH-F90C
+F909 ; [.ADE9.0020.0002.5951] # CJK COMPATIBILITY IDEOGRAPH-F909
+FA7F ; [.8193.0020.0002.5954] # CJK COMPATIBILITY IDEOGRAPH-FA7F
+2F85F ; [.C04A.0020.0002.5962] # CJK COMPATIBILITY IDEOGRAPH-2F85F
+F981 ; [.95CC.0020.0002.5973] # CJK COMPATIBILITY IDEOGRAPH-F981
+2F865 ; [.8598.0020.0002.59D8] # CJK COMPATIBILITY IDEOGRAPH-2F865
+2F862 ; [.A6AD.0020.0002.59EC] # CJK COMPATIBILITY IDEOGRAPH-2F862
+2F863 ; [.D42A.0020.0002.5A1B] # CJK COMPATIBILITY IDEOGRAPH-2F863
+2F864 ; [.935B.0020.0002.5A27] # CJK COMPATIBILITY IDEOGRAPH-2F864
+FA80 ; [.8232.0020.0002.5A62] # CJK COMPATIBILITY IDEOGRAPH-FA80
+2F866 ; [.8BDA.0020.0002.5A66] # CJK COMPATIBILITY IDEOGRAPH-2F866
+2F986 ; [.D15F.0020.0002.5AB5] # CJK COMPATIBILITY IDEOGRAPH-2F986
+2F869 ; [.C2B1.0020.0002.5B08] # CJK COMPATIBILITY IDEOGRAPH-2F869
+FA81 ; [.C657.0020.0002.5B28] # CJK COMPATIBILITY IDEOGRAPH-FA81
+2F86A ; [.9741.0020.0002.5B3E] # CJK COMPATIBILITY IDEOGRAPH-2F86A
+2F86B ; [.9741.0020.0002.5B3E] # CJK COMPATIBILITY IDEOGRAPH-2F86B
+FA04 ; [.B874.0020.0002.5B85] # CJK COMPATIBILITY IDEOGRAPH-FA04
+2F86D ; [.D575.0020.0002.5BC3] # CJK COMPATIBILITY IDEOGRAPH-2F86D
+2F86E ; [.B7AB.0020.0002.5BD8] # CJK COMPATIBILITY IDEOGRAPH-2F86E
+F95F ; [.9570.0020.0002.5BE7] # CJK COMPATIBILITY IDEOGRAPH-F95F
+F9AA ; [.9570.0020.0002.5BE7] # CJK COMPATIBILITY IDEOGRAPH-F9AA
+2F86F ; [.9570.0020.0002.5BE7] # CJK COMPATIBILITY IDEOGRAPH-2F86F
+F9BC ; [.98DC.0020.0002.5BEE] # CJK COMPATIBILITY IDEOGRAPH-F9BC
+2F870 ; [.8143.0020.0002.5BF3] # CJK COMPATIBILITY IDEOGRAPH-2F870
+2F872 ; [.C0B3.0020.0002.5BFF] # CJK COMPATIBILITY IDEOGRAPH-2F872
+2F873 ; [.AAD5.0020.0002.5C06] # CJK COMPATIBILITY IDEOGRAPH-2F873
+2F875 ; [.CE9E.0020.0002.5C22] # CJK COMPATIBILITY IDEOGRAPH-2F875
+F9BD ; [.9522.0020.0002.5C3F] # CJK COMPATIBILITY IDEOGRAPH-F9BD
+2F877 ; [.92CA.0020.0002.5C60] # CJK COMPATIBILITY IDEOGRAPH-2F877
+F94B ; [.9C34.0020.0002.5C62] # CJK COMPATIBILITY IDEOGRAPH-F94B
+FA3B ; [.C71D.0020.0002.5C64] # CJK COMPATIBILITY IDEOGRAPH-FA3B
+F9DF ; [.9C36.0020.0002.5C65] # CJK COMPATIBILITY IDEOGRAPH-F9DF
+FA3C ; [.BC63.0020.0002.5C6E] # CJK COMPATIBILITY IDEOGRAPH-FA3C
+2F878 ; [.BC63.0020.0002.5C6E] # CJK COMPATIBILITY IDEOGRAPH-2F878
+2F87A ; [.AEFF.0020.0002.5C8D] # CJK COMPATIBILITY IDEOGRAPH-2F87A
+2F879 ; [.B3C8.0020.0002.5CC0] # CJK COMPATIBILITY IDEOGRAPH-2F879
+F9D5 ; [.9BB6.0020.0002.5D19] # CJK COMPATIBILITY IDEOGRAPH-F9D5
+2F87C ; [.CF66.0020.0002.5D43] # CJK COMPATIBILITY IDEOGRAPH-2F87C
+F921 ; [.970A.0020.0002.5D50] # CJK COMPATIBILITY IDEOGRAPH-F921
+2F87F ; [.C416.0020.0002.5D6B] # CJK COMPATIBILITY IDEOGRAPH-2F87F
+2F87E ; [.8E87.0020.0002.5D6E] # CJK COMPATIBILITY IDEOGRAPH-2F87E
+2F880 ; [.BD30.0020.0002.5D7C] # CJK COMPATIBILITY IDEOGRAPH-2F880
+2F9F4 ; [.B1BE.0020.0002.5DB2] # CJK COMPATIBILITY IDEOGRAPH-2F9F4
+F9AB ; [.9A9A.0020.0002.5DBA] # CJK COMPATIBILITY IDEOGRAPH-F9AB
+2F881 ; [.B68C.0020.0002.5DE1] # CJK COMPATIBILITY IDEOGRAPH-2F881
+2F882 ; [.BC98.0020.0002.5DE2] # CJK COMPATIBILITY IDEOGRAPH-2F882
+2F884 ; [.B6C0.0020.0002.5DFD] # CJK COMPATIBILITY IDEOGRAPH-2F884
+2F885 ; [.C26F.0020.0002.5E28] # CJK COMPATIBILITY IDEOGRAPH-2F885
+2F886 ; [.8758.0020.0002.5E3D] # CJK COMPATIBILITY IDEOGRAPH-2F886
+2F887 ; [.8A7B.0020.0002.5E69] # CJK COMPATIBILITY IDEOGRAPH-2F887
+F98E ; [.9537.0020.0002.5E74] # CJK COMPATIBILITY IDEOGRAPH-F98E
+FA01 ; [.8F28.0020.0002.5EA6] # CJK COMPATIBILITY IDEOGRAPH-FA01
+2F88B ; [.8372.0020.0002.5EB0] # CJK COMPATIBILITY IDEOGRAPH-2F88B
+2F88C ; [.8233.0020.0002.5EB3] # CJK COMPATIBILITY IDEOGRAPH-2F88C
+2F88D ; [.C22B.0020.0002.5EB6] # CJK COMPATIBILITY IDEOGRAPH-2F88D
+F9A2 ; [.996E.0020.0002.5EC9] # CJK COMPATIBILITY IDEOGRAPH-F9A2
+F928 ; [.9766.0020.0002.5ECA] # CJK COMPATIBILITY IDEOGRAPH-F928
+2F88E ; [.9766.0020.0002.5ECA] # CJK COMPATIBILITY IDEOGRAPH-2F88E
+FA82 ; [.CAF7.0020.0002.5ED2] # CJK COMPATIBILITY IDEOGRAPH-FA82
+FA0B ; [.A11E.0020.0002.5ED3] # CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA83 ; [.CCFF.0020.0002.5ED9] # CJK COMPATIBILITY IDEOGRAPH-FA83
+F982 ; [.9AB9.0020.0002.5EEC] # CJK COMPATIBILITY IDEOGRAPH-F982
+2F890 ; [.9FBB.0020.0002.5EFE] # CJK COMPATIBILITY IDEOGRAPH-2F890
+F943 ; [.95C8.0020.0002.5F04] # CJK COMPATIBILITY IDEOGRAPH-F943
+2F894 ; [.9097.0020.0002.5F22] # CJK COMPATIBILITY IDEOGRAPH-2F894
+2F895 ; [.9097.0020.0002.5F22] # CJK COMPATIBILITY IDEOGRAPH-2F895
+2F874 ; [.8D4C.0020.0002.5F53] # CJK COMPATIBILITY IDEOGRAPH-2F874
+2F899 ; [.B544.0020.0002.5F62] # CJK COMPATIBILITY IDEOGRAPH-2F899
+FA84 ; [.C6A8.0020.0002.5F69] # CJK COMPATIBILITY IDEOGRAPH-FA84
+2F89A ; [.8E55.0020.0002.5F6B] # CJK COMPATIBILITY IDEOGRAPH-2F89A
+F9D8 ; [.9C41.0020.0002.5F8B] # CJK COMPATIBILITY IDEOGRAPH-F9D8
+2F89C ; [.8FF3.0020.0002.5F9A] # CJK COMPATIBILITY IDEOGRAPH-2F89C
+F966 ; [.8BDF.0020.0002.5FA9] # CJK COMPATIBILITY IDEOGRAPH-F966
+FA85 ; [.CE36.0020.0002.5FAD] # CJK COMPATIBILITY IDEOGRAPH-FA85
+2F89D ; [.C2FD.0020.0002.5FCD] # CJK COMPATIBILITY IDEOGRAPH-2F89D
+2F89E ; [.B768.0020.0002.5FD7] # CJK COMPATIBILITY IDEOGRAPH-2F89E
+F9A3 ; [.9551.0020.0002.5FF5] # CJK COMPATIBILITY IDEOGRAPH-F9A3
+2F89F ; [.A1E7.0020.0002.5FF9] # CJK COMPATIBILITY IDEOGRAPH-2F89F
+F960 ; [.958F.0020.0002.6012] # CJK COMPATIBILITY IDEOGRAPH-F960
+F9AC ; [.9965.0020.0002.601C] # CJK COMPATIBILITY IDEOGRAPH-F9AC
+FA6B ; [.A524.0020.0002.6075] # CJK COMPATIBILITY IDEOGRAPH-FA6B
+2F8A0 ; [.D572.0020.0002.6081] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
+FA3D ; [.A510.0020.0002.6094] # CJK COMPATIBILITY IDEOGRAPH-FA3D
+2F8A3 ; [.A510.0020.0002.6094] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
+2F8A5 ; [.8FBB.0020.0002.60C7] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
+FA86 ; [.D3D6.0020.0002.60D8] # CJK COMPATIBILITY IDEOGRAPH-FA86
+F9B9 ; [.CA70.0020.0002.60E1] # CJK COMPATIBILITY IDEOGRAPH-F9B9
+FA88 ; [.D4DB.0020.0002.6108] # CJK COMPATIBILITY IDEOGRAPH-FA88
+F9D9 ; [.9846.0020.0002.6144] # CJK COMPATIBILITY IDEOGRAPH-F9D9
+2F8A6 ; [.C64C.0020.0002.6148] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
+2F8A7 ; [.A5FA.0020.0002.614C] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
+2F8A9 ; [.A5FA.0020.0002.614C] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
+FA87 ; [.C178.0020.0002.614E] # CJK COMPATIBILITY IDEOGRAPH-FA87
+2F8A8 ; [.C178.0020.0002.614E] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
+FA8A ; [.CB23.0020.0002.6160] # CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA3E ; [.A03D.0020.0002.6168] # CJK COMPATIBILITY IDEOGRAPH-FA3E
+2F8AA ; [.96E1.0020.0002.617A] # CJK COMPATIBILITY IDEOGRAPH-2F8AA
+FA3F ; [.C55C.0020.0002.618E] # CJK COMPATIBILITY IDEOGRAPH-FA3F
+FA89 ; [.C55C.0020.0002.618E] # CJK COMPATIBILITY IDEOGRAPH-FA89
+2F8AB ; [.C55C.0020.0002.618E] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
+F98F ; [.997C.0020.0002.6190] # CJK COMPATIBILITY IDEOGRAPH-F98F
+2F8AD ; [.8A96.0020.0002.61A4] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
+2F8AE ; [.C6EB.0020.0002.61AF] # CJK COMPATIBILITY IDEOGRAPH-2F8AE
+2F8AC ; [.B498.0020.0002.61B2] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
+2F8AF ; [.8803.0020.0002.61DE] # CJK COMPATIBILITY IDEOGRAPH-2F8AF
+FA40 ; [.BE2C.0020.0002.61F2] # CJK COMPATIBILITY IDEOGRAPH-FA40
+FA8B ; [.BE2C.0020.0002.61F2] # CJK COMPATIBILITY IDEOGRAPH-FA8B
+2F8B0 ; [.BE2C.0020.0002.61F2] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
+F90D ; [.9742.0020.0002.61F6] # CJK COMPATIBILITY IDEOGRAPH-F90D
+2F8B1 ; [.9742.0020.0002.61F6] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
+F990 ; [.99C4.0020.0002.6200] # CJK COMPATIBILITY IDEOGRAPH-F990
+2F8B2 ; [.BDFC.0020.0002.6210] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
+2F8B3 ; [.A802.0020.0002.621B] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
+F9D2 ; [.9B16.0020.0002.622E] # CJK COMPATIBILITY IDEOGRAPH-F9D2
+FA8C ; [.8C7A.0020.0002.6234] # CJK COMPATIBILITY IDEOGRAPH-FA8C
+2F8B4 ; [.A0E3.0020.0002.625D] # CJK COMPATIBILITY IDEOGRAPH-2F8B4
+2F8B5 ; [.814B.0020.0002.62B1] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
+F925 ; [.95DB.0020.0002.62C9] # CJK COMPATIBILITY IDEOGRAPH-F925
+F95B ; [.93DB.0020.0002.62CF] # CJK COMPATIBILITY IDEOGRAPH-F95B
+FA02 ; [.9037.0020.0002.62D3] # CJK COMPATIBILITY IDEOGRAPH-FA02
+2F8B6 ; [.801D.0020.0002.62D4] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
+2F8BA ; [.8599.0020.0002.62FC] # CJK COMPATIBILITY IDEOGRAPH-2F8BA
+F973 ; [.C00F.0020.0002.62FE] # CJK COMPATIBILITY IDEOGRAPH-F973
+2F8B9 ; [.D348.0020.0002.633D] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
+2F8B7 ; [.ACA2.0020.0002.6350] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
+2F8BB ; [.C05A.0020.0002.6368] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
+F9A4 ; [.9540.0020.0002.637B] # CJK COMPATIBILITY IDEOGRAPH-F9A4
+2F8BC ; [.C8AF.0020.0002.6383] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
+F975 ; [.CA67.0020.0002.63A0] # CJK COMPATIBILITY IDEOGRAPH-F975
+2F8C1 ; [.CF63.0020.0002.63A9] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
+FA8D ; [.D43E.0020.0002.63C4] # CJK COMPATIBILITY IDEOGRAPH-FA8D
+2F8C0 ; [.CF39.0020.0002.63C5] # CJK COMPATIBILITY IDEOGRAPH-2F8C0
+2F8BD ; [.A70F.0020.0002.63E4] # CJK COMPATIBILITY IDEOGRAPH-2F8BD
+FA8E ; [.C8BD.0020.0002.641C] # CJK COMPATIBILITY IDEOGRAPH-FA8E
+2F8BF ; [.AAB0.0020.0002.6422] # CJK COMPATIBILITY IDEOGRAPH-2F8BF
+FA8F ; [.8365.0020.0002.6452] # CJK COMPATIBILITY IDEOGRAPH-FA8F
+2F8C3 ; [.865D.0020.0002.6469] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
+2F8C6 ; [.A904.0020.0002.6477] # CJK COMPATIBILITY IDEOGRAPH-2F8C6
+2F8C4 ; [.AB0A.0020.0002.647E] # CJK COMPATIBILITY IDEOGRAPH-2F8C4
+F991 ; [.9546.0020.0002.649A] # CJK COMPATIBILITY IDEOGRAPH-F991
+2F8C5 ; [.A4F3.0020.0002.649D] # CJK COMPATIBILITY IDEOGRAPH-2F8C5
+F930 ; [.9ADE.0020.0002.64C4] # CJK COMPATIBILITY IDEOGRAPH-F930
+FA41 ; [.8915.0020.0002.654F] # CJK COMPATIBILITY IDEOGRAPH-FA41
+2F8C8 ; [.8915.0020.0002.654F] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
+FA90 ; [.CAF2.0020.0002.6556] # CJK COMPATIBILITY IDEOGRAPH-FA90
+2F8C9 ; [.AB74.0020.0002.656C] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
+F969 ; [.C23A.0020.0002.6578] # CJK COMPATIBILITY IDEOGRAPH-F969
+F9BE ; [.9905.0020.0002.6599] # CJK COMPATIBILITY IDEOGRAPH-F9BE
+F983 ; [.9C2B.0020.0002.65C5] # CJK COMPATIBILITY IDEOGRAPH-F983
+FA42 ; [.A775.0020.0002.65E2] # CJK COMPATIBILITY IDEOGRAPH-FA42
+2F8CB ; [.A789.0020.0002.65E3] # CJK COMPATIBILITY IDEOGRAPH-2F8CB
+F9E0 ; [.CCA3.0020.0002.6613] # CJK COMPATIBILITY IDEOGRAPH-F9E0
+2F8CD ; [.AAA5.0020.0002.6649] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
+FA12 ; [.B034.0020.0002.6674] # CJK COMPATIBILITY IDEOGRAPH-FA12
+FA91 ; [.B034.0020.0002.6674] # CJK COMPATIBILITY IDEOGRAPH-FA91
+F9C5 ; [.D5E6.0020.0002.6688] # CJK COMPATIBILITY IDEOGRAPH-F9C5
+FA43 ; [.C20B.0020.0002.6691] # CJK COMPATIBILITY IDEOGRAPH-FA43
+2F8CF ; [.C20B.0020.0002.6691] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
+2F8D5 ; [.AAB8.0020.0002.669C] # CJK COMPATIBILITY IDEOGRAPH-2F8D5
+FA06 ; [.8156.0020.0002.66B4] # CJK COMPATIBILITY IDEOGRAPH-FA06
+F98B ; [.9855.0020.0002.66C6] # CJK COMPATIBILITY IDEOGRAPH-F98B
+F901 ; [.9DDE.0020.0002.66F4] # CJK COMPATIBILITY IDEOGRAPH-F901
+2F8CC ; [.C1E5.0020.0002.66F8] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
+2F8D4 ; [.C5BD.0020.0002.6700] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
+F929 ; [.9775.0020.0002.6717] # CJK COMPATIBILITY IDEOGRAPH-F929
+FA92 ; [.9775.0020.0002.6717] # CJK COMPATIBILITY IDEOGRAPH-FA92
+2F8D8 ; [.9775.0020.0002.6717] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
+FA93 ; [.D3E7.0020.0002.671B] # CJK COMPATIBILITY IDEOGRAPH-FA93
+2F8D9 ; [.D3E7.0020.0002.671B] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
+2F8DA ; [.C5F8.0020.0002.6721] # CJK COMPATIBILITY IDEOGRAPH-2F8DA
+F9E1 ; [.9897.0020.0002.674E] # CJK COMPATIBILITY IDEOGRAPH-F9E1
+2F8DC ; [.82A9.0020.0002.6753] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
+FA94 ; [.B9DA.0020.0002.6756] # CJK COMPATIBILITY IDEOGRAPH-FA94
+2F8DB ; [.ADC7.0020.0002.675E] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
+F9C8 ; [.BCDE.0020.0002.677B] # CJK COMPATIBILITY IDEOGRAPH-F9C8
+2F8E0 ; [.A6A7.0020.0002.6785] # CJK COMPATIBILITY IDEOGRAPH-2F8E0
+F9F4 ; [.99CA.0020.0002.6797] # CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9C9 ; [.9944.0020.0002.67F3] # CJK COMPATIBILITY IDEOGRAPH-F9C9
+2F8DF ; [.9EAD.0020.0002.67FA] # CJK COMPATIBILITY IDEOGRAPH-2F8DF
+F9DA ; [.9826.0020.0002.6817] # CJK COMPATIBILITY IDEOGRAPH-F9DA
+2F8E5 ; [.8196.0020.0002.681F] # CJK COMPATIBILITY IDEOGRAPH-2F8E5
+2F8E1 ; [.C902.0020.0002.6852] # CJK COMPATIBILITY IDEOGRAPH-2F8E1
+F97A ; [.9A19.0020.0002.6881] # CJK COMPATIBILITY IDEOGRAPH-F97A
+FA44 ; [.86DF.0020.0002.6885] # CJK COMPATIBILITY IDEOGRAPH-FA44
+2F8E2 ; [.86DF.0020.0002.6885] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
+2F8E4 ; [.CAEF.0020.0002.688E] # CJK COMPATIBILITY IDEOGRAPH-2F8E4
+F9E2 ; [.979F.0020.0002.68A8] # CJK COMPATIBILITY IDEOGRAPH-F9E2
+2F8E6 ; [.C417.0020.0002.6914] # CJK COMPATIBILITY IDEOGRAPH-2F8E6
+2F8E8 ; [.B7F9.0020.0002.6942] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
+2F8E9 ; [.CE3D.0020.0002.69A3] # CJK COMPATIBILITY IDEOGRAPH-2F8E9
+2F8EA ; [.9CE5.0020.0002.69EA] # CJK COMPATIBILITY IDEOGRAPH-2F8EA
+F914 ; [.9610.0020.0002.6A02] # CJK COMPATIBILITY IDEOGRAPH-F914
+F95C ; [.9610.0020.0002.6A02] # CJK COMPATIBILITY IDEOGRAPH-F95C
+F9BF ; [.9610.0020.0002.6A02] # CJK COMPATIBILITY IDEOGRAPH-F9BF
+F94C ; [.96E3.0020.0002.6A13] # CJK COMPATIBILITY IDEOGRAPH-F94C
+2F8EB ; [.C052.0020.0002.6AA8] # CJK COMPATIBILITY IDEOGRAPH-2F8EB
+F931 ; [.9AE5.0020.0002.6AD3] # CJK COMPATIBILITY IDEOGRAPH-F931
+2F8ED ; [.B7D3.0020.0002.6ADB] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
+F91D ; [.9726.0020.0002.6B04] # CJK COMPATIBILITY IDEOGRAPH-F91D
+2F8EF ; [.C667.0020.0002.6B21] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
+2F8F1 ; [.B58D.0020.0002.6B54] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
+2F8F3 ; [.C9AB.0020.0002.6B72] # CJK COMPATIBILITY IDEOGRAPH-2F8F3
+F98C ; [.9856.0020.0002.6B77] # CJK COMPATIBILITY IDEOGRAPH-F98C
+FA95 ; [.8C53.0020.0002.6B79] # CJK COMPATIBILITY IDEOGRAPH-FA95
+2F8F4 ; [.D380.0020.0002.6B9F] # CJK COMPATIBILITY IDEOGRAPH-2F8F4
+F9A5 ; [.99BD.0020.0002.6BAE] # CJK COMPATIBILITY IDEOGRAPH-F9A5
+F970 ; [.C025.0020.0002.6BBA] # CJK COMPATIBILITY IDEOGRAPH-F970
+FA96 ; [.C025.0020.0002.6BBA] # CJK COMPATIBILITY IDEOGRAPH-FA96
+2F8F5 ; [.C025.0020.0002.6BBA] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
+2F8F6 ; [.AE8A.0020.0002.6BBB] # CJK COMPATIBILITY IDEOGRAPH-2F8F6
+2F8FA ; [.8A3E.0020.0002.6C4E] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
+2F8FE ; [.AF01.0020.0002.6C67] # CJK COMPATIBILITY IDEOGRAPH-2F8FE
+F972 ; [.BD5D.0020.0002.6C88] # CJK COMPATIBILITY IDEOGRAPH-F972
+2F8FC ; [.CF25.0020.0002.6CBF] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
+F968 ; [.886C.0020.0002.6CCC] # CJK COMPATIBILITY IDEOGRAPH-F968
+2F8FD ; [.8194.0020.0002.6CCD] # CJK COMPATIBILITY IDEOGRAPH-2F8FD
+F9E3 ; [.9490.0020.0002.6CE5] # CJK COMPATIBILITY IDEOGRAPH-F9E3
+2F8FF ; [.D193.0020.0002.6D16] # CJK COMPATIBILITY IDEOGRAPH-2F8FF
+F915 ; [.9B72.0020.0002.6D1B] # CJK COMPATIBILITY IDEOGRAPH-F915
+FA05 ; [.900E.0020.0002.6D1E] # CJK COMPATIBILITY IDEOGRAPH-FA05
+2F907 ; [.85C8.0020.0002.6D34] # CJK COMPATIBILITY IDEOGRAPH-2F907
+2F900 ; [.83F9.0020.0002.6D3E] # CJK COMPATIBILITY IDEOGRAPH-2F900
+F9CA ; [.9912.0020.0002.6D41] # CJK COMPATIBILITY IDEOGRAPH-F9CA
+FA97 ; [.9912.0020.0002.6D41] # CJK COMPATIBILITY IDEOGRAPH-FA97
+2F902 ; [.9912.0020.0002.6D41] # CJK COMPATIBILITY IDEOGRAPH-2F902
+2F903 ; [.A2D9.0020.0002.6D69] # CJK COMPATIBILITY IDEOGRAPH-2F903
+F92A ; [.9781.0020.0002.6D6A] # CJK COMPATIBILITY IDEOGRAPH-F92A
+FA45 ; [.A29A.0020.0002.6D77] # CJK COMPATIBILITY IDEOGRAPH-FA45
+2F901 ; [.A29A.0020.0002.6D77] # CJK COMPATIBILITY IDEOGRAPH-2F901
+2F904 ; [.AAA7.0020.0002.6D78] # CJK COMPATIBILITY IDEOGRAPH-2F904
+2F905 ; [.94E1.0020.0002.6D85] # CJK COMPATIBILITY IDEOGRAPH-2F905
+F9F5 ; [.99D1.0020.0002.6DCB] # CJK COMPATIBILITY IDEOGRAPH-F9F5
+F94D ; [.9688.0020.0002.6DDA] # CJK COMPATIBILITY IDEOGRAPH-F94D
+F9D6 ; [.9BB8.0020.0002.6DEA] # CJK COMPATIBILITY IDEOGRAPH-F9D6
+2F90E ; [.CF08.0020.0002.6DF9] # CJK COMPATIBILITY IDEOGRAPH-2F90E
+FA46 ; [.BA70.0020.0002.6E1A] # CJK COMPATIBILITY IDEOGRAPH-FA46
+2F908 ; [.9DB6.0020.0002.6E2F] # CJK COMPATIBILITY IDEOGRAPH-2F908
+2F909 ; [.CF0D.0020.0002.6E6E] # CJK COMPATIBILITY IDEOGRAPH-2F909
+F9CB ; [.990C.0020.0002.6E9C] # CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9EC ; [.94CE.0020.0002.6EBA] # CJK COMPATIBILITY IDEOGRAPH-F9EC
+2F90C ; [.8E88.0020.0002.6EC7] # CJK COMPATIBILITY IDEOGRAPH-2F90C
+FA99 ; [.C419.0020.0002.6ECB] # CJK COMPATIBILITY IDEOGRAPH-FA99
+2F90B ; [.C419.0020.0002.6ECB] # CJK COMPATIBILITY IDEOGRAPH-2F90B
+F904 ; [.A44F.0020.0002.6ED1] # CJK COMPATIBILITY IDEOGRAPH-F904
+FA98 ; [.D03B.0020.0002.6EDB] # CJK COMPATIBILITY IDEOGRAPH-FA98
+F94E ; [.96FC.0020.0002.6F0F] # CJK COMPATIBILITY IDEOGRAPH-F94E
+FA47 ; [.A368.0020.0002.6F22] # CJK COMPATIBILITY IDEOGRAPH-FA47
+FA9A ; [.A368.0020.0002.6F22] # CJK COMPATIBILITY IDEOGRAPH-FA9A
+F992 ; [.9974.0020.0002.6F23] # CJK COMPATIBILITY IDEOGRAPH-F992
+2F90F ; [.BCA0.0020.0002.6F6E] # CJK COMPATIBILITY IDEOGRAPH-2F90F
+2F912 ; [.8A7C.0020.0002.6FC6] # CJK COMPATIBILITY IDEOGRAPH-2F912
+F922 ; [.9751.0020.0002.6FEB] # CJK COMPATIBILITY IDEOGRAPH-F922
+F984 ; [.9C51.0020.0002.6FFE] # CJK COMPATIBILITY IDEOGRAPH-F984
+2F915 ; [.D142.0020.0002.701B] # CJK COMPATIBILITY IDEOGRAPH-2F915
+FA9B ; [.AB83.0020.0002.701E] # CJK COMPATIBILITY IDEOGRAPH-FA9B
+2F914 ; [.AB83.0020.0002.701E] # CJK COMPATIBILITY IDEOGRAPH-2F914
+2F913 ; [.D563.0020.0002.7039] # CJK COMPATIBILITY IDEOGRAPH-2F913
+2F917 ; [.AF57.0020.0002.704A] # CJK COMPATIBILITY IDEOGRAPH-2F917
+2F835 ; [.A4D6.0020.0002.7070] # CJK COMPATIBILITY IDEOGRAPH-2F835
+2F919 ; [.BB35.0020.0002.7077] # CJK COMPATIBILITY IDEOGRAPH-2F919
+2F918 ; [.C4B5.0020.0002.707D] # CJK COMPATIBILITY IDEOGRAPH-2F918
+F9FB ; [.B774.0020.0002.7099] # CJK COMPATIBILITY IDEOGRAPH-F9FB
+2F91A ; [.9126.0020.0002.70AD] # CJK COMPATIBILITY IDEOGRAPH-2F91A
+F99F ; [.98B0.0020.0002.70C8] # CJK COMPATIBILITY IDEOGRAPH-F99F
+F916 ; [.96C6.0020.0002.70D9] # CJK COMPATIBILITY IDEOGRAPH-F916
+2F91C ; [.8FAD.0020.0002.7145] # CJK COMPATIBILITY IDEOGRAPH-2F91C
+F993 ; [.99B6.0020.0002.7149] # CJK COMPATIBILITY IDEOGRAPH-F993
+FA48 ; [.BA72.0020.0002.716E] # CJK COMPATIBILITY IDEOGRAPH-FA48
+FA9C ; [.BA72.0020.0002.716E] # CJK COMPATIBILITY IDEOGRAPH-FA9C
+2F91E ; [.C7CA.0020.0002.719C] # CJK COMPATIBILITY IDEOGRAPH-2F91E
+F9C0 ; [.98E3.0020.0002.71CE] # CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9EE ; [.99E0.0020.0002.71D0] # CJK COMPATIBILITY IDEOGRAPH-F9EE
+F932 ; [.9AC1.0020.0002.7210] # CJK COMPATIBILITY IDEOGRAPH-F932
+F91E ; [.9753.0020.0002.721B] # CJK COMPATIBILITY IDEOGRAPH-F91E
+2F920 ; [.C7A8.0020.0002.7228] # CJK COMPATIBILITY IDEOGRAPH-2F920
+FA49 ; [.B8AD.0020.0002.722B] # CJK COMPATIBILITY IDEOGRAPH-FA49
+FA9E ; [.AC81.0020.0002.7235] # CJK COMPATIBILITY IDEOGRAPH-FA9E
+2F921 ; [.AC81.0020.0002.7235] # CJK COMPATIBILITY IDEOGRAPH-2F921
+2F922 ; [.B809.0020.0002.7250] # CJK COMPATIBILITY IDEOGRAPH-2F922
+F946 ; [.969F.0020.0002.7262] # CJK COMPATIBILITY IDEOGRAPH-F946
+2F924 ; [.B19A.0020.0002.7280] # CJK COMPATIBILITY IDEOGRAPH-2F924
+2F925 ; [.810B.0020.0002.7295] # CJK COMPATIBILITY IDEOGRAPH-2F925
+FA9F ; [.8A3C.0020.0002.72AF] # CJK COMPATIBILITY IDEOGRAPH-FA9F
+F9FA ; [.BB66.0020.0002.72C0] # CJK COMPATIBILITY IDEOGRAPH-F9FA
+F92B ; [.975E.0020.0002.72FC] # CJK COMPATIBILITY IDEOGRAPH-F92B
+FA16 ; [.BA3A.0020.0002.732A] # CJK COMPATIBILITY IDEOGRAPH-FA16
+FAA0 ; [.BA3A.0020.0002.732A] # CJK COMPATIBILITY IDEOGRAPH-FAA0
+F9A7 ; [.98C3.0020.0002.7375] # CJK COMPATIBILITY IDEOGRAPH-F9A7
+2F928 ; [.9034.0020.0002.737A] # CJK COMPATIBILITY IDEOGRAPH-2F928
+F961 ; [.9C43.0020.0002.7387] # CJK COMPATIBILITY IDEOGRAPH-F961
+F9DB ; [.9C43.0020.0002.7387] # CJK COMPATIBILITY IDEOGRAPH-F9DB
+2F929 ; [.D3CA.0020.0002.738B] # CJK COMPATIBILITY IDEOGRAPH-2F929
+2F92B ; [.D544.0020.0002.73A5] # CJK COMPATIBILITY IDEOGRAPH-2F92B
+F9AD ; [.9A4F.0020.0002.73B2] # CJK COMPATIBILITY IDEOGRAPH-F9AD
+F917 ; [.9B76.0020.0002.73DE] # CJK COMPATIBILITY IDEOGRAPH-F917
+F9E4 ; [.97F2.0020.0002.7406] # CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9CC ; [.9914.0020.0002.7409] # CJK COMPATIBILITY IDEOGRAPH-F9CC
+FA4A ; [.C58E.0020.0002.7422] # CJK COMPATIBILITY IDEOGRAPH-FA4A
+2F92E ; [.8C72.0020.0002.7447] # CJK COMPATIBILITY IDEOGRAPH-2F92E
+2F92F ; [.D44E.0020.0002.745C] # CJK COMPATIBILITY IDEOGRAPH-2F92F
+F9AE ; [.D131.0020.0002.7469] # CJK COMPATIBILITY IDEOGRAPH-F9AE
+FAA1 ; [.B9AB.0020.0002.7471] # CJK COMPATIBILITY IDEOGRAPH-FAA1
+2F930 ; [.B9AB.0020.0002.7471] # CJK COMPATIBILITY IDEOGRAPH-2F930
+2F931 ; [.C979.0020.0002.7485] # CJK COMPATIBILITY IDEOGRAPH-2F931
+F994 ; [.999F.0020.0002.7489] # CJK COMPATIBILITY IDEOGRAPH-F994
+F9EF ; [.99E1.0020.0002.7498] # CJK COMPATIBILITY IDEOGRAPH-F9EF
+2F932 ; [.B15E.0020.0002.74CA] # CJK COMPATIBILITY IDEOGRAPH-2F932
+FAA2 ; [.C64D.0020.0002.7506] # CJK COMPATIBILITY IDEOGRAPH-FAA2
+2F934 ; [.C397.0020.0002.7524] # CJK COMPATIBILITY IDEOGRAPH-2F934
+FAA3 ; [.A462.0020.0002.753B] # CJK COMPATIBILITY IDEOGRAPH-FAA3
+2F936 ; [.C4B7.0020.0002.753E] # CJK COMPATIBILITY IDEOGRAPH-2F936
+F9CD ; [.9915.0020.0002.7559] # CJK COMPATIBILITY IDEOGRAPH-F9CD
+F976 ; [.CA68.0020.0002.7565] # CJK COMPATIBILITY IDEOGRAPH-F976
+F962 ; [.CCD0.0020.0002.7570] # CJK COMPATIBILITY IDEOGRAPH-F962
+2F938 ; [.CCD0.0020.0002.7570] # CJK COMPATIBILITY IDEOGRAPH-2F938
+F9E5 ; [.983F.0020.0002.75E2] # CJK COMPATIBILITY IDEOGRAPH-F9E5
+2F93A ; [.D494.0020.0002.7610] # CJK COMPATIBILITY IDEOGRAPH-2F93A
+FAA4 ; [.9F2F.0020.0002.761D] # CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5 ; [.D382.0020.0002.761F] # CJK COMPATIBILITY IDEOGRAPH-FAA5
+F9C1 ; [.98E8.0020.0002.7642] # CJK COMPATIBILITY IDEOGRAPH-F9C1
+F90E ; [.9649.0020.0002.7669] # CJK COMPATIBILITY IDEOGRAPH-F90E
+FA17 ; [.CCC7.0020.0002.76CA] # CJK COMPATIBILITY IDEOGRAPH-FA17
+FAA6 ; [.CCC7.0020.0002.76CA] # CJK COMPATIBILITY IDEOGRAPH-FAA6
+FAA7 ; [.C1CA.0020.0002.76DB] # CJK COMPATIBILITY IDEOGRAPH-FAA7
+F933 ; [.9AB5.0020.0002.76E7] # CJK COMPATIBILITY IDEOGRAPH-F933
+FAA8 ; [.B71A.0020.0002.76F4] # CJK COMPATIBILITY IDEOGRAPH-FAA8
+2F940 ; [.B71A.0020.0002.76F4] # CJK COMPATIBILITY IDEOGRAPH-2F940
+F96D ; [.C1C2.0020.0002.7701] # CJK COMPATIBILITY IDEOGRAPH-F96D
+2F945 ; [.B959.0020.0002.771E] # CJK COMPATIBILITY IDEOGRAPH-2F945
+2F946 ; [.B95A.0020.0002.771F] # CJK COMPATIBILITY IDEOGRAPH-2F946
+2F947 ; [.B95A.0020.0002.771F] # CJK COMPATIBILITY IDEOGRAPH-2F947
+FAAA ; [.B869.0020.0002.7740] # CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAA9 ; [.ACC5.0020.0002.774A] # CJK COMPATIBILITY IDEOGRAPH-FAA9
+2F948 ; [.ACC5.0020.0002.774A] # CJK COMPATIBILITY IDEOGRAPH-2F948
+2F94A ; [.BD55.0020.0002.778B] # CJK COMPATIBILITY IDEOGRAPH-2F94A
+FA9D ; [.AE77.0020.0002.77A7] # CJK COMPATIBILITY IDEOGRAPH-FA9D
+2F94E ; [.B54F.0020.0002.784E] # CJK COMPATIBILITY IDEOGRAPH-2F94E
+F9CE ; [.9918.0020.0002.786B] # CJK COMPATIBILITY IDEOGRAPH-F9CE
+F93B ; [.9B0A.0020.0002.788C] # CJK COMPATIBILITY IDEOGRAPH-F93B
+2F94F ; [.9B0A.0020.0002.788C] # CJK COMPATIBILITY IDEOGRAPH-2F94F
+FA4B ; [.80DF.0020.0002.7891] # CJK COMPATIBILITY IDEOGRAPH-FA4B
+F947 ; [.9673.0020.0002.78CA] # CJK COMPATIBILITY IDEOGRAPH-F947
+FAAB ; [.9259.0020.0002.78CC] # CJK COMPATIBILITY IDEOGRAPH-FAAB
+2F950 ; [.9259.0020.0002.78CC] # CJK COMPATIBILITY IDEOGRAPH-2F950
+F964 ; [.845F.0020.0002.78FB] # CJK COMPATIBILITY IDEOGRAPH-F964
+F985 ; [.9878.0020.0002.792A] # CJK COMPATIBILITY IDEOGRAPH-F985
+FA18 ; [.97EA.0020.0002.793C] # CJK COMPATIBILITY IDEOGRAPH-FA18
+FA4C ; [.C05E.0020.0002.793E] # CJK COMPATIBILITY IDEOGRAPH-FA4C
+FA4E ; [.AD73.0020.0002.7948] # CJK COMPATIBILITY IDEOGRAPH-FA4E
+FA4D ; [.B757.0020.0002.7949] # CJK COMPATIBILITY IDEOGRAPH-FA4D
+FA4F ; [.CEF0.0020.0002.7950] # CJK COMPATIBILITY IDEOGRAPH-FA4F
+FA50 ; [.C583.0020.0002.7956] # CJK COMPATIBILITY IDEOGRAPH-FA50
+2F953 ; [.C583.0020.0002.7956] # CJK COMPATIBILITY IDEOGRAPH-2F953
+FA51 ; [.BA90.0020.0002.795D] # CJK COMPATIBILITY IDEOGRAPH-FA51
+FA19 ; [.C153.0020.0002.795E] # CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A ; [.B4FF.0020.0002.7965] # CJK COMPATIBILITY IDEOGRAPH-FA1A
+F93C ; [.9B0B.0020.0002.797F] # CJK COMPATIBILITY IDEOGRAPH-F93C
+FA52 ; [.A4A7.0020.0002.798D] # CJK COMPATIBILITY IDEOGRAPH-FA52
+FA53 ; [.B971.0020.0002.798E] # CJK COMPATIBILITY IDEOGRAPH-FA53
+FA1B ; [.8B8D.0020.0002.798F] # CJK COMPATIBILITY IDEOGRAPH-FA1B
+2F956 ; [.8B8D.0020.0002.798F] # CJK COMPATIBILITY IDEOGRAPH-2F956
+F9B6 ; [.97FC.0020.0002.79AE] # CJK COMPATIBILITY IDEOGRAPH-F9B6
+F995 ; [.9538.0020.0002.79CA] # CJK COMPATIBILITY IDEOGRAPH-F995
+2F957 ; [.C201.0020.0002.79EB] # CJK COMPATIBILITY IDEOGRAPH-2F957
+F956 ; [.978F.0020.0002.7A1C] # CJK COMPATIBILITY IDEOGRAPH-F956
+FA54 ; [.9E24.0020.0002.7A40] # CJK COMPATIBILITY IDEOGRAPH-FA54
+2F959 ; [.9E24.0020.0002.7A40] # CJK COMPATIBILITY IDEOGRAPH-2F959
+2F95A ; [.A79C.0020.0002.7A4A] # CJK COMPATIBILITY IDEOGRAPH-2F95A
+2F95B ; [.D3B2.0020.0002.7A4F] # CJK COMPATIBILITY IDEOGRAPH-2F95B
+FA55 ; [.92B6.0020.0002.7A81] # CJK COMPATIBILITY IDEOGRAPH-FA55
+FAAC ; [.9231.0020.0002.7AB1] # CJK COMPATIBILITY IDEOGRAPH-FAAC
+F9F7 ; [.9808.0020.0002.7ACB] # CJK COMPATIBILITY IDEOGRAPH-F9F7
+2F95F ; [.85BC.0020.0002.7AEE] # CJK COMPATIBILITY IDEOGRAPH-2F95F
+F9F8 ; [.9833.0020.0002.7B20] # CJK COMPATIBILITY IDEOGRAPH-F9F8
+FA56 ; [.A87C.0020.0002.7BC0] # CJK COMPATIBILITY IDEOGRAPH-FA56
+FAAD ; [.A87C.0020.0002.7BC0] # CJK COMPATIBILITY IDEOGRAPH-FAAD
+2F962 ; [.BB3E.0020.0002.7BC6] # CJK COMPATIBILITY IDEOGRAPH-2F962
+2F963 ; [.BA5F.0020.0002.7BC9] # CJK COMPATIBILITY IDEOGRAPH-2F963
+F9A6 ; [.9992.0020.0002.7C3E] # CJK COMPATIBILITY IDEOGRAPH-F9A6
+F944 ; [.9BF8.0020.0002.7C60] # CJK COMPATIBILITY IDEOGRAPH-F944
+FAAE ; [.9686.0020.0002.7C7B] # CJK COMPATIBILITY IDEOGRAPH-FAAE
+F9F9 ; [.9834.0020.0002.7C92] # CJK COMPATIBILITY IDEOGRAPH-F9F9
+FA1D ; [.AB32.0020.0002.7CBE] # CJK COMPATIBILITY IDEOGRAPH-FA1D
+2F966 ; [.8114.0020.0002.7CD2] # CJK COMPATIBILITY IDEOGRAPH-2F966
+FA03 ; [.915F.0020.0002.7CD6] # CJK COMPATIBILITY IDEOGRAPH-FA03
+2F969 ; [.C8EE.0020.0002.7CE3] # CJK COMPATIBILITY IDEOGRAPH-2F969
+F97B ; [.9A24.0020.0002.7CE7] # CJK COMPATIBILITY IDEOGRAPH-F97B
+2F968 ; [.AB10.0020.0002.7CE8] # CJK COMPATIBILITY IDEOGRAPH-2F968
+2F96A ; [.A778.0020.0002.7D00] # CJK COMPATIBILITY IDEOGRAPH-2F96A
+F9CF ; [.952E.0020.0002.7D10] # CJK COMPATIBILITY IDEOGRAPH-F9CF
+F96A ; [.C970.0020.0002.7D22] # CJK COMPATIBILITY IDEOGRAPH-F96A
+F94F ; [.9689.0020.0002.7D2F] # CJK COMPATIBILITY IDEOGRAPH-F94F
+FAAF ; [.90A1.0020.0002.7D5B] # CJK COMPATIBILITY IDEOGRAPH-FAAF
+2F96C ; [.81D3.0020.0002.7D63] # CJK COMPATIBILITY IDEOGRAPH-2F96C
+F93D ; [.9C4A.0020.0002.7DA0] # CJK COMPATIBILITY IDEOGRAPH-F93D
+F957 ; [.9A73.0020.0002.7DBE] # CJK COMPATIBILITY IDEOGRAPH-F957
+2F96E ; [.C427.0020.0002.7DC7] # CJK COMPATIBILITY IDEOGRAPH-2F96E
+F996 ; [.99BA.0020.0002.7DF4] # CJK COMPATIBILITY IDEOGRAPH-F996
+FA57 ; [.99BA.0020.0002.7DF4] # CJK COMPATIBILITY IDEOGRAPH-FA57
+FAB0 ; [.99BA.0020.0002.7DF4] # CJK COMPATIBILITY IDEOGRAPH-FAB0
+2F96F ; [.C61F.0020.0002.7E02] # CJK COMPATIBILITY IDEOGRAPH-2F96F
+FA58 ; [.AAC3.0020.0002.7E09] # CJK COMPATIBILITY IDEOGRAPH-FA58
+F950 ; [.9C3C.0020.0002.7E37] # CJK COMPATIBILITY IDEOGRAPH-F950
+FA59 ; [.8A28.0020.0002.7E41] # CJK COMPATIBILITY IDEOGRAPH-FA59
+2F970 ; [.C8A7.0020.0002.7E45] # CJK COMPATIBILITY IDEOGRAPH-2F970
+FAB1 ; [.85D7.0020.0002.7F3E] # CJK COMPATIBILITY IDEOGRAPH-FAB1
+FA5A ; [.C20E.0020.0002.7F72] # CJK COMPATIBILITY IDEOGRAPH-FA5A
+F9E6 ; [.97C3.0020.0002.7F79] # CJK COMPATIBILITY IDEOGRAPH-F9E6
+2F976 ; [.BCA2.0020.0002.7F7A] # CJK COMPATIBILITY IDEOGRAPH-2F976
+F90F ; [.9B52.0020.0002.7F85] # CJK COMPATIBILITY IDEOGRAPH-F90F
+2F978 ; [.D0D3.0020.0002.7F95] # CJK COMPATIBILITY IDEOGRAPH-2F978
+F9AF ; [.9A62.0020.0002.7F9A] # CJK COMPATIBILITY IDEOGRAPH-F9AF
+FA1E ; [.D47D.0020.0002.7FBD] # CJK COMPATIBILITY IDEOGRAPH-FA1E
+2F979 ; [.CB06.0020.0002.7FFA] # CJK COMPATIBILITY IDEOGRAPH-2F979
+F934 ; [.96B7.0020.0002.8001] # CJK COMPATIBILITY IDEOGRAPH-F934
+FA5B ; [.B856.0020.0002.8005] # CJK COMPATIBILITY IDEOGRAPH-FA5B
+FAB2 ; [.B856.0020.0002.8005] # CJK COMPATIBILITY IDEOGRAPH-FAB2
+2F97A ; [.B856.0020.0002.8005] # CJK COMPATIBILITY IDEOGRAPH-2F97A
+F9B0 ; [.9A64.0020.0002.8046] # CJK COMPATIBILITY IDEOGRAPH-F9B0
+2F97D ; [.85BA.0020.0002.8060] # CJK COMPATIBILITY IDEOGRAPH-2F97D
+F997 ; [.9989.0020.0002.806F] # CJK COMPATIBILITY IDEOGRAPH-F997
+2F97F ; [.C7D5.0020.0002.8070] # CJK COMPATIBILITY IDEOGRAPH-2F97F
+F945 ; [.9BF9.0020.0002.807E] # CJK COMPATIBILITY IDEOGRAPH-F945
+F953 ; [.9600.0020.0002.808B] # CJK COMPATIBILITY IDEOGRAPH-F953
+2F8D6 ; [.93E7.0020.0002.80AD] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
+2F982 ; [.D4B0.0020.0002.80B2] # CJK COMPATIBILITY IDEOGRAPH-2F982
+2F983 ; [.C780.0020.0002.8103] # CJK COMPATIBILITY IDEOGRAPH-2F983
+2F985 ; [.851D.0020.0002.813E] # CJK COMPATIBILITY IDEOGRAPH-2F985
+F926 ; [.95F4.0020.0002.81D8] # CJK COMPATIBILITY IDEOGRAPH-F926
+F9F6 ; [.99E7.0020.0002.81E8] # CJK COMPATIBILITY IDEOGRAPH-F9F6
+FA5C ; [.BCE6.0020.0002.81ED] # CJK COMPATIBILITY IDEOGRAPH-FA5C
+2F893 ; [.D42F.0020.0002.8201] # CJK COMPATIBILITY IDEOGRAPH-2F893
+2F98B ; [.D42F.0020.0002.8201] # CJK COMPATIBILITY IDEOGRAPH-2F98B
+2F98C ; [.B23F.0020.0002.8204] # CJK COMPATIBILITY IDEOGRAPH-2F98C
+FA6D ; [.9F3F.0020.0002.8218] # CJK COMPATIBILITY IDEOGRAPH-FA6D
+F97C ; [.9A16.0020.0002.826F] # CJK COMPATIBILITY IDEOGRAPH-F97C
+FA5D ; [.C6CB.0020.0002.8279] # CJK COMPATIBILITY IDEOGRAPH-FA5D
+FA5E ; [.C6CB.0020.0002.8279] # CJK COMPATIBILITY IDEOGRAPH-FA5E
+2F990 ; [.D4AD.0020.0002.828B] # CJK COMPATIBILITY IDEOGRAPH-2F990
+2F98F ; [.ADCA.0020.0002.8291] # CJK COMPATIBILITY IDEOGRAPH-2F98F
+2F991 ; [.B6F7.0020.0002.829D] # CJK COMPATIBILITY IDEOGRAPH-2F991
+2F993 ; [.A43F.0020.0002.82B1] # CJK COMPATIBILITY IDEOGRAPH-2F993
+2F994 ; [.8AA5.0020.0002.82B3] # CJK COMPATIBILITY IDEOGRAPH-2F994
+2F995 ; [.CD7E.0020.0002.82BD] # CJK COMPATIBILITY IDEOGRAPH-2F995
+F974 ; [.C386.0020.0002.82E5] # CJK COMPATIBILITY IDEOGRAPH-F974
+2F998 ; [.C386.0020.0002.82E5] # CJK COMPATIBILITY IDEOGRAPH-2F998
+2F996 ; [.A0F5.0020.0002.82E6] # CJK COMPATIBILITY IDEOGRAPH-2F996
+2F999 ; [.BC82.0020.0002.831D] # CJK COMPATIBILITY IDEOGRAPH-2F999
+2F99C ; [.D198.0020.0002.8323] # CJK COMPATIBILITY IDEOGRAPH-2F99C
+F9FE ; [.BC3C.0020.0002.8336] # CJK COMPATIBILITY IDEOGRAPH-F9FE
+FAB3 ; [.A5F7.0020.0002.8352] # CJK COMPATIBILITY IDEOGRAPH-FAB3
+2F9A0 ; [.85CF.0020.0002.8353] # CJK COMPATIBILITY IDEOGRAPH-2F9A0
+2F99A ; [.C3D3.0020.0002.8363] # CJK COMPATIBILITY IDEOGRAPH-2F99A
+2F99B ; [.A86D.0020.0002.83AD] # CJK COMPATIBILITY IDEOGRAPH-2F99B
+2F99D ; [.87E9.0020.0002.83BD] # CJK COMPATIBILITY IDEOGRAPH-2F99D
+F93E ; [.9B03.0020.0002.83C9] # CJK COMPATIBILITY IDEOGRAPH-F93E
+2F9A1 ; [.ABC4.0020.0002.83CA] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
+2F9A2 ; [.ACE3.0020.0002.83CC] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
+2F9A3 ; [.C6B0.0020.0002.83DC] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
+2F99E ; [.8DE0.0020.0002.83E7] # CJK COMPATIBILITY IDEOGRAPH-2F99E
+FAB4 ; [.A44D.0020.0002.83EF] # CJK COMPATIBILITY IDEOGRAPH-FAB4
+F958 ; [.9A69.0020.0002.83F1] # CJK COMPATIBILITY IDEOGRAPH-F958
+F918 ; [.9B7C.0020.0002.843D] # CJK COMPATIBILITY IDEOGRAPH-F918
+F96E ; [.CDE9.0020.0002.8449] # CJK COMPATIBILITY IDEOGRAPH-F96E
+FA5F ; [.B86A.0020.0002.8457] # CJK COMPATIBILITY IDEOGRAPH-FA5F
+2F99F ; [.B86A.0020.0002.8457] # CJK COMPATIBILITY IDEOGRAPH-2F99F
+F999 ; [.9980.0020.0002.84EE] # CJK COMPATIBILITY IDEOGRAPH-F999
+2F9A8 ; [.85DC.0020.0002.84F1] # CJK COMPATIBILITY IDEOGRAPH-2F9A8
+2F9A9 ; [.AA97.0020.0002.84F3] # CJK COMPATIBILITY IDEOGRAPH-2F9A9
+F9C2 ; [.98FD.0020.0002.84FC] # CJK COMPATIBILITY IDEOGRAPH-F9C2
+2F9AA ; [.C74F.0020.0002.8516] # CJK COMPATIBILITY IDEOGRAPH-2F9AA
+2F9AC ; [.C399.0020.0002.8564] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
+F923 ; [.971B.0020.0002.85CD] # CJK COMPATIBILITY IDEOGRAPH-F923
+F9F0 ; [.9A11.0020.0002.85FA] # CJK COMPATIBILITY IDEOGRAPH-F9F0
+F935 ; [.9AC4.0020.0002.8606] # CJK COMPATIBILITY IDEOGRAPH-F935
+FA20 ; [.AEF5.0020.0002.8612] # CJK COMPATIBILITY IDEOGRAPH-FA20
+F91F ; [.9728.0020.0002.862D] # CJK COMPATIBILITY IDEOGRAPH-F91F
+F910 ; [.9B5D.0020.0002.863F] # CJK COMPATIBILITY IDEOGRAPH-F910
+2F9B3 ; [.95D6.0020.0002.8650] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
+F936 ; [.9AD8.0020.0002.865C] # CJK COMPATIBILITY IDEOGRAPH-F936
+2F9B4 ; [.9AD8.0020.0002.865C] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
+2F9B5 ; [.A14D.0020.0002.8667] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
+2F9B6 ; [.B256.0020.0002.8669] # CJK COMPATIBILITY IDEOGRAPH-2F9B6
+2F9B8 ; [.AF15.0020.0002.8688] # CJK COMPATIBILITY IDEOGRAPH-2F9B8
+2F9B7 ; [.BBB2.0020.0002.86A9] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
+2F9BA ; [.85D9.0020.0002.86E2] # CJK COMPATIBILITY IDEOGRAPH-2F9BA
+2F9B9 ; [.D57F.0020.0002.870E] # CJK COMPATIBILITY IDEOGRAPH-2F9B9
+2F9BC ; [.8E3B.0020.0002.8728] # CJK COMPATIBILITY IDEOGRAPH-2F9BC
+2F9BD ; [.BA44.0020.0002.876B] # CJK COMPATIBILITY IDEOGRAPH-2F9BD
+FAB5 ; [.D5EE.0020.0002.8779] # CJK COMPATIBILITY IDEOGRAPH-FAB5
+2F9BB ; [.D5EE.0020.0002.8779] # CJK COMPATIBILITY IDEOGRAPH-2F9BB
+2F9BE ; [.C674.0020.0002.8786] # CJK COMPATIBILITY IDEOGRAPH-2F9BE
+F911 ; [.9B51.0020.0002.87BA] # CJK COMPATIBILITY IDEOGRAPH-F911
+2F9C0 ; [.9EFE.0020.0002.87E1] # CJK COMPATIBILITY IDEOGRAPH-2F9C0
+2F9C1 ; [.B510.0020.0002.8801] # CJK COMPATIBILITY IDEOGRAPH-2F9C1
+F927 ; [.95F9.0020.0002.881F] # CJK COMPATIBILITY IDEOGRAPH-F927
+FA08 ; [.B543.0020.0002.884C] # CJK COMPATIBILITY IDEOGRAPH-FA08
+2F9C3 ; [.BB4D.0020.0002.8860] # CJK COMPATIBILITY IDEOGRAPH-2F9C3
+2F9C4 ; [.CBE0.0020.0002.8863] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
+F9A0 ; [.98B8.0020.0002.88C2] # CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9E7 ; [.97F6.0020.0002.88CF] # CJK COMPATIBILITY IDEOGRAPH-F9E7
+2F9C6 ; [.9919.0020.0002.88D7] # CJK COMPATIBILITY IDEOGRAPH-2F9C6
+2F9C7 ; [.C276.0020.0002.88DE] # CJK COMPATIBILITY IDEOGRAPH-2F9C7
+F9E8 ; [.989C.0020.0002.88E1] # CJK COMPATIBILITY IDEOGRAPH-F9E8
+F912 ; [.9B67.0020.0002.88F8] # CJK COMPATIBILITY IDEOGRAPH-F912
+2F9C9 ; [.CF76.0020.0002.88FA] # CJK COMPATIBILITY IDEOGRAPH-2F9C9
+FA60 ; [.A282.0020.0002.8910] # CJK COMPATIBILITY IDEOGRAPH-FA60
+FAB6 ; [.B011.0020.0002.8941] # CJK COMPATIBILITY IDEOGRAPH-FAB6
+F924 ; [.9724.0020.0002.8964] # CJK COMPATIBILITY IDEOGRAPH-F924
+FAB7 ; [.8BFE.0020.0002.8986] # CJK COMPATIBILITY IDEOGRAPH-FAB7
+FA0A ; [.AA1C.0020.0002.898B] # CJK COMPATIBILITY IDEOGRAPH-FA0A
+FA61 ; [.BFE1.0020.0002.8996] # CJK COMPATIBILITY IDEOGRAPH-FA61
+FAB8 ; [.BFE1.0020.0002.8996] # CJK COMPATIBILITY IDEOGRAPH-FAB8
+2F9CF ; [.BE22.0020.0002.8AA0] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
+F96F ; [.C24F.0020.0002.8AAA] # CJK COMPATIBILITY IDEOGRAPH-F96F
+F9A1 ; [.C24F.0020.0002.8AAA] # CJK COMPATIBILITY IDEOGRAPH-F9A1
+FAB9 ; [.8E75.0020.0002.8ABF] # CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABB ; [.B047.0020.0002.8ACB] # CJK COMPATIBILITY IDEOGRAPH-FABB
+F97D ; [.9A3C.0020.0002.8AD2] # CJK COMPATIBILITY IDEOGRAPH-F97D
+F941 ; [.9BCB.0020.0002.8AD6] # CJK COMPATIBILITY IDEOGRAPH-F941
+FABE ; [.D502.0020.0002.8AED] # CJK COMPATIBILITY IDEOGRAPH-FABE
+2F9D0 ; [.D502.0020.0002.8AED] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
+FA22 ; [.BA48.0020.0002.8AF8] # CJK COMPATIBILITY IDEOGRAPH-FA22
+FABA ; [.BA48.0020.0002.8AF8] # CJK COMPATIBILITY IDEOGRAPH-FABA
+F95D ; [.95A4.0020.0002.8AFE] # CJK COMPATIBILITY IDEOGRAPH-F95D
+FABD ; [.95A4.0020.0002.8AFE] # CJK COMPATIBILITY IDEOGRAPH-FABD
+FA62 ; [.CDF9.0020.0002.8B01] # CJK COMPATIBILITY IDEOGRAPH-FA62
+FABC ; [.CDF9.0020.0002.8B01] # CJK COMPATIBILITY IDEOGRAPH-FABC
+FA63 ; [.AA9A.0020.0002.8B39] # CJK COMPATIBILITY IDEOGRAPH-FA63
+FABF ; [.AA9A.0020.0002.8B39] # CJK COMPATIBILITY IDEOGRAPH-FABF
+F9FC ; [.C017.0020.0002.8B58] # CJK COMPATIBILITY IDEOGRAPH-F9FC
+F95A ; [.8F10.0020.0002.8B80] # CJK COMPATIBILITY IDEOGRAPH-F95A
+FAC0 ; [.831E.0020.0002.8B8A] # CJK COMPATIBILITY IDEOGRAPH-FAC0
+2F9D1 ; [.831E.0020.0002.8B8A] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
+F900 ; [.ADCC.0020.0002.8C48] # CJK COMPATIBILITY IDEOGRAPH-F900
+2F9D2 ; [.BFAB.0020.0002.8C55] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
+2F9D4 ; [.9F4B.0020.0002.8CAB] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
+2F9D5 ; [.8245.0020.0002.8CC1] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
+F948 ; [.9B0D.0020.0002.8CC2] # CJK COMPATIBILITY IDEOGRAPH-F948
+F903 ; [.A822.0020.0002.8CC8] # CJK COMPATIBILITY IDEOGRAPH-F903
+FA64 ; [.8331.0020.0002.8CD3] # CJK COMPATIBILITY IDEOGRAPH-FA64
+FA65 ; [.C56B.0020.0002.8D08] # CJK COMPATIBILITY IDEOGRAPH-FA65
+FAC1 ; [.C56B.0020.0002.8D08] # CJK COMPATIBILITY IDEOGRAPH-FAC1
+2F9D6 ; [.9D8F.0020.0002.8D1B] # CJK COMPATIBILITY IDEOGRAPH-2F9D6
+2F9D7 ; [.ADCD.0020.0002.8D77] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
+2F9DB ; [.A9FA.0020.0002.8DBC] # CJK COMPATIBILITY IDEOGRAPH-2F9DB
+2F9DA ; [.8024.0020.0002.8DCB] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
+F937 ; [.9B0E.0020.0002.8DEF] # CJK COMPATIBILITY IDEOGRAPH-F937
+2F9DC ; [.8589.0020.0002.8DF0] # CJK COMPATIBILITY IDEOGRAPH-2F9DC
+F902 ; [.BC58.0020.0002.8ECA] # CJK COMPATIBILITY IDEOGRAPH-F902
+2F9DE ; [.C321.0020.0002.8ED4] # CJK COMPATIBILITY IDEOGRAPH-2F9DE
+F998 ; [.9549.0020.0002.8F26] # CJK COMPATIBILITY IDEOGRAPH-F998
+F9D7 ; [.9BC2.0020.0002.8F2A] # CJK COMPATIBILITY IDEOGRAPH-F9D7
+FAC2 ; [.C1FB.0020.0002.8F38] # CJK COMPATIBILITY IDEOGRAPH-FAC2
+2F9DF ; [.C1FB.0020.0002.8F38] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
+FA07 ; [.8B97.0020.0002.8F3B] # CJK COMPATIBILITY IDEOGRAPH-FA07
+F98D ; [.988A.0020.0002.8F62] # CJK COMPATIBILITY IDEOGRAPH-F98D
+2F98D ; [.C64B.0020.0002.8F9E] # CJK COMPATIBILITY IDEOGRAPH-2F98D
+F971 ; [.BD5F.0020.0002.8FB0] # CJK COMPATIBILITY IDEOGRAPH-F971
+FA66 ; [.BE9F.0020.0002.8FB6] # CJK COMPATIBILITY IDEOGRAPH-FA66
+F99A ; [.996B.0020.0002.9023] # CJK COMPATIBILITY IDEOGRAPH-F99A
+FA25 ; [.CCEA.0020.0002.9038] # CJK COMPATIBILITY IDEOGRAPH-FA25
+FA67 ; [.CCEA.0020.0002.9038] # CJK COMPATIBILITY IDEOGRAPH-FA67
+FAC3 ; [.BBE0.0020.0002.9072] # CJK COMPATIBILITY IDEOGRAPH-FAC3
+F9C3 ; [.98E6.0020.0002.907C] # CJK COMPATIBILITY IDEOGRAPH-F9C3
+F913 ; [.9B5E.0020.0002.908F] # CJK COMPATIBILITY IDEOGRAPH-F913
+2F9E2 ; [.ADC4.0020.0002.9094] # CJK COMPATIBILITY IDEOGRAPH-2F9E2
+F92C ; [.975C.0020.0002.90CE] # CJK COMPATIBILITY IDEOGRAPH-F92C
+FA2E ; [.975F.0020.0002.90DE] # CJK COMPATIBILITY IDEOGRAPH-FA2E
+2F9E3 ; [.85CC.0020.0002.90F1] # CJK COMPATIBILITY IDEOGRAPH-2F9E3
+FA26 ; [.8CC2.0020.0002.90FD] # CJK COMPATIBILITY IDEOGRAPH-FA26
+2F9E4 ; [.C423.0020.0002.9111] # CJK COMPATIBILITY IDEOGRAPH-2F9E4
+2F9E6 ; [.BC9D.0020.0002.911B] # CJK COMPATIBILITY IDEOGRAPH-2F9E6
+F919 ; [.96C8.0020.0002.916A] # CJK COMPATIBILITY IDEOGRAPH-F919
+FAC4 ; [.C8CB.0020.0002.9199] # CJK COMPATIBILITY IDEOGRAPH-FAC4
+F9B7 ; [.97FF.0020.0002.91B4] # CJK COMPATIBILITY IDEOGRAPH-F9B7
+F9E9 ; [.97EB.0020.0002.91CC] # CJK COMPATIBILITY IDEOGRAPH-F9E9
+F97E ; [.9A3A.0020.0002.91CF] # CJK COMPATIBILITY IDEOGRAPH-F97E
+F90A ; [.AA72.0020.0002.91D1] # CJK COMPATIBILITY IDEOGRAPH-F90A
+F9B1 ; [.9A6E.0020.0002.9234] # CJK COMPATIBILITY IDEOGRAPH-F9B1
+2F9E7 ; [.8086.0020.0002.9238] # CJK COMPATIBILITY IDEOGRAPH-2F9E7
+FAC5 ; [.B553.0020.0002.9276] # CJK COMPATIBILITY IDEOGRAPH-FAC5
+2F9EA ; [.8369.0020.0002.927C] # CJK COMPATIBILITY IDEOGRAPH-2F9EA
+2F9E8 ; [.B62C.0020.0002.92D7] # CJK COMPATIBILITY IDEOGRAPH-2F9E8
+2F9E9 ; [.A455.0020.0002.92D8] # CJK COMPATIBILITY IDEOGRAPH-2F9E9
+F93F ; [.9B23.0020.0002.9304] # CJK COMPATIBILITY IDEOGRAPH-F93F
+F99B ; [.99BE.0020.0002.934A] # CJK COMPATIBILITY IDEOGRAPH-F99B
+2F9EB ; [.B013.0020.0002.93F9] # CJK COMPATIBILITY IDEOGRAPH-2F9EB
+2F9EC ; [.C516.0020.0002.9415] # CJK COMPATIBILITY IDEOGRAPH-2F9EC
+2F9EE ; [.A032.0020.0002.958B] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
+F986 ; [.9C1F.0020.0002.95AD] # CJK COMPATIBILITY IDEOGRAPH-F986
+2F9F0 ; [.C083.0020.0002.95B7] # CJK COMPATIBILITY IDEOGRAPH-2F9F0
+F9C6 ; [.C3B3.0020.0002.962E] # CJK COMPATIBILITY IDEOGRAPH-F9C6
+F951 ; [.96FA.0020.0002.964B] # CJK COMPATIBILITY IDEOGRAPH-F951
+FA09 ; [.AB03.0020.0002.964D] # CJK COMPATIBILITY IDEOGRAPH-FA09
+F959 ; [.9A68.0020.0002.9675] # CJK COMPATIBILITY IDEOGRAPH-F959
+F9D3 ; [.9AFC.0020.0002.9678] # CJK COMPATIBILITY IDEOGRAPH-F9D3
+FAC6 ; [.BA71.0020.0002.967C] # CJK COMPATIBILITY IDEOGRAPH-FAC6
+F9DC ; [.9BDC.0020.0002.9686] # CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9F1 ; [.99DD.0020.0002.96A3] # CJK COMPATIBILITY IDEOGRAPH-F9F1
+FA2F ; [.9859.0020.0002.96B7] # CJK COMPATIBILITY IDEOGRAPH-FA2F
+F9B8 ; [.985F.0020.0002.96B8] # CJK COMPATIBILITY IDEOGRAPH-F9B8
+2F9F3 ; [.AF18.0020.0002.96C3] # CJK COMPATIBILITY IDEOGRAPH-2F9F3
+F9EA ; [.97D0.0020.0002.96E2] # CJK COMPATIBILITY IDEOGRAPH-F9EA
+FA68 ; [.9467.0020.0002.96E3] # CJK COMPATIBILITY IDEOGRAPH-FA68
+FAC7 ; [.9467.0020.0002.96E3] # CJK COMPATIBILITY IDEOGRAPH-FAC7
+F9B2 ; [.9A70.0020.0002.96F6] # CJK COMPATIBILITY IDEOGRAPH-F9B2
+F949 ; [.964D.0020.0002.96F7] # CJK COMPATIBILITY IDEOGRAPH-F949
+2F9F5 ; [.D625.0020.0002.9723] # CJK COMPATIBILITY IDEOGRAPH-2F9F5
+F938 ; [.9B37.0020.0002.9732] # CJK COMPATIBILITY IDEOGRAPH-F938
+F9B3 ; [.9A8D.0020.0002.9748] # CJK COMPATIBILITY IDEOGRAPH-F9B3
+FA1C ; [.AB77.0020.0002.9756] # CJK COMPATIBILITY IDEOGRAPH-FA1C
+FAC8 ; [.AB77.0020.0002.9756] # CJK COMPATIBILITY IDEOGRAPH-FAC8
+FAC9 ; [.80D4.0020.0002.97DB] # CJK COMPATIBILITY IDEOGRAPH-FAC9
+2F9FA ; [.8286.0020.0002.97E0] # CJK COMPATIBILITY IDEOGRAPH-2F9FA
+FA69 ; [.B512.0020.0002.97FF] # CJK COMPATIBILITY IDEOGRAPH-FA69
+FACA ; [.B512.0020.0002.97FF] # CJK COMPATIBILITY IDEOGRAPH-FACA
+FACB ; [.CA47.0020.0002.980B] # CJK COMPATIBILITY IDEOGRAPH-FACB
+2F9FE ; [.CA47.0020.0002.980B] # CJK COMPATIBILITY IDEOGRAPH-2F9FE
+2F9FF ; [.CA47.0020.0002.980B] # CJK COMPATIBILITY IDEOGRAPH-2F9FF
+F9B4 ; [.9A99.0020.0002.9818] # CJK COMPATIBILITY IDEOGRAPH-F9B4
+2FA00 ; [.85BD.0020.0002.9829] # CJK COMPATIBILITY IDEOGRAPH-2FA00
+FA6A ; [.85A6.0020.0002.983B] # CJK COMPATIBILITY IDEOGRAPH-FA6A
+FACC ; [.85A6.0020.0002.983B] # CJK COMPATIBILITY IDEOGRAPH-FACC
+F9D0 ; [.9693.0020.0002.985E] # CJK COMPATIBILITY IDEOGRAPH-F9D0
+2FA02 ; [.A6B2.0020.0002.98E2] # CJK COMPATIBILITY IDEOGRAPH-2FA02
+FA2A ; [.8A4D.0020.0002.98EF] # CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B ; [.C84E.0020.0002.98FC] # CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C ; [.9F41.0020.0002.9928] # CJK COMPATIBILITY IDEOGRAPH-FA2C
+2FA04 ; [.CA8F.0020.0002.9929] # CJK COMPATIBILITY IDEOGRAPH-2FA04
+2FA05 ; [.D5F2.0020.0002.99A7] # CJK COMPATIBILITY IDEOGRAPH-2FA05
+2FA06 ; [.813C.0020.0002.99C2] # CJK COMPATIBILITY IDEOGRAPH-2FA06
+F91A ; [.9B82.0020.0002.99F1] # CJK COMPATIBILITY IDEOGRAPH-F91A
+2FA07 ; [.9361.0020.0002.99FE] # CJK COMPATIBILITY IDEOGRAPH-2FA07
+F987 ; [.97E7.0020.0002.9A6A] # CJK COMPATIBILITY IDEOGRAPH-F987
+FACD ; [.B997.0020.0002.9B12] # CJK COMPATIBILITY IDEOGRAPH-FACD
+2FA0A ; [.B997.0020.0002.9B12] # CJK COMPATIBILITY IDEOGRAPH-2FA0A
+F939 ; [.9ADD.0020.0002.9B6F] # CJK COMPATIBILITY IDEOGRAPH-F939
+2FA0B ; [.A7C3.0020.0002.9C40] # CJK COMPATIBILITY IDEOGRAPH-2FA0B
+F9F2 ; [.99F1.0020.0002.9C57] # CJK COMPATIBILITY IDEOGRAPH-F9F2
+2FA0C ; [.A9BB.0020.0002.9CFD] # CJK COMPATIBILITY IDEOGRAPH-2FA0C
+2FA0F ; [.8528.0020.0002.9D67] # CJK COMPATIBILITY IDEOGRAPH-2FA0F
+FA2D ; [.A28C.0020.0002.9DB4] # CJK COMPATIBILITY IDEOGRAPH-FA2D
+F93A ; [.9B3A.0020.0002.9DFA] # CJK COMPATIBILITY IDEOGRAPH-F93A
+F920 ; [.9BA4.0020.0002.9E1E] # CJK COMPATIBILITY IDEOGRAPH-F920
+F940 ; [.9AFD.0020.0002.9E7F] # CJK COMPATIBILITY IDEOGRAPH-F940
+F988 ; [.9871.0020.0002.9E97] # CJK COMPATIBILITY IDEOGRAPH-F988
+F9F3 ; [.99F2.0020.0002.9E9F] # CJK COMPATIBILITY IDEOGRAPH-F9F3
+2FA15 ; [.862D.0020.0002.9EBB] # CJK COMPATIBILITY IDEOGRAPH-2FA15
+F989 ; [.97C2.0020.0002.9ECE] # CJK COMPATIBILITY IDEOGRAPH-F989
+2FA17 ; [.B762.0020.0002.9EF9] # CJK COMPATIBILITY IDEOGRAPH-2FA17
+2FA18 ; [.88D4.0020.0002.9EFE] # CJK COMPATIBILITY IDEOGRAPH-2FA18
+2FA19 ; [.B715.0020.0002.9F05] # CJK COMPATIBILITY IDEOGRAPH-2FA19
+2FA1A ; [.8885.0020.0002.9F0F] # CJK COMPATIBILITY IDEOGRAPH-2FA1A
+2FA1B ; [.8A85.0020.0002.9F16] # CJK COMPATIBILITY IDEOGRAPH-2FA1B
+2FA1C ; [.81FB.0020.0002.9F3B] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
+FAD8 ; [.CA9A.0020.0002.9F43] # CJK COMPATIBILITY IDEOGRAPH-FAD8
+F9C4 ; [.9BE4.0020.0002.9F8D] # CJK COMPATIBILITY IDEOGRAPH-F9C4
+FAD9 ; [.8497.0020.0002.9F8E] # CJK COMPATIBILITY IDEOGRAPH-FAD9
+F907 ; [.9ED7.0020.0002.9F9C] # CJK COMPATIBILITY IDEOGRAPH-F907
+F908 ; [.9ED7.0020.0002.9F9C] # CJK COMPATIBILITY IDEOGRAPH-F908
+FACE ; [.9ED7.0020.0002.9F9C] # CJK COMPATIBILITY IDEOGRAPH-FACE
+2F81F ; [.8505.0020.0002.34DF] # CJK COMPATIBILITY IDEOGRAPH-2F81F
+2F888 ; [.87AA.0020.0002.3862] # CJK COMPATIBILITY IDEOGRAPH-2F888
+2F8D0 ; [.D37C.0020.0002.3B08] # CJK COMPATIBILITY IDEOGRAPH-2F8D0
+2F8CE ; [.D2E0.0020.0002.3B19] # CJK COMPATIBILITY IDEOGRAPH-2F8CE
+2F8DE ; [.A447.0020.0002.3B49] # CJK COMPATIBILITY IDEOGRAPH-2F8DE
+2F8EE ; [.CC56.0020.0002.3C18] # CJK COMPATIBILITY IDEOGRAPH-2F8EE
+2F90A ; [.9C08.0020.0002.3D33] # CJK COMPATIBILITY IDEOGRAPH-2F90A
+2F92C ; [.85CD.0020.0002.3EB8] # CJK COMPATIBILITY IDEOGRAPH-2F92C
+2F92D ; [.85CD.0020.0002.3EB8] # CJK COMPATIBILITY IDEOGRAPH-2F92D
+FAD4 ; [.A871.0020.0002.4039] # CJK COMPATIBILITY IDEOGRAPH-FAD4
+2F949 ; [.A871.0020.0002.4039] # CJK COMPATIBILITY IDEOGRAPH-2F949
+2F960 ; [.85E0.0020.0002.4202] # CJK COMPATIBILITY IDEOGRAPH-2F960
+2F96D ; [.CE1D.0020.0002.4301] # CJK COMPATIBILITY IDEOGRAPH-2F96D
+2F8D7 ; [.9118.0020.0002.43D9] # CJK COMPATIBILITY IDEOGRAPH-2F8D7
+2FA0E ; [.A746.0020.0002.4CED] # CJK COMPATIBILITY IDEOGRAPH-2FA0E
+ENTRY
+};
Added: vendor/perl/dist/cpan/Unicode-Collate/t/cjk_zy.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/cjk_zy.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/cjk_zy.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,87 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..26\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate;
+
+ok(1);
+
+#########################
+
+use Unicode::Collate::CJK::Zhuyin;
+
+my $collator = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin
+);
+
+sub hex_sort {
+ my @source = map pack('U', hex $_), split ' ', shift;
+ my @sorted = $collator->sort(@source);
+ return join " ", map sprintf("%04X", unpack 'U', $_), @sorted;
+}
+
+# 1
+
+$collator->change(level => 1);
+
+ok($collator->lt("\x{516B}", "\x{628A}"));
+ok($collator->lt("\x{628A}", "\x{5DF4}"));
+ok($collator->lt("\x{5DF4}", "\x{767D}"));
+ok($collator->lt("\x{767D}", "\x{5317}"));
+ok($collator->lt("\x{5317}", "\x{9F3B}"));
+ok($collator->lt("\x{9F3B}", "\x{4E0D}"));
+ok($collator->lt("\x{4E0D}", "\x{547D}"));
+ok($collator->lt("\x{547D}", "\x{6BCD}"));
+ok($collator->lt("\x{6BCD}", "\x{6253}"));
+ok($collator->lt("\x{6253}", "\x{7530}"));
+ok($collator->lt("\x{7530}", "\x{52AA}"));
+ok($collator->lt("\x{52AA}", "\x{529B}"));
+ok($collator->lt("\x{529B}", "\x{5375}"));
+ok($collator->lt("\x{5375}", "\x{5149}"));
+ok($collator->lt("\x{5149}", "\x{5915}"));
+ok($collator->lt("\x{5915}", "\x{4E09}"));
+ok($collator->lt("\x{4E09}", "\x{4E00}"));
+ok($collator->lt("\x{4E00}", "\x{7528}"));
+
+# Ext.B
+ok($collator->lt("\x{20000}", "\x{20001}"));
+ok($collator->lt("\x{20001}", "\x{20002}"));
+ok($collator->lt("\x{20002}", "\x{20003}"));
+ok($collator->lt("\x{20003}", "\x{20004}"));
+ok($collator->lt("\x{20004}", "\x{20005}"));
+
+# 24
+
+ok(hex_sort('4E00 4E8C 4E09 56DB 4E94 516D 4E03 516B 4E5D 5341'),
+ '516B 516D 4E5D 4E03 5341 56DB 4E09 4E8C 4E00 4E94');
+
+
+
+ok(hex_sort('4E0C 4E8D 4F5C 5140 554A 5750 57C3 5EA7 963F 9F3D 9F3E 9F44'),
+ '9F3E 4E0C 9F3D 9F44 4E8D 4F5C 5750 5EA7 963F 554A 57C3 5140');
+
+# 26
Added: vendor/perl/dist/cpan/Unicode-Collate/t/ident.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/ident.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/ident.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,161 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..45\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate;
+
+ok(1);
+
+#########################
+
+my $Collator = Unicode::Collate->new(
+ table => 'keys.txt',
+ normalization => undef,
+);
+
+# [001F] UNIT SEPARATOR
+{
+ ok($Collator->eq("\0", "\x1F"));
+ ok($Collator->eq("\x1F", "\x{200B}"));
+ ok($Collator->eq("\0", "\x{200B}"));
+ ok($Collator->eq("\x{313}", "\x{343}"));
+ ok($Collator->eq("\x{2000}", "\x{2001}"));
+ ok($Collator->eq("\x{200B}", "\x{200C}"));
+ ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
+
+ $Collator->change(identical => 1);
+
+ ok($Collator->lt("\0", "\x1F"));
+ ok($Collator->lt("\x1F", "\x{200B}"));
+ ok($Collator->lt("\0", "\x{200B}"));
+ ok($Collator->lt("\x{313}", "\x{343}"));
+ ok($Collator->lt("\x{2000}", "\x{2001}"));
+ ok($Collator->lt("\x{200B}", "\x{200C}"));
+ ok($Collator->gt("\x{304C}", "\x{304B}\x{3099}"));
+
+ $Collator->change(identical => 0);
+
+ ok($Collator->eq("\0", "\x1F"));
+ ok($Collator->eq("\x1F", "\x{200B}"));
+ ok($Collator->eq("\0", "\x{200B}"));
+ ok($Collator->eq("\x{313}", "\x{343}"));
+ ok($Collator->eq("\x{2000}", "\x{2001}"));
+ ok($Collator->eq("\x{200B}", "\x{200C}"));
+ ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
+}
+
+#### 22
+
+eval { require Unicode::Normalize };
+if (!$@) {
+ $Collator->change(normalization => "NFD");
+
+ $Collator->change(identical => 1);
+
+ ok($Collator->lt("\0", "\x{200B}"));
+ ok($Collator->eq("\x{313}", "\x{343}"));
+ ok($Collator->lt("\x{2000}", "\x{2001}"));
+ ok($Collator->lt("\x{200B}", "\x{200C}"));
+ ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
+
+ $Collator->change(identical => 0);
+
+ ok($Collator->eq("\0", "\x{200B}"));
+ ok($Collator->eq("\x{313}", "\x{343}"));
+ ok($Collator->eq("\x{2000}", "\x{2001}"));
+ ok($Collator->eq("\x{200B}", "\x{200C}"));
+ ok($Collator->eq("\x{304C}", "\x{304B}\x{3099}"));
+} else {
+ ok(1) for 1..10;
+}
+
+$Collator->change(normalization => undef, identical => 1);
+
+##### 32
+
+ok($Collator->viewSortKey("\0"), '[| | | | 0000 0000]');
+ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]');
+
+ok($Collator->viewSortKey('a'),
+ '[0A15 | 0020 | 0002 | FFFF | 0000 0061]');
+
+ok($Collator->viewSortKey("\x{304C}"),
+ '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]');
+
+ok($Collator->viewSortKey("\x{100000}"),
+ '[FBE0 8000 | 0020 | 0002 | FFFF FFFF | 0010 0000]');
+
+eval { require Unicode::Normalize };
+if (!$@) {
+ $Collator->change(normalization => "NFD");
+
+ ok($Collator->viewSortKey("\x{304C}"),
+ '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304B 0000 3099]');
+} else {
+ ok(1);
+}
+
+$Collator->change(normalization => undef);
+
+##### 38
+
+$Collator->change(level => 3);
+
+ok($Collator->viewSortKey("\x{304C}"),
+ '[1926 | 0020 013D | 000E 0002 | | 0000 304C]');
+
+$Collator->change(level => 2);
+
+ok($Collator->viewSortKey("\x{304C}"),
+ '[1926 | 0020 013D | | | 0000 304C]');
+
+$Collator->change(level => 1);
+
+ok($Collator->viewSortKey("\x{304C}"),
+ '[1926 | | | | 0000 304C]');
+
+##### 41
+
+$Collator->change(UCA_Version => 8);
+
+ok($Collator->viewSortKey("\x{304C}"),
+ '[1926||||0000 304C]');
+
+$Collator->change(level => 2);
+
+ok($Collator->viewSortKey("\x{304C}"),
+ '[1926|0020 013D|||0000 304C]');
+
+$Collator->change(level => 3);
+
+ok($Collator->viewSortKey("\x{304C}"),
+ '[1926|0020 013D|000E 0002||0000 304C]');
+
+$Collator->change(level => 4);
+
+ok($Collator->viewSortKey("\x{304C}"),
+ '[1926|0020 013D|000E 0002|FFFF FFFF|0000 304C]');
+
+##### 45
Added: vendor/perl/dist/cpan/Unicode-Collate/t/iglevel2.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/iglevel2.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/iglevel2.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,226 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..42\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate;
+
+ok(1);
+
+#########################
+
+my $Collator = Unicode::Collate->new(
+ table => 'keys.txt',
+ normalization => undef,
+ ignore_level2 => 1,
+ entry => << 'ENTRIES',
+1B00 ; [.0000.00FF.0002.1B00] # BALINESE SIGN ULU RICEM
+1B01 ; [.0000.0100.0002.1B01] # BALINESE SIGN ULU CANDRA
+1B02 ; [.0000.0101.0002.1B02] # BALINESE SIGN CECEK
+03C6 ; [.1900.0020.0002.03C6] # GREEK SMALL LETTER PHI
+03D5 ; [.1900.0020.0004.03D5] # GREEK PHI SYMBOL; QQK
+03A6 ; [.1900.0020.0008.03A6] # GREEK CAPITAL LETTER PHI
+ENTRIES
+);
+
+ok($Collator->eq("camel", "came\x{300}l"));
+ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
+ok($Collator->lt("camel", "Camel"));
+
+# 4
+
+$Collator->change(ignore_level2 => 0);
+
+ok($Collator->lt("camel", "came\x{300}l"));
+ok($Collator->lt("camel", "ca\x{300}me\x{301}l"));
+ok($Collator->lt("camel", "Camel"));
+
+$Collator->change(level => 1);
+
+ok($Collator->eq("camel", "came\x{300}l"));
+ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
+ok($Collator->eq("camel", "Camel"));
+
+$Collator->change(level => 2);
+
+ok($Collator->lt("camel", "came\x{300}l"));
+ok($Collator->lt("camel", "ca\x{300}me\x{301}l"));
+ok($Collator->eq("camel", "Camel"));
+
+# 13
+
+$Collator->change(ignore_level2 => 1);
+
+ok($Collator->eq("camel", "came\x{300}l"));
+ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
+ok($Collator->eq("camel", "Camel"));
+
+$Collator->change(level => 3);
+
+ok($Collator->eq("camel", "came\x{300}l"));
+ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
+ok($Collator->lt("camel", "Camel"));
+
+# secondary: neither 00FF nor 0100 is zero
+ok($Collator->eq("camel", "came\x{1B00}l"));
+ok($Collator->eq("camel", "came\x{1B01}l"));
+ok($Collator->eq("camel", "came\x{1B02}l"));
+
+# primary: 1900 isn't zero
+ok($Collator->lt("\x{3C6}", "\x{3D5}"));
+ok($Collator->lt("\x{3D5}", "\x{3A6}"));
+
+# 24
+
+{
+ my $s;
+ my $txt = "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L.";
+
+ $Collator->change(ignore_level2 => 0, level => 1);
+
+ $s = $txt;
+ $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
+ ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=.");
+
+ $Collator->change(level => 2);
+
+ $s = $txt;
+ $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
+ ok($s, "=Camel= donkey zebra came\x{301}l =CAMEL= horse =cAm\0E\0L=.");
+
+ $Collator->change(level => 3);
+
+ $s = $txt;
+ $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
+ ok($s, "Camel donkey zebra came\x{301}l CAMEL horse cAm\0E\0L.");
+
+ $Collator->change(ignore_level2 => 1);
+
+ $s = $txt;
+ $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
+ ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse cAm\0E\0L.");
+
+ $Collator->change(level => 2);
+ $s = $txt;
+ $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
+ ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=.");
+
+ $Collator->change(level => 1);
+ $s = $txt;
+ $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
+ ok($s, "=Camel= donkey zebra =came\x{301}l= =CAMEL= horse =cAm\0E\0L=.");
+
+}
+
+# 30
+
+{
+ my $c = Unicode::Collate->new(
+ table => 'keys.txt', normalization => undef, level => 1,
+ );
+ my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
+ $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
+ ok($str, "<b>Camel</b> donkey zebra <b>came\x{301}l</b> <b>CAMEL</b> horse <b>cam\0e\0l</b>...");
+}
+
+{
+ my $c = Unicode::Collate->new(
+ table => 'keys.txt', normalization => undef, level => 2,
+ );
+ my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
+ $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
+ ok($str, "<b>Camel</b> donkey zebra came\x{301}l <b>CAMEL</b> horse <b>cam\0e\0l</b>...");
+}
+
+{
+ my $c = Unicode::Collate->new(
+ table => 'keys.txt', normalization => undef, ignore_level2 => 1,
+ );
+ my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
+ $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
+ ok($str, "Camel donkey zebra <b>came\x{301}l</b> CAMEL horse <b>cam\0e\0l</b>...");
+}
+
+{
+ my $c = Unicode::Collate->new(
+ table => 'keys.txt', normalization => undef, level => 3,
+ );
+ my $str = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l...";
+ $c->gsubst($str, "camel", sub { "<b>$_[0]</b>" });
+ ok($str, "Camel donkey zebra came\x{301}l CAMEL horse <b>cam\0e\0l</b>...");
+}
+
+# 34
+
+{
+ my $str;
+ my $camel = "camel Camel came\x{301}l c-a-m-e-l cam\0e\0l";
+
+ $Collator->change(ignore_level2 => 0);
+
+ $Collator->change(level => 1);
+ $str = $camel;
+ $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
+ ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
+
+ $Collator->change(level => 2);
+ $str = $camel;
+ $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
+ ok($str, "=camel= =Camel= came\x{301}l =c-a-m-e-l= =cam\0e\0l=");
+
+ $Collator->change(level => 3);
+ $str = $camel;
+ $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
+ ok($str, "=camel= Camel came\x{301}l =c-a-m-e-l= =cam\0e\0l=");
+
+ $Collator->change(level => 4);
+ $str = $camel;
+ $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
+ ok($str, "=camel= Camel came\x{301}l c-a-m-e-l =cam\0e\0l=");
+
+ $Collator->change(ignore_level2 => 1);
+
+ $Collator->change(level => 1);
+ $str = $camel;
+ $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
+ ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
+
+ $Collator->change(level => 2);
+ $str = $camel;
+ $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
+ ok($str, "=camel= =Camel= =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
+
+ $Collator->change(level => 3);
+ $str = $camel;
+ $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
+ ok($str, "=camel= Camel =came\x{301}l= =c-a-m-e-l= =cam\0e\0l=");
+
+ $Collator->change(level => 4);
+ $str = $camel;
+ $Collator->gsubst($str, "camel", sub { "=$_[0]=" });
+ ok($str, "=camel= Camel =came\x{301}l= c-a-m-e-l =cam\0e\0l=");
+}
+
+# 42
+
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_as.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_as.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_as.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,58 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..24\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objAs = Unicode::Collate::Locale->
+ new(locale => 'AS', normalization => undef);
+
+ok($objAs->getlocale, 'as');
+
+$objAs->change(level => 1);
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objAs->change(highestFFFF => 1) if $h;
+
+ ok($objAs->lt("\x{993}$t", "\x{994}"));
+ ok($objAs->lt("\x{994}$t", "\x{982}"));
+ ok($objAs->lt("\x{982}$t", "\x{981}"));
+ ok($objAs->lt("\x{981}$t", "\x{983}"));
+ ok($objAs->lt("\x{983}$t", "\x{995}"));
+
+ ok($objAs->lt("\x{9A2}$t", "\x{9A3}"));
+ ok($objAs->lt("\x{9A3}$t", "\x{9A4}\x{9CD}\x{200D}"));
+ ok($objAs->lt("\x{9A4}\x{9CD}\x{200D}$t", "\x{9A4}"));
+
+ ok($objAs->lt("\x{9B8}$t", "\x{9B9}"));
+ ok($objAs->lt("\x{9B9}$t", "\x{995}\x{9CD}\x{9B7}"));
+ ok($objAs->lt("\x{995}\x{9CD}\x{9B7}$t", "\x{9BD}"));
+}
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_bn.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_bn.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_bn.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,50 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..12\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objBn = Unicode::Collate::Locale->
+ new(locale => 'BN', normalization => undef);
+
+ok($objBn->getlocale, 'bn');
+
+$objBn->change(level => 1);
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objBn->change(highestFFFF => 1) if $h;
+
+ ok($objBn->lt("\x{993}$t", "\x{994}"));
+ ok($objBn->lt("\x{994}$t", "\x{982}"));
+ ok($objBn->lt("\x{982}$t", "\x{983}"));
+ ok($objBn->lt("\x{983}$t", "\x{981}"));
+ ok($objBn->lt("\x{981}$t", "\x{995}"));
+}
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_bs.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_bs.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_bs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,194 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..118\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objBs = Unicode::Collate::Locale->
+ new(locale => 'BS', normalization => undef);
+
+ok($objBs->getlocale, 'bs');
+
+$objBs->change(level => 1);
+
+ok($objBs->lt("c", "c\x{30C}"));
+ok($objBs->lt("c\x{30C}", "c\x{301}"));
+ok($objBs->gt("d", "c\x{301}"));
+ok($objBs->lt("d", "dz\x{30C}"));
+ok($objBs->lt("dzz", "dz\x{30C}"));
+ok($objBs->lt("dz\x{30C}", "d\x{335}"));
+ok($objBs->gt("e", "d\x{335}"));
+ok($objBs->lt("l", "lj"));
+ok($objBs->lt("lz","lj"));
+ok($objBs->gt("m", "lj"));
+ok($objBs->lt("n", "nj"));
+ok($objBs->lt("nz","nj"));
+ok($objBs->gt("o", "nj"));
+ok($objBs->lt("s", "s\x{30C}"));
+ok($objBs->lt("sz","s\x{30C}"));
+ok($objBs->gt("t", "s\x{30C}"));
+ok($objBs->lt("z", "z\x{30C}"));
+ok($objBs->lt("zz","z\x{30C}"));
+ok($objBs->lt("z\x{30C}", "\x{292}")); # U+0292 EZH
+
+# 21
+
+# not tailored
+ok($objBs->lt("dZ\x{30C}","dz\x{30C}"));
+ok($objBs->lt("lJ", "lj"));
+ok($objBs->lt("nJ", "nj"));
+
+# 24
+
+$objBs->change(level => 2);
+
+ok($objBs->eq("c\x{30C}", "C\x{30C}"));
+ok($objBs->eq("c\x{301}", "C\x{301}"));
+ok($objBs->eq("dz\x{30C}","Dz\x{30C}"));
+ok($objBs->eq("Dz\x{30C}","DZ\x{30C}"));
+ok($objBs->eq("d\x{335}", "D\x{335}"));
+ok($objBs->eq("lj", "Lj"));
+ok($objBs->eq("Lj", "LJ"));
+ok($objBs->eq("nj", "Nj"));
+ok($objBs->eq("Nj", "NJ"));
+ok($objBs->eq("s\x{30C}", "S\x{30C}"));
+ok($objBs->eq("z\x{30C}", "Z\x{30C}"));
+
+# 35
+
+ok($objBs->eq("dz\x{30C}", "\x{1C6}"));
+ok($objBs->eq("Dz\x{30C}", "\x{1C6}"));
+ok($objBs->eq("Dz\x{30C}", "\x{1C5}"));
+ok($objBs->eq("DZ\x{30C}", "\x{1C5}"));
+ok($objBs->eq("DZ\x{30C}", "\x{1C4}"));
+
+ok($objBs->eq("lj", "\x{1C9}"));
+ok($objBs->eq("Lj", "\x{1C9}"));
+ok($objBs->eq("Lj", "\x{1C8}"));
+ok($objBs->eq("LJ", "\x{1C8}"));
+ok($objBs->eq("LJ", "\x{1C7}"));
+
+ok($objBs->eq("nj", "\x{1CC}"));
+ok($objBs->eq("Nj", "\x{1CC}"));
+ok($objBs->eq("Nj", "\x{1CB}"));
+ok($objBs->eq("NJ", "\x{1CB}"));
+ok($objBs->eq("NJ", "\x{1CA}"));
+
+# 50
+
+$objBs->change(level => 3);
+
+ok($objBs->lt("c\x{30C}", "C\x{30C}"));
+ok($objBs->lt("c\x{301}", "C\x{301}"));
+ok($objBs->lt("dz\x{30C}","Dz\x{30C}"));
+ok($objBs->lt("Dz\x{30C}","DZ\x{30C}"));
+ok($objBs->lt("d\x{335}", "D\x{335}"));
+ok($objBs->lt("lj", "Lj"));
+ok($objBs->lt("Lj", "LJ"));
+ok($objBs->lt("nj", "Nj"));
+ok($objBs->lt("Nj", "NJ"));
+ok($objBs->lt("s\x{30C}", "S\x{30C}"));
+ok($objBs->lt("z\x{30C}", "Z\x{30C}"));
+
+# 61
+
+ok($objBs->lt("dz\x{30C}", "\x{1C6}"));
+ok($objBs->gt("Dz\x{30C}", "\x{1C6}"));
+ok($objBs->lt("Dz\x{30C}", "\x{1C5}"));
+ok($objBs->gt("DZ\x{30C}", "\x{1C5}"));
+ok($objBs->lt("DZ\x{30C}", "\x{1C4}"));
+
+ok($objBs->lt("lj", "\x{1C9}"));
+ok($objBs->gt("Lj", "\x{1C9}"));
+ok($objBs->lt("Lj", "\x{1C8}"));
+ok($objBs->gt("LJ", "\x{1C8}"));
+ok($objBs->lt("LJ", "\x{1C7}"));
+
+ok($objBs->lt("nj", "\x{1CC}"));
+ok($objBs->gt("Nj", "\x{1CC}"));
+ok($objBs->lt("Nj", "\x{1CB}"));
+ok($objBs->gt("NJ", "\x{1CB}"));
+ok($objBs->lt("NJ", "\x{1CA}"));
+
+# 76
+
+ok($objBs->eq("c\x{30C}", "\x{10D}"));
+ok($objBs->eq("C\x{30C}", "\x{10C}"));
+ok($objBs->eq("c\x{301}", "\x{107}"));
+ok($objBs->eq("c\x{341}", "\x{107}"));
+ok($objBs->eq("C\x{301}", "\x{106}"));
+ok($objBs->eq("C\x{341}", "\x{106}"));
+ok($objBs->eq("dz\x{30C}", "d\x{17E}"));
+ok($objBs->eq("dZ\x{30C}", "d\x{17D}"));
+ok($objBs->eq("Dz\x{30C}", "D\x{17E}"));
+ok($objBs->eq("DZ\x{30C}", "D\x{17D}"));
+ok($objBs->eq("d\x{335}", "\x{111}"));
+ok($objBs->eq("D\x{335}", "\x{110}"));
+ok($objBs->eq("s\x{30C}", "\x{161}"));
+ok($objBs->eq("S\x{30C}", "\x{160}"));
+ok($objBs->eq("z\x{30C}", "\x{17E}"));
+ok($objBs->eq("Z\x{30C}", "\x{17D}"));
+
+# 92
+
+$objBs->change(upper_before_lower => 1);
+
+ok($objBs->gt("c\x{30C}", "C\x{30C}"));
+ok($objBs->gt("c\x{301}", "C\x{301}"));
+ok($objBs->gt("dz\x{30C}","Dz\x{30C}"));
+ok($objBs->gt("Dz\x{30C}","DZ\x{30C}"));
+ok($objBs->gt("d\x{335}", "D\x{335}"));
+ok($objBs->gt("lj", "Lj"));
+ok($objBs->gt("Lj", "LJ"));
+ok($objBs->gt("nj", "Nj"));
+ok($objBs->gt("Nj", "NJ"));
+ok($objBs->gt("s\x{30C}", "S\x{30C}"));
+ok($objBs->gt("z\x{30C}", "Z\x{30C}"));
+
+# 103
+
+ok($objBs->lt("DZ\x{30C}", "\x{1C4}"));
+ok($objBs->gt("Dz\x{30C}", "\x{1C4}"));
+ok($objBs->lt("Dz\x{30C}", "\x{1C5}"));
+ok($objBs->gt("dz\x{30C}", "\x{1C5}"));
+ok($objBs->lt("dz\x{30C}", "\x{1C6}"));
+
+ok($objBs->lt("LJ", "\x{1C7}"));
+ok($objBs->gt("Lj", "\x{1C7}"));
+ok($objBs->lt("Lj", "\x{1C8}"));
+ok($objBs->gt("lj", "\x{1C8}"));
+ok($objBs->lt("lj", "\x{1C9}"));
+
+ok($objBs->lt("NJ", "\x{1CA}"));
+ok($objBs->gt("Nj", "\x{1CA}"));
+ok($objBs->lt("Nj", "\x{1CB}"));
+ok($objBs->gt("nj", "\x{1CB}"));
+ok($objBs->lt("nj", "\x{1CC}"));
+
+# 118
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_bscy.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_bscy.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_bscy.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,209 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..210\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objBsCyrl = Unicode::Collate::Locale->
+ new(locale => 'BS-CYRL', normalization => undef);
+
+ok($objBsCyrl->getlocale, 'bs_Cyrl');
+
+$objBsCyrl->change(level => 1);
+
+ok($objBsCyrl->eq("\x{4D1}", "\x{430}"));
+ok($objBsCyrl->eq("\x{4D0}", "\x{410}"));
+ok($objBsCyrl->eq("\x{4D3}", "\x{430}"));
+ok($objBsCyrl->eq("\x{4D2}", "\x{410}"));
+ok($objBsCyrl->eq("\x{4DB}", "\x{4D9}"));
+ok($objBsCyrl->eq("\x{4DA}", "\x{4D8}"));
+ok($objBsCyrl->eq("\x{453}", "\x{433}"));
+ok($objBsCyrl->eq("\x{403}", "\x{413}"));
+ok($objBsCyrl->eq("\x{450}", "\x{435}")); # not contraction
+ok($objBsCyrl->eq("\x{400}", "\x{415}")); # not contraction
+ok($objBsCyrl->eq("\x{451}", "\x{435}")); # not contraction
+ok($objBsCyrl->eq("\x{401}", "\x{415}")); # not contraction
+ok($objBsCyrl->eq("\x{4D7}", "\x{435}"));
+ok($objBsCyrl->eq("\x{4D6}", "\x{415}"));
+ok($objBsCyrl->eq("\x{4C2}", "\x{436}")); # not contraction
+ok($objBsCyrl->eq("\x{4C1}", "\x{416}")); # not contraction
+ok($objBsCyrl->eq("\x{4DD}", "\x{436}"));
+ok($objBsCyrl->eq("\x{4DC}", "\x{416}"));
+ok($objBsCyrl->eq("\x{4DF}", "\x{437}"));
+ok($objBsCyrl->eq("\x{4DE}", "\x{417}"));
+ok($objBsCyrl->eq("\x{45D}", "\x{438}")); # not contraction
+ok($objBsCyrl->eq("\x{40D}", "\x{418}")); # not contraction
+ok($objBsCyrl->eq("\x{4E3}", "\x{438}")); # not contraction
+ok($objBsCyrl->eq("\x{4E2}", "\x{418}")); # not contraction
+ok($objBsCyrl->eq("\x{4E5}", "\x{438}"));
+ok($objBsCyrl->eq("\x{4E4}", "\x{418}"));
+ok($objBsCyrl->eq("\x{457}", "\x{456}"));
+ok($objBsCyrl->eq("\x{407}", "\x{406}"));
+ok($objBsCyrl->eq("\x{439}", "\x{438}"));
+ok($objBsCyrl->eq("\x{419}", "\x{418}"));
+ok($objBsCyrl->eq("\x{4E7}", "\x{43E}"));
+ok($objBsCyrl->eq("\x{4E6}", "\x{41E}"));
+ok($objBsCyrl->eq("\x{4EB}", "\x{4E9}"));
+ok($objBsCyrl->eq("\x{4EA}", "\x{4E8}"));
+ok($objBsCyrl->eq("\x{45C}", "\x{43A}"));
+ok($objBsCyrl->eq("\x{40C}", "\x{41A}"));
+ok($objBsCyrl->eq("\x{4EF}", "\x{443}")); # not contraction
+ok($objBsCyrl->eq("\x{4EE}", "\x{423}")); # not contraction
+ok($objBsCyrl->eq("\x{45E}", "\x{443}"));
+ok($objBsCyrl->eq("\x{40E}", "\x{423}"));
+ok($objBsCyrl->eq("\x{4F1}", "\x{443}"));
+ok($objBsCyrl->eq("\x{4F0}", "\x{423}"));
+ok($objBsCyrl->eq("\x{4F3}", "\x{443}"));
+ok($objBsCyrl->eq("\x{4F2}", "\x{423}"));
+ok($objBsCyrl->eq("\x{4F5}", "\x{447}"));
+ok($objBsCyrl->eq("\x{4F4}", "\x{427}"));
+ok($objBsCyrl->eq("\x{4F9}", "\x{44B}"));
+ok($objBsCyrl->eq("\x{4F8}", "\x{42B}"));
+ok($objBsCyrl->eq("\x{4ED}", "\x{44D}"));
+ok($objBsCyrl->eq("\x{4EC}", "\x{42D}"));
+ok($objBsCyrl->eq("\x{477}", "\x{475}"));
+ok($objBsCyrl->eq("\x{476}", "\x{474}"));
+
+# 54
+
+$objBsCyrl->change(level => 2);
+
+ok($objBsCyrl->gt("\x{4D1}", "\x{430}"));
+ok($objBsCyrl->gt("\x{4D0}", "\x{410}"));
+ok($objBsCyrl->gt("\x{4D3}", "\x{430}"));
+ok($objBsCyrl->gt("\x{4D2}", "\x{410}"));
+ok($objBsCyrl->gt("\x{4DB}", "\x{4D9}"));
+ok($objBsCyrl->gt("\x{4DA}", "\x{4D8}"));
+ok($objBsCyrl->gt("\x{453}", "\x{433}"));
+ok($objBsCyrl->gt("\x{403}", "\x{413}"));
+ok($objBsCyrl->gt("\x{450}", "\x{435}")); # not contraction
+ok($objBsCyrl->gt("\x{400}", "\x{415}")); # not contraction
+ok($objBsCyrl->gt("\x{451}", "\x{435}")); # not contraction
+ok($objBsCyrl->gt("\x{401}", "\x{415}")); # not contraction
+ok($objBsCyrl->gt("\x{4D7}", "\x{435}"));
+ok($objBsCyrl->gt("\x{4D6}", "\x{415}"));
+ok($objBsCyrl->gt("\x{4C2}", "\x{436}")); # not contraction
+ok($objBsCyrl->gt("\x{4C1}", "\x{416}")); # not contraction
+ok($objBsCyrl->gt("\x{4DD}", "\x{436}"));
+ok($objBsCyrl->gt("\x{4DC}", "\x{416}"));
+ok($objBsCyrl->gt("\x{4DF}", "\x{437}"));
+ok($objBsCyrl->gt("\x{4DE}", "\x{417}"));
+ok($objBsCyrl->gt("\x{45D}", "\x{438}")); # not contraction
+ok($objBsCyrl->gt("\x{40D}", "\x{418}")); # not contraction
+ok($objBsCyrl->gt("\x{4E3}", "\x{438}")); # not contraction
+ok($objBsCyrl->gt("\x{4E2}", "\x{418}")); # not contraction
+ok($objBsCyrl->gt("\x{4E5}", "\x{438}"));
+ok($objBsCyrl->gt("\x{4E4}", "\x{418}"));
+ok($objBsCyrl->gt("\x{457}", "\x{456}"));
+ok($objBsCyrl->gt("\x{407}", "\x{406}"));
+ok($objBsCyrl->gt("\x{439}", "\x{438}"));
+ok($objBsCyrl->gt("\x{419}", "\x{418}"));
+ok($objBsCyrl->gt("\x{4E7}", "\x{43E}"));
+ok($objBsCyrl->gt("\x{4E6}", "\x{41E}"));
+ok($objBsCyrl->gt("\x{4EB}", "\x{4E9}"));
+ok($objBsCyrl->gt("\x{4EA}", "\x{4E8}"));
+ok($objBsCyrl->gt("\x{45C}", "\x{43A}"));
+ok($objBsCyrl->gt("\x{40C}", "\x{41A}"));
+ok($objBsCyrl->gt("\x{4EF}", "\x{443}")); # not contraction
+ok($objBsCyrl->gt("\x{4EE}", "\x{423}")); # not contraction
+ok($objBsCyrl->gt("\x{45E}", "\x{443}"));
+ok($objBsCyrl->gt("\x{40E}", "\x{423}"));
+ok($objBsCyrl->gt("\x{4F1}", "\x{443}"));
+ok($objBsCyrl->gt("\x{4F0}", "\x{423}"));
+ok($objBsCyrl->gt("\x{4F3}", "\x{443}"));
+ok($objBsCyrl->gt("\x{4F2}", "\x{423}"));
+ok($objBsCyrl->gt("\x{4F5}", "\x{447}"));
+ok($objBsCyrl->gt("\x{4F4}", "\x{427}"));
+ok($objBsCyrl->gt("\x{4F9}", "\x{44B}"));
+ok($objBsCyrl->gt("\x{4F8}", "\x{42B}"));
+ok($objBsCyrl->gt("\x{4ED}", "\x{44D}"));
+ok($objBsCyrl->gt("\x{4EC}", "\x{42D}"));
+ok($objBsCyrl->gt("\x{477}", "\x{475}"));
+ok($objBsCyrl->gt("\x{476}", "\x{474}"));
+
+# 106
+
+$objBsCyrl->change(level => 3);
+
+for my $i ("", "\0") {
+ ok($objBsCyrl->eq("\x{4D1}", "\x{430}$i\x{306}"));
+ ok($objBsCyrl->eq("\x{4D0}", "\x{410}$i\x{306}"));
+ ok($objBsCyrl->eq("\x{4D3}", "\x{430}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4D2}", "\x{410}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4DB}", "\x{4D9}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4DA}", "\x{4D8}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{453}", "\x{433}$i\x{301}"));
+ ok($objBsCyrl->eq("\x{403}", "\x{413}$i\x{301}"));
+ ok($objBsCyrl->eq("\x{450}", "\x{435}$i\x{300}")); # not contraction
+ ok($objBsCyrl->eq("\x{400}", "\x{415}$i\x{300}")); # not contraction
+ ok($objBsCyrl->eq("\x{451}", "\x{435}$i\x{308}")); # not contraction
+ ok($objBsCyrl->eq("\x{401}", "\x{415}$i\x{308}")); # not contraction
+ ok($objBsCyrl->eq("\x{4D7}", "\x{435}$i\x{306}"));
+ ok($objBsCyrl->eq("\x{4D6}", "\x{415}$i\x{306}"));
+ ok($objBsCyrl->eq("\x{4C2}", "\x{436}$i\x{306}")); # not contraction
+ ok($objBsCyrl->eq("\x{4C1}", "\x{416}$i\x{306}")); # not contraction
+ ok($objBsCyrl->eq("\x{4DD}", "\x{436}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4DC}", "\x{416}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4DF}", "\x{437}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4DE}", "\x{417}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{45D}", "\x{438}$i\x{300}")); # not contraction
+ ok($objBsCyrl->eq("\x{40D}", "\x{418}$i\x{300}")); # not contraction
+ ok($objBsCyrl->eq("\x{4E3}", "\x{438}$i\x{304}")); # not contraction
+ ok($objBsCyrl->eq("\x{4E2}", "\x{418}$i\x{304}")); # not contraction
+ ok($objBsCyrl->eq("\x{4E5}", "\x{438}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4E4}", "\x{418}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{457}", "\x{456}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{407}", "\x{406}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{439}", "\x{438}$i\x{306}"));
+ ok($objBsCyrl->eq("\x{419}", "\x{418}$i\x{306}"));
+ ok($objBsCyrl->eq("\x{4E7}", "\x{43E}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4E6}", "\x{41E}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4EB}", "\x{4E9}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4EA}", "\x{4E8}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{45C}", "\x{43A}$i\x{301}"));
+ ok($objBsCyrl->eq("\x{40C}", "\x{41A}$i\x{301}"));
+ ok($objBsCyrl->eq("\x{4EF}", "\x{443}$i\x{304}")); # not contraction
+ ok($objBsCyrl->eq("\x{4EE}", "\x{423}$i\x{304}")); # not contraction
+ ok($objBsCyrl->eq("\x{45E}", "\x{443}$i\x{306}"));
+ ok($objBsCyrl->eq("\x{40E}", "\x{423}$i\x{306}"));
+ ok($objBsCyrl->eq("\x{4F1}", "\x{443}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4F0}", "\x{423}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4F3}", "\x{443}$i\x{30B}"));
+ ok($objBsCyrl->eq("\x{4F2}", "\x{423}$i\x{30B}"));
+ ok($objBsCyrl->eq("\x{4F5}", "\x{447}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4F4}", "\x{427}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4F9}", "\x{44B}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4F8}", "\x{42B}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4ED}", "\x{44D}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{4EC}", "\x{42D}$i\x{308}"));
+ ok($objBsCyrl->eq("\x{477}", "\x{475}$i\x{30F}"));
+ ok($objBsCyrl->eq("\x{476}", "\x{474}$i\x{30F}"));
+}
+
+# 210
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_cjk.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_cjk.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_cjk.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,506 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..3589\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objDefault = Unicode::Collate::Locale->
+ new(locale => 'DEFAULT', normalization => undef);
+
+ok($objDefault->getlocale, 'default');
+
+my $objZhP = Unicode::Collate::Locale->
+ new(locale => 'ZH__pinyin', normalization => undef);
+
+ok($objZhP->getlocale, 'zh__pinyin');
+
+my $objZhS = Unicode::Collate::Locale->
+ new(locale => 'ZH__stroke', normalization => undef);
+
+ok($objZhS->getlocale, 'zh__stroke');
+
+my $objZhZ = Unicode::Collate::Locale->
+ new(locale => 'ZH__zhuyin', normalization => undef);
+
+ok($objZhZ->getlocale, 'zh__zhuyin');
+
+for my $obj ($objDefault, $objZhP, $objZhS, $objZhZ) {
+ for my $lev (2, 3) {
+ $obj->change(level => $lev);
+ my $r = $lev == 2 ? 0 : 1;
+ ok($obj->cmp("\x{3220}", "\(\x{4E00}\)"), $r);
+ ok($obj->cmp("\x{3226}", "\(\x{4E03}\)"), $r);
+ ok($obj->cmp("\x{3222}", "\(\x{4E09}\)"), $r);
+ ok($obj->cmp("\x{3228}", "\(\x{4E5D}\)"), $r);
+ ok($obj->cmp("\x{3221}", "\(\x{4E8C}\)"), $r);
+ ok($obj->cmp("\x{3224}", "\(\x{4E94}\)"), $r);
+ ok($obj->cmp("\x{3239}", "\(\x{4EE3}\)"), $r);
+ ok($obj->cmp("\x{323D}", "\(\x{4F01}\)"), $r);
+ ok($obj->cmp("\x{3241}", "\(\x{4F11}\)"), $r);
+ ok($obj->cmp("\x{3227}", "\(\x{516B}\)"), $r);
+ ok($obj->cmp("\x{3225}", "\(\x{516D}\)"), $r);
+ ok($obj->cmp("\x{3238}", "\(\x{52B4}\)"), $r);
+ ok($obj->cmp("\x{3229}", "\(\x{5341}\)"), $r);
+ ok($obj->cmp("\x{323F}", "\(\x{5354}\)"), $r);
+ ok($obj->cmp("\x{3234}", "\(\x{540D}\)"), $r);
+ ok($obj->cmp("\x{323A}", "\(\x{547C}\)"), $r);
+ ok($obj->cmp("\x{3223}", "\(\x{56DB}\)"), $r);
+ ok($obj->cmp("\x{322F}", "\(\x{571F}\)"), $r);
+ ok($obj->cmp("\x{323B}", "\(\x{5B66}\)"), $r);
+ ok($obj->cmp("\x{3230}", "\(\x{65E5}\)"), $r);
+ ok($obj->cmp("\x{322A}", "\(\x{6708}\)"), $r);
+ ok($obj->cmp("\x{3232}", "\(\x{6709}\)"), $r);
+ ok($obj->cmp("\x{322D}", "\(\x{6728}\)"), $r);
+ ok($obj->cmp("\x{3231}", "\(\x{682A}\)"), $r);
+ ok($obj->cmp("\x{322C}", "\(\x{6C34}\)"), $r);
+ ok($obj->cmp("\x{322B}", "\(\x{706B}\)"), $r);
+ ok($obj->cmp("\x{3235}", "\(\x{7279}\)"), $r);
+ ok($obj->cmp("\x{323C}", "\(\x{76E3}\)"), $r);
+ ok($obj->cmp("\x{3233}", "\(\x{793E}\)"), $r);
+ ok($obj->cmp("\x{3237}", "\(\x{795D}\)"), $r);
+ ok($obj->cmp("\x{3240}", "\(\x{796D}\)"), $r);
+ ok($obj->cmp("\x{3242}", "\(\x{81EA}\)"), $r);
+ ok($obj->cmp("\x{3243}", "\(\x{81F3}\)"), $r);
+ ok($obj->cmp("\x{3236}", "\(\x{8CA1}\)"), $r);
+ ok($obj->cmp("\x{323E}", "\(\x{8CC7}\)"), $r);
+ ok($obj->cmp("\x{322E}", "\(\x{91D1}\)"), $r);
+ ok($obj->cmp("\x{3358}", "0\x{70B9}"), $r);
+ ok($obj->cmp("\x{33E9}", "10\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C9}", "10\x{6708}"), $r);
+ ok($obj->cmp("\x{3362}", "10\x{70B9}"), $r);
+ ok($obj->cmp("\x{33EA}", "11\x{65E5}"), $r);
+ ok($obj->cmp("\x{32CA}", "11\x{6708}"), $r);
+ ok($obj->cmp("\x{3363}", "11\x{70B9}"), $r);
+ ok($obj->cmp("\x{33EB}", "12\x{65E5}"), $r);
+ ok($obj->cmp("\x{32CB}", "12\x{6708}"), $r);
+ ok($obj->cmp("\x{3364}", "12\x{70B9}"), $r);
+ ok($obj->cmp("\x{33EC}", "13\x{65E5}"), $r);
+ ok($obj->cmp("\x{3365}", "13\x{70B9}"), $r);
+ ok($obj->cmp("\x{33ED}", "14\x{65E5}"), $r);
+ ok($obj->cmp("\x{3366}", "14\x{70B9}"), $r);
+ ok($obj->cmp("\x{33EE}", "15\x{65E5}"), $r);
+ ok($obj->cmp("\x{3367}", "15\x{70B9}"), $r);
+ ok($obj->cmp("\x{33EF}", "16\x{65E5}"), $r);
+ ok($obj->cmp("\x{3368}", "16\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F0}", "17\x{65E5}"), $r);
+ ok($obj->cmp("\x{3369}", "17\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F1}", "18\x{65E5}"), $r);
+ ok($obj->cmp("\x{336A}", "18\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F2}", "19\x{65E5}"), $r);
+ ok($obj->cmp("\x{336B}", "19\x{70B9}"), $r);
+ ok($obj->cmp("\x{33E0}", "1\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C0}", "1\x{6708}"), $r);
+ ok($obj->cmp("\x{3359}", "1\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F3}", "20\x{65E5}"), $r);
+ ok($obj->cmp("\x{336C}", "20\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F4}", "21\x{65E5}"), $r);
+ ok($obj->cmp("\x{336D}", "21\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F5}", "22\x{65E5}"), $r);
+ ok($obj->cmp("\x{336E}", "22\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F6}", "23\x{65E5}"), $r);
+ ok($obj->cmp("\x{336F}", "23\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F7}", "24\x{65E5}"), $r);
+ ok($obj->cmp("\x{3370}", "24\x{70B9}"), $r);
+ ok($obj->cmp("\x{33F8}", "25\x{65E5}"), $r);
+ ok($obj->cmp("\x{33F9}", "26\x{65E5}"), $r);
+ ok($obj->cmp("\x{33FA}", "27\x{65E5}"), $r);
+ ok($obj->cmp("\x{33FB}", "28\x{65E5}"), $r);
+ ok($obj->cmp("\x{33FC}", "29\x{65E5}"), $r);
+ ok($obj->cmp("\x{33E1}", "2\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C1}", "2\x{6708}"), $r);
+ ok($obj->cmp("\x{335A}", "2\x{70B9}"), $r);
+ ok($obj->cmp("\x{33FD}", "30\x{65E5}"), $r);
+ ok($obj->cmp("\x{33FE}", "31\x{65E5}"), $r);
+ ok($obj->cmp("\x{33E2}", "3\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C2}", "3\x{6708}"), $r);
+ ok($obj->cmp("\x{335B}", "3\x{70B9}"), $r);
+ ok($obj->cmp("\x{33E3}", "4\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C3}", "4\x{6708}"), $r);
+ ok($obj->cmp("\x{335C}", "4\x{70B9}"), $r);
+ ok($obj->cmp("\x{33E4}", "5\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C4}", "5\x{6708}"), $r);
+ ok($obj->cmp("\x{335D}", "5\x{70B9}"), $r);
+ ok($obj->cmp("\x{33E5}", "6\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C5}", "6\x{6708}"), $r);
+ ok($obj->cmp("\x{335E}", "6\x{70B9}"), $r);
+ ok($obj->cmp("\x{33E6}", "7\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C6}", "7\x{6708}"), $r);
+ ok($obj->cmp("\x{335F}", "7\x{70B9}"), $r);
+ ok($obj->cmp("\x{33E7}", "8\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C7}", "8\x{6708}"), $r);
+ ok($obj->cmp("\x{3360}", "8\x{70B9}"), $r);
+ ok($obj->cmp("\x{33E8}", "9\x{65E5}"), $r);
+ ok($obj->cmp("\x{32C8}", "9\x{6708}"), $r);
+ ok($obj->cmp("\x{3361}", "9\x{70B9}"), $r);
+ ok($obj->cmp("\x{1F241}", "\x{3014}\x{4E09}\x{3015}"), $r);
+ ok($obj->cmp("\x{1F242}", "\x{3014}\x{4E8C}\x{3015}"), $r);
+ ok($obj->cmp("\x{1F247}", "\x{3014}\x{52DD}\x{3015}"), $r);
+ ok($obj->cmp("\x{1F243}", "\x{3014}\x{5B89}\x{3015}"), $r);
+ ok($obj->cmp("\x{1F245}", "\x{3014}\x{6253}\x{3015}"), $r);
+ ok($obj->cmp("\x{1F248}", "\x{3014}\x{6557}\x{3015}"), $r);
+ ok($obj->cmp("\x{1F240}", "\x{3014}\x{672C}\x{3015}"), $r);
+ ok($obj->cmp("\x{1F244}", "\x{3014}\x{70B9}\x{3015}"), $r);
+ ok($obj->cmp("\x{1F246}", "\x{3014}\x{76D7}\x{3015}"), $r);
+ ok($obj->cmp("\x{2F00}", "\x{4E00}"), $r);
+ ok($obj->cmp("\x{3192}", "\x{4E00}"), $r);
+ ok($obj->cmp("\x{3280}", "\x{4E00}"), $r);
+ ok($obj->cmp("\x{1F229}", "\x{4E00}"), $r);
+ ok($obj->cmp("\x{319C}", "\x{4E01}"), $r);
+ ok($obj->cmp("\x{3286}", "\x{4E03}"), $r);
+ ok($obj->cmp("\x{3194}", "\x{4E09}"), $r);
+ ok($obj->cmp("\x{3282}", "\x{4E09}"), $r);
+ ok($obj->cmp("\x{1F22A}", "\x{4E09}"), $r);
+ ok($obj->cmp("\x{3196}", "\x{4E0A}"), $r);
+ ok($obj->cmp("\x{32A4}", "\x{4E0A}"), $r);
+ ok($obj->cmp("\x{3198}", "\x{4E0B}"), $r);
+ ok($obj->cmp("\x{32A6}", "\x{4E0B}"), $r);
+ ok($obj->cmp("\x{319B}", "\x{4E19}"), $r);
+ ok($obj->cmp("\x{2F01}", "\x{4E28}"), $r);
+ ok($obj->cmp("\x{3197}", "\x{4E2D}"), $r);
+ ok($obj->cmp("\x{32A5}", "\x{4E2D}"), $r);
+ ok($obj->cmp("\x{1F22D}", "\x{4E2D}"), $r);
+ ok($obj->cmp("\x{2F02}", "\x{4E36}"), $r);
+ ok($obj->cmp("\x{2F03}", "\x{4E3F}"), $r);
+ ok($obj->cmp("\x{2F04}", "\x{4E59}"), $r);
+ ok($obj->cmp("\x{319A}", "\x{4E59}"), $r);
+ ok($obj->cmp("\x{3288}", "\x{4E5D}"), $r);
+ ok($obj->cmp("\x{2F05}", "\x{4E85}"), $r);
+ ok($obj->cmp("\x{2F06}", "\x{4E8C}"), $r);
+ ok($obj->cmp("\x{3193}", "\x{4E8C}"), $r);
+ ok($obj->cmp("\x{3281}", "\x{4E8C}"), $r);
+ ok($obj->cmp("\x{1F214}", "\x{4E8C}"), $r);
+ ok($obj->cmp("\x{3284}", "\x{4E94}"), $r);
+ ok($obj->cmp("\x{2F07}", "\x{4EA0}"), $r);
+ ok($obj->cmp("\x{1F218}", "\x{4EA4}"), $r);
+ ok($obj->cmp("\x{2F08}", "\x{4EBA}"), $r);
+ ok($obj->cmp("\x{319F}", "\x{4EBA}"), $r);
+ ok($obj->cmp("\x{32AD}", "\x{4F01}"), $r);
+ ok($obj->cmp("\x{32A1}", "\x{4F11}"), $r);
+ ok($obj->cmp("\x{329D}", "\x{512A}"), $r);
+ ok($obj->cmp("\x{2F09}", "\x{513F}"), $r);
+ ok($obj->cmp("\x{2F0A}", "\x{5165}"), $r);
+ ok($obj->cmp("\x{2F0B}", "\x{516B}"), $r);
+ ok($obj->cmp("\x{3287}", "\x{516B}"), $r);
+ ok($obj->cmp("\x{3285}", "\x{516D}"), $r);
+ ok($obj->cmp("\x{2F0C}", "\x{5182}"), $r);
+ ok($obj->cmp("\x{1F21E}", "\x{518D}"), $r);
+ ok($obj->cmp("\x{2F0D}", "\x{5196}"), $r);
+ ok($obj->cmp("\x{32A2}", "\x{5199}"), $r);
+ ok($obj->cmp("\x{2F0E}", "\x{51AB}"), $r);
+ ok($obj->cmp("\x{2F0F}", "\x{51E0}"), $r);
+ ok($obj->cmp("\x{2F10}", "\x{51F5}"), $r);
+ ok($obj->cmp("\x{2F11}", "\x{5200}"), $r);
+ ok($obj->cmp("\x{1F220}", "\x{521D}"), $r);
+ ok($obj->cmp("\x{1F21C}", "\x{524D}"), $r);
+ ok($obj->cmp("\x{1F239}", "\x{5272}"), $r);
+ ok($obj->cmp("\x{2F12}", "\x{529B}"), $r);
+ ok($obj->cmp("\x{3298}", "\x{52B4}"), $r);
+ ok($obj->cmp("\x{2F13}", "\x{52F9}"), $r);
+ ok($obj->cmp("\x{2F14}", "\x{5315}"), $r);
+ ok($obj->cmp("\x{2F15}", "\x{531A}"), $r);
+ ok($obj->cmp("\x{2F16}", "\x{5338}"), $r);
+ ok($obj->cmp("\x{32A9}", "\x{533B}"), $r);
+ ok($obj->cmp("\x{2F17}", "\x{5341}"), $r);
+ ok($obj->cmp("\x{3038}", "\x{5341}"), $r);
+ ok($obj->cmp("\x{3289}", "\x{5341}"), $r);
+ ok($obj->cmp("\x{3039}", "\x{5344}"), $r);
+ ok($obj->cmp("\x{303A}", "\x{5345}"), $r);
+ ok($obj->cmp("\x{32AF}", "\x{5354}"), $r);
+ ok($obj->cmp("\x{2F18}", "\x{535C}"), $r);
+ ok($obj->cmp("\x{2F19}", "\x{5369}"), $r);
+ ok($obj->cmp("\x{329E}", "\x{5370}"), $r);
+ ok($obj->cmp("\x{2F1A}", "\x{5382}"), $r);
+ ok($obj->cmp("\x{2F1B}", "\x{53B6}"), $r);
+ ok($obj->cmp("\x{2F1C}", "\x{53C8}"), $r);
+ ok($obj->cmp("\x{1F212}", "\x{53CC}"), $r);
+ ok($obj->cmp("\x{2F1D}", "\x{53E3}"), $r);
+ ok($obj->cmp("\x{1F251}", "\x{53EF}"), $r);
+ ok($obj->cmp("\x{32A8}", "\x{53F3}"), $r);
+ ok($obj->cmp("\x{1F22E}", "\x{53F3}"), $r);
+ ok($obj->cmp("\x{1F234}", "\x{5408}"), $r);
+ ok($obj->cmp("\x{3294}", "\x{540D}"), $r);
+ ok($obj->cmp("\x{1F225}", "\x{5439}"), $r);
+ ok($obj->cmp("\x{3244}", "\x{554F}"), $r);
+ ok($obj->cmp("\x{1F23A}", "\x{55B6}"), $r);
+ ok($obj->cmp("\x{2F1E}", "\x{56D7}"), $r);
+ ok($obj->cmp("\x{3195}", "\x{56DB}"), $r);
+ ok($obj->cmp("\x{3283}", "\x{56DB}"), $r);
+ ok($obj->cmp("\x{2F1F}", "\x{571F}"), $r);
+ ok($obj->cmp("\x{328F}", "\x{571F}"), $r);
+ ok($obj->cmp("\x{319E}", "\x{5730}"), $r);
+ ok($obj->cmp("\x{2F20}", "\x{58EB}"), $r);
+ ok($obj->cmp("\x{1F224}", "\x{58F0}"), $r);
+ ok($obj->cmp("\x{2F21}", "\x{5902}"), $r);
+ ok($obj->cmp("\x{2F22}", "\x{590A}"), $r);
+ ok($obj->cmp("\x{2F23}", "\x{5915}"), $r);
+ ok($obj->cmp("\x{1F215}", "\x{591A}"), $r);
+ ok($obj->cmp("\x{32B0}", "\x{591C}"), $r);
+ ok($obj->cmp("\x{2F24}", "\x{5927}"), $r);
+ ok($obj->cmp("\x{337D}", "\x{5927}\x{6B63}"), $r);
+ ok($obj->cmp("\x{319D}", "\x{5929}"), $r);
+ ok($obj->cmp("\x{1F217}", "\x{5929}"), $r);
+ ok($obj->cmp("\x{2F25}", "\x{5973}"), $r);
+ ok($obj->cmp("\x{329B}", "\x{5973}"), $r);
+ ok($obj->cmp("\x{2F26}", "\x{5B50}"), $r);
+ ok($obj->cmp("\x{1F211}", "\x{5B57}"), $r);
+ ok($obj->cmp("\x{32AB}", "\x{5B66}"), $r);
+ ok($obj->cmp("\x{2F27}", "\x{5B80}"), $r);
+ ok($obj->cmp("\x{32AA}", "\x{5B97}"), $r);
+ ok($obj->cmp("\x{2F28}", "\x{5BF8}"), $r);
+ ok($obj->cmp("\x{2F29}", "\x{5C0F}"), $r);
+ ok($obj->cmp("\x{2F2A}", "\x{5C22}"), $r);
+ ok($obj->cmp("\x{2F2B}", "\x{5C38}"), $r);
+ ok($obj->cmp("\x{2F2C}", "\x{5C6E}"), $r);
+ ok($obj->cmp("\x{2F2D}", "\x{5C71}"), $r);
+ ok($obj->cmp("\x{2F2E}", "\x{5DDB}"), $r);
+ ok($obj->cmp("\x{2F2F}", "\x{5DE5}"), $r);
+ ok($obj->cmp("\x{32A7}", "\x{5DE6}"), $r);
+ ok($obj->cmp("\x{1F22C}", "\x{5DE6}"), $r);
+ ok($obj->cmp("\x{2F30}", "\x{5DF1}"), $r);
+ ok($obj->cmp("\x{2F31}", "\x{5DFE}"), $r);
+ ok($obj->cmp("\x{2F32}", "\x{5E72}"), $r);
+ ok($obj->cmp("\x{337B}", "\x{5E73}\x{6210}"), $r);
+ ok($obj->cmp("\x{2F33}", "\x{5E7A}"), $r);
+ ok($obj->cmp("\x{3245}", "\x{5E7C}"), $r);
+ ok($obj->cmp("\x{2F34}", "\x{5E7F}"), $r);
+ ok($obj->cmp("\x{2F35}", "\x{5EF4}"), $r);
+ ok($obj->cmp("\x{2F36}", "\x{5EFE}"), $r);
+ ok($obj->cmp("\x{2F37}", "\x{5F0B}"), $r);
+ ok($obj->cmp("\x{2F38}", "\x{5F13}"), $r);
+ ok($obj->cmp("\x{2F39}", "\x{5F50}"), $r);
+ ok($obj->cmp("\x{2F3A}", "\x{5F61}"), $r);
+ ok($obj->cmp("\x{2F3B}", "\x{5F73}"), $r);
+ ok($obj->cmp("\x{1F21D}", "\x{5F8C}"), $r);
+ ok($obj->cmp("\x{1F250}", "\x{5F97}"), $r);
+ ok($obj->cmp("\x{2F3C}", "\x{5FC3}"), $r);
+ ok($obj->cmp("\x{2F3D}", "\x{6208}"), $r);
+ ok($obj->cmp("\x{2F3E}", "\x{6236}"), $r);
+ ok($obj->cmp("\x{2F3F}", "\x{624B}"), $r);
+ ok($obj->cmp("\x{1F210}", "\x{624B}"), $r);
+ ok($obj->cmp("\x{1F231}", "\x{6253}"), $r);
+ ok($obj->cmp("\x{1F227}", "\x{6295}"), $r);
+ ok($obj->cmp("\x{1F22F}", "\x{6307}"), $r);
+ ok($obj->cmp("\x{1F228}", "\x{6355}"), $r);
+ ok($obj->cmp("\x{2F40}", "\x{652F}"), $r);
+ ok($obj->cmp("\x{2F41}", "\x{6534}"), $r);
+ ok($obj->cmp("\x{2F42}", "\x{6587}"), $r);
+ ok($obj->cmp("\x{3246}", "\x{6587}"), $r);
+ ok($obj->cmp("\x{2F43}", "\x{6597}"), $r);
+ ok($obj->cmp("\x{1F21B}", "\x{6599}"), $r);
+ ok($obj->cmp("\x{2F44}", "\x{65A4}"), $r);
+ ok($obj->cmp("\x{1F21F}", "\x{65B0}"), $r);
+ ok($obj->cmp("\x{2F45}", "\x{65B9}"), $r);
+ ok($obj->cmp("\x{2F46}", "\x{65E0}"), $r);
+ ok($obj->cmp("\x{2F47}", "\x{65E5}"), $r);
+ ok($obj->cmp("\x{3290}", "\x{65E5}"), $r);
+ ok($obj->cmp("\x{337E}", "\x{660E}\x{6CBB}"), $r);
+ ok($obj->cmp("\x{1F219}", "\x{6620}"), $r);
+ ok($obj->cmp("\x{337C}", "\x{662D}\x{548C}"), $r);
+ ok($obj->cmp("\x{2F48}", "\x{66F0}"), $r);
+ ok($obj->cmp("\x{2F49}", "\x{6708}"), $r);
+ ok($obj->cmp("\x{328A}", "\x{6708}"), $r);
+ ok($obj->cmp("\x{1F237}", "\x{6708}"), $r);
+ ok($obj->cmp("\x{3292}", "\x{6709}"), $r);
+ ok($obj->cmp("\x{1F236}", "\x{6709}"), $r);
+ ok($obj->cmp("\x{2F4A}", "\x{6728}"), $r);
+ ok($obj->cmp("\x{328D}", "\x{6728}"), $r);
+ ok($obj->cmp("\x{3291}", "\x{682A}"), $r);
+ ok($obj->cmp("\x{337F}", "\x{682A}\x{5F0F}\x{4F1A}\x{793E}"), $r);
+ ok($obj->cmp("\x{2F4B}", "\x{6B20}"), $r);
+ ok($obj->cmp("\x{2F4C}", "\x{6B62}"), $r);
+ ok($obj->cmp("\x{32A3}", "\x{6B63}"), $r);
+ ok($obj->cmp("\x{2F4D}", "\x{6B79}"), $r);
+ ok($obj->cmp("\x{2F4E}", "\x{6BB3}"), $r);
+ ok($obj->cmp("\x{2F4F}", "\x{6BCB}"), $r);
+ ok($obj->cmp("\x{2E9F}", "\x{6BCD}"), $r);
+ ok($obj->cmp("\x{2F50}", "\x{6BD4}"), $r);
+ ok($obj->cmp("\x{2F51}", "\x{6BDB}"), $r);
+ ok($obj->cmp("\x{2F52}", "\x{6C0F}"), $r);
+ ok($obj->cmp("\x{2F53}", "\x{6C14}"), $r);
+ ok($obj->cmp("\x{2F54}", "\x{6C34}"), $r);
+ ok($obj->cmp("\x{328C}", "\x{6C34}"), $r);
+ ok($obj->cmp("\x{329F}", "\x{6CE8}"), $r);
+ ok($obj->cmp("\x{1F235}", "\x{6E80}"), $r);
+ ok($obj->cmp("\x{1F226}", "\x{6F14}"), $r);
+ ok($obj->cmp("\x{2F55}", "\x{706B}"), $r);
+ ok($obj->cmp("\x{328B}", "\x{706B}"), $r);
+ ok($obj->cmp("\x{1F21A}", "\x{7121}"), $r);
+ ok($obj->cmp("\x{2F56}", "\x{722A}"), $r);
+ ok($obj->cmp("\x{2F57}", "\x{7236}"), $r);
+ ok($obj->cmp("\x{2F58}", "\x{723B}"), $r);
+ ok($obj->cmp("\x{2F59}", "\x{723F}"), $r);
+ ok($obj->cmp("\x{2F5A}", "\x{7247}"), $r);
+ ok($obj->cmp("\x{2F5B}", "\x{7259}"), $r);
+ ok($obj->cmp("\x{2F5C}", "\x{725B}"), $r);
+ ok($obj->cmp("\x{3295}", "\x{7279}"), $r);
+ ok($obj->cmp("\x{2F5D}", "\x{72AC}"), $r);
+ ok($obj->cmp("\x{2F5E}", "\x{7384}"), $r);
+ ok($obj->cmp("\x{2F5F}", "\x{7389}"), $r);
+ ok($obj->cmp("\x{2F60}", "\x{74DC}"), $r);
+ ok($obj->cmp("\x{2F61}", "\x{74E6}"), $r);
+ ok($obj->cmp("\x{2F62}", "\x{7518}"), $r);
+ ok($obj->cmp("\x{2F63}", "\x{751F}"), $r);
+ ok($obj->cmp("\x{1F222}", "\x{751F}"), $r);
+ ok($obj->cmp("\x{2F64}", "\x{7528}"), $r);
+ ok($obj->cmp("\x{2F65}", "\x{7530}"), $r);
+ ok($obj->cmp("\x{3199}", "\x{7532}"), $r);
+ ok($obj->cmp("\x{1F238}", "\x{7533}"), $r);
+ ok($obj->cmp("\x{329A}", "\x{7537}"), $r);
+ ok($obj->cmp("\x{2F66}", "\x{758B}"), $r);
+ ok($obj->cmp("\x{2F67}", "\x{7592}"), $r);
+ ok($obj->cmp("\x{2F68}", "\x{7676}"), $r);
+ ok($obj->cmp("\x{2F69}", "\x{767D}"), $r);
+ ok($obj->cmp("\x{2F6A}", "\x{76AE}"), $r);
+ ok($obj->cmp("\x{2F6B}", "\x{76BF}"), $r);
+ ok($obj->cmp("\x{32AC}", "\x{76E3}"), $r);
+ ok($obj->cmp("\x{2F6C}", "\x{76EE}"), $r);
+ ok($obj->cmp("\x{2F6D}", "\x{77DB}"), $r);
+ ok($obj->cmp("\x{2F6E}", "\x{77E2}"), $r);
+ ok($obj->cmp("\x{2F6F}", "\x{77F3}"), $r);
+ ok($obj->cmp("\x{2F70}", "\x{793A}"), $r);
+ ok($obj->cmp("\x{3293}", "\x{793E}"), $r);
+ ok($obj->cmp("\x{3297}", "\x{795D}"), $r);
+ ok($obj->cmp("\x{1F232}", "\x{7981}"), $r);
+ ok($obj->cmp("\x{2F71}", "\x{79B8}"), $r);
+ ok($obj->cmp("\x{2F72}", "\x{79BE}"), $r);
+ ok($obj->cmp("\x{3299}", "\x{79D8}"), $r);
+ ok($obj->cmp("\x{2F73}", "\x{7A74}"), $r);
+ ok($obj->cmp("\x{1F233}", "\x{7A7A}"), $r);
+ ok($obj->cmp("\x{2F74}", "\x{7ACB}"), $r);
+ ok($obj->cmp("\x{2F75}", "\x{7AF9}"), $r);
+ ok($obj->cmp("\x{3247}", "\x{7B8F}"), $r);
+ ok($obj->cmp("\x{2F76}", "\x{7C73}"), $r);
+ ok($obj->cmp("\x{2F77}", "\x{7CF8}"), $r);
+ ok($obj->cmp("\x{1F221}", "\x{7D42}"), $r);
+ ok($obj->cmp("\x{2F78}", "\x{7F36}"), $r);
+ ok($obj->cmp("\x{2F79}", "\x{7F51}"), $r);
+ ok($obj->cmp("\x{2F7A}", "\x{7F8A}"), $r);
+ ok($obj->cmp("\x{2F7B}", "\x{7FBD}"), $r);
+ ok($obj->cmp("\x{2F7C}", "\x{8001}"), $r);
+ ok($obj->cmp("\x{2F7D}", "\x{800C}"), $r);
+ ok($obj->cmp("\x{2F7E}", "\x{8012}"), $r);
+ ok($obj->cmp("\x{2F7F}", "\x{8033}"), $r);
+ ok($obj->cmp("\x{2F80}", "\x{807F}"), $r);
+ ok($obj->cmp("\x{2F81}", "\x{8089}"), $r);
+ ok($obj->cmp("\x{2F82}", "\x{81E3}"), $r);
+ ok($obj->cmp("\x{2F83}", "\x{81EA}"), $r);
+ ok($obj->cmp("\x{2F84}", "\x{81F3}"), $r);
+ ok($obj->cmp("\x{2F85}", "\x{81FC}"), $r);
+ ok($obj->cmp("\x{2F86}", "\x{820C}"), $r);
+ ok($obj->cmp("\x{2F87}", "\x{821B}"), $r);
+ ok($obj->cmp("\x{2F88}", "\x{821F}"), $r);
+ ok($obj->cmp("\x{2F89}", "\x{826E}"), $r);
+ ok($obj->cmp("\x{2F8A}", "\x{8272}"), $r);
+ ok($obj->cmp("\x{2F8B}", "\x{8278}"), $r);
+ ok($obj->cmp("\x{2F8C}", "\x{864D}"), $r);
+ ok($obj->cmp("\x{2F8D}", "\x{866B}"), $r);
+ ok($obj->cmp("\x{2F8E}", "\x{8840}"), $r);
+ ok($obj->cmp("\x{2F8F}", "\x{884C}"), $r);
+ ok($obj->cmp("\x{2F90}", "\x{8863}"), $r);
+ ok($obj->cmp("\x{2F91}", "\x{897E}"), $r);
+ ok($obj->cmp("\x{2F92}", "\x{898B}"), $r);
+ ok($obj->cmp("\x{2F93}", "\x{89D2}"), $r);
+ ok($obj->cmp("\x{1F216}", "\x{89E3}"), $r);
+ ok($obj->cmp("\x{2F94}", "\x{8A00}"), $r);
+ ok($obj->cmp("\x{2F95}", "\x{8C37}"), $r);
+ ok($obj->cmp("\x{2F96}", "\x{8C46}"), $r);
+ ok($obj->cmp("\x{2F97}", "\x{8C55}"), $r);
+ ok($obj->cmp("\x{2F98}", "\x{8C78}"), $r);
+ ok($obj->cmp("\x{2F99}", "\x{8C9D}"), $r);
+ ok($obj->cmp("\x{3296}", "\x{8CA1}"), $r);
+ ok($obj->cmp("\x{1F223}", "\x{8CA9}"), $r);
+ ok($obj->cmp("\x{32AE}", "\x{8CC7}"), $r);
+ ok($obj->cmp("\x{2F9A}", "\x{8D64}"), $r);
+ ok($obj->cmp("\x{2F9B}", "\x{8D70}"), $r);
+ ok($obj->cmp("\x{1F230}", "\x{8D70}"), $r);
+ ok($obj->cmp("\x{2F9C}", "\x{8DB3}"), $r);
+ ok($obj->cmp("\x{2F9D}", "\x{8EAB}"), $r);
+ ok($obj->cmp("\x{2F9E}", "\x{8ECA}"), $r);
+ ok($obj->cmp("\x{2F9F}", "\x{8F9B}"), $r);
+ ok($obj->cmp("\x{2FA0}", "\x{8FB0}"), $r);
+ ok($obj->cmp("\x{2FA1}", "\x{8FB5}"), $r);
+ ok($obj->cmp("\x{1F22B}", "\x{904A}"), $r);
+ ok($obj->cmp("\x{329C}", "\x{9069}"), $r);
+ ok($obj->cmp("\x{2FA2}", "\x{9091}"), $r);
+ ok($obj->cmp("\x{2FA3}", "\x{9149}"), $r);
+ ok($obj->cmp("\x{2FA4}", "\x{91C6}"), $r);
+ ok($obj->cmp("\x{2FA5}", "\x{91CC}"), $r);
+ ok($obj->cmp("\x{2FA6}", "\x{91D1}"), $r);
+ ok($obj->cmp("\x{328E}", "\x{91D1}"), $r);
+ ok($obj->cmp("\x{2FA7}", "\x{9577}"), $r);
+ ok($obj->cmp("\x{2FA8}", "\x{9580}"), $r);
+ ok($obj->cmp("\x{2FA9}", "\x{961C}"), $r);
+ ok($obj->cmp("\x{2FAA}", "\x{96B6}"), $r);
+ ok($obj->cmp("\x{2FAB}", "\x{96B9}"), $r);
+ ok($obj->cmp("\x{2FAC}", "\x{96E8}"), $r);
+ ok($obj->cmp("\x{2FAD}", "\x{9751}"), $r);
+ ok($obj->cmp("\x{2FAE}", "\x{975E}"), $r);
+ ok($obj->cmp("\x{2FAF}", "\x{9762}"), $r);
+ ok($obj->cmp("\x{2FB0}", "\x{9769}"), $r);
+ ok($obj->cmp("\x{2FB1}", "\x{97CB}"), $r);
+ ok($obj->cmp("\x{2FB2}", "\x{97ED}"), $r);
+ ok($obj->cmp("\x{2FB3}", "\x{97F3}"), $r);
+ ok($obj->cmp("\x{2FB4}", "\x{9801}"), $r);
+ ok($obj->cmp("\x{32A0}", "\x{9805}"), $r);
+ ok($obj->cmp("\x{2FB5}", "\x{98A8}"), $r);
+ ok($obj->cmp("\x{2FB6}", "\x{98DB}"), $r);
+ ok($obj->cmp("\x{2FB7}", "\x{98DF}"), $r);
+ ok($obj->cmp("\x{2FB8}", "\x{9996}"), $r);
+ ok($obj->cmp("\x{2FB9}", "\x{9999}"), $r);
+ ok($obj->cmp("\x{2FBA}", "\x{99AC}"), $r);
+ ok($obj->cmp("\x{2FBB}", "\x{9AA8}"), $r);
+ ok($obj->cmp("\x{2FBC}", "\x{9AD8}"), $r);
+ ok($obj->cmp("\x{2FBD}", "\x{9ADF}"), $r);
+ ok($obj->cmp("\x{2FBE}", "\x{9B25}"), $r);
+ ok($obj->cmp("\x{2FBF}", "\x{9B2F}"), $r);
+ ok($obj->cmp("\x{2FC0}", "\x{9B32}"), $r);
+ ok($obj->cmp("\x{2FC1}", "\x{9B3C}"), $r);
+ ok($obj->cmp("\x{2FC2}", "\x{9B5A}"), $r);
+ ok($obj->cmp("\x{2FC3}", "\x{9CE5}"), $r);
+ ok($obj->cmp("\x{2FC4}", "\x{9E75}"), $r);
+ ok($obj->cmp("\x{2FC5}", "\x{9E7F}"), $r);
+ ok($obj->cmp("\x{2FC6}", "\x{9EA5}"), $r);
+ ok($obj->cmp("\x{2FC7}", "\x{9EBB}"), $r);
+ ok($obj->cmp("\x{2FC8}", "\x{9EC3}"), $r);
+ ok($obj->cmp("\x{2FC9}", "\x{9ECD}"), $r);
+ ok($obj->cmp("\x{2FCA}", "\x{9ED1}"), $r);
+ ok($obj->cmp("\x{2FCB}", "\x{9EF9}"), $r);
+ ok($obj->cmp("\x{2FCC}", "\x{9EFD}"), $r);
+ ok($obj->cmp("\x{2FCD}", "\x{9F0E}"), $r);
+ ok($obj->cmp("\x{2FCE}", "\x{9F13}"), $r);
+ ok($obj->cmp("\x{2FCF}", "\x{9F20}"), $r);
+ ok($obj->cmp("\x{2FD0}", "\x{9F3B}"), $r);
+ ok($obj->cmp("\x{2FD1}", "\x{9F4A}"), $r);
+ ok($obj->cmp("\x{2FD2}", "\x{9F52}"), $r);
+ ok($obj->cmp("\x{2FD3}", "\x{9F8D}"), $r);
+ ok($obj->cmp("\x{2FD4}", "\x{9F9C}"), $r);
+ ok($obj->cmp("\x{2EF3}", "\x{9F9F}"), $r);
+ ok($obj->cmp("\x{2FD5}", "\x{9FA0}"), $r);
+ }
+}
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_cjkc.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_cjkc.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_cjkc.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1077 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..8025\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objDefault = Unicode::Collate::Locale->
+ new(locale => 'DEFAULT', normalization => undef);
+
+ok($objDefault->getlocale, 'default');
+
+my $objB = Unicode::Collate::Locale->
+ new(locale => 'ZH__big5han', normalization => undef);
+
+ok($objB->getlocale, 'zh__big5han');
+
+my $objG = Unicode::Collate::Locale->
+ new(locale => 'ZH__gb2312han', normalization => undef);
+
+ok($objG->getlocale, 'zh__gb2312han');
+
+my $objJ = Unicode::Collate::Locale->
+ new(locale => 'JA', normalization => undef);
+
+ok($objJ->getlocale, 'ja');
+
+my $objK = Unicode::Collate::Locale->
+ new(locale => 'KO', normalization => undef);
+
+ok($objK->getlocale, 'ko');
+
+my $objP = Unicode::Collate::Locale->
+ new(locale => 'ZH__pinyin', normalization => undef);
+
+ok($objP->getlocale, 'zh__pinyin');
+
+my $objS = Unicode::Collate::Locale->
+ new(locale => 'ZH__stroke', normalization => undef);
+
+ok($objS->getlocale, 'zh__stroke');
+
+my $objZ = Unicode::Collate::Locale->
+ new(locale => 'ZH__zhuyin', normalization => undef);
+
+ok($objZ->getlocale, 'zh__zhuyin');
+
+for my $obj ($objDefault, $objB, $objG, $objJ, $objK, $objP, $objS, $objZ) {
+ $obj->change(level => 3);
+ ok($obj->eq("\x{4E0D}", "\x{F967}"));
+ ok($obj->eq("\x{4E26}", "\x{FA70}"));
+ ok($obj->eq("\x{4E32}", "\x{F905}"));
+ ok($obj->eq("\x{4E38}", "\x{2F801}"));
+ ok($obj->eq("\x{4E39}", "\x{F95E}"));
+ ok($obj->eq("\x{4E3D}", "\x{2F800}"));
+ ok($obj->eq("\x{4E41}", "\x{2F802}"));
+ ok($obj->eq("\x{4E82}", "\x{F91B}"));
+ ok($obj->eq("\x{4E86}", "\x{F9BA}"));
+ ok($obj->eq("\x{4EAE}", "\x{F977}"));
+ ok($obj->eq("\x{4EC0}", "\x{F9FD}"));
+ ok($obj->eq("\x{4ECC}", "\x{2F819}"));
+ ok($obj->eq("\x{4EE4}", "\x{F9A8}"));
+ ok($obj->eq("\x{4F60}", "\x{2F804}"));
+ ok($obj->eq("\x{4F80}", "\x{FA73}"));
+ ok($obj->eq("\x{4F86}", "\x{F92D}"));
+ ok($obj->eq("\x{4F8B}", "\x{F9B5}"));
+ ok($obj->eq("\x{4FAE}", "\x{FA30}"));
+ ok($obj->eq("\x{4FAE}", "\x{2F805}"));
+ ok($obj->eq("\x{4FBB}", "\x{2F806}"));
+ ok($obj->eq("\x{4FBF}", "\x{F965}"));
+ ok($obj->eq("\x{5002}", "\x{2F807}"));
+ ok($obj->eq("\x{502B}", "\x{F9D4}"));
+ ok($obj->eq("\x{507A}", "\x{2F808}"));
+ ok($obj->eq("\x{5099}", "\x{2F809}"));
+ ok($obj->eq("\x{50CF}", "\x{2F80B}"));
+ ok($obj->eq("\x{50DA}", "\x{F9BB}"));
+ ok($obj->eq("\x{50E7}", "\x{FA31}"));
+ ok($obj->eq("\x{50E7}", "\x{2F80A}"));
+ ok($obj->eq("\x{5140}", "\x{FA0C}"));
+ ok($obj->eq("\x{5145}", "\x{FA74}"));
+ ok($obj->eq("\x{514D}", "\x{FA32}"));
+ ok($obj->eq("\x{514D}", "\x{2F80E}"));
+ ok($obj->eq("\x{5154}", "\x{2F80F}"));
+ ok($obj->eq("\x{5164}", "\x{2F810}"));
+ ok($obj->eq("\x{5167}", "\x{2F814}"));
+ ok($obj->eq("\x{5168}", "\x{FA72}"));
+ ok($obj->eq("\x{5169}", "\x{F978}"));
+ ok($obj->eq("\x{516D}", "\x{F9D1}"));
+ ok($obj->eq("\x{5177}", "\x{2F811}"));
+ ok($obj->eq("\x{5180}", "\x{FA75}"));
+ ok($obj->eq("\x{518D}", "\x{2F815}"));
+ ok($obj->eq("\x{5192}", "\x{2F8D2}"));
+ ok($obj->eq("\x{5195}", "\x{2F8D3}"));
+ ok($obj->eq("\x{5197}", "\x{2F817}"));
+ ok($obj->eq("\x{51A4}", "\x{2F818}"));
+ ok($obj->eq("\x{51AC}", "\x{2F81A}"));
+ ok($obj->eq("\x{51B5}", "\x{FA71}"));
+ ok($obj->eq("\x{51B5}", "\x{2F81B}"));
+ ok($obj->eq("\x{51B7}", "\x{F92E}"));
+ ok($obj->eq("\x{51C9}", "\x{F979}"));
+ ok($obj->eq("\x{51CC}", "\x{F955}"));
+ ok($obj->eq("\x{51DC}", "\x{F954}"));
+ ok($obj->eq("\x{51DE}", "\x{FA15}"));
+ ok($obj->eq("\x{51F5}", "\x{2F81D}"));
+ ok($obj->eq("\x{5203}", "\x{2F81E}"));
+ ok($obj->eq("\x{5207}", "\x{FA00}"));
+ ok($obj->eq("\x{5207}", "\x{2F850}"));
+ ok($obj->eq("\x{5217}", "\x{F99C}"));
+ ok($obj->eq("\x{5229}", "\x{F9DD}"));
+ ok($obj->eq("\x{523A}", "\x{F9FF}"));
+ ok($obj->eq("\x{523B}", "\x{2F820}"));
+ ok($obj->eq("\x{5246}", "\x{2F821}"));
+ ok($obj->eq("\x{5272}", "\x{2F822}"));
+ ok($obj->eq("\x{5277}", "\x{2F823}"));
+ ok($obj->eq("\x{5289}", "\x{F9C7}"));
+ ok($obj->eq("\x{529B}", "\x{F98A}"));
+ ok($obj->eq("\x{52A3}", "\x{F99D}"));
+ ok($obj->eq("\x{52B3}", "\x{2F992}"));
+ ok($obj->eq("\x{52C7}", "\x{FA76}"));
+ ok($obj->eq("\x{52C7}", "\x{2F825}"));
+ ok($obj->eq("\x{52C9}", "\x{FA33}"));
+ ok($obj->eq("\x{52C9}", "\x{2F826}"));
+ ok($obj->eq("\x{52D2}", "\x{F952}"));
+ ok($obj->eq("\x{52DE}", "\x{F92F}"));
+ ok($obj->eq("\x{52E4}", "\x{FA34}"));
+ ok($obj->eq("\x{52E4}", "\x{2F827}"));
+ ok($obj->eq("\x{52F5}", "\x{F97F}"));
+ ok($obj->eq("\x{52FA}", "\x{FA77}"));
+ ok($obj->eq("\x{52FA}", "\x{2F828}"));
+ ok($obj->eq("\x{5305}", "\x{2F829}"));
+ ok($obj->eq("\x{5306}", "\x{2F82A}"));
+ ok($obj->eq("\x{5317}", "\x{F963}"));
+ ok($obj->eq("\x{5317}", "\x{2F82B}"));
+ ok($obj->eq("\x{533F}", "\x{F9EB}"));
+ ok($obj->eq("\x{5349}", "\x{2F82C}"));
+ ok($obj->eq("\x{5351}", "\x{FA35}"));
+ ok($obj->eq("\x{5351}", "\x{2F82D}"));
+ ok($obj->eq("\x{535A}", "\x{2F82E}"));
+ ok($obj->eq("\x{5373}", "\x{2F82F}"));
+ ok($obj->eq("\x{5375}", "\x{F91C}"));
+ ok($obj->eq("\x{537D}", "\x{2F830}"));
+ ok($obj->eq("\x{537F}", "\x{2F831}"));
+ ok($obj->eq("\x{537F}", "\x{2F832}"));
+ ok($obj->eq("\x{537F}", "\x{2F833}"));
+ ok($obj->eq("\x{53C3}", "\x{F96B}"));
+ ok($obj->eq("\x{53CA}", "\x{2F836}"));
+ ok($obj->eq("\x{53DF}", "\x{2F837}"));
+ ok($obj->eq("\x{53E5}", "\x{F906}"));
+ ok($obj->eq("\x{53EB}", "\x{2F839}"));
+ ok($obj->eq("\x{53F1}", "\x{2F83A}"));
+ ok($obj->eq("\x{5406}", "\x{2F83B}"));
+ ok($obj->eq("\x{540F}", "\x{F9DE}"));
+ ok($obj->eq("\x{541D}", "\x{F9ED}"));
+ ok($obj->eq("\x{5438}", "\x{2F83D}"));
+ ok($obj->eq("\x{5442}", "\x{F980}"));
+ ok($obj->eq("\x{5448}", "\x{2F83E}"));
+ ok($obj->eq("\x{5468}", "\x{2F83F}"));
+ ok($obj->eq("\x{549E}", "\x{2F83C}"));
+ ok($obj->eq("\x{54A2}", "\x{2F840}"));
+ ok($obj->eq("\x{54BD}", "\x{F99E}"));
+ ok($obj->eq("\x{54F6}", "\x{2F841}"));
+ ok($obj->eq("\x{5510}", "\x{2F842}"));
+ ok($obj->eq("\x{5553}", "\x{2F843}"));
+ ok($obj->eq("\x{5555}", "\x{FA79}"));
+ ok($obj->eq("\x{5563}", "\x{2F844}"));
+ ok($obj->eq("\x{5584}", "\x{2F845}"));
+ ok($obj->eq("\x{5584}", "\x{2F846}"));
+ ok($obj->eq("\x{5587}", "\x{F90B}"));
+ ok($obj->eq("\x{5599}", "\x{FA7A}"));
+ ok($obj->eq("\x{5599}", "\x{2F847}"));
+ ok($obj->eq("\x{559D}", "\x{FA36}"));
+ ok($obj->eq("\x{559D}", "\x{FA78}"));
+ ok($obj->eq("\x{55AB}", "\x{2F848}"));
+ ok($obj->eq("\x{55B3}", "\x{2F849}"));
+ ok($obj->eq("\x{55C0}", "\x{FA0D}"));
+ ok($obj->eq("\x{55C2}", "\x{2F84A}"));
+ ok($obj->eq("\x{55E2}", "\x{FA7B}"));
+ ok($obj->eq("\x{5606}", "\x{FA37}"));
+ ok($obj->eq("\x{5606}", "\x{2F84C}"));
+ ok($obj->eq("\x{5651}", "\x{2F84E}"));
+ ok($obj->eq("\x{5668}", "\x{FA38}"));
+ ok($obj->eq("\x{5674}", "\x{2F84F}"));
+ ok($obj->eq("\x{56F9}", "\x{F9A9}"));
+ ok($obj->eq("\x{5716}", "\x{2F84B}"));
+ ok($obj->eq("\x{5717}", "\x{2F84D}"));
+ ok($obj->eq("\x{578B}", "\x{2F855}"));
+ ok($obj->eq("\x{57CE}", "\x{2F852}"));
+ ok($obj->eq("\x{57F4}", "\x{2F853}"));
+ ok($obj->eq("\x{580D}", "\x{2F854}"));
+ ok($obj->eq("\x{5831}", "\x{2F857}"));
+ ok($obj->eq("\x{5832}", "\x{2F856}"));
+ ok($obj->eq("\x{5840}", "\x{FA39}"));
+ ok($obj->eq("\x{585A}", "\x{FA10}"));
+ ok($obj->eq("\x{585A}", "\x{FA7C}"));
+ ok($obj->eq("\x{585E}", "\x{F96C}"));
+ ok($obj->eq("\x{58A8}", "\x{FA3A}"));
+ ok($obj->eq("\x{58AC}", "\x{2F858}"));
+ ok($obj->eq("\x{58B3}", "\x{FA7D}"));
+ ok($obj->eq("\x{58D8}", "\x{F94A}"));
+ ok($obj->eq("\x{58DF}", "\x{F942}"));
+ ok($obj->eq("\x{58EE}", "\x{2F851}"));
+ ok($obj->eq("\x{58F2}", "\x{2F85A}"));
+ ok($obj->eq("\x{58F7}", "\x{2F85B}"));
+ ok($obj->eq("\x{5906}", "\x{2F85C}"));
+ ok($obj->eq("\x{591A}", "\x{2F85D}"));
+ ok($obj->eq("\x{5922}", "\x{2F85E}"));
+ ok($obj->eq("\x{5944}", "\x{FA7E}"));
+ ok($obj->eq("\x{5948}", "\x{F90C}"));
+ ok($obj->eq("\x{5951}", "\x{F909}"));
+ ok($obj->eq("\x{5954}", "\x{FA7F}"));
+ ok($obj->eq("\x{5962}", "\x{2F85F}"));
+ ok($obj->eq("\x{5973}", "\x{F981}"));
+ ok($obj->eq("\x{59D8}", "\x{2F865}"));
+ ok($obj->eq("\x{59EC}", "\x{2F862}"));
+ ok($obj->eq("\x{5A1B}", "\x{2F863}"));
+ ok($obj->eq("\x{5A27}", "\x{2F864}"));
+ ok($obj->eq("\x{5A62}", "\x{FA80}"));
+ ok($obj->eq("\x{5A66}", "\x{2F866}"));
+ ok($obj->eq("\x{5AB5}", "\x{2F986}"));
+ ok($obj->eq("\x{5B08}", "\x{2F869}"));
+ ok($obj->eq("\x{5B28}", "\x{FA81}"));
+ ok($obj->eq("\x{5B3E}", "\x{2F86A}"));
+ ok($obj->eq("\x{5B3E}", "\x{2F86B}"));
+ ok($obj->eq("\x{5B85}", "\x{FA04}"));
+ ok($obj->eq("\x{5BC3}", "\x{2F86D}"));
+ ok($obj->eq("\x{5BD8}", "\x{2F86E}"));
+ ok($obj->eq("\x{5BE7}", "\x{F95F}"));
+ ok($obj->eq("\x{5BE7}", "\x{F9AA}"));
+ ok($obj->eq("\x{5BE7}", "\x{2F86F}"));
+ ok($obj->eq("\x{5BEE}", "\x{F9BC}"));
+ ok($obj->eq("\x{5BF3}", "\x{2F870}"));
+ ok($obj->eq("\x{5BFF}", "\x{2F872}"));
+ ok($obj->eq("\x{5C06}", "\x{2F873}"));
+ ok($obj->eq("\x{5C22}", "\x{2F875}"));
+ ok($obj->eq("\x{5C3F}", "\x{F9BD}"));
+ ok($obj->eq("\x{5C60}", "\x{2F877}"));
+ ok($obj->eq("\x{5C62}", "\x{F94B}"));
+ ok($obj->eq("\x{5C64}", "\x{FA3B}"));
+ ok($obj->eq("\x{5C65}", "\x{F9DF}"));
+ ok($obj->eq("\x{5C6E}", "\x{FA3C}"));
+ ok($obj->eq("\x{5C6E}", "\x{2F878}"));
+ ok($obj->eq("\x{5C8D}", "\x{2F87A}"));
+ ok($obj->eq("\x{5CC0}", "\x{2F879}"));
+ ok($obj->eq("\x{5D19}", "\x{F9D5}"));
+ ok($obj->eq("\x{5D43}", "\x{2F87C}"));
+ ok($obj->eq("\x{5D50}", "\x{F921}"));
+ ok($obj->eq("\x{5D6B}", "\x{2F87F}"));
+ ok($obj->eq("\x{5D6E}", "\x{2F87E}"));
+ ok($obj->eq("\x{5D7C}", "\x{2F880}"));
+ ok($obj->eq("\x{5DB2}", "\x{2F9F4}"));
+ ok($obj->eq("\x{5DBA}", "\x{F9AB}"));
+ ok($obj->eq("\x{5DE1}", "\x{2F881}"));
+ ok($obj->eq("\x{5DE2}", "\x{2F882}"));
+ ok($obj->eq("\x{5DFD}", "\x{2F884}"));
+ ok($obj->eq("\x{5E28}", "\x{2F885}"));
+ ok($obj->eq("\x{5E3D}", "\x{2F886}"));
+ ok($obj->eq("\x{5E69}", "\x{2F887}"));
+ ok($obj->eq("\x{5E74}", "\x{F98E}"));
+ ok($obj->eq("\x{5EA6}", "\x{FA01}"));
+ ok($obj->eq("\x{5EB0}", "\x{2F88B}"));
+ ok($obj->eq("\x{5EB3}", "\x{2F88C}"));
+ ok($obj->eq("\x{5EB6}", "\x{2F88D}"));
+ ok($obj->eq("\x{5EC9}", "\x{F9A2}"));
+ ok($obj->eq("\x{5ECA}", "\x{F928}"));
+ ok($obj->eq("\x{5ECA}", "\x{2F88E}"));
+ ok($obj->eq("\x{5ED2}", "\x{FA82}"));
+ ok($obj->eq("\x{5ED3}", "\x{FA0B}"));
+ ok($obj->eq("\x{5ED9}", "\x{FA83}"));
+ ok($obj->eq("\x{5EEC}", "\x{F982}"));
+ ok($obj->eq("\x{5EFE}", "\x{2F890}"));
+ ok($obj->eq("\x{5F04}", "\x{F943}"));
+ ok($obj->eq("\x{5F22}", "\x{2F894}"));
+ ok($obj->eq("\x{5F22}", "\x{2F895}"));
+ ok($obj->eq("\x{5F53}", "\x{2F874}"));
+ ok($obj->eq("\x{5F62}", "\x{2F899}"));
+ ok($obj->eq("\x{5F69}", "\x{FA84}"));
+ ok($obj->eq("\x{5F6B}", "\x{2F89A}"));
+ ok($obj->eq("\x{5F8B}", "\x{F9D8}"));
+ ok($obj->eq("\x{5F9A}", "\x{2F89C}"));
+ ok($obj->eq("\x{5FA9}", "\x{F966}"));
+ ok($obj->eq("\x{5FAD}", "\x{FA85}"));
+ ok($obj->eq("\x{5FCD}", "\x{2F89D}"));
+ ok($obj->eq("\x{5FD7}", "\x{2F89E}"));
+ ok($obj->eq("\x{5FF5}", "\x{F9A3}"));
+ ok($obj->eq("\x{5FF9}", "\x{2F89F}"));
+ ok($obj->eq("\x{6012}", "\x{F960}"));
+ ok($obj->eq("\x{601C}", "\x{F9AC}"));
+ ok($obj->eq("\x{6075}", "\x{FA6B}"));
+ ok($obj->eq("\x{6081}", "\x{2F8A0}"));
+ ok($obj->eq("\x{6094}", "\x{FA3D}"));
+ ok($obj->eq("\x{6094}", "\x{2F8A3}"));
+ ok($obj->eq("\x{60C7}", "\x{2F8A5}"));
+ ok($obj->eq("\x{60D8}", "\x{FA86}"));
+ ok($obj->eq("\x{60E1}", "\x{F9B9}"));
+ ok($obj->eq("\x{6108}", "\x{FA88}"));
+ ok($obj->eq("\x{6144}", "\x{F9D9}"));
+ ok($obj->eq("\x{6148}", "\x{2F8A6}"));
+ ok($obj->eq("\x{614C}", "\x{2F8A7}"));
+ ok($obj->eq("\x{614C}", "\x{2F8A9}"));
+ ok($obj->eq("\x{614E}", "\x{FA87}"));
+ ok($obj->eq("\x{614E}", "\x{2F8A8}"));
+ ok($obj->eq("\x{6160}", "\x{FA8A}"));
+ ok($obj->eq("\x{6168}", "\x{FA3E}"));
+ ok($obj->eq("\x{617A}", "\x{2F8AA}"));
+ ok($obj->eq("\x{618E}", "\x{FA3F}"));
+ ok($obj->eq("\x{618E}", "\x{FA89}"));
+ ok($obj->eq("\x{618E}", "\x{2F8AB}"));
+ ok($obj->eq("\x{6190}", "\x{F98F}"));
+ ok($obj->eq("\x{61A4}", "\x{2F8AD}"));
+ ok($obj->eq("\x{61AF}", "\x{2F8AE}"));
+ ok($obj->eq("\x{61B2}", "\x{2F8AC}"));
+ ok($obj->eq("\x{61DE}", "\x{2F8AF}"));
+ ok($obj->eq("\x{61F2}", "\x{FA40}"));
+ ok($obj->eq("\x{61F2}", "\x{FA8B}"));
+ ok($obj->eq("\x{61F2}", "\x{2F8B0}"));
+ ok($obj->eq("\x{61F6}", "\x{F90D}"));
+ ok($obj->eq("\x{61F6}", "\x{2F8B1}"));
+ ok($obj->eq("\x{6200}", "\x{F990}"));
+ ok($obj->eq("\x{6210}", "\x{2F8B2}"));
+ ok($obj->eq("\x{621B}", "\x{2F8B3}"));
+ ok($obj->eq("\x{622E}", "\x{F9D2}"));
+ ok($obj->eq("\x{6234}", "\x{FA8C}"));
+ ok($obj->eq("\x{625D}", "\x{2F8B4}"));
+ ok($obj->eq("\x{62B1}", "\x{2F8B5}"));
+ ok($obj->eq("\x{62C9}", "\x{F925}"));
+ ok($obj->eq("\x{62CF}", "\x{F95B}"));
+ ok($obj->eq("\x{62D3}", "\x{FA02}"));
+ ok($obj->eq("\x{62D4}", "\x{2F8B6}"));
+ ok($obj->eq("\x{62FC}", "\x{2F8BA}"));
+ ok($obj->eq("\x{62FE}", "\x{F973}"));
+ ok($obj->eq("\x{633D}", "\x{2F8B9}"));
+ ok($obj->eq("\x{6350}", "\x{2F8B7}"));
+ ok($obj->eq("\x{6368}", "\x{2F8BB}"));
+ ok($obj->eq("\x{637B}", "\x{F9A4}"));
+ ok($obj->eq("\x{6383}", "\x{2F8BC}"));
+ ok($obj->eq("\x{63A0}", "\x{F975}"));
+ ok($obj->eq("\x{63A9}", "\x{2F8C1}"));
+ ok($obj->eq("\x{63C4}", "\x{FA8D}"));
+ ok($obj->eq("\x{63C5}", "\x{2F8C0}"));
+ ok($obj->eq("\x{63E4}", "\x{2F8BD}"));
+ ok($obj->eq("\x{641C}", "\x{FA8E}"));
+ ok($obj->eq("\x{6422}", "\x{2F8BF}"));
+ ok($obj->eq("\x{6452}", "\x{FA8F}"));
+ ok($obj->eq("\x{6469}", "\x{2F8C3}"));
+ ok($obj->eq("\x{6477}", "\x{2F8C6}"));
+ ok($obj->eq("\x{647E}", "\x{2F8C4}"));
+ ok($obj->eq("\x{649A}", "\x{F991}"));
+ ok($obj->eq("\x{649D}", "\x{2F8C5}"));
+ ok($obj->eq("\x{64C4}", "\x{F930}"));
+ ok($obj->eq("\x{654F}", "\x{FA41}"));
+ ok($obj->eq("\x{654F}", "\x{2F8C8}"));
+ ok($obj->eq("\x{6556}", "\x{FA90}"));
+ ok($obj->eq("\x{656C}", "\x{2F8C9}"));
+ ok($obj->eq("\x{6578}", "\x{F969}"));
+ ok($obj->eq("\x{6599}", "\x{F9BE}"));
+ ok($obj->eq("\x{65C5}", "\x{F983}"));
+ ok($obj->eq("\x{65E2}", "\x{FA42}"));
+ ok($obj->eq("\x{65E3}", "\x{2F8CB}"));
+ ok($obj->eq("\x{6613}", "\x{F9E0}"));
+ ok($obj->eq("\x{6649}", "\x{2F8CD}"));
+ ok($obj->eq("\x{6674}", "\x{FA12}"));
+ ok($obj->eq("\x{6674}", "\x{FA91}"));
+ ok($obj->eq("\x{6688}", "\x{F9C5}"));
+ ok($obj->eq("\x{6691}", "\x{FA43}"));
+ ok($obj->eq("\x{6691}", "\x{2F8CF}"));
+ ok($obj->eq("\x{669C}", "\x{2F8D5}"));
+ ok($obj->eq("\x{66B4}", "\x{FA06}"));
+ ok($obj->eq("\x{66C6}", "\x{F98B}"));
+ ok($obj->eq("\x{66F4}", "\x{F901}"));
+ ok($obj->eq("\x{66F8}", "\x{2F8CC}"));
+ ok($obj->eq("\x{6700}", "\x{2F8D4}"));
+ ok($obj->eq("\x{6717}", "\x{F929}"));
+ ok($obj->eq("\x{6717}", "\x{FA92}"));
+ ok($obj->eq("\x{6717}", "\x{2F8D8}"));
+ ok($obj->eq("\x{671B}", "\x{FA93}"));
+ ok($obj->eq("\x{671B}", "\x{2F8D9}"));
+ ok($obj->eq("\x{6721}", "\x{2F8DA}"));
+ ok($obj->eq("\x{674E}", "\x{F9E1}"));
+ ok($obj->eq("\x{6753}", "\x{2F8DC}"));
+ ok($obj->eq("\x{6756}", "\x{FA94}"));
+ ok($obj->eq("\x{675E}", "\x{2F8DB}"));
+ ok($obj->eq("\x{677B}", "\x{F9C8}"));
+ ok($obj->eq("\x{6785}", "\x{2F8E0}"));
+ ok($obj->eq("\x{6797}", "\x{F9F4}"));
+ ok($obj->eq("\x{67F3}", "\x{F9C9}"));
+ ok($obj->eq("\x{67FA}", "\x{2F8DF}"));
+ ok($obj->eq("\x{6817}", "\x{F9DA}"));
+ ok($obj->eq("\x{681F}", "\x{2F8E5}"));
+ ok($obj->eq("\x{6852}", "\x{2F8E1}"));
+ ok($obj->eq("\x{6881}", "\x{F97A}"));
+ ok($obj->eq("\x{6885}", "\x{FA44}"));
+ ok($obj->eq("\x{6885}", "\x{2F8E2}"));
+ ok($obj->eq("\x{688E}", "\x{2F8E4}"));
+ ok($obj->eq("\x{68A8}", "\x{F9E2}"));
+ ok($obj->eq("\x{6914}", "\x{2F8E6}"));
+ ok($obj->eq("\x{6942}", "\x{2F8E8}"));
+ ok($obj->eq("\x{69A3}", "\x{2F8E9}"));
+ ok($obj->eq("\x{69EA}", "\x{2F8EA}"));
+ ok($obj->eq("\x{6A02}", "\x{F914}"));
+ ok($obj->eq("\x{6A02}", "\x{F95C}"));
+ ok($obj->eq("\x{6A02}", "\x{F9BF}"));
+ ok($obj->eq("\x{6A13}", "\x{F94C}"));
+ ok($obj->eq("\x{6AA8}", "\x{2F8EB}"));
+ ok($obj->eq("\x{6AD3}", "\x{F931}"));
+ ok($obj->eq("\x{6ADB}", "\x{2F8ED}"));
+ ok($obj->eq("\x{6B04}", "\x{F91D}"));
+ ok($obj->eq("\x{6B21}", "\x{2F8EF}"));
+ ok($obj->eq("\x{6B54}", "\x{2F8F1}"));
+ ok($obj->eq("\x{6B72}", "\x{2F8F3}"));
+ ok($obj->eq("\x{6B77}", "\x{F98C}"));
+ ok($obj->eq("\x{6B79}", "\x{FA95}"));
+ ok($obj->eq("\x{6B9F}", "\x{2F8F4}"));
+ ok($obj->eq("\x{6BAE}", "\x{F9A5}"));
+ ok($obj->eq("\x{6BBA}", "\x{F970}"));
+ ok($obj->eq("\x{6BBA}", "\x{FA96}"));
+ ok($obj->eq("\x{6BBA}", "\x{2F8F5}"));
+ ok($obj->eq("\x{6BBB}", "\x{2F8F6}"));
+ ok($obj->eq("\x{6C4E}", "\x{2F8FA}"));
+ ok($obj->eq("\x{6C67}", "\x{2F8FE}"));
+ ok($obj->eq("\x{6C88}", "\x{F972}"));
+ ok($obj->eq("\x{6CBF}", "\x{2F8FC}"));
+ ok($obj->eq("\x{6CCC}", "\x{F968}"));
+ ok($obj->eq("\x{6CCD}", "\x{2F8FD}"));
+ ok($obj->eq("\x{6CE5}", "\x{F9E3}"));
+ ok($obj->eq("\x{6D16}", "\x{2F8FF}"));
+ ok($obj->eq("\x{6D1B}", "\x{F915}"));
+ ok($obj->eq("\x{6D1E}", "\x{FA05}"));
+ ok($obj->eq("\x{6D34}", "\x{2F907}"));
+ ok($obj->eq("\x{6D3E}", "\x{2F900}"));
+ ok($obj->eq("\x{6D41}", "\x{F9CA}"));
+ ok($obj->eq("\x{6D41}", "\x{FA97}"));
+ ok($obj->eq("\x{6D41}", "\x{2F902}"));
+ ok($obj->eq("\x{6D69}", "\x{2F903}"));
+ ok($obj->eq("\x{6D6A}", "\x{F92A}"));
+ ok($obj->eq("\x{6D77}", "\x{FA45}"));
+ ok($obj->eq("\x{6D77}", "\x{2F901}"));
+ ok($obj->eq("\x{6D78}", "\x{2F904}"));
+ ok($obj->eq("\x{6D85}", "\x{2F905}"));
+ ok($obj->eq("\x{6DCB}", "\x{F9F5}"));
+ ok($obj->eq("\x{6DDA}", "\x{F94D}"));
+ ok($obj->eq("\x{6DEA}", "\x{F9D6}"));
+ ok($obj->eq("\x{6DF9}", "\x{2F90E}"));
+ ok($obj->eq("\x{6E1A}", "\x{FA46}"));
+ ok($obj->eq("\x{6E2F}", "\x{2F908}"));
+ ok($obj->eq("\x{6E6E}", "\x{2F909}"));
+ ok($obj->eq("\x{6E9C}", "\x{F9CB}"));
+ ok($obj->eq("\x{6EBA}", "\x{F9EC}"));
+ ok($obj->eq("\x{6EC7}", "\x{2F90C}"));
+ ok($obj->eq("\x{6ECB}", "\x{FA99}"));
+ ok($obj->eq("\x{6ECB}", "\x{2F90B}"));
+ ok($obj->eq("\x{6ED1}", "\x{F904}"));
+ ok($obj->eq("\x{6EDB}", "\x{FA98}"));
+ ok($obj->eq("\x{6F0F}", "\x{F94E}"));
+ ok($obj->eq("\x{6F22}", "\x{FA47}"));
+ ok($obj->eq("\x{6F22}", "\x{FA9A}"));
+ ok($obj->eq("\x{6F23}", "\x{F992}"));
+ ok($obj->eq("\x{6F6E}", "\x{2F90F}"));
+ ok($obj->eq("\x{6FC6}", "\x{2F912}"));
+ ok($obj->eq("\x{6FEB}", "\x{F922}"));
+ ok($obj->eq("\x{6FFE}", "\x{F984}"));
+ ok($obj->eq("\x{701B}", "\x{2F915}"));
+ ok($obj->eq("\x{701E}", "\x{FA9B}"));
+ ok($obj->eq("\x{701E}", "\x{2F914}"));
+ ok($obj->eq("\x{7039}", "\x{2F913}"));
+ ok($obj->eq("\x{704A}", "\x{2F917}"));
+ ok($obj->eq("\x{7070}", "\x{2F835}"));
+ ok($obj->eq("\x{7077}", "\x{2F919}"));
+ ok($obj->eq("\x{707D}", "\x{2F918}"));
+ ok($obj->eq("\x{7099}", "\x{F9FB}"));
+ ok($obj->eq("\x{70AD}", "\x{2F91A}"));
+ ok($obj->eq("\x{70C8}", "\x{F99F}"));
+ ok($obj->eq("\x{70D9}", "\x{F916}"));
+ ok($obj->eq("\x{7145}", "\x{2F91C}"));
+ ok($obj->eq("\x{7149}", "\x{F993}"));
+ ok($obj->eq("\x{716E}", "\x{FA48}"));
+ ok($obj->eq("\x{716E}", "\x{FA9C}"));
+ ok($obj->eq("\x{719C}", "\x{2F91E}"));
+ ok($obj->eq("\x{71CE}", "\x{F9C0}"));
+ ok($obj->eq("\x{71D0}", "\x{F9EE}"));
+ ok($obj->eq("\x{7210}", "\x{F932}"));
+ ok($obj->eq("\x{721B}", "\x{F91E}"));
+ ok($obj->eq("\x{7228}", "\x{2F920}"));
+ ok($obj->eq("\x{722B}", "\x{FA49}"));
+ ok($obj->eq("\x{7235}", "\x{FA9E}"));
+ ok($obj->eq("\x{7235}", "\x{2F921}"));
+ ok($obj->eq("\x{7250}", "\x{2F922}"));
+ ok($obj->eq("\x{7262}", "\x{F946}"));
+ ok($obj->eq("\x{7280}", "\x{2F924}"));
+ ok($obj->eq("\x{7295}", "\x{2F925}"));
+ ok($obj->eq("\x{72AF}", "\x{FA9F}"));
+ ok($obj->eq("\x{72C0}", "\x{F9FA}"));
+ ok($obj->eq("\x{72FC}", "\x{F92B}"));
+ ok($obj->eq("\x{732A}", "\x{FA16}"));
+ ok($obj->eq("\x{732A}", "\x{FAA0}"));
+ ok($obj->eq("\x{7375}", "\x{F9A7}"));
+ ok($obj->eq("\x{737A}", "\x{2F928}"));
+ ok($obj->eq("\x{7387}", "\x{F961}"));
+ ok($obj->eq("\x{7387}", "\x{F9DB}"));
+ ok($obj->eq("\x{738B}", "\x{2F929}"));
+ ok($obj->eq("\x{73A5}", "\x{2F92B}"));
+ ok($obj->eq("\x{73B2}", "\x{F9AD}"));
+ ok($obj->eq("\x{73DE}", "\x{F917}"));
+ ok($obj->eq("\x{7406}", "\x{F9E4}"));
+ ok($obj->eq("\x{7409}", "\x{F9CC}"));
+ ok($obj->eq("\x{7422}", "\x{FA4A}"));
+ ok($obj->eq("\x{7447}", "\x{2F92E}"));
+ ok($obj->eq("\x{745C}", "\x{2F92F}"));
+ ok($obj->eq("\x{7469}", "\x{F9AE}"));
+ ok($obj->eq("\x{7471}", "\x{FAA1}"));
+ ok($obj->eq("\x{7471}", "\x{2F930}"));
+ ok($obj->eq("\x{7485}", "\x{2F931}"));
+ ok($obj->eq("\x{7489}", "\x{F994}"));
+ ok($obj->eq("\x{7498}", "\x{F9EF}"));
+ ok($obj->eq("\x{74CA}", "\x{2F932}"));
+ ok($obj->eq("\x{7506}", "\x{FAA2}"));
+ ok($obj->eq("\x{7524}", "\x{2F934}"));
+ ok($obj->eq("\x{753B}", "\x{FAA3}"));
+ ok($obj->eq("\x{753E}", "\x{2F936}"));
+ ok($obj->eq("\x{7559}", "\x{F9CD}"));
+ ok($obj->eq("\x{7565}", "\x{F976}"));
+ ok($obj->eq("\x{7570}", "\x{F962}"));
+ ok($obj->eq("\x{7570}", "\x{2F938}"));
+ ok($obj->eq("\x{75E2}", "\x{F9E5}"));
+ ok($obj->eq("\x{7610}", "\x{2F93A}"));
+ ok($obj->eq("\x{761D}", "\x{FAA4}"));
+ ok($obj->eq("\x{761F}", "\x{FAA5}"));
+ ok($obj->eq("\x{7642}", "\x{F9C1}"));
+ ok($obj->eq("\x{7669}", "\x{F90E}"));
+ ok($obj->eq("\x{76CA}", "\x{FA17}"));
+ ok($obj->eq("\x{76CA}", "\x{FAA6}"));
+ ok($obj->eq("\x{76DB}", "\x{FAA7}"));
+ ok($obj->eq("\x{76E7}", "\x{F933}"));
+ ok($obj->eq("\x{76F4}", "\x{FAA8}"));
+ ok($obj->eq("\x{76F4}", "\x{2F940}"));
+ ok($obj->eq("\x{7701}", "\x{F96D}"));
+ ok($obj->eq("\x{771E}", "\x{2F945}"));
+ ok($obj->eq("\x{771F}", "\x{2F946}"));
+ ok($obj->eq("\x{771F}", "\x{2F947}"));
+ ok($obj->eq("\x{7740}", "\x{FAAA}"));
+ ok($obj->eq("\x{774A}", "\x{FAA9}"));
+ ok($obj->eq("\x{774A}", "\x{2F948}"));
+ ok($obj->eq("\x{778B}", "\x{2F94A}"));
+ ok($obj->eq("\x{77A7}", "\x{FA9D}"));
+ ok($obj->eq("\x{784E}", "\x{2F94E}"));
+ ok($obj->eq("\x{786B}", "\x{F9CE}"));
+ ok($obj->eq("\x{788C}", "\x{F93B}"));
+ ok($obj->eq("\x{788C}", "\x{2F94F}"));
+ ok($obj->eq("\x{7891}", "\x{FA4B}"));
+ ok($obj->eq("\x{78CA}", "\x{F947}"));
+ ok($obj->eq("\x{78CC}", "\x{FAAB}"));
+ ok($obj->eq("\x{78CC}", "\x{2F950}"));
+ ok($obj->eq("\x{78FB}", "\x{F964}"));
+ ok($obj->eq("\x{792A}", "\x{F985}"));
+ ok($obj->eq("\x{793C}", "\x{FA18}"));
+ ok($obj->eq("\x{793E}", "\x{FA4C}"));
+ ok($obj->eq("\x{7948}", "\x{FA4E}"));
+ ok($obj->eq("\x{7949}", "\x{FA4D}"));
+ ok($obj->eq("\x{7950}", "\x{FA4F}"));
+ ok($obj->eq("\x{7956}", "\x{FA50}"));
+ ok($obj->eq("\x{7956}", "\x{2F953}"));
+ ok($obj->eq("\x{795D}", "\x{FA51}"));
+ ok($obj->eq("\x{795E}", "\x{FA19}"));
+ ok($obj->eq("\x{7965}", "\x{FA1A}"));
+ ok($obj->eq("\x{797F}", "\x{F93C}"));
+ ok($obj->eq("\x{798D}", "\x{FA52}"));
+ ok($obj->eq("\x{798E}", "\x{FA53}"));
+ ok($obj->eq("\x{798F}", "\x{FA1B}"));
+ ok($obj->eq("\x{798F}", "\x{2F956}"));
+ ok($obj->eq("\x{79AE}", "\x{F9B6}"));
+ ok($obj->eq("\x{79CA}", "\x{F995}"));
+ ok($obj->eq("\x{79EB}", "\x{2F957}"));
+ ok($obj->eq("\x{7A1C}", "\x{F956}"));
+ ok($obj->eq("\x{7A40}", "\x{FA54}"));
+ ok($obj->eq("\x{7A40}", "\x{2F959}"));
+ ok($obj->eq("\x{7A4A}", "\x{2F95A}"));
+ ok($obj->eq("\x{7A4F}", "\x{2F95B}"));
+ ok($obj->eq("\x{7A81}", "\x{FA55}"));
+ ok($obj->eq("\x{7AB1}", "\x{FAAC}"));
+ ok($obj->eq("\x{7ACB}", "\x{F9F7}"));
+ ok($obj->eq("\x{7AEE}", "\x{2F95F}"));
+ ok($obj->eq("\x{7B20}", "\x{F9F8}"));
+ ok($obj->eq("\x{7BC0}", "\x{FA56}"));
+ ok($obj->eq("\x{7BC0}", "\x{FAAD}"));
+ ok($obj->eq("\x{7BC6}", "\x{2F962}"));
+ ok($obj->eq("\x{7BC9}", "\x{2F963}"));
+ ok($obj->eq("\x{7C3E}", "\x{F9A6}"));
+ ok($obj->eq("\x{7C60}", "\x{F944}"));
+ ok($obj->eq("\x{7C7B}", "\x{FAAE}"));
+ ok($obj->eq("\x{7C92}", "\x{F9F9}"));
+ ok($obj->eq("\x{7CBE}", "\x{FA1D}"));
+ ok($obj->eq("\x{7CD2}", "\x{2F966}"));
+ ok($obj->eq("\x{7CD6}", "\x{FA03}"));
+ ok($obj->eq("\x{7CE3}", "\x{2F969}"));
+ ok($obj->eq("\x{7CE7}", "\x{F97B}"));
+ ok($obj->eq("\x{7CE8}", "\x{2F968}"));
+ ok($obj->eq("\x{7D00}", "\x{2F96A}"));
+ ok($obj->eq("\x{7D10}", "\x{F9CF}"));
+ ok($obj->eq("\x{7D22}", "\x{F96A}"));
+ ok($obj->eq("\x{7D2F}", "\x{F94F}"));
+ ok($obj->eq("\x{7D5B}", "\x{FAAF}"));
+ ok($obj->eq("\x{7D63}", "\x{2F96C}"));
+ ok($obj->eq("\x{7DA0}", "\x{F93D}"));
+ ok($obj->eq("\x{7DBE}", "\x{F957}"));
+ ok($obj->eq("\x{7DC7}", "\x{2F96E}"));
+ ok($obj->eq("\x{7DF4}", "\x{F996}"));
+ ok($obj->eq("\x{7DF4}", "\x{FA57}"));
+ ok($obj->eq("\x{7DF4}", "\x{FAB0}"));
+ ok($obj->eq("\x{7E02}", "\x{2F96F}"));
+ ok($obj->eq("\x{7E09}", "\x{FA58}"));
+ ok($obj->eq("\x{7E37}", "\x{F950}"));
+ ok($obj->eq("\x{7E41}", "\x{FA59}"));
+ ok($obj->eq("\x{7E45}", "\x{2F970}"));
+ ok($obj->eq("\x{7F3E}", "\x{FAB1}"));
+ ok($obj->eq("\x{7F72}", "\x{FA5A}"));
+ ok($obj->eq("\x{7F79}", "\x{F9E6}"));
+ ok($obj->eq("\x{7F7A}", "\x{2F976}"));
+ ok($obj->eq("\x{7F85}", "\x{F90F}"));
+ ok($obj->eq("\x{7F95}", "\x{2F978}"));
+ ok($obj->eq("\x{7F9A}", "\x{F9AF}"));
+ ok($obj->eq("\x{7FBD}", "\x{FA1E}"));
+ ok($obj->eq("\x{7FFA}", "\x{2F979}"));
+ ok($obj->eq("\x{8001}", "\x{F934}"));
+ ok($obj->eq("\x{8005}", "\x{FA5B}"));
+ ok($obj->eq("\x{8005}", "\x{FAB2}"));
+ ok($obj->eq("\x{8005}", "\x{2F97A}"));
+ ok($obj->eq("\x{8046}", "\x{F9B0}"));
+ ok($obj->eq("\x{8060}", "\x{2F97D}"));
+ ok($obj->eq("\x{806F}", "\x{F997}"));
+ ok($obj->eq("\x{8070}", "\x{2F97F}"));
+ ok($obj->eq("\x{807E}", "\x{F945}"));
+ ok($obj->eq("\x{808B}", "\x{F953}"));
+ ok($obj->eq("\x{80AD}", "\x{2F8D6}"));
+ ok($obj->eq("\x{80B2}", "\x{2F982}"));
+ ok($obj->eq("\x{8103}", "\x{2F983}"));
+ ok($obj->eq("\x{813E}", "\x{2F985}"));
+ ok($obj->eq("\x{81D8}", "\x{F926}"));
+ ok($obj->eq("\x{81E8}", "\x{F9F6}"));
+ ok($obj->eq("\x{81ED}", "\x{FA5C}"));
+ ok($obj->eq("\x{8201}", "\x{2F893}"));
+ ok($obj->eq("\x{8201}", "\x{2F98B}"));
+ ok($obj->eq("\x{8204}", "\x{2F98C}"));
+ ok($obj->eq("\x{8218}", "\x{FA6D}"));
+ ok($obj->eq("\x{826F}", "\x{F97C}"));
+ ok($obj->eq("\x{8279}", "\x{FA5D}"));
+ ok($obj->eq("\x{8279}", "\x{FA5E}"));
+ ok($obj->eq("\x{828B}", "\x{2F990}"));
+ ok($obj->eq("\x{8291}", "\x{2F98F}"));
+ ok($obj->eq("\x{829D}", "\x{2F991}"));
+ ok($obj->eq("\x{82B1}", "\x{2F993}"));
+ ok($obj->eq("\x{82B3}", "\x{2F994}"));
+ ok($obj->eq("\x{82BD}", "\x{2F995}"));
+ ok($obj->eq("\x{82E5}", "\x{F974}"));
+ ok($obj->eq("\x{82E5}", "\x{2F998}"));
+ ok($obj->eq("\x{82E6}", "\x{2F996}"));
+ ok($obj->eq("\x{831D}", "\x{2F999}"));
+ ok($obj->eq("\x{8323}", "\x{2F99C}"));
+ ok($obj->eq("\x{8336}", "\x{F9FE}"));
+ ok($obj->eq("\x{8352}", "\x{FAB3}"));
+ ok($obj->eq("\x{8353}", "\x{2F9A0}"));
+ ok($obj->eq("\x{8363}", "\x{2F99A}"));
+ ok($obj->eq("\x{83AD}", "\x{2F99B}"));
+ ok($obj->eq("\x{83BD}", "\x{2F99D}"));
+ ok($obj->eq("\x{83C9}", "\x{F93E}"));
+ ok($obj->eq("\x{83CA}", "\x{2F9A1}"));
+ ok($obj->eq("\x{83CC}", "\x{2F9A2}"));
+ ok($obj->eq("\x{83DC}", "\x{2F9A3}"));
+ ok($obj->eq("\x{83E7}", "\x{2F99E}"));
+ ok($obj->eq("\x{83EF}", "\x{FAB4}"));
+ ok($obj->eq("\x{83F1}", "\x{F958}"));
+ ok($obj->eq("\x{843D}", "\x{F918}"));
+ ok($obj->eq("\x{8449}", "\x{F96E}"));
+ ok($obj->eq("\x{8457}", "\x{FA5F}"));
+ ok($obj->eq("\x{8457}", "\x{2F99F}"));
+ ok($obj->eq("\x{84EE}", "\x{F999}"));
+ ok($obj->eq("\x{84F1}", "\x{2F9A8}"));
+ ok($obj->eq("\x{84F3}", "\x{2F9A9}"));
+ ok($obj->eq("\x{84FC}", "\x{F9C2}"));
+ ok($obj->eq("\x{8516}", "\x{2F9AA}"));
+ ok($obj->eq("\x{8564}", "\x{2F9AC}"));
+ ok($obj->eq("\x{85CD}", "\x{F923}"));
+ ok($obj->eq("\x{85FA}", "\x{F9F0}"));
+ ok($obj->eq("\x{8606}", "\x{F935}"));
+ ok($obj->eq("\x{8612}", "\x{FA20}"));
+ ok($obj->eq("\x{862D}", "\x{F91F}"));
+ ok($obj->eq("\x{863F}", "\x{F910}"));
+ ok($obj->eq("\x{8650}", "\x{2F9B3}"));
+ ok($obj->eq("\x{865C}", "\x{F936}"));
+ ok($obj->eq("\x{865C}", "\x{2F9B4}"));
+ ok($obj->eq("\x{8667}", "\x{2F9B5}"));
+ ok($obj->eq("\x{8669}", "\x{2F9B6}"));
+ ok($obj->eq("\x{8688}", "\x{2F9B8}"));
+ ok($obj->eq("\x{86A9}", "\x{2F9B7}"));
+ ok($obj->eq("\x{86E2}", "\x{2F9BA}"));
+ ok($obj->eq("\x{870E}", "\x{2F9B9}"));
+ ok($obj->eq("\x{8728}", "\x{2F9BC}"));
+ ok($obj->eq("\x{876B}", "\x{2F9BD}"));
+ ok($obj->eq("\x{8779}", "\x{FAB5}"));
+ ok($obj->eq("\x{8779}", "\x{2F9BB}"));
+ ok($obj->eq("\x{8786}", "\x{2F9BE}"));
+ ok($obj->eq("\x{87BA}", "\x{F911}"));
+ ok($obj->eq("\x{87E1}", "\x{2F9C0}"));
+ ok($obj->eq("\x{8801}", "\x{2F9C1}"));
+ ok($obj->eq("\x{881F}", "\x{F927}"));
+ ok($obj->eq("\x{884C}", "\x{FA08}"));
+ ok($obj->eq("\x{8860}", "\x{2F9C3}"));
+ ok($obj->eq("\x{8863}", "\x{2F9C4}"));
+ ok($obj->eq("\x{88C2}", "\x{F9A0}"));
+ ok($obj->eq("\x{88CF}", "\x{F9E7}"));
+ ok($obj->eq("\x{88D7}", "\x{2F9C6}"));
+ ok($obj->eq("\x{88DE}", "\x{2F9C7}"));
+ ok($obj->eq("\x{88E1}", "\x{F9E8}"));
+ ok($obj->eq("\x{88F8}", "\x{F912}"));
+ ok($obj->eq("\x{88FA}", "\x{2F9C9}"));
+ ok($obj->eq("\x{8910}", "\x{FA60}"));
+ ok($obj->eq("\x{8941}", "\x{FAB6}"));
+ ok($obj->eq("\x{8964}", "\x{F924}"));
+ ok($obj->eq("\x{8986}", "\x{FAB7}"));
+ ok($obj->eq("\x{898B}", "\x{FA0A}"));
+ ok($obj->eq("\x{8996}", "\x{FA61}"));
+ ok($obj->eq("\x{8996}", "\x{FAB8}"));
+ ok($obj->eq("\x{8AA0}", "\x{2F9CF}"));
+ ok($obj->eq("\x{8AAA}", "\x{F96F}"));
+ ok($obj->eq("\x{8AAA}", "\x{F9A1}"));
+ ok($obj->eq("\x{8ABF}", "\x{FAB9}"));
+ ok($obj->eq("\x{8ACB}", "\x{FABB}"));
+ ok($obj->eq("\x{8AD2}", "\x{F97D}"));
+ ok($obj->eq("\x{8AD6}", "\x{F941}"));
+ ok($obj->eq("\x{8AED}", "\x{FABE}"));
+ ok($obj->eq("\x{8AED}", "\x{2F9D0}"));
+ ok($obj->eq("\x{8AF8}", "\x{FA22}"));
+ ok($obj->eq("\x{8AF8}", "\x{FABA}"));
+ ok($obj->eq("\x{8AFE}", "\x{F95D}"));
+ ok($obj->eq("\x{8AFE}", "\x{FABD}"));
+ ok($obj->eq("\x{8B01}", "\x{FA62}"));
+ ok($obj->eq("\x{8B01}", "\x{FABC}"));
+ ok($obj->eq("\x{8B39}", "\x{FA63}"));
+ ok($obj->eq("\x{8B39}", "\x{FABF}"));
+ ok($obj->eq("\x{8B58}", "\x{F9FC}"));
+ ok($obj->eq("\x{8B80}", "\x{F95A}"));
+ ok($obj->eq("\x{8B8A}", "\x{FAC0}"));
+ ok($obj->eq("\x{8B8A}", "\x{2F9D1}"));
+ ok($obj->eq("\x{8C48}", "\x{F900}"));
+ ok($obj->eq("\x{8C55}", "\x{2F9D2}"));
+ ok($obj->eq("\x{8CAB}", "\x{2F9D4}"));
+ ok($obj->eq("\x{8CC1}", "\x{2F9D5}"));
+ ok($obj->eq("\x{8CC2}", "\x{F948}"));
+ ok($obj->eq("\x{8CC8}", "\x{F903}"));
+ ok($obj->eq("\x{8CD3}", "\x{FA64}"));
+ ok($obj->eq("\x{8D08}", "\x{FA65}"));
+ ok($obj->eq("\x{8D08}", "\x{FAC1}"));
+ ok($obj->eq("\x{8D1B}", "\x{2F9D6}"));
+ ok($obj->eq("\x{8D77}", "\x{2F9D7}"));
+ ok($obj->eq("\x{8DBC}", "\x{2F9DB}"));
+ ok($obj->eq("\x{8DCB}", "\x{2F9DA}"));
+ ok($obj->eq("\x{8DEF}", "\x{F937}"));
+ ok($obj->eq("\x{8DF0}", "\x{2F9DC}"));
+ ok($obj->eq("\x{8ECA}", "\x{F902}"));
+ ok($obj->eq("\x{8ED4}", "\x{2F9DE}"));
+ ok($obj->eq("\x{8F26}", "\x{F998}"));
+ ok($obj->eq("\x{8F2A}", "\x{F9D7}"));
+ ok($obj->eq("\x{8F38}", "\x{FAC2}"));
+ ok($obj->eq("\x{8F38}", "\x{2F9DF}"));
+ ok($obj->eq("\x{8F3B}", "\x{FA07}"));
+ ok($obj->eq("\x{8F62}", "\x{F98D}"));
+ ok($obj->eq("\x{8F9E}", "\x{2F98D}"));
+ ok($obj->eq("\x{8FB0}", "\x{F971}"));
+ ok($obj->eq("\x{8FB6}", "\x{FA66}"));
+ ok($obj->eq("\x{9023}", "\x{F99A}"));
+ ok($obj->eq("\x{9038}", "\x{FA25}"));
+ ok($obj->eq("\x{9038}", "\x{FA67}"));
+ ok($obj->eq("\x{9072}", "\x{FAC3}"));
+ ok($obj->eq("\x{907C}", "\x{F9C3}"));
+ ok($obj->eq("\x{908F}", "\x{F913}"));
+ ok($obj->eq("\x{9094}", "\x{2F9E2}"));
+ ok($obj->eq("\x{90CE}", "\x{F92C}"));
+ ok($obj->eq("\x{90DE}", "\x{FA2E}"));
+ ok($obj->eq("\x{90F1}", "\x{2F9E3}"));
+ ok($obj->eq("\x{90FD}", "\x{FA26}"));
+ ok($obj->eq("\x{9111}", "\x{2F9E4}"));
+ ok($obj->eq("\x{911B}", "\x{2F9E6}"));
+ ok($obj->eq("\x{916A}", "\x{F919}"));
+ ok($obj->eq("\x{9199}", "\x{FAC4}"));
+ ok($obj->eq("\x{91B4}", "\x{F9B7}"));
+ ok($obj->eq("\x{91CC}", "\x{F9E9}"));
+ ok($obj->eq("\x{91CF}", "\x{F97E}"));
+ ok($obj->eq("\x{91D1}", "\x{F90A}"));
+ ok($obj->eq("\x{9234}", "\x{F9B1}"));
+ ok($obj->eq("\x{9238}", "\x{2F9E7}"));
+ ok($obj->eq("\x{9276}", "\x{FAC5}"));
+ ok($obj->eq("\x{927C}", "\x{2F9EA}"));
+ ok($obj->eq("\x{92D7}", "\x{2F9E8}"));
+ ok($obj->eq("\x{92D8}", "\x{2F9E9}"));
+ ok($obj->eq("\x{9304}", "\x{F93F}"));
+ ok($obj->eq("\x{934A}", "\x{F99B}"));
+ ok($obj->eq("\x{93F9}", "\x{2F9EB}"));
+ ok($obj->eq("\x{9415}", "\x{2F9EC}"));
+ ok($obj->eq("\x{958B}", "\x{2F9EE}"));
+ ok($obj->eq("\x{95AD}", "\x{F986}"));
+ ok($obj->eq("\x{95B7}", "\x{2F9F0}"));
+ ok($obj->eq("\x{962E}", "\x{F9C6}"));
+ ok($obj->eq("\x{964B}", "\x{F951}"));
+ ok($obj->eq("\x{964D}", "\x{FA09}"));
+ ok($obj->eq("\x{9675}", "\x{F959}"));
+ ok($obj->eq("\x{9678}", "\x{F9D3}"));
+ ok($obj->eq("\x{967C}", "\x{FAC6}"));
+ ok($obj->eq("\x{9686}", "\x{F9DC}"));
+ ok($obj->eq("\x{96A3}", "\x{F9F1}"));
+ ok($obj->eq("\x{96B7}", "\x{FA2F}"));
+ ok($obj->eq("\x{96B8}", "\x{F9B8}"));
+ ok($obj->eq("\x{96C3}", "\x{2F9F3}"));
+ ok($obj->eq("\x{96E2}", "\x{F9EA}"));
+ ok($obj->eq("\x{96E3}", "\x{FA68}"));
+ ok($obj->eq("\x{96E3}", "\x{FAC7}"));
+ ok($obj->eq("\x{96F6}", "\x{F9B2}"));
+ ok($obj->eq("\x{96F7}", "\x{F949}"));
+ ok($obj->eq("\x{9723}", "\x{2F9F5}"));
+ ok($obj->eq("\x{9732}", "\x{F938}"));
+ ok($obj->eq("\x{9748}", "\x{F9B3}"));
+ ok($obj->eq("\x{9756}", "\x{FA1C}"));
+ ok($obj->eq("\x{9756}", "\x{FAC8}"));
+ ok($obj->eq("\x{97DB}", "\x{FAC9}"));
+ ok($obj->eq("\x{97E0}", "\x{2F9FA}"));
+ ok($obj->eq("\x{97FF}", "\x{FA69}"));
+ ok($obj->eq("\x{97FF}", "\x{FACA}"));
+ ok($obj->eq("\x{980B}", "\x{FACB}"));
+ ok($obj->eq("\x{980B}", "\x{2F9FE}"));
+ ok($obj->eq("\x{980B}", "\x{2F9FF}"));
+ ok($obj->eq("\x{9818}", "\x{F9B4}"));
+ ok($obj->eq("\x{9829}", "\x{2FA00}"));
+ ok($obj->eq("\x{983B}", "\x{FA6A}"));
+ ok($obj->eq("\x{983B}", "\x{FACC}"));
+ ok($obj->eq("\x{985E}", "\x{F9D0}"));
+ ok($obj->eq("\x{98E2}", "\x{2FA02}"));
+ ok($obj->eq("\x{98EF}", "\x{FA2A}"));
+ ok($obj->eq("\x{98FC}", "\x{FA2B}"));
+ ok($obj->eq("\x{9928}", "\x{FA2C}"));
+ ok($obj->eq("\x{9929}", "\x{2FA04}"));
+ ok($obj->eq("\x{99A7}", "\x{2FA05}"));
+ ok($obj->eq("\x{99C2}", "\x{2FA06}"));
+ ok($obj->eq("\x{99F1}", "\x{F91A}"));
+ ok($obj->eq("\x{99FE}", "\x{2FA07}"));
+ ok($obj->eq("\x{9A6A}", "\x{F987}"));
+ ok($obj->eq("\x{9B12}", "\x{FACD}"));
+ ok($obj->eq("\x{9B12}", "\x{2FA0A}"));
+ ok($obj->eq("\x{9B6F}", "\x{F939}"));
+ ok($obj->eq("\x{9C40}", "\x{2FA0B}"));
+ ok($obj->eq("\x{9C57}", "\x{F9F2}"));
+ ok($obj->eq("\x{9CFD}", "\x{2FA0C}"));
+ ok($obj->eq("\x{9D67}", "\x{2FA0F}"));
+ ok($obj->eq("\x{9DB4}", "\x{FA2D}"));
+ ok($obj->eq("\x{9DFA}", "\x{F93A}"));
+ ok($obj->eq("\x{9E1E}", "\x{F920}"));
+ ok($obj->eq("\x{9E7F}", "\x{F940}"));
+ ok($obj->eq("\x{9E97}", "\x{F988}"));
+ ok($obj->eq("\x{9E9F}", "\x{F9F3}"));
+ ok($obj->eq("\x{9EBB}", "\x{2FA15}"));
+ ok($obj->eq("\x{9ECE}", "\x{F989}"));
+ ok($obj->eq("\x{9EF9}", "\x{2FA17}"));
+ ok($obj->eq("\x{9EFE}", "\x{2FA18}"));
+ ok($obj->eq("\x{9F05}", "\x{2FA19}"));
+ ok($obj->eq("\x{9F0F}", "\x{2FA1A}"));
+ ok($obj->eq("\x{9F16}", "\x{2FA1B}"));
+ ok($obj->eq("\x{9F3B}", "\x{2FA1C}"));
+ ok($obj->eq("\x{9F43}", "\x{FAD8}"));
+ ok($obj->eq("\x{9F8D}", "\x{F9C4}"));
+ ok($obj->eq("\x{9F8E}", "\x{FAD9}"));
+ ok($obj->eq("\x{9F9C}", "\x{F907}"));
+ ok($obj->eq("\x{9F9C}", "\x{F908}"));
+ ok($obj->eq("\x{9F9C}", "\x{FACE}"));
+ ok($obj->eq("\x{349E}", "\x{2F80C}"));
+ ok($obj->eq("\x{34B9}", "\x{2F813}"));
+ ok($obj->eq("\x{34BB}", "\x{2F9CA}"));
+ ok($obj->eq("\x{34DF}", "\x{2F81F}"));
+ ok($obj->eq("\x{3515}", "\x{2F824}"));
+ ok($obj->eq("\x{36EE}", "\x{2F867}"));
+ ok($obj->eq("\x{36FC}", "\x{2F868}"));
+ ok($obj->eq("\x{3781}", "\x{2F876}"));
+ ok($obj->eq("\x{382F}", "\x{2F883}"));
+ ok($obj->eq("\x{3862}", "\x{2F888}"));
+ ok($obj->eq("\x{387C}", "\x{2F88A}"));
+ ok($obj->eq("\x{38C7}", "\x{2F896}"));
+ ok($obj->eq("\x{38E3}", "\x{2F89B}"));
+ ok($obj->eq("\x{391C}", "\x{2F8A2}"));
+ ok($obj->eq("\x{393A}", "\x{2F8A1}"));
+ ok($obj->eq("\x{3A2E}", "\x{2F8C2}"));
+ ok($obj->eq("\x{3A6C}", "\x{2F8C7}"));
+ ok($obj->eq("\x{3AE4}", "\x{2F8D1}"));
+ ok($obj->eq("\x{3B08}", "\x{2F8D0}"));
+ ok($obj->eq("\x{3B19}", "\x{2F8CE}"));
+ ok($obj->eq("\x{3B49}", "\x{2F8DE}"));
+ ok($obj->eq("\x{3B9D}", "\x{FAD2}"));
+ ok($obj->eq("\x{3B9D}", "\x{2F8E7}"));
+ ok($obj->eq("\x{3C18}", "\x{2F8EE}"));
+ ok($obj->eq("\x{3C4E}", "\x{2F8F2}"));
+ ok($obj->eq("\x{3D33}", "\x{2F90A}"));
+ ok($obj->eq("\x{3D96}", "\x{2F916}"));
+ ok($obj->eq("\x{3EAC}", "\x{2F92A}"));
+ ok($obj->eq("\x{3EB8}", "\x{2F92C}"));
+ ok($obj->eq("\x{3EB8}", "\x{2F92D}"));
+ ok($obj->eq("\x{3F1B}", "\x{2F933}"));
+ ok($obj->eq("\x{3FFC}", "\x{2F93E}"));
+ ok($obj->eq("\x{4008}", "\x{2F93F}"));
+ ok($obj->eq("\x{4018}", "\x{FAD3}"));
+ ok($obj->eq("\x{4039}", "\x{FAD4}"));
+ ok($obj->eq("\x{4039}", "\x{2F949}"));
+ ok($obj->eq("\x{4046}", "\x{2F94B}"));
+ ok($obj->eq("\x{4096}", "\x{2F94C}"));
+ ok($obj->eq("\x{40E3}", "\x{2F951}"));
+ ok($obj->eq("\x{412F}", "\x{2F958}"));
+ ok($obj->eq("\x{4202}", "\x{2F960}"));
+ ok($obj->eq("\x{4227}", "\x{2F964}"));
+ ok($obj->eq("\x{42A0}", "\x{2F967}"));
+ ok($obj->eq("\x{4301}", "\x{2F96D}"));
+ ok($obj->eq("\x{4334}", "\x{2F971}"));
+ ok($obj->eq("\x{4359}", "\x{2F974}"));
+ ok($obj->eq("\x{43D5}", "\x{2F981}"));
+ ok($obj->eq("\x{43D9}", "\x{2F8D7}"));
+ ok($obj->eq("\x{440B}", "\x{2F984}"));
+ ok($obj->eq("\x{446B}", "\x{2F98E}"));
+ ok($obj->eq("\x{452B}", "\x{2F9A7}"));
+ ok($obj->eq("\x{455D}", "\x{2F9AE}"));
+ ok($obj->eq("\x{4561}", "\x{2F9AF}"));
+ ok($obj->eq("\x{456B}", "\x{2F9B2}"));
+ ok($obj->eq("\x{45D7}", "\x{2F9BF}"));
+ ok($obj->eq("\x{45F9}", "\x{2F9C2}"));
+ ok($obj->eq("\x{4635}", "\x{2F9C8}"));
+ ok($obj->eq("\x{46BE}", "\x{2F9CD}"));
+ ok($obj->eq("\x{46C7}", "\x{2F9CE}"));
+ ok($obj->eq("\x{4995}", "\x{2F9EF}"));
+ ok($obj->eq("\x{49E6}", "\x{2F9F2}"));
+ ok($obj->eq("\x{4A6E}", "\x{2F9F8}"));
+ ok($obj->eq("\x{4A76}", "\x{2F9F9}"));
+ ok($obj->eq("\x{4AB2}", "\x{2F9FC}"));
+ ok($obj->eq("\x{4B33}", "\x{2FA03}"));
+ ok($obj->eq("\x{4BCE}", "\x{2FA08}"));
+ ok($obj->eq("\x{4CCE}", "\x{2FA0D}"));
+ ok($obj->eq("\x{4CED}", "\x{2FA0E}"));
+ ok($obj->eq("\x{4CF8}", "\x{2FA11}"));
+ ok($obj->eq("\x{4D56}", "\x{2FA16}"));
+ ok($obj->eq("\x{20122}", "\x{2F803}"));
+ ok($obj->eq("\x{2051C}", "\x{2F812}"));
+ ok($obj->eq("\x{20525}", "\x{2F91B}"));
+ ok($obj->eq("\x{2054B}", "\x{2F816}"));
+ ok($obj->eq("\x{2063A}", "\x{2F80D}"));
+ ok($obj->eq("\x{20804}", "\x{2F9D9}"));
+ ok($obj->eq("\x{208DE}", "\x{2F9DD}"));
+ ok($obj->eq("\x{20A2C}", "\x{2F834}"));
+ ok($obj->eq("\x{20B63}", "\x{2F838}"));
+ ok($obj->eq("\x{214E4}", "\x{2F859}"));
+ ok($obj->eq("\x{216A8}", "\x{2F860}"));
+ ok($obj->eq("\x{216EA}", "\x{2F861}"));
+ ok($obj->eq("\x{219C8}", "\x{2F86C}"));
+ ok($obj->eq("\x{21B18}", "\x{2F871}"));
+ ok($obj->eq("\x{21D0B}", "\x{2F8F8}"));
+ ok($obj->eq("\x{21DE4}", "\x{2F87B}"));
+ ok($obj->eq("\x{21DE6}", "\x{2F87D}"));
+ ok($obj->eq("\x{22183}", "\x{2F889}"));
+ ok($obj->eq("\x{2219F}", "\x{2F939}"));
+ ok($obj->eq("\x{22331}", "\x{2F891}"));
+ ok($obj->eq("\x{22331}", "\x{2F892}"));
+ ok($obj->eq("\x{226D4}", "\x{2F8A4}"));
+ ok($obj->eq("\x{22844}", "\x{FAD0}"));
+ ok($obj->eq("\x{2284A}", "\x{FACF}"));
+ ok($obj->eq("\x{22B0C}", "\x{2F8B8}"));
+ ok($obj->eq("\x{22BF1}", "\x{2F8BE}"));
+ ok($obj->eq("\x{2300A}", "\x{2F8CA}"));
+ ok($obj->eq("\x{232B8}", "\x{2F897}"));
+ ok($obj->eq("\x{2335F}", "\x{2F980}"));
+ ok($obj->eq("\x{23393}", "\x{2F989}"));
+ ok($obj->eq("\x{2339C}", "\x{2F98A}"));
+ ok($obj->eq("\x{233C3}", "\x{2F8DD}"));
+ ok($obj->eq("\x{233D5}", "\x{FAD1}"));
+ ok($obj->eq("\x{2346D}", "\x{2F8E3}"));
+ ok($obj->eq("\x{236A3}", "\x{2F8EC}"));
+ ok($obj->eq("\x{238A7}", "\x{2F8F0}"));
+ ok($obj->eq("\x{23A8D}", "\x{2F8F7}"));
+ ok($obj->eq("\x{23AFA}", "\x{2F8F9}"));
+ ok($obj->eq("\x{23CBC}", "\x{2F8FB}"));
+ ok($obj->eq("\x{23D1E}", "\x{2F906}"));
+ ok($obj->eq("\x{23ED1}", "\x{2F90D}"));
+ ok($obj->eq("\x{23F5E}", "\x{2F910}"));
+ ok($obj->eq("\x{23F8E}", "\x{2F911}"));
+ ok($obj->eq("\x{24263}", "\x{2F91D}"));
+ ok($obj->eq("\x{242EE}", "\x{FA6C}"));
+ ok($obj->eq("\x{243AB}", "\x{2F91F}"));
+ ok($obj->eq("\x{24608}", "\x{2F923}"));
+ ok($obj->eq("\x{24735}", "\x{2F926}"));
+ ok($obj->eq("\x{24814}", "\x{2F927}"));
+ ok($obj->eq("\x{24C36}", "\x{2F935}"));
+ ok($obj->eq("\x{24C92}", "\x{2F937}"));
+ ok($obj->eq("\x{24FA1}", "\x{2F93B}"));
+ ok($obj->eq("\x{24FB8}", "\x{2F93C}"));
+ ok($obj->eq("\x{25044}", "\x{2F93D}"));
+ ok($obj->eq("\x{250F2}", "\x{2F942}"));
+ ok($obj->eq("\x{250F3}", "\x{2F941}"));
+ ok($obj->eq("\x{25119}", "\x{2F943}"));
+ ok($obj->eq("\x{25133}", "\x{2F944}"));
+ ok($obj->eq("\x{25249}", "\x{FAD5}"));
+ ok($obj->eq("\x{2541D}", "\x{2F94D}"));
+ ok($obj->eq("\x{25626}", "\x{2F952}"));
+ ok($obj->eq("\x{2569A}", "\x{2F954}"));
+ ok($obj->eq("\x{256C5}", "\x{2F955}"));
+ ok($obj->eq("\x{2597C}", "\x{2F95C}"));
+ ok($obj->eq("\x{25AA7}", "\x{2F95D}"));
+ ok($obj->eq("\x{25AA7}", "\x{2F95E}"));
+ ok($obj->eq("\x{25BAB}", "\x{2F961}"));
+ ok($obj->eq("\x{25C80}", "\x{2F965}"));
+ ok($obj->eq("\x{25CD0}", "\x{FAD6}"));
+ ok($obj->eq("\x{25F86}", "\x{2F96B}"));
+ ok($obj->eq("\x{261DA}", "\x{2F898}"));
+ ok($obj->eq("\x{26228}", "\x{2F972}"));
+ ok($obj->eq("\x{26247}", "\x{2F973}"));
+ ok($obj->eq("\x{262D9}", "\x{2F975}"));
+ ok($obj->eq("\x{2633E}", "\x{2F977}"));
+ ok($obj->eq("\x{264DA}", "\x{2F97B}"));
+ ok($obj->eq("\x{26523}", "\x{2F97C}"));
+ ok($obj->eq("\x{265A8}", "\x{2F97E}"));
+ ok($obj->eq("\x{267A7}", "\x{2F987}"));
+ ok($obj->eq("\x{267B5}", "\x{2F988}"));
+ ok($obj->eq("\x{26B3C}", "\x{2F997}"));
+ ok($obj->eq("\x{26C36}", "\x{2F9A4}"));
+ ok($obj->eq("\x{26CD5}", "\x{2F9A6}"));
+ ok($obj->eq("\x{26D6B}", "\x{2F9A5}"));
+ ok($obj->eq("\x{26F2C}", "\x{2F9AD}"));
+ ok($obj->eq("\x{26FB1}", "\x{2F9B0}"));
+ ok($obj->eq("\x{270D2}", "\x{2F9B1}"));
+ ok($obj->eq("\x{273CA}", "\x{2F9AB}"));
+ ok($obj->eq("\x{27667}", "\x{2F9C5}"));
+ ok($obj->eq("\x{278AE}", "\x{2F9CB}"));
+ ok($obj->eq("\x{27966}", "\x{2F9CC}"));
+ ok($obj->eq("\x{27CA8}", "\x{2F9D3}"));
+ ok($obj->eq("\x{27ED3}", "\x{FAD7}"));
+ ok($obj->eq("\x{27F2F}", "\x{2F9D8}"));
+ ok($obj->eq("\x{285D2}", "\x{2F9E0}"));
+ ok($obj->eq("\x{285ED}", "\x{2F9E1}"));
+ ok($obj->eq("\x{2872E}", "\x{2F9E5}"));
+ ok($obj->eq("\x{28BFA}", "\x{2F9ED}"));
+ ok($obj->eq("\x{28D77}", "\x{2F9F1}"));
+ ok($obj->eq("\x{29145}", "\x{2F9F6}"));
+ ok($obj->eq("\x{291DF}", "\x{2F81C}"));
+ ok($obj->eq("\x{2921A}", "\x{2F9F7}"));
+ ok($obj->eq("\x{2940A}", "\x{2F9FB}"));
+ ok($obj->eq("\x{29496}", "\x{2F9FD}"));
+ ok($obj->eq("\x{295B6}", "\x{2FA01}"));
+ ok($obj->eq("\x{29B30}", "\x{2FA09}"));
+ ok($obj->eq("\x{2A0CE}", "\x{2FA10}"));
+ ok($obj->eq("\x{2A105}", "\x{2FA12}"));
+ ok($obj->eq("\x{2A20E}", "\x{2FA13}"));
+ ok($obj->eq("\x{2A291}", "\x{2FA14}"));
+ ok($obj->eq("\x{2A392}", "\x{2F88F}"));
+ ok($obj->eq("\x{2A600}", "\x{2FA1D}"));
+}
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_ee.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_ee.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_ee.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,190 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..120\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objEe = Unicode::Collate::Locale->
+ new(locale => 'EE', normalization => undef);
+
+ok($objEe->getlocale, 'ee');
+
+# 2
+
+$objEe->change(level => 1);
+
+ok($objEe->lt("d", "d\x{292}"));
+ok($objEe->gt("dz","d\x{292}"));
+ok($objEe->lt("dz","\x{256}"));
+ok($objEe->gt("e", "\x{256}"));
+ok($objEe->lt("e", "\x{25B}"));
+ok($objEe->gt("f", "\x{25B}"));
+ok($objEe->lt("f", "\x{192}"));
+ok($objEe->gt("g", "\x{192}"));
+
+ok($objEe->lt("gz","gb"));
+ok($objEe->lt("gb","\x{263}"));
+ok($objEe->gt("h", "\x{263}"));
+ok($objEe->lt("h", "hz"));
+ok($objEe->lt("hz","x"));
+ok($objEe->lt("x", "i"));
+
+# 16
+
+ok($objEe->lt("kz","kp"));
+ok($objEe->lt("kp","l"));
+ok($objEe->lt("nz","ny"));
+ok($objEe->lt("ny","\x{14B}"));
+ok($objEe->gt("o", "\x{14B}"));
+ok($objEe->lt("o", "\x{254}"));
+ok($objEe->gt("p", "\x{254}"));
+
+ok($objEe->lt("tz","ts"));
+ok($objEe->lt("ts","u"));
+ok($objEe->lt("u", "v"));
+ok($objEe->lt("v", "\x{28B}"));
+ok($objEe->gt("w", "\x{28B}"));
+
+# 28
+
+ok($objEe->eq("\x{302}", "\x{30C}"));
+ok($objEe->eq("a\x{302}", "a\x{30C}"));
+ok($objEe->eq("A\x{302}", "A\x{30C}"));
+ok($objEe->eq("e\x{302}", "e\x{30C}"));
+ok($objEe->eq("E\x{302}", "E\x{30C}"));
+ok($objEe->eq("i\x{302}", "i\x{30C}"));
+ok($objEe->eq("I\x{302}", "I\x{30C}"));
+ok($objEe->eq("o\x{302}", "o\x{30C}"));
+ok($objEe->eq("O\x{302}", "O\x{30C}"));
+ok($objEe->eq("u\x{302}", "u\x{30C}"));
+ok($objEe->eq("U\x{302}", "U\x{30C}"));
+ok($objEe->eq("y\x{302}", "y\x{30C}"));
+ok($objEe->eq("Y\x{302}", "Y\x{30C}"));
+
+# 41
+
+$objEe->change(level => 2);
+
+ok($objEe->gt("\x{302}", "\x{30C}"));
+ok($objEe->gt("a\x{302}", "a\x{30C}"));
+ok($objEe->gt("A\x{302}", "A\x{30C}"));
+ok($objEe->gt("e\x{302}", "e\x{30C}"));
+ok($objEe->gt("E\x{302}", "E\x{30C}"));
+ok($objEe->gt("i\x{302}", "i\x{30C}"));
+ok($objEe->gt("I\x{302}", "I\x{30C}"));
+ok($objEe->gt("o\x{302}", "o\x{30C}"));
+ok($objEe->gt("O\x{302}", "O\x{30C}"));
+ok($objEe->gt("u\x{302}", "u\x{30C}"));
+ok($objEe->gt("U\x{302}", "U\x{30C}"));
+ok($objEe->gt("y\x{302}", "y\x{30C}"));
+ok($objEe->gt("Y\x{302}", "Y\x{30C}"));
+
+# 54
+
+ok($objEe->eq("dz", "Dz"));
+ok($objEe->eq("Dz", "DZ"));
+ok($objEe->eq("\x{256}", "\x{189}"));
+ok($objEe->eq("\x{25B}", "\x{190}"));
+ok($objEe->eq("\x{192}", "\x{191}"));
+ok($objEe->eq("gb", "Gb"));
+ok($objEe->eq("Gb", "GB"));
+ok($objEe->eq("\x{263}", "\x{194}"));
+ok($objEe->eq("x", "X"));
+ok($objEe->eq("kp", "Kp"));
+ok($objEe->eq("Kp", "KP"));
+ok($objEe->eq("ny", "Ny"));
+ok($objEe->eq("Ny", "NY"));
+ok($objEe->eq("\x{14B}", "\x{14A}"));
+ok($objEe->eq("\x{254}", "\x{186}"));
+ok($objEe->eq("ts", "Ts"));
+ok($objEe->eq("Ts", "TS"));
+ok($objEe->eq("\x{28B}", "\x{1B2}"));
+
+# 72
+
+$objEe->change(level => 3);
+
+ok($objEe->lt("dz", "Dz"));
+ok($objEe->lt("Dz", "DZ"));
+ok($objEe->lt("\x{256}", "\x{189}"));
+ok($objEe->lt("\x{25B}", "\x{190}"));
+ok($objEe->lt("\x{192}", "\x{191}"));
+ok($objEe->lt("gb", "Gb"));
+ok($objEe->lt("Gb", "GB"));
+ok($objEe->lt("\x{263}", "\x{194}"));
+ok($objEe->lt("x", "X"));
+ok($objEe->lt("kp", "Kp"));
+ok($objEe->lt("Kp", "KP"));
+ok($objEe->lt("ny", "Ny"));
+ok($objEe->lt("Ny", "NY"));
+ok($objEe->lt("\x{14B}", "\x{14A}"));
+ok($objEe->lt("\x{254}", "\x{186}"));
+ok($objEe->lt("ts", "Ts"));
+ok($objEe->lt("Ts", "TS"));
+ok($objEe->lt("\x{28B}", "\x{1B2}"));
+
+# 90
+
+ok($objEe->eq("a\x{302}", pack('U', 0xE2)));
+ok($objEe->eq("A\x{302}", pack('U', 0xC2)));
+ok($objEe->eq("e\x{302}", pack('U', 0xEA)));
+ok($objEe->eq("E\x{302}", pack('U', 0xCA)));
+ok($objEe->eq("i\x{302}", pack('U', 0xEE)));
+ok($objEe->eq("I\x{302}", pack('U', 0xCE)));
+ok($objEe->eq("o\x{302}", pack('U', 0xF4)));
+ok($objEe->eq("O\x{302}", pack('U', 0xD4)));
+ok($objEe->eq("u\x{302}", pack('U', 0xFB)));
+ok($objEe->eq("U\x{302}", pack('U', 0xDB)));
+ok($objEe->eq("y\x{302}", "\x{177}"));
+ok($objEe->eq("Y\x{302}", "\x{176}"));
+
+# 102
+
+$objEe->change(upper_before_lower => 1);
+
+ok($objEe->gt("dz", "Dz"));
+ok($objEe->gt("Dz", "DZ"));
+ok($objEe->gt("\x{256}", "\x{189}"));
+ok($objEe->gt("\x{25B}", "\x{190}"));
+ok($objEe->gt("\x{192}", "\x{191}"));
+ok($objEe->gt("gb", "Gb"));
+ok($objEe->gt("Gb", "GB"));
+ok($objEe->gt("\x{263}", "\x{194}"));
+ok($objEe->gt("x", "X"));
+ok($objEe->gt("kp", "Kp"));
+ok($objEe->gt("Kp", "KP"));
+ok($objEe->gt("ny", "Ny"));
+ok($objEe->gt("Ny", "NY"));
+ok($objEe->gt("\x{14B}", "\x{14A}"));
+ok($objEe->gt("\x{254}", "\x{186}"));
+ok($objEe->gt("ts", "Ts"));
+ok($objEe->gt("Ts", "TS"));
+ok($objEe->gt("\x{28B}", "\x{1B2}"));
+
+# 120
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_fa.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_fa.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_fa.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,155 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..90\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objFa = Unicode::Collate::Locale->
+ new(locale => 'FA', normalization => undef);
+
+ok($objFa->getlocale, 'fa');
+
+$objFa->change(level => 3);
+
+ok($objFa->eq("\x{622}", "\x{627}\x{653}"));
+ok($objFa->eq("\x{623}", "\x{627}\x{654}"));
+ok($objFa->eq("\x{625}", "\x{627}\x{655}"));
+ok($objFa->eq("\x{624}", "\x{648}\x{654}"));
+ok($objFa->eq("\x{626}", "\x{64A}\x{654}"));
+ok($objFa->eq("\x{6C2}", "\x{6C1}\x{654}"));
+ok($objFa->eq("\x{6C0}", "\x{6D5}\x{654}"));
+ok($objFa->eq("\x{6D3}", "\x{6D2}\x{654}"));
+
+# 10
+
+ok($objFa->lt("\x{6CC}\x{654}", "\x{649}\x{654}"));
+ok($objFa->lt("\x{649}\x{654}", "\x{626}"));
+
+$objFa->change(level => 2);
+
+ok($objFa->eq("\x{6CC}\x{654}", "\x{649}\x{654}"));
+ok($objFa->eq("\x{649}\x{654}", "\x{626}"));
+
+# 14
+
+ok($objFa->lt("\x{64E}", "\x{650}"));
+ok($objFa->lt("\x{650}", "\x{64F}"));
+ok($objFa->lt("\x{64F}", "\x{64B}"));
+ok($objFa->lt("\x{64B}", "\x{64D}"));
+ok($objFa->lt("\x{64D}", "\x{64C}"));
+
+ok($objFa->lt("\x{627}", "\x{671}"));
+
+ok($objFa->lt("\x{621}", "\x{623}"));
+ok($objFa->lt("\x{623}", "\x{672}"));
+ok($objFa->lt("\x{672}", "\x{625}"));
+ok($objFa->lt("\x{625}", "\x{673}"));
+ok($objFa->lt("\x{673}", "\x{624}"));
+ok($objFa->lt("\x{624}", "\x{6CC}\x{654}"));
+
+ok($objFa->lt("\x{6A9}", "\x{6AA}"));
+ok($objFa->lt("\x{6AA}", "\x{6AB}"));
+ok($objFa->lt("\x{6AB}", "\x{643}"));
+ok($objFa->lt("\x{643}", "\x{6AC}"));
+ok($objFa->lt("\x{6AC}", "\x{6AD}"));
+ok($objFa->lt("\x{6AD}", "\x{6AE}"));
+
+ok($objFa->lt("\x{647}", "\x{6D5}"));
+ok($objFa->lt("\x{6D5}", "\x{6C1}"));
+ok($objFa->lt("\x{6C1}", "\x{629}"));
+ok($objFa->lt("\x{629}", "\x{6C3}"));
+ok($objFa->lt("\x{6C3}", "\x{6C0}"));
+ok($objFa->lt("\x{6C0}", "\x{6BE}"));
+
+ok($objFa->lt("\x{6CC}", "\x{649}"));
+ok($objFa->lt("\x{649}", "\x{6D2}"));
+ok($objFa->lt("\x{6D2}", "\x{64A}"));
+ok($objFa->lt("\x{64A}", "\x{6D0}"));
+ok($objFa->lt("\x{6D0}", "\x{6D1}"));
+ok($objFa->lt("\x{6D1}", "\x{6CD}"));
+ok($objFa->lt("\x{6CD}", "\x{6CE}"));
+
+# 45
+
+$objFa->change(level => 1);
+
+ok($objFa->eq("\x{64E}", "\x{650}"));
+ok($objFa->eq("\x{650}", "\x{64F}"));
+ok($objFa->eq("\x{64F}", "\x{64B}"));
+ok($objFa->eq("\x{64B}", "\x{64D}"));
+ok($objFa->eq("\x{64D}", "\x{64C}"));
+
+ok($objFa->eq("\x{627}", "\x{671}"));
+
+ok($objFa->eq("\x{621}", "\x{623}"));
+ok($objFa->eq("\x{623}", "\x{672}"));
+ok($objFa->eq("\x{672}", "\x{625}"));
+ok($objFa->eq("\x{625}", "\x{673}"));
+ok($objFa->eq("\x{673}", "\x{624}"));
+ok($objFa->eq("\x{624}", "\x{6CC}\x{654}"));
+
+ok($objFa->eq("\x{6A9}", "\x{6AA}"));
+ok($objFa->eq("\x{6AA}", "\x{6AB}"));
+ok($objFa->eq("\x{6AB}", "\x{643}"));
+ok($objFa->eq("\x{643}", "\x{6AC}"));
+ok($objFa->eq("\x{6AC}", "\x{6AD}"));
+ok($objFa->eq("\x{6AD}", "\x{6AE}"));
+
+ok($objFa->eq("\x{647}", "\x{6D5}"));
+ok($objFa->eq("\x{6D5}", "\x{6C1}"));
+ok($objFa->eq("\x{6C1}", "\x{629}"));
+ok($objFa->eq("\x{629}", "\x{6C3}"));
+ok($objFa->eq("\x{6C3}", "\x{6C0}"));
+ok($objFa->eq("\x{6C0}", "\x{6BE}"));
+
+ok($objFa->eq("\x{6CC}", "\x{649}"));
+ok($objFa->eq("\x{649}", "\x{6D2}"));
+ok($objFa->eq("\x{6D2}", "\x{64A}"));
+ok($objFa->eq("\x{64A}", "\x{6D0}"));
+ok($objFa->eq("\x{6D0}", "\x{6D1}"));
+ok($objFa->eq("\x{6D1}", "\x{6CD}"));
+ok($objFa->eq("\x{6CD}", "\x{6CE}"));
+
+# 76
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objFa->change(highestFFFF => 1) if $h;
+
+ ok($objFa->lt("\x{8AC}$t", "\x{622}"));
+ ok($objFa->lt("\x{622}$t", "\x{627}"));
+ ok($objFa->lt("\x{627}$t", "\x{621}"));
+ ok($objFa->lt("\x{621}$t", "\x{66E}"));
+ ok($objFa->lt("\x{66E}$t", "\x{628}"));
+
+ ok($objFa->lt("\x{6CF}$t", "\x{647}"));
+ ok($objFa->lt("\x{647}$t", "\x{778}"));
+}
+# 90
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_fiph.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_fiph.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_fiph.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,158 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..83\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $uuml = pack 'U', 0xFC;
+my $Uuml = pack 'U', 0xDC;
+my $arng = pack 'U', 0xE5;
+my $Arng = pack 'U', 0xC5;
+my $auml = pack 'U', 0xE4;
+my $Auml = pack 'U', 0xC4;
+my $ae = pack 'U', 0xE6;
+my $AE = pack 'U', 0xC6;
+my $ouml = pack 'U', 0xF6;
+my $Ouml = pack 'U', 0xD6;
+my $ostk = pack 'U', 0xF8;
+my $Ostk = pack 'U', 0xD8;
+
+my $objFiPhone = Unicode::Collate::Locale->
+ new(locale => 'FI__phonebook', normalization => undef);
+
+ok($objFiPhone->getlocale, 'fi__phonebook');
+
+$objFiPhone->change(level => 1);
+
+ok($objFiPhone->lt('z', $arng));
+ok($objFiPhone->lt($arng, $auml));
+ok($objFiPhone->lt($auml, $ouml));
+ok($objFiPhone->lt($ouml, "\x{1C0}"));
+
+# 6
+
+ok($objFiPhone->lt('v', 'w'));
+ok($objFiPhone->gt('x', 'w'));
+
+ok($objFiPhone->eq("d\x{335}", "\x{111}"));
+ok($objFiPhone->eq("g\x{335}", "\x{1E5}"));
+ok($objFiPhone->eq("n\x{335}", "\x{14B}"));
+ok($objFiPhone->eq("t\x{335}", "\x{167}"));
+ok($objFiPhone->eq("z\x{335}", "\x{292}"));
+ok($objFiPhone->eq('y', $uuml));
+ok($objFiPhone->eq($auml, $ae));
+ok($objFiPhone->eq($ouml, $ostk));
+
+# 16
+
+$objFiPhone->change(level => 2);
+
+ok($objFiPhone->lt("d\x{335}", "\x{111}"));
+ok($objFiPhone->lt("g\x{335}", "\x{1E5}"));
+ok($objFiPhone->lt("n\x{335}", "\x{14B}"));
+ok($objFiPhone->lt("t\x{335}", "\x{167}"));
+ok($objFiPhone->lt("z\x{335}", "\x{292}"));
+ok($objFiPhone->lt('y', $uuml));
+ok($objFiPhone->lt($auml, $ae));
+ok($objFiPhone->lt($ouml, $ostk));
+
+# 24
+
+ok($objFiPhone->eq("\x{111}", "\x{110}"));
+ok($objFiPhone->eq("\x{1E5}", "\x{1E4}"));
+ok($objFiPhone->eq("\x{14B}", "\x{14A}"));
+ok($objFiPhone->eq("\x{167}", "\x{166}"));
+ok($objFiPhone->eq("\x{292}", "\x{1B7}"));
+ok($objFiPhone->eq('w', 'W'));
+ok($objFiPhone->eq($uuml, $Uuml));
+ok($objFiPhone->eq($arng, $Arng));
+ok($objFiPhone->eq($auml, $Auml));
+ok($objFiPhone->eq($ae, $AE));
+ok($objFiPhone->eq($AE, "\x{1D2D}"));
+ok($objFiPhone->eq($ouml, $Ouml));
+ok($objFiPhone->eq($ostk, $Ostk));
+
+# 37
+
+$objFiPhone->change(level => 3);
+
+ok($objFiPhone->lt("\x{111}", "\x{110}"));
+ok($objFiPhone->lt("\x{1E5}", "\x{1E4}"));
+ok($objFiPhone->lt("\x{14B}", "\x{14A}"));
+ok($objFiPhone->lt("\x{167}", "\x{166}"));
+ok($objFiPhone->lt("\x{292}", "\x{1B7}"));
+ok($objFiPhone->lt('w', 'W'));
+ok($objFiPhone->lt($uuml, $Uuml));
+ok($objFiPhone->lt($arng, $Arng));
+ok($objFiPhone->lt($auml, $Auml));
+ok($objFiPhone->lt($ae, $AE));
+ok($objFiPhone->lt($AE, "\x{1D2D}"));
+ok($objFiPhone->lt($ouml, $Ouml));
+ok($objFiPhone->lt($ostk, $Ostk));
+
+# 50
+
+ok($objFiPhone->eq("u\x{308}", $uuml));
+ok($objFiPhone->eq("U\x{308}", $Uuml));
+ok($objFiPhone->eq("\x{1EF}", "\x{292}\x{30C}"));
+ok($objFiPhone->eq("\x{1EE}", "\x{1B7}\x{30C}"));
+ok($objFiPhone->eq("a\x{30A}", $arng));
+ok($objFiPhone->eq("A\x{30A}", $Arng));
+ok($objFiPhone->eq("a\x{308}", $auml));
+ok($objFiPhone->eq("A\x{308}", $Auml));
+ok($objFiPhone->eq("o\x{308}", $ouml));
+ok($objFiPhone->eq("O\x{308}", $Ouml));
+ok($objFiPhone->eq("o\x{338}", $ostk));
+ok($objFiPhone->eq("O\x{338}", $Ostk));
+
+# 62
+
+ok($objFiPhone->eq("u\x{308}\x{300}", "\x{1DC}"));
+ok($objFiPhone->eq("U\x{308}\x{300}", "\x{1DB}"));
+ok($objFiPhone->eq("u\x{308}\x{301}", "\x{1D8}"));
+ok($objFiPhone->eq("U\x{308}\x{301}", "\x{1D7}"));
+ok($objFiPhone->eq("u\x{308}\x{304}", "\x{1D6}"));
+ok($objFiPhone->eq("U\x{308}\x{304}", "\x{1D5}"));
+ok($objFiPhone->eq("u\x{308}\x{30C}", "\x{1DA}"));
+ok($objFiPhone->eq("U\x{308}\x{30C}", "\x{1D9}"));
+ok($objFiPhone->eq("A\x{30A}", "\x{212B}"));
+ok($objFiPhone->eq("a\x{30A}\x{301}", "\x{1FB}"));
+ok($objFiPhone->eq("A\x{30A}\x{301}", "\x{1FA}"));
+ok($objFiPhone->eq("a\x{308}\x{304}", "\x{1DF}"));
+ok($objFiPhone->eq("A\x{308}\x{304}", "\x{1DE}"));
+ok($objFiPhone->eq("\x{1FD}", "$ae\x{301}"));
+ok($objFiPhone->eq("\x{1FC}", "$AE\x{301}"));
+ok($objFiPhone->eq("\x{1E3}", "$ae\x{304}"));
+ok($objFiPhone->eq("\x{1E2}", "$AE\x{304}"));
+ok($objFiPhone->eq("o\x{308}\x{304}", "\x{22B}"));
+ok($objFiPhone->eq("O\x{308}\x{304}", "\x{22A}"));
+ok($objFiPhone->eq("o\x{338}\x{301}", "\x{1FF}"));
+ok($objFiPhone->eq("O\x{338}\x{301}", "\x{1FE}"));
+
+# 83
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_gu.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_gu.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_gu.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,58 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..10\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objGu = Unicode::Collate::Locale->
+ new(locale => 'GU', normalization => undef);
+
+ok($objGu->getlocale, 'gu');
+
+$objGu->change(level => 2);
+
+ok($objGu->lt("\x{A82}", "\x{A81}"));
+
+$objGu->change(level => 1);
+
+ok($objGu->eq("\x{A82}", "\x{A81}"));
+
+# 4
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objGu->change(highestFFFF => 1) if $h;
+
+ ok($objGu->lt("\x{AD0}$t", "\x{A82}"));
+ ok($objGu->lt("\x{A82}$t", "\x{A83}"));
+ ok($objGu->lt("\x{A83}$t", "\x{A85}"));
+}
+
+# 10
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_hi.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_hi.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_hi.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,58 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..10\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objHi = Unicode::Collate::Locale->
+ new(locale => 'HI', normalization => undef);
+
+ok($objHi->getlocale, 'hi');
+
+$objHi->change(level => 2);
+
+ok($objHi->lt("\x{902}", "\x{901}"));
+
+$objHi->change(level => 1);
+
+ok($objHi->eq("\x{902}", "\x{901}"));
+
+# 4
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objHi->change(highestFFFF => 1) if $h;
+
+ ok($objHi->lt("\x{950}$t", "\x{902}"));
+ ok($objHi->lt("\x{902}$t", "\x{903}"));
+ ok($objHi->lt("\x{903}$t", "\x{972}"));
+}
+
+# 10
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_kn.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_kn.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_kn.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,52 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..14\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objKn = Unicode::Collate::Locale->
+ new(locale => 'KN', normalization => undef);
+
+ok($objKn->getlocale, 'kn');
+
+$objKn->change(level => 1);
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objKn->change(highestFFFF => 1) if $h;
+
+ ok($objKn->lt("\x{C93}$t", "\x{C94}"));
+ ok($objKn->lt("\x{C94}$t", "\x{C82}"));
+ ok($objKn->lt("\x{C82}$t", "\x{C83}"));
+ ok($objKn->lt("\x{C83}$t", "\x{CF1}"));
+ ok($objKn->lt("\x{CF1}$t", "\x{CF2}"));
+ ok($objKn->lt("\x{CF2}$t", "\x{C95}"));
+}
+
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_kok.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_kok.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_kok.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,69 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..21\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objKok = Unicode::Collate::Locale->
+ new(locale => 'KOK', normalization => undef);
+
+ok($objKok->getlocale, 'kok');
+
+$objKok->change(level => 2);
+
+ok($objKok->lt("\x{902}", "\x{901}"));
+ok($objKok->lt("\x{933}", "\x{934}"));
+
+$objKok->change(level => 3);
+
+ok($objKok->eq("\x{933}\x{93C}", "\x{934}"));
+
+$objKok->change(level => 1);
+
+ok($objKok->eq("\x{902}", "\x{901}"));
+ok($objKok->eq("\x{933}", "\x{934}"));
+
+# 7
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objKok->change(highestFFFF => 1) if $h;
+
+ ok($objKok->lt("\x{950}$t", "\x{902}"));
+ ok($objKok->lt("\x{902}$t", "\x{903}"));
+ ok($objKok->lt("\x{903}$t", "\x{972}"));
+
+ ok($objKok->lt("\x{938}$t", "\x{939}"));
+ ok($objKok->lt("\x{939}$t", "\x{933}"));
+ ok($objKok->lt("\x{933}$t", "\x{915}\x{94D}\x{937}"));
+ ok($objKok->lt("\x{915}\x{94D}\x{937}$t", "\x{93D}"));
+}
+
+# 21
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_ln.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_ln.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_ln.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,79 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..23\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objLn = Unicode::Collate::Locale->
+ new(locale => 'LN', normalization => undef);
+
+ok($objLn->getlocale, 'ln');
+
+$objLn->change(level => 1);
+
+ok($objLn->gt("\x{25B}", "E"));
+ok($objLn->lt("\x{25B}", "F"));
+
+ok($objLn->eq("\x{254}", "O"));
+
+# 5
+
+$objLn->change(level => 2);
+
+ok($objLn->gt("\x{254}", "O"));
+
+ok($objLn->eq("\x{25B}", "\x{190}"));
+ok($objLn->eq("\x{254}", "\x{186}"));
+
+ok($objLn->eq("\x{25B}", "\x{2107}"));
+ok($objLn->eq("\x{25B}", "\x{1D4B}"));
+ok($objLn->eq("\x{254}", "\x{1D53}"));
+
+# 11
+
+$objLn->change(level => 3);
+
+ok($objLn->lt("\x{25B}", "\x{190}"));
+ok($objLn->lt("\x{25B}", "\x{2107}"));
+ok($objLn->lt("\x{254}", "\x{186}"));
+
+$objLn->change(upper_before_lower => 1);
+
+ok($objLn->gt("\x{25B}", "\x{190}"));
+ok($objLn->gt("\x{25B}", "\x{2107}"));
+ok($objLn->gt("\x{254}", "\x{186}"));
+
+for my $up_lo (0, 1) {
+ $objLn->change(upper_before_lower => $up_lo);
+ ok($objLn->lt("\x{190}", "\x{2107}"));
+ ok($objLn->lt("\x{25B}", "\x{1D4B}"));
+ ok($objLn->lt("\x{254}", "\x{1D53}"));
+}
+
+# 23
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_ml.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_ml.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_ml.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,94 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..36\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objMl = Unicode::Collate::Locale->
+ new(locale => 'ML', normalization => undef);
+
+ok($objMl->getlocale, 'ml');
+
+$objMl->change(level => 1);
+
+ok($objMl->lt("\x{D4B}", "\x{D57}"));
+
+# 3
+
+ok($objMl->eq("\x{D03}", "\x{D3D}"));
+ok($objMl->eq("\x{D15}\x{D4D}", "\x{D15}\x{D4D}\x{200D}"));
+ok($objMl->eq("\x{D23}\x{D4D}", "\x{D23}\x{D4D}\x{200D}"));
+ok($objMl->eq("\x{D28}\x{D4D}", "\x{D28}\x{D4D}\x{200D}"));
+ok($objMl->eq("\x{D30}\x{D4D}", "\x{D30}\x{D4D}\x{200D}"));
+ok($objMl->eq("\x{D32}\x{D4D}", "\x{D32}\x{D4D}\x{200D}"));
+ok($objMl->eq("\x{D33}\x{D4D}", "\x{D33}\x{D4D}\x{200D}"));
+ok($objMl->eq("\x{D2E}\x{D4D}", "\x{D02}"));
+
+# 11
+
+$objMl->change(level => 2);
+
+ok($objMl->lt("\x{D03}", "\x{D3D}"));
+ok($objMl->lt("\x{D15}\x{D4D}", "\x{D15}\x{D4D}\x{200D}"));
+ok($objMl->lt("\x{D23}\x{D4D}", "\x{D23}\x{D4D}\x{200D}"));
+ok($objMl->lt("\x{D28}\x{D4D}", "\x{D28}\x{D4D}\x{200D}"));
+ok($objMl->lt("\x{D30}\x{D4D}", "\x{D30}\x{D4D}\x{200D}"));
+ok($objMl->lt("\x{D32}\x{D4D}", "\x{D32}\x{D4D}\x{200D}"));
+ok($objMl->lt("\x{D33}\x{D4D}", "\x{D33}\x{D4D}\x{200D}"));
+ok($objMl->lt("\x{D2E}\x{D4D}", "\x{D02}"));
+
+# 19
+
+ok($objMl->eq("\x{D57}", "\x{D4C}"));
+ok($objMl->eq("\x{D15}\x{D4D}\x{200D}", "\x{D7F}"));
+ok($objMl->eq("\x{D23}\x{D4D}\x{200D}", "\x{D7A}"));
+ok($objMl->eq("\x{D28}\x{D4D}\x{200D}", "\x{D7B}"));
+ok($objMl->eq("\x{D30}\x{D4D}\x{200D}", "\x{D7C}"));
+ok($objMl->eq("\x{D32}\x{D4D}\x{200D}", "\x{D7D}"));
+ok($objMl->eq("\x{D33}\x{D4D}\x{200D}", "\x{D7E}"));
+ok($objMl->eq("\x{D28}\x{D4D}", "\x{D7B}\x{D4D}"));
+
+# 27
+
+$objMl->change(level => 3);
+
+ok($objMl->lt("\x{D57}", "\x{D4C}"));
+ok($objMl->lt("\x{D15}\x{D4D}\x{200D}", "\x{D7F}"));
+ok($objMl->lt("\x{D23}\x{D4D}\x{200D}", "\x{D7A}"));
+ok($objMl->lt("\x{D28}\x{D4D}\x{200D}", "\x{D7B}"));
+ok($objMl->lt("\x{D30}\x{D4D}\x{200D}", "\x{D7C}"));
+ok($objMl->lt("\x{D32}\x{D4D}\x{200D}", "\x{D7D}"));
+ok($objMl->lt("\x{D33}\x{D4D}\x{200D}", "\x{D7E}"));
+ok($objMl->lt("\x{D28}\x{D4D}", "\x{D7B}\x{D4D}"));
+
+# 35
+
+ok($objMl->eq("\x{D4C}", "\x{D46}\x{D57}"));
+
+# 36
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_mr.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_mr.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_mr.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,70 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..23\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objMr = Unicode::Collate::Locale->
+ new(locale => 'MR', normalization => undef);
+
+ok($objMr->getlocale, 'mr');
+
+$objMr->change(level => 2);
+
+ok($objMr->lt("\x{902}", "\x{901}"));
+ok($objMr->lt("\x{933}", "\x{934}"));
+
+$objMr->change(level => 3);
+
+ok($objMr->eq("\x{933}\x{93C}", "\x{934}"));
+
+$objMr->change(level => 1);
+
+ok($objMr->eq("\x{902}", "\x{901}"));
+ok($objMr->eq("\x{933}", "\x{934}"));
+
+# 7
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objMr->change(highestFFFF => 1) if $h;
+
+ ok($objMr->lt("\x{950}$t", "\x{902}"));
+ ok($objMr->lt("\x{902}$t", "\x{903}"));
+ ok($objMr->lt("\x{903}$t", "\x{972}"));
+
+ ok($objMr->lt("\x{938}$t", "\x{939}"));
+ ok($objMr->lt("\x{939}$t", "\x{933}"));
+ ok($objMr->lt("\x{933}$t", "\x{915}\x{94D}\x{937}"));
+ ok($objMr->lt("\x{915}\x{94D}\x{937}$t", "\x{91C}\x{94D}\x{91E}"));
+ ok($objMr->lt("\x{91C}\x{94D}\x{91E}$t", "\x{93D}"));
+}
+
+# 23
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_or.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_or.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_or.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,64 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..20\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objOr = Unicode::Collate::Locale->
+ new(locale => 'OR', normalization => undef);
+
+ok($objOr->getlocale, 'or');
+
+$objOr->change(level => 2);
+
+ok($objOr->lt("\x{B2F}", "\x{B5F}"));
+
+$objOr->change(level => 1);
+
+ok($objOr->eq("\x{B2F}", "\x{B5F}"));
+
+# 4
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objOr->change(highestFFFF => 1) if $h;
+
+ ok($objOr->lt("\x{B13}$t", "\x{B14}"));
+ ok($objOr->lt("\x{B14}$t", "\x{B01}"));
+ ok($objOr->lt("\x{B01}$t", "\x{B02}"));
+ ok($objOr->lt("\x{B02}$t", "\x{B03}"));
+ ok($objOr->lt("\x{B03}$t", "\x{B15}"));
+
+ ok($objOr->lt("\x{B38}$t", "\x{B39}"));
+ ok($objOr->lt("\x{B39}$t", "\x{B15}\x{B4D}\x{B37}"));
+ ok($objOr->lt("\x{B15}\x{B4D}\x{B37}$t", "\x{B3D}"));
+}
+
+# 20
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_pa.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_pa.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_pa.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,96 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..41\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objPa = Unicode::Collate::Locale->
+ new(locale => 'PA', normalization => undef);
+
+my $default = Unicode::Collate::Locale->
+ new(normalization => undef);
+
+ok($objPa->getlocale, 'pa');
+ok($default->getlocale, 'default');
+
+$objPa->change(level => 1);
+
+ok($objPa->lt("\x{A5C}", "\x{A4D}"));
+ok($objPa->lt("\x{A4D}", "\x{A3E}"));
+
+# 5
+
+# RRA and Vowel Signs
+for my $o ($objPa, $default) {
+ ok($o->lt("\x{A5C}", "\x{A3E}"));
+ ok($o->lt("\x{A3E}", "\x{A3F}"));
+ ok($o->lt("\x{A3F}", "\x{A40}"));
+ ok($o->lt("\x{A40}", "\x{A41}"));
+ ok($o->lt("\x{A41}", "\x{A42}"));
+ ok($o->lt("\x{A42}", "\x{A47}"));
+ ok($o->lt("\x{A47}", "\x{A48}"));
+ ok($o->lt("\x{A48}", "\x{A4B}"));
+ ok($o->lt("\x{A4B}", "\x{A4C}"));
+}
+
+# 23
+
+ok($default->lt("\x{A4C}", "\x{A4D}"));
+
+# 24
+
+ok($objPa->eq("\x{A03}", ""));
+ok($objPa->eq("\x{A03}", "\x{A71}"));
+ok($objPa->eq("\x{A71}", "\x{A70}"));
+ok($objPa->eq("\x{A70}", "\x{A02}"));
+ok($objPa->eq("\x{A02}", "\x{A01}"));
+ok($objPa->eq("\x{A01}", "\x{A3C}"));
+
+# 30
+
+$objPa->change(level => 2);
+
+ok($objPa->lt("\x{A03}", "\x{A71}"));
+ok($objPa->lt("\x{A71}", "\x{A70}"));
+ok($objPa->lt("\x{A70}", "\x{A02}"));
+ok($objPa->lt("\x{A02}", "\x{A01}"));
+ok($objPa->lt("\x{A01}", "\x{A3C}"));
+
+# 35
+
+$objPa->change(level => 3);
+
+ok($objPa->eq("\x{A33}", "\x{A32}\x{A3C}"));
+ok($objPa->eq("\x{A36}", "\x{A38}\x{A3C}"));
+ok($objPa->eq("\x{A59}", "\x{A16}\x{A3C}"));
+ok($objPa->eq("\x{A5A}", "\x{A17}\x{A3C}"));
+ok($objPa->eq("\x{A5B}", "\x{A1C}\x{A3C}"));
+ok($objPa->eq("\x{A5E}", "\x{A2B}\x{A3C}"));
+
+# 41
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_sa.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_sa.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_sa.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,70 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..23\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objSa = Unicode::Collate::Locale->
+ new(locale => 'SA', normalization => undef);
+
+ok($objSa->getlocale, 'sa');
+
+$objSa->change(level => 2);
+
+ok($objSa->lt("\x{902}", "\x{901}"));
+ok($objSa->lt("\x{933}", "\x{934}"));
+
+$objSa->change(level => 3);
+
+ok($objSa->eq("\x{933}\x{93C}", "\x{934}"));
+
+$objSa->change(level => 1);
+
+ok($objSa->eq("\x{902}", "\x{901}"));
+ok($objSa->eq("\x{933}", "\x{934}"));
+
+# 7
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objSa->change(highestFFFF => 1) if $h;
+
+ ok($objSa->lt("\x{950}$t", "\x{902}"));
+ ok($objSa->lt("\x{902}$t", "\x{903}"));
+ ok($objSa->lt("\x{903}$t", "\x{972}"));
+
+ ok($objSa->lt("\x{938}$t", "\x{939}"));
+ ok($objSa->lt("\x{939}$t", "\x{933}"));
+ ok($objSa->lt("\x{933}$t", "\x{915}\x{94D}\x{937}"));
+ ok($objSa->lt("\x{915}\x{94D}\x{937}$t", "\x{91C}\x{94D}\x{91E}"));
+ ok($objSa->lt("\x{91C}\x{94D}\x{91E}$t", "\x{93D}"));
+}
+
+# 23
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_si.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_si.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_si.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..16\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objSi = Unicode::Collate::Locale->
+ new(locale => 'SI', normalization => undef);
+
+ok($objSi->getlocale, 'si');
+
+$objSi->change(level => 1);
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objSi->change(highestFFFF => 1) if $h;
+
+ ok($objSi->lt("\x{D95}$t", "\x{D96}"));
+ ok($objSi->lt("\x{D96}$t", "\x{D82}"));
+ ok($objSi->lt("\x{D82}$t", "\x{D83}"));
+ ok($objSi->lt("\x{D83}$t", "\x{D9A}"));
+
+ ok($objSi->lt("\x{DA3}$t", "\x{DA5}"));
+ ok($objSi->lt("\x{DA5}$t", "\x{DA4}"));
+ ok($objSi->lt("\x{DA4}$t", "\x{DA6}"));
+}
+
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_sidt.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_sidt.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_sidt.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,62 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..14\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objSiDict = Unicode::Collate::Locale->
+ new(locale => 'SI-dict', normalization => undef);
+
+ok($objSiDict->getlocale, 'si__dictionary');
+
+$objSiDict->change(level => 2);
+
+ok($objSiDict->gt("\x{DA5}", "\x{DA2}\x{DCA}\x{DA4}"));
+
+$objSiDict->change(level => 1);
+
+ok($objSiDict->eq("\x{DA5}", "\x{DA2}\x{DCA}\x{DA4}"));
+
+ok($objSiDict->lt("\x{DA2}", "\x{DA5}"));
+ok($objSiDict->lt("\x{DA5}", "\x{DA3}"));
+
+# 6
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objSiDict->change(highestFFFF => 1) if $h;
+
+ ok($objSiDict->lt("\x{D95}$t", "\x{D96}"));
+ ok($objSiDict->lt("\x{D96}$t", "\x{D82}"));
+ ok($objSiDict->lt("\x{D82}$t", "\x{D83}"));
+ ok($objSiDict->lt("\x{D83}$t", "\x{D9A}"));
+}
+
+# 14
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_srla.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_srla.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_srla.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,194 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..118\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objSrLatn = Unicode::Collate::Locale->
+ new(locale => 'SR-LATN', normalization => undef);
+
+ok($objSrLatn->getlocale, 'sr_Latn');
+
+$objSrLatn->change(level => 1);
+
+ok($objSrLatn->lt("c", "c\x{30C}"));
+ok($objSrLatn->lt("c\x{30C}", "c\x{301}"));
+ok($objSrLatn->gt("d", "c\x{301}"));
+ok($objSrLatn->lt("d", "dz\x{30C}"));
+ok($objSrLatn->lt("dzz", "dz\x{30C}"));
+ok($objSrLatn->lt("dz\x{30C}", "d\x{335}"));
+ok($objSrLatn->gt("e", "d\x{335}"));
+ok($objSrLatn->lt("l", "lj"));
+ok($objSrLatn->lt("lz","lj"));
+ok($objSrLatn->gt("m", "lj"));
+ok($objSrLatn->lt("n", "nj"));
+ok($objSrLatn->lt("nz","nj"));
+ok($objSrLatn->gt("o", "nj"));
+ok($objSrLatn->lt("s", "s\x{30C}"));
+ok($objSrLatn->lt("sz","s\x{30C}"));
+ok($objSrLatn->gt("t", "s\x{30C}"));
+ok($objSrLatn->lt("z", "z\x{30C}"));
+ok($objSrLatn->lt("zz","z\x{30C}"));
+ok($objSrLatn->lt("z\x{30C}", "\x{292}")); # U+0292 EZH
+
+# 21
+
+# not tailored
+ok($objSrLatn->lt("dZ\x{30C}","dz\x{30C}"));
+ok($objSrLatn->lt("lJ", "lj"));
+ok($objSrLatn->lt("nJ", "nj"));
+
+# 24
+
+$objSrLatn->change(level => 2);
+
+ok($objSrLatn->eq("c\x{30C}", "C\x{30C}"));
+ok($objSrLatn->eq("c\x{301}", "C\x{301}"));
+ok($objSrLatn->eq("dz\x{30C}","Dz\x{30C}"));
+ok($objSrLatn->eq("Dz\x{30C}","DZ\x{30C}"));
+ok($objSrLatn->eq("d\x{335}", "D\x{335}"));
+ok($objSrLatn->eq("lj", "Lj"));
+ok($objSrLatn->eq("Lj", "LJ"));
+ok($objSrLatn->eq("nj", "Nj"));
+ok($objSrLatn->eq("Nj", "NJ"));
+ok($objSrLatn->eq("s\x{30C}", "S\x{30C}"));
+ok($objSrLatn->eq("z\x{30C}", "Z\x{30C}"));
+
+# 35
+
+ok($objSrLatn->eq("dz\x{30C}", "\x{1C6}"));
+ok($objSrLatn->eq("Dz\x{30C}", "\x{1C6}"));
+ok($objSrLatn->eq("Dz\x{30C}", "\x{1C5}"));
+ok($objSrLatn->eq("DZ\x{30C}", "\x{1C5}"));
+ok($objSrLatn->eq("DZ\x{30C}", "\x{1C4}"));
+
+ok($objSrLatn->eq("lj", "\x{1C9}"));
+ok($objSrLatn->eq("Lj", "\x{1C9}"));
+ok($objSrLatn->eq("Lj", "\x{1C8}"));
+ok($objSrLatn->eq("LJ", "\x{1C8}"));
+ok($objSrLatn->eq("LJ", "\x{1C7}"));
+
+ok($objSrLatn->eq("nj", "\x{1CC}"));
+ok($objSrLatn->eq("Nj", "\x{1CC}"));
+ok($objSrLatn->eq("Nj", "\x{1CB}"));
+ok($objSrLatn->eq("NJ", "\x{1CB}"));
+ok($objSrLatn->eq("NJ", "\x{1CA}"));
+
+# 50
+
+$objSrLatn->change(level => 3);
+
+ok($objSrLatn->lt("c\x{30C}", "C\x{30C}"));
+ok($objSrLatn->lt("c\x{301}", "C\x{301}"));
+ok($objSrLatn->lt("dz\x{30C}","Dz\x{30C}"));
+ok($objSrLatn->lt("Dz\x{30C}","DZ\x{30C}"));
+ok($objSrLatn->lt("d\x{335}", "D\x{335}"));
+ok($objSrLatn->lt("lj", "Lj"));
+ok($objSrLatn->lt("Lj", "LJ"));
+ok($objSrLatn->lt("nj", "Nj"));
+ok($objSrLatn->lt("Nj", "NJ"));
+ok($objSrLatn->lt("s\x{30C}", "S\x{30C}"));
+ok($objSrLatn->lt("z\x{30C}", "Z\x{30C}"));
+
+# 61
+
+ok($objSrLatn->lt("dz\x{30C}", "\x{1C6}"));
+ok($objSrLatn->gt("Dz\x{30C}", "\x{1C6}"));
+ok($objSrLatn->lt("Dz\x{30C}", "\x{1C5}"));
+ok($objSrLatn->gt("DZ\x{30C}", "\x{1C5}"));
+ok($objSrLatn->lt("DZ\x{30C}", "\x{1C4}"));
+
+ok($objSrLatn->lt("lj", "\x{1C9}"));
+ok($objSrLatn->gt("Lj", "\x{1C9}"));
+ok($objSrLatn->lt("Lj", "\x{1C8}"));
+ok($objSrLatn->gt("LJ", "\x{1C8}"));
+ok($objSrLatn->lt("LJ", "\x{1C7}"));
+
+ok($objSrLatn->lt("nj", "\x{1CC}"));
+ok($objSrLatn->gt("Nj", "\x{1CC}"));
+ok($objSrLatn->lt("Nj", "\x{1CB}"));
+ok($objSrLatn->gt("NJ", "\x{1CB}"));
+ok($objSrLatn->lt("NJ", "\x{1CA}"));
+
+# 76
+
+ok($objSrLatn->eq("c\x{30C}", "\x{10D}"));
+ok($objSrLatn->eq("C\x{30C}", "\x{10C}"));
+ok($objSrLatn->eq("c\x{301}", "\x{107}"));
+ok($objSrLatn->eq("c\x{341}", "\x{107}"));
+ok($objSrLatn->eq("C\x{301}", "\x{106}"));
+ok($objSrLatn->eq("C\x{341}", "\x{106}"));
+ok($objSrLatn->eq("dz\x{30C}", "d\x{17E}"));
+ok($objSrLatn->eq("dZ\x{30C}", "d\x{17D}"));
+ok($objSrLatn->eq("Dz\x{30C}", "D\x{17E}"));
+ok($objSrLatn->eq("DZ\x{30C}", "D\x{17D}"));
+ok($objSrLatn->eq("d\x{335}", "\x{111}"));
+ok($objSrLatn->eq("D\x{335}", "\x{110}"));
+ok($objSrLatn->eq("s\x{30C}", "\x{161}"));
+ok($objSrLatn->eq("S\x{30C}", "\x{160}"));
+ok($objSrLatn->eq("z\x{30C}", "\x{17E}"));
+ok($objSrLatn->eq("Z\x{30C}", "\x{17D}"));
+
+# 92
+
+$objSrLatn->change(upper_before_lower => 1);
+
+ok($objSrLatn->gt("c\x{30C}", "C\x{30C}"));
+ok($objSrLatn->gt("c\x{301}", "C\x{301}"));
+ok($objSrLatn->gt("dz\x{30C}","Dz\x{30C}"));
+ok($objSrLatn->gt("Dz\x{30C}","DZ\x{30C}"));
+ok($objSrLatn->gt("d\x{335}", "D\x{335}"));
+ok($objSrLatn->gt("lj", "Lj"));
+ok($objSrLatn->gt("Lj", "LJ"));
+ok($objSrLatn->gt("nj", "Nj"));
+ok($objSrLatn->gt("Nj", "NJ"));
+ok($objSrLatn->gt("s\x{30C}", "S\x{30C}"));
+ok($objSrLatn->gt("z\x{30C}", "Z\x{30C}"));
+
+# 103
+
+ok($objSrLatn->lt("DZ\x{30C}", "\x{1C4}"));
+ok($objSrLatn->gt("Dz\x{30C}", "\x{1C4}"));
+ok($objSrLatn->lt("Dz\x{30C}", "\x{1C5}"));
+ok($objSrLatn->gt("dz\x{30C}", "\x{1C5}"));
+ok($objSrLatn->lt("dz\x{30C}", "\x{1C6}"));
+
+ok($objSrLatn->lt("LJ", "\x{1C7}"));
+ok($objSrLatn->gt("Lj", "\x{1C7}"));
+ok($objSrLatn->lt("Lj", "\x{1C8}"));
+ok($objSrLatn->gt("lj", "\x{1C8}"));
+ok($objSrLatn->lt("lj", "\x{1C9}"));
+
+ok($objSrLatn->lt("NJ", "\x{1CA}"));
+ok($objSrLatn->gt("Nj", "\x{1CA}"));
+ok($objSrLatn->lt("Nj", "\x{1CB}"));
+ok($objSrLatn->gt("nj", "\x{1CB}"));
+ok($objSrLatn->lt("nj", "\x{1CC}"));
+
+# 118
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_svrf.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_svrf.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_svrf.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,201 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..115\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $eth = pack 'U', 0xF0;
+my $ETH = pack 'U', 0xD0;
+my $thrn = pack 'U', 0xFE;
+my $THRN = pack 'U', 0xDE;
+my $uuml = pack 'U', 0xFC;
+my $Uuml = pack 'U', 0xDC;
+my $arng = pack 'U', 0xE5;
+my $Arng = pack 'U', 0xC5;
+my $auml = pack 'U', 0xE4;
+my $Auml = pack 'U', 0xC4;
+my $ae = pack 'U', 0xE6;
+my $AE = pack 'U', 0xC6;
+my $ouml = pack 'U', 0xF6;
+my $Ouml = pack 'U', 0xD6;
+my $ostk = pack 'U', 0xF8;
+my $Ostk = pack 'U', 0xD8;
+my $ocrc = pack 'U', 0xF4;
+my $Ocrc = pack 'U', 0xD4;
+
+my $objSvReform = Unicode::Collate::Locale->
+ new(locale => 'SV-reform', normalization => undef);
+
+ok($objSvReform->getlocale, 'sv__reformed');
+
+$objSvReform->change(level => 1);
+
+ok($objSvReform->lt('z', $arng));
+ok($objSvReform->lt($arng, $auml));
+ok($objSvReform->lt($auml, $ouml));
+ok($objSvReform->lt($ouml, "\x{1C0}"));
+
+# 6
+
+ok($objSvReform->lt('v', 'w'));
+ok($objSvReform->gt('x', 'w'));
+
+ok($objSvReform->eq('d', "\x{111}"));
+ok($objSvReform->eq("\x{111}", $eth));
+ok($objSvReform->eq('y', $uuml));
+ok($objSvReform->eq($uuml, "\x{171}"));
+
+ok($objSvReform->eq($auml, $ae));
+ok($objSvReform->eq($ae, "\x{119}"));
+ok($objSvReform->eq($ouml, $ostk));
+ok($objSvReform->eq($ostk, "\x{151}"));
+ok($objSvReform->eq("\x{151}", "\x{153}"));
+ok($objSvReform->eq("\x{153}", $ocrc));
+
+# 18
+
+$objSvReform->change(level => 2);
+
+ok($objSvReform->lt('d', "\x{111}"));
+ok($objSvReform->lt("\x{111}", $eth));
+ok($objSvReform->lt('y', $uuml));
+ok($objSvReform->lt($uuml, "\x{171}"));
+
+ok($objSvReform->lt($auml, $ae));
+ok($objSvReform->lt($ae, "\x{119}"));
+ok($objSvReform->lt($ouml, $ostk));
+ok($objSvReform->lt($ostk, "\x{151}"));
+ok($objSvReform->lt("\x{151}", "\x{153}"));
+ok($objSvReform->lt("\x{153}", $ocrc));
+
+# 28
+
+ok($objSvReform->eq("\x{111}", "\x{110}"));
+ok($objSvReform->eq($eth, $ETH));
+ok($objSvReform->eq('th', $thrn));
+ok($objSvReform->eq($thrn, 'TH'));
+ok($objSvReform->eq('TH', $THRN));
+ok($objSvReform->eq('w', 'W'));
+ok($objSvReform->eq($uuml, $Uuml));
+ok($objSvReform->eq("\x{171}", "\x{170}"));
+ok($objSvReform->eq($arng, $Arng));
+ok($objSvReform->eq($auml, $Auml));
+ok($objSvReform->eq($ae, $AE));
+ok($objSvReform->eq($AE, "\x{1D2D}"));
+ok($objSvReform->eq("\x{119}", "\x{118}"));
+ok($objSvReform->eq($ouml, $Ouml));
+ok($objSvReform->eq($ostk, $Ostk));
+ok($objSvReform->eq("\x{151}", "\x{150}"));
+ok($objSvReform->eq("\x{153}", "\x{152}"));
+ok($objSvReform->eq($ocrc, $Ocrc));
+
+# 46
+
+$objSvReform->change(level => 3);
+
+ok($objSvReform->lt("\x{111}", "\x{110}"));
+ok($objSvReform->lt($eth, $ETH));
+ok($objSvReform->lt('th', $thrn));
+ok($objSvReform->lt($thrn, 'TH'));
+ok($objSvReform->lt('TH', $THRN));
+ok($objSvReform->lt('w', 'W'));
+ok($objSvReform->lt($uuml, $Uuml));
+ok($objSvReform->lt("\x{171}", "\x{170}"));
+ok($objSvReform->lt($arng, $Arng));
+ok($objSvReform->lt($auml, $Auml));
+ok($objSvReform->lt($ae, $AE));
+ok($objSvReform->lt($AE, "\x{1D2D}"));
+ok($objSvReform->lt("\x{119}", "\x{118}"));
+ok($objSvReform->lt($ouml, $Ouml));
+ok($objSvReform->lt($ostk, $Ostk));
+ok($objSvReform->lt("\x{151}", "\x{150}"));
+ok($objSvReform->lt("\x{153}", "\x{152}"));
+ok($objSvReform->lt($ocrc, $Ocrc));
+
+# 64
+
+ok($objSvReform->eq("d\x{335}", "\x{111}"));
+ok($objSvReform->eq("D\x{335}", "\x{110}"));
+ok($objSvReform->eq("u\x{308}", $uuml));
+ok($objSvReform->eq("U\x{308}", $Uuml));
+ok($objSvReform->eq("u\x{30B}", "\x{171}"));
+ok($objSvReform->eq("U\x{30B}", "\x{170}"));
+ok($objSvReform->eq("a\x{30A}", $arng));
+ok($objSvReform->eq("A\x{30A}", $Arng));
+ok($objSvReform->eq("a\x{308}", $auml));
+ok($objSvReform->eq("A\x{308}", $Auml));
+ok($objSvReform->eq("e\x{328}", "\x{119}"));
+ok($objSvReform->eq("E\x{328}", "\x{118}"));
+ok($objSvReform->eq("o\x{308}", $ouml));
+ok($objSvReform->eq("O\x{308}", $Ouml));
+ok($objSvReform->eq("o\x{338}", $ostk));
+ok($objSvReform->eq("O\x{338}", $Ostk));
+ok($objSvReform->eq("o\x{30B}", "\x{151}"));
+ok($objSvReform->eq("O\x{30B}", "\x{150}"));
+ok($objSvReform->eq("o\x{302}", $ocrc));
+ok($objSvReform->eq("O\x{302}", $Ocrc));
+
+# 84
+
+ok($objSvReform->eq("u\x{308}\x{300}", "\x{1DC}"));
+ok($objSvReform->eq("U\x{308}\x{300}", "\x{1DB}"));
+ok($objSvReform->eq("u\x{308}\x{301}", "\x{1D8}"));
+ok($objSvReform->eq("U\x{308}\x{301}", "\x{1D7}"));
+ok($objSvReform->eq("u\x{308}\x{304}", "\x{1D6}"));
+ok($objSvReform->eq("U\x{308}\x{304}", "\x{1D5}"));
+ok($objSvReform->eq("u\x{308}\x{30C}", "\x{1DA}"));
+ok($objSvReform->eq("U\x{308}\x{30C}", "\x{1D9}"));
+ok($objSvReform->eq("A\x{30A}", "\x{212B}"));
+ok($objSvReform->eq("a\x{30A}\x{301}", "\x{1FB}"));
+ok($objSvReform->eq("A\x{30A}\x{301}", "\x{1FA}"));
+ok($objSvReform->eq("a\x{308}\x{304}", "\x{1DF}"));
+ok($objSvReform->eq("A\x{308}\x{304}", "\x{1DE}"));
+ok($objSvReform->eq("\x{1FD}", "$ae\x{301}"));
+ok($objSvReform->eq("\x{1FC}", "$AE\x{301}"));
+ok($objSvReform->eq("\x{1E3}", "$ae\x{304}"));
+ok($objSvReform->eq("\x{1E2}", "$AE\x{304}"));
+ok($objSvReform->eq("o\x{308}\x{304}", "\x{22B}"));
+ok($objSvReform->eq("O\x{308}\x{304}", "\x{22A}"));
+ok($objSvReform->eq("o\x{338}\x{301}", "\x{1FF}"));
+ok($objSvReform->eq("O\x{338}\x{301}", "\x{1FE}"));
+
+# 105
+
+ok($objSvReform->eq("o\x{302}\x{300}", "\x{1ED3}"));
+ok($objSvReform->eq("O\x{302}\x{300}", "\x{1ED2}"));
+ok($objSvReform->eq("o\x{302}\x{301}", "\x{1ED1}"));
+ok($objSvReform->eq("O\x{302}\x{301}", "\x{1ED0}"));
+ok($objSvReform->eq("o\x{302}\x{303}", "\x{1ED7}"));
+ok($objSvReform->eq("O\x{302}\x{303}", "\x{1ED6}"));
+ok($objSvReform->eq("o\x{302}\x{309}", "\x{1ED5}"));
+ok($objSvReform->eq("O\x{302}\x{309}", "\x{1ED4}"));
+ok($objSvReform->eq("o\x{302}\x{323}", "\x{1ED9}"));
+ok($objSvReform->eq("O\x{302}\x{323}", "\x{1ED8}"));
+
+# 115
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_ta.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_ta.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_ta.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,99 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..104\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $Kssa = "\x{B95}\x{BCD}\x{BB7}";
+my $v = "\x{BCD}";
+
+my $objTa = Unicode::Collate::Locale->
+ new(locale => 'TA', normalization => undef);
+
+ok($objTa->getlocale, 'ta');
+
+$objTa->change(level => 1);
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objTa->change(highestFFFF => 1) if $h;
+
+ ok($objTa->lt("\x{B94}$t", "\x{B82}"));
+ ok($objTa->lt("\x{B82}$t", "\x{B83}"));
+ ok($objTa->lt("\x{B83}$t", "\x{B95}$v"));
+ ok($objTa->lt("\x{B95}$v$t", "\x{B95}"));
+ ok($objTa->lt("\x{B95}$t", "\x{B99}$v"));
+ ok($objTa->lt("\x{B99}$v$t", "\x{B99}"));
+ ok($objTa->lt("\x{B99}$t", "\x{B9A}$v"));
+ ok($objTa->lt("\x{B9A}$v$t", "\x{B9A}"));
+ ok($objTa->lt("\x{B9A}$t", "\x{B9E}$v"));
+ ok($objTa->lt("\x{B9E}$v$t", "\x{B9E}"));
+ ok($objTa->lt("\x{B9E}$t", "\x{B9F}$v"));
+ ok($objTa->lt("\x{B9F}$v$t", "\x{B9F}"));
+ ok($objTa->lt("\x{B9F}$t", "\x{BA3}$v"));
+ ok($objTa->lt("\x{BA3}$v$t", "\x{BA3}"));
+ ok($objTa->lt("\x{BA3}$t", "\x{BA4}$v"));
+ ok($objTa->lt("\x{BA4}$v$t", "\x{BA4}"));
+ ok($objTa->lt("\x{BA4}$t", "\x{BA8}$v"));
+ ok($objTa->lt("\x{BA8}$v$t", "\x{BA8}"));
+ ok($objTa->lt("\x{BA8}$t", "\x{BAA}$v"));
+ ok($objTa->lt("\x{BAA}$v$t", "\x{BAA}"));
+ ok($objTa->lt("\x{BAA}$t", "\x{BAE}$v"));
+ ok($objTa->lt("\x{BAE}$v$t", "\x{BAE}"));
+ ok($objTa->lt("\x{BAE}$t", "\x{BAF}$v"));
+ ok($objTa->lt("\x{BAF}$v$t", "\x{BAF}"));
+ ok($objTa->lt("\x{BAF}$t", "\x{BB0}$v"));
+ ok($objTa->lt("\x{BB0}$v$t", "\x{BB0}"));
+ ok($objTa->lt("\x{BB0}$t", "\x{BB2}$v"));
+ ok($objTa->lt("\x{BB2}$v$t", "\x{BB2}"));
+ ok($objTa->lt("\x{BB2}$t", "\x{BB5}$v"));
+ ok($objTa->lt("\x{BB5}$v$t", "\x{BB5}"));
+ ok($objTa->lt("\x{BB5}$t", "\x{BB4}$v"));
+ ok($objTa->lt("\x{BB4}$v$t", "\x{BB4}"));
+ ok($objTa->lt("\x{BB4}$t", "\x{BB3}$v"));
+ ok($objTa->lt("\x{BB3}$v$t", "\x{BB3}"));
+ ok($objTa->lt("\x{BB3}$t", "\x{BB1}$v"));
+ ok($objTa->lt("\x{BB1}$v$t", "\x{BB1}"));
+ ok($objTa->lt("\x{BB1}$t", "\x{BA9}$v"));
+ ok($objTa->lt("\x{BA9}$v$t", "\x{BA9}"));
+ ok($objTa->lt("\x{BA9}$t", "\x{B9C}$v"));
+ ok($objTa->lt("\x{B9C}$v$t", "\x{B9C}"));
+ ok($objTa->lt("\x{B9C}$t", "\x{BB6}$v"));
+ ok($objTa->lt("\x{BB6}$v$t", "\x{BB6}"));
+ ok($objTa->lt("\x{BB6}$t", "\x{BB7}$v"));
+ ok($objTa->lt("\x{BB7}$v$t", "\x{BB7}"));
+ ok($objTa->lt("\x{BB7}$t", "\x{BB8}$v"));
+ ok($objTa->lt("\x{BB8}$v$t", "\x{BB8}"));
+ ok($objTa->lt("\x{BB8}$t", "\x{BB9}$v"));
+ ok($objTa->lt("\x{BB9}$v$t", "\x{BB9}"));
+ ok($objTa->lt("\x{BB9}$t", "${Kssa}$v"));
+ ok($objTa->lt("${Kssa}$v$t", "${Kssa}"));
+ ok($objTa->lt("${Kssa}$t", "\x{BBE}"));
+}
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_te.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_te.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_te.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,50 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..12\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objTe = Unicode::Collate::Locale->
+ new(locale => 'TE', normalization => undef);
+
+ok($objTe->getlocale, 'te');
+
+$objTe->change(level => 1);
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objTe->change(highestFFFF => 1) if $h;
+
+ ok($objTe->lt("\x{C13}$t", "\x{C14}"));
+ ok($objTe->lt("\x{C14}$t", "\x{C01}"));
+ ok($objTe->lt("\x{C01}$t", "\x{C02}"));
+ ok($objTe->lt("\x{C02}$t", "\x{C03}"));
+ ok($objTe->lt("\x{C03}$t", "\x{C15}"));
+}
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_th.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_th.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_th.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,131 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..55\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objTh = Unicode::Collate::Locale->
+ new(locale => 'TH', normalization => undef);
+
+
+ok($objTh->getlocale, 'th');
+
+$objTh->change(level => 1);
+
+# shifted
+
+ok($objTh->eq("\x{E2F}", ""));
+ok($objTh->eq("\x{E46}", ""));
+ok($objTh->eq("\x{E4F}", ""));
+ok($objTh->eq("\x{E5A}", ""));
+ok($objTh->eq("\x{E5B}", ""));
+
+# 7
+
+ok($objTh->lt("\x{E2E}", "\x{E4D}"));
+ok($objTh->lt("\x{E4D}", "\x{E30}"));
+
+ok($objTh->lt("\x{E44}", "\x{E3A}"));
+
+# 10
+
+ok($objTh->eq("\x{E4E}", ""));
+ok($objTh->eq("\x{E4C}", ""));
+ok($objTh->eq("\x{E47}", ""));
+ok($objTh->eq("\x{E48}", ""));
+ok($objTh->eq("\x{E49}", ""));
+ok($objTh->eq("\x{E4A}", ""));
+ok($objTh->eq("\x{E4B}", ""));
+
+# 17
+
+$objTh->change(level => 2);
+
+ok($objTh->lt("\x{E4E}", "\x{E4C}"));
+ok($objTh->lt("\x{E4C}", "\x{E47}"));
+ok($objTh->lt("\x{E47}", "\x{E48}"));
+ok($objTh->lt("\x{E48}", "\x{E49}"));
+ok($objTh->lt("\x{E49}", "\x{E4A}"));
+ok($objTh->lt("\x{E4A}", "\x{E4B}"));
+
+ok($objTh->eq("\x{E32}", "\x{E45}"));
+ok($objTh->eq("\x{E32}\x{E4D}", "\x{E4D}\x{E32}"));
+ok($objTh->eq("\x{E4D}\x{E32}", "\x{E33}"));
+ok($objTh->eq("\x{E4D}\x{E45}", "\x{E45}\x{E4D}"));
+
+# 27
+
+$objTh->change(level => 3);
+
+ok($objTh->lt("\x{E32}", "\x{E45}"));
+ok($objTh->lt("\x{E32}\x{E4D}", "\x{E4D}\x{E32}"));
+ok($objTh->lt("\x{E4D}\x{E32}", "\x{E33}"));
+ok($objTh->lt("\x{E4D}\x{E45}", "\x{E45}\x{E4D}"));
+
+ok($objTh->eq("\x{E4F}", "\x{E2F}"));
+ok($objTh->eq("\x{E2F}", "\x{E5A}"));
+ok($objTh->eq("\x{E5A}", "\x{E5B}"));
+ok($objTh->eq("\x{E5B}", "\x{E46}"));
+
+# 35
+
+$objTh->change(level => 4);
+
+for my $t ("", "\x{E01}") {
+ ok($objTh->lt("\x{E4F}$t", "\x{E2F}$t"));
+ ok($objTh->lt("\x{E2F}$t", "\x{E5A}$t"));
+ ok($objTh->lt("\x{E5A}$t", "\x{E5B}$t"));
+ ok($objTh->lt("\x{E5B}$t", "\x{E46}$t"));
+}
+
+# 43
+
+$objTh->change(level => 1);
+
+ok($objTh->eq("\x{E4F}", "\x{E2F}"));
+ok($objTh->eq("\x{E2F}", "\x{E5A}"));
+ok($objTh->eq("\x{E5A}", "\x{E5B}"));
+ok($objTh->eq("\x{E5B}", "\x{E46}"));
+
+# 47
+
+$objTh->change(variable => "non-ignorable");
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objTh->change(highestFFFF => 1) if $h;
+
+ ok($objTh->lt("\x{E4F}$t", "\x{E2F}"));
+ ok($objTh->lt("\x{E2F}$t", "\x{E5A}"));
+ ok($objTh->lt("\x{E5A}$t", "\x{E5B}"));
+ ok($objTh->lt("\x{E5B}$t", "\x{E46}"));
+}
+
+# 55
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_ur.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_ur.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_ur.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,171 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..166\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objUr = Unicode::Collate::Locale->
+ new(locale => 'UR', normalization => undef);
+
+ok($objUr->getlocale, 'ur');
+
+$objUr->change(level => 3);
+
+ok($objUr->eq("\x{623}", "\x{627}\x{654}"));
+ok($objUr->eq("\x{622}", "\x{627}\x{653}"));
+ok($objUr->eq("\x{624}", "\x{648}\x{654}"));
+ok($objUr->eq("\x{6C2}", "\x{6C1}\x{654}"));
+ok($objUr->eq("\x{626}", "\x{64A}\x{654}"));
+ok($objUr->eq("\x{6D3}", "\x{6D2}\x{654}"));
+
+# 8
+
+$objUr->change(level => 2);
+
+ok($objUr->lt("\x{627}", "\x{623}"));
+ok($objUr->lt("\x{648}", "\x{624}"));
+ok($objUr->lt("\x{6C1}", "\x{6C2}"));
+ok($objUr->lt("\x{6CC}", "\x{626}"));
+ok($objUr->lt("\x{6D2}", "\x{6D3}"));
+
+# 13
+
+ok($objUr->lt("\x{652}", "\x{64E}"));
+ok($objUr->lt("\x{64E}", "\x{650}"));
+ok($objUr->lt("\x{650}", "\x{64F}"));
+ok($objUr->lt("\x{64F}", "\x{670}"));
+ok($objUr->lt("\x{670}", "\x{656}"));
+ok($objUr->lt("\x{656}", "\x{657}"));
+ok($objUr->lt("\x{657}", "\x{64B}"));
+ok($objUr->lt("\x{64B}", "\x{64D}"));
+ok($objUr->lt("\x{64D}", "\x{64C}"));
+ok($objUr->lt("\x{64C}", "\x{654}"));
+ok($objUr->lt("\x{654}", "\x{651}"));
+ok($objUr->lt("\x{651}", "\x{658}"));
+ok($objUr->lt("\x{658}", "\x{653}"));
+ok($objUr->lt("\x{653}", "\x{655}"));
+
+# 27
+
+$objUr->change(level => 1);
+
+ok($objUr->eq("\x{627}", "\x{623}"));
+ok($objUr->eq("\x{648}", "\x{624}"));
+ok($objUr->eq("\x{6C1}", "\x{6C2}"));
+ok($objUr->eq("\x{6CC}", "\x{626}"));
+ok($objUr->eq("\x{6D2}", "\x{6D3}"));
+
+# 32
+
+ok($objUr->eq("\x{652}", "\x{64E}"));
+ok($objUr->eq("\x{64E}", "\x{650}"));
+ok($objUr->eq("\x{650}", "\x{64F}"));
+ok($objUr->eq("\x{64F}", "\x{670}"));
+ok($objUr->eq("\x{670}", "\x{656}"));
+ok($objUr->eq("\x{656}", "\x{657}"));
+ok($objUr->eq("\x{657}", "\x{64B}"));
+ok($objUr->eq("\x{64B}", "\x{64D}"));
+ok($objUr->eq("\x{64D}", "\x{64C}"));
+ok($objUr->eq("\x{64C}", "\x{654}"));
+ok($objUr->eq("\x{654}", "\x{651}"));
+ok($objUr->eq("\x{651}", "\x{658}"));
+ok($objUr->eq("\x{658}", "\x{653}"));
+ok($objUr->eq("\x{653}", "\x{655}"));
+
+# 46
+
+for my $h (0, 1) {
+ no warnings 'utf8';
+ my $t = $h ? pack('U', 0xFFFF) : "";
+ $objUr->change(highestFFFF => 1) if $h;
+
+ ok($objUr->lt("\x{627}$t", "\x{622}"));
+ ok($objUr->lt("\x{622}$t", "\x{628}"));
+ ok($objUr->lt("\x{628}$t", "\x{628}\x{6BE}"));
+ ok($objUr->lt("\x{628}\x{6BE}$t", "\x{67E}"));
+ ok($objUr->lt("\x{67E}$t", "\x{67E}\x{6BE}"));
+ ok($objUr->lt("\x{67E}\x{6BE}$t", "\x{62A}"));
+ ok($objUr->lt("\x{62A}$t", "\x{62A}\x{6BE}"));
+ ok($objUr->lt("\x{62A}\x{6BE}$t", "\x{679}"));
+ ok($objUr->lt("\x{679}$t", "\x{679}\x{6BE}"));
+ ok($objUr->lt("\x{679}\x{6BE}$t", "\x{62B}"));
+ ok($objUr->lt("\x{62B}$t", "\x{62C}"));
+ ok($objUr->lt("\x{62C}$t", "\x{62C}\x{6BE}"));
+ ok($objUr->lt("\x{62C}\x{6BE}$t", "\x{686}"));
+ ok($objUr->lt("\x{686}$t", "\x{686}\x{6BE}"));
+ ok($objUr->lt("\x{686}\x{6BE}$t", "\x{62D}"));
+ ok($objUr->lt("\x{62D}$t", "\x{62E}"));
+ ok($objUr->lt("\x{62E}$t", "\x{62F}"));
+ ok($objUr->lt("\x{62F}$t", "\x{62F}\x{6BE}"));
+ ok($objUr->lt("\x{62F}\x{6BE}$t", "\x{688}"));
+ ok($objUr->lt("\x{688}$t", "\x{688}\x{6BE}"));
+ ok($objUr->lt("\x{688}\x{6BE}$t", "\x{630}"));
+ ok($objUr->lt("\x{630}$t", "\x{631}"));
+ ok($objUr->lt("\x{631}$t", "\x{631}\x{6BE}"));
+ ok($objUr->lt("\x{631}\x{6BE}$t", "\x{691}"));
+ ok($objUr->lt("\x{691}$t", "\x{691}\x{6BE}"));
+ ok($objUr->lt("\x{691}\x{6BE}$t", "\x{632}"));
+ ok($objUr->lt("\x{632}$t", "\x{698}"));
+ ok($objUr->lt("\x{698}$t", "\x{633}"));
+ ok($objUr->lt("\x{633}$t", "\x{634}"));
+ ok($objUr->lt("\x{634}$t", "\x{635}"));
+ ok($objUr->lt("\x{635}$t", "\x{636}"));
+ ok($objUr->lt("\x{636}$t", "\x{637}"));
+ ok($objUr->lt("\x{637}$t", "\x{638}"));
+ ok($objUr->lt("\x{638}$t", "\x{639}"));
+ ok($objUr->lt("\x{639}$t", "\x{63A}"));
+ ok($objUr->lt("\x{63A}$t", "\x{641}"));
+ ok($objUr->lt("\x{641}$t", "\x{642}"));
+ ok($objUr->lt("\x{642}$t", "\x{6A9}"));
+ ok($objUr->lt("\x{6A9}$t", "\x{6A9}\x{6BE}"));
+ ok($objUr->lt("\x{6A9}\x{6BE}$t", "\x{6AF}"));
+ ok($objUr->lt("\x{6AF}$t", "\x{6AF}\x{6BE}"));
+ ok($objUr->lt("\x{6AF}\x{6BE}$t", "\x{644}"));
+ ok($objUr->lt("\x{644}$t", "\x{644}\x{6BE}"));
+ ok($objUr->lt("\x{644}\x{6BE}$t", "\x{645}"));
+ ok($objUr->lt("\x{645}$t", "\x{645}\x{6BE}"));
+ ok($objUr->lt("\x{645}\x{6BE}$t", "\x{646}"));
+ ok($objUr->lt("\x{646}$t", "\x{646}\x{6BE}"));
+ ok($objUr->lt("\x{646}\x{6BE}$t", "\x{6BA}"));
+ ok($objUr->lt("\x{6BA}$t", "\x{6BA}\x{6BE}"));
+ ok($objUr->lt("\x{6BA}\x{6BE}$t", "\x{648}"));
+ ok($objUr->lt("\x{648}$t", "\x{648}\x{6BE}"));
+ ok($objUr->lt("\x{648}\x{6BE}$t", "\x{6C1}"));
+ ok($objUr->lt("\x{6C1}$t", "\x{6BE}"));
+ ok($objUr->lt("\x{6BE}$t", "\x{6C3}"));
+ ok($objUr->lt("\x{6C3}$t", "\x{621}"));
+ ok($objUr->lt("\x{621}$t", "\x{6CC}"));
+ ok($objUr->lt("\x{6CC}$t", "\x{6CC}\x{6BE}"));
+ ok($objUr->lt("\x{6CC}\x{6BE}$t", "\x{6D2}"));
+ ok($objUr->lt("\x{6D2}$t", "\x{66E}"));
+ ok($objUr->lt("\x{66E}$t", "\x{67B}"));
+}
+
+# 166
+
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_wae.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_wae.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_wae.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,146 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..78\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objWae = Unicode::Collate::Locale->
+ new(locale => 'WAE', normalization => undef);
+
+ok($objWae->getlocale, 'wae');
+
+$objWae->change(level => 1);
+
+ok($objWae->lt("aa", "a9"));
+ok($objWae->gt("aA", "a9"));
+ok($objWae->gt("Aa", "a9"));
+ok($objWae->gt("AA", "a9"));
+ok($objWae->lt("ee", "e9"));
+ok($objWae->gt("eE", "e9"));
+ok($objWae->gt("Ee", "e9"));
+ok($objWae->gt("EE", "e9"));
+ok($objWae->lt("ii", "i9"));
+ok($objWae->gt("iI", "i9"));
+ok($objWae->gt("Ii", "i9"));
+ok($objWae->gt("II", "i9"));
+ok($objWae->lt("oo", "o9"));
+ok($objWae->gt("oO", "o9"));
+ok($objWae->gt("Oo", "o9"));
+ok($objWae->gt("OO", "o9"));
+ok($objWae->lt("uu", "u9"));
+ok($objWae->gt("uU", "u9"));
+ok($objWae->gt("Uu", "u9"));
+ok($objWae->gt("UU", "u9"));
+
+# 22
+
+ok($objWae->lt("ch", "c9"));
+ok($objWae->gt("cH", "c9"));
+ok($objWae->gt("Ch", "c9"));
+ok($objWae->gt("CH", "c9"));
+
+ok($objWae->lt("sch", "s9"));
+ok($objWae->gt("scH", "s9"));
+ok($objWae->gt("sCh", "s9"));
+ok($objWae->gt("sCH", "s9"));
+ok($objWae->gt("Sch", "s9"));
+ok($objWae->gt("ScH", "s9"));
+ok($objWae->gt("SCh", "s9"));
+ok($objWae->gt("SCH", "s9"));
+
+# 34
+
+ok($objWae->lt("a\x{308}a\x{308}", "a9"));
+ok($objWae->gt("a\x{308}A\x{308}", "a9"));
+ok($objWae->gt("A\x{308}a\x{308}", "a9"));
+ok($objWae->gt("A\x{308}A\x{308}", "a9"));
+ok($objWae->lt("o\x{308}o\x{308}", "o9"));
+ok($objWae->gt("o\x{308}O\x{308}", "o9"));
+ok($objWae->gt("O\x{308}o\x{308}", "o9"));
+ok($objWae->gt("O\x{308}O\x{308}", "o9"));
+ok($objWae->lt("u\x{308}u\x{308}", "u9"));
+ok($objWae->gt("u\x{308}U\x{308}", "u9"));
+ok($objWae->gt("U\x{308}u\x{308}", "u9"));
+ok($objWae->gt("U\x{308}U\x{308}", "u9"));
+
+# 46
+
+$objWae->change(level => 3);
+
+ok($objWae->eq("a\x{301}", pack('U', 0xE1)));
+ok($objWae->eq("e\x{301}", pack('U', 0xE9)));
+ok($objWae->eq("i\x{301}", pack('U', 0xED)));
+ok($objWae->eq("o\x{301}", pack('U', 0xF3)));
+ok($objWae->eq("u\x{301}", pack('U', 0xFA)));
+ok($objWae->eq("a\x{301}", "aa"));
+ok($objWae->eq("e\x{301}", "ee"));
+ok($objWae->eq("i\x{301}", "ii"));
+ok($objWae->eq("o\x{301}", "oo"));
+ok($objWae->eq("u\x{301}", "uu"));
+
+# 56
+
+ok($objWae->eq("c\x{30C}", "\x{10D}"));
+ok($objWae->eq("s\x{30C}", "\x{161}"));
+ok($objWae->eq("c\x{30C}", "ch"));
+ok($objWae->eq("s\x{30C}", "sch"));
+
+# 60
+
+my $a1 = pack('U', 0xE4);
+my $o1 = pack('U', 0xF6);
+my $u1 = pack('U', 0xFC);
+my $a2 = "a\x{308}";
+my $o2 = "o\x{308}";
+my $u2 = "u\x{308}";
+
+ok($objWae->eq($a1, $a2));
+ok($objWae->eq($o1, $o2));
+ok($objWae->eq($u1, $u2));
+
+ok($objWae->eq("a\x{303}", pack('U', 0xE3)));
+ok($objWae->eq("o\x{303}", pack('U', 0xF5)));
+ok($objWae->eq("u\x{303}", "\x{169}"));
+
+# 66
+
+ok($objWae->eq("a\x{303}", $a1.$a1));
+ok($objWae->eq("a\x{303}", $a1.$a2));
+ok($objWae->eq("a\x{303}", $a2.$a1));
+ok($objWae->eq("a\x{303}", $a2.$a2));
+ok($objWae->eq("o\x{303}", $o1.$o1));
+ok($objWae->eq("o\x{303}", $o1.$o2));
+ok($objWae->eq("o\x{303}", $o2.$o1));
+ok($objWae->eq("o\x{303}", $o2.$o2));
+ok($objWae->eq("u\x{303}", $u1.$u1));
+ok($objWae->eq("u\x{303}", $u1.$u2));
+ok($objWae->eq("u\x{303}", $u2.$u1));
+ok($objWae->eq("u\x{303}", $u2.$u2));
+
+# 78
Added: vendor/perl/dist/cpan/Unicode-Collate/t/loc_zhzy.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/loc_zhzy.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/loc_zhzy.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,381 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..308\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate::Locale;
+
+ok(1);
+
+#########################
+
+my $objZhZ = Unicode::Collate::Locale->
+ new(locale => 'ZH__zhuyin', normalization => undef);
+
+ok($objZhZ->getlocale, 'zh__zhuyin');
+
+$objZhZ->change(level => 1);
+
+ok($objZhZ->eq("a\x{304}", "a\x{301}"));
+ok($objZhZ->eq("a\x{301}", "a\x{30C}"));
+ok($objZhZ->eq("a\x{30C}", "a\x{300}"));
+ok($objZhZ->eq("a\x{300}", "a"));
+ok($objZhZ->eq("e\x{304}", "e\x{301}"));
+ok($objZhZ->eq("e\x{301}", "e\x{30C}"));
+ok($objZhZ->eq("e\x{30C}", "e\x{300}"));
+ok($objZhZ->eq("e\x{300}", "e"));
+ok($objZhZ->eq("e\x{302}\x{304}", "e\x{302}\x{301}"));
+ok($objZhZ->eq("e\x{302}\x{301}", "e\x{302}\x{30C}"));
+ok($objZhZ->eq("e\x{302}\x{30C}", "e\x{302}\x{300}"));
+ok($objZhZ->eq("e\x{302}\x{300}", "e\x{302}"));
+ok($objZhZ->eq("i\x{304}", "i\x{301}"));
+ok($objZhZ->eq("i\x{301}", "i\x{30C}"));
+ok($objZhZ->eq("i\x{30C}", "i\x{300}"));
+ok($objZhZ->eq("i\x{300}", "i"));
+ok($objZhZ->eq("m\x{304}", "m\x{301}"));
+ok($objZhZ->eq("m\x{301}", "m\x{30C}"));
+ok($objZhZ->eq("m\x{30C}", "m\x{300}"));
+ok($objZhZ->eq("m\x{300}", "m"));
+ok($objZhZ->eq("n\x{304}", "n\x{301}"));
+ok($objZhZ->eq("n\x{301}", "n\x{30C}"));
+ok($objZhZ->eq("n\x{30C}", "n\x{300}"));
+ok($objZhZ->eq("n\x{300}", "n"));
+ok($objZhZ->eq("o\x{304}", "o\x{301}"));
+ok($objZhZ->eq("o\x{301}", "o\x{30C}"));
+ok($objZhZ->eq("o\x{30C}", "o\x{300}"));
+ok($objZhZ->eq("o\x{300}", "o"));
+ok($objZhZ->eq("u\x{304}", "u\x{301}"));
+ok($objZhZ->eq("u\x{301}", "u\x{30C}"));
+ok($objZhZ->eq("u\x{30C}", "u\x{300}"));
+ok($objZhZ->eq("u\x{300}", "u"));
+ok($objZhZ->eq("u\x{308}\x{304}", "u\x{308}\x{301}"));
+ok($objZhZ->eq("u\x{308}\x{301}", "u\x{308}\x{30C}"));
+ok($objZhZ->eq("u\x{308}\x{30C}", "u\x{308}\x{300}"));
+ok($objZhZ->eq("u\x{308}\x{300}", "u\x{308}"));
+
+# 38
+
+$objZhZ->change(level => 2);
+
+ok($objZhZ->lt("a\x{304}", "a\x{301}"));
+ok($objZhZ->lt("a\x{301}", "a\x{30C}"));
+ok($objZhZ->lt("a\x{30C}", "a\x{300}"));
+ok($objZhZ->lt("a\x{300}", "a"));
+ok($objZhZ->lt("e\x{304}", "e\x{301}"));
+ok($objZhZ->lt("e\x{301}", "e\x{30C}"));
+ok($objZhZ->lt("e\x{30C}", "e\x{300}"));
+ok($objZhZ->lt("e\x{300}", "e"));
+ok($objZhZ->lt("e\x{302}\x{304}", "e\x{302}\x{301}"));
+ok($objZhZ->lt("e\x{302}\x{301}", "e\x{302}\x{30C}"));
+ok($objZhZ->lt("e\x{302}\x{30C}", "e\x{302}\x{300}"));
+ok($objZhZ->lt("e\x{302}\x{300}", "e\x{302}"));
+ok($objZhZ->lt("i\x{304}", "i\x{301}"));
+ok($objZhZ->lt("i\x{301}", "i\x{30C}"));
+ok($objZhZ->lt("i\x{30C}", "i\x{300}"));
+ok($objZhZ->lt("i\x{300}", "i"));
+ok($objZhZ->lt("m\x{304}", "m\x{301}"));
+ok($objZhZ->lt("m\x{301}", "m\x{30C}"));
+ok($objZhZ->lt("m\x{30C}", "m\x{300}"));
+ok($objZhZ->lt("m\x{300}", "m"));
+ok($objZhZ->lt("n\x{304}", "n\x{301}"));
+ok($objZhZ->lt("n\x{301}", "n\x{30C}"));
+ok($objZhZ->lt("n\x{30C}", "n\x{300}"));
+ok($objZhZ->lt("n\x{300}", "n"));
+ok($objZhZ->lt("o\x{304}", "o\x{301}"));
+ok($objZhZ->lt("o\x{301}", "o\x{30C}"));
+ok($objZhZ->lt("o\x{30C}", "o\x{300}"));
+ok($objZhZ->lt("o\x{300}", "o"));
+ok($objZhZ->lt("u\x{304}", "u\x{301}"));
+ok($objZhZ->lt("u\x{301}", "u\x{30C}"));
+ok($objZhZ->lt("u\x{30C}", "u\x{300}"));
+ok($objZhZ->lt("u\x{300}", "u"));
+ok($objZhZ->lt("u\x{308}\x{304}", "u\x{308}\x{301}"));
+ok($objZhZ->lt("u\x{308}\x{301}", "u\x{308}\x{30C}"));
+ok($objZhZ->lt("u\x{308}\x{30C}", "u\x{308}\x{300}"));
+ok($objZhZ->lt("u\x{308}\x{300}", "u\x{308}"));
+
+# 74
+
+ok($objZhZ->eq("a\x{304}", "A\x{304}"));
+ok($objZhZ->eq("a\x{301}", "A\x{301}"));
+ok($objZhZ->eq("a\x{30C}", "A\x{30C}"));
+ok($objZhZ->eq("a\x{300}", "A\x{300}"));
+ok($objZhZ->eq("e\x{304}", "E\x{304}"));
+ok($objZhZ->eq("e\x{301}", "E\x{301}"));
+ok($objZhZ->eq("e\x{30C}", "E\x{30C}"));
+ok($objZhZ->eq("e\x{300}", "E\x{300}"));
+ok($objZhZ->eq("e\x{302}\x{304}", "E\x{302}\x{304}"));
+ok($objZhZ->eq("e\x{302}\x{301}", "E\x{302}\x{301}"));
+ok($objZhZ->eq("e\x{302}\x{30C}", "E\x{302}\x{30C}"));
+ok($objZhZ->eq("e\x{302}\x{300}", "E\x{302}\x{300}"));
+ok($objZhZ->eq("e\x{302}", "E\x{302}"));
+ok($objZhZ->eq("i\x{304}", "I\x{304}"));
+ok($objZhZ->eq("i\x{301}", "I\x{301}"));
+ok($objZhZ->eq("i\x{30C}", "I\x{30C}"));
+ok($objZhZ->eq("i\x{300}", "I\x{300}"));
+ok($objZhZ->eq("m\x{304}", "M\x{304}"));
+ok($objZhZ->eq("m\x{301}", "M\x{301}"));
+ok($objZhZ->eq("m\x{30C}", "M\x{30C}"));
+ok($objZhZ->eq("m\x{300}", "M\x{300}"));
+ok($objZhZ->eq("n\x{304}", "N\x{304}"));
+ok($objZhZ->eq("n\x{301}", "N\x{301}"));
+ok($objZhZ->eq("n\x{30C}", "N\x{30C}"));
+ok($objZhZ->eq("n\x{300}", "N\x{300}"));
+ok($objZhZ->eq("o\x{304}", "O\x{304}"));
+ok($objZhZ->eq("o\x{301}", "O\x{301}"));
+ok($objZhZ->eq("o\x{30C}", "O\x{30C}"));
+ok($objZhZ->eq("o\x{300}", "O\x{300}"));
+ok($objZhZ->eq("u\x{304}", "U\x{304}"));
+ok($objZhZ->eq("u\x{301}", "U\x{301}"));
+ok($objZhZ->eq("u\x{30C}", "U\x{30C}"));
+ok($objZhZ->eq("u\x{300}", "U\x{300}"));
+ok($objZhZ->eq("u\x{308}\x{304}", "U\x{308}\x{304}"));
+ok($objZhZ->eq("u\x{308}\x{301}", "U\x{308}\x{301}"));
+ok($objZhZ->eq("u\x{308}\x{30C}", "U\x{308}\x{30C}"));
+ok($objZhZ->eq("u\x{308}\x{300}", "U\x{308}\x{300}"));
+ok($objZhZ->eq("u\x{308}", "U\x{308}"));
+
+# 112
+
+$objZhZ->change(level => 3);
+
+ok($objZhZ->lt("a\x{304}", "A\x{304}"));
+ok($objZhZ->lt("a\x{301}", "A\x{301}"));
+ok($objZhZ->lt("a\x{30C}", "A\x{30C}"));
+ok($objZhZ->lt("a\x{300}", "A\x{300}"));
+ok($objZhZ->lt("e\x{304}", "E\x{304}"));
+ok($objZhZ->lt("e\x{301}", "E\x{301}"));
+ok($objZhZ->lt("e\x{30C}", "E\x{30C}"));
+ok($objZhZ->lt("e\x{300}", "E\x{300}"));
+ok($objZhZ->lt("e\x{302}\x{304}", "E\x{302}\x{304}"));
+ok($objZhZ->lt("e\x{302}\x{301}", "E\x{302}\x{301}"));
+ok($objZhZ->lt("e\x{302}\x{30C}", "E\x{302}\x{30C}"));
+ok($objZhZ->lt("e\x{302}\x{300}", "E\x{302}\x{300}"));
+ok($objZhZ->lt("e\x{302}", "E\x{302}"));
+ok($objZhZ->lt("i\x{304}", "I\x{304}"));
+ok($objZhZ->lt("i\x{301}", "I\x{301}"));
+ok($objZhZ->lt("i\x{30C}", "I\x{30C}"));
+ok($objZhZ->lt("i\x{300}", "I\x{300}"));
+ok($objZhZ->lt("m\x{304}", "M\x{304}"));
+ok($objZhZ->lt("m\x{301}", "M\x{301}"));
+ok($objZhZ->lt("m\x{30C}", "M\x{30C}"));
+ok($objZhZ->lt("m\x{300}", "M\x{300}"));
+ok($objZhZ->lt("n\x{304}", "N\x{304}"));
+ok($objZhZ->lt("n\x{301}", "N\x{301}"));
+ok($objZhZ->lt("n\x{30C}", "N\x{30C}"));
+ok($objZhZ->lt("n\x{300}", "N\x{300}"));
+ok($objZhZ->lt("o\x{304}", "O\x{304}"));
+ok($objZhZ->lt("o\x{301}", "O\x{301}"));
+ok($objZhZ->lt("o\x{30C}", "O\x{30C}"));
+ok($objZhZ->lt("o\x{300}", "O\x{300}"));
+ok($objZhZ->lt("u\x{304}", "U\x{304}"));
+ok($objZhZ->lt("u\x{301}", "U\x{301}"));
+ok($objZhZ->lt("u\x{30C}", "U\x{30C}"));
+ok($objZhZ->lt("u\x{300}", "U\x{300}"));
+ok($objZhZ->lt("u\x{308}\x{304}", "U\x{308}\x{304}"));
+ok($objZhZ->lt("u\x{308}\x{301}", "U\x{308}\x{301}"));
+ok($objZhZ->lt("u\x{308}\x{30C}", "U\x{308}\x{30C}"));
+ok($objZhZ->lt("u\x{308}\x{300}", "U\x{308}\x{300}"));
+ok($objZhZ->lt("u\x{308}", "U\x{308}"));
+
+# 150
+
+ok($objZhZ->eq("a\x{304}", "\x{101}"));
+ok($objZhZ->eq("A\x{304}", "\x{100}"));
+ok($objZhZ->eq("a\x{301}", pack('U', 0xE1)));
+ok($objZhZ->eq("a\x{301}", "a\x{341}"));
+ok($objZhZ->eq("A\x{301}", pack('U', 0xC1)));
+ok($objZhZ->eq("A\x{301}", "A\x{341}"));
+ok($objZhZ->eq("a\x{30C}", "\x{1CE}"));
+ok($objZhZ->eq("A\x{30C}", "\x{1CD}"));
+ok($objZhZ->eq("a\x{300}", pack('U', 0xE0)));
+ok($objZhZ->eq("a\x{300}", "a\x{340}"));
+ok($objZhZ->eq("A\x{300}", pack('U', 0xC0)));
+ok($objZhZ->eq("A\x{300}", "A\x{340}"));
+ok($objZhZ->eq("e\x{304}", "\x{113}"));
+ok($objZhZ->eq("E\x{304}", "\x{112}"));
+ok($objZhZ->eq("e\x{301}", pack('U', 0xE9)));
+ok($objZhZ->eq("e\x{301}", "e\x{341}"));
+ok($objZhZ->eq("E\x{301}", pack('U', 0xC9)));
+ok($objZhZ->eq("E\x{301}", "E\x{341}"));
+ok($objZhZ->eq("e\x{30C}", "\x{11B}"));
+ok($objZhZ->eq("E\x{30C}", "\x{11A}"));
+ok($objZhZ->eq("e\x{300}", pack('U', 0xE8)));
+ok($objZhZ->eq("e\x{300}", "e\x{340}"));
+ok($objZhZ->eq("E\x{300}", pack('U', 0xC8)));
+ok($objZhZ->eq("E\x{300}", "E\x{340}"));
+ok($objZhZ->eq("e\x{302}\x{304}", pack('U*', 0xEA, 0x304)));
+ok($objZhZ->eq("E\x{302}\x{304}", pack('U*', 0xCA, 0x304)));
+ok($objZhZ->eq("e\x{302}\x{301}", "\x{1EBF}"));
+ok($objZhZ->eq("e\x{302}\x{301}", "e\x{302}\x{341}"));
+ok($objZhZ->eq("E\x{302}\x{301}", "\x{1EBE}"));
+ok($objZhZ->eq("E\x{302}\x{301}", "E\x{302}\x{341}"));
+ok($objZhZ->eq("e\x{302}\x{301}", pack('U*', 0xEA, 0x301)));
+ok($objZhZ->eq("e\x{302}\x{301}", pack('U*', 0xEA, 0x341)));
+ok($objZhZ->eq("E\x{302}\x{301}", pack('U*', 0xCA, 0x301)));
+ok($objZhZ->eq("E\x{302}\x{301}", pack('U*', 0xCA, 0x341)));
+ok($objZhZ->eq("e\x{302}\x{30C}", pack('U*', 0xEA, 0x30C)));
+ok($objZhZ->eq("E\x{302}\x{30C}", pack('U*', 0xCA, 0x30C)));
+ok($objZhZ->eq("e\x{302}\x{300}", "\x{1EC1}"));
+ok($objZhZ->eq("e\x{302}\x{300}", "e\x{302}\x{340}"));
+ok($objZhZ->eq("E\x{302}\x{300}", "\x{1EC0}"));
+ok($objZhZ->eq("E\x{302}\x{300}", "E\x{302}\x{340}"));
+ok($objZhZ->eq("e\x{302}\x{300}", pack('U*', 0xEA, 0x300)));
+ok($objZhZ->eq("e\x{302}\x{300}", pack('U*', 0xEA, 0x340)));
+ok($objZhZ->eq("E\x{302}\x{300}", pack('U*', 0xCA, 0x300)));
+ok($objZhZ->eq("E\x{302}\x{300}", pack('U*', 0xCA, 0x340)));
+ok($objZhZ->eq("e\x{302}", pack('U', 0xEA)));
+ok($objZhZ->eq("E\x{302}", pack('U', 0xCA)));
+ok($objZhZ->eq("i\x{304}", "\x{12B}"));
+ok($objZhZ->eq("I\x{304}", "\x{12A}"));
+ok($objZhZ->eq("i\x{301}", pack('U', 0xED)));
+ok($objZhZ->eq("i\x{301}", "i\x{341}"));
+ok($objZhZ->eq("I\x{301}", pack('U', 0xCD)));
+ok($objZhZ->eq("I\x{301}", "I\x{341}"));
+ok($objZhZ->eq("i\x{30C}", "\x{1D0}"));
+ok($objZhZ->eq("I\x{30C}", "\x{1CF}"));
+ok($objZhZ->eq("i\x{300}", pack('U', 0xEC)));
+ok($objZhZ->eq("i\x{300}", "i\x{340}"));
+ok($objZhZ->eq("I\x{300}", pack('U', 0xCC)));
+ok($objZhZ->eq("I\x{300}", "I\x{340}"));
+ok($objZhZ->eq("m\x{301}", "\x{1E3F}"));
+ok($objZhZ->eq("m\x{301}", "m\x{341}"));
+ok($objZhZ->eq("M\x{301}", "\x{1E3E}"));
+ok($objZhZ->eq("M\x{301}", "M\x{341}"));
+ok($objZhZ->eq("m\x{300}", "m\x{340}"));
+ok($objZhZ->eq("M\x{300}", "M\x{340}"));
+ok($objZhZ->eq("n\x{301}", "\x{144}"));
+ok($objZhZ->eq("n\x{301}", "n\x{341}"));
+ok($objZhZ->eq("N\x{301}", "\x{143}"));
+ok($objZhZ->eq("N\x{301}", "N\x{341}"));
+ok($objZhZ->eq("n\x{30C}", "\x{148}"));
+ok($objZhZ->eq("N\x{30C}", "\x{147}"));
+ok($objZhZ->eq("n\x{300}", "\x{1F9}"));
+ok($objZhZ->eq("n\x{300}", "n\x{340}"));
+ok($objZhZ->eq("N\x{300}", "\x{1F8}"));
+ok($objZhZ->eq("N\x{300}", "N\x{340}"));
+ok($objZhZ->eq("o\x{304}", "\x{14D}"));
+ok($objZhZ->eq("O\x{304}", "\x{14C}"));
+ok($objZhZ->eq("o\x{301}", pack('U', 0xF3)));
+ok($objZhZ->eq("o\x{301}", "o\x{341}"));
+ok($objZhZ->eq("O\x{301}", pack('U', 0xD3)));
+ok($objZhZ->eq("O\x{301}", "O\x{341}"));
+ok($objZhZ->eq("o\x{30C}", "\x{1D2}"));
+ok($objZhZ->eq("O\x{30C}", "\x{1D1}"));
+ok($objZhZ->eq("o\x{300}", pack('U', 0xF2)));
+ok($objZhZ->eq("o\x{300}", "o\x{340}"));
+ok($objZhZ->eq("O\x{300}", pack('U', 0xD2)));
+ok($objZhZ->eq("O\x{300}", "O\x{340}"));
+ok($objZhZ->eq("u\x{304}", "\x{16B}"));
+ok($objZhZ->eq("U\x{304}", "\x{16A}"));
+ok($objZhZ->eq("u\x{301}", pack('U', 0xFA)));
+ok($objZhZ->eq("u\x{301}", "u\x{341}"));
+ok($objZhZ->eq("U\x{301}", pack('U', 0xDA)));
+ok($objZhZ->eq("U\x{301}", "U\x{341}"));
+ok($objZhZ->eq("u\x{30C}", "\x{1D4}"));
+ok($objZhZ->eq("U\x{30C}", "\x{1D3}"));
+ok($objZhZ->eq("u\x{300}", pack('U', 0xF9)));
+ok($objZhZ->eq("u\x{300}", "u\x{340}"));
+ok($objZhZ->eq("U\x{300}", pack('U', 0xD9)));
+ok($objZhZ->eq("U\x{300}", "U\x{340}"));
+ok($objZhZ->eq("u\x{308}\x{304}", "\x{1D6}"));
+ok($objZhZ->eq("U\x{308}\x{304}", "\x{1D5}"));
+ok($objZhZ->eq("u\x{308}\x{304}", pack('U*', 0xFC, 0x304)));
+ok($objZhZ->eq("U\x{308}\x{304}", pack('U*', 0xDC, 0x304)));
+ok($objZhZ->eq("u\x{308}\x{301}", "\x{1D8}"));
+ok($objZhZ->eq("u\x{308}\x{301}", "u\x{308}\x{341}"));
+ok($objZhZ->eq("U\x{308}\x{301}", "\x{1D7}"));
+ok($objZhZ->eq("U\x{308}\x{301}", "U\x{308}\x{341}"));
+ok($objZhZ->eq("u\x{308}\x{301}", pack('U*', 0xFC, 0x301)));
+ok($objZhZ->eq("u\x{308}\x{301}", pack('U*', 0xFC, 0x341)));
+ok($objZhZ->eq("U\x{308}\x{301}", pack('U*', 0xDC, 0x301)));
+ok($objZhZ->eq("U\x{308}\x{301}", pack('U*', 0xDC, 0x341)));
+ok($objZhZ->eq("u\x{308}\x{30C}", "\x{1DA}"));
+ok($objZhZ->eq("U\x{308}\x{30C}", "\x{1D9}"));
+ok($objZhZ->eq("u\x{308}\x{30C}", pack('U*', 0xFC, 0x30C)));
+ok($objZhZ->eq("U\x{308}\x{30C}", pack('U*', 0xDC, 0x30C)));
+ok($objZhZ->eq("u\x{308}\x{300}", "\x{1DC}"));
+ok($objZhZ->eq("u\x{308}\x{300}", "u\x{308}\x{340}"));
+ok($objZhZ->eq("U\x{308}\x{300}", "\x{1DB}"));
+ok($objZhZ->eq("U\x{308}\x{300}", "U\x{308}\x{340}"));
+ok($objZhZ->eq("u\x{308}\x{300}", pack('U*', 0xFC, 0x300)));
+ok($objZhZ->eq("u\x{308}\x{300}", pack('U*', 0xFC, 0x340)));
+ok($objZhZ->eq("U\x{308}\x{300}", pack('U*', 0xDC, 0x300)));
+ok($objZhZ->eq("U\x{308}\x{300}", pack('U*', 0xDC, 0x340)));
+ok($objZhZ->eq("u\x{308}", pack('U', 0xFC)));
+ok($objZhZ->eq("U\x{308}", pack('U', 0xDC)));
+
+# 274
+
+ok($objZhZ->eq("e\x{302}\x{303}", "\x{1EC5}"));
+ok($objZhZ->eq("E\x{302}\x{303}", "\x{1EC4}"));
+ok($objZhZ->eq("e\x{302}\x{309}", "\x{1EC3}"));
+ok($objZhZ->eq("E\x{302}\x{309}", "\x{1EC2}"));
+ok($objZhZ->eq("e\x{302}\x{323}", "\x{1EC7}"));
+ok($objZhZ->eq("E\x{302}\x{323}", "\x{1EC6}"));
+
+# 280
+
+$objZhZ->change(level => 1);
+
+ok($objZhZ->lt("\x{A000}", "\x{516B}"));
+ok($objZhZ->lt("\x{516B}", "\x{628A}"));
+ok($objZhZ->lt("\x{628A}", "\x{5DF4}"));
+ok($objZhZ->lt("\x{5DF4}", "\x{767D}"));
+ok($objZhZ->lt("\x{767D}", "\x{5317}"));
+ok($objZhZ->lt("\x{5317}", "\x{9F3B}"));
+ok($objZhZ->lt("\x{9F3B}", "\x{4E0D}"));
+ok($objZhZ->lt("\x{4E0D}", "\x{547D}"));
+ok($objZhZ->lt("\x{547D}", "\x{6BCD}"));
+ok($objZhZ->lt("\x{6BCD}", "\x{6253}"));
+ok($objZhZ->lt("\x{6253}", "\x{7530}"));
+ok($objZhZ->lt("\x{7530}", "\x{52AA}"));
+ok($objZhZ->lt("\x{52AA}", "\x{529B}"));
+ok($objZhZ->lt("\x{529B}", "\x{5375}"));
+ok($objZhZ->lt("\x{5375}", "\x{5149}"));
+ok($objZhZ->lt("\x{5149}", "\x{5915}"));
+ok($objZhZ->lt("\x{5915}", "\x{4E09}"));
+ok($objZhZ->lt("\x{4E09}", "\x{4E00}"));
+ok($objZhZ->lt("\x{4E00}", "\x{7528}"));
+
+# 299
+
+$objZhZ->change(variable => 'non-ignorable');
+
+ok($objZhZ->eq("\x{300}", "\x{2C9}"));
+ok($objZhZ->lt("\x{2C9}", "\x{2CA}"));
+ok($objZhZ->lt("\x{2CA}", "\x{2C7}"));
+ok($objZhZ->lt("\x{2C7}", "\x{2CB}"));
+ok($objZhZ->lt("\x{2CB}", "\x{2D9}"));
+ok($objZhZ->lt("\x{2D9}", "\x{2EA}"));
+ok($objZhZ->lt("\x{2EA}", "\x{2EB}"));
+ok($objZhZ->lt("\x{2EB}", "\ "));
+
+# 307
+
+$objZhZ->change(level => 2);
+
+ok($objZhZ->lt("\x{300}", "\x{2C9}"));
+
+# 308
Added: vendor/perl/dist/cpan/Unicode-Collate/t/notable.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/notable.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/notable.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,140 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..32\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate;
+
+ok(1);
+
+#########################
+
+{
+ # Table is undefined, then no entry is defined.
+ my $undef_table = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ level => 1,
+ );
+
+ # in the Unicode code point order
+ ok($undef_table->lt('', 'A'));
+ ok($undef_table->lt('ABC', 'B'));
+
+ # Hangul should be decomposed (even w/o Unicode::Normalize).
+ ok($undef_table->lt("Perl", "\x{AC00}"));
+ ok($undef_table->eq("\x{AC00}", "\x{1100}\x{1161}"));
+ ok($undef_table->eq("\x{AE00}", "\x{1100}\x{1173}\x{11AF}"));
+ ok($undef_table->lt("\x{AE00}", "\x{3042}"));
+
+ # U+AC00: Hangul GA
+ # U+AE00: Hangul GEUL
+ # U+3042: Hiragana A
+
+ # Weight for CJK Ideographs is defined, though.
+ ok($undef_table->lt("", "\x{4E00}"));
+ ok($undef_table->lt("\x{4E8C}","ABC"));
+ ok($undef_table->lt("\x{4E00}","\x{3042}"));
+ ok($undef_table->lt("\x{4E00}","\x{4E8C}"));
+
+# 11
+
+ # U+4E00: Ideograph "ONE"
+ # U+4E8C: Ideograph "TWO"
+
+ for my $v ('', 8, 9, 11, 14) {
+ $undef_table->change(UCA_Version => $v) if $v;
+ ok($undef_table->lt("\x{4E00}","\0"));
+ }
+}
+
+# 16
+
+{
+ my $onlyABC = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ entry => << 'ENTRIES',
+0061 ; [.0101.0020.0002.0061] # LATIN SMALL LETTER A
+0041 ; [.0101.0020.0008.0041] # LATIN CAPITAL LETTER A
+0062 ; [.0102.0020.0002.0062] # LATIN SMALL LETTER B
+0042 ; [.0102.0020.0008.0042] # LATIN CAPITAL LETTER B
+0063 ; [.0103.0020.0002.0063] # LATIN SMALL LETTER C
+0043 ; [.0103.0020.0008.0043] # LATIN CAPITAL LETTER C
+ENTRIES
+ );
+ ok(
+ join(':', $onlyABC->sort( qw/ ABA BAC cc A Ab cAc aB / ) ),
+ join(':', qw/ A aB Ab ABA BAC cAc cc / ),
+ );
+}
+
+# 17
+
+{
+ my $few_entries = Unicode::Collate->new(
+ entry => <<'ENTRIES',
+0050 ; [.0101.0020.0002.0050] # P
+0045 ; [.0102.0020.0002.0045] # E
+0052 ; [.0103.0020.0002.0052] # R
+004C ; [.0104.0020.0002.004C] # L
+1100 ; [.0105.0020.0002.1100] # Hangul Jamo initial G
+1175 ; [.0106.0020.0002.1175] # Hangul Jamo middle I
+5B57 ; [.0107.0020.0002.5B57] # CJK Ideograph "Letter"
+ENTRIES
+ table => undef,
+ normalization => undef,
+ );
+ # defined before undefined
+ my $sortABC = join '',
+ $few_entries->sort(split //, "ABCDEFGHIJKLMNOPQRSTUVWXYZ ");
+
+ ok($sortABC eq "PERL ABCDFGHIJKMNOQSTUVWXYZ");
+
+ ok($few_entries->lt('E', 'D'));
+ ok($few_entries->lt("\x{5B57}", "\x{4E00}"));
+ ok($few_entries->lt("\x{AE30}", "\x{AC00}"));
+
+ # Hangul must be decomposed.
+ ok($few_entries->eq("\x{AC00}", "\x{1100}\x{1161}"));
+}
+
+# 22
+
+{
+ my $highestNUL = Unicode::Collate->new(
+ table => undef,
+ normalization => undef,
+ level => 1,
+ entry => '0000 ; [.FFFE.0020.0005.0000]',
+ );
+
+ for my $v ('', 8, 9, 11, 14) {
+ $highestNUL->change(UCA_Version => $v) if $v;
+ ok($highestNUL->lt("abc\x{4E00}", "abc\0"));
+ ok($highestNUL->lt("abc\x{E0000}","abc\0"));
+ }
+}
+
+# 32
Added: vendor/perl/dist/cpan/Unicode-Collate/t/rewrite.t
===================================================================
--- vendor/perl/dist/cpan/Unicode-Collate/t/rewrite.t (rev 0)
+++ vendor/perl/dist/cpan/Unicode-Collate/t/rewrite.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,100 @@
+
+BEGIN {
+ unless ("A" eq pack('U', 0x41)) {
+ print "1..0 # Unicode::Collate " .
+ "cannot stringify a Unicode code point\n";
+ exit 0;
+ }
+ if ($ENV{PERL_CORE}) {
+ chdir('t') if -d 't';
+ @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib);
+ }
+}
+
+use strict;
+use warnings;
+BEGIN { $| = 1; print "1..17\n"; }
+my $count = 0;
+sub ok ($;$) {
+ my $p = my $r = shift;
+ if (@_) {
+ my $x = shift;
+ $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
+ }
+ print $p ? "ok" : "not ok", ' ', ++$count, "\n";
+}
+
+use Unicode::Collate;
+
+ok(1);
+
+#########################
+
+my $code = sub {
+ my $line = shift;
+ $line =~ s/\[\.0000\..{4}\..{4}\./[.0000.0000.0000./g;
+ return $line;
+ };
+
+#####
+
+my $Collator = Unicode::Collate->new(
+ table => 'keys.txt', normalization => undef, rewrite => $code,
+);
+
+ok($Collator->eq("camel", "came\x{300}l"));
+ok($Collator->eq("camel", "ca\x{300}me\x{301}l"));
+ok($Collator->lt("camel", "Camel"));
+{
+ my $s = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l.";
+ $Collator->gsubst($s, "camel", sub { "=$_[0]=" });
+ ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse =cam\0e\0l=.");
+}
+
+# 5
+
+my $rewriteDUCET = Unicode::Collate->new(
+ normalization => undef, rewrite => $code,
+);
+
+ok($rewriteDUCET->eq("camel", "came\x{300}l"));
+ok($rewriteDUCET->eq("camel", "ca\x{300}me\x{301}l"));
+ok($rewriteDUCET->lt("camel", "Camel"));
+{
+ my $s = "Camel donkey zebra came\x{301}l CAMEL horse cam\0e\0l.";
+ $rewriteDUCET->gsubst($s, "camel", sub { "=$_[0]=" });
+ ok($s, "Camel donkey zebra =came\x{301}l= CAMEL horse =cam\0e\0l=.");
+}
+
+# 9
+
+my $undef_hira = Unicode::Collate->new(
+ table => 'keys.txt',
+ normalization => undef,
+ level => 1,
+ rewrite => sub {
+ my $line = shift;
+ return '' if $line =~ /HIRAGANA/;
+ return $line;
+ },
+);
+
+my $hiragana = "\x{3042}\x{3044}";
+my $katakana = "\x{30A2}\x{30A4}";
+my $cjkkanji = "\x{4E00}";
+
+# HIRAGANA are undefined via rewrite
+# So they are after CJK Unified Ideographs.
+
+ok($undef_hira->lt("abc", "perl"));
+ok($undef_hira->lt("", "ABC"));
+ok($undef_hira->lt($katakana, $hiragana));
+ok($undef_hira->lt($katakana, $cjkkanji));
+ok($undef_hira->lt($cjkkanji, $hiragana));
+
+$Collator->change(level => 1);
+ok($Collator->eq($katakana, $hiragana));
+ok($Collator->lt($katakana, $cjkkanji));
+ok($Collator->gt($cjkkanji, $hiragana));
+
+# 17
Added: vendor/perl/dist/cpan/Win32/t/CodePage.t
===================================================================
--- vendor/perl/dist/cpan/Win32/t/CodePage.t (rev 0)
+++ vendor/perl/dist/cpan/Win32/t/CodePage.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,27 @@
+use strict;
+use Test;
+use Win32;
+
+plan tests => 8;
+
+my $ansicp = Win32::GetACP();
+ok($ansicp > 0 && $ansicp <= 65001);
+
+my $inputcp = Win32::GetConsoleCP();
+ok($inputcp > 0 && $inputcp <= 65001);
+
+my $outputcp = Win32::GetConsoleOutputCP();
+ok($outputcp > 0 && $outputcp <= 65001);
+
+my $oemcp = Win32::GetOEMCP();
+ok($oemcp > 0 && $oemcp <= 65001);
+
+ok(Win32::SetConsoleCP($ansicp));
+ok(Win32::GetConsoleCP() == $ansicp);
+
+ok(Win32::SetConsoleOutputCP($ansicp));
+ok(Win32::GetConsoleOutputCP() == $ansicp);
+
+# Reset things when we're done.
+Win32::SetConsoleCP($inputcp);
+Win32::SetConsoleOutputCP($outputcp);
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq.pm
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq.pm (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+package perlfaq;
+{
+ $perlfaq::VERSION = '5.0150042';
+}
+
+0; # not is it supposed to be loaded
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1373 @@
+=head1 NAME
+
+perlfaq - frequently asked questions about Perl
+
+=head1 DESCRIPTION
+
+The perlfaq comprises several documents that answer the most commonly
+asked questions about Perl and Perl programming. It's divided by topic
+into nine major sections outlined in this document.
+
+=head2 Where to find the perlfaq
+
+The perlfaq is an evolving document. Read the latest version at
+L<http://learn.perl.org/faq/>. It is also included in the standard Perl
+distribution.
+
+=head2 How to use the perlfaq
+
+The C<perldoc> command line tool is part of the standard Perl distribution. To
+read the perlfaq:
+
+ $ perldoc perlfaq
+
+To search the perlfaq question headings:
+
+ $ perldoc -q open
+
+=head2 How to contribute to the perlfaq
+
+Review L<https://github.com/perl-doc-cats/perlfaq/wiki>. If you don't find
+your suggestion create an issue or pull request against
+L<https://github.com/perl-doc-cats/perlfaq>.
+
+Once approved, changes are merged into L<https://github.com/tpf/perlfaq>, the
+repository which drives L<http://learn.perl.org/faq/>, and they are
+distributed with the next Perl 5 release.
+
+=head2 What if my question isn't answered in the FAQ?
+
+Try the resources in L<perlfaq2>.
+
+=head1 TABLE OF CONTENTS
+
+=over 4
+
+=item perlfaq1 - General Questions About Perl
+
+=item perlfaq2 - Obtaining and Learning about Perl
+
+=item perlfaq3 - Programming Tools
+
+=item perlfaq4 - Data Manipulation
+
+=item perlfaq5 - Files and Formats
+
+=item perlfaq6 - Regular Expressions
+
+=item perlfaq7 - General Perl Language Issues
+
+=item perlfaq8 - System Interaction
+
+=item perlfaq9 - Web, Email and Networking
+
+=back
+
+=head1 THE QUESTIONS
+
+=head2 L<perlfaq1>: General Questions About Perl
+
+This section of the FAQ answers very general, high-level questions about Perl.
+
+=over 4
+
+=item *
+
+What is Perl?
+
+=item *
+
+Who supports Perl? Who develops it? Why is it free?
+
+=item *
+
+Which version of Perl should I use?
+
+=item *
+
+What are Perl 4, Perl 5, or Perl 6?
+
+=item *
+
+What is Perl 6?
+
+=item *
+
+How stable is Perl?
+
+=item *
+
+Is Perl difficult to learn?
+
+=item *
+
+How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl?
+
+=item *
+
+Can I do [task] in Perl?
+
+=item *
+
+When shouldn't I program in Perl?
+
+=item *
+
+What's the difference between "perl" and "Perl"?
+
+=item *
+
+What is a JAPH?
+
+=item *
+
+How can I convince others to use Perl?
+
+=back
+
+
+=head2 L<perlfaq2>: Obtaining and Learning about Perl
+
+This section of the FAQ answers questions about where to find source and documentation for Perl, support, and related matters.
+
+=over 4
+
+=item *
+
+What machines support Perl? Where do I get it?
+
+=item *
+
+How can I get a binary version of Perl?
+
+=item *
+
+I don't have a C compiler. How can I build my own Perl interpreter?
+
+=item *
+
+I copied the Perl binary from one machine to another, but scripts don't work.
+
+=item *
+
+I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make it work?
+
+=item *
+
+What modules and extensions are available for Perl? What is CPAN?
+
+=item *
+
+Where can I get information on Perl?
+
+=item *
+
+What is perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
+
+=item *
+
+Where can I post questions?
+
+=item *
+
+Perl Books
+
+=item *
+
+Which magazines have Perl content?
+
+=item *
+
+Which Perl blogs should I read?
+
+=item *
+
+What mailing lists are there for Perl?
+
+=item *
+
+Where can I buy a commercial version of Perl?
+
+=item *
+
+Where do I send bug reports?
+
+=back
+
+
+=head2 L<perlfaq3>: Programming Tools
+
+This section of the FAQ answers questions related to programmer tools and programming support.
+
+=over 4
+
+=item *
+
+How do I do (anything)?
+
+=item *
+
+How can I use Perl interactively?
+
+=item *
+
+How do I find which modules are installed on my system?
+
+=item *
+
+How do I debug my Perl programs?
+
+=item *
+
+How do I profile my Perl programs?
+
+=item *
+
+How do I cross-reference my Perl programs?
+
+=item *
+
+Is there a pretty-printer (formatter) for Perl?
+
+=item *
+
+Is there an IDE or Windows Perl Editor?
+
+=item *
+
+Where can I get Perl macros for vi?
+
+=item *
+
+Where can I get perl-mode or cperl-mode for emacs?
+
+=item *
+
+How can I use curses with Perl?
+
+=item *
+
+How can I write a GUI (X, Tk, Gtk, etc.) in Perl?
+
+=item *
+
+How can I make my Perl program run faster?
+
+=item *
+
+How can I make my Perl program take less memory?
+
+=item *
+
+Is it safe to return a reference to local or lexical data?
+
+=item *
+
+How can I free an array or hash so my program shrinks?
+
+=item *
+
+How can I make my CGI script more efficient?
+
+=item *
+
+How can I hide the source for my Perl program?
+
+=item *
+
+How can I compile my Perl program into byte code or C?
+
+=item *
+
+How can I get C<#!perl> to work on [MS-DOS,NT,...]?
+
+=item *
+
+Can I write useful Perl programs on the command line?
+
+=item *
+
+Why don't Perl one-liners work on my DOS/Mac/VMS system?
+
+=item *
+
+Where can I learn about CGI or Web programming in Perl?
+
+=item *
+
+Where can I learn about object-oriented Perl programming?
+
+=item *
+
+Where can I learn about linking C with Perl?
+
+=item *
+
+I've read perlembed, perlguts, etc., but I can't embed perl in my C program; what am I doing wrong?
+
+=item *
+
+When I tried to run my script, I got this message. What does it mean?
+
+=item *
+
+What's MakeMaker?
+
+=back
+
+
+=head2 L<perlfaq4>: Data Manipulation
+
+This section of the FAQ answers questions related to manipulating numbers, dates, strings, arrays, hashes, and miscellaneous data issues.
+
+=over 4
+
+=item *
+
+Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
+
+=item *
+
+Why is int() broken?
+
+=item *
+
+Why isn't my octal data interpreted correctly?
+
+=item *
+
+Does Perl have a round() function? What about ceil() and floor()? Trig functions?
+
+=item *
+
+How do I convert between numeric representations/bases/radixes?
+
+=item *
+
+Why doesn't & work the way I want it to?
+
+=item *
+
+How do I multiply matrices?
+
+=item *
+
+How do I perform an operation on a series of integers?
+
+=item *
+
+How can I output Roman numerals?
+
+=item *
+
+Why aren't my random numbers random?
+
+=item *
+
+How do I get a random number between X and Y?
+
+=item *
+
+How do I find the day or week of the year?
+
+=item *
+
+How do I find the current century or millennium?
+
+=item *
+
+How can I compare two dates and find the difference?
+
+=item *
+
+How can I take a string and turn it into epoch seconds?
+
+=item *
+
+How can I find the Julian Day?
+
+=item *
+
+How do I find yesterday's date?
+
+=item *
+
+Does Perl have a Year 2000 or 2038 problem? Is Perl Y2K compliant?
+
+=item *
+
+How do I validate input?
+
+=item *
+
+How do I unescape a string?
+
+=item *
+
+How do I remove consecutive pairs of characters?
+
+=item *
+
+How do I expand function calls in a string?
+
+=item *
+
+How do I find matching/nesting anything?
+
+=item *
+
+How do I reverse a string?
+
+=item *
+
+How do I expand tabs in a string?
+
+=item *
+
+How do I reformat a paragraph?
+
+=item *
+
+How can I access or change N characters of a string?
+
+=item *
+
+How do I change the Nth occurrence of something?
+
+=item *
+
+How can I count the number of occurrences of a substring within a string?
+
+=item *
+
+How do I capitalize all the words on one line?
+
+=item *
+
+How can I split a [character]-delimited string except when inside [character]?
+
+=item *
+
+How do I strip blank space from the beginning/end of a string?
+
+=item *
+
+How do I pad a string with blanks or pad a number with zeroes?
+
+=item *
+
+How do I extract selected columns from a string?
+
+=item *
+
+How do I find the soundex value of a string?
+
+=item *
+
+How can I expand variables in text strings?
+
+=item *
+
+What's wrong with always quoting "$vars"?
+
+=item *
+
+Why don't my E<lt>E<lt>HERE documents work?
+
+=item *
+
+What is the difference between a list and an array?
+
+=item *
+
+What is the difference between $array[1] and @array[1]?
+
+=item *
+
+How can I remove duplicate elements from a list or array?
+
+=item *
+
+How can I tell whether a certain element is contained in a list or array?
+
+=item *
+
+How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
+
+=item *
+
+How do I test whether two arrays or hashes are equal?
+
+=item *
+
+How do I find the first array element for which a condition is true?
+
+=item *
+
+How do I handle linked lists?
+
+=item *
+
+How do I handle circular lists?
+
+=item *
+
+How do I shuffle an array randomly?
+
+=item *
+
+How do I process/modify each element of an array?
+
+=item *
+
+How do I select a random element from an array?
+
+=item *
+
+How do I permute N elements of a list?
+
+=item *
+
+How do I sort an array by (anything)?
+
+=item *
+
+How do I manipulate arrays of bits?
+
+=item *
+
+Why does defined() return true on empty arrays and hashes?
+
+=item *
+
+How do I process an entire hash?
+
+=item *
+
+How do I merge two hashes?
+
+=item *
+
+What happens if I add or remove keys from a hash while iterating over it?
+
+=item *
+
+How do I look up a hash element by value?
+
+=item *
+
+How can I know how many entries are in a hash?
+
+=item *
+
+How do I sort a hash (optionally by value instead of key)?
+
+=item *
+
+How can I always keep my hash sorted?
+
+=item *
+
+What's the difference between "delete" and "undef" with hashes?
+
+=item *
+
+Why don't my tied hashes make the defined/exists distinction?
+
+=item *
+
+How do I reset an each() operation part-way through?
+
+=item *
+
+How can I get the unique keys from two hashes?
+
+=item *
+
+How can I store a multidimensional array in a DBM file?
+
+=item *
+
+How can I make my hash remember the order I put elements into it?
+
+=item *
+
+Why does passing a subroutine an undefined element in a hash create it?
+
+=item *
+
+How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
+
+=item *
+
+How can I use a reference as a hash key?
+
+=item *
+
+How can I check if a key exists in a multilevel hash?
+
+=item *
+
+How can I prevent addition of unwanted keys into a hash?
+
+=item *
+
+How do I handle binary data correctly?
+
+=item *
+
+How do I determine whether a scalar is a number/whole/integer/float?
+
+=item *
+
+How do I keep persistent data across program calls?
+
+=item *
+
+How do I print out or copy a recursive data structure?
+
+=item *
+
+How do I define methods for every class/object?
+
+=item *
+
+How do I verify a credit card checksum?
+
+=item *
+
+How do I pack arrays of doubles or floats for XS code?
+
+=back
+
+
+=head2 L<perlfaq5>: Files and Formats
+
+This section deals with I/O and the "f" issues: filehandles, flushing, formats, and footers.
+
+=over 4
+
+=item *
+
+How do I flush/unbuffer an output filehandle? Why must I do this?
+
+=item *
+
+How do I change, delete, or insert a line in a file, or append to the beginning of a file?
+
+=item *
+
+How do I count the number of lines in a file?
+
+=item *
+
+How do I delete the last N lines from a file?
+
+=item *
+
+How can I use Perl's C<-i> option from within a program?
+
+=item *
+
+How can I copy a file?
+
+=item *
+
+How do I make a temporary file name?
+
+=item *
+
+How can I manipulate fixed-record-length files?
+
+=item *
+
+How can I make a filehandle local to a subroutine? How do I pass filehandles between subroutines? How do I make an array of filehandles?
+
+=item *
+
+How can I use a filehandle indirectly?
+
+=item *
+
+How can I set up a footer format to be used with write()?
+
+=item *
+
+How can I write() into a string?
+
+=item *
+
+How can I open a filehandle to a string?
+
+=item *
+
+How can I output my numbers with commas added?
+
+=item *
+
+How can I translate tildes (~) in a filename?
+
+=item *
+
+How come when I open a file read-write it wipes it out?
+
+=item *
+
+Why do I sometimes get an "Argument list too long" when I use E<lt>*E<gt>?
+
+=item *
+
+How can I open a file with a leading "E<gt>" or trailing blanks?
+
+=item *
+
+How can I reliably rename a file?
+
+=item *
+
+How can I lock a file?
+
+=item *
+
+Why can't I just open(FH, "E<gt>file.lock")?
+
+=item *
+
+I still don't get locking. I just want to increment the number in the file. How can I do this?
+
+=item *
+
+All I want to do is append a small amount of text to the end of a file. Do I still have to use locking?
+
+=item *
+
+How do I randomly update a binary file?
+
+=item *
+
+How do I get a file's timestamp in perl?
+
+=item *
+
+How do I set a file's timestamp in perl?
+
+=item *
+
+How do I print to more than one file at once?
+
+=item *
+
+How can I read in an entire file all at once?
+
+=item *
+
+How can I read in a file by paragraphs?
+
+=item *
+
+How can I read a single character from a file? From the keyboard?
+
+=item *
+
+How can I tell whether there's a character waiting on a filehandle?
+
+=item *
+
+How do I do a C<tail -f> in perl?
+
+=item *
+
+How do I dup() a filehandle in Perl?
+
+=item *
+
+How do I close a file descriptor by number?
+
+=item *
+
+Why can't I use "C:\temp\foo" in DOS paths? Why doesn't `C:\temp\foo.exe` work?
+
+=item *
+
+Why doesn't glob("*.*") get all the files?
+
+=item *
+
+Why does Perl let me delete read-only files? Why does C<-i> clobber protected files? Isn't this a bug in Perl?
+
+=item *
+
+How do I select a random line from a file?
+
+=item *
+
+Why do I get weird spaces when I print an array of lines?
+
+=item *
+
+How do I traverse a directory tree?
+
+=item *
+
+How do I delete a directory tree?
+
+=item *
+
+How do I copy an entire directory?
+
+=back
+
+
+=head2 L<perlfaq6>: Regular Expressions
+
+This section is surprisingly small because the rest of the FAQ is littered with answers involving regular expressions. For example, decoding a URL and checking whether something is a number can be handled with regular expressions, but those answers are found elsewhere in this document (in perlfaq9 : "How do I decode or create those %-encodings on the web" and perlfaq4 : "How do I determine whether a scalar is a number/whole/integer/float", to be precise).
+
+=over 4
+
+=item *
+
+How can I hope to use regular expressions without creating illegible and unmaintainable code?
+
+=item *
+
+I'm having trouble matching over more than one line. What's wrong?
+
+=item *
+
+How can I pull out lines between two patterns that are themselves on different lines?
+
+=item *
+
+How do I match XML, HTML, or other nasty, ugly things with a regex?
+
+=item *
+
+I put a regular expression into $/ but it didn't work. What's wrong?
+
+=item *
+
+How do I substitute case-insensitively on the LHS while preserving case on the RHS?
+
+=item *
+
+How can I make C<\w> match national character sets?
+
+=item *
+
+How can I match a locale-smart version of C</[a-zA-Z]/> ?
+
+=item *
+
+How can I quote a variable to use in a regex?
+
+=item *
+
+What is C</o> really for?
+
+=item *
+
+How do I use a regular expression to strip C-style comments from a file?
+
+=item *
+
+Can I use Perl regular expressions to match balanced text?
+
+=item *
+
+What does it mean that regexes are greedy? How can I get around it?
+
+=item *
+
+How do I process each word on each line?
+
+=item *
+
+How can I print out a word-frequency or line-frequency summary?
+
+=item *
+
+How can I do approximate matching?
+
+=item *
+
+How do I efficiently match many regular expressions at once?
+
+=item *
+
+Why don't word-boundary searches with C<\b> work for me?
+
+=item *
+
+Why does using $&, $`, or $' slow my program down?
+
+=item *
+
+What good is C<\G> in a regular expression?
+
+=item *
+
+Are Perl regexes DFAs or NFAs? Are they POSIX compliant?
+
+=item *
+
+What's wrong with using grep in a void context?
+
+=item *
+
+How can I match strings with multibyte characters?
+
+=item *
+
+How do I match a regular expression that's in a variable?
+
+=back
+
+
+=head2 L<perlfaq7>: General Perl Language Issues
+
+This section deals with general Perl language issues that don't clearly fit into any of the other sections.
+
+=over 4
+
+=item *
+
+Can I get a BNF/yacc/RE for the Perl language?
+
+=item *
+
+What are all these $@%&* punctuation signs, and how do I know when to use them?
+
+=item *
+
+Do I always/never have to quote my strings or use semicolons and commas?
+
+=item *
+
+How do I skip some return values?
+
+=item *
+
+How do I temporarily block warnings?
+
+=item *
+
+What's an extension?
+
+=item *
+
+Why do Perl operators have different precedence than C operators?
+
+=item *
+
+How do I declare/create a structure?
+
+=item *
+
+How do I create a module?
+
+=item *
+
+How do I adopt or take over a module already on CPAN?
+
+=item *
+
+How do I create a class?
+
+=item *
+
+How can I tell if a variable is tainted?
+
+=item *
+
+What's a closure?
+
+=item *
+
+What is variable suicide and how can I prevent it?
+
+=item *
+
+How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}?
+
+=item *
+
+How do I create a static variable?
+
+=item *
+
+What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
+
+=item *
+
+How can I access a dynamic variable while a similarly named lexical is in scope?
+
+=item *
+
+What's the difference between deep and shallow binding?
+
+=item *
+
+Why doesn't "my($foo) = E<lt>$fhE<gt>;" work right?
+
+=item *
+
+How do I redefine a builtin function, operator, or method?
+
+=item *
+
+What's the difference between calling a function as &foo and foo()?
+
+=item *
+
+How do I create a switch or case statement?
+
+=item *
+
+How can I catch accesses to undefined variables, functions, or methods?
+
+=item *
+
+Why can't a method included in this same file be found?
+
+=item *
+
+How can I find out my current or calling package?
+
+=item *
+
+How can I comment out a large block of Perl code?
+
+=item *
+
+How do I clear a package?
+
+=item *
+
+How can I use a variable as a variable name?
+
+=item *
+
+What does "bad interpreter" mean?
+
+=back
+
+
+=head2 L<perlfaq8>: System Interaction
+
+This section of the Perl FAQ covers questions involving operating system interaction. Topics include interprocess communication (IPC), control over the user-interface (keyboard, screen and pointing devices), and most anything else not related to data manipulation.
+
+=over 4
+
+=item *
+
+How do I find out which operating system I'm running under?
+
+=item *
+
+How come exec() doesn't return?
+
+=item *
+
+How do I do fancy stuff with the keyboard/screen/mouse?
+
+=item *
+
+How do I print something out in color?
+
+=item *
+
+How do I read just one key without waiting for a return key?
+
+=item *
+
+How do I check whether input is ready on the keyboard?
+
+=item *
+
+How do I clear the screen?
+
+=item *
+
+How do I get the screen size?
+
+=item *
+
+How do I ask the user for a password?
+
+=item *
+
+How do I read and write the serial port?
+
+=item *
+
+How do I decode encrypted password files?
+
+=item *
+
+How do I start a process in the background?
+
+=item *
+
+How do I trap control characters/signals?
+
+=item *
+
+How do I modify the shadow password file on a Unix system?
+
+=item *
+
+How do I set the time and date?
+
+=item *
+
+How can I sleep() or alarm() for under a second?
+
+=item *
+
+How can I measure time under a second?
+
+=item *
+
+How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
+
+=item *
+
+Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
+
+=item *
+
+How can I call my system's unique C functions from Perl?
+
+=item *
+
+Where do I get the include files to do ioctl() or syscall()?
+
+=item *
+
+Why do setuid perl scripts complain about kernel problems?
+
+=item *
+
+How can I open a pipe both to and from a command?
+
+=item *
+
+Why can't I get the output of a command with system()?
+
+=item *
+
+How can I capture STDERR from an external command?
+
+=item *
+
+Why doesn't open() return an error when a pipe open fails?
+
+=item *
+
+What's wrong with using backticks in a void context?
+
+=item *
+
+How can I call backticks without shell processing?
+
+=item *
+
+Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
+
+=item *
+
+How can I convert my shell script to perl?
+
+=item *
+
+Can I use perl to run a telnet or ftp session?
+
+=item *
+
+How can I write expect in Perl?
+
+=item *
+
+Is there a way to hide perl's command line from programs such as "ps"?
+
+=item *
+
+I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?
+
+=item *
+
+How do I close a process's filehandle without waiting for it to complete?
+
+=item *
+
+How do I fork a daemon process?
+
+=item *
+
+How do I find out if I'm running interactively or not?
+
+=item *
+
+How do I timeout a slow event?
+
+=item *
+
+How do I set CPU limits?
+
+=item *
+
+How do I avoid zombies on a Unix system?
+
+=item *
+
+How do I use an SQL database?
+
+=item *
+
+How do I make a system() exit on control-C?
+
+=item *
+
+How do I open a file without blocking?
+
+=item *
+
+How do I tell the difference between errors from the shell and perl?
+
+=item *
+
+How do I install a module from CPAN?
+
+=item *
+
+What's the difference between require and use?
+
+=item *
+
+How do I keep my own module/library directory?
+
+=item *
+
+How do I add the directory my program lives in to the module/library search path?
+
+=item *
+
+How do I add a directory to my include path (@INC) at runtime?
+
+=item *
+
+What is socket.ph and where do I get it?
+
+=back
+
+
+=head2 L<perlfaq9>: Web, Email and Networking
+
+This section deals with questions related to running web sites, sending and receiving email as well as general networking.
+
+=over 4
+
+=item *
+
+Should I use a web framework?
+
+=item *
+
+Which web framework should I use?
+
+=item *
+
+What is Plack and PSGI?
+
+=item *
+
+How do I remove HTML from a string?
+
+=item *
+
+How do I extract URLs?
+
+=item *
+
+How do I fetch an HTML file?
+
+=item *
+
+How do I automate an HTML form submission?
+
+=item *
+
+How do I decode or create those %-encodings on the web?
+
+=item *
+
+How do I redirect to another page?
+
+=item *
+
+How do I put a password on my web pages?
+
+=item *
+
+How do I make sure users can't enter values into a form that causes my CGI script to do bad things?
+
+=item *
+
+How do I parse a mail header?
+
+=item *
+
+How do I check a valid mail address?
+
+=item *
+
+How do I decode a MIME/BASE64 string?
+
+=item *
+
+How do I find the user's mail address?
+
+=item *
+
+How do I send email?
+
+=item *
+
+How do I use MIME to make an attachment to a mail message?
+
+=item *
+
+How do I read email?
+
+=item *
+
+How do I find out my hostname, domainname, or IP address?
+
+=item *
+
+How do I fetch/put an (S)FTP file?
+
+=item *
+
+How can I do RPC in Perl?
+
+=back
+
+
+
+=head1 CREDITS
+
+Tom Christiansen wrote the original perlfaq then expanded it with the
+help of Nat Torkington. brian d foy substantialy edited and expanded
+the perlfaq. perlfaq-workers and others have also supplied feedback,
+patches and corrections over the years.
+
+=head1 AUTHOR AND COPYRIGHT
+
+Tom Christiansen wrote the original version of this document.
+brian d foy C<< <bdfoy at cpan.org> >> wrote this version. See the
+individual perlfaq documents for additional copyright information.
+
+This document is available under the same terms as Perl itself. Code
+examples in all the perlfaq documents are in the public domain. Use
+them as you see fit (and at your own risk with no warranty from anyone).
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq1.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq1.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq1.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,332 @@
+=head1 NAME
+
+perlfaq1 - General Questions About Perl
+
+=head1 DESCRIPTION
+
+This section of the FAQ answers very general, high-level questions
+about Perl.
+
+=head2 What is Perl?
+
+Perl is a high-level programming language with an eclectic heritage
+written by Larry Wall and a cast of thousands.
+
+Perl's process, file, and text manipulation facilities make it
+particularly well-suited for tasks involving quick prototyping, system
+utilities, software tools, system management tasks, database access,
+graphical programming, networking, and web programming.
+
+Perl derives from the ubiquitous C programming language and to a
+lesser extent from sed, awk, the Unix shell, and many other tools
+and languages.
+
+These strengths make it especially popular with web developers
+and system administrators. Mathematicians, geneticists, journalists,
+managers and many other people also use Perl.
+
+=head2 Who supports Perl? Who develops it? Why is it free?
+
+The original culture of the pre-populist Internet and the deeply-held
+beliefs of Perl's author, Larry Wall, gave rise to the free and open
+distribution policy of Perl. Perl is supported by its users. The
+core, the standard Perl library, the optional modules, and the
+documentation you're reading now were all written by volunteers.
+
+The core development team (known as the Perl Porters)
+are a group of highly altruistic individuals committed to
+producing better software for free than you could hope to purchase for
+money. You may snoop on pending developments via the
+L<archives|http://www.nntp.perl.org/group/perl.perl5.porters/>
+or read the L<faq|http://dev.perl.org/perl5/docs/p5p-faq.html>,
+or you can subscribe to the mailing list by sending
+perl5-porters-subscribe at perl.org a subscription request
+(an empty message with no subject is fine).
+
+While the GNU project includes Perl in its distributions, there's no
+such thing as "GNU Perl". Perl is not produced nor maintained by the
+Free Software Foundation. Perl's licensing terms are also more open
+than GNU software's tend to be.
+
+You can get commercial support of Perl if you wish, although for most
+users the informal support will more than suffice. See the answer to
+"Where can I buy a commercial version of Perl?" for more information.
+
+=head2 Which version of Perl should I use?
+
+(contributed by brian d foy)
+
+There is often a matter of opinion and taste, and there isn't any one
+answer that fits everyone. In general, you want to use either the current
+stable release, or the stable release immediately prior to that one.
+Currently, those are perl5.14.x and perl5.12.x, respectively.
+
+Beyond that, you have to consider several things and decide which is best
+for you.
+
+=over 4
+
+=item *
+
+If things aren't broken, upgrading perl may break them (or at least issue
+new warnings).
+
+=item *
+
+The latest versions of perl have more bug fixes.
+
+=item *
+
+The Perl community is geared toward supporting the most recent releases,
+so you'll have an easier time finding help for those.
+
+=item *
+
+Versions prior to perl5.004 had serious security problems with buffer
+overflows, and in some cases have CERT advisories (for instance,
+L<http://www.cert.org/advisories/CA-1997-17.html> ).
+
+=item *
+
+The latest versions are probably the least deployed and widely tested, so
+you may want to wait a few months after their release and see what
+problems others have if you are risk averse.
+
+=item *
+
+The immediate, previous releases (i.e. perl5.8.x ) are usually maintained
+for a while, although not at the same level as the current releases.
+
+=item *
+
+No one is actively supporting Perl 4. Ten years ago it was a dead
+camel carcass (according to this document). Now it's barely a skeleton
+as its whitewashed bones have fractured or eroded.
+
+=item *
+
+The current leading implementation of Perl 6, Rakudo, released a "useful,
+usable, 'early adopter'" distribution of Perl 6 (called Rakudo Star) in July of
+2010. Please see L<http://rakudo.org/> for more information.
+
+=item *
+
+There are really two tracks of perl development: a maintenance version
+and an experimental version. The maintenance versions are stable, and
+have an even number as the minor release (i.e. perl5.10.x, where 10 is the
+minor release). The experimental versions may include features that
+don't make it into the stable versions, and have an odd number as the
+minor release (i.e. perl5.9.x, where 9 is the minor release).
+
+=back
+
+=head2 What are Perl 4, Perl 5, or Perl 6?
+
+In short, Perl 4 is the parent to both Perl 5 and Perl 6. Perl 5 is the older
+sibling, and though they are different languages, someone who knows one will
+spot many similarities in the other.
+
+The number after Perl (i.e. the 5 after Perl 5) is the major release
+of the perl interpreter as well as the version of the language. Each
+major version has significant differences that earlier versions cannot
+support.
+
+The current major release of Perl is Perl 5, first released in
+1994. It can run scripts from the previous major release, Perl 4
+(March 1991), but has significant differences.
+
+Perl 6 is a reinvention of Perl, it is a language in the same lineage but
+not compatible. The two are complementary, not mutually exclusive. Perl 6 is
+not meant to replace Perl 5, and vice versa. See L</"What is Perl 6?"> below
+to find out more.
+
+See L<perlhist> for a history of Perl revisions.
+
+=head2 What is Perl 6?
+
+Perl 6 was I<originally> described as the community's rewrite of Perl 5.
+Development started in 2002; syntax and design work continue to this day.
+As the language has evolved, it has become clear that it is a separate
+language, incompatible with Perl 5 but in the same language family.
+
+Contrary to popular belief, Perl 6 and Perl 5 peacefully coexist with one
+another. Perl 6 has proven to be a fascinating source of ideas for those
+using Perl 5 (the L<Moose> object system is a well-known example). There is
+overlap in the communities, and this overlap fosters the tradition of sharing
+and borrowing that have been instrumental to Perl's success. The current
+leading implementation of Perl 6 is Rakudo, and you can learn more about
+it at L<http://rakudo.org>.
+
+If you want to learn more about Perl 6, or have a desire to help in
+the crusade to make Perl a better place then read the Perl 6 developers
+page at L<http://www.perl6.org/> and get involved.
+
+"We're really serious about reinventing everything that needs reinventing."
+--Larry Wall
+
+=head2 How stable is Perl?
+
+Production releases, which incorporate bug fixes and new functionality,
+are widely tested before release. Since the 5.000 release, we have
+averaged about one production release per year.
+
+The Perl development team occasionally make changes to the
+internal core of the language, but all possible efforts are made toward
+backward compatibility.
+
+=head2 Is Perl difficult to learn?
+
+No, Perl is easy to start L<learning|http://learn.perl.org/> --and easy to keep learning. It looks
+like most programming languages you're likely to have experience
+with, so if you've ever written a C program, an awk script, a shell
+script, or even a BASIC program, you're already partway there.
+
+Most tasks only require a small subset of the Perl language. One of
+the guiding mottos for Perl development is "there's more than one way
+to do it" (TMTOWTDI, sometimes pronounced "tim toady"). Perl's
+learning curve is therefore shallow (easy to learn) and long (there's
+a whole lot you can do if you really want).
+
+Finally, because Perl is frequently (but not always, and certainly not by
+definition) an interpreted language, you can write your programs and test
+them without an intermediate compilation step, allowing you to experiment
+and test/debug quickly and easily. This ease of experimentation flattens
+the learning curve even more.
+
+Things that make Perl easier to learn: Unix experience, almost any kind
+of programming experience, an understanding of regular expressions, and
+the ability to understand other people's code. If there's something you
+need to do, then it's probably already been done, and a working example is
+usually available for free. Don't forget Perl modules, either.
+They're discussed in Part 3 of this FAQ, along with L<CPAN|http://www.cpan.org/>, which is
+discussed in Part 2.
+
+=head2 How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl?
+
+Perl can be used for almost any coding problem, even ones which require
+integrating specialist C code for extra speed. As with any tool it can
+be used well or badly. Perl has many strengths, and a few weaknesses,
+precisely which areas are good and bad is often a personal choice.
+
+When choosing a language you should also be influenced by the
+L<resources|http://www.cpan.org/>, L<testing culture|http://www.cpantesters.org/>
+and L<community|http://www.perl.org/community.html> which surrounds it.
+
+For comparisons to a specific language it is often best to create
+a small project in both languages and compare the results, make sure
+to use all the L<resources|http://www.cpan.org/> of each language,
+as a language is far more than just it's syntax.
+
+=head2 Can I do [task] in Perl?
+
+Perl is flexible and extensible enough for you to use on virtually any
+task, from one-line file-processing tasks to large, elaborate systems.
+
+For many people, Perl serves as a great replacement for shell scripting.
+For others, it serves as a convenient, high-level replacement for most of
+what they'd program in low-level languages like C or C++. It's ultimately
+up to you (and possibly your management) which tasks you'll use Perl
+for and which you won't.
+
+If you have a library that provides an API, you can make any component
+of it available as just another Perl function or variable using a Perl
+extension written in C or C++ and dynamically linked into your main
+perl interpreter. You can also go the other direction, and write your
+main program in C or C++, and then link in some Perl code on the fly,
+to create a powerful application. See L<perlembed>.
+
+That said, there will always be small, focused, special-purpose
+languages dedicated to a specific problem domain that are simply more
+convenient for certain kinds of problems. Perl tries to be all things
+to all people, but nothing special to anyone. Examples of specialized
+languages that come to mind include prolog and matlab.
+
+=head2 When shouldn't I program in Perl?
+
+One good reason is when you already have an existing
+application written in another language that's all done (and done
+well), or you have an application language specifically designed for a
+certain task (e.g. prolog, make).
+
+If you find that you need to speed up a specific part of a Perl
+application (not something you often need) you may want to use C,
+but you can access this from your Perl code with L<perlxs>.
+
+=head2 What's the difference between "perl" and "Perl"?
+
+"Perl" is the name of the language. Only the "P" is capitalized.
+The name of the interpreter (the program which runs the Perl script)
+is "perl" with a lowercase "p".
+
+You may or may not choose to follow this usage. But never write "PERL",
+because perl is not an acronym.
+
+=head2 What is a JAPH?
+
+(contributed by brian d foy)
+
+JAPH stands for "Just another Perl hacker,", which Randal Schwartz used
+to sign email and usenet messages starting in the late 1980s. He
+previously used the phrase with many subjects ("Just another x hacker,"),
+so to distinguish his JAPH, he started to write them as Perl programs:
+
+ print "Just another Perl hacker,";
+
+Other people picked up on this and started to write clever or obfuscated
+programs to produce the same output, spinning things quickly out of
+control while still providing hours of amusement for their creators and
+readers.
+
+CPAN has several JAPH programs at L<http://www.cpan.org/misc/japh>.
+
+=head2 How can I convince others to use Perl?
+
+(contributed by brian d foy)
+
+Appeal to their self interest! If Perl is new (and thus scary) to them,
+find something that Perl can do to solve one of their problems. That
+might mean that Perl either saves them something (time, headaches, money)
+or gives them something (flexibility, power, testability).
+
+In general, the benefit of a language is closely related to the skill of
+the people using that language. If you or your team can be faster,
+better, and stronger through Perl, you'll deliver more value. Remember,
+people often respond better to what they get out of it. If you run
+into resistance, figure out what those people get out of the other
+choice and how Perl might satisfy that requirement.
+
+You don't have to worry about finding or paying for Perl; it's freely
+available and several popular operating systems come with Perl. Community
+support in places such as Perlmonks ( L<http://www.perlmonks.com> )
+and the various Perl mailing lists ( L<http://lists.perl.org> ) means that
+you can usually get quick answers to your problems.
+
+Finally, keep in mind that Perl might not be the right tool for every
+job. You're a much better advocate if your claims are reasonable and
+grounded in reality. Dogmatically advocating anything tends to make
+people discount your message. Be honest about possible disadvantages
+to your choice of Perl since any choice has trade-offs.
+
+You might find these links useful:
+
+=over 4
+
+=item * L<http://www.perl.org/about.html>
+
+=item * L<http://perltraining.com.au/whyperl.html>
+
+=back
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples here are in the public
+domain. You are permitted and encouraged to use this code and any
+derivatives thereof in your own programs for fun or for profit as you
+see fit. A simple comment in the code giving credit to the FAQ would
+be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq2.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq2.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq2.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,246 @@
+=head1 NAME
+
+perlfaq2 - Obtaining and Learning about Perl
+
+=head1 DESCRIPTION
+
+This section of the FAQ answers questions about where to find
+source and documentation for Perl, support, and
+related matters.
+
+=head2 What machines support Perl? Where do I get it?
+
+The standard release of Perl (the one maintained by the Perl
+development team) is distributed only in source code form. You
+can find the latest releases at L<http://www.cpan.org/src/>.
+
+Perl builds and runs on a bewildering number of platforms. Virtually
+all known and current Unix derivatives are supported (perl's native
+platform), as are other systems like VMS, DOS, OS/2, Windows,
+QNX, BeOS, OS X, MPE/iX and the Amiga.
+
+Binary distributions for some proprietary platforms can be found
+L<http://www.cpan.org/ports/> directory. Because these are not part of
+the standard distribution, they may and in fact do differ from the
+base perl port in a variety of ways. You'll have to check their
+respective release notes to see just what the differences are. These
+differences can be either positive (e.g. extensions for the features
+of the particular platform that are not supported in the source
+release of perl) or negative (e.g. might be based upon a less current
+source release of perl).
+
+=head2 How can I get a binary version of Perl?
+
+See L<CPAN Ports|http://www.cpan.org/ports/>
+
+=head2 I don't have a C compiler. How can I build my own Perl interpreter?
+
+For Windows, use a binary version of Perl,
+L<Strawberry Perl|http://strawberryperl.com/> and
+L<ActivePerl|http://www.activestate.com/activeperl> come with a
+bundled C compiler.
+
+Otherwise if you really do want to build Perl, you need to get a
+binary version of C<gcc> for your system first. Use a search
+engine to find out how to do this for your operating system.
+
+=head2 I copied the Perl binary from one machine to another, but scripts don't work.
+
+That's probably because you forgot libraries, or library paths differ.
+You really should build the whole distribution on the machine it will
+eventually live on, and then type C<make install>. Most other
+approaches are doomed to failure.
+
+One simple way to check that things are in the right place is to print out
+the hard-coded C<@INC> that perl looks through for libraries:
+
+ % perl -le 'print for @INC'
+
+If this command lists any paths that don't exist on your system, then you
+may need to move the appropriate libraries to these locations, or create
+symbolic links, aliases, or shortcuts appropriately. C<@INC> is also printed as
+part of the output of
+
+ % perl -V
+
+You might also want to check out
+L<perlfaq8/"How do I keep my own module/library directory?">.
+
+=head2 I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make it work?
+
+Read the F<INSTALL> file, which is part of the source distribution.
+It describes in detail how to cope with most idiosyncrasies that the
+C<Configure> script can't work around for any given system or
+architecture.
+
+=head2 What modules and extensions are available for Perl? What is CPAN?
+
+CPAN stands for Comprehensive Perl Archive Network, a multi-gigabyte
+archive replicated on hundreds of machines all over the world. CPAN
+contains tens of thousands of modules and extensions, source code
+and documentation, designed for I<everything> from commercial
+database interfaces to keyboard/screen control and running large web sites.
+
+You can search CPAN on L<http://metacpan.org> or
+L<http://search.cpan.org/>.
+
+The master web site for CPAN is L<http://www.cpan.org/>,
+L<http://www.cpan.org/SITES.html> lists all mirrors.
+
+See the CPAN FAQ at L<http://www.cpan.org/misc/cpan-faq.html> for answers
+to the most frequently asked questions about CPAN.
+
+The L<Task::Kensho> module has a list of recommended modules which
+you should review as a good starting point.
+
+=head2 Where can I get information on Perl?
+
+=over 4
+
+=item * L<http://www.perl.org/>
+
+=item * L<http://perldoc.perl.org/>
+
+=item * L<http://learn.perl.org/>
+
+=back
+
+The complete Perl documentation is available with the Perl distribution.
+If you have Perl installed locally, you probably have the documentation
+installed as well: type C<perldoc perl> in a terminal or
+L<view online|http://perldoc.perl.org/perl.html>.
+
+(Some operating system distributions may ship the documentation in a different
+package; for instance, on Debian, you need to install the C<perl-doc> package.)
+
+Many good books have been written about Perl--see the section later in
+L<perlfaq2> for more details.
+
+=head2 What is perl.com? Perl Mongers? pm.org? perl.org? cpan.org?
+
+L<Perl.com|http://www.perl.com/> used to be part of the O'Reilly
+Network, a subsidiary of O'Reilly Media. Although it retains most of
+the original content from its O'Reilly Network, it is now hosted by
+L<The Perl Foundation|http://www.perlfoundation.org/>.
+
+The Perl Foundation is an advocacy organization for the Perl language
+which maintains the web site L<http://www.perl.org/> as a general
+advocacy site for the Perl language. It uses the domain to provide
+general support services to the Perl community, including the hosting
+of mailing lists, web sites, and other services. There are also many
+other sub-domains for special topics like learning Perl and jobs in Perl,
+such as:
+
+=over 4
+
+=item * L<http://www.perl.org/>
+
+=item * L<http://learn.perl.org/>
+
+=item * L<http://jobs.perl.org/>
+
+=item * L<http://lists.perl.org/>
+
+=back
+
+L<Perl Mongers|http://www.pm.org/> uses the pm.org domain for services
+related to local Perl user groups, including the hosting of mailing lists
+and web sites. See the L<Perl Mongers web site|http://www.pm.org/> for more
+information about joining, starting, or requesting services for a
+Perl user group.
+
+CPAN, or the Comprehensive Perl Archive Network L<http://www.cpan.org/>,
+is a replicated, worldwide repository of Perl software.
+See L<What is CPAN?|/"What modules and extensions are available for Perl? What is CPAN?">.
+
+=head2 Where can I post questions?
+
+There are many Perl L<mailing lists|lists.perl.org> for various
+topics, specifically the L<beginners list|http://lists.perl.org/list/beginners.html>
+may be of use.
+
+Other places to ask questions are on the
+L<PerlMonks site|http://www.perlmonks.org/> or
+L<stackoverflow|http://stackoverflow.com/questions/tagged/perl>.
+
+=head2 Perl Books
+
+There are many good L<books on Perl|http://www.perl.org/books/library.html>.
+
+=head2 Which magazines have Perl content?
+
+There's also I<$foo Magazin>, a German magazine dedicated to Perl, at
+( L<http://www.foo-magazin.de> ). The I<Perl-Zeitung> is another
+German-speaking magazine for Perl beginners (see
+L<http://perl-zeitung.at.tf> ).
+
+Several unix/linux releated magazines frequently includes articles on Perl.
+
+=head2 Which Perl blogs should I read?
+
+L<Perl News|http://perlnews.org/> covers some of the major events in the Perl
+world, L<Perl Weekly|http://perlweekly.com/> is a weekly e-mail
+(and RSS feed) of hand-picked Perl articles.
+
+L<http://blogs.perl.org/> hosts many Perl blogs, there are also
+several blog aggregators: L<Perlsphere|http://perlsphere.net/> and
+L<IronMan|http://ironman.enlightenedperl.org/> are two of them.
+
+=head2 What mailing lists are there for Perl?
+
+A comprehensive list of Perl-related mailing lists can be found at
+L<http://lists.perl.org/>
+
+=head2 Where can I buy a commercial version of Perl?
+
+Perl already I<is> commercial software: it has a license
+that you can grab and carefully read to your manager. It is distributed
+in releases and comes in well-defined packages. There is a very large
+and supportive user community and an extensive literature.
+
+If you still need commercial support
+L<ActiveState|http://www.activestate.com/activeperl> offers
+this.
+
+=head2 Where do I send bug reports?
+
+(contributed by brian d foy)
+
+First, ensure that you've found an actual bug. Second, ensure you've
+found an actual bug.
+
+If you've found a bug with the perl interpreter or one of the modules
+in the standard library (those that come with Perl), you can use the
+L<perlbug> utility that comes with Perl (>= 5.004). It collects
+information about your installation to include with your message, then
+sends the message to the right place.
+
+To determine if a module came with your version of Perl, you can
+install and use the L<Module::CoreList> module. It has the information
+about the modules (with their versions) included with each release
+of Perl.
+
+Every CPAN module has a bug tracker set up in RT, L<http://rt.cpan.org>.
+You can submit bugs to RT either through its web interface or by
+email. To email a bug report, send it to
+bug-E<lt>distribution-nameE<gt>@rt.cpan.org . For example, if you
+wanted to report a bug in L<Business::ISBN>, you could send a message to
+bug-Business-ISBN at rt.cpan.org .
+
+Some modules might have special reporting requirements, such as a
+Github or Google Code tracking system, so you should check the
+module documentation too.
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples here are in the public
+domain. You are permitted and encouraged to use this code and any
+derivatives thereof in your own programs for fun or for profit as you
+see fit. A simple comment in the code giving credit to the FAQ would
+be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq3.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq3.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq3.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1167 @@
+=head1 NAME
+
+perlfaq3 - Programming Tools
+
+=head1 DESCRIPTION
+
+This section of the FAQ answers questions related to programmer tools
+and programming support.
+
+=head2 How do I do (anything)?
+
+Have you looked at CPAN (see L<perlfaq2>)? The chances are that
+someone has already written a module that can solve your problem.
+Have you read the appropriate manpages? Here's a brief index:
+
+=over 4
+
+=item Basics
+
+=over 4
+
+=item L<perldata> - Perl data types
+
+=item L<perlvar> - Perl pre-defined variables
+
+=item L<perlsyn> - Perl syntax
+
+=item L<perlop> - Perl operators and precedence
+
+=item L<perlsub> - Perl subroutines
+
+=back
+
+
+=item Execution
+
+=over 4
+
+=item L<perlrun> - how to execute the Perl interpreter
+
+=item L<perldebug> - Perl debugging
+
+=back
+
+
+=item Functions
+
+=over 4
+
+=item L<perlfunc> - Perl builtin functions
+
+=back
+
+=item Objects
+
+=over 4
+
+=item L<perlref> - Perl references and nested data structures
+
+=item L<perlmod> - Perl modules (packages and symbol tables)
+
+=item L<perlobj> - Perl objects
+
+=item L<perltie> - how to hide an object class in a simple variable
+
+=back
+
+
+=item Data Structures
+
+=over 4
+
+=item L<perlref> - Perl references and nested data structures
+
+=item L<perllol> - Manipulating arrays of arrays in Perl
+
+=item L<perldsc> - Perl Data Structures Cookbook
+
+=back
+
+=item Modules
+
+=over 4
+
+=item L<perlmod> - Perl modules (packages and symbol tables)
+
+=item L<perlmodlib> - constructing new Perl modules and finding existing ones
+
+=back
+
+
+=item Regexes
+
+=over 4
+
+=item L<perlre> - Perl regular expressions
+
+=item L<perlfunc> - Perl builtin functions>
+
+=item L<perlop> - Perl operators and precedence
+
+=item L<perllocale> - Perl locale handling (internationalization and localization)
+
+=back
+
+
+=item Moving to perl5
+
+=over 4
+
+=item L<perltrap> - Perl traps for the unwary
+
+=item L<perl>
+
+=back
+
+
+=item Linking with C
+
+=over 4
+
+=item L<perlxstut> - Tutorial for writing XSUBs
+
+=item L<perlxs> - XS language reference manual
+
+=item L<perlcall> - Perl calling conventions from C
+
+=item L<perlguts> - Introduction to the Perl API
+
+=item L<perlembed> - how to embed perl in your C program
+
+=back
+
+=item Various
+
+L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz>
+(not a man-page but still useful, a collection of various essays on
+Perl techniques)
+
+=back
+
+A crude table of contents for the Perl manpage set is found in L<perltoc>.
+
+=head2 How can I use Perl interactively?
+
+The typical approach uses the Perl debugger, described in the
+L<perldebug(1)> manpage, on an "empty" program, like this:
+
+ perl -de 42
+
+Now just type in any legal Perl code, and it will be immediately
+evaluated. You can also examine the symbol table, get stack
+backtraces, check variable values, set breakpoints, and other
+operations typically found in symbolic debuggers.
+
+You can also use L<Devel::REPL> which is an interactive shell for Perl,
+commonly known as a REPL - Read, Evaluate, Print, Loop. It provides
+various handy features.
+
+=head2 How do I find which modules are installed on my system?
+
+From the command line, you can use the C<cpan> command's C<-l> switch:
+
+ $ cpan -l
+
+You can also use C<cpan>'s C<-a> switch to create an autobundle file
+that C<CPAN.pm> understands and can use to re-install every module:
+
+ $ cpan -a
+
+Inside a Perl program, you can use the L<ExtUtils::Installed> module to
+show all installed distributions, although it can take awhile to do
+its magic. The standard library which comes with Perl just shows up
+as "Perl" (although you can get those with L<Module::CoreList>).
+
+ use ExtUtils::Installed;
+
+ my $inst = ExtUtils::Installed->new();
+ my @modules = $inst->modules();
+
+If you want a list of all of the Perl module filenames, you
+can use L<File::Find::Rule>:
+
+ use File::Find::Rule;
+
+ my @files = File::Find::Rule->
+ extras({follow => 1})->
+ file()->
+ name( '*.pm' )->
+ in( @INC )
+ ;
+
+If you do not have that module, you can do the same thing
+with L<File::Find> which is part of the standard library:
+
+ use File::Find;
+ my @files;
+
+ find(
+ {
+ wanted => sub {
+ push @files, $File::Find::fullname
+ if -f $File::Find::fullname && /\.pm$/
+ },
+ follow => 1,
+ follow_skip => 2,
+ },
+ @INC
+ );
+
+ print join "\n", @files;
+
+If you simply need to check quickly to see if a module is
+available, you can check for its documentation. If you can
+read the documentation the module is most likely installed.
+If you cannot read the documentation, the module might not
+have any (in rare cases):
+
+ $ perldoc Module::Name
+
+You can also try to include the module in a one-liner to see if
+perl finds it:
+
+ $ perl -MModule::Name -e1
+
+(If you don't receive a "Can't locate ... in @INC" error message, then Perl
+found the module name you asked for.)
+
+=head2 How do I debug my Perl programs?
+
+(contributed by brian d foy)
+
+Before you do anything else, you can help yourself by ensuring that
+you let Perl tell you about problem areas in your code. By turning
+on warnings and strictures, you can head off many problems before
+they get too big. You can find out more about these in L<strict>
+and L<warnings>.
+
+ #!/usr/bin/perl
+ use strict;
+ use warnings;
+
+Beyond that, the simplest debugger is the C<print> function. Use it
+to look at values as you run your program:
+
+ print STDERR "The value is [$value]\n";
+
+The L<Data::Dumper> module can pretty-print Perl data structures:
+
+ use Data::Dumper qw( Dumper );
+ print STDERR "The hash is " . Dumper( \%hash ) . "\n";
+
+Perl comes with an interactive debugger, which you can start with the
+C<-d> switch. It's fully explained in L<perldebug>.
+
+If you'd like a graphical user interface and you have L<Tk>, you can use
+C<ptkdb>. It's on CPAN and available for free.
+
+If you need something much more sophisticated and controllable, Leon
+Brocard's L<Devel::ebug> (which you can call with the C<-D> switch as C<-Debug>)
+gives you the programmatic hooks into everything you need to write your
+own (without too much pain and suffering).
+
+You can also use a commercial debugger such as Affrus (Mac OS X), Komodo
+from Activestate (Windows and Mac OS X), or EPIC (most platforms).
+
+=head2 How do I profile my Perl programs?
+
+(contributed by brian d foy, updated Fri Jul 25 12:22:26 PDT 2008)
+
+The C<Devel> namespace has several modules which you can use to
+profile your Perl programs.
+
+The L<Devel::NYTProf> (New York Times Profiler) does both statement
+and subroutine profiling. It's available from CPAN and you also invoke
+it with the C<-d> switch:
+
+ perl -d:NYTProf some_perl.pl
+
+It creates a database of the profile information that you can turn into
+reports. The C<nytprofhtml> command turns the data into an HTML report
+similar to the L<Devel::Cover> report:
+
+ nytprofhtml
+
+You might also be interested in using the L<Benchmark> to
+measure and compare code snippets.
+
+You can read more about profiling in I<Programming Perl>, chapter 20,
+or I<Mastering Perl>, chapter 5.
+
+L<perldebguts> documents creating a custom debugger if you need to
+create a special sort of profiler. brian d foy describes the process
+in I<The Perl Journal>, "Creating a Perl Debugger",
+L<http://www.ddj.com/184404522> , and "Profiling in Perl"
+L<http://www.ddj.com/184404580> .
+
+Perl.com has two interesting articles on profiling: "Profiling Perl",
+by Simon Cozens, L<http://www.perl.com/lpt/a/850> and "Debugging and
+Profiling mod_perl Applications", by Frank Wiles,
+L<http://www.perl.com/pub/a/2006/02/09/debug_mod_perl.html> .
+
+Randal L. Schwartz writes about profiling in "Speeding up Your Perl
+Programs" for I<Unix Review>,
+L<http://www.stonehenge.com/merlyn/UnixReview/col49.html> , and "Profiling
+in Template Toolkit via Overriding" for I<Linux Magazine>,
+L<http://www.stonehenge.com/merlyn/LinuxMag/col75.html> .
+
+=head2 How do I cross-reference my Perl programs?
+
+The L<B::Xref> module can be used to generate cross-reference reports
+for Perl programs.
+
+ perl -MO=Xref[,OPTIONS] scriptname.plx
+
+=head2 Is there a pretty-printer (formatter) for Perl?
+
+L<Perl::Tidy> comes with a perl script L<perltidy> which indents and
+reformats Perl scripts to make them easier to read by trying to follow
+the rules of the L<perlstyle>. If you write Perl, or spend much time reading
+Perl, you will probably find it useful.
+
+Of course, if you simply follow the guidelines in L<perlstyle>,
+you shouldn't need to reformat. The habit of formatting your code
+as you write it will help prevent bugs. Your editor can and should
+help you with this. The perl-mode or newer cperl-mode for emacs
+can provide remarkable amounts of help with most (but not all)
+code, and even less programmable editors can provide significant
+assistance. Tom Christiansen and many other VI users swear by
+the following settings in vi and its clones:
+
+ set ai sw=4
+ map! ^O {^M}^[O^T
+
+Put that in your F<.exrc> file (replacing the caret characters
+with control characters) and away you go. In insert mode, ^T is
+for indenting, ^D is for undenting, and ^O is for blockdenting--as
+it were. A more complete example, with comments, can be found at
+L<http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz>
+
+=head2 Is there an IDE or Windows Perl Editor?
+
+Perl programs are just plain text, so any editor will do.
+
+If you're on Unix, you already have an IDE--Unix itself. The Unix
+philosophy is the philosophy of several small tools that each do one
+thing and do it well. It's like a carpenter's toolbox.
+
+If you want an IDE, check the following (in alphabetical order, not
+order of preference):
+
+=over 4
+
+=item Eclipse
+
+L<http://e-p-i-c.sf.net/>
+
+The Eclipse Perl Integration Project integrates Perl
+editing/debugging with Eclipse.
+
+=item Enginsite
+
+L<http://www.enginsite.com/>
+
+Perl Editor by EngInSite is a complete integrated development
+environment (IDE) for creating, testing, and debugging Perl scripts;
+the tool runs on Windows 9x/NT/2000/XP or later.
+
+=item Kephra
+
+L<http://kephra.sf.net>
+
+GUI Editor written in Perl using wxWidgets and Scintilla with lots of smaller features.
+Aims for an UI based on Perls principles like TIMTWTDI and "easy thinkd should be ..".
+
+=item Komodo
+
+L<http://www.ActiveState.com/Products/Komodo/>
+
+ActiveState's cross-platform (as of October 2004, that's Windows, Linux,
+and Solaris), multi-language IDE has Perl support, including a regular expression
+debugger and remote debugging.
+
+=item Notepad++
+
+L<http://notepad-plus.sourceforge.net/>
+
+=item Open Perl IDE
+
+L<http://open-perl-ide.sourceforge.net/>
+
+Open Perl IDE is an integrated development environment for writing
+and debugging Perl scripts with ActiveState's ActivePerl distribution
+under Windows 95/98/NT/2000.
+
+=item OptiPerl
+
+L<http://www.optiperl.com/>
+
+OptiPerl is a Windows IDE with simulated CGI environment, including
+debugger and syntax-highlighting editor.
+
+=item Padre
+
+L<http://padre.perlide.org/>
+
+Padre is cross-platform IDE for Perl written in Perl using wxWidgets to provide
+a native look and feel. It's open source under the Artistic License. It
+is one of the newer Perl IDEs.
+
+=item PerlBuilder
+
+L<http://www.solutionsoft.com/perl.htm>
+
+PerlBuilder is an integrated development environment for Windows that
+supports Perl development.
+
+=item visiPerl+
+
+L<http://helpconsulting.net/visiperl/index.html>
+
+From Help Consulting, for Windows.
+
+=item Visual Perl
+
+L<http://www.activestate.com/Products/Visual_Perl/>
+
+Visual Perl is a Visual Studio.NET plug-in from ActiveState.
+
+=item Zeus
+
+L<http://www.zeusedit.com/lookmain.html>
+
+Zeus for Windows is another Win32 multi-language editor/IDE
+that comes with support for Perl.
+
+=back
+
+For editors: if you're on Unix you probably have vi or a vi clone
+already, and possibly an emacs too, so you may not need to download
+anything. In any emacs the cperl-mode (M-x cperl-mode) gives you
+perhaps the best available Perl editing mode in any editor.
+
+If you are using Windows, you can use any editor that lets you work
+with plain text, such as NotePad or WordPad. Word processors, such as
+Microsoft Word or WordPerfect, typically do not work since they insert
+all sorts of behind-the-scenes information, although some allow you to
+save files as "Text Only". You can also download text editors designed
+specifically for programming, such as Textpad (
+L<http://www.textpad.com/> ) and UltraEdit ( L<http://www.ultraedit.com/> ),
+among others.
+
+If you are using MacOS, the same concerns apply. MacPerl (for Classic
+environments) comes with a simple editor. Popular external editors are
+BBEdit ( L<http://www.bbedit.com/> ) or Alpha (
+L<http://www.his.com/~jguyer/Alpha/Alpha8.html> ). MacOS X users can use
+Unix editors as well.
+
+=over 4
+
+=item GNU Emacs
+
+L<http://www.gnu.org/software/emacs/windows/ntemacs.html>
+
+=item MicroEMACS
+
+L<http://www.microemacs.de/>
+
+=item XEmacs
+
+L<http://www.xemacs.org/Download/index.html>
+
+=item Jed
+
+L<http://space.mit.edu/~davis/jed/>
+
+=back
+
+or a vi clone such as
+
+=over 4
+
+=item Vim
+
+L<http://www.vim.org/>
+
+=item Vile
+
+L<http://dickey.his.com/vile/vile.html>
+
+=back
+
+The following are Win32 multilanguage editor/IDEs that support Perl:
+
+=over 4
+
+=item Codewright
+
+L<http://www.borland.com/codewright/>
+
+=item MultiEdit
+
+L<http://www.MultiEdit.com/>
+
+=item SlickEdit
+
+L<http://www.slickedit.com/>
+
+=item ConTEXT
+
+L<http://www.contexteditor.org/>
+
+=back
+
+There is also a toyedit Text widget based editor written in Perl
+that is distributed with the Tk module on CPAN. The ptkdb
+( L<http://ptkdb.sourceforge.net/> ) is a Perl/Tk-based debugger that
+acts as a development environment of sorts. Perl Composer
+( L<http://perlcomposer.sourceforge.net/> ) is an IDE for Perl/Tk
+GUI creation.
+
+In addition to an editor/IDE you might be interested in a more
+powerful shell environment for Win32. Your options include
+
+=over 4
+
+=item Bash
+
+from the Cygwin package ( L<http://sources.redhat.com/cygwin/> )
+
+=item Ksh
+
+from the MKS Toolkit ( L<http://www.mkssoftware.com/> ), or the Bourne shell of
+the U/WIN environment ( L<http://www.research.att.com/sw/tools/uwin/> )
+
+=item Tcsh
+
+L<ftp://ftp.astron.com/pub/tcsh/> , see also
+L<http://www.primate.wisc.edu/software/csh-tcsh-book/>
+
+=item Zsh
+
+L<http://www.zsh.org/>
+
+=back
+
+MKS and U/WIN are commercial (U/WIN is free for educational and
+research purposes), Cygwin is covered by the GNU General Public
+License (but that shouldn't matter for Perl use). The Cygwin, MKS,
+and U/WIN all contain (in addition to the shells) a comprehensive set
+of standard Unix toolkit utilities.
+
+If you're transferring text files between Unix and Windows using FTP
+be sure to transfer them in ASCII mode so the ends of lines are
+appropriately converted.
+
+On Mac OS the MacPerl Application comes with a simple 32k text editor
+that behaves like a rudimentary IDE. In contrast to the MacPerl Application
+the MPW Perl tool can make use of the MPW Shell itself as an editor (with
+no 32k limit).
+
+=over 4
+
+=item Affrus
+
+is a full Perl development environment with full debugger support
+( L<http://www.latenightsw.com> ).
+
+=item Alpha
+
+is an editor, written and extensible in Tcl, that nonetheless has
+built-in support for several popular markup and programming languages,
+including Perl and HTML ( L<http://www.his.com/~jguyer/Alpha/Alpha8.html> ).
+
+=item BBEdit and BBEdit Lite
+
+are text editors for Mac OS that have a Perl sensitivity mode
+( L<http://web.barebones.com/> ).
+
+=back
+
+=head2 Where can I get Perl macros for vi?
+
+For a complete version of Tom Christiansen's vi configuration file,
+see L<http://www.cpan.org/authors/Tom_Christiansen/scripts/toms.exrc.gz> ,
+the standard benchmark file for vi emulators. The file runs best with nvi,
+the current version of vi out of Berkeley, which incidentally can be built
+with an embedded Perl interpreter--see L<http://www.cpan.org/src/misc/> .
+
+=head2 Where can I get perl-mode or cperl-mode for emacs?
+X<emacs>
+
+Since Emacs version 19 patchlevel 22 or so, there have been both a
+perl-mode.el and support for the Perl debugger built in. These should
+come with the standard Emacs 19 distribution.
+
+Note that the perl-mode of emacs will have fits with C<"main'foo">
+(single quote), and mess up the indentation and highlighting. You
+are probably using C<"main::foo"> in new Perl code anyway, so this
+shouldn't be an issue.
+
+For CPerlMode, see L<http://www.emacswiki.org/cgi-bin/wiki/CPerlMode>
+
+=head2 How can I use curses with Perl?
+
+The Curses module from CPAN provides a dynamically loadable object
+module interface to a curses library. A small demo can be found at the
+directory L<http://www.cpan.org/authors/Tom_Christiansen/scripts/rep.gz> ;
+this program repeats a command and updates the screen as needed, rendering
+B<rep ps axu> similar to B<top>.
+
+=head2 How can I write a GUI (X, Tk, Gtk, etc.) in Perl?
+X<GUI> X<Tk> X<Wx> X<WxWidgets> X<Gtk> X<Gtk2> X<CamelBones> X<Qt>
+
+(contributed by Ben Morrow)
+
+There are a number of modules which let you write GUIs in Perl. Most
+GUI toolkits have a perl interface: an incomplete list follows.
+
+=over 4
+
+=item Tk
+
+This works under Unix and Windows, and the current version doesn't
+look half as bad under Windows as it used to. Some of the gui elements
+still don't 'feel' quite right, though. The interface is very natural
+and 'perlish', making it easy to use in small scripts that just need a
+simple gui. It hasn't been updated in a while.
+
+=item Wx
+
+This is a Perl binding for the cross-platform wxWidgets toolkit
+( L<http://www.wxwidgets.org> ). It works under Unix, Win32 and Mac OS X,
+using native widgets (Gtk under Unix). The interface follows the C++
+interface closely, but the documentation is a little sparse for someone
+who doesn't know the library, mostly just referring you to the C++
+documentation.
+
+=item Gtk and Gtk2
+
+These are Perl bindings for the Gtk toolkit ( L<http://www.gtk.org> ). The
+interface changed significantly between versions 1 and 2 so they have
+separate Perl modules. It runs under Unix, Win32 and Mac OS X (currently
+it requires an X server on Mac OS, but a 'native' port is underway), and
+the widgets look the same on every platform: i.e., they don't match the
+native widgets. As with Wx, the Perl bindings follow the C API closely,
+and the documentation requires you to read the C documentation to
+understand it.
+
+=item Win32::GUI
+
+This provides access to most of the Win32 GUI widgets from Perl.
+Obviously, it only runs under Win32, and uses native widgets. The Perl
+interface doesn't really follow the C interface: it's been made more
+Perlish, and the documentation is pretty good. More advanced stuff may
+require familiarity with the C Win32 APIs, or reference to MSDN.
+
+=item CamelBones
+
+CamelBones ( L<http://camelbones.sourceforge.net> ) is a Perl interface to
+Mac OS X's Cocoa GUI toolkit, and as such can be used to produce native
+GUIs on Mac OS X. It's not on CPAN, as it requires frameworks that
+CPAN.pm doesn't know how to install, but installation is via the
+standard OSX package installer. The Perl API is, again, very close to
+the ObjC API it's wrapping, and the documentation just tells you how to
+translate from one to the other.
+
+=item Qt
+
+There is a Perl interface to TrollTech's Qt toolkit, but it does not
+appear to be maintained.
+
+=item Athena
+
+Sx is an interface to the Athena widget set which comes with X, but
+again it appears not to be much used nowadays.
+
+=back
+
+=head2 How can I make my Perl program run faster?
+
+The best way to do this is to come up with a better algorithm. This
+can often make a dramatic difference. Jon Bentley's book
+I<Programming Pearls> (that's not a misspelling!) has some good tips
+on optimization, too. Advice on benchmarking boils down to: benchmark
+and profile to make sure you're optimizing the right part, look for
+better algorithms instead of microtuning your code, and when all else
+fails consider just buying faster hardware. You will probably want to
+read the answer to the earlier question "How do I profile my Perl
+programs?" if you haven't done so already.
+
+A different approach is to autoload seldom-used Perl code. See the
+AutoSplit and AutoLoader modules in the standard distribution for
+that. Or you could locate the bottleneck and think about writing just
+that part in C, the way we used to take bottlenecks in C code and
+write them in assembler. Similar to rewriting in C, modules that have
+critical sections can be written in C (for instance, the PDL module
+from CPAN).
+
+If you're currently linking your perl executable to a shared
+I<libc.so>, you can often gain a 10-25% performance benefit by
+rebuilding it to link with a static libc.a instead. This will make a
+bigger perl executable, but your Perl programs (and programmers) may
+thank you for it. See the F<INSTALL> file in the source distribution
+for more information.
+
+The undump program was an ancient attempt to speed up Perl program by
+storing the already-compiled form to disk. This is no longer a viable
+option, as it only worked on a few architectures, and wasn't a good
+solution anyway.
+
+=head2 How can I make my Perl program take less memory?
+
+When it comes to time-space tradeoffs, Perl nearly always prefers to
+throw memory at a problem. Scalars in Perl use more memory than
+strings in C, arrays take more than that, and hashes use even more. While
+there's still a lot to be done, recent releases have been addressing
+these issues. For example, as of 5.004, duplicate hash keys are
+shared amongst all hashes using them, so require no reallocation.
+
+In some cases, using substr() or vec() to simulate arrays can be
+highly beneficial. For example, an array of a thousand booleans will
+take at least 20,000 bytes of space, but it can be turned into one
+125-byte bit vector--a considerable memory savings. The standard
+Tie::SubstrHash module can also help for certain types of data
+structure. If you're working with specialist data structures
+(matrices, for instance) modules that implement these in C may use
+less memory than equivalent Perl modules.
+
+Another thing to try is learning whether your Perl was compiled with
+the system malloc or with Perl's builtin malloc. Whichever one it
+is, try using the other one and see whether this makes a difference.
+Information about malloc is in the F<INSTALL> file in the source
+distribution. You can find out whether you are using perl's malloc by
+typing C<perl -V:usemymalloc>.
+
+Of course, the best way to save memory is to not do anything to waste
+it in the first place. Good programming practices can go a long way
+toward this:
+
+=over 4
+
+=item Don't slurp!
+
+Don't read an entire file into memory if you can process it line
+by line. Or more concretely, use a loop like this:
+
+ #
+ # Good Idea
+ #
+ while (my $line = <$file_handle>) {
+ # ...
+ }
+
+instead of this:
+
+ #
+ # Bad Idea
+ #
+ my @data = <$file_handle>;
+ foreach (@data) {
+ # ...
+ }
+
+When the files you're processing are small, it doesn't much matter which
+way you do it, but it makes a huge difference when they start getting
+larger.
+
+=item Use map and grep selectively
+
+Remember that both map and grep expect a LIST argument, so doing this:
+
+ @wanted = grep {/pattern/} <$file_handle>;
+
+will cause the entire file to be slurped. For large files, it's better
+to loop:
+
+ while (<$file_handle>) {
+ push(@wanted, $_) if /pattern/;
+ }
+
+=item Avoid unnecessary quotes and stringification
+
+Don't quote large strings unless absolutely necessary:
+
+ my $copy = "$large_string";
+
+makes 2 copies of $large_string (one for $copy and another for the
+quotes), whereas
+
+ my $copy = $large_string;
+
+only makes one copy.
+
+Ditto for stringifying large arrays:
+
+ {
+ local $, = "\n";
+ print @big_array;
+ }
+
+is much more memory-efficient than either
+
+ print join "\n", @big_array;
+
+or
+
+ {
+ local $" = "\n";
+ print "@big_array";
+ }
+
+
+=item Pass by reference
+
+Pass arrays and hashes by reference, not by value. For one thing, it's
+the only way to pass multiple lists or hashes (or both) in a single
+call/return. It also avoids creating a copy of all the contents. This
+requires some judgement, however, because any changes will be propagated
+back to the original data. If you really want to mangle (er, modify) a
+copy, you'll have to sacrifice the memory needed to make one.
+
+=item Tie large variables to disk
+
+For "big" data stores (i.e. ones that exceed available memory) consider
+using one of the DB modules to store it on disk instead of in RAM. This
+will incur a penalty in access time, but that's probably better than
+causing your hard disk to thrash due to massive swapping.
+
+=back
+
+=head2 Is it safe to return a reference to local or lexical data?
+
+Yes. Perl's garbage collection system takes care of this so
+everything works out right.
+
+ sub makeone {
+ my @a = ( 1 .. 10 );
+ return \@a;
+ }
+
+ for ( 1 .. 10 ) {
+ push @many, makeone();
+ }
+
+ print $many[4][5], "\n";
+
+ print "@many\n";
+
+=head2 How can I free an array or hash so my program shrinks?
+
+(contributed by Michael Carman)
+
+You usually can't. Memory allocated to lexicals (i.e. my() variables)
+cannot be reclaimed or reused even if they go out of scope. It is
+reserved in case the variables come back into scope. Memory allocated
+to global variables can be reused (within your program) by using
+undef() and/or delete().
+
+On most operating systems, memory allocated to a program can never be
+returned to the system. That's why long-running programs sometimes re-
+exec themselves. Some operating systems (notably, systems that use
+mmap(2) for allocating large chunks of memory) can reclaim memory that
+is no longer used, but on such systems, perl must be configured and
+compiled to use the OS's malloc, not perl's.
+
+In general, memory allocation and de-allocation isn't something you can
+or should be worrying about much in Perl.
+
+See also "How can I make my Perl program take less memory?"
+
+=head2 How can I make my CGI script more efficient?
+
+Beyond the normal measures described to make general Perl programs
+faster or smaller, a CGI program has additional issues. It may be run
+several times per second. Given that each time it runs it will need
+to be re-compiled and will often allocate a megabyte or more of system
+memory, this can be a killer. Compiling into C B<isn't going to help
+you> because the process start-up overhead is where the bottleneck is.
+
+There are three popular ways to avoid this overhead. One solution
+involves running the Apache HTTP server (available from
+L<http://www.apache.org/> ) with either of the mod_perl or mod_fastcgi
+plugin modules.
+
+With mod_perl and the Apache::Registry module (distributed with
+mod_perl), httpd will run with an embedded Perl interpreter which
+pre-compiles your script and then executes it within the same address
+space without forking. The Apache extension also gives Perl access to
+the internal server API, so modules written in Perl can do just about
+anything a module written in C can. For more on mod_perl, see
+L<http://perl.apache.org/>
+
+With the FCGI module (from CPAN) and the mod_fastcgi
+module (available from L<http://www.fastcgi.com/> ) each of your Perl
+programs becomes a permanent CGI daemon process.
+
+Finally, L<Plack> is a Perl module and toolkit that contains PSGI middleware,
+helpers and adapters to web servers, allowing you to easily deploy scripts which
+can continue running, and provides flexibility with regards to which web server
+you use. It can allow existing CGI scripts to enjoy this flexibility and
+performance with minimal changes, or can be used along with modern Perl web
+frameworks to make writing and deploying web services with Perl a breeze.
+
+These solutions can have far-reaching effects on your system and on the way you
+write your CGI programs, so investigate them with care.
+
+See also
+L<http://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/> .
+
+=head2 How can I hide the source for my Perl program?
+
+Delete it. :-) Seriously, there are a number of (mostly
+unsatisfactory) solutions with varying levels of "security".
+
+First of all, however, you I<can't> take away read permission, because
+the source code has to be readable in order to be compiled and
+interpreted. (That doesn't mean that a CGI script's source is
+readable by people on the web, though--only by people with access to
+the filesystem.) So you have to leave the permissions at the socially
+friendly 0755 level.
+
+Some people regard this as a security problem. If your program does
+insecure things and relies on people not knowing how to exploit those
+insecurities, it is not secure. It is often possible for someone to
+determine the insecure things and exploit them without viewing the
+source. Security through obscurity, the name for hiding your bugs
+instead of fixing them, is little security indeed.
+
+You can try using encryption via source filters (Starting from Perl
+5.8 the Filter::Simple and Filter::Util::Call modules are included in
+the standard distribution), but any decent programmer will be able to
+decrypt it. You can try using the byte code compiler and interpreter
+described later in L<perlfaq3>, but the curious might still be able to
+de-compile it. You can try using the native-code compiler described
+later, but crackers might be able to disassemble it. These pose
+varying degrees of difficulty to people wanting to get at your code,
+but none can definitively conceal it (true of every language, not just
+Perl).
+
+It is very easy to recover the source of Perl programs. You simply
+feed the program to the perl interpreter and use the modules in
+the B:: hierarchy. The B::Deparse module should be able to
+defeat most attempts to hide source. Again, this is not
+unique to Perl.
+
+If you're concerned about people profiting from your code, then the
+bottom line is that nothing but a restrictive license will give you
+legal security. License your software and pepper it with threatening
+statements like "This is unpublished proprietary software of XYZ Corp.
+Your access to it does not give you permission to use it blah blah
+blah." We are not lawyers, of course, so you should see a lawyer if
+you want to be sure your license's wording will stand up in court.
+
+=head2 How can I compile my Perl program into byte code or C?
+
+(contributed by brian d foy)
+
+In general, you can't do this. There are some things that may work
+for your situation though. People usually ask this question
+because they want to distribute their works without giving away
+the source code, and most solutions trade disk space for convenience.
+You probably won't see much of a speed increase either, since most
+solutions simply bundle a Perl interpreter in the final product
+(but see L<How can I make my Perl program run faster?>).
+
+The Perl Archive Toolkit ( L<http://par.perl.org/> ) is Perl's
+analog to Java's JAR. It's freely available and on CPAN (
+L<http://search.cpan.org/dist/PAR/> ).
+
+There are also some commercial products that may work for you, although
+you have to buy a license for them.
+
+The Perl Dev Kit ( L<http://www.activestate.com/Products/Perl_Dev_Kit/> )
+from ActiveState can "Turn your Perl programs into ready-to-run
+executables for HP-UX, Linux, Solaris and Windows."
+
+Perl2Exe ( L<http://www.indigostar.com/perl2exe.htm> ) is a command line
+program for converting perl scripts to executable files. It targets both
+Windows and Unix platforms.
+
+=head2 How can I get C<#!perl> to work on [MS-DOS,NT,...]?
+
+For OS/2 just use
+
+ extproc perl -S -your_switches
+
+as the first line in C<*.cmd> file (C<-S> due to a bug in cmd.exe's
+"extproc" handling). For DOS one should first invent a corresponding
+batch file and codify it in C<ALTERNATE_SHEBANG> (see the
+F<dosish.h> file in the source distribution for more information).
+
+The Win95/NT installation, when using the ActiveState port of Perl,
+will modify the Registry to associate the C<.pl> extension with the
+perl interpreter. If you install another port, perhaps even building
+your own Win95/NT Perl from the standard sources by using a Windows port
+of gcc (e.g., with cygwin or mingw32), then you'll have to modify
+the Registry yourself. In addition to associating C<.pl> with the
+interpreter, NT people can use: C<SET PATHEXT=%PATHEXT%;.PL> to let them
+run the program C<install-linux.pl> merely by typing C<install-linux>.
+
+Under "Classic" MacOS, a perl program will have the appropriate Creator and
+Type, so that double-clicking them will invoke the MacPerl application.
+Under Mac OS X, clickable apps can be made from any C<#!> script using Wil
+Sanchez' DropScript utility: L<http://www.wsanchez.net/software/> .
+
+I<IMPORTANT!>: Whatever you do, PLEASE don't get frustrated, and just
+throw the perl interpreter into your cgi-bin directory, in order to
+get your programs working for a web server. This is an EXTREMELY big
+security risk. Take the time to figure out how to do it correctly.
+
+=head2 Can I write useful Perl programs on the command line?
+
+Yes. Read L<perlrun> for more information. Some examples follow.
+(These assume standard Unix shell quoting rules.)
+
+ # sum first and last fields
+ perl -lane 'print $F[0] + $F[-1]' *
+
+ # identify text files
+ perl -le 'for(@ARGV) {print if -f && -T _}' *
+
+ # remove (most) comments from C program
+ perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
+
+ # make file a month younger than today, defeating reaper daemons
+ perl -e '$X=24*60*60; utime(time(),time() + 30 * $X, at ARGV)' *
+
+ # find first unused uid
+ perl -le '$i++ while getpwuid($i); print $i'
+
+ # display reasonable manpath
+ echo $PATH | perl -nl -072 -e '
+ s![^/+]*$!man!&&-d&&!$s{$_}++&&push at m,$_;END{print"@m"}'
+
+OK, the last one was actually an Obfuscated Perl Contest entry. :-)
+
+=head2 Why don't Perl one-liners work on my DOS/Mac/VMS system?
+
+The problem is usually that the command interpreters on those systems
+have rather different ideas about quoting than the Unix shells under
+which the one-liners were created. On some systems, you may have to
+change single-quotes to double ones, which you must I<NOT> do on Unix
+or Plan9 systems. You might also have to change a single % to a %%.
+
+For example:
+
+ # Unix (including Mac OS X)
+ perl -e 'print "Hello world\n"'
+
+ # DOS, etc.
+ perl -e "print \"Hello world\n\""
+
+ # Mac Classic
+ print "Hello world\n"
+ (then Run "Myscript" or Shift-Command-R)
+
+ # MPW
+ perl -e 'print "Hello world\n"'
+
+ # VMS
+ perl -e "print ""Hello world\n"""
+
+The problem is that none of these examples are reliable: they depend on the
+command interpreter. Under Unix, the first two often work. Under DOS,
+it's entirely possible that neither works. If 4DOS was the command shell,
+you'd probably have better luck like this:
+
+ perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
+
+Under the Mac, it depends which environment you are using. The MacPerl
+shell, or MPW, is much like Unix shells in its support for several
+quoting variants, except that it makes free use of the Mac's non-ASCII
+characters as control characters.
+
+Using qq(), q(), and qx(), instead of "double quotes", 'single
+quotes', and `backticks`, may make one-liners easier to write.
+
+There is no general solution to all of this. It is a mess.
+
+[Some of this answer was contributed by Kenneth Albanowski.]
+
+=head2 Where can I learn about CGI or Web programming in Perl?
+
+For modules, get the CGI or LWP modules from CPAN. For textbooks,
+see the two especially dedicated to web stuff in the question on
+books. For problems and questions related to the web, like "Why
+do I get 500 Errors" or "Why doesn't it run from the browser right
+when it runs fine on the command line", see the troubleshooting
+guides and references in L<perlfaq9> or in the CGI MetaFAQ:
+
+ L<http://www.perl.org/CGI_MetaFAQ.html>
+
+Looking in to L<Plack> and modern Perl web frameworks is highly recommended,
+though; web programming in Perl has evolved a long way from the old days of
+simple CGI scripts.
+
+=head2 Where can I learn about object-oriented Perl programming?
+
+A good place to start is L<perltoot>, and you can use L<perlobj>,
+L<perlboot>, L<perltoot>, L<perltooc>, and L<perlbot> for reference.
+
+A good book on OO on Perl is the "Object-Oriented Perl"
+by Damian Conway from Manning Publications, or "Intermediate Perl"
+by Randal Schwartz, brian d foy, and Tom Phoenix from O'Reilly Media.
+
+=head2 Where can I learn about linking C with Perl?
+
+If you want to call C from Perl, start with L<perlxstut>,
+moving on to L<perlxs>, L<xsubpp>, and L<perlguts>. If you want to
+call Perl from C, then read L<perlembed>, L<perlcall>, and
+L<perlguts>. Don't forget that you can learn a lot from looking at
+how the authors of existing extension modules wrote their code and
+solved their problems.
+
+You might not need all the power of XS. The Inline::C module lets
+you put C code directly in your Perl source. It handles all the
+magic to make it work. You still have to learn at least some of
+the perl API but you won't have to deal with the complexity of the
+XS support files.
+
+=head2 I've read perlembed, perlguts, etc., but I can't embed perl in my C program; what am I doing wrong?
+
+Download the ExtUtils::Embed kit from CPAN and run `make test'. If
+the tests pass, read the pods again and again and again. If they
+fail, see L<perlbug> and send a bug report with the output of
+C<make test TEST_VERBOSE=1> along with C<perl -V>.
+
+=head2 When I tried to run my script, I got this message. What does it mean?
+
+A complete list of Perl's error messages and warnings with explanatory
+text can be found in L<perldiag>. You can also use the splain program
+(distributed with Perl) to explain the error messages:
+
+ perl program 2>diag.out
+ splain [-v] [-p] diag.out
+
+or change your program to explain the messages for you:
+
+ use diagnostics;
+
+or
+
+ use diagnostics -verbose;
+
+=head2 What's MakeMaker?
+
+(contributed by brian d foy)
+
+The L<ExtUtils::MakeMaker> module, better known simply as "MakeMaker",
+turns a Perl script, typically called C<Makefile.PL>, into a Makefile.
+The Unix tool C<make> uses this file to manage dependencies and actions
+to process and install a Perl distribution.
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples here are in the public
+domain. You are permitted and encouraged to use this code and any
+derivatives thereof in your own programs for fun or for profit as you
+see fit. A simple comment in the code giving credit to the FAQ would
+be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq4.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq4.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq4.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2679 @@
+=head1 NAME
+
+perlfaq4 - Data Manipulation
+
+=head1 DESCRIPTION
+
+This section of the FAQ answers questions related to manipulating
+numbers, dates, strings, arrays, hashes, and miscellaneous data issues.
+
+=head1 Data: Numbers
+
+=head2 Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
+
+For the long explanation, see David Goldberg's "What Every Computer
+Scientist Should Know About Floating-Point Arithmetic"
+(L<http://web.cse.msu.edu/~cse320/Documents/FloatingPoint.pdf>).
+
+Internally, your computer represents floating-point numbers in binary.
+Digital (as in powers of two) computers cannot store all numbers
+exactly. Some real numbers lose precision in the process. This is a
+problem with how computers store numbers and affects all computer
+languages, not just Perl.
+
+L<perlnumber> shows the gory details of number representations and
+conversions.
+
+To limit the number of decimal places in your numbers, you can use the
+C<printf> or C<sprintf> function. See
+L<perlop/"Floating-point Arithmetic"> for more details.
+
+ printf "%.2f", 10/3;
+
+ my $number = sprintf "%.2f", 10/3;
+
+=head2 Why is int() broken?
+
+Your C<int()> is most probably working just fine. It's the numbers that
+aren't quite what you think.
+
+First, see the answer to "Why am I getting long decimals
+(eg, 19.9499999999999) instead of the numbers I should be getting
+(eg, 19.95)?".
+
+For example, this
+
+ print int(0.6/0.2-2), "\n";
+
+will in most computers print 0, not 1, because even such simple
+numbers as 0.6 and 0.2 cannot be presented exactly by floating-point
+numbers. What you think in the above as 'three' is really more like
+2.9999999999999995559.
+
+=head2 Why isn't my octal data interpreted correctly?
+
+(contributed by brian d foy)
+
+You're probably trying to convert a string to a number, which Perl only
+converts as a decimal number. When Perl converts a string to a number, it
+ignores leading spaces and zeroes, then assumes the rest of the digits
+are in base 10:
+
+ my $string = '0644';
+
+ print $string + 0; # prints 644
+
+ print $string + 44; # prints 688, certainly not octal!
+
+This problem usually involves one of the Perl built-ins that has the
+same name a Unix command that uses octal numbers as arguments on the
+command line. In this example, C<chmod> on the command line knows that
+its first argument is octal because that's what it does:
+
+ %prompt> chmod 644 file
+
+If you want to use the same literal digits (644) in Perl, you have to tell
+Perl to treat them as octal numbers either by prefixing the digits with
+a C<0> or using C<oct>:
+
+ chmod( 0644, $filename ); # right, has leading zero
+ chmod( oct(644), $filename ); # also correct
+
+The problem comes in when you take your numbers from something that Perl
+thinks is a string, such as a command line argument in C<@ARGV>:
+
+ chmod( $ARGV[0], $filename ); # wrong, even if "0644"
+
+ chmod( oct($ARGV[0]), $filename ); # correct, treat string as octal
+
+You can always check the value you're using by printing it in octal
+notation to ensure it matches what you think it should be. Print it
+in octal and decimal format:
+
+ printf "0%o %d", $number, $number;
+
+=head2 Does Perl have a round() function? What about ceil() and floor()? Trig functions?
+
+Remember that C<int()> merely truncates toward 0. For rounding to a
+certain number of digits, C<sprintf()> or C<printf()> is usually the
+easiest route.
+
+ printf("%.3f", 3.1415926535); # prints 3.142
+
+The L<POSIX> module (part of the standard Perl distribution)
+implements C<ceil()>, C<floor()>, and a number of other mathematical
+and trigonometric functions.
+
+ use POSIX;
+ my $ceil = ceil(3.5); # 4
+ my $floor = floor(3.5); # 3
+
+In 5.000 to 5.003 perls, trigonometry was done in the L<Math::Complex>
+module. With 5.004, the L<Math::Trig> module (part of the standard Perl
+distribution) implements the trigonometric functions. Internally it
+uses the L<Math::Complex> module and some functions can break out from
+the real axis into the complex plane, for example the inverse sine of
+2.
+
+Rounding in financial applications can have serious implications, and
+the rounding method used should be specified precisely. In these
+cases, it probably pays not to trust whichever system of rounding is
+being used by Perl, but instead to implement the rounding function you
+need yourself.
+
+To see why, notice how you'll still have an issue on half-way-point
+alternation:
+
+ for (my $i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
+
+ 0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
+ 0.8 0.8 0.9 0.9 1.0 1.0
+
+Don't blame Perl. It's the same as in C. IEEE says we have to do
+this. Perl numbers whose absolute values are integers under 2**31 (on
+32-bit machines) will work pretty much like mathematical integers.
+Other numbers are not guaranteed.
+
+=head2 How do I convert between numeric representations/bases/radixes?
+
+As always with Perl there is more than one way to do it. Below are a
+few examples of approaches to making common conversions between number
+representations. This is intended to be representational rather than
+exhaustive.
+
+Some of the examples later in L<perlfaq4> use the L<Bit::Vector>
+module from CPAN. The reason you might choose L<Bit::Vector> over the
+perl built-in functions is that it works with numbers of ANY size,
+that it is optimized for speed on some operations, and for at least
+some programmers the notation might be familiar.
+
+=over 4
+
+=item How do I convert hexadecimal into decimal
+
+Using perl's built in conversion of C<0x> notation:
+
+ my $dec = 0xDEADBEEF;
+
+Using the C<hex> function:
+
+ my $dec = hex("DEADBEEF");
+
+Using C<pack>:
+
+ my $dec = unpack("N", pack("H8", substr("0" x 8 . "DEADBEEF", -8)));
+
+Using the CPAN module C<Bit::Vector>:
+
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Hex(32, "DEADBEEF");
+ my $dec = $vec->to_Dec();
+
+=item How do I convert from decimal to hexadecimal
+
+Using C<sprintf>:
+
+ my $hex = sprintf("%X", 3735928559); # upper case A-F
+ my $hex = sprintf("%x", 3735928559); # lower case a-f
+
+Using C<unpack>:
+
+ my $hex = unpack("H*", pack("N", 3735928559));
+
+Using L<Bit::Vector>:
+
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Dec(32, -559038737);
+ my $hex = $vec->to_Hex();
+
+And L<Bit::Vector> supports odd bit counts:
+
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Dec(33, 3735928559);
+ $vec->Resize(32); # suppress leading 0 if unwanted
+ my $hex = $vec->to_Hex();
+
+=item How do I convert from octal to decimal
+
+Using Perl's built in conversion of numbers with leading zeros:
+
+ my $dec = 033653337357; # note the leading 0!
+
+Using the C<oct> function:
+
+ my $dec = oct("33653337357");
+
+Using L<Bit::Vector>:
+
+ use Bit::Vector;
+ my $vec = Bit::Vector->new(32);
+ $vec->Chunk_List_Store(3, split(//, reverse "33653337357"));
+ my $dec = $vec->to_Dec();
+
+=item How do I convert from decimal to octal
+
+Using C<sprintf>:
+
+ my $oct = sprintf("%o", 3735928559);
+
+Using L<Bit::Vector>:
+
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Dec(32, -559038737);
+ my $oct = reverse join('', $vec->Chunk_List_Read(3));
+
+=item How do I convert from binary to decimal
+
+Perl 5.6 lets you write binary numbers directly with
+the C<0b> notation:
+
+ my $number = 0b10110110;
+
+Using C<oct>:
+
+ my $input = "10110110";
+ my $decimal = oct( "0b$input" );
+
+Using C<pack> and C<ord>:
+
+ my $decimal = ord(pack('B8', '10110110'));
+
+Using C<pack> and C<unpack> for larger strings:
+
+ my $int = unpack("N", pack("B32",
+ substr("0" x 32 . "11110101011011011111011101111", -32)));
+ my $dec = sprintf("%d", $int);
+
+ # substr() is used to left-pad a 32-character string with zeros.
+
+Using L<Bit::Vector>:
+
+ my $vec = Bit::Vector->new_Bin(32, "11011110101011011011111011101111");
+ my $dec = $vec->to_Dec();
+
+=item How do I convert from decimal to binary
+
+Using C<sprintf> (perl 5.6+):
+
+ my $bin = sprintf("%b", 3735928559);
+
+Using C<unpack>:
+
+ my $bin = unpack("B*", pack("N", 3735928559));
+
+Using L<Bit::Vector>:
+
+ use Bit::Vector;
+ my $vec = Bit::Vector->new_Dec(32, -559038737);
+ my $bin = $vec->to_Bin();
+
+The remaining transformations (e.g. hex -> oct, bin -> hex, etc.)
+are left as an exercise to the inclined reader.
+
+=back
+
+=head2 Why doesn't & work the way I want it to?
+
+The behavior of binary arithmetic operators depends on whether they're
+used on numbers or strings. The operators treat a string as a series
+of bits and work with that (the string C<"3"> is the bit pattern
+C<00110011>). The operators work with the binary form of a number
+(the number C<3> is treated as the bit pattern C<00000011>).
+
+So, saying C<11 & 3> performs the "and" operation on numbers (yielding
+C<3>). Saying C<"11" & "3"> performs the "and" operation on strings
+(yielding C<"1">).
+
+Most problems with C<&> and C<|> arise because the programmer thinks
+they have a number but really it's a string or vice versa. To avoid this,
+stringify the arguments explicitly (using C<""> or C<qq()>) or convert them
+to numbers explicitly (using C<0+$arg>). The rest arise because
+the programmer says:
+
+ if ("\020\020" & "\101\101") {
+ # ...
+ }
+
+but a string consisting of two null bytes (the result of C<"\020\020"
+& "\101\101">) is not a false value in Perl. You need:
+
+ if ( ("\020\020" & "\101\101") !~ /[^\000]/) {
+ # ...
+ }
+
+=head2 How do I multiply matrices?
+
+Use the L<Math::Matrix> or L<Math::MatrixReal> modules (available from CPAN)
+or the L<PDL> extension (also available from CPAN).
+
+=head2 How do I perform an operation on a series of integers?
+
+To call a function on each element in an array, and collect the
+results, use:
+
+ my @results = map { my_func($_) } @array;
+
+For example:
+
+ my @triple = map { 3 * $_ } @single;
+
+To call a function on each element of an array, but ignore the
+results:
+
+ foreach my $iterator (@array) {
+ some_func($iterator);
+ }
+
+To call a function on each integer in a (small) range, you B<can> use:
+
+ my @results = map { some_func($_) } (5 .. 25);
+
+but you should be aware that in this form, the C<..> operator
+creates a list of all integers in the range, which can take a lot of
+memory for large ranges. However, the problem does not occur when
+using C<..> within a C<for> loop, because in that case the range
+operator is optimized to I<iterate> over the range, without creating
+the entire list. So
+
+ my @results = ();
+ for my $i (5 .. 500_005) {
+ push(@results, some_func($i));
+ }
+
+or even
+
+ push(@results, some_func($_)) for 5 .. 500_005;
+
+will not create an intermediate list of 500,000 integers.
+
+=head2 How can I output Roman numerals?
+
+Get the L<http://www.cpan.org/modules/by-module/Roman> module.
+
+=head2 Why aren't my random numbers random?
+
+If you're using a version of Perl before 5.004, you must call C<srand>
+once at the start of your program to seed the random number generator.
+
+ BEGIN { srand() if $] < 5.004 }
+
+5.004 and later automatically call C<srand> at the beginning. Don't
+call C<srand> more than once--you make your numbers less random,
+rather than more.
+
+Computers are good at being predictable and bad at being random
+(despite appearances caused by bugs in your programs :-). The
+F<random> article in the "Far More Than You Ever Wanted To Know"
+collection in L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz>, courtesy
+of Tom Phoenix, talks more about this. John von Neumann said, "Anyone
+who attempts to generate random numbers by deterministic means is, of
+course, living in a state of sin."
+
+Perl relies on the underlying system for the implementation of
+C<rand> and C<srand>; on some systems, the generated numbers are
+not random enough (especially on Windows : see
+L<http://www.perlmonks.org/?node_id=803632>).
+Several CPAN modules in the C<Math> namespace implement better
+pseudorandom generators; see for example
+L<Math::Random::MT> ("Mersenne Twister", fast), or
+L<Math::TrulyRandom> (uses the imperfections in the system's
+timer to generate random numbers, which is rather slow).
+More algorithms for random numbers are described in
+"Numerical Recipes in C" at L<http://www.nr.com/>
+
+=head2 How do I get a random number between X and Y?
+
+To get a random number between two values, you can use the C<rand()>
+built-in to get a random number between 0 and 1. From there, you shift
+that into the range that you want.
+
+C<rand($x)> returns a number such that C<< 0 <= rand($x) < $x >>. Thus
+what you want to have perl figure out is a random number in the range
+from 0 to the difference between your I<X> and I<Y>.
+
+That is, to get a number between 10 and 15, inclusive, you want a
+random number between 0 and 5 that you can then add to 10.
+
+ my $number = 10 + int rand( 15-10+1 ); # ( 10,11,12,13,14, or 15 )
+
+Hence you derive the following simple function to abstract
+that. It selects a random integer between the two given
+integers (inclusive), For example: C<random_int_between(50,120)>.
+
+ sub random_int_between {
+ my($min, $max) = @_;
+ # Assumes that the two arguments are integers themselves!
+ return $min if $min == $max;
+ ($min, $max) = ($max, $min) if $min > $max;
+ return $min + int rand(1 + $max - $min);
+ }
+
+=head1 Data: Dates
+
+=head2 How do I find the day or week of the year?
+
+The day of the year is in the list returned
+by the C<localtime> function. Without an
+argument C<localtime> uses the current time.
+
+ my $day_of_year = (localtime)[7];
+
+The L<POSIX> module can also format a date as the day of the year or
+week of the year.
+
+ use POSIX qw/strftime/;
+ my $day_of_year = strftime "%j", localtime;
+ my $week_of_year = strftime "%W", localtime;
+
+To get the day of year for any date, use L<POSIX>'s C<mktime> to get
+a time in epoch seconds for the argument to C<localtime>.
+
+ use POSIX qw/mktime strftime/;
+ my $week_of_year = strftime "%W",
+ localtime( mktime( 0, 0, 0, 18, 11, 87 ) );
+
+You can also use L<Time::Piece>, which comes with Perl and provides a
+C<localtime> that returns an object:
+
+ use Time::Piece;
+ my $day_of_year = localtime->yday;
+ my $week_of_year = localtime->week;
+
+The L<Date::Calc> module provides two functions to calculate these, too:
+
+ use Date::Calc;
+ my $day_of_year = Day_of_Year( 1987, 12, 18 );
+ my $week_of_year = Week_of_Year( 1987, 12, 18 );
+
+=head2 How do I find the current century or millennium?
+
+Use the following simple functions:
+
+ sub get_century {
+ return int((((localtime(shift || time))[5] + 1999))/100);
+ }
+
+ sub get_millennium {
+ return 1+int((((localtime(shift || time))[5] + 1899))/1000);
+ }
+
+On some systems, the L<POSIX> module's C<strftime()> function has been
+extended in a non-standard way to use a C<%C> format, which they
+sometimes claim is the "century". It isn't, because on most such
+systems, this is only the first two digits of the four-digit year, and
+thus cannot be used to determine reliably the current century or
+millennium.
+
+=head2 How can I compare two dates and find the difference?
+
+(contributed by brian d foy)
+
+You could just store all your dates as a number and then subtract.
+Life isn't always that simple though.
+
+The L<Time::Piece> module, which comes with Perl, replaces L<localtime>
+with a version that returns an object. It also overloads the comparison
+operators so you can compare them directly:
+
+ use Time::Piece;
+ my $date1 = localtime( $some_time );
+ my $date2 = localtime( $some_other_time );
+
+ if( $date1 < $date2 ) {
+ print "The date was in the past\n";
+ }
+
+You can also get differences with a subtraction, which returns a
+L<Time::Seconds> object:
+
+ my $diff = $date1 - $date2;
+ print "The difference is ", $date_diff->days, " days\n";
+
+If you want to work with formatted dates, the L<Date::Manip>,
+L<Date::Calc>, or L<DateTime> modules can help you.
+
+=head2 How can I take a string and turn it into epoch seconds?
+
+If it's a regular enough string that it always has the same format,
+you can split it up and pass the parts to C<timelocal> in the standard
+L<Time::Local> module. Otherwise, you should look into the L<Date::Calc>,
+L<Date::Parse>, and L<Date::Manip> modules from CPAN.
+
+=head2 How can I find the Julian Day?
+
+(contributed by brian d foy and Dave Cross)
+
+You can use the L<Time::Piece> module, part of the Standard Library,
+which can convert a date/time to a Julian Day:
+
+ $ perl -MTime::Piece -le 'print localtime->julian_day'
+ 2455607.7959375
+
+Or the modified Julian Day:
+
+ $ perl -MTime::Piece -le 'print localtime->mjd'
+ 55607.2961226851
+
+Or even the day of the year (which is what some people think of as a
+Julian day):
+
+ $ perl -MTime::Piece -le 'print localtime->yday'
+ 45
+
+You can also do the same things with the L<DateTime> module:
+
+ $ perl -MDateTime -le'print DateTime->today->jd'
+ 2453401.5
+ $ perl -MDateTime -le'print DateTime->today->mjd'
+ 53401
+ $ perl -MDateTime -le'print DateTime->today->doy'
+ 31
+
+You can use the L<Time::JulianDay> module available on CPAN. Ensure
+that you really want to find a Julian day, though, as many people have
+different ideas about Julian days (see L<http://www.hermetic.ch/cal_stud/jdn.htm>
+for instance):
+
+ $ perl -MTime::JulianDay -le 'print local_julian_day( time )'
+ 55608
+
+=head2 How do I find yesterday's date?
+X<date> X<yesterday> X<DateTime> X<Date::Calc> X<Time::Local>
+X<daylight saving time> X<day> X<Today_and_Now> X<localtime>
+X<timelocal>
+
+(contributed by brian d foy)
+
+To do it correctly, you can use one of the C<Date> modules since they
+work with calendars instead of times. The L<DateTime> module makes it
+simple, and give you the same time of day, only the day before,
+despite daylight saving time changes:
+
+ use DateTime;
+
+ my $yesterday = DateTime->now->subtract( days => 1 );
+
+ print "Yesterday was $yesterday\n";
+
+You can also use the L<Date::Calc> module using its C<Today_and_Now>
+function.
+
+ use Date::Calc qw( Today_and_Now Add_Delta_DHMS );
+
+ my @date_time = Add_Delta_DHMS( Today_and_Now(), -1, 0, 0, 0 );
+
+ print "@date_time\n";
+
+Most people try to use the time rather than the calendar to figure out
+dates, but that assumes that days are twenty-four hours each. For
+most people, there are two days a year when they aren't: the switch to
+and from summer time throws this off. For example, the rest of the
+suggestions will be wrong sometimes:
+
+Starting with Perl 5.10, L<Time::Piece> and L<Time::Seconds> are part
+of the standard distribution, so you might think that you could do
+something like this:
+
+ use Time::Piece;
+ use Time::Seconds;
+
+ my $yesterday = localtime() - ONE_DAY; # WRONG
+ print "Yesterday was $yesterday\n";
+
+The L<Time::Piece> module exports a new C<localtime> that returns an
+object, and L<Time::Seconds> exports the C<ONE_DAY> constant that is a
+set number of seconds. This means that it always gives the time 24
+hours ago, which is not always yesterday. This can cause problems
+around the end of daylight saving time when there's one day that is 25
+hours long.
+
+You have the same problem with L<Time::Local>, which will give the wrong
+answer for those same special cases:
+
+ # contributed by Gunnar Hjalmarsson
+ use Time::Local;
+ my $today = timelocal 0, 0, 12, ( localtime )[3..5];
+ my ($d, $m, $y) = ( localtime $today-86400 )[3..5]; # WRONG
+ printf "Yesterday: %d-%02d-%02d\n", $y+1900, $m+1, $d;
+
+=head2 Does Perl have a Year 2000 or 2038 problem? Is Perl Y2K compliant?
+
+(contributed by brian d foy)
+
+Perl itself never had a Y2K problem, although that never stopped people
+from creating Y2K problems on their own. See the documentation for
+C<localtime> for its proper use.
+
+Starting with Perl 5.12, C<localtime> and C<gmtime> can handle dates past
+03:14:08 January 19, 2038, when a 32-bit based time would overflow. You
+still might get a warning on a 32-bit C<perl>:
+
+ % perl5.12 -E 'say scalar localtime( 0x9FFF_FFFFFFFF )'
+ Integer overflow in hexadecimal number at -e line 1.
+ Wed Nov 1 19:42:39 5576711
+
+On a 64-bit C<perl>, you can get even larger dates for those really long
+running projects:
+
+ % perl5.12 -E 'say scalar gmtime( 0x9FFF_FFFFFFFF )'
+ Thu Nov 2 00:42:39 5576711
+
+You're still out of luck if you need to keep track of decaying protons
+though.
+
+=head1 Data: Strings
+
+=head2 How do I validate input?
+
+(contributed by brian d foy)
+
+There are many ways to ensure that values are what you expect or
+want to accept. Besides the specific examples that we cover in the
+perlfaq, you can also look at the modules with "Assert" and "Validate"
+in their names, along with other modules such as L<Regexp::Common>.
+
+Some modules have validation for particular types of input, such
+as L<Business::ISBN>, L<Business::CreditCard>, L<Email::Valid>,
+and L<Data::Validate::IP>.
+
+=head2 How do I unescape a string?
+
+It depends just what you mean by "escape". URL escapes are dealt
+with in L<perlfaq9>. Shell escapes with the backslash (C<\>)
+character are removed with
+
+ s/\\(.)/$1/g;
+
+This won't expand C<"\n"> or C<"\t"> or any other special escapes.
+
+=head2 How do I remove consecutive pairs of characters?
+
+(contributed by brian d foy)
+
+You can use the substitution operator to find pairs of characters (or
+runs of characters) and replace them with a single instance. In this
+substitution, we find a character in C<(.)>. The memory parentheses
+store the matched character in the back-reference C<\g1> and we use
+that to require that the same thing immediately follow it. We replace
+that part of the string with the character in C<$1>.
+
+ s/(.)\g1/$1/g;
+
+We can also use the transliteration operator, C<tr///>. In this
+example, the search list side of our C<tr///> contains nothing, but
+the C<c> option complements that so it contains everything. The
+replacement list also contains nothing, so the transliteration is
+almost a no-op since it won't do any replacements (or more exactly,
+replace the character with itself). However, the C<s> option squashes
+duplicated and consecutive characters in the string so a character
+does not show up next to itself
+
+ my $str = 'Haarlem'; # in the Netherlands
+ $str =~ tr///cs; # Now Harlem, like in New York
+
+=head2 How do I expand function calls in a string?
+
+(contributed by brian d foy)
+
+This is documented in L<perlref>, and although it's not the easiest
+thing to read, it does work. In each of these examples, we call the
+function inside the braces used to dereference a reference. If we
+have more than one return value, we can construct and dereference an
+anonymous array. In this case, we call the function in list context.
+
+ print "The time values are @{ [localtime] }.\n";
+
+If we want to call the function in scalar context, we have to do a bit
+more work. We can really have any code we like inside the braces, so
+we simply have to end with the scalar reference, although how you do
+that is up to you, and you can use code inside the braces. Note that
+the use of parens creates a list context, so we need C<scalar> to
+force the scalar context on the function:
+
+ print "The time is ${\(scalar localtime)}.\n"
+
+ print "The time is ${ my $x = localtime; \$x }.\n";
+
+If your function already returns a reference, you don't need to create
+the reference yourself.
+
+ sub timestamp { my $t = localtime; \$t }
+
+ print "The time is ${ timestamp() }.\n";
+
+The C<Interpolation> module can also do a lot of magic for you. You can
+specify a variable name, in this case C<E>, to set up a tied hash that
+does the interpolation for you. It has several other methods to do this
+as well.
+
+ use Interpolation E => 'eval';
+ print "The time values are $E{localtime()}.\n";
+
+In most cases, it is probably easier to simply use string concatenation,
+which also forces scalar context.
+
+ print "The time is " . localtime() . ".\n";
+
+=head2 How do I find matching/nesting anything?
+
+To find something between two single
+characters, a pattern like C</x([^x]*)x/> will get the intervening
+bits in $1. For multiple ones, then something more like
+C</alpha(.*?)omega/> would be needed. For nested patterns
+and/or balanced expressions, see the so-called
+L<< (?PARNO)|perlre/C<(?PARNO)> C<(?-PARNO)> C<(?+PARNO)> C<(?R)> C<(?0)> >>
+construct (available since perl 5.10).
+The CPAN module L<Regexp::Common> can help to build such
+regular expressions (see in particular
+L<Regexp::Common::balanced> and L<Regexp::Common::delimited>).
+
+More complex cases will require to write a parser, probably
+using a parsing module from CPAN, like
+L<Regexp::Grammars>, L<Parse::RecDescent>, L<Parse::Yapp>,
+L<Text::Balanced>, or L<Marpa::XS>.
+
+=head2 How do I reverse a string?
+
+Use C<reverse()> in scalar context, as documented in
+L<perlfunc/reverse>.
+
+ my $reversed = reverse $string;
+
+=head2 How do I expand tabs in a string?
+
+You can do it yourself:
+
+ 1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e;
+
+Or you can just use the L<Text::Tabs> module (part of the standard Perl
+distribution).
+
+ use Text::Tabs;
+ my @expanded_lines = expand(@lines_with_tabs);
+
+=head2 How do I reformat a paragraph?
+
+Use L<Text::Wrap> (part of the standard Perl distribution):
+
+ use Text::Wrap;
+ print wrap("\t", ' ', @paragraphs);
+
+The paragraphs you give to L<Text::Wrap> should not contain embedded
+newlines. L<Text::Wrap> doesn't justify the lines (flush-right).
+
+Or use the CPAN module L<Text::Autoformat>. Formatting files can be
+easily done by making a shell alias, like so:
+
+ alias fmt="perl -i -MText::Autoformat -n0777 \
+ -e 'print autoformat $_, {all=>1}' $*"
+
+See the documentation for L<Text::Autoformat> to appreciate its many
+capabilities.
+
+=head2 How can I access or change N characters of a string?
+
+You can access the first characters of a string with substr().
+To get the first character, for example, start at position 0
+and grab the string of length 1.
+
+
+ my $string = "Just another Perl Hacker";
+ my $first_char = substr( $string, 0, 1 ); # 'J'
+
+To change part of a string, you can use the optional fourth
+argument which is the replacement string.
+
+ substr( $string, 13, 4, "Perl 5.8.0" );
+
+You can also use substr() as an lvalue.
+
+ substr( $string, 13, 4 ) = "Perl 5.8.0";
+
+=head2 How do I change the Nth occurrence of something?
+
+You have to keep track of N yourself. For example, let's say you want
+to change the fifth occurrence of C<"whoever"> or C<"whomever"> into
+C<"whosoever"> or C<"whomsoever">, case insensitively. These
+all assume that $_ contains the string to be altered.
+
+ $count = 0;
+ s{((whom?)ever)}{
+ ++$count == 5 # is it the 5th?
+ ? "${2}soever" # yes, swap
+ : $1 # renege and leave it there
+ }ige;
+
+In the more general case, you can use the C</g> modifier in a C<while>
+loop, keeping count of matches.
+
+ $WANT = 3;
+ $count = 0;
+ $_ = "One fish two fish red fish blue fish";
+ while (/(\w+)\s+fish\b/gi) {
+ if (++$count == $WANT) {
+ print "The third fish is a $1 one.\n";
+ }
+ }
+
+That prints out: C<"The third fish is a red one."> You can also use a
+repetition count and repeated pattern like this:
+
+ /(?:\w+\s+fish\s+){2}(\w+)\s+fish/i;
+
+=head2 How can I count the number of occurrences of a substring within a string?
+
+There are a number of ways, with varying efficiency. If you want a
+count of a certain single character (X) within a string, you can use the
+C<tr///> function like so:
+
+ my $string = "ThisXlineXhasXsomeXx'sXinXit";
+ my $count = ($string =~ tr/X//);
+ print "There are $count X characters in the string";
+
+This is fine if you are just looking for a single character. However,
+if you are trying to count multiple character substrings within a
+larger string, C<tr///> won't work. What you can do is wrap a while()
+loop around a global pattern match. For example, let's count negative
+integers:
+
+ my $string = "-9 55 48 -2 23 -76 4 14 -44";
+ my $count = 0;
+ while ($string =~ /-\d+/g) { $count++ }
+ print "There are $count negative numbers in the string";
+
+Another version uses a global match in list context, then assigns the
+result to a scalar, producing a count of the number of matches.
+
+ my $count = () = $string =~ /-\d+/g;
+
+=head2 How do I capitalize all the words on one line?
+X<Text::Autoformat> X<capitalize> X<case, title> X<case, sentence>
+
+(contributed by brian d foy)
+
+Damian Conway's L<Text::Autoformat> handles all of the thinking
+for you.
+
+ use Text::Autoformat;
+ my $x = "Dr. Strangelove or: How I Learned to Stop ".
+ "Worrying and Love the Bomb";
+
+ print $x, "\n";
+ for my $style (qw( sentence title highlight )) {
+ print autoformat($x, { case => $style }), "\n";
+ }
+
+How do you want to capitalize those words?
+
+ FRED AND BARNEY'S LODGE # all uppercase
+ Fred And Barney's Lodge # title case
+ Fred and Barney's Lodge # highlight case
+
+It's not as easy a problem as it looks. How many words do you think
+are in there? Wait for it... wait for it.... If you answered 5
+you're right. Perl words are groups of C<\w+>, but that's not what
+you want to capitalize. How is Perl supposed to know not to capitalize
+that C<s> after the apostrophe? You could try a regular expression:
+
+ $string =~ s/ (
+ (^\w) #at the beginning of the line
+ | # or
+ (\s\w) #preceded by whitespace
+ )
+ /\U$1/xg;
+
+ $string =~ s/([\w']+)/\u\L$1/g;
+
+Now, what if you don't want to capitalize that "and"? Just use
+L<Text::Autoformat> and get on with the next problem. :)
+
+=head2 How can I split a [character]-delimited string except when inside [character]?
+
+Several modules can handle this sort of parsing--L<Text::Balanced>,
+L<Text::CSV>, L<Text::CSV_XS>, and L<Text::ParseWords>, among others.
+
+Take the example case of trying to split a string that is
+comma-separated into its different fields. You can't use C<split(/,/)>
+because you shouldn't split if the comma is inside quotes. For
+example, take a data line like this:
+
+ SAR001,"","Cimetrix, Inc","Bob Smith","CAM",N,8,1,0,7,"Error, Core Dumped"
+
+Due to the restriction of the quotes, this is a fairly complex
+problem. Thankfully, we have Jeffrey Friedl, author of
+I<Mastering Regular Expressions>, to handle these for us. He
+suggests (assuming your string is contained in C<$text>):
+
+ my @new = ();
+ push(@new, $+) while $text =~ m{
+ "([^\"\\]*(?:\\.[^\"\\]*)*)",? # groups the phrase inside the quotes
+ | ([^,]+),?
+ | ,
+ }gx;
+ push(@new, undef) if substr($text,-1,1) eq ',';
+
+If you want to represent quotation marks inside a
+quotation-mark-delimited field, escape them with backslashes (eg,
+C<"like \"this\"">.
+
+Alternatively, the L<Text::ParseWords> module (part of the standard
+Perl distribution) lets you say:
+
+ use Text::ParseWords;
+ @new = quotewords(",", 0, $text);
+
+For parsing or generating CSV, though, using L<Text::CSV> rather than
+implementing it yourself is highly recommended; you'll save yourself odd bugs
+popping up later by just using code which has already been tried and tested in
+production for years.
+
+=head2 How do I strip blank space from the beginning/end of a string?
+
+(contributed by brian d foy)
+
+A substitution can do this for you. For a single line, you want to
+replace all the leading or trailing whitespace with nothing. You
+can do that with a pair of substitutions:
+
+ s/^\s+//;
+ s/\s+$//;
+
+You can also write that as a single substitution, although it turns
+out the combined statement is slower than the separate ones. That
+might not matter to you, though:
+
+ s/^\s+|\s+$//g;
+
+In this regular expression, the alternation matches either at the
+beginning or the end of the string since the anchors have a lower
+precedence than the alternation. With the C</g> flag, the substitution
+makes all possible matches, so it gets both. Remember, the trailing
+newline matches the C<\s+>, and the C<$> anchor can match to the
+absolute end of the string, so the newline disappears too. Just add
+the newline to the output, which has the added benefit of preserving
+"blank" (consisting entirely of whitespace) lines which the C<^\s+>
+would remove all by itself:
+
+ while( <> ) {
+ s/^\s+|\s+$//g;
+ print "$_\n";
+ }
+
+For a multi-line string, you can apply the regular expression to each
+logical line in the string by adding the C</m> flag (for
+"multi-line"). With the C</m> flag, the C<$> matches I<before> an
+embedded newline, so it doesn't remove it. This pattern still removes
+the newline at the end of the string:
+
+ $string =~ s/^\s+|\s+$//gm;
+
+Remember that lines consisting entirely of whitespace will disappear,
+since the first part of the alternation can match the entire string
+and replace it with nothing. If you need to keep embedded blank lines,
+you have to do a little more work. Instead of matching any whitespace
+(since that includes a newline), just match the other whitespace:
+
+ $string =~ s/^[\t\f ]+|[\t\f ]+$//mg;
+
+=head2 How do I pad a string with blanks or pad a number with zeroes?
+
+In the following examples, C<$pad_len> is the length to which you wish
+to pad the string, C<$text> or C<$num> contains the string to be padded,
+and C<$pad_char> contains the padding character. You can use a single
+character string constant instead of the C<$pad_char> variable if you
+know what it is in advance. And in the same way you can use an integer in
+place of C<$pad_len> if you know the pad length in advance.
+
+The simplest method uses the C<sprintf> function. It can pad on the left
+or right with blanks and on the left with zeroes and it will not
+truncate the result. The C<pack> function can only pad strings on the
+right with blanks and it will truncate the result to a maximum length of
+C<$pad_len>.
+
+ # Left padding a string with blanks (no truncation):
+ my $padded = sprintf("%${pad_len}s", $text);
+ my $padded = sprintf("%*s", $pad_len, $text); # same thing
+
+ # Right padding a string with blanks (no truncation):
+ my $padded = sprintf("%-${pad_len}s", $text);
+ my $padded = sprintf("%-*s", $pad_len, $text); # same thing
+
+ # Left padding a number with 0 (no truncation):
+ my $padded = sprintf("%0${pad_len}d", $num);
+ my $padded = sprintf("%0*d", $pad_len, $num); # same thing
+
+ # Right padding a string with blanks using pack (will truncate):
+ my $padded = pack("A$pad_len",$text);
+
+If you need to pad with a character other than blank or zero you can use
+one of the following methods. They all generate a pad string with the
+C<x> operator and combine that with C<$text>. These methods do
+not truncate C<$text>.
+
+Left and right padding with any character, creating a new string:
+
+ my $padded = $pad_char x ( $pad_len - length( $text ) ) . $text;
+ my $padded = $text . $pad_char x ( $pad_len - length( $text ) );
+
+Left and right padding with any character, modifying C<$text> directly:
+
+ substr( $text, 0, 0 ) = $pad_char x ( $pad_len - length( $text ) );
+ $text .= $pad_char x ( $pad_len - length( $text ) );
+
+=head2 How do I extract selected columns from a string?
+
+(contributed by brian d foy)
+
+If you know the columns that contain the data, you can
+use C<substr> to extract a single column.
+
+ my $column = substr( $line, $start_column, $length );
+
+You can use C<split> if the columns are separated by whitespace or
+some other delimiter, as long as whitespace or the delimiter cannot
+appear as part of the data.
+
+ my $line = ' fred barney betty ';
+ my @columns = split /\s+/, $line;
+ # ( '', 'fred', 'barney', 'betty' );
+
+ my $line = 'fred||barney||betty';
+ my @columns = split /\|/, $line;
+ # ( 'fred', '', 'barney', '', 'betty' );
+
+If you want to work with comma-separated values, don't do this since
+that format is a bit more complicated. Use one of the modules that
+handle that format, such as L<Text::CSV>, L<Text::CSV_XS>, or
+L<Text::CSV_PP>.
+
+If you want to break apart an entire line of fixed columns, you can use
+C<unpack> with the A (ASCII) format. By using a number after the format
+specifier, you can denote the column width. See the C<pack> and C<unpack>
+entries in L<perlfunc> for more details.
+
+ my @fields = unpack( $line, "A8 A8 A8 A16 A4" );
+
+Note that spaces in the format argument to C<unpack> do not denote literal
+spaces. If you have space separated data, you may want C<split> instead.
+
+=head2 How do I find the soundex value of a string?
+
+(contributed by brian d foy)
+
+You can use the C<Text::Soundex> module. If you want to do fuzzy or close
+matching, you might also try the L<String::Approx>, and
+L<Text::Metaphone>, and L<Text::DoubleMetaphone> modules.
+
+=head2 How can I expand variables in text strings?
+
+(contributed by brian d foy)
+
+If you can avoid it, don't, or if you can use a templating system,
+such as L<Text::Template> or L<Template> Toolkit, do that instead. You
+might even be able to get the job done with C<sprintf> or C<printf>:
+
+ my $string = sprintf 'Say hello to %s and %s', $foo, $bar;
+
+However, for the one-off simple case where I don't want to pull out a
+full templating system, I'll use a string that has two Perl scalar
+variables in it. In this example, I want to expand C<$foo> and C<$bar>
+to their variable's values:
+
+ my $foo = 'Fred';
+ my $bar = 'Barney';
+ $string = 'Say hello to $foo and $bar';
+
+One way I can do this involves the substitution operator and a double
+C</e> flag. The first C</e> evaluates C<$1> on the replacement side and
+turns it into C<$foo>. The second /e starts with C<$foo> and replaces
+it with its value. C<$foo>, then, turns into 'Fred', and that's finally
+what's left in the string:
+
+ $string =~ s/(\$\w+)/$1/eeg; # 'Say hello to Fred and Barney'
+
+The C</e> will also silently ignore violations of strict, replacing
+undefined variable names with the empty string. Since I'm using the
+C</e> flag (twice even!), I have all of the same security problems I
+have with C<eval> in its string form. If there's something odd in
+C<$foo>, perhaps something like C<@{[ system "rm -rf /" ]}>, then
+I could get myself in trouble.
+
+To get around the security problem, I could also pull the values from
+a hash instead of evaluating variable names. Using a single C</e>, I
+can check the hash to ensure the value exists, and if it doesn't, I
+can replace the missing value with a marker, in this case C<???> to
+signal that I missed something:
+
+ my $string = 'This has $foo and $bar';
+
+ my %Replacements = (
+ foo => 'Fred',
+ );
+
+ # $string =~ s/\$(\w+)/$Replacements{$1}/g;
+ $string =~ s/\$(\w+)/
+ exists $Replacements{$1} ? $Replacements{$1} : '???'
+ /eg;
+
+ print $string;
+
+=head2 What's wrong with always quoting "$vars"?
+
+The problem is that those double-quotes force
+stringification--coercing numbers and references into strings--even
+when you don't want them to be strings. Think of it this way:
+double-quote expansion is used to produce new strings. If you already
+have a string, why do you need more?
+
+If you get used to writing odd things like these:
+
+ print "$var"; # BAD
+ my $new = "$old"; # BAD
+ somefunc("$var"); # BAD
+
+You'll be in trouble. Those should (in 99.8% of the cases) be
+the simpler and more direct:
+
+ print $var;
+ my $new = $old;
+ somefunc($var);
+
+Otherwise, besides slowing you down, you're going to break code when
+the thing in the scalar is actually neither a string nor a number, but
+a reference:
+
+ func(\@array);
+ sub func {
+ my $aref = shift;
+ my $oref = "$aref"; # WRONG
+ }
+
+You can also get into subtle problems on those few operations in Perl
+that actually do care about the difference between a string and a
+number, such as the magical C<++> autoincrement operator or the
+syscall() function.
+
+Stringification also destroys arrays.
+
+ my @lines = `command`;
+ print "@lines"; # WRONG - extra blanks
+ print @lines; # right
+
+=head2 Why don't my E<lt>E<lt>HERE documents work?
+
+Here documents are found in L<perlop>. Check for these three things:
+
+=over 4
+
+=item There must be no space after the E<lt>E<lt> part.
+
+=item There (probably) should be a semicolon at the end of the opening token
+
+=item You can't (easily) have any space in front of the tag.
+
+=item There needs to be at least a line separator after the end token.
+
+=back
+
+If you want to indent the text in the here document, you
+can do this:
+
+ # all in one
+ (my $VAR = <<HERE_TARGET) =~ s/^\s+//gm;
+ your text
+ goes here
+ HERE_TARGET
+
+But the HERE_TARGET must still be flush against the margin.
+If you want that indented also, you'll have to quote
+in the indentation.
+
+ (my $quote = <<' FINIS') =~ s/^\s+//gm;
+ ...we will have peace, when you and all your works have
+ perished--and the works of your dark master to whom you
+ would deliver us. You are a liar, Saruman, and a corrupter
+ of men's hearts. --Theoden in /usr/src/perl/taint.c
+ FINIS
+ $quote =~ s/\s+--/\n--/;
+
+A nice general-purpose fixer-upper function for indented here documents
+follows. It expects to be called with a here document as its argument.
+It looks to see whether each line begins with a common substring, and
+if so, strips that substring off. Otherwise, it takes the amount of leading
+whitespace found on the first line and removes that much off each
+subsequent line.
+
+ sub fix {
+ local $_ = shift;
+ my ($white, $leader); # common whitespace and common leading string
+ if (/^\s*(?:([^\w\s]+)(\s*).*\n)(?:\s*\g1\g2?.*\n)+$/) {
+ ($white, $leader) = ($2, quotemeta($1));
+ } else {
+ ($white, $leader) = (/^(\s+)/, '');
+ }
+ s/^\s*?$leader(?:$white)?//gm;
+ return $_;
+ }
+
+This works with leading special strings, dynamically determined:
+
+ my $remember_the_main = fix<<' MAIN_INTERPRETER_LOOP';
+ @@@ int
+ @@@ runops() {
+ @@@ SAVEI32(runlevel);
+ @@@ runlevel++;
+ @@@ while ( op = (*op->op_ppaddr)() );
+ @@@ TAINT_NOT;
+ @@@ return 0;
+ @@@ }
+ MAIN_INTERPRETER_LOOP
+
+Or with a fixed amount of leading whitespace, with remaining
+indentation correctly preserved:
+
+ my $poem = fix<<EVER_ON_AND_ON;
+ Now far ahead the Road has gone,
+ And I must follow, if I can,
+ Pursuing it with eager feet,
+ Until it joins some larger way
+ Where many paths and errands meet.
+ And whither then? I cannot say.
+ --Bilbo in /usr/src/perl/pp_ctl.c
+ EVER_ON_AND_ON
+
+=head1 Data: Arrays
+
+=head2 What is the difference between a list and an array?
+
+(contributed by brian d foy)
+
+A list is a fixed collection of scalars. An array is a variable that
+holds a variable collection of scalars. An array can supply its collection
+for list operations, so list operations also work on arrays:
+
+ # slices
+ ( 'dog', 'cat', 'bird' )[2,3];
+ @animals[2,3];
+
+ # iteration
+ foreach ( qw( dog cat bird ) ) { ... }
+ foreach ( @animals ) { ... }
+
+ my @three = grep { length == 3 } qw( dog cat bird );
+ my @three = grep { length == 3 } @animals;
+
+ # supply an argument list
+ wash_animals( qw( dog cat bird ) );
+ wash_animals( @animals );
+
+Array operations, which change the scalars, rearrange them, or add
+or subtract some scalars, only work on arrays. These can't work on a
+list, which is fixed. Array operations include C<shift>, C<unshift>,
+C<push>, C<pop>, and C<splice>.
+
+An array can also change its length:
+
+ $#animals = 1; # truncate to two elements
+ $#animals = 10000; # pre-extend to 10,001 elements
+
+You can change an array element, but you can't change a list element:
+
+ $animals[0] = 'Rottweiler';
+ qw( dog cat bird )[0] = 'Rottweiler'; # syntax error!
+
+ foreach ( @animals ) {
+ s/^d/fr/; # works fine
+ }
+
+ foreach ( qw( dog cat bird ) ) {
+ s/^d/fr/; # Error! Modification of read only value!
+ }
+
+However, if the list element is itself a variable, it appears that you
+can change a list element. However, the list element is the variable, not
+the data. You're not changing the list element, but something the list
+element refers to. The list element itself doesn't change: it's still
+the same variable.
+
+You also have to be careful about context. You can assign an array to
+a scalar to get the number of elements in the array. This only works
+for arrays, though:
+
+ my $count = @animals; # only works with arrays
+
+If you try to do the same thing with what you think is a list, you
+get a quite different result. Although it looks like you have a list
+on the righthand side, Perl actually sees a bunch of scalars separated
+by a comma:
+
+ my $scalar = ( 'dog', 'cat', 'bird' ); # $scalar gets bird
+
+Since you're assigning to a scalar, the righthand side is in scalar
+context. The comma operator (yes, it's an operator!) in scalar
+context evaluates its lefthand side, throws away the result, and
+evaluates it's righthand side and returns the result. In effect,
+that list-lookalike assigns to C<$scalar> it's rightmost value. Many
+people mess this up because they choose a list-lookalike whose
+last element is also the count they expect:
+
+ my $scalar = ( 1, 2, 3 ); # $scalar gets 3, accidentally
+
+=head2 What is the difference between $array[1] and @array[1]?
+
+(contributed by brian d foy)
+
+The difference is the sigil, that special character in front of the
+array name. The C<$> sigil means "exactly one item", while the C<@>
+sigil means "zero or more items". The C<$> gets you a single scalar,
+while the C<@> gets you a list.
+
+The confusion arises because people incorrectly assume that the sigil
+denotes the variable type.
+
+The C<$array[1]> is a single-element access to the array. It's going
+to return the item in index 1 (or undef if there is no item there).
+If you intend to get exactly one element from the array, this is the
+form you should use.
+
+The C<@array[1]> is an array slice, although it has only one index.
+You can pull out multiple elements simultaneously by specifying
+additional indices as a list, like C<@array[1,4,3,0]>.
+
+Using a slice on the lefthand side of the assignment supplies list
+context to the righthand side. This can lead to unexpected results.
+For instance, if you want to read a single line from a filehandle,
+assigning to a scalar value is fine:
+
+ $array[1] = <STDIN>;
+
+However, in list context, the line input operator returns all of the
+lines as a list. The first line goes into C<@array[1]> and the rest
+of the lines mysteriously disappear:
+
+ @array[1] = <STDIN>; # most likely not what you want
+
+Either the C<use warnings> pragma or the B<-w> flag will warn you when
+you use an array slice with a single index.
+
+=head2 How can I remove duplicate elements from a list or array?
+
+(contributed by brian d foy)
+
+Use a hash. When you think the words "unique" or "duplicated", think
+"hash keys".
+
+If you don't care about the order of the elements, you could just
+create the hash then extract the keys. It's not important how you
+create that hash: just that you use C<keys> to get the unique
+elements.
+
+ my %hash = map { $_, 1 } @array;
+ # or a hash slice: @hash{ @array } = ();
+ # or a foreach: $hash{$_} = 1 foreach ( @array );
+
+ my @unique = keys %hash;
+
+If you want to use a module, try the C<uniq> function from
+L<List::MoreUtils>. In list context it returns the unique elements,
+preserving their order in the list. In scalar context, it returns the
+number of unique elements.
+
+ use List::MoreUtils qw(uniq);
+
+ my @unique = uniq( 1, 2, 3, 4, 4, 5, 6, 5, 7 ); # 1,2,3,4,5,6,7
+ my $unique = uniq( 1, 2, 3, 4, 4, 5, 6, 5, 7 ); # 7
+
+You can also go through each element and skip the ones you've seen
+before. Use a hash to keep track. The first time the loop sees an
+element, that element has no key in C<%Seen>. The C<next> statement
+creates the key and immediately uses its value, which is C<undef>, so
+the loop continues to the C<push> and increments the value for that
+key. The next time the loop sees that same element, its key exists in
+the hash I<and> the value for that key is true (since it's not 0 or
+C<undef>), so the next skips that iteration and the loop goes to the
+next element.
+
+ my @unique = ();
+ my %seen = ();
+
+ foreach my $elem ( @array ) {
+ next if $seen{ $elem }++;
+ push @unique, $elem;
+ }
+
+You can write this more briefly using a grep, which does the
+same thing.
+
+ my %seen = ();
+ my @unique = grep { ! $seen{ $_ }++ } @array;
+
+=head2 How can I tell whether a certain element is contained in a list or array?
+
+(portions of this answer contributed by Anno Siegel and brian d foy)
+
+Hearing the word "in" is an I<in>dication that you probably should have
+used a hash, not a list or array, to store your data. Hashes are
+designed to answer this question quickly and efficiently. Arrays aren't.
+
+That being said, there are several ways to approach this. In Perl 5.10
+and later, you can use the smart match operator to check that an item is
+contained in an array or a hash:
+
+ use 5.010;
+
+ if( $item ~~ @array ) {
+ say "The array contains $item"
+ }
+
+ if( $item ~~ %hash ) {
+ say "The hash contains $item"
+ }
+
+With earlier versions of Perl, you have to do a bit more work. If you
+are going to make this query many times over arbitrary string values,
+the fastest way is probably to invert the original array and maintain a
+hash whose keys are the first array's values:
+
+ my @blues = qw/azure cerulean teal turquoise lapis-lazuli/;
+ my %is_blue = ();
+ for (@blues) { $is_blue{$_} = 1 }
+
+Now you can check whether C<$is_blue{$some_color}>. It might have
+been a good idea to keep the blues all in a hash in the first place.
+
+If the values are all small integers, you could use a simple indexed
+array. This kind of an array will take up less space:
+
+ my @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31);
+ my @is_tiny_prime = ();
+ for (@primes) { $is_tiny_prime[$_] = 1 }
+ # or simply @istiny_prime[@primes] = (1) x @primes;
+
+Now you check whether $is_tiny_prime[$some_number].
+
+If the values in question are integers instead of strings, you can save
+quite a lot of space by using bit strings instead:
+
+ my @articles = ( 1..10, 150..2000, 2017 );
+ undef $read;
+ for (@articles) { vec($read,$_,1) = 1 }
+
+Now check whether C<vec($read,$n,1)> is true for some C<$n>.
+
+These methods guarantee fast individual tests but require a re-organization
+of the original list or array. They only pay off if you have to test
+multiple values against the same array.
+
+If you are testing only once, the standard module L<List::Util> exports
+the function C<first> for this purpose. It works by stopping once it
+finds the element. It's written in C for speed, and its Perl equivalent
+looks like this subroutine:
+
+ sub first (&@) {
+ my $code = shift;
+ foreach (@_) {
+ return $_ if &{$code}();
+ }
+ undef;
+ }
+
+If speed is of little concern, the common idiom uses grep in scalar context
+(which returns the number of items that passed its condition) to traverse the
+entire list. This does have the benefit of telling you how many matches it
+found, though.
+
+ my $is_there = grep $_ eq $whatever, @array;
+
+If you want to actually extract the matching elements, simply use grep in
+list context.
+
+ my @matches = grep $_ eq $whatever, @array;
+
+=head2 How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
+
+Use a hash. Here's code to do both and more. It assumes that each
+element is unique in a given array:
+
+ my (@union, @intersection, @difference);
+ my %count = ();
+ foreach my $element (@array1, @array2) { $count{$element}++ }
+ foreach my $element (keys %count) {
+ push @union, $element;
+ push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element;
+ }
+
+Note that this is the I<symmetric difference>, that is, all elements
+in either A or in B but not in both. Think of it as an xor operation.
+
+=head2 How do I test whether two arrays or hashes are equal?
+
+With Perl 5.10 and later, the smart match operator can give you the answer
+with the least amount of work:
+
+ use 5.010;
+
+ if( @array1 ~~ @array2 ) {
+ say "The arrays are the same";
+ }
+
+ if( %hash1 ~~ %hash2 ) # doesn't check values! {
+ say "The hash keys are the same";
+ }
+
+The following code works for single-level arrays. It uses a
+stringwise comparison, and does not distinguish defined versus
+undefined empty strings. Modify if you have other needs.
+
+ $are_equal = compare_arrays(\@frogs, \@toads);
+
+ sub compare_arrays {
+ my ($first, $second) = @_;
+ no warnings; # silence spurious -w undef complaints
+ return 0 unless @$first == @$second;
+ for (my $i = 0; $i < @$first; $i++) {
+ return 0 if $first->[$i] ne $second->[$i];
+ }
+ return 1;
+ }
+
+For multilevel structures, you may wish to use an approach more
+like this one. It uses the CPAN module L<FreezeThaw>:
+
+ use FreezeThaw qw(cmpStr);
+ my @a = my @b = ( "this", "that", [ "more", "stuff" ] );
+
+ printf "a and b contain %s arrays\n",
+ cmpStr(\@a, \@b) == 0
+ ? "the same"
+ : "different";
+
+This approach also works for comparing hashes. Here we'll demonstrate
+two different answers:
+
+ use FreezeThaw qw(cmpStr cmpStrHard);
+
+ my %a = my %b = ( "this" => "that", "extra" => [ "more", "stuff" ] );
+ $a{EXTRA} = \%b;
+ $b{EXTRA} = \%a;
+
+ printf "a and b contain %s hashes\n",
+ cmpStr(\%a, \%b) == 0 ? "the same" : "different";
+
+ printf "a and b contain %s hashes\n",
+ cmpStrHard(\%a, \%b) == 0 ? "the same" : "different";
+
+
+The first reports that both those the hashes contain the same data,
+while the second reports that they do not. Which you prefer is left as
+an exercise to the reader.
+
+=head2 How do I find the first array element for which a condition is true?
+
+To find the first array element which satisfies a condition, you can
+use the C<first()> function in the L<List::Util> module, which comes
+with Perl 5.8. This example finds the first element that contains
+"Perl".
+
+ use List::Util qw(first);
+
+ my $element = first { /Perl/ } @array;
+
+If you cannot use L<List::Util>, you can make your own loop to do the
+same thing. Once you find the element, you stop the loop with last.
+
+ my $found;
+ foreach ( @array ) {
+ if( /Perl/ ) { $found = $_; last }
+ }
+
+If you want the array index, use the C<firstidx()> function from
+C<List::MoreUtils>:
+
+ use List::MoreUtils qw(firstidx);
+ my $index = firstidx { /Perl/ } @array;
+
+Or write it yourself, iterating through the indices
+and checking the array element at each index until you find one
+that satisfies the condition:
+
+ my( $found, $index ) = ( undef, -1 );
+ for( $i = 0; $i < @array; $i++ ) {
+ if( $array[$i] =~ /Perl/ ) {
+ $found = $array[$i];
+ $index = $i;
+ last;
+ }
+ }
+
+=head2 How do I handle linked lists?
+
+(contributed by brian d foy)
+
+Perl's arrays do not have a fixed size, so you don't need linked lists
+if you just want to add or remove items. You can use array operations
+such as C<push>, C<pop>, C<shift>, C<unshift>, or C<splice> to do
+that.
+
+Sometimes, however, linked lists can be useful in situations where you
+want to "shard" an array so you have have many small arrays instead of
+a single big array. You can keep arrays longer than Perl's largest
+array index, lock smaller arrays separately in threaded programs,
+reallocate less memory, or quickly insert elements in the middle of
+the chain.
+
+Steve Lembark goes through the details in his YAPC::NA 2009 talk "Perly
+Linked Lists" ( L<http://www.slideshare.net/lembark/perly-linked-lists> ),
+although you can just use his L<LinkedList::Single> module.
+
+=head2 How do I handle circular lists?
+X<circular> X<array> X<Tie::Cycle> X<Array::Iterator::Circular>
+X<cycle> X<modulus>
+
+(contributed by brian d foy)
+
+If you want to cycle through an array endlessly, you can increment the
+index modulo the number of elements in the array:
+
+ my @array = qw( a b c );
+ my $i = 0;
+
+ while( 1 ) {
+ print $array[ $i++ % @array ], "\n";
+ last if $i > 20;
+ }
+
+You can also use L<Tie::Cycle> to use a scalar that always has the
+next element of the circular array:
+
+ use Tie::Cycle;
+
+ tie my $cycle, 'Tie::Cycle', [ qw( FFFFFF 000000 FFFF00 ) ];
+
+ print $cycle; # FFFFFF
+ print $cycle; # 000000
+ print $cycle; # FFFF00
+
+The L<Array::Iterator::Circular> creates an iterator object for
+circular arrays:
+
+ use Array::Iterator::Circular;
+
+ my $color_iterator = Array::Iterator::Circular->new(
+ qw(red green blue orange)
+ );
+
+ foreach ( 1 .. 20 ) {
+ print $color_iterator->next, "\n";
+ }
+
+=head2 How do I shuffle an array randomly?
+
+If you either have Perl 5.8.0 or later installed, or if you have
+Scalar-List-Utils 1.03 or later installed, you can say:
+
+ use List::Util 'shuffle';
+
+ @shuffled = shuffle(@list);
+
+If not, you can use a Fisher-Yates shuffle.
+
+ sub fisher_yates_shuffle {
+ my $deck = shift; # $deck is a reference to an array
+ return unless @$deck; # must not be empty!
+
+ my $i = @$deck;
+ while (--$i) {
+ my $j = int rand ($i+1);
+ @$deck[$i,$j] = @$deck[$j,$i];
+ }
+ }
+
+ # shuffle my mpeg collection
+ #
+ my @mpeg = <audio/*/*.mp3>;
+ fisher_yates_shuffle( \@mpeg ); # randomize @mpeg in place
+ print @mpeg;
+
+Note that the above implementation shuffles an array in place,
+unlike the C<List::Util::shuffle()> which takes a list and returns
+a new shuffled list.
+
+You've probably seen shuffling algorithms that work using splice,
+randomly picking another element to swap the current element with
+
+ srand;
+ @new = ();
+ @old = 1 .. 10; # just a demo
+ while (@old) {
+ push(@new, splice(@old, rand @old, 1));
+ }
+
+This is bad because splice is already O(N), and since you do it N
+times, you just invented a quadratic algorithm; that is, O(N**2).
+This does not scale, although Perl is so efficient that you probably
+won't notice this until you have rather largish arrays.
+
+=head2 How do I process/modify each element of an array?
+
+Use C<for>/C<foreach>:
+
+ for (@lines) {
+ s/foo/bar/; # change that word
+ tr/XZ/ZX/; # swap those letters
+ }
+
+Here's another; let's compute spherical volumes:
+
+ my @volumes = @radii;
+ for (@volumes) { # @volumes has changed parts
+ $_ **= 3;
+ $_ *= (4/3) * 3.14159; # this will be constant folded
+ }
+
+which can also be done with C<map()> which is made to transform
+one list into another:
+
+ my @volumes = map {$_ ** 3 * (4/3) * 3.14159} @radii;
+
+If you want to do the same thing to modify the values of the
+hash, you can use the C<values> function. As of Perl 5.6
+the values are not copied, so if you modify $orbit (in this
+case), you modify the value.
+
+ for my $orbit ( values %orbits ) {
+ ($orbit **= 3) *= (4/3) * 3.14159;
+ }
+
+Prior to perl 5.6 C<values> returned copies of the values,
+so older perl code often contains constructions such as
+C<@orbits{keys %orbits}> instead of C<values %orbits> where
+the hash is to be modified.
+
+=head2 How do I select a random element from an array?
+
+Use the C<rand()> function (see L<perlfunc/rand>):
+
+ my $index = rand @array;
+ my $element = $array[$index];
+
+Or, simply:
+
+ my $element = $array[ rand @array ];
+
+=head2 How do I permute N elements of a list?
+X<List::Permutor> X<permute> X<Algorithm::Loops> X<Knuth>
+X<The Art of Computer Programming> X<Fischer-Krause>
+
+Use the L<List::Permutor> module on CPAN. If the list is actually an
+array, try the L<Algorithm::Permute> module (also on CPAN). It's
+written in XS code and is very efficient:
+
+ use Algorithm::Permute;
+
+ my @array = 'a'..'d';
+ my $p_iterator = Algorithm::Permute->new ( \@array );
+
+ while (my @perm = $p_iterator->next) {
+ print "next permutation: (@perm)\n";
+ }
+
+For even faster execution, you could do:
+
+ use Algorithm::Permute;
+
+ my @array = 'a'..'d';
+
+ Algorithm::Permute::permute {
+ print "next permutation: (@array)\n";
+ } @array;
+
+Here's a little program that generates all permutations of all the
+words on each line of input. The algorithm embodied in the
+C<permute()> function is discussed in Volume 4 (still unpublished) of
+Knuth's I<The Art of Computer Programming> and will work on any list:
+
+ #!/usr/bin/perl -n
+ # Fischer-Krause ordered permutation generator
+
+ sub permute (&@) {
+ my $code = shift;
+ my @idx = 0..$#_;
+ while ( $code->(@_[@idx]) ) {
+ my $p = $#idx;
+ --$p while $idx[$p-1] > $idx[$p];
+ my $q = $p or return;
+ push @idx, reverse splice @idx, $p;
+ ++$q while $idx[$p-1] > $idx[$q];
+ @idx[$p-1,$q]=@idx[$q,$p-1];
+ }
+ }
+
+ permute { print "@_\n" } split;
+
+The L<Algorithm::Loops> module also provides the C<NextPermute> and
+C<NextPermuteNum> functions which efficiently find all unique permutations
+of an array, even if it contains duplicate values, modifying it in-place:
+if its elements are in reverse-sorted order then the array is reversed,
+making it sorted, and it returns false; otherwise the next
+permutation is returned.
+
+C<NextPermute> uses string order and C<NextPermuteNum> numeric order, so
+you can enumerate all the permutations of C<0..9> like this:
+
+ use Algorithm::Loops qw(NextPermuteNum);
+
+ my @list= 0..9;
+ do { print "@list\n" } while NextPermuteNum @list;
+
+=head2 How do I sort an array by (anything)?
+
+Supply a comparison function to sort() (described in L<perlfunc/sort>):
+
+ @list = sort { $a <=> $b } @list;
+
+The default sort function is cmp, string comparison, which would
+sort C<(1, 2, 10)> into C<(1, 10, 2)>. C<< <=> >>, used above, is
+the numerical comparison operator.
+
+If you have a complicated function needed to pull out the part you
+want to sort on, then don't do it inside the sort function. Pull it
+out first, because the sort BLOCK can be called many times for the
+same element. Here's an example of how to pull out the first word
+after the first number on each item, and then sort those words
+case-insensitively.
+
+ my @idx;
+ for (@data) {
+ my $item;
+ ($item) = /\d+\s*(\S+)/;
+ push @idx, uc($item);
+ }
+ my @sorted = @data[ sort { $idx[$a] cmp $idx[$b] } 0 .. $#idx ];
+
+which could also be written this way, using a trick
+that's come to be known as the Schwartzian Transform:
+
+ my @sorted = map { $_->[0] }
+ sort { $a->[1] cmp $b->[1] }
+ map { [ $_, uc( (/\d+\s*(\S+)/)[0]) ] } @data;
+
+If you need to sort on several fields, the following paradigm is useful.
+
+ my @sorted = sort {
+ field1($a) <=> field1($b) ||
+ field2($a) cmp field2($b) ||
+ field3($a) cmp field3($b)
+ } @data;
+
+This can be conveniently combined with precalculation of keys as given
+above.
+
+See the F<sort> article in the "Far More Than You Ever Wanted
+To Know" collection in L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz> for
+more about this approach.
+
+See also the question later in L<perlfaq4> on sorting hashes.
+
+=head2 How do I manipulate arrays of bits?
+
+Use C<pack()> and C<unpack()>, or else C<vec()> and the bitwise
+operations.
+
+For example, you don't have to store individual bits in an array
+(which would mean that you're wasting a lot of space). To convert an
+array of bits to a string, use C<vec()> to set the right bits. This
+sets C<$vec> to have bit N set only if C<$ints[N]> was set:
+
+ my @ints = (...); # array of bits, e.g. ( 1, 0, 0, 1, 1, 0 ... )
+ my $vec = '';
+ foreach( 0 .. $#ints ) {
+ vec($vec,$_,1) = 1 if $ints[$_];
+ }
+
+The string C<$vec> only takes up as many bits as it needs. For
+instance, if you had 16 entries in C<@ints>, C<$vec> only needs two
+bytes to store them (not counting the scalar variable overhead).
+
+Here's how, given a vector in C<$vec>, you can get those bits into
+your C<@ints> array:
+
+ sub bitvec_to_list {
+ my $vec = shift;
+ my @ints;
+ # Find null-byte density then select best algorithm
+ if ($vec =~ tr/\0// / length $vec > 0.95) {
+ use integer;
+ my $i;
+
+ # This method is faster with mostly null-bytes
+ while($vec =~ /[^\0]/g ) {
+ $i = -9 + 8 * pos $vec;
+ push @ints, $i if vec($vec, ++$i, 1);
+ push @ints, $i if vec($vec, ++$i, 1);
+ push @ints, $i if vec($vec, ++$i, 1);
+ push @ints, $i if vec($vec, ++$i, 1);
+ push @ints, $i if vec($vec, ++$i, 1);
+ push @ints, $i if vec($vec, ++$i, 1);
+ push @ints, $i if vec($vec, ++$i, 1);
+ push @ints, $i if vec($vec, ++$i, 1);
+ }
+ }
+ else {
+ # This method is a fast general algorithm
+ use integer;
+ my $bits = unpack "b*", $vec;
+ push @ints, 0 if $bits =~ s/^(\d)// && $1;
+ push @ints, pos $bits while($bits =~ /1/g);
+ }
+
+ return \@ints;
+ }
+
+This method gets faster the more sparse the bit vector is.
+(Courtesy of Tim Bunce and Winfried Koenig.)
+
+You can make the while loop a lot shorter with this suggestion
+from Benjamin Goldberg:
+
+ while($vec =~ /[^\0]+/g ) {
+ push @ints, grep vec($vec, $_, 1), $-[0] * 8 .. $+[0] * 8;
+ }
+
+Or use the CPAN module L<Bit::Vector>:
+
+ my $vector = Bit::Vector->new($num_of_bits);
+ $vector->Index_List_Store(@ints);
+ my @ints = $vector->Index_List_Read();
+
+L<Bit::Vector> provides efficient methods for bit vector, sets of
+small integers and "big int" math.
+
+Here's a more extensive illustration using vec():
+
+ # vec demo
+ my $vector = "\xff\x0f\xef\xfe";
+ print "Ilya's string \\xff\\x0f\\xef\\xfe represents the number ",
+ unpack("N", $vector), "\n";
+ my $is_set = vec($vector, 23, 1);
+ print "Its 23rd bit is ", $is_set ? "set" : "clear", ".\n";
+ pvec($vector);
+
+ set_vec(1,1,1);
+ set_vec(3,1,1);
+ set_vec(23,1,1);
+
+ set_vec(3,1,3);
+ set_vec(3,2,3);
+ set_vec(3,4,3);
+ set_vec(3,4,7);
+ set_vec(3,8,3);
+ set_vec(3,8,7);
+
+ set_vec(0,32,17);
+ set_vec(1,32,17);
+
+ sub set_vec {
+ my ($offset, $width, $value) = @_;
+ my $vector = '';
+ vec($vector, $offset, $width) = $value;
+ print "offset=$offset width=$width value=$value\n";
+ pvec($vector);
+ }
+
+ sub pvec {
+ my $vector = shift;
+ my $bits = unpack("b*", $vector);
+ my $i = 0;
+ my $BASE = 8;
+
+ print "vector length in bytes: ", length($vector), "\n";
+ @bytes = unpack("A8" x length($vector), $bits);
+ print "bits are: @bytes\n\n";
+ }
+
+=head2 Why does defined() return true on empty arrays and hashes?
+
+The short story is that you should probably only use defined on scalars or
+functions, not on aggregates (arrays and hashes). See L<perlfunc/defined>
+in the 5.004 release or later of Perl for more detail.
+
+=head1 Data: Hashes (Associative Arrays)
+
+=head2 How do I process an entire hash?
+
+(contributed by brian d foy)
+
+There are a couple of ways that you can process an entire hash. You
+can get a list of keys, then go through each key, or grab a one
+key-value pair at a time.
+
+To go through all of the keys, use the C<keys> function. This extracts
+all of the keys of the hash and gives them back to you as a list. You
+can then get the value through the particular key you're processing:
+
+ foreach my $key ( keys %hash ) {
+ my $value = $hash{$key}
+ ...
+ }
+
+Once you have the list of keys, you can process that list before you
+process the hash elements. For instance, you can sort the keys so you
+can process them in lexical order:
+
+ foreach my $key ( sort keys %hash ) {
+ my $value = $hash{$key}
+ ...
+ }
+
+Or, you might want to only process some of the items. If you only want
+to deal with the keys that start with C<text:>, you can select just
+those using C<grep>:
+
+ foreach my $key ( grep /^text:/, keys %hash ) {
+ my $value = $hash{$key}
+ ...
+ }
+
+If the hash is very large, you might not want to create a long list of
+keys. To save some memory, you can grab one key-value pair at a time using
+C<each()>, which returns a pair you haven't seen yet:
+
+ while( my( $key, $value ) = each( %hash ) ) {
+ ...
+ }
+
+The C<each> operator returns the pairs in apparently random order, so if
+ordering matters to you, you'll have to stick with the C<keys> method.
+
+The C<each()> operator can be a bit tricky though. You can't add or
+delete keys of the hash while you're using it without possibly
+skipping or re-processing some pairs after Perl internally rehashes
+all of the elements. Additionally, a hash has only one iterator, so if
+you mix C<keys>, C<values>, or C<each> on the same hash, you risk resetting
+the iterator and messing up your processing. See the C<each> entry in
+L<perlfunc> for more details.
+
+=head2 How do I merge two hashes?
+X<hash> X<merge> X<slice, hash>
+
+(contributed by brian d foy)
+
+Before you decide to merge two hashes, you have to decide what to do
+if both hashes contain keys that are the same and if you want to leave
+the original hashes as they were.
+
+If you want to preserve the original hashes, copy one hash (C<%hash1>)
+to a new hash (C<%new_hash>), then add the keys from the other hash
+(C<%hash2> to the new hash. Checking that the key already exists in
+C<%new_hash> gives you a chance to decide what to do with the
+duplicates:
+
+ my %new_hash = %hash1; # make a copy; leave %hash1 alone
+
+ foreach my $key2 ( keys %hash2 ) {
+ if( exists $new_hash{$key2} ) {
+ warn "Key [$key2] is in both hashes!";
+ # handle the duplicate (perhaps only warning)
+ ...
+ next;
+ }
+ else {
+ $new_hash{$key2} = $hash2{$key2};
+ }
+ }
+
+If you don't want to create a new hash, you can still use this looping
+technique; just change the C<%new_hash> to C<%hash1>.
+
+ foreach my $key2 ( keys %hash2 ) {
+ if( exists $hash1{$key2} ) {
+ warn "Key [$key2] is in both hashes!";
+ # handle the duplicate (perhaps only warning)
+ ...
+ next;
+ }
+ else {
+ $hash1{$key2} = $hash2{$key2};
+ }
+ }
+
+If you don't care that one hash overwrites keys and values from the other, you
+could just use a hash slice to add one hash to another. In this case, values
+from C<%hash2> replace values from C<%hash1> when they have keys in common:
+
+ @hash1{ keys %hash2 } = values %hash2;
+
+=head2 What happens if I add or remove keys from a hash while iterating over it?
+
+(contributed by brian d foy)
+
+The easy answer is "Don't do that!"
+
+If you iterate through the hash with each(), you can delete the key
+most recently returned without worrying about it. If you delete or add
+other keys, the iterator may skip or double up on them since perl
+may rearrange the hash table. See the
+entry for C<each()> in L<perlfunc>.
+
+=head2 How do I look up a hash element by value?
+
+Create a reverse hash:
+
+ my %by_value = reverse %by_key;
+ my $key = $by_value{$value};
+
+That's not particularly efficient. It would be more space-efficient
+to use:
+
+ while (my ($key, $value) = each %by_key) {
+ $by_value{$value} = $key;
+ }
+
+If your hash could have repeated values, the methods above will only find
+one of the associated keys. This may or may not worry you. If it does
+worry you, you can always reverse the hash into a hash of arrays instead:
+
+ while (my ($key, $value) = each %by_key) {
+ push @{$key_list_by_value{$value}}, $key;
+ }
+
+=head2 How can I know how many entries are in a hash?
+
+(contributed by brian d foy)
+
+This is very similar to "How do I process an entire hash?", also in
+L<perlfaq4>, but a bit simpler in the common cases.
+
+You can use the C<keys()> built-in function in scalar context to find out
+have many entries you have in a hash:
+
+ my $key_count = keys %hash; # must be scalar context!
+
+If you want to find out how many entries have a defined value, that's
+a bit different. You have to check each value. A C<grep> is handy:
+
+ my $defined_value_count = grep { defined } values %hash;
+
+You can use that same structure to count the entries any way that
+you like. If you want the count of the keys with vowels in them,
+you just test for that instead:
+
+ my $vowel_count = grep { /[aeiou]/ } keys %hash;
+
+The C<grep> in scalar context returns the count. If you want the list
+of matching items, just use it in list context instead:
+
+ my @defined_values = grep { defined } values %hash;
+
+The C<keys()> function also resets the iterator, which means that you may
+see strange results if you use this between uses of other hash operators
+such as C<each()>.
+
+=head2 How do I sort a hash (optionally by value instead of key)?
+
+(contributed by brian d foy)
+
+To sort a hash, start with the keys. In this example, we give the list of
+keys to the sort function which then compares them ASCIIbetically (which
+might be affected by your locale settings). The output list has the keys
+in ASCIIbetical order. Once we have the keys, we can go through them to
+create a report which lists the keys in ASCIIbetical order.
+
+ my @keys = sort { $a cmp $b } keys %hash;
+
+ foreach my $key ( @keys ) {
+ printf "%-20s %6d\n", $key, $hash{$key};
+ }
+
+We could get more fancy in the C<sort()> block though. Instead of
+comparing the keys, we can compute a value with them and use that
+value as the comparison.
+
+For instance, to make our report order case-insensitive, we use
+C<lc> to lowercase the keys before comparing them:
+
+ my @keys = sort { lc $a cmp lc $b } keys %hash;
+
+Note: if the computation is expensive or the hash has many elements,
+you may want to look at the Schwartzian Transform to cache the
+computation results.
+
+If we want to sort by the hash value instead, we use the hash key
+to look it up. We still get out a list of keys, but this time they
+are ordered by their value.
+
+ my @keys = sort { $hash{$a} <=> $hash{$b} } keys %hash;
+
+From there we can get more complex. If the hash values are the same,
+we can provide a secondary sort on the hash key.
+
+ my @keys = sort {
+ $hash{$a} <=> $hash{$b}
+ or
+ "\L$a" cmp "\L$b"
+ } keys %hash;
+
+=head2 How can I always keep my hash sorted?
+X<hash tie sort DB_File Tie::IxHash>
+
+You can look into using the C<DB_File> module and C<tie()> using the
+C<$DB_BTREE> hash bindings as documented in L<DB_File/"In Memory
+Databases">. The L<Tie::IxHash> module from CPAN might also be
+instructive. Although this does keep your hash sorted, you might not
+like the slowdown you suffer from the tie interface. Are you sure you
+need to do this? :)
+
+=head2 What's the difference between "delete" and "undef" with hashes?
+
+Hashes contain pairs of scalars: the first is the key, the
+second is the value. The key will be coerced to a string,
+although the value can be any kind of scalar: string,
+number, or reference. If a key C<$key> is present in
+%hash, C<exists($hash{$key})> will return true. The value
+for a given key can be C<undef>, in which case
+C<$hash{$key}> will be C<undef> while C<exists $hash{$key}>
+will return true. This corresponds to (C<$key>, C<undef>)
+being in the hash.
+
+Pictures help... Here's the C<%hash> table:
+
+ keys values
+ +------+------+
+ | a | 3 |
+ | x | 7 |
+ | d | 0 |
+ | e | 2 |
+ +------+------+
+
+And these conditions hold
+
+ $hash{'a'} is true
+ $hash{'d'} is false
+ defined $hash{'d'} is true
+ defined $hash{'a'} is true
+ exists $hash{'a'} is true (Perl 5 only)
+ grep ($_ eq 'a', keys %hash) is true
+
+If you now say
+
+ undef $hash{'a'}
+
+your table now reads:
+
+
+ keys values
+ +------+------+
+ | a | undef|
+ | x | 7 |
+ | d | 0 |
+ | e | 2 |
+ +------+------+
+
+and these conditions now hold; changes in caps:
+
+ $hash{'a'} is FALSE
+ $hash{'d'} is false
+ defined $hash{'d'} is true
+ defined $hash{'a'} is FALSE
+ exists $hash{'a'} is true (Perl 5 only)
+ grep ($_ eq 'a', keys %hash) is true
+
+Notice the last two: you have an undef value, but a defined key!
+
+Now, consider this:
+
+ delete $hash{'a'}
+
+your table now reads:
+
+ keys values
+ +------+------+
+ | x | 7 |
+ | d | 0 |
+ | e | 2 |
+ +------+------+
+
+and these conditions now hold; changes in caps:
+
+ $hash{'a'} is false
+ $hash{'d'} is false
+ defined $hash{'d'} is true
+ defined $hash{'a'} is false
+ exists $hash{'a'} is FALSE (Perl 5 only)
+ grep ($_ eq 'a', keys %hash) is FALSE
+
+See, the whole entry is gone!
+
+=head2 Why don't my tied hashes make the defined/exists distinction?
+
+This depends on the tied hash's implementation of EXISTS().
+For example, there isn't the concept of undef with hashes
+that are tied to DBM* files. It also means that exists() and
+defined() do the same thing with a DBM* file, and what they
+end up doing is not what they do with ordinary hashes.
+
+=head2 How do I reset an each() operation part-way through?
+
+(contributed by brian d foy)
+
+You can use the C<keys> or C<values> functions to reset C<each>. To
+simply reset the iterator used by C<each> without doing anything else,
+use one of them in void context:
+
+ keys %hash; # resets iterator, nothing else.
+ values %hash; # resets iterator, nothing else.
+
+See the documentation for C<each> in L<perlfunc>.
+
+=head2 How can I get the unique keys from two hashes?
+
+First you extract the keys from the hashes into lists, then solve
+the "removing duplicates" problem described above. For example:
+
+ my %seen = ();
+ for my $element (keys(%foo), keys(%bar)) {
+ $seen{$element}++;
+ }
+ my @uniq = keys %seen;
+
+Or more succinctly:
+
+ my @uniq = keys %{{%foo,%bar}};
+
+Or if you really want to save space:
+
+ my %seen = ();
+ while (defined ($key = each %foo)) {
+ $seen{$key}++;
+ }
+ while (defined ($key = each %bar)) {
+ $seen{$key}++;
+ }
+ my @uniq = keys %seen;
+
+=head2 How can I store a multidimensional array in a DBM file?
+
+Either stringify the structure yourself (no fun), or else
+get the MLDBM (which uses Data::Dumper) module from CPAN and layer
+it on top of either DB_File or GDBM_File. You might also try DBM::Deep, but
+it can be a bit slow.
+
+=head2 How can I make my hash remember the order I put elements into it?
+
+Use the L<Tie::IxHash> from CPAN.
+
+ use Tie::IxHash;
+
+ tie my %myhash, 'Tie::IxHash';
+
+ for (my $i=0; $i<20; $i++) {
+ $myhash{$i} = 2*$i;
+ }
+
+ my @keys = keys %myhash;
+ # @keys = (0,1,2,3,...)
+
+=head2 Why does passing a subroutine an undefined element in a hash create it?
+
+(contributed by brian d foy)
+
+Are you using a really old version of Perl?
+
+Normally, accessing a hash key's value for a nonexistent key will
+I<not> create the key.
+
+ my %hash = ();
+ my $value = $hash{ 'foo' };
+ print "This won't print\n" if exists $hash{ 'foo' };
+
+Passing C<$hash{ 'foo' }> to a subroutine used to be a special case, though.
+Since you could assign directly to C<$_[0]>, Perl had to be ready to
+make that assignment so it created the hash key ahead of time:
+
+ my_sub( $hash{ 'foo' } );
+ print "This will print before 5.004\n" if exists $hash{ 'foo' };
+
+ sub my_sub {
+ # $_[0] = 'bar'; # create hash key in case you do this
+ 1;
+ }
+
+Since Perl 5.004, however, this situation is a special case and Perl
+creates the hash key only when you make the assignment:
+
+ my_sub( $hash{ 'foo' } );
+ print "This will print, even after 5.004\n" if exists $hash{ 'foo' };
+
+ sub my_sub {
+ $_[0] = 'bar';
+ }
+
+However, if you want the old behavior (and think carefully about that
+because it's a weird side effect), you can pass a hash slice instead.
+Perl 5.004 didn't make this a special case:
+
+ my_sub( @hash{ qw/foo/ } );
+
+=head2 How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
+
+Usually a hash ref, perhaps like this:
+
+ $record = {
+ NAME => "Jason",
+ EMPNO => 132,
+ TITLE => "deputy peon",
+ AGE => 23,
+ SALARY => 37_000,
+ PALS => [ "Norbert", "Rhys", "Phineas"],
+ };
+
+References are documented in L<perlref> and L<perlreftut>.
+Examples of complex data structures are given in L<perldsc> and
+L<perllol>. Examples of structures and object-oriented classes are
+in L<perltoot>.
+
+=head2 How can I use a reference as a hash key?
+
+(contributed by brian d foy and Ben Morrow)
+
+Hash keys are strings, so you can't really use a reference as the key.
+When you try to do that, perl turns the reference into its stringified
+form (for instance, C<HASH(0xDEADBEEF)>). From there you can't get
+back the reference from the stringified form, at least without doing
+some extra work on your own.
+
+Remember that the entry in the hash will still be there even if
+the referenced variable goes out of scope, and that it is entirely
+possible for Perl to subsequently allocate a different variable at
+the same address. This will mean a new variable might accidentally
+be associated with the value for an old.
+
+If you have Perl 5.10 or later, and you just want to store a value
+against the reference for lookup later, you can use the core
+Hash::Util::Fieldhash module. This will also handle renaming the
+keys if you use multiple threads (which causes all variables to be
+reallocated at new addresses, changing their stringification), and
+garbage-collecting the entries when the referenced variable goes out
+of scope.
+
+If you actually need to be able to get a real reference back from
+each hash entry, you can use the Tie::RefHash module, which does the
+required work for you.
+
+=head2 How can I check if a key exists in a multilevel hash?
+
+(contributed by brian d foy)
+
+The trick to this problem is avoiding accidental autovivification. If
+you want to check three keys deep, you might naE<0xEF>vely try this:
+
+ my %hash;
+ if( exists $hash{key1}{key2}{key3} ) {
+ ...;
+ }
+
+Even though you started with a completely empty hash, after that call to
+C<exists> you've created the structure you needed to check for C<key3>:
+
+ %hash = (
+ 'key1' => {
+ 'key2' => {}
+ }
+ );
+
+That's autovivification. You can get around this in a few ways. The
+easiest way is to just turn it off. The lexical C<autovivification>
+pragma is available on CPAN. Now you don't add to the hash:
+
+ {
+ no autovivification;
+ my %hash;
+ if( exists $hash{key1}{key2}{key3} ) {
+ ...;
+ }
+ }
+
+The L<Data::Diver> module on CPAN can do it for you too. Its C<Dive>
+subroutine can tell you not only if the keys exist but also get the
+value:
+
+ use Data::Diver qw(Dive);
+
+ my @exists = Dive( \%hash, qw(key1 key2 key3) );
+ if( ! @exists ) {
+ ...; # keys do not exist
+ }
+ elsif( ! defined $exists[0] ) {
+ ...; # keys exist but value is undef
+ }
+
+You can easily do this yourself too by checking each level of the hash
+before you move onto the next level. This is essentially what
+L<Data::Diver> does for you:
+
+ if( check_hash( \%hash, qw(key1 key2 key3) ) ) {
+ ...;
+ }
+
+ sub check_hash {
+ my( $hash, @keys ) = @_;
+
+ return unless @keys;
+
+ foreach my $key ( @keys ) {
+ return unless eval { exists $hash->{$key} };
+ $hash = $hash->{$key};
+ }
+
+ return 1;
+ }
+
+=head2 How can I prevent addition of unwanted keys into a hash?
+
+Since version 5.8.0, hashes can be I<restricted> to a fixed number
+of given keys. Methods for creating and dealing with restricted hashes
+are exported by the L<Hash::Util> module.
+
+=head1 Data: Misc
+
+=head2 How do I handle binary data correctly?
+
+Perl is binary-clean, so it can handle binary data just fine.
+On Windows or DOS, however, you have to use C<binmode> for binary
+files to avoid conversions for line endings. In general, you should
+use C<binmode> any time you want to work with binary data.
+
+Also see L<perlfunc/"binmode"> or L<perlopentut>.
+
+If you're concerned about 8-bit textual data then see L<perllocale>.
+If you want to deal with multibyte characters, however, there are
+some gotchas. See the section on Regular Expressions.
+
+=head2 How do I determine whether a scalar is a number/whole/integer/float?
+
+Assuming that you don't care about IEEE notations like "NaN" or
+"Infinity", you probably just want to use a regular expression:
+
+ use 5.010;
+
+ given( $number ) {
+ when( /\D/ )
+ { say "\thas nondigits"; continue }
+ when( /^\d+\z/ )
+ { say "\tis a whole number"; continue }
+ when( /^-?\d+\z/ )
+ { say "\tis an integer"; continue }
+ when( /^[+-]?\d+\z/ )
+ { say "\tis a +/- integer"; continue }
+ when( /^-?(?:\d+\.?|\.\d)\d*\z/ )
+ { say "\tis a real number"; continue }
+ when( /^[+-]?(?=\.?\d)\d*\.?\d*(?:e[+-]?\d+)?\z/i)
+ { say "\tis a C float" }
+ }
+
+There are also some commonly used modules for the task.
+L<Scalar::Util> (distributed with 5.8) provides access to perl's
+internal function C<looks_like_number> for determining whether a
+variable looks like a number. L<Data::Types> exports functions that
+validate data types using both the above and other regular
+expressions. Thirdly, there is L<Regexp::Common> which has regular
+expressions to match various types of numbers. Those three modules are
+available from the CPAN.
+
+If you're on a POSIX system, Perl supports the C<POSIX::strtod>
+function for converting strings to doubles (and also C<POSIX::strtol>
+for longs). Its semantics are somewhat cumbersome, so here's a
+C<getnum> wrapper function for more convenient access. This function
+takes a string and returns the number it found, or C<undef> for input
+that isn't a C float. The C<is_numeric> function is a front end to
+C<getnum> if you just want to say, "Is this a float?"
+
+ sub getnum {
+ use POSIX qw(strtod);
+ my $str = shift;
+ $str =~ s/^\s+//;
+ $str =~ s/\s+$//;
+ $! = 0;
+ my($num, $unparsed) = strtod($str);
+ if (($str eq '') || ($unparsed != 0) || $!) {
+ return undef;
+ }
+ else {
+ return $num;
+ }
+ }
+
+ sub is_numeric { defined getnum($_[0]) }
+
+Or you could check out the L<String::Scanf> module on the CPAN
+instead.
+
+=head2 How do I keep persistent data across program calls?
+
+For some specific applications, you can use one of the DBM modules.
+See L<AnyDBM_File>. More generically, you should consult the L<FreezeThaw>
+or L<Storable> modules from CPAN. Starting from Perl 5.8, L<Storable> is part
+of the standard distribution. Here's one example using L<Storable>'s C<store>
+and C<retrieve> functions:
+
+ use Storable;
+ store(\%hash, "filename");
+
+ # later on...
+ $href = retrieve("filename"); # by ref
+ %hash = %{ retrieve("filename") }; # direct to hash
+
+=head2 How do I print out or copy a recursive data structure?
+
+The L<Data::Dumper> module on CPAN (or the 5.005 release of Perl) is great
+for printing out data structures. The L<Storable> module on CPAN (or the
+5.8 release of Perl), provides a function called C<dclone> that recursively
+copies its argument.
+
+ use Storable qw(dclone);
+ $r2 = dclone($r1);
+
+Where C<$r1> can be a reference to any kind of data structure you'd like.
+It will be deeply copied. Because C<dclone> takes and returns references,
+you'd have to add extra punctuation if you had a hash of arrays that
+you wanted to copy.
+
+ %newhash = %{ dclone(\%oldhash) };
+
+=head2 How do I define methods for every class/object?
+
+(contributed by Ben Morrow)
+
+You can use the C<UNIVERSAL> class (see L<UNIVERSAL>). However, please
+be very careful to consider the consequences of doing this: adding
+methods to every object is very likely to have unintended
+consequences. If possible, it would be better to have all your object
+inherit from some common base class, or to use an object system like
+Moose that supports roles.
+
+=head2 How do I verify a credit card checksum?
+
+Get the L<Business::CreditCard> module from CPAN.
+
+=head2 How do I pack arrays of doubles or floats for XS code?
+
+The arrays.h/arrays.c code in the L<PGPLOT> module on CPAN does just this.
+If you're doing a lot of float or double processing, consider using
+the L<PDL> module from CPAN instead--it makes number-crunching easy.
+
+See L<http://search.cpan.org/dist/PGPLOT> for the code.
+
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples in this file
+are hereby placed into the public domain. You are permitted and
+encouraged to use this code in your own programs for fun
+or for profit as you see fit. A simple comment in the code giving
+credit would be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq5.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq5.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq5.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1574 @@
+=head1 NAME
+
+perlfaq5 - Files and Formats
+
+=head1 DESCRIPTION
+
+This section deals with I/O and the "f" issues: filehandles, flushing,
+formats, and footers.
+
+=head2 How do I flush/unbuffer an output filehandle? Why must I do this?
+X<flush> X<buffer> X<unbuffer> X<autoflush>
+
+(contributed by brian d foy)
+
+You might like to read Mark Jason Dominus's "Suffering From Buffering"
+at L<http://perl.plover.com/FAQs/Buffering.html> .
+
+Perl normally buffers output so it doesn't make a system call for every
+bit of output. By saving up output, it makes fewer expensive system calls.
+For instance, in this little bit of code, you want to print a dot to the
+screen for every line you process to watch the progress of your program.
+Instead of seeing a dot for every line, Perl buffers the output and you
+have a long wait before you see a row of 50 dots all at once:
+
+ # long wait, then row of dots all at once
+ while( <> ) {
+ print ".";
+ print "\n" unless ++$count % 50;
+
+ #... expensive line processing operations
+ }
+
+To get around this, you have to unbuffer the output filehandle, in this
+case, C<STDOUT>. You can set the special variable C<$|> to a true value
+(mnemonic: making your filehandles "piping hot"):
+
+ $|++;
+
+ # dot shown immediately
+ while( <> ) {
+ print ".";
+ print "\n" unless ++$count % 50;
+
+ #... expensive line processing operations
+ }
+
+The C<$|> is one of the per-filehandle special variables, so each
+filehandle has its own copy of its value. If you want to merge
+standard output and standard error for instance, you have to unbuffer
+each (although STDERR might be unbuffered by default):
+
+ {
+ my $previous_default = select(STDOUT); # save previous default
+ $|++; # autoflush STDOUT
+ select(STDERR);
+ $|++; # autoflush STDERR, to be sure
+ select($previous_default); # restore previous default
+ }
+
+ # now should alternate . and +
+ while( 1 ) {
+ sleep 1;
+ print STDOUT ".";
+ print STDERR "+";
+ print STDOUT "\n" unless ++$count % 25;
+ }
+
+Besides the C<$|> special variable, you can use C<binmode> to give
+your filehandle a C<:unix> layer, which is unbuffered:
+
+ binmode( STDOUT, ":unix" );
+
+ while( 1 ) {
+ sleep 1;
+ print ".";
+ print "\n" unless ++$count % 50;
+ }
+
+For more information on output layers, see the entries for C<binmode>
+and L<open> in L<perlfunc>, and the L<PerlIO> module documentation.
+
+If you are using L<IO::Handle> or one of its subclasses, you can
+call the C<autoflush> method to change the settings of the
+filehandle:
+
+ use IO::Handle;
+ open my( $io_fh ), ">", "output.txt";
+ $io_fh->autoflush(1);
+
+The L<IO::Handle> objects also have a C<flush> method. You can flush
+the buffer any time you want without auto-buffering
+
+ $io_fh->flush;
+
+=head2 How do I change, delete, or insert a line in a file, or append to the beginning of a file?
+X<file, editing>
+
+(contributed by brian d foy)
+
+The basic idea of inserting, changing, or deleting a line from a text
+file involves reading and printing the file to the point you want to
+make the change, making the change, then reading and printing the rest
+of the file. Perl doesn't provide random access to lines (especially
+since the record input separator, C<$/>, is mutable), although modules
+such as L<Tie::File> can fake it.
+
+A Perl program to do these tasks takes the basic form of opening a
+file, printing its lines, then closing the file:
+
+ open my $in, '<', $file or die "Can't read old file: $!";
+ open my $out, '>', "$file.new" or die "Can't write new file: $!";
+
+ while( <$in> ) {
+ print $out $_;
+ }
+
+ close $out;
+
+Within that basic form, add the parts that you need to insert, change,
+or delete lines.
+
+To prepend lines to the beginning, print those lines before you enter
+the loop that prints the existing lines.
+
+ open my $in, '<', $file or die "Can't read old file: $!";
+ open my $out, '>', "$file.new" or die "Can't write new file: $!";
+
+ print $out "# Add this line to the top\n"; # <--- HERE'S THE MAGIC
+
+ while( <$in> ) {
+ print $out $_;
+ }
+
+ close $out;
+
+To change existing lines, insert the code to modify the lines inside
+the C<while> loop. In this case, the code finds all lowercased
+versions of "perl" and uppercases them. The happens for every line, so
+be sure that you're supposed to do that on every line!
+
+ open my $in, '<', $file or die "Can't read old file: $!";
+ open my $out, '>', "$file.new" or die "Can't write new file: $!";
+
+ print $out "# Add this line to the top\n";
+
+ while( <$in> ) {
+ s/\b(perl)\b/Perl/g;
+ print $out $_;
+ }
+
+ close $out;
+
+To change only a particular line, the input line number, C<$.>, is
+useful. First read and print the lines up to the one you want to
+change. Next, read the single line you want to change, change it, and
+print it. After that, read the rest of the lines and print those:
+
+ while( <$in> ) { # print the lines before the change
+ print $out $_;
+ last if $. == 4; # line number before change
+ }
+
+ my $line = <$in>;
+ $line =~ s/\b(perl)\b/Perl/g;
+ print $out $line;
+
+ while( <$in> ) { # print the rest of the lines
+ print $out $_;
+ }
+
+To skip lines, use the looping controls. The C<next> in this example
+skips comment lines, and the C<last> stops all processing once it
+encounters either C<__END__> or C<__DATA__>.
+
+ while( <$in> ) {
+ next if /^\s+#/; # skip comment lines
+ last if /^__(END|DATA)__$/; # stop at end of code marker
+ print $out $_;
+ }
+
+Do the same sort of thing to delete a particular line by using C<next>
+to skip the lines you don't want to show up in the output. This
+example skips every fifth line:
+
+ while( <$in> ) {
+ next unless $. % 5;
+ print $out $_;
+ }
+
+If, for some odd reason, you really want to see the whole file at once
+rather than processing line-by-line, you can slurp it in (as long as
+you can fit the whole thing in memory!):
+
+ open my $in, '<', $file or die "Can't read old file: $!"
+ open my $out, '>', "$file.new" or die "Can't write new file: $!";
+
+ my $content = do { local $/; <$in> }; # slurp!
+
+ # do your magic here
+
+ print $out $content;
+
+Modules such as L<File::Slurp> and L<Tie::File> can help with that
+too. If you can, however, avoid reading the entire file at once. Perl
+won't give that memory back to the operating system until the process
+finishes.
+
+You can also use Perl one-liners to modify a file in-place. The
+following changes all 'Fred' to 'Barney' in F<inFile.txt>, overwriting
+the file with the new contents. With the C<-p> switch, Perl wraps a
+C<while> loop around the code you specify with C<-e>, and C<-i> turns
+on in-place editing. The current line is in C<$_>. With C<-p>, Perl
+automatically prints the value of C<$_> at the end of the loop. See
+L<perlrun> for more details.
+
+ perl -pi -e 's/Fred/Barney/' inFile.txt
+
+To make a backup of C<inFile.txt>, give C<-i> a file extension to add:
+
+ perl -pi.bak -e 's/Fred/Barney/' inFile.txt
+
+To change only the fifth line, you can add a test checking C<$.>, the
+input line number, then only perform the operation when the test
+passes:
+
+ perl -pi -e 's/Fred/Barney/ if $. == 5' inFile.txt
+
+To add lines before a certain line, you can add a line (or lines!)
+before Perl prints C<$_>:
+
+ perl -pi -e 'print "Put before third line\n" if $. == 3' inFile.txt
+
+You can even add a line to the beginning of a file, since the current
+line prints at the end of the loop:
+
+ perl -pi -e 'print "Put before first line\n" if $. == 1' inFile.txt
+
+To insert a line after one already in the file, use the C<-n> switch.
+It's just like C<-p> except that it doesn't print C<$_> at the end of
+the loop, so you have to do that yourself. In this case, print C<$_>
+first, then print the line that you want to add.
+
+ perl -ni -e 'print; print "Put after fifth line\n" if $. == 5' inFile.txt
+
+To delete lines, only print the ones that you want.
+
+ perl -ni -e 'print if /d/' inFile.txt
+
+=head2 How do I count the number of lines in a file?
+X<file, counting lines> X<lines> X<line>
+
+(contributed by brian d foy)
+
+Conceptually, the easiest way to count the lines in a file is to
+simply read them and count them:
+
+ my $count = 0;
+ while( <$fh> ) { $count++; }
+
+You don't really have to count them yourself, though, since Perl
+already does that with the C<$.> variable, which is the current line
+number from the last filehandle read:
+
+ 1 while( <$fh> );
+ my $count = $.;
+
+If you want to use C<$.>, you can reduce it to a simple one-liner,
+like one of these:
+
+ % perl -lne '} print $.; {' file
+
+ % perl -lne 'END { print $. }' file
+
+Those can be rather inefficient though. If they aren't fast enough for
+you, you might just read chunks of data and count the number of
+newlines:
+
+ my $lines = 0;
+ open my($fh), '<:raw', $filename or die "Can't open $filename: $!";
+ while( sysread $fh, $buffer, 4096 ) {
+ $lines += ( $buffer =~ tr/\n// );
+ }
+ close FILE;
+
+However, that doesn't work if the line ending isn't a newline. You
+might change that C<tr///> to a C<s///> so you can count the number of
+times the input record separator, C<$/>, shows up:
+
+ my $lines = 0;
+ open my($fh), '<:raw', $filename or die "Can't open $filename: $!";
+ while( sysread $fh, $buffer, 4096 ) {
+ $lines += ( $buffer =~ s|$/||g; );
+ }
+ close FILE;
+
+If you don't mind shelling out, the C<wc> command is usually the
+fastest, even with the extra interprocess overhead. Ensure that you
+have an untainted filename though:
+
+ #!perl -T
+
+ $ENV{PATH} = undef;
+
+ my $lines;
+ if( $filename =~ /^([0-9a-z_.]+)\z/ ) {
+ $lines = `/usr/bin/wc -l $1`
+ chomp $lines;
+ }
+
+=head2 How do I delete the last N lines from a file?
+X<lines> X<file>
+
+(contributed by brian d foy)
+
+The easiest conceptual solution is to count the lines in the
+file then start at the beginning and print the number of lines
+(minus the last N) to a new file.
+
+Most often, the real question is how you can delete the last N lines
+without making more than one pass over the file, or how to do it
+without a lot of copying. The easy concept is the hard reality when
+you might have millions of lines in your file.
+
+One trick is to use L<File::ReadBackwards>, which starts at the end of
+the file. That module provides an object that wraps the real filehandle
+to make it easy for you to move around the file. Once you get to the
+spot you need, you can get the actual filehandle and work with it as
+normal. In this case, you get the file position at the end of the last
+line you want to keep and truncate the file to that point:
+
+ use File::ReadBackwards;
+
+ my $filename = 'test.txt';
+ my $Lines_to_truncate = 2;
+
+ my $bw = File::ReadBackwards->new( $filename )
+ or die "Could not read backwards in [$filename]: $!";
+
+ my $lines_from_end = 0;
+ until( $bw->eof or $lines_from_end == $Lines_to_truncate ) {
+ print "Got: ", $bw->readline;
+ $lines_from_end++;
+ }
+
+ truncate( $filename, $bw->tell );
+
+The L<File::ReadBackwards> module also has the advantage of setting
+the input record separator to a regular expression.
+
+You can also use the L<Tie::File> module which lets you access
+the lines through a tied array. You can use normal array operations
+to modify your file, including setting the last index and using
+C<splice>.
+
+=head2 How can I use Perl's C<-i> option from within a program?
+X<-i> X<in-place>
+
+C<-i> sets the value of Perl's C<$^I> variable, which in turn affects
+the behavior of C<< <> >>; see L<perlrun> for more details. By
+modifying the appropriate variables directly, you can get the same
+behavior within a larger program. For example:
+
+ # ...
+ {
+ local($^I, @ARGV) = ('.orig', glob("*.c"));
+ while (<>) {
+ if ($. == 1) {
+ print "This line should appear at the top of each file\n";
+ }
+ s/\b(p)earl\b/${1}erl/i; # Correct typos, preserving case
+ print;
+ close ARGV if eof; # Reset $.
+ }
+ }
+ # $^I and @ARGV return to their old values here
+
+This block modifies all the C<.c> files in the current directory,
+leaving a backup of the original data from each file in a new
+C<.c.orig> file.
+
+=head2 How can I copy a file?
+X<copy> X<file, copy> X<File::Copy>
+
+(contributed by brian d foy)
+
+Use the L<File::Copy> module. It comes with Perl and can do a
+true copy across file systems, and it does its magic in
+a portable fashion.
+
+ use File::Copy;
+
+ copy( $original, $new_copy ) or die "Copy failed: $!";
+
+If you can't use L<File::Copy>, you'll have to do the work yourself:
+open the original file, open the destination file, then print
+to the destination file as you read the original. You also have to
+remember to copy the permissions, owner, and group to the new file.
+
+=head2 How do I make a temporary file name?
+X<file, temporary>
+
+If you don't need to know the name of the file, you can use C<open()>
+with C<undef> in place of the file name. In Perl 5.8 or later, the
+C<open()> function creates an anonymous temporary file:
+
+ open my $tmp, '+>', undef or die $!;
+
+Otherwise, you can use the File::Temp module.
+
+ use File::Temp qw/ tempfile tempdir /;
+
+ my $dir = tempdir( CLEANUP => 1 );
+ ($fh, $filename) = tempfile( DIR => $dir );
+
+ # or if you don't need to know the filename
+
+ my $fh = tempfile( DIR => $dir );
+
+The File::Temp has been a standard module since Perl 5.6.1. If you
+don't have a modern enough Perl installed, use the C<new_tmpfile>
+class method from the IO::File module to get a filehandle opened for
+reading and writing. Use it if you don't need to know the file's name:
+
+ use IO::File;
+ my $fh = IO::File->new_tmpfile()
+ or die "Unable to make new temporary file: $!";
+
+If you're committed to creating a temporary file by hand, use the
+process ID and/or the current time-value. If you need to have many
+temporary files in one process, use a counter:
+
+ BEGIN {
+ use Fcntl;
+ my $temp_dir = -d '/tmp' ? '/tmp' : $ENV{TMPDIR} || $ENV{TEMP};
+ my $base_name = sprintf "%s/%d-%d-0000", $temp_dir, $$, time;
+
+ sub temp_file {
+ my $fh;
+ my $count = 0;
+ until( defined(fileno($fh)) || $count++ > 100 ) {
+ $base_name =~ s/-(\d+)$/"-" . (1 + $1)/e;
+ # O_EXCL is required for security reasons.
+ sysopen $fh, $base_name, O_WRONLY|O_EXCL|O_CREAT;
+ }
+
+ if( defined fileno($fh) ) {
+ return ($fh, $base_name);
+ }
+ else {
+ return ();
+ }
+ }
+ }
+
+=head2 How can I manipulate fixed-record-length files?
+X<fixed-length> X<file, fixed-length records>
+
+The most efficient way is using L<pack()|perlfunc/"pack"> and
+L<unpack()|perlfunc/"unpack">. This is faster than using
+L<substr()|perlfunc/"substr"> when taking many, many strings. It is
+slower for just a few.
+
+Here is a sample chunk of code to break up and put back together again
+some fixed-format input lines, in this case from the output of a normal,
+Berkeley-style ps:
+
+ # sample input line:
+ # 15158 p5 T 0:00 perl /home/tchrist/scripts/now-what
+ my $PS_T = 'A6 A4 A7 A5 A*';
+ open my $ps, '-|', 'ps';
+ print scalar <$ps>;
+ my @fields = qw( pid tt stat time command );
+ while (<$ps>) {
+ my %process;
+ @process{@fields} = unpack($PS_T, $_);
+ for my $field ( @fields ) {
+ print "$field: <$process{$field}>\n";
+ }
+ print 'line=', pack($PS_T, @process{@fields} ), "\n";
+ }
+
+We've used a hash slice in order to easily handle the fields of each row.
+Storing the keys in an array makes it easy to operate on them as a
+group or loop over them with C<for>. It also avoids polluting the program
+with global variables and using symbolic references.
+
+=head2 How can I make a filehandle local to a subroutine? How do I pass filehandles between subroutines? How do I make an array of filehandles?
+X<filehandle, local> X<filehandle, passing> X<filehandle, reference>
+
+As of perl5.6, open() autovivifies file and directory handles
+as references if you pass it an uninitialized scalar variable.
+You can then pass these references just like any other scalar,
+and use them in the place of named handles.
+
+ open my $fh, $file_name;
+
+ open local $fh, $file_name;
+
+ print $fh "Hello World!\n";
+
+ process_file( $fh );
+
+If you like, you can store these filehandles in an array or a hash.
+If you access them directly, they aren't simple scalars and you
+need to give C<print> a little help by placing the filehandle
+reference in braces. Perl can only figure it out on its own when
+the filehandle reference is a simple scalar.
+
+ my @fhs = ( $fh1, $fh2, $fh3 );
+
+ for( $i = 0; $i <= $#fhs; $i++ ) {
+ print {$fhs[$i]} "just another Perl answer, \n";
+ }
+
+Before perl5.6, you had to deal with various typeglob idioms
+which you may see in older code.
+
+ open FILE, "> $filename";
+ process_typeglob( *FILE );
+ process_reference( \*FILE );
+
+ sub process_typeglob { local *FH = shift; print FH "Typeglob!" }
+ sub process_reference { local $fh = shift; print $fh "Reference!" }
+
+If you want to create many anonymous handles, you should
+check out the Symbol or IO::Handle modules.
+
+=head2 How can I use a filehandle indirectly?
+X<filehandle, indirect>
+
+An indirect filehandle is the use of something other than a symbol
+in a place that a filehandle is expected. Here are ways
+to get indirect filehandles:
+
+ $fh = SOME_FH; # bareword is strict-subs hostile
+ $fh = "SOME_FH"; # strict-refs hostile; same package only
+ $fh = *SOME_FH; # typeglob
+ $fh = \*SOME_FH; # ref to typeglob (bless-able)
+ $fh = *SOME_FH{IO}; # blessed IO::Handle from *SOME_FH typeglob
+
+Or, you can use the C<new> method from one of the IO::* modules to
+create an anonymous filehandle and store that in a scalar variable.
+
+ use IO::Handle; # 5.004 or higher
+ my $fh = IO::Handle->new();
+
+Then use any of those as you would a normal filehandle. Anywhere that
+Perl is expecting a filehandle, an indirect filehandle may be used
+instead. An indirect filehandle is just a scalar variable that contains
+a filehandle. Functions like C<print>, C<open>, C<seek>, or
+the C<< <FH> >> diamond operator will accept either a named filehandle
+or a scalar variable containing one:
+
+ ($ifh, $ofh, $efh) = (*STDIN, *STDOUT, *STDERR);
+ print $ofh "Type it: ";
+ my $got = <$ifh>
+ print $efh "What was that: $got";
+
+If you're passing a filehandle to a function, you can write
+the function in two ways:
+
+ sub accept_fh {
+ my $fh = shift;
+ print $fh "Sending to indirect filehandle\n";
+ }
+
+Or it can localize a typeglob and use the filehandle directly:
+
+ sub accept_fh {
+ local *FH = shift;
+ print FH "Sending to localized filehandle\n";
+ }
+
+Both styles work with either objects or typeglobs of real filehandles.
+(They might also work with strings under some circumstances, but this
+is risky.)
+
+ accept_fh(*STDOUT);
+ accept_fh($handle);
+
+In the examples above, we assigned the filehandle to a scalar variable
+before using it. That is because only simple scalar variables, not
+expressions or subscripts of hashes or arrays, can be used with
+built-ins like C<print>, C<printf>, or the diamond operator. Using
+something other than a simple scalar variable as a filehandle is
+illegal and won't even compile:
+
+ my @fd = (*STDIN, *STDOUT, *STDERR);
+ print $fd[1] "Type it: "; # WRONG
+ my $got = <$fd[0]> # WRONG
+ print $fd[2] "What was that: $got"; # WRONG
+
+With C<print> and C<printf>, you get around this by using a block and
+an expression where you would place the filehandle:
+
+ print { $fd[1] } "funny stuff\n";
+ printf { $fd[1] } "Pity the poor %x.\n", 3_735_928_559;
+ # Pity the poor deadbeef.
+
+That block is a proper block like any other, so you can put more
+complicated code there. This sends the message out to one of two places:
+
+ my $ok = -x "/bin/cat";
+ print { $ok ? $fd[1] : $fd[2] } "cat stat $ok\n";
+ print { $fd[ 1+ ($ok || 0) ] } "cat stat $ok\n";
+
+This approach of treating C<print> and C<printf> like object methods
+calls doesn't work for the diamond operator. That's because it's a
+real operator, not just a function with a comma-less argument. Assuming
+you've been storing typeglobs in your structure as we did above, you
+can use the built-in function named C<readline> to read a record just
+as C<< <> >> does. Given the initialization shown above for @fd, this
+would work, but only because readline() requires a typeglob. It doesn't
+work with objects or strings, which might be a bug we haven't fixed yet.
+
+ $got = readline($fd[0]);
+
+Let it be noted that the flakiness of indirect filehandles is not
+related to whether they're strings, typeglobs, objects, or anything else.
+It's the syntax of the fundamental operators. Playing the object
+game doesn't help you at all here.
+
+=head2 How can I set up a footer format to be used with write()?
+X<footer>
+
+There's no builtin way to do this, but L<perlform> has a couple of
+techniques to make it possible for the intrepid hacker.
+
+=head2 How can I write() into a string?
+X<write, into a string>
+
+(contributed by brian d foy)
+
+If you want to C<write> into a string, you just have to <open> a
+filehandle to a string, which Perl has been able to do since Perl 5.6:
+
+ open FH, '>', \my $string;
+ write( FH );
+
+Since you want to be a good programmer, you probably want to use a lexical
+filehandle, even though formats are designed to work with bareword filehandles
+since the default format names take the filehandle name. However, you can
+control this with some Perl special per-filehandle variables: C<$^>, which
+names the top-of-page format, and C<$~> which shows the line format. You have
+to change the default filehandle to set these variables:
+
+ open my($fh), '>', \my $string;
+
+ { # set per-filehandle variables
+ my $old_fh = select( $fh );
+ $~ = 'ANIMAL';
+ $^ = 'ANIMAL_TOP';
+ select( $old_fh );
+ }
+
+ format ANIMAL_TOP =
+ ID Type Name
+ .
+
+ format ANIMAL =
+ @## @<<< @<<<<<<<<<<<<<<
+ $id, $type, $name
+ .
+
+Although write can work with lexical or package variables, whatever variables
+you use have to scope in the format. That most likely means you'll want to
+localize some package variables:
+
+ {
+ local( $id, $type, $name ) = qw( 12 cat Buster );
+ write( $fh );
+ }
+
+ print $string;
+
+There are also some tricks that you can play with C<formline> and the
+accumulator variable C<$^A>, but you lose a lot of the value of formats
+since C<formline> won't handle paging and so on. You end up reimplementing
+formats when you use them.
+
+=head2 How can I open a filehandle to a string?
+X<string> X<open> X<IO::String> X<filehandle>
+
+(contributed by Peter J. Holzer, hjp-usenet2 at hjp.at)
+
+Since Perl 5.8.0 a file handle referring to a string can be created by
+calling open with a reference to that string instead of the filename.
+This file handle can then be used to read from or write to the string:
+
+ open(my $fh, '>', \$string) or die "Could not open string for writing";
+ print $fh "foo\n";
+ print $fh "bar\n"; # $string now contains "foo\nbar\n"
+
+ open(my $fh, '<', \$string) or die "Could not open string for reading";
+ my $x = <$fh>; # $x now contains "foo\n"
+
+With older versions of Perl, the L<IO::String> module provides similar
+functionality.
+
+=head2 How can I output my numbers with commas added?
+X<number, commify>
+
+(contributed by brian d foy and Benjamin Goldberg)
+
+You can use L<Number::Format> to separate places in a number.
+It handles locale information for those of you who want to insert
+full stops instead (or anything else that they want to use,
+really).
+
+This subroutine will add commas to your number:
+
+ sub commify {
+ local $_ = shift;
+ 1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
+ return $_;
+ }
+
+This regex from Benjamin Goldberg will add commas to numbers:
+
+ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g;
+
+It is easier to see with comments:
+
+ s/(
+ ^[-+]? # beginning of number.
+ \d+? # first digits before first comma
+ (?= # followed by, (but not included in the match) :
+ (?>(?:\d{3})+) # some positive multiple of three digits.
+ (?!\d) # an *exact* multiple, not x * 3 + 1 or whatever.
+ )
+ | # or:
+ \G\d{3} # after the last group, get three digits
+ (?=\d) # but they have to have more digits after them.
+ )/$1,/xg;
+
+=head2 How can I translate tildes (~) in a filename?
+X<tilde> X<tilde expansion>
+
+Use the E<lt>E<gt> (C<glob()>) operator, documented in L<perlfunc>.
+Versions of Perl older than 5.6 require that you have a shell
+installed that groks tildes. Later versions of Perl have this feature
+built in. The L<File::KGlob> module (available from CPAN) gives more
+portable glob functionality.
+
+Within Perl, you may use this directly:
+
+ $filename =~ s{
+ ^ ~ # find a leading tilde
+ ( # save this in $1
+ [^/] # a non-slash character
+ * # repeated 0 or more times (0 means me)
+ )
+ }{
+ $1
+ ? (getpwnam($1))[7]
+ : ( $ENV{HOME} || $ENV{LOGDIR} )
+ }ex;
+
+=head2 How come when I open a file read-write it wipes it out?
+X<clobber> X<read-write> X<clobbering> X<truncate> X<truncating>
+
+Because you're using something like this, which truncates the file
+I<then> gives you read-write access:
+
+ open my $fh, '+>', '/path/name'; # WRONG (almost always)
+
+Whoops. You should instead use this, which will fail if the file
+doesn't exist:
+
+ open my $fh, '+<', '/path/name'; # open for update
+
+Using ">" always clobbers or creates. Using "<" never does
+either. The "+" doesn't change this.
+
+Here are examples of many kinds of file opens. Those using C<sysopen>
+all assume that you've pulled in the constants from L<Fcntl>:
+
+ use Fcntl;
+
+To open file for reading:
+
+ open my $fh, '<', $path or die $!;
+ sysopen my $fh, $path, O_RDONLY or die $!;
+
+To open file for writing, create new file if needed or else truncate old file:
+
+ open my $fh, '>', $path or die $!;
+ sysopen my $fh, $path, O_WRONLY|O_TRUNC|O_CREAT or die $!;
+ sysopen my $fh, $path, O_WRONLY|O_TRUNC|O_CREAT, 0666 or die $!;
+
+To open file for writing, create new file, file must not exist:
+
+ sysopen my $fh, $path, O_WRONLY|O_EXCL|O_CREAT or die $!;
+ sysopen my $fh, $path, O_WRONLY|O_EXCL|O_CREAT, 0666 or die $!;
+
+To open file for appending, create if necessary:
+
+ open my $fh, '>>' $path or die $!;
+ sysopen my $fh, $path, O_WRONLY|O_APPEND|O_CREAT or die $!;
+ sysopen my $fh, $path, O_WRONLY|O_APPEND|O_CREAT, 0666 or die $!;
+
+To open file for appending, file must exist:
+
+ sysopen my $fh, $path, O_WRONLY|O_APPEND or die $!;
+
+To open file for update, file must exist:
+
+ open my $fh, '+<', $path or die $!;
+ sysopen my $fh, $path, O_RDWR or die $!;
+
+To open file for update, create file if necessary:
+
+ sysopen my $fh, $path, O_RDWR|O_CREAT or die $!;
+ sysopen my $fh, $path, O_RDWR|O_CREAT, 0666 or die $!;
+
+To open file for update, file must not exist:
+
+ sysopen my $fh, $path, O_RDWR|O_EXCL|O_CREAT or die $!;
+ sysopen my $fh, $path, O_RDWR|O_EXCL|O_CREAT, 0666 or die $!;
+
+To open a file without blocking, creating if necessary:
+
+ sysopen my $fh, '/foo/somefile', O_WRONLY|O_NDELAY|O_CREAT
+ or die "can't open /foo/somefile: $!":
+
+Be warned that neither creation nor deletion of files is guaranteed to
+be an atomic operation over NFS. That is, two processes might both
+successfully create or unlink the same file! Therefore O_EXCL
+isn't as exclusive as you might wish.
+
+See also L<perlopentut>.
+
+=head2 Why do I sometimes get an "Argument list too long" when I use E<lt>*E<gt>?
+X<argument list too long>
+
+The C<< <> >> operator performs a globbing operation (see above).
+In Perl versions earlier than v5.6.0, the internal glob() operator forks
+csh(1) to do the actual glob expansion, but
+csh can't handle more than 127 items and so gives the error message
+C<Argument list too long>. People who installed tcsh as csh won't
+have this problem, but their users may be surprised by it.
+
+To get around this, either upgrade to Perl v5.6.0 or later, do the glob
+yourself with readdir() and patterns, or use a module like L<File::Glob>,
+one that doesn't use the shell to do globbing.
+
+=head2 How can I open a file with a leading ">" or trailing blanks?
+X<filename, special characters>
+
+(contributed by Brian McCauley)
+
+The special two-argument form of Perl's open() function ignores
+trailing blanks in filenames and infers the mode from certain leading
+characters (or a trailing "|"). In older versions of Perl this was the
+only version of open() and so it is prevalent in old code and books.
+
+Unless you have a particular reason to use the two-argument form you
+should use the three-argument form of open() which does not treat any
+characters in the filename as special.
+
+ open my $fh, "<", " file "; # filename is " file "
+ open my $fh, ">", ">file"; # filename is ">file"
+
+=head2 How can I reliably rename a file?
+X<rename> X<mv> X<move> X<file, rename>
+
+If your operating system supports a proper mv(1) utility or its
+functional equivalent, this works:
+
+ rename($old, $new) or system("mv", $old, $new);
+
+It may be more portable to use the L<File::Copy> module instead.
+You just copy to the new file to the new name (checking return
+values), then delete the old one. This isn't really the same
+semantically as a C<rename()>, which preserves meta-information like
+permissions, timestamps, inode info, etc.
+
+=head2 How can I lock a file?
+X<lock> X<file, lock> X<flock>
+
+Perl's builtin flock() function (see L<perlfunc> for details) will call
+flock(2) if that exists, fcntl(2) if it doesn't (on perl version 5.004 and
+later), and lockf(3) if neither of the two previous system calls exists.
+On some systems, it may even use a different form of native locking.
+Here are some gotchas with Perl's flock():
+
+=over 4
+
+=item 1
+
+Produces a fatal error if none of the three system calls (or their
+close equivalent) exists.
+
+=item 2
+
+lockf(3) does not provide shared locking, and requires that the
+filehandle be open for writing (or appending, or read/writing).
+
+=item 3
+
+Some versions of flock() can't lock files over a network (e.g. on NFS file
+systems), so you'd need to force the use of fcntl(2) when you build Perl.
+But even this is dubious at best. See the flock entry of L<perlfunc>
+and the F<INSTALL> file in the source distribution for information on
+building Perl to do this.
+
+Two potentially non-obvious but traditional flock semantics are that
+it waits indefinitely until the lock is granted, and that its locks are
+I<merely advisory>. Such discretionary locks are more flexible, but
+offer fewer guarantees. This means that files locked with flock() may
+be modified by programs that do not also use flock(). Cars that stop
+for red lights get on well with each other, but not with cars that don't
+stop for red lights. See the perlport manpage, your port's specific
+documentation, or your system-specific local manpages for details. It's
+best to assume traditional behavior if you're writing portable programs.
+(If you're not, you should as always feel perfectly free to write
+for your own system's idiosyncrasies (sometimes called "features").
+Slavish adherence to portability concerns shouldn't get in the way of
+your getting your job done.)
+
+For more information on file locking, see also
+L<perlopentut/"File Locking"> if you have it (new for 5.6).
+
+=back
+
+=head2 Why can't I just open(FH, "E<gt>file.lock")?
+X<lock, lockfile race condition>
+
+A common bit of code B<NOT TO USE> is this:
+
+ sleep(3) while -e 'file.lock'; # PLEASE DO NOT USE
+ open my $lock, '>', 'file.lock'; # THIS BROKEN CODE
+
+This is a classic race condition: you take two steps to do something
+which must be done in one. That's why computer hardware provides an
+atomic test-and-set instruction. In theory, this "ought" to work:
+
+ sysopen my $fh, "file.lock", O_WRONLY|O_EXCL|O_CREAT
+ or die "can't open file.lock: $!";
+
+except that lamentably, file creation (and deletion) is not atomic
+over NFS, so this won't work (at least, not every time) over the net.
+Various schemes involving link() have been suggested, but
+these tend to involve busy-wait, which is also less than desirable.
+
+=head2 I still don't get locking. I just want to increment the number in the file. How can I do this?
+X<counter> X<file, counter>
+
+Didn't anyone ever tell you web-page hit counters were useless?
+They don't count number of hits, they're a waste of time, and they serve
+only to stroke the writer's vanity. It's better to pick a random number;
+they're more realistic.
+
+Anyway, this is what you can do if you can't help yourself.
+
+ use Fcntl qw(:DEFAULT :flock);
+ sysopen my $fh, "numfile", O_RDWR|O_CREAT or die "can't open numfile: $!";
+ flock $fh, LOCK_EX or die "can't flock numfile: $!";
+ my $num = <$fh> || 0;
+ seek $fh, 0, 0 or die "can't rewind numfile: $!";
+ truncate $fh, 0 or die "can't truncate numfile: $!";
+ (print $fh $num+1, "\n") or die "can't write numfile: $!";
+ close $fh or die "can't close numfile: $!";
+
+Here's a much better web-page hit counter:
+
+ $hits = int( (time() - 850_000_000) / rand(1_000) );
+
+If the count doesn't impress your friends, then the code might. :-)
+
+=head2 All I want to do is append a small amount of text to the end of a file. Do I still have to use locking?
+X<append> X<file, append>
+
+If you are on a system that correctly implements C<flock> and you use
+the example appending code from "perldoc -f flock" everything will be
+OK even if the OS you are on doesn't implement append mode correctly
+(if such a system exists). So if you are happy to restrict yourself to
+OSs that implement C<flock> (and that's not really much of a
+restriction) then that is what you should do.
+
+If you know you are only going to use a system that does correctly
+implement appending (i.e. not Win32) then you can omit the C<seek>
+from the code in the previous answer.
+
+If you know you are only writing code to run on an OS and filesystem
+that does implement append mode correctly (a local filesystem on a
+modern Unix for example), and you keep the file in block-buffered mode
+and you write less than one buffer-full of output between each manual
+flushing of the buffer then each bufferload is almost guaranteed to be
+written to the end of the file in one chunk without getting
+intermingled with anyone else's output. You can also use the
+C<syswrite> function which is simply a wrapper around your system's
+C<write(2)> system call.
+
+There is still a small theoretical chance that a signal will interrupt
+the system-level C<write()> operation before completion. There is also
+a possibility that some STDIO implementations may call multiple system
+level C<write()>s even if the buffer was empty to start. There may be
+some systems where this probability is reduced to zero, and this is
+not a concern when using C<:perlio> instead of your system's STDIO.
+
+=head2 How do I randomly update a binary file?
+X<file, binary patch>
+
+If you're just trying to patch a binary, in many cases something as
+simple as this works:
+
+ perl -i -pe 's{window manager}{window mangler}g' /usr/bin/emacs
+
+However, if you have fixed sized records, then you might do something more
+like this:
+
+ my $RECSIZE = 220; # size of record, in bytes
+ my $recno = 37; # which record to update
+ open my $fh, '+<', 'somewhere' or die "can't update somewhere: $!";
+ seek $fh, $recno * $RECSIZE, 0;
+ read $fh, $record, $RECSIZE == $RECSIZE or die "can't read record $recno: $!";
+ # munge the record
+ seek $fh, -$RECSIZE, 1;
+ print $fh $record;
+ close $fh;
+
+Locking and error checking are left as an exercise for the reader.
+Don't forget them or you'll be quite sorry.
+
+=head2 How do I get a file's timestamp in perl?
+X<timestamp> X<file, timestamp>
+
+If you want to retrieve the time at which the file was last read,
+written, or had its meta-data (owner, etc) changed, you use the B<-A>,
+B<-M>, or B<-C> file test operations as documented in L<perlfunc>.
+These retrieve the age of the file (measured against the start-time of
+your program) in days as a floating point number. Some platforms may
+not have all of these times. See L<perlport> for details. To retrieve
+the "raw" time in seconds since the epoch, you would call the stat
+function, then use C<localtime()>, C<gmtime()>, or
+C<POSIX::strftime()> to convert this into human-readable form.
+
+Here's an example:
+
+ my $write_secs = (stat($file))[9];
+ printf "file %s updated at %s\n", $file,
+ scalar localtime($write_secs);
+
+If you prefer something more legible, use the File::stat module
+(part of the standard distribution in version 5.004 and later):
+
+ # error checking left as an exercise for reader.
+ use File::stat;
+ use Time::localtime;
+ my $date_string = ctime(stat($file)->mtime);
+ print "file $file updated at $date_string\n";
+
+The POSIX::strftime() approach has the benefit of being,
+in theory, independent of the current locale. See L<perllocale>
+for details.
+
+=head2 How do I set a file's timestamp in perl?
+X<timestamp> X<file, timestamp>
+
+You use the utime() function documented in L<perlfunc/utime>.
+By way of example, here's a little program that copies the
+read and write times from its first argument to all the rest
+of them.
+
+ if (@ARGV < 2) {
+ die "usage: cptimes timestamp_file other_files ...\n";
+ }
+ my $timestamp = shift;
+ my($atime, $mtime) = (stat($timestamp))[8,9];
+ utime $atime, $mtime, @ARGV;
+
+Error checking is, as usual, left as an exercise for the reader.
+
+The perldoc for utime also has an example that has the same
+effect as touch(1) on files that I<already exist>.
+
+Certain file systems have a limited ability to store the times
+on a file at the expected level of precision. For example, the
+FAT and HPFS filesystem are unable to create dates on files with
+a finer granularity than two seconds. This is a limitation of
+the filesystems, not of utime().
+
+=head2 How do I print to more than one file at once?
+X<print, to multiple files>
+
+To connect one filehandle to several output filehandles,
+you can use the L<IO::Tee> or L<Tie::FileHandle::Multiplex> modules.
+
+If you only have to do this once, you can print individually
+to each filehandle.
+
+ for my $fh ($fh1, $fh2, $fh3) { print $fh "whatever\n" }
+
+=head2 How can I read in an entire file all at once?
+X<slurp> X<file, slurping>
+
+The customary Perl approach for processing all the lines in a file is to
+do so one line at a time:
+
+ open my $input, '<', $file or die "can't open $file: $!";
+ while (<$input>) {
+ chomp;
+ # do something with $_
+ }
+ close $input or die "can't close $file: $!";
+
+This is tremendously more efficient than reading the entire file into
+memory as an array of lines and then processing it one element at a time,
+which is often--if not almost always--the wrong approach. Whenever
+you see someone do this:
+
+ my @lines = <INPUT>;
+
+You should think long and hard about why you need everything loaded at
+once. It's just not a scalable solution.
+
+If you "mmap" the file with the File::Map module from
+CPAN, you can virtually load the entire file into a
+string without actually storing it in memory:
+
+ use File::Map qw(map_file);
+
+ map_file my $string, $filename;
+
+Once mapped, you can treat C<$string> as you would any other string.
+Since you don't necessarily have to load the data, mmap-ing can be
+very fast and may not increase your memory footprint.
+
+You might also find it more
+fun to use the standard L<Tie::File> module, or the L<DB_File> module's
+C<$DB_RECNO> bindings, which allow you to tie an array to a file so that
+accessing an element of the array actually accesses the corresponding
+line in the file.
+
+If you want to load the entire file, you can use the L<File::Slurp>
+module to do it in one one simple and efficient step:
+
+ use File::Slurp;
+
+ my $all_of_it = read_file($filename); # entire file in scalar
+ my @all_lines = read_file($filename); # one line per element
+
+Or you can read the entire file contents into a scalar like this:
+
+ my $var;
+ {
+ local $/;
+ open my $fh, '<', $file or die "can't open $file: $!";
+ $var = <$fh>;
+ }
+
+That temporarily undefs your record separator, and will automatically
+close the file at block exit. If the file is already open, just use this:
+
+ my $var = do { local $/; <$fh> };
+
+You can also use a localized C<@ARGV> to eliminate the C<open>:
+
+ my $var = do { local( @ARGV, $/ ) = $file; <> };
+
+For ordinary files you can also use the C<read> function.
+
+ read( $fh, $var, -s $fh );
+
+That third argument tests the byte size of the data on the C<$fh> filehandle
+and reads that many bytes into the buffer C<$var>.
+
+=head2 How can I read in a file by paragraphs?
+X<file, reading by paragraphs>
+
+Use the C<$/> variable (see L<perlvar> for details). You can either
+set it to C<""> to eliminate empty paragraphs (C<"abc\n\n\n\ndef">,
+for instance, gets treated as two paragraphs and not three), or
+C<"\n\n"> to accept empty paragraphs.
+
+Note that a blank line must have no blanks in it. Thus
+S<C<"fred\n \nstuff\n\n">> is one paragraph, but C<"fred\n\nstuff\n\n"> is two.
+
+=head2 How can I read a single character from a file? From the keyboard?
+X<getc> X<file, reading one character at a time>
+
+You can use the builtin C<getc()> function for most filehandles, but
+it won't (easily) work on a terminal device. For STDIN, either use
+the Term::ReadKey module from CPAN or use the sample code in
+L<perlfunc/getc>.
+
+If your system supports the portable operating system programming
+interface (POSIX), you can use the following code, which you'll note
+turns off echo processing as well.
+
+ #!/usr/bin/perl -w
+ use strict;
+ $| = 1;
+ for (1..4) {
+ print "gimme: ";
+ my $got = getone();
+ print "--> $got\n";
+ }
+ exit;
+
+ BEGIN {
+ use POSIX qw(:termios_h);
+
+ my ($term, $oterm, $echo, $noecho, $fd_stdin);
+
+ my $fd_stdin = fileno(STDIN);
+
+ $term = POSIX::Termios->new();
+ $term->getattr($fd_stdin);
+ $oterm = $term->getlflag();
+
+ $echo = ECHO | ECHOK | ICANON;
+ $noecho = $oterm & ~$echo;
+
+ sub cbreak {
+ $term->setlflag($noecho);
+ $term->setcc(VTIME, 1);
+ $term->setattr($fd_stdin, TCSANOW);
+ }
+
+ sub cooked {
+ $term->setlflag($oterm);
+ $term->setcc(VTIME, 0);
+ $term->setattr($fd_stdin, TCSANOW);
+ }
+
+ sub getone {
+ my $key = '';
+ cbreak();
+ sysread(STDIN, $key, 1);
+ cooked();
+ return $key;
+ }
+ }
+
+ END { cooked() }
+
+The Term::ReadKey module from CPAN may be easier to use. Recent versions
+include also support for non-portable systems as well.
+
+ use Term::ReadKey;
+ open my $tty, '<', '/dev/tty';
+ print "Gimme a char: ";
+ ReadMode "raw";
+ my $key = ReadKey 0, $tty;
+ ReadMode "normal";
+ printf "\nYou said %s, char number %03d\n",
+ $key, ord $key;
+
+=head2 How can I tell whether there's a character waiting on a filehandle?
+
+The very first thing you should do is look into getting the Term::ReadKey
+extension from CPAN. As we mentioned earlier, it now even has limited
+support for non-portable (read: not open systems, closed, proprietary,
+not POSIX, not Unix, etc.) systems.
+
+You should also check out the Frequently Asked Questions list in
+comp.unix.* for things like this: the answer is essentially the same.
+It's very system-dependent. Here's one solution that works on BSD
+systems:
+
+ sub key_ready {
+ my($rin, $nfd);
+ vec($rin, fileno(STDIN), 1) = 1;
+ return $nfd = select($rin,undef,undef,0);
+ }
+
+If you want to find out how many characters are waiting, there's
+also the FIONREAD ioctl call to be looked at. The I<h2ph> tool that
+comes with Perl tries to convert C include files to Perl code, which
+can be C<require>d. FIONREAD ends up defined as a function in the
+I<sys/ioctl.ph> file:
+
+ require 'sys/ioctl.ph';
+
+ $size = pack("L", 0);
+ ioctl(FH, FIONREAD(), $size) or die "Couldn't call ioctl: $!\n";
+ $size = unpack("L", $size);
+
+If I<h2ph> wasn't installed or doesn't work for you, you can
+I<grep> the include files by hand:
+
+ % grep FIONREAD /usr/include/*/*
+ /usr/include/asm/ioctls.h:#define FIONREAD 0x541B
+
+Or write a small C program using the editor of champions:
+
+ % cat > fionread.c
+ #include <sys/ioctl.h>
+ main() {
+ printf("%#08x\n", FIONREAD);
+ }
+ ^D
+ % cc -o fionread fionread.c
+ % ./fionread
+ 0x4004667f
+
+And then hard-code it, leaving porting as an exercise to your successor.
+
+ $FIONREAD = 0x4004667f; # XXX: opsys dependent
+
+ $size = pack("L", 0);
+ ioctl(FH, $FIONREAD, $size) or die "Couldn't call ioctl: $!\n";
+ $size = unpack("L", $size);
+
+FIONREAD requires a filehandle connected to a stream, meaning that sockets,
+pipes, and tty devices work, but I<not> files.
+
+=head2 How do I do a C<tail -f> in perl?
+X<tail> X<IO::Handle> X<File::Tail> X<clearerr>
+
+First try
+
+ seek($gw_fh, 0, 1);
+
+The statement C<seek($gw_fh, 0, 1)> doesn't change the current position,
+but it does clear the end-of-file condition on the handle, so that the
+next C<< <$gw_fh> >> makes Perl try again to read something.
+
+If that doesn't work (it relies on features of your stdio implementation),
+then you need something more like this:
+
+ for (;;) {
+ for ($curpos = tell($gw_fh); <$gw_fh>; $curpos =tell($gw_fh)) {
+ # search for some stuff and put it into files
+ }
+ # sleep for a while
+ seek($gw_fh, $curpos, 0); # seek to where we had been
+ }
+
+If this still doesn't work, look into the C<clearerr> method
+from L<IO::Handle>, which resets the error and end-of-file states
+on the handle.
+
+There's also a L<File::Tail> module from CPAN.
+
+=head2 How do I dup() a filehandle in Perl?
+X<dup>
+
+If you check L<perlfunc/open>, you'll see that several of the ways
+to call open() should do the trick. For example:
+
+ open my $log, '>>', '/foo/logfile';
+ open STDERR, '>&', $log;
+
+Or even with a literal numeric descriptor:
+
+ my $fd = $ENV{MHCONTEXTFD};
+ open $mhcontext, "<&=$fd"; # like fdopen(3S)
+
+Note that "<&STDIN" makes a copy, but "<&=STDIN" makes
+an alias. That means if you close an aliased handle, all
+aliases become inaccessible. This is not true with
+a copied one.
+
+Error checking, as always, has been left as an exercise for the reader.
+
+=head2 How do I close a file descriptor by number?
+X<file, closing file descriptors> X<POSIX> X<close>
+
+If, for some reason, you have a file descriptor instead of a
+filehandle (perhaps you used C<POSIX::open>), you can use the
+C<close()> function from the L<POSIX> module:
+
+ use POSIX ();
+
+ POSIX::close( $fd );
+
+This should rarely be necessary, as the Perl C<close()> function is to be
+used for things that Perl opened itself, even if it was a dup of a
+numeric descriptor as with C<MHCONTEXT> above. But if you really have
+to, you may be able to do this:
+
+ require 'sys/syscall.ph';
+ my $rc = syscall(SYS_close(), $fd + 0); # must force numeric
+ die "can't sysclose $fd: $!" unless $rc == -1;
+
+Or, just use the fdopen(3S) feature of C<open()>:
+
+ {
+ open my $fh, "<&=$fd" or die "Cannot reopen fd=$fd: $!";
+ close $fh;
+ }
+
+=head2 Why can't I use "C:\temp\foo" in DOS paths? Why doesn't `C:\temp\foo.exe` work?
+X<filename, DOS issues>
+
+Whoops! You just put a tab and a formfeed into that filename!
+Remember that within double quoted strings ("like\this"), the
+backslash is an escape character. The full list of these is in
+L<perlop/Quote and Quote-like Operators>. Unsurprisingly, you don't
+have a file called "c:(tab)emp(formfeed)oo" or
+"c:(tab)emp(formfeed)oo.exe" on your legacy DOS filesystem.
+
+Either single-quote your strings, or (preferably) use forward slashes.
+Since all DOS and Windows versions since something like MS-DOS 2.0 or so
+have treated C</> and C<\> the same in a path, you might as well use the
+one that doesn't clash with Perl--or the POSIX shell, ANSI C and C++,
+awk, Tcl, Java, or Python, just to mention a few. POSIX paths
+are more portable, too.
+
+=head2 Why doesn't glob("*.*") get all the files?
+X<glob>
+
+Because even on non-Unix ports, Perl's glob function follows standard
+Unix globbing semantics. You'll need C<glob("*")> to get all (non-hidden)
+files. This makes glob() portable even to legacy systems. Your
+port may include proprietary globbing functions as well. Check its
+documentation for details.
+
+=head2 Why does Perl let me delete read-only files? Why does C<-i> clobber protected files? Isn't this a bug in Perl?
+
+This is elaborately and painstakingly described in the
+F<file-dir-perms> article in the "Far More Than You Ever Wanted To
+Know" collection in L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz> .
+
+The executive summary: learn how your filesystem works. The
+permissions on a file say what can happen to the data in that file.
+The permissions on a directory say what can happen to the list of
+files in that directory. If you delete a file, you're removing its
+name from the directory (so the operation depends on the permissions
+of the directory, not of the file). If you try to write to the file,
+the permissions of the file govern whether you're allowed to.
+
+=head2 How do I select a random line from a file?
+X<file, selecting a random line>
+
+Short of loading the file into a database or pre-indexing the lines in
+the file, there are a couple of things that you can do.
+
+Here's a reservoir-sampling algorithm from the Camel Book:
+
+ srand;
+ rand($.) < 1 && ($line = $_) while <>;
+
+This has a significant advantage in space over reading the whole file
+in. You can find a proof of this method in I<The Art of Computer
+Programming>, Volume 2, Section 3.4.2, by Donald E. Knuth.
+
+You can use the L<File::Random> module which provides a function
+for that algorithm:
+
+ use File::Random qw/random_line/;
+ my $line = random_line($filename);
+
+Another way is to use the L<Tie::File> module, which treats the entire
+file as an array. Simply access a random array element.
+
+=head2 Why do I get weird spaces when I print an array of lines?
+
+(contributed by brian d foy)
+
+If you are seeing spaces between the elements of your array when
+you print the array, you are probably interpolating the array in
+double quotes:
+
+ my @animals = qw(camel llama alpaca vicuna);
+ print "animals are: @animals\n";
+
+It's the double quotes, not the C<print>, doing this. Whenever you
+interpolate an array in a double quote context, Perl joins the
+elements with spaces (or whatever is in C<$">, which is a space by
+default):
+
+ animals are: camel llama alpaca vicuna
+
+This is different than printing the array without the interpolation:
+
+ my @animals = qw(camel llama alpaca vicuna);
+ print "animals are: ", @animals, "\n";
+
+Now the output doesn't have the spaces between the elements because
+the elements of C<@animals> simply become part of the list to
+C<print>:
+
+ animals are: camelllamaalpacavicuna
+
+You might notice this when each of the elements of C<@array> end with
+a newline. You expect to print one element per line, but notice that
+every line after the first is indented:
+
+ this is a line
+ this is another line
+ this is the third line
+
+That extra space comes from the interpolation of the array. If you
+don't want to put anything between your array elements, don't use the
+array in double quotes. You can send it to print without them:
+
+ print @lines;
+
+=head2 How do I traverse a directory tree?
+
+(contributed by brian d foy)
+
+The L<File::Find> module, which comes with Perl, does all of the hard
+work to traverse a directory structure. It comes with Perl. You simply
+call the C<find> subroutine with a callback subroutine and the
+directories you want to traverse:
+
+ use File::Find;
+
+ find( \&wanted, @directories );
+
+ sub wanted {
+ # full path in $File::Find::name
+ # just filename in $_
+ ... do whatever you want to do ...
+ }
+
+The L<File::Find::Closures>, which you can download from CPAN, provides
+many ready-to-use subroutines that you can use with L<File::Find>.
+
+The L<File::Finder>, which you can download from CPAN, can help you
+create the callback subroutine using something closer to the syntax of
+the C<find> command-line utility:
+
+ use File::Find;
+ use File::Finder;
+
+ my $deep_dirs = File::Finder->depth->type('d')->ls->exec('rmdir','{}');
+
+ find( $deep_dirs->as_options, @places );
+
+The L<File::Find::Rule> module, which you can download from CPAN, has
+a similar interface, but does the traversal for you too:
+
+ use File::Find::Rule;
+
+ my @files = File::Find::Rule->file()
+ ->name( '*.pm' )
+ ->in( @INC );
+
+=head2 How do I delete a directory tree?
+
+(contributed by brian d foy)
+
+If you have an empty directory, you can use Perl's built-in C<rmdir>.
+If the directory is not empty (so, no files or subdirectories), you
+either have to empty it yourself (a lot of work) or use a module to
+help you.
+
+The L<File::Path> module, which comes with Perl, has a C<remove_tree>
+which can take care of all of the hard work for you:
+
+ use File::Path qw(remove_tree);
+
+ remove_tree( @directories );
+
+The L<File::Path> module also has a legacy interface to the older
+C<rmtree> subroutine.
+
+=head2 How do I copy an entire directory?
+
+(contributed by Shlomi Fish)
+
+To do the equivalent of C<cp -R> (i.e. copy an entire directory tree
+recursively) in portable Perl, you'll either need to write something yourself
+or find a good CPAN module such as L<File::Copy::Recursive>.
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples here are in the public
+domain. You are permitted and encouraged to use this code and any
+derivatives thereof in your own programs for fun or for profit as you
+see fit. A simple comment in the code giving credit to the FAQ would
+be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq6.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq6.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq6.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1124 @@
+=head1 NAME
+
+perlfaq6 - Regular Expressions
+
+=head1 DESCRIPTION
+
+This section is surprisingly small because the rest of the FAQ is
+littered with answers involving regular expressions. For example,
+decoding a URL and checking whether something is a number can be handled
+with regular expressions, but those answers are found elsewhere in
+this document (in L<perlfaq9>: "How do I decode or create those %-encodings
+on the web" and L<perlfaq4>: "How do I determine whether a scalar is
+a number/whole/integer/float", to be precise).
+
+=head2 How can I hope to use regular expressions without creating illegible and unmaintainable code?
+X<regex, legibility> X<regexp, legibility>
+X<regular expression, legibility> X</x>
+
+Three techniques can make regular expressions maintainable and
+understandable.
+
+=over 4
+
+=item Comments Outside the Regex
+
+Describe what you're doing and how you're doing it, using normal Perl
+comments.
+
+ # turn the line into the first word, a colon, and the
+ # number of characters on the rest of the line
+ s/^(\w+)(.*)/ lc($1) . ":" . length($2) /meg;
+
+=item Comments Inside the Regex
+
+The C</x> modifier causes whitespace to be ignored in a regex pattern
+(except in a character class and a few other places), and also allows you to
+use normal comments there, too. As you can imagine, whitespace and comments
+help a lot.
+
+C</x> lets you turn this:
+
+ s{<(?:[^>'"]*|".*?"|'.*?')+>}{}gs;
+
+into this:
+
+ s{ < # opening angle bracket
+ (?: # Non-backreffing grouping paren
+ [^>'"] * # 0 or more things that are neither > nor ' nor "
+ | # or else
+ ".*?" # a section between double quotes (stingy match)
+ | # or else
+ '.*?' # a section between single quotes (stingy match)
+ ) + # all occurring one or more times
+ > # closing angle bracket
+ }{}gsx; # replace with nothing, i.e. delete
+
+It's still not quite so clear as prose, but it is very useful for
+describing the meaning of each part of the pattern.
+
+=item Different Delimiters
+
+While we normally think of patterns as being delimited with C</>
+characters, they can be delimited by almost any character. L<perlre>
+describes this. For example, the C<s///> above uses braces as
+delimiters. Selecting another delimiter can avoid quoting the
+delimiter within the pattern:
+
+ s/\/usr\/local/\/usr\/share/g; # bad delimiter choice
+ s#/usr/local#/usr/share#g; # better
+
+Using logically paired delimiters can be even more readable:
+
+ s{/usr/local/}{/usr/share}g; # better still
+
+=back
+
+=head2 I'm having trouble matching over more than one line. What's wrong?
+X<regex, multiline> X<regexp, multiline> X<regular expression, multiline>
+
+Either you don't have more than one line in the string you're looking
+at (probably), or else you aren't using the correct modifier(s) on
+your pattern (possibly).
+
+There are many ways to get multiline data into a string. If you want
+it to happen automatically while reading input, you'll want to set $/
+(probably to '' for paragraphs or C<undef> for the whole file) to
+allow you to read more than one line at a time.
+
+Read L<perlre> to help you decide which of C</s> and C</m> (or both)
+you might want to use: C</s> allows dot to include newline, and C</m>
+allows caret and dollar to match next to a newline, not just at the
+end of the string. You do need to make sure that you've actually
+got a multiline string in there.
+
+For example, this program detects duplicate words, even when they span
+line breaks (but not paragraph ones). For this example, we don't need
+C</s> because we aren't using dot in a regular expression that we want
+to cross line boundaries. Neither do we need C</m> because we don't
+want caret or dollar to match at any point inside the record next
+to newlines. But it's imperative that $/ be set to something other
+than the default, or else we won't actually ever have a multiline
+record read in.
+
+ $/ = ''; # read in whole paragraph, not just one line
+ while ( <> ) {
+ while ( /\b([\w'-]+)(\s+\g1)+\b/gi ) { # word starts alpha
+ print "Duplicate $1 at paragraph $.\n";
+ }
+ }
+
+Here's some code that finds sentences that begin with "From " (which would
+be mangled by many mailers):
+
+ $/ = ''; # read in whole paragraph, not just one line
+ while ( <> ) {
+ while ( /^From /gm ) { # /m makes ^ match next to \n
+ print "leading from in paragraph $.\n";
+ }
+ }
+
+Here's code that finds everything between START and END in a paragraph:
+
+ undef $/; # read in whole file, not just one line or paragraph
+ while ( <> ) {
+ while ( /START(.*?)END/sgm ) { # /s makes . cross line boundaries
+ print "$1\n";
+ }
+ }
+
+=head2 How can I pull out lines between two patterns that are themselves on different lines?
+X<..>
+
+You can use Perl's somewhat exotic C<..> operator (documented in
+L<perlop>):
+
+ perl -ne 'print if /START/ .. /END/' file1 file2 ...
+
+If you wanted text and not lines, you would use
+
+ perl -0777 -ne 'print "$1\n" while /START(.*?)END/gs' file1 file2 ...
+
+But if you want nested occurrences of C<START> through C<END>, you'll
+run up against the problem described in the question in this section
+on matching balanced text.
+
+Here's another example of using C<..>:
+
+ while (<>) {
+ my $in_header = 1 .. /^$/;
+ my $in_body = /^$/ .. eof;
+ # now choose between them
+ } continue {
+ $. = 0 if eof; # fix $.
+ }
+
+=head2 How do I match XML, HTML, or other nasty, ugly things with a regex?
+X<regex, XML> X<regex, HTML> X<XML> X<HTML> X<pain> X<frustration>
+X<sucking out, will to live>
+
+Do not use regexes. Use a module and forget about the
+regular expressions. The L<XML::LibXML>, L<HTML::TokeParser> and
+L<HTML::TreeBuilder> modules are good starts, although each namespace
+has other parsing modules specialized for certain tasks and different
+ways of doing it. Start at CPAN Search ( L<http://metacpan.org/> )
+and wonder at all the work people have done for you already! :)
+
+=head2 I put a regular expression into $/ but it didn't work. What's wrong?
+X<$/, regexes in> X<$INPUT_RECORD_SEPARATOR, regexes in>
+X<$RS, regexes in>
+
+$/ has to be a string. You can use these examples if you really need to
+do this.
+
+If you have L<File::Stream>, this is easy.
+
+ use File::Stream;
+
+ my $stream = File::Stream->new(
+ $filehandle,
+ separator => qr/\s*,\s*/,
+ );
+
+ print "$_\n" while <$stream>;
+
+If you don't have File::Stream, you have to do a little more work.
+
+You can use the four-argument form of sysread to continually add to
+a buffer. After you add to the buffer, you check if you have a
+complete line (using your regular expression).
+
+ local $_ = "";
+ while( sysread FH, $_, 8192, length ) {
+ while( s/^((?s).*?)your_pattern// ) {
+ my $record = $1;
+ # do stuff here.
+ }
+ }
+
+You can do the same thing with foreach and a match using the
+c flag and the \G anchor, if you do not mind your entire file
+being in memory at the end.
+
+ local $_ = "";
+ while( sysread FH, $_, 8192, length ) {
+ foreach my $record ( m/\G((?s).*?)your_pattern/gc ) {
+ # do stuff here.
+ }
+ substr( $_, 0, pos ) = "" if pos;
+ }
+
+
+=head2 How do I substitute case-insensitively on the LHS while preserving case on the RHS?
+X<replace, case preserving> X<substitute, case preserving>
+X<substitution, case preserving> X<s, case preserving>
+
+Here's a lovely Perlish solution by Larry Rosler. It exploits
+properties of bitwise xor on ASCII strings.
+
+ $_= "this is a TEsT case";
+
+ $old = 'test';
+ $new = 'success';
+
+ s{(\Q$old\E)}
+ { uc $new | (uc $1 ^ $1) .
+ (uc(substr $1, -1) ^ substr $1, -1) x
+ (length($new) - length $1)
+ }egi;
+
+ print;
+
+And here it is as a subroutine, modeled after the above:
+
+ sub preserve_case {
+ my ($old, $new) = @_;
+ my $mask = uc $old ^ $old;
+
+ uc $new | $mask .
+ substr($mask, -1) x (length($new) - length($old))
+ }
+
+ $string = "this is a TEsT case";
+ $string =~ s/(test)/preserve_case($1, "success")/egi;
+ print "$string\n";
+
+This prints:
+
+ this is a SUcCESS case
+
+As an alternative, to keep the case of the replacement word if it is
+longer than the original, you can use this code, by Jeff Pinyan:
+
+ sub preserve_case {
+ my ($from, $to) = @_;
+ my ($lf, $lt) = map length, @_;
+
+ if ($lt < $lf) { $from = substr $from, 0, $lt }
+ else { $from .= substr $to, $lf }
+
+ return uc $to | ($from ^ uc $from);
+ }
+
+This changes the sentence to "this is a SUcCess case."
+
+Just to show that C programmers can write C in any programming language,
+if you prefer a more C-like solution, the following script makes the
+substitution have the same case, letter by letter, as the original.
+(It also happens to run about 240% slower than the Perlish solution runs.)
+If the substitution has more characters than the string being substituted,
+the case of the last character is used for the rest of the substitution.
+
+ # Original by Nathan Torkington, massaged by Jeffrey Friedl
+ #
+ sub preserve_case
+ {
+ my ($old, $new) = @_;
+ my $state = 0; # 0 = no change; 1 = lc; 2 = uc
+ my ($i, $oldlen, $newlen, $c) = (0, length($old), length($new));
+ my $len = $oldlen < $newlen ? $oldlen : $newlen;
+
+ for ($i = 0; $i < $len; $i++) {
+ if ($c = substr($old, $i, 1), $c =~ /[\W\d_]/) {
+ $state = 0;
+ } elsif (lc $c eq $c) {
+ substr($new, $i, 1) = lc(substr($new, $i, 1));
+ $state = 1;
+ } else {
+ substr($new, $i, 1) = uc(substr($new, $i, 1));
+ $state = 2;
+ }
+ }
+ # finish up with any remaining new (for when new is longer than old)
+ if ($newlen > $oldlen) {
+ if ($state == 1) {
+ substr($new, $oldlen) = lc(substr($new, $oldlen));
+ } elsif ($state == 2) {
+ substr($new, $oldlen) = uc(substr($new, $oldlen));
+ }
+ }
+ return $new;
+ }
+
+=head2 How can I make C<\w> match national character sets?
+X<\w>
+
+Put C<use locale;> in your script. The \w character class is taken
+from the current locale.
+
+See L<perllocale> for details.
+
+=head2 How can I match a locale-smart version of C</[a-zA-Z]/>?
+X<alpha>
+
+You can use the POSIX character class syntax C</[[:alpha:]]/>
+documented in L<perlre>.
+
+No matter which locale you are in, the alphabetic characters are
+the characters in \w without the digits and the underscore.
+As a regex, that looks like C</[^\W\d_]/>. Its complement,
+the non-alphabetics, is then everything in \W along with
+the digits and the underscore, or C</[\W\d_]/>.
+
+=head2 How can I quote a variable to use in a regex?
+X<regex, escaping> X<regexp, escaping> X<regular expression, escaping>
+
+The Perl parser will expand $variable and @variable references in
+regular expressions unless the delimiter is a single quote. Remember,
+too, that the right-hand side of a C<s///> substitution is considered
+a double-quoted string (see L<perlop> for more details). Remember
+also that any regex special characters will be acted on unless you
+precede the substitution with \Q. Here's an example:
+
+ $string = "Placido P. Octopus";
+ $regex = "P.";
+
+ $string =~ s/$regex/Polyp/;
+ # $string is now "Polypacido P. Octopus"
+
+Because C<.> is special in regular expressions, and can match any
+single character, the regex C<P.> here has matched the <Pl> in the
+original string.
+
+To escape the special meaning of C<.>, we use C<\Q>:
+
+ $string = "Placido P. Octopus";
+ $regex = "P.";
+
+ $string =~ s/\Q$regex/Polyp/;
+ # $string is now "Placido Polyp Octopus"
+
+The use of C<\Q> causes the <.> in the regex to be treated as a
+regular character, so that C<P.> matches a C<P> followed by a dot.
+
+=head2 What is C</o> really for?
+X</o, regular expressions> X<compile, regular expressions>
+
+(contributed by brian d foy)
+
+The C</o> option for regular expressions (documented in L<perlop> and
+L<perlreref>) tells Perl to compile the regular expression only once.
+This is only useful when the pattern contains a variable. Perls 5.6
+and later handle this automatically if the pattern does not change.
+
+Since the match operator C<m//>, the substitution operator C<s///>,
+and the regular expression quoting operator C<qr//> are double-quotish
+constructs, you can interpolate variables into the pattern. See the
+answer to "How can I quote a variable to use in a regex?" for more
+details.
+
+This example takes a regular expression from the argument list and
+prints the lines of input that match it:
+
+ my $pattern = shift @ARGV;
+
+ while( <> ) {
+ print if m/$pattern/;
+ }
+
+Versions of Perl prior to 5.6 would recompile the regular expression
+for each iteration, even if C<$pattern> had not changed. The C</o>
+would prevent this by telling Perl to compile the pattern the first
+time, then reuse that for subsequent iterations:
+
+ my $pattern = shift @ARGV;
+
+ while( <> ) {
+ print if m/$pattern/o; # useful for Perl < 5.6
+ }
+
+In versions 5.6 and later, Perl won't recompile the regular expression
+if the variable hasn't changed, so you probably don't need the C</o>
+option. It doesn't hurt, but it doesn't help either. If you want any
+version of Perl to compile the regular expression only once even if
+the variable changes (thus, only using its initial value), you still
+need the C</o>.
+
+You can watch Perl's regular expression engine at work to verify for
+yourself if Perl is recompiling a regular expression. The C<use re
+'debug'> pragma (comes with Perl 5.005 and later) shows the details.
+With Perls before 5.6, you should see C<re> reporting that its
+compiling the regular expression on each iteration. With Perl 5.6 or
+later, you should only see C<re> report that for the first iteration.
+
+ use re 'debug';
+
+ my $regex = 'Perl';
+ foreach ( qw(Perl Java Ruby Python) ) {
+ print STDERR "-" x 73, "\n";
+ print STDERR "Trying $_...\n";
+ print STDERR "\t$_ is good!\n" if m/$regex/;
+ }
+
+=head2 How do I use a regular expression to strip C-style comments from a file?
+
+While this actually can be done, it's much harder than you'd think.
+For example, this one-liner
+
+ perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
+
+will work in many but not all cases. You see, it's too simple-minded for
+certain kinds of C programs, in particular, those with what appear to be
+comments in quoted strings. For that, you'd need something like this,
+created by Jeffrey Friedl and later modified by Fred Curtis.
+
+ $/ = undef;
+ $_ = <>;
+ s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $2 ? $2 : ""#gse;
+ print;
+
+This could, of course, be more legibly written with the C</x> modifier, adding
+whitespace and comments. Here it is expanded, courtesy of Fred Curtis.
+
+ s{
+ /\* ## Start of /* ... */ comment
+ [^*]*\*+ ## Non-* followed by 1-or-more *'s
+ (
+ [^/*][^*]*\*+
+ )* ## 0-or-more things which don't start with /
+ ## but do end with '*'
+ / ## End of /* ... */ comment
+
+ | ## OR various things which aren't comments:
+
+ (
+ " ## Start of " ... " string
+ (
+ \\. ## Escaped char
+ | ## OR
+ [^"\\] ## Non "\
+ )*
+ " ## End of " ... " string
+
+ | ## OR
+
+ ' ## Start of ' ... ' string
+ (
+ \\. ## Escaped char
+ | ## OR
+ [^'\\] ## Non '\
+ )*
+ ' ## End of ' ... ' string
+
+ | ## OR
+
+ . ## Anything other char
+ [^/"'\\]* ## Chars which doesn't start a comment, string or escape
+ )
+ }{defined $2 ? $2 : ""}gxse;
+
+A slight modification also removes C++ comments, possibly spanning multiple lines
+using a continuation character:
+
+ s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//([^\\]|[^\n][\n]?)*?\n|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $3 ? $3 : ""#gse;
+
+=head2 Can I use Perl regular expressions to match balanced text?
+X<regex, matching balanced test> X<regexp, matching balanced test>
+X<regular expression, matching balanced test> X<possessive> X<PARNO>
+X<Text::Balanced> X<Regexp::Common> X<backtracking> X<recursion>
+
+(contributed by brian d foy)
+
+Your first try should probably be the L<Text::Balanced> module, which
+is in the Perl standard library since Perl 5.8. It has a variety of
+functions to deal with tricky text. The L<Regexp::Common> module can
+also help by providing canned patterns you can use.
+
+As of Perl 5.10, you can match balanced text with regular expressions
+using recursive patterns. Before Perl 5.10, you had to resort to
+various tricks such as using Perl code in C<(??{})> sequences.
+
+Here's an example using a recursive regular expression. The goal is to
+capture all of the text within angle brackets, including the text in
+nested angle brackets. This sample text has two "major" groups: a
+group with one level of nesting and a group with two levels of
+nesting. There are five total groups in angle brackets:
+
+ I have some <brackets in <nested brackets> > and
+ <another group <nested once <nested twice> > >
+ and that's it.
+
+The regular expression to match the balanced text uses two new (to
+Perl 5.10) regular expression features. These are covered in L<perlre>
+and this example is a modified version of one in that documentation.
+
+First, adding the new possessive C<+> to any quantifier finds the
+longest match and does not backtrack. That's important since you want
+to handle any angle brackets through the recursion, not backtracking.
+The group C<< [^<>]++ >> finds one or more non-angle brackets without
+backtracking.
+
+Second, the new C<(?PARNO)> refers to the sub-pattern in the
+particular capture group given by C<PARNO>. In the following regex,
+the first capture group finds (and remembers) the balanced text, and
+you need that same pattern within the first buffer to get past the
+nested text. That's the recursive part. The C<(?1)> uses the pattern
+in the outer capture group as an independent part of the regex.
+
+Putting it all together, you have:
+
+ #!/usr/local/bin/perl5.10.0
+
+ my $string =<<"HERE";
+ I have some <brackets in <nested brackets> > and
+ <another group <nested once <nested twice> > >
+ and that's it.
+ HERE
+
+ my @groups = $string =~ m/
+ ( # start of capture group 1
+ < # match an opening angle bracket
+ (?:
+ [^<>]++ # one or more non angle brackets, non backtracking
+ |
+ (?1) # found < or >, so recurse to capture group 1
+ )*
+ > # match a closing angle bracket
+ ) # end of capture group 1
+ /xg;
+
+ $" = "\n\t";
+ print "Found:\n\t at groups\n";
+
+The output shows that Perl found the two major groups:
+
+ Found:
+ <brackets in <nested brackets> >
+ <another group <nested once <nested twice> > >
+
+With a little extra work, you can get the all of the groups in angle
+brackets even if they are in other angle brackets too. Each time you
+get a balanced match, remove its outer delimiter (that's the one you
+just matched so don't match it again) and add it to a queue of strings
+to process. Keep doing that until you get no matches:
+
+ #!/usr/local/bin/perl5.10.0
+
+ my @queue =<<"HERE";
+ I have some <brackets in <nested brackets> > and
+ <another group <nested once <nested twice> > >
+ and that's it.
+ HERE
+
+ my $regex = qr/
+ ( # start of bracket 1
+ < # match an opening angle bracket
+ (?:
+ [^<>]++ # one or more non angle brackets, non backtracking
+ |
+ (?1) # recurse to bracket 1
+ )*
+ > # match a closing angle bracket
+ ) # end of bracket 1
+ /x;
+
+ $" = "\n\t";
+
+ while( @queue ) {
+ my $string = shift @queue;
+
+ my @groups = $string =~ m/$regex/g;
+ print "Found:\n\t at groups\n\n" if @groups;
+
+ unshift @queue, map { s/^<//; s/>$//; $_ } @groups;
+ }
+
+The output shows all of the groups. The outermost matches show up
+first and the nested matches so up later:
+
+ Found:
+ <brackets in <nested brackets> >
+ <another group <nested once <nested twice> > >
+
+ Found:
+ <nested brackets>
+
+ Found:
+ <nested once <nested twice> >
+
+ Found:
+ <nested twice>
+
+=head2 What does it mean that regexes are greedy? How can I get around it?
+X<greedy> X<greediness>
+
+Most people mean that greedy regexes match as much as they can.
+Technically speaking, it's actually the quantifiers (C<?>, C<*>, C<+>,
+C<{}>) that are greedy rather than the whole pattern; Perl prefers local
+greed and immediate gratification to overall greed. To get non-greedy
+versions of the same quantifiers, use (C<??>, C<*?>, C<+?>, C<{}?>).
+
+An example:
+
+ my $s1 = my $s2 = "I am very very cold";
+ $s1 =~ s/ve.*y //; # I am cold
+ $s2 =~ s/ve.*?y //; # I am very cold
+
+Notice how the second substitution stopped matching as soon as it
+encountered "y ". The C<*?> quantifier effectively tells the regular
+expression engine to find a match as quickly as possible and pass
+control on to whatever is next in line, as you would if you were
+playing hot potato.
+
+=head2 How do I process each word on each line?
+X<word>
+
+Use the split function:
+
+ while (<>) {
+ foreach my $word ( split ) {
+ # do something with $word here
+ }
+ }
+
+Note that this isn't really a word in the English sense; it's just
+chunks of consecutive non-whitespace characters.
+
+To work with only alphanumeric sequences (including underscores), you
+might consider
+
+ while (<>) {
+ foreach $word (m/(\w+)/g) {
+ # do something with $word here
+ }
+ }
+
+=head2 How can I print out a word-frequency or line-frequency summary?
+
+To do this, you have to parse out each word in the input stream. We'll
+pretend that by word you mean chunk of alphabetics, hyphens, or
+apostrophes, rather than the non-whitespace chunk idea of a word given
+in the previous question:
+
+ my (%seen);
+ while (<>) {
+ while ( /(\b[^\W_\d][\w'-]+\b)/g ) { # misses "`sheep'"
+ $seen{$1}++;
+ }
+ }
+
+ while ( my ($word, $count) = each %seen ) {
+ print "$count $word\n";
+ }
+
+If you wanted to do the same thing for lines, you wouldn't need a
+regular expression:
+
+ my (%seen);
+
+ while (<>) {
+ $seen{$_}++;
+ }
+
+ while ( my ($line, $count) = each %seen ) {
+ print "$count $line";
+ }
+
+If you want these output in a sorted order, see L<perlfaq4>: "How do I
+sort a hash (optionally by value instead of key)?".
+
+=head2 How can I do approximate matching?
+X<match, approximate> X<matching, approximate>
+
+See the module L<String::Approx> available from CPAN.
+
+=head2 How do I efficiently match many regular expressions at once?
+X<regex, efficiency> X<regexp, efficiency>
+X<regular expression, efficiency>
+
+(contributed by brian d foy)
+
+If you have Perl 5.10 or later, this is almost trivial. You just smart
+match against an array of regular expression objects:
+
+ my @patterns = ( qr/Fr.d/, qr/B.rn.y/, qr/W.lm./ );
+
+ if( $string ~~ @patterns ) {
+ ...
+ };
+
+The smart match stops when it finds a match, so it doesn't have to try
+every expression.
+
+Earlier than Perl 5.10, you have a bit of work to do. You want to
+avoid compiling a regular expression every time you want to match it.
+In this example, perl must recompile the regular expression for every
+iteration of the C<foreach> loop since it has no way to know what
+C<$pattern> will be:
+
+ my @patterns = qw( foo bar baz );
+
+ LINE: while( <DATA> ) {
+ foreach $pattern ( @patterns ) {
+ if( /\b$pattern\b/i ) {
+ print;
+ next LINE;
+ }
+ }
+ }
+
+The C<qr//> operator showed up in perl 5.005. It compiles a regular
+expression, but doesn't apply it. When you use the pre-compiled
+version of the regex, perl does less work. In this example, I inserted
+a C<map> to turn each pattern into its pre-compiled form. The rest of
+the script is the same, but faster:
+
+ my @patterns = map { qr/\b$_\b/i } qw( foo bar baz );
+
+ LINE: while( <> ) {
+ foreach $pattern ( @patterns ) {
+ if( /$pattern/ ) {
+ print;
+ next LINE;
+ }
+ }
+ }
+
+In some cases, you may be able to make several patterns into a single
+regular expression. Beware of situations that require backtracking
+though.
+
+ my $regex = join '|', qw( foo bar baz );
+
+ LINE: while( <> ) {
+ print if /\b(?:$regex)\b/i;
+ }
+
+For more details on regular expression efficiency, see I<Mastering
+Regular Expressions> by Jeffrey Friedl. He explains how the regular
+expressions engine works and why some patterns are surprisingly
+inefficient. Once you understand how perl applies regular expressions,
+you can tune them for individual situations.
+
+=head2 Why don't word-boundary searches with C<\b> work for me?
+X<\b>
+
+(contributed by brian d foy)
+
+Ensure that you know what \b really does: it's the boundary between a
+word character, \w, and something that isn't a word character. That
+thing that isn't a word character might be \W, but it can also be the
+start or end of the string.
+
+It's not (not!) the boundary between whitespace and non-whitespace,
+and it's not the stuff between words we use to create sentences.
+
+In regex speak, a word boundary (\b) is a "zero width assertion",
+meaning that it doesn't represent a character in the string, but a
+condition at a certain position.
+
+For the regular expression, /\bPerl\b/, there has to be a word
+boundary before the "P" and after the "l". As long as something other
+than a word character precedes the "P" and succeeds the "l", the
+pattern will match. These strings match /\bPerl\b/.
+
+ "Perl" # no word char before P or after l
+ "Perl " # same as previous (space is not a word char)
+ "'Perl'" # the ' char is not a word char
+ "Perl's" # no word char before P, non-word char after "l"
+
+These strings do not match /\bPerl\b/.
+
+ "Perl_" # _ is a word char!
+ "Perler" # no word char before P, but one after l
+
+You don't have to use \b to match words though. You can look for
+non-word characters surrounded by word characters. These strings
+match the pattern /\b'\b/.
+
+ "don't" # the ' char is surrounded by "n" and "t"
+ "qep'a'" # the ' char is surrounded by "p" and "a"
+
+These strings do not match /\b'\b/.
+
+ "foo'" # there is no word char after non-word '
+
+You can also use the complement of \b, \B, to specify that there
+should not be a word boundary.
+
+In the pattern /\Bam\B/, there must be a word character before the "a"
+and after the "m". These patterns match /\Bam\B/:
+
+ "llama" # "am" surrounded by word chars
+ "Samuel" # same
+
+These strings do not match /\Bam\B/
+
+ "Sam" # no word boundary before "a", but one after "m"
+ "I am Sam" # "am" surrounded by non-word chars
+
+
+=head2 Why does using $&, $`, or $' slow my program down?
+X<$MATCH> X<$&> X<$POSTMATCH> X<$'> X<$PREMATCH> X<$`>
+
+(contributed by Anno Siegel)
+
+Once Perl sees that you need one of these variables anywhere in the
+program, it provides them on each and every pattern match. That means
+that on every pattern match the entire string will be copied, part of it
+to $`, part to $&, and part to $'. Thus the penalty is most severe with
+long strings and patterns that match often. Avoid $&, $', and $` if you
+can, but if you can't, once you've used them at all, use them at will
+because you've already paid the price. Remember that some algorithms
+really appreciate them. As of the 5.005 release, the $& variable is no
+longer "expensive" the way the other two are.
+
+Since Perl 5.6.1 the special variables @- and @+ can functionally replace
+$`, $& and $'. These arrays contain pointers to the beginning and end
+of each match (see perlvar for the full story), so they give you
+essentially the same information, but without the risk of excessive
+string copying.
+
+Perl 5.10 added three specials, C<${^MATCH}>, C<${^PREMATCH}>, and
+C<${^POSTMATCH}> to do the same job but without the global performance
+penalty. Perl 5.10 only sets these variables if you compile or execute the
+regular expression with the C</p> modifier.
+
+=head2 What good is C<\G> in a regular expression?
+X<\G>
+
+You use the C<\G> anchor to start the next match on the same
+string where the last match left off. The regular
+expression engine cannot skip over any characters to find
+the next match with this anchor, so C<\G> is similar to the
+beginning of string anchor, C<^>. The C<\G> anchor is typically
+used with the C<g> flag. It uses the value of C<pos()>
+as the position to start the next match. As the match
+operator makes successive matches, it updates C<pos()> with the
+position of the next character past the last match (or the
+first character of the next match, depending on how you like
+to look at it). Each string has its own C<pos()> value.
+
+Suppose you want to match all of consecutive pairs of digits
+in a string like "1122a44" and stop matching when you
+encounter non-digits. You want to match C<11> and C<22> but
+the letter <a> shows up between C<22> and C<44> and you want
+to stop at C<a>. Simply matching pairs of digits skips over
+the C<a> and still matches C<44>.
+
+ $_ = "1122a44";
+ my @pairs = m/(\d\d)/g; # qw( 11 22 44 )
+
+If you use the C<\G> anchor, you force the match after C<22> to
+start with the C<a>. The regular expression cannot match
+there since it does not find a digit, so the next match
+fails and the match operator returns the pairs it already
+found.
+
+ $_ = "1122a44";
+ my @pairs = m/\G(\d\d)/g; # qw( 11 22 )
+
+You can also use the C<\G> anchor in scalar context. You
+still need the C<g> flag.
+
+ $_ = "1122a44";
+ while( m/\G(\d\d)/g ) {
+ print "Found $1\n";
+ }
+
+After the match fails at the letter C<a>, perl resets C<pos()>
+and the next match on the same string starts at the beginning.
+
+ $_ = "1122a44";
+ while( m/\G(\d\d)/g ) {
+ print "Found $1\n";
+ }
+
+ print "Found $1 after while" if m/(\d\d)/g; # finds "11"
+
+You can disable C<pos()> resets on fail with the C<c> flag, documented
+in L<perlop> and L<perlreref>. Subsequent matches start where the last
+successful match ended (the value of C<pos()>) even if a match on the
+same string has failed in the meantime. In this case, the match after
+the C<while()> loop starts at the C<a> (where the last match stopped),
+and since it does not use any anchor it can skip over the C<a> to find
+C<44>.
+
+ $_ = "1122a44";
+ while( m/\G(\d\d)/gc ) {
+ print "Found $1\n";
+ }
+
+ print "Found $1 after while" if m/(\d\d)/g; # finds "44"
+
+Typically you use the C<\G> anchor with the C<c> flag
+when you want to try a different match if one fails,
+such as in a tokenizer. Jeffrey Friedl offers this example
+which works in 5.004 or later.
+
+ while (<>) {
+ chomp;
+ PARSER: {
+ m/ \G( \d+\b )/gcx && do { print "number: $1\n"; redo; };
+ m/ \G( \w+ )/gcx && do { print "word: $1\n"; redo; };
+ m/ \G( \s+ )/gcx && do { print "space: $1\n"; redo; };
+ m/ \G( [^\w\d]+ )/gcx && do { print "other: $1\n"; redo; };
+ }
+ }
+
+For each line, the C<PARSER> loop first tries to match a series
+of digits followed by a word boundary. This match has to
+start at the place the last match left off (or the beginning
+of the string on the first match). Since C<m/ \G( \d+\b
+)/gcx> uses the C<c> flag, if the string does not match that
+regular expression, perl does not reset pos() and the next
+match starts at the same position to try a different
+pattern.
+
+=head2 Are Perl regexes DFAs or NFAs? Are they POSIX compliant?
+X<DFA> X<NFA> X<POSIX>
+
+While it's true that Perl's regular expressions resemble the DFAs
+(deterministic finite automata) of the egrep(1) program, they are in
+fact implemented as NFAs (non-deterministic finite automata) to allow
+backtracking and backreferencing. And they aren't POSIX-style either,
+because those guarantee worst-case behavior for all cases. (It seems
+that some people prefer guarantees of consistency, even when what's
+guaranteed is slowness.) See the book "Mastering Regular Expressions"
+(from O'Reilly) by Jeffrey Friedl for all the details you could ever
+hope to know on these matters (a full citation appears in
+L<perlfaq2>).
+
+=head2 What's wrong with using grep in a void context?
+X<grep>
+
+The problem is that grep builds a return list, regardless of the context.
+This means you're making Perl go to the trouble of building a list that
+you then just throw away. If the list is large, you waste both time and space.
+If your intent is to iterate over the list, then use a for loop for this
+purpose.
+
+In perls older than 5.8.1, map suffers from this problem as well.
+But since 5.8.1, this has been fixed, and map is context aware - in void
+context, no lists are constructed.
+
+=head2 How can I match strings with multibyte characters?
+X<regex, and multibyte characters> X<regexp, and multibyte characters>
+X<regular expression, and multibyte characters> X<martian> X<encoding, Martian>
+
+Starting from Perl 5.6 Perl has had some level of multibyte character
+support. Perl 5.8 or later is recommended. Supported multibyte
+character repertoires include Unicode, and legacy encodings
+through the Encode module. See L<perluniintro>, L<perlunicode>,
+and L<Encode>.
+
+If you are stuck with older Perls, you can do Unicode with the
+L<Unicode::String> module, and character conversions using the
+L<Unicode::Map8> and L<Unicode::Map> modules. If you are using
+Japanese encodings, you might try using the jperl 5.005_03.
+
+Finally, the following set of approaches was offered by Jeffrey
+Friedl, whose article in issue #5 of The Perl Journal talks about
+this very matter.
+
+Let's suppose you have some weird Martian encoding where pairs of
+ASCII uppercase letters encode single Martian letters (i.e. the two
+bytes "CV" make a single Martian letter, as do the two bytes "SG",
+"VS", "XX", etc.). Other bytes represent single characters, just like
+ASCII.
+
+So, the string of Martian "I am CVSGXX!" uses 12 bytes to encode the
+nine characters 'I', ' ', 'a', 'm', ' ', 'CV', 'SG', 'XX', '!'.
+
+Now, say you want to search for the single character C</GX/>. Perl
+doesn't know about Martian, so it'll find the two bytes "GX" in the "I
+am CVSGXX!" string, even though that character isn't there: it just
+looks like it is because "SG" is next to "XX", but there's no real
+"GX". This is a big problem.
+
+Here are a few ways, all painful, to deal with it:
+
+ # Make sure adjacent "martian" bytes are no longer adjacent.
+ $martian =~ s/([A-Z][A-Z])/ $1 /g;
+
+ print "found GX!\n" if $martian =~ /GX/;
+
+Or like this:
+
+ my @chars = $martian =~ m/([A-Z][A-Z]|[^A-Z])/g;
+ # above is conceptually similar to: my @chars = $text =~ m/(.)/g;
+ #
+ foreach my $char (@chars) {
+ print "found GX!\n", last if $char eq 'GX';
+ }
+
+Or like this:
+
+ while ($martian =~ m/\G([A-Z][A-Z]|.)/gs) { # \G probably unneeded
+ if ($1 eq 'GX') {
+ print "found GX!\n";
+ last;
+ }
+ }
+
+Here's another, slightly less painful, way to do it from Benjamin
+Goldberg, who uses a zero-width negative look-behind assertion.
+
+ print "found GX!\n" if $martian =~ m/
+ (?<![A-Z])
+ (?:[A-Z][A-Z])*?
+ GX
+ /x;
+
+This succeeds if the "martian" character GX is in the string, and fails
+otherwise. If you don't like using (?<!), a zero-width negative
+look-behind assertion, you can replace (?<![A-Z]) with (?:^|[^A-Z]).
+
+It does have the drawback of putting the wrong thing in $-[0] and $+[0],
+but this usually can be worked around.
+
+=head2 How do I match a regular expression that's in a variable?
+X<regex, in variable> X<eval> X<regex> X<quotemeta> X<\Q, regex>
+X<\E, regex> X<qr//>
+
+(contributed by brian d foy)
+
+We don't have to hard-code patterns into the match operator (or
+anything else that works with regular expressions). We can put the
+pattern in a variable for later use.
+
+The match operator is a double quote context, so you can interpolate
+your variable just like a double quoted string. In this case, you
+read the regular expression as user input and store it in C<$regex>.
+Once you have the pattern in C<$regex>, you use that variable in the
+match operator.
+
+ chomp( my $regex = <STDIN> );
+
+ if( $string =~ m/$regex/ ) { ... }
+
+Any regular expression special characters in C<$regex> are still
+special, and the pattern still has to be valid or Perl will complain.
+For instance, in this pattern there is an unpaired parenthesis.
+
+ my $regex = "Unmatched ( paren";
+
+ "Two parens to bind them all" =~ m/$regex/;
+
+When Perl compiles the regular expression, it treats the parenthesis
+as the start of a memory match. When it doesn't find the closing
+parenthesis, it complains:
+
+ Unmatched ( in regex; marked by <-- HERE in m/Unmatched ( <-- HERE paren/ at script line 3.
+
+You can get around this in several ways depending on our situation.
+First, if you don't want any of the characters in the string to be
+special, you can escape them with C<quotemeta> before you use the string.
+
+ chomp( my $regex = <STDIN> );
+ $regex = quotemeta( $regex );
+
+ if( $string =~ m/$regex/ ) { ... }
+
+You can also do this directly in the match operator using the C<\Q>
+and C<\E> sequences. The C<\Q> tells Perl where to start escaping
+special characters, and the C<\E> tells it where to stop (see L<perlop>
+for more details).
+
+ chomp( my $regex = <STDIN> );
+
+ if( $string =~ m/\Q$regex\E/ ) { ... }
+
+Alternately, you can use C<qr//>, the regular expression quote operator (see
+L<perlop> for more details). It quotes and perhaps compiles the pattern,
+and you can apply regular expression flags to the pattern.
+
+ chomp( my $input = <STDIN> );
+
+ my $regex = qr/$input/is;
+
+ $string =~ m/$regex/ # same as m/$input/is;
+
+You might also want to trap any errors by wrapping an C<eval> block
+around the whole thing.
+
+ chomp( my $input = <STDIN> );
+
+ eval {
+ if( $string =~ m/\Q$input\E/ ) { ... }
+ };
+ warn $@ if $@;
+
+Or...
+
+ my $regex = eval { qr/$input/is };
+ if( defined $regex ) {
+ $string =~ m/$regex/;
+ }
+ else {
+ warn $@;
+ }
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples in this file
+are hereby placed into the public domain. You are permitted and
+encouraged to use this code in your own programs for fun
+or for profit as you see fit. A simple comment in the code giving
+credit would be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq7.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq7.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq7.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1061 @@
+=head1 NAME
+
+perlfaq7 - General Perl Language Issues
+
+=head1 DESCRIPTION
+
+This section deals with general Perl language issues that don't
+clearly fit into any of the other sections.
+
+=head2 Can I get a BNF/yacc/RE for the Perl language?
+
+There is no BNF, but you can paw your way through the yacc grammar in
+perly.y in the source distribution if you're particularly brave. The
+grammar relies on very smart tokenizing code, so be prepared to
+venture into toke.c as well.
+
+In the words of Chaim Frenkel: "Perl's grammar can not be reduced to BNF.
+The work of parsing perl is distributed between yacc, the lexer, smoke
+and mirrors."
+
+=head2 What are all these $@%&* punctuation signs, and how do I know when to use them?
+
+They are type specifiers, as detailed in L<perldata>:
+
+ $ for scalar values (number, string or reference)
+ @ for arrays
+ % for hashes (associative arrays)
+ & for subroutines (aka functions, procedures, methods)
+ * for all types of that symbol name. In version 4 you used them like
+ pointers, but in modern perls you can just use references.
+
+There are a couple of other symbols that
+you're likely to encounter that aren't
+really type specifiers:
+
+ <> are used for inputting a record from a filehandle.
+ \ takes a reference to something.
+
+Note that <FILE> is I<neither> the type specifier for files
+nor the name of the handle. It is the C<< <> >> operator applied
+to the handle FILE. It reads one line (well, record--see
+L<perlvar/$E<sol>>) from the handle FILE in scalar context, or I<all> lines
+in list context. When performing open, close, or any other operation
+besides C<< <> >> on files, or even when talking about the handle, do
+I<not> use the brackets. These are correct: C<eof(FH)>, C<seek(FH, 0,
+2)> and "copying from STDIN to FILE".
+
+=head2 Do I always/never have to quote my strings or use semicolons and commas?
+
+Normally, a bareword doesn't need to be quoted, but in most cases
+probably should be (and must be under C<use strict>). But a hash key
+consisting of a simple word and the left-hand
+operand to the C<< => >> operator both
+count as though they were quoted:
+
+ This is like this
+ ------------ ---------------
+ $foo{line} $foo{'line'}
+ bar => stuff 'bar' => stuff
+
+The final semicolon in a block is optional, as is the final comma in a
+list. Good style (see L<perlstyle>) says to put them in except for
+one-liners:
+
+ if ($whoops) { exit 1 }
+ my @nums = (1, 2, 3);
+
+ if ($whoops) {
+ exit 1;
+ }
+
+ my @lines = (
+ "There Beren came from mountains cold",
+ "And lost he wandered under leaves",
+ );
+
+=head2 How do I skip some return values?
+
+One way is to treat the return values as a list and index into it:
+
+ $dir = (getpwnam($user))[7];
+
+Another way is to use undef as an element on the left-hand-side:
+
+ ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
+
+You can also use a list slice to select only the elements that
+you need:
+
+ ($dev, $ino, $uid, $gid) = ( stat($file) )[0,1,4,5];
+
+=head2 How do I temporarily block warnings?
+
+If you are running Perl 5.6.0 or better, the C<use warnings> pragma
+allows fine control of what warnings are produced.
+See L<perllexwarn> for more details.
+
+ {
+ no warnings; # temporarily turn off warnings
+ $x = $y + $z; # I know these might be undef
+ }
+
+Additionally, you can enable and disable categories of warnings.
+You turn off the categories you want to ignore and you can still
+get other categories of warnings. See L<perllexwarn> for the
+complete details, including the category names and hierarchy.
+
+ {
+ no warnings 'uninitialized';
+ $x = $y + $z;
+ }
+
+If you have an older version of Perl, the C<$^W> variable (documented
+in L<perlvar>) controls runtime warnings for a block:
+
+ {
+ local $^W = 0; # temporarily turn off warnings
+ $x = $y + $z; # I know these might be undef
+ }
+
+Note that like all the punctuation variables, you cannot currently
+use my() on C<$^W>, only local().
+
+=head2 What's an extension?
+
+An extension is a way of calling compiled C code from Perl. Reading
+L<perlxstut> is a good place to learn more about extensions.
+
+=head2 Why do Perl operators have different precedence than C operators?
+
+Actually, they don't. All C operators that Perl copies have the same
+precedence in Perl as they do in C. The problem is with operators that C
+doesn't have, especially functions that give a list context to everything
+on their right, eg. print, chmod, exec, and so on. Such functions are
+called "list operators" and appear as such in the precedence table in
+L<perlop>.
+
+A common mistake is to write:
+
+ unlink $file || die "snafu";
+
+This gets interpreted as:
+
+ unlink ($file || die "snafu");
+
+To avoid this problem, either put in extra parentheses or use the
+super low precedence C<or> operator:
+
+ (unlink $file) || die "snafu";
+ unlink $file or die "snafu";
+
+The "English" operators (C<and>, C<or>, C<xor>, and C<not>)
+deliberately have precedence lower than that of list operators for
+just such situations as the one above.
+
+Another operator with surprising precedence is exponentiation. It
+binds more tightly even than unary minus, making C<-2**2> produce a
+negative four and not a positive one. It is also right-associating, meaning
+that C<2**3**2> is two raised to the ninth power, not eight squared.
+
+Although it has the same precedence as in C, Perl's C<?:> operator
+produces an lvalue. This assigns $x to either $if_true or $if_false, depending
+on the trueness of $maybe:
+
+ ($maybe ? $if_true : $if_false) = $x;
+
+=head2 How do I declare/create a structure?
+
+In general, you don't "declare" a structure. Just use a (probably
+anonymous) hash reference. See L<perlref> and L<perldsc> for details.
+Here's an example:
+
+ $person = {}; # new anonymous hash
+ $person->{AGE} = 24; # set field AGE to 24
+ $person->{NAME} = "Nat"; # set field NAME to "Nat"
+
+If you're looking for something a bit more rigorous, try L<perltoot>.
+
+=head2 How do I create a module?
+
+L<perlnewmod> is a good place to start, ignore the bits
+about uploading to CPAN if you don't want to make your
+module publicly available.
+
+L<ExtUtils::ModuleMaker> and L<Module::Starter> are also
+good places to start. Many CPAN authors now use L<Dist::Zilla>
+to automate as much as possible.
+
+Detailed documentation about modules can be found at:
+L<perlmod>, L<perlmodlib>, L<perlmodstyle>.
+
+If you need to include C code or C library interfaces
+use h2xs. h2xs will create the module distribution structure
+and the initial interface files.
+L<perlxs> and L<perlxstut> explain the details.
+
+=head2 How do I adopt or take over a module already on CPAN?
+
+Ask the current maintainer to make you a co-maintainer or
+transfer the module to you.
+
+If you can not reach the author for some reason contact
+the PAUSE admins at modules at perl.org who may be able to help,
+but each case it treated seperatly.
+
+=over 4
+
+=item *
+
+Get a login for the Perl Authors Upload Server (PAUSE) if you don't
+already have one: L<http://pause.perl.org>
+
+=item *
+
+Write to modules at perl.org explaining what you did to contact the
+current maintainer. The PAUSE admins will also try to reach the
+maintainer.
+
+=item *
+
+Post a public message in a heavily trafficked site announcing your
+intention to take over the module.
+
+=item *
+
+Wait a bit. The PAUSE admins don't want to act too quickly in case
+the current maintainer is on holiday. If there's no response to
+private communication or the public post, a PAUSE admin can transfer
+it to you.
+
+=back
+
+=head2 How do I create a class?
+X<class, creation> X<package>
+
+(contributed by brian d foy)
+
+In Perl, a class is just a package, and methods are just subroutines.
+Perl doesn't get more formal than that and lets you set up the package
+just the way that you like it (that is, it doesn't set up anything for
+you).
+
+The Perl documentation has several tutorials that cover class
+creation, including L<perlboot> (Barnyard Object Oriented Tutorial),
+L<perltoot> (Tom's Object Oriented Tutorial), L<perlbot> (Bag o'
+Object Tricks), and L<perlobj>.
+
+=head2 How can I tell if a variable is tainted?
+
+You can use the tainted() function of the Scalar::Util module, available
+from CPAN (or included with Perl since release 5.8.0).
+See also L<perlsec/"Laundering and Detecting Tainted Data">.
+
+=head2 What's a closure?
+
+Closures are documented in L<perlref>.
+
+I<Closure> is a computer science term with a precise but
+hard-to-explain meaning. Usually, closures are implemented in Perl as
+anonymous subroutines with lasting references to lexical variables
+outside their own scopes. These lexicals magically refer to the
+variables that were around when the subroutine was defined (deep
+binding).
+
+Closures are most often used in programming languages where you can
+have the return value of a function be itself a function, as you can
+in Perl. Note that some languages provide anonymous functions but are
+not capable of providing proper closures: the Python language, for
+example. For more information on closures, check out any textbook on
+functional programming. Scheme is a language that not only supports
+but encourages closures.
+
+Here's a classic non-closure function-generating function:
+
+ sub add_function_generator {
+ return sub { shift() + shift() };
+ }
+
+ my $add_sub = add_function_generator();
+ my $sum = $add_sub->(4,5); # $sum is 9 now.
+
+The anonymous subroutine returned by add_function_generator() isn't
+technically a closure because it refers to no lexicals outside its own
+scope. Using a closure gives you a I<function template> with some
+customization slots left out to be filled later.
+
+Contrast this with the following make_adder() function, in which the
+returned anonymous function contains a reference to a lexical variable
+outside the scope of that function itself. Such a reference requires
+that Perl return a proper closure, thus locking in for all time the
+value that the lexical had when the function was created.
+
+ sub make_adder {
+ my $addpiece = shift;
+ return sub { shift() + $addpiece };
+ }
+
+ my $f1 = make_adder(20);
+ my $f2 = make_adder(555);
+
+Now C<< $f1->($n) >> is always 20 plus whatever $n you pass in, whereas
+C<< $f2->($n) >> is always 555 plus whatever $n you pass in. The $addpiece
+in the closure sticks around.
+
+Closures are often used for less esoteric purposes. For example, when
+you want to pass in a bit of code into a function:
+
+ my $line;
+ timeout( 30, sub { $line = <STDIN> } );
+
+If the code to execute had been passed in as a string,
+C<< '$line = <STDIN>' >>, there would have been no way for the
+hypothetical timeout() function to access the lexical variable
+$line back in its caller's scope.
+
+Another use for a closure is to make a variable I<private> to a
+named subroutine, e.g. a counter that gets initialized at creation
+time of the sub and can only be modified from within the sub.
+This is sometimes used with a BEGIN block in package files to make
+sure a variable doesn't get meddled with during the lifetime of the
+package:
+
+ BEGIN {
+ my $id = 0;
+ sub next_id { ++$id }
+ }
+
+This is discussed in more detail in L<perlsub>; see the entry on
+I<Persistent Private Variables>.
+
+=head2 What is variable suicide and how can I prevent it?
+
+This problem was fixed in perl 5.004_05, so preventing it means upgrading
+your version of perl. ;)
+
+Variable suicide is when you (temporarily or permanently) lose the value
+of a variable. It is caused by scoping through my() and local()
+interacting with either closures or aliased foreach() iterator variables
+and subroutine arguments. It used to be easy to inadvertently lose a
+variable's value this way, but now it's much harder. Take this code:
+
+ my $f = 'foo';
+ sub T {
+ while ($i++ < 3) { my $f = $f; $f .= "bar"; print $f, "\n" }
+ }
+
+ T;
+ print "Finally $f\n";
+
+If you are experiencing variable suicide, that C<my $f> in the subroutine
+doesn't pick up a fresh copy of the C<$f> whose value is C<'foo'>. The
+output shows that inside the subroutine the value of C<$f> leaks through
+when it shouldn't, as in this output:
+
+ foobar
+ foobarbar
+ foobarbarbar
+ Finally foo
+
+The $f that has "bar" added to it three times should be a new C<$f>
+C<my $f> should create a new lexical variable each time through the loop.
+The expected output is:
+
+ foobar
+ foobar
+ foobar
+ Finally foo
+
+=head2 How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}?
+
+You need to pass references to these objects. See L<perlsub/"Pass by
+Reference"> for this particular question, and L<perlref> for
+information on references.
+
+=over 4
+
+=item Passing Variables and Functions
+
+Regular variables and functions are quite easy to pass: just pass in a
+reference to an existing or anonymous variable or function:
+
+ func( \$some_scalar );
+
+ func( \@some_array );
+ func( [ 1 .. 10 ] );
+
+ func( \%some_hash );
+ func( { this => 10, that => 20 } );
+
+ func( \&some_func );
+ func( sub { $_[0] ** $_[1] } );
+
+=item Passing Filehandles
+
+As of Perl 5.6, you can represent filehandles with scalar variables
+which you treat as any other scalar.
+
+ open my $fh, $filename or die "Cannot open $filename! $!";
+ func( $fh );
+
+ sub func {
+ my $passed_fh = shift;
+
+ my $line = <$passed_fh>;
+ }
+
+Before Perl 5.6, you had to use the C<*FH> or C<\*FH> notations.
+These are "typeglobs"--see L<perldata/"Typeglobs and Filehandles">
+and especially L<perlsub/"Pass by Reference"> for more information.
+
+=item Passing Regexes
+
+Here's an example of how to pass in a string and a regular expression
+for it to match against. You construct the pattern with the C<qr//>
+operator:
+
+ sub compare {
+ my ($val1, $regex) = @_;
+ my $retval = $val1 =~ /$regex/;
+ return $retval;
+ }
+ $match = compare("old McDonald", qr/d.*D/i);
+
+=item Passing Methods
+
+To pass an object method into a subroutine, you can do this:
+
+ call_a_lot(10, $some_obj, "methname")
+ sub call_a_lot {
+ my ($count, $widget, $trick) = @_;
+ for (my $i = 0; $i < $count; $i++) {
+ $widget->$trick();
+ }
+ }
+
+Or, you can use a closure to bundle up the object, its
+method call, and arguments:
+
+ my $whatnot = sub { $some_obj->obfuscate(@args) };
+ func($whatnot);
+ sub func {
+ my $code = shift;
+ &$code();
+ }
+
+You could also investigate the can() method in the UNIVERSAL class
+(part of the standard perl distribution).
+
+=back
+
+=head2 How do I create a static variable?
+
+(contributed by brian d foy)
+
+In Perl 5.10, declare the variable with C<state>. The C<state>
+declaration creates the lexical variable that persists between calls
+to the subroutine:
+
+ sub counter { state $count = 1; $count++ }
+
+You can fake a static variable by using a lexical variable which goes
+out of scope. In this example, you define the subroutine C<counter>, and
+it uses the lexical variable C<$count>. Since you wrap this in a BEGIN
+block, C<$count> is defined at compile-time, but also goes out of
+scope at the end of the BEGIN block. The BEGIN block also ensures that
+the subroutine and the value it uses is defined at compile-time so the
+subroutine is ready to use just like any other subroutine, and you can
+put this code in the same place as other subroutines in the program
+text (i.e. at the end of the code, typically). The subroutine
+C<counter> still has a reference to the data, and is the only way you
+can access the value (and each time you do, you increment the value).
+The data in chunk of memory defined by C<$count> is private to
+C<counter>.
+
+ BEGIN {
+ my $count = 1;
+ sub counter { $count++ }
+ }
+
+ my $start = counter();
+
+ .... # code that calls counter();
+
+ my $end = counter();
+
+In the previous example, you created a function-private variable
+because only one function remembered its reference. You could define
+multiple functions while the variable is in scope, and each function
+can share the "private" variable. It's not really "static" because you
+can access it outside the function while the lexical variable is in
+scope, and even create references to it. In this example,
+C<increment_count> and C<return_count> share the variable. One
+function adds to the value and the other simply returns the value.
+They can both access C<$count>, and since it has gone out of scope,
+there is no other way to access it.
+
+ BEGIN {
+ my $count = 1;
+ sub increment_count { $count++ }
+ sub return_count { $count }
+ }
+
+To declare a file-private variable, you still use a lexical variable.
+A file is also a scope, so a lexical variable defined in the file
+cannot be seen from any other file.
+
+See L<perlsub/"Persistent Private Variables"> for more information.
+The discussion of closures in L<perlref> may help you even though we
+did not use anonymous subroutines in this answer. See
+L<perlsub/"Persistent Private Variables"> for details.
+
+=head2 What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
+
+C<local($x)> saves away the old value of the global variable C<$x>
+and assigns a new value for the duration of the subroutine I<which is
+visible in other functions called from that subroutine>. This is done
+at run-time, so is called dynamic scoping. local() always affects global
+variables, also called package variables or dynamic variables.
+
+C<my($x)> creates a new variable that is only visible in the current
+subroutine. This is done at compile-time, so it is called lexical or
+static scoping. my() always affects private variables, also called
+lexical variables or (improperly) static(ly scoped) variables.
+
+For instance:
+
+ sub visible {
+ print "var has value $var\n";
+ }
+
+ sub dynamic {
+ local $var = 'local'; # new temporary value for the still-global
+ visible(); # variable called $var
+ }
+
+ sub lexical {
+ my $var = 'private'; # new private variable, $var
+ visible(); # (invisible outside of sub scope)
+ }
+
+ $var = 'global';
+
+ visible(); # prints global
+ dynamic(); # prints local
+ lexical(); # prints global
+
+Notice how at no point does the value "private" get printed. That's
+because $var only has that value within the block of the lexical()
+function, and it is hidden from the called subroutine.
+
+In summary, local() doesn't make what you think of as private, local
+variables. It gives a global variable a temporary value. my() is
+what you're looking for if you want private variables.
+
+See L<perlsub/"Private Variables via my()"> and
+L<perlsub/"Temporary Values via local()"> for excruciating details.
+
+=head2 How can I access a dynamic variable while a similarly named lexical is in scope?
+
+If you know your package, you can just mention it explicitly, as in
+$Some_Pack::var. Note that the notation $::var is B<not> the dynamic $var
+in the current package, but rather the one in the "main" package, as
+though you had written $main::var.
+
+ use vars '$var';
+ local $var = "global";
+ my $var = "lexical";
+
+ print "lexical is $var\n";
+ print "global is $main::var\n";
+
+Alternatively you can use the compiler directive our() to bring a
+dynamic variable into the current lexical scope.
+
+ require 5.006; # our() did not exist before 5.6
+ use vars '$var';
+
+ local $var = "global";
+ my $var = "lexical";
+
+ print "lexical is $var\n";
+
+ {
+ our $var;
+ print "global is $var\n";
+ }
+
+=head2 What's the difference between deep and shallow binding?
+
+In deep binding, lexical variables mentioned in anonymous subroutines
+are the same ones that were in scope when the subroutine was created.
+In shallow binding, they are whichever variables with the same names
+happen to be in scope when the subroutine is called. Perl always uses
+deep binding of lexical variables (i.e., those created with my()).
+However, dynamic variables (aka global, local, or package variables)
+are effectively shallowly bound. Consider this just one more reason
+not to use them. See the answer to L<"What's a closure?">.
+
+=head2 Why doesn't "my($foo) = E<lt>$fhE<gt>;" work right?
+
+C<my()> and C<local()> give list context to the right hand side
+of C<=>. The <$fh> read operation, like so many of Perl's
+functions and operators, can tell which context it was called in and
+behaves appropriately. In general, the scalar() function can help.
+This function does nothing to the data itself (contrary to popular myth)
+but rather tells its argument to behave in whatever its scalar fashion is.
+If that function doesn't have a defined scalar behavior, this of course
+doesn't help you (such as with sort()).
+
+To enforce scalar context in this particular case, however, you need
+merely omit the parentheses:
+
+ local($foo) = <$fh>; # WRONG
+ local($foo) = scalar(<$fh>); # ok
+ local $foo = <$fh>; # right
+
+You should probably be using lexical variables anyway, although the
+issue is the same here:
+
+ my($foo) = <$fh>; # WRONG
+ my $foo = <$fh>; # right
+
+=head2 How do I redefine a builtin function, operator, or method?
+
+Why do you want to do that? :-)
+
+If you want to override a predefined function, such as open(),
+then you'll have to import the new definition from a different
+module. See L<perlsub/"Overriding Built-in Functions">.
+
+If you want to overload a Perl operator, such as C<+> or C<**>,
+then you'll want to use the C<use overload> pragma, documented
+in L<overload>.
+
+If you're talking about obscuring method calls in parent classes,
+see L<perltoot/"Overridden Methods">.
+
+=head2 What's the difference between calling a function as &foo and foo()?
+
+(contributed by brian d foy)
+
+Calling a subroutine as C<&foo> with no trailing parentheses ignores
+the prototype of C<foo> and passes it the current value of the argument
+list, C<@_>. Here's an example; the C<bar> subroutine calls C<&foo>,
+which prints its arguments list:
+
+ sub bar { &foo }
+
+ sub foo { print "Args in foo are: @_\n" }
+
+ bar( qw( a b c ) );
+
+When you call C<bar> with arguments, you see that C<foo> got the same C<@_>:
+
+ Args in foo are: a b c
+
+Calling the subroutine with trailing parentheses, with or without arguments,
+does not use the current C<@_> and respects the subroutine prototype. Changing
+the example to put parentheses after the call to C<foo> changes the program:
+
+ sub bar { &foo() }
+
+ sub foo { print "Args in foo are: @_\n" }
+
+ bar( qw( a b c ) );
+
+Now the output shows that C<foo> doesn't get the C<@_> from its caller.
+
+ Args in foo are:
+
+The main use of the C<@_> pass-through feature is to write subroutines
+whose main job it is to call other subroutines for you. For further
+details, see L<perlsub>.
+
+=head2 How do I create a switch or case statement?
+
+In Perl 5.10, use the C<given-when> construct described in L<perlsyn>:
+
+ use 5.010;
+
+ given ( $string ) {
+ when( 'Fred' ) { say "I found Fred!" }
+ when( 'Barney' ) { say "I found Barney!" }
+ when( /Bamm-?Bamm/ ) { say "I found Bamm-Bamm!" }
+ default { say "I don't recognize the name!" }
+ };
+
+If one wants to use pure Perl and to be compatible with Perl versions
+prior to 5.10, the general answer is to use C<if-elsif-else>:
+
+ for ($variable_to_test) {
+ if (/pat1/) { } # do something
+ elsif (/pat2/) { } # do something else
+ elsif (/pat3/) { } # do something else
+ else { } # default
+ }
+
+Here's a simple example of a switch based on pattern matching,
+lined up in a way to make it look more like a switch statement.
+We'll do a multiway conditional based on the type of reference stored
+in $whatchamacallit:
+
+ SWITCH: for (ref $whatchamacallit) {
+
+ /^$/ && die "not a reference";
+
+ /SCALAR/ && do {
+ print_scalar($$ref);
+ last SWITCH;
+ };
+
+ /ARRAY/ && do {
+ print_array(@$ref);
+ last SWITCH;
+ };
+
+ /HASH/ && do {
+ print_hash(%$ref);
+ last SWITCH;
+ };
+
+ /CODE/ && do {
+ warn "can't print function ref";
+ last SWITCH;
+ };
+
+ # DEFAULT
+
+ warn "User defined type skipped";
+
+ }
+
+See L<perlsyn> for other examples in this style.
+
+Sometimes you should change the positions of the constant and the variable.
+For example, let's say you wanted to test which of many answers you were
+given, but in a case-insensitive way that also allows abbreviations.
+You can use the following technique if the strings all start with
+different characters or if you want to arrange the matches so that
+one takes precedence over another, as C<"SEND"> has precedence over
+C<"STOP"> here:
+
+ chomp($answer = <>);
+ if ("SEND" =~ /^\Q$answer/i) { print "Action is send\n" }
+ elsif ("STOP" =~ /^\Q$answer/i) { print "Action is stop\n" }
+ elsif ("ABORT" =~ /^\Q$answer/i) { print "Action is abort\n" }
+ elsif ("LIST" =~ /^\Q$answer/i) { print "Action is list\n" }
+ elsif ("EDIT" =~ /^\Q$answer/i) { print "Action is edit\n" }
+
+A totally different approach is to create a hash of function references.
+
+ my %commands = (
+ "happy" => \&joy,
+ "sad", => \&sullen,
+ "done" => sub { die "See ya!" },
+ "mad" => \&angry,
+ );
+
+ print "How are you? ";
+ chomp($string = <STDIN>);
+ if ($commands{$string}) {
+ $commands{$string}->();
+ } else {
+ print "No such command: $string\n";
+ }
+
+Starting from Perl 5.8, a source filter module, C<Switch>, can also be
+used to get switch and case. Its use is now discouraged, because it's
+not fully compatible with the native switch of Perl 5.10, and because,
+as it's implemented as a source filter, it doesn't always work as intended
+when complex syntax is involved.
+
+=head2 How can I catch accesses to undefined variables, functions, or methods?
+
+The AUTOLOAD method, discussed in L<perlsub/"Autoloading"> and
+L<perltoot/"AUTOLOAD: Proxy Methods">, lets you capture calls to
+undefined functions and methods.
+
+When it comes to undefined variables that would trigger a warning
+under C<use warnings>, you can promote the warning to an error.
+
+ use warnings FATAL => qw(uninitialized);
+
+=head2 Why can't a method included in this same file be found?
+
+Some possible reasons: your inheritance is getting confused, you've
+misspelled the method name, or the object is of the wrong type. Check
+out L<perltoot> for details about any of the above cases. You may
+also use C<print ref($object)> to find out the class C<$object> was
+blessed into.
+
+Another possible reason for problems is that you've used the
+indirect object syntax (eg, C<find Guru "Samy">) on a class name
+before Perl has seen that such a package exists. It's wisest to make
+sure your packages are all defined before you start using them, which
+will be taken care of if you use the C<use> statement instead of
+C<require>. If not, make sure to use arrow notation (eg.,
+C<< Guru->find("Samy") >>) instead. Object notation is explained in
+L<perlobj>.
+
+Make sure to read about creating modules in L<perlmod> and
+the perils of indirect objects in L<perlobj/"Method Invocation">.
+
+=head2 How can I find out my current or calling package?
+
+(contributed by brian d foy)
+
+To find the package you are currently in, use the special literal
+C<__PACKAGE__>, as documented in L<perldata>. You can only use the
+special literals as separate tokens, so you can't interpolate them
+into strings like you can with variables:
+
+ my $current_package = __PACKAGE__;
+ print "I am in package $current_package\n";
+
+If you want to find the package calling your code, perhaps to give better
+diagnostics as L<Carp> does, use the C<caller> built-in:
+
+ sub foo {
+ my @args = ...;
+ my( $package, $filename, $line ) = caller;
+
+ print "I was called from package $package\n";
+ );
+
+By default, your program starts in package C<main>, so you will
+always be in some package.
+
+This is different from finding out the package an object is blessed
+into, which might not be the current package. For that, use C<blessed>
+from L<Scalar::Util>, part of the Standard Library since Perl 5.8:
+
+ use Scalar::Util qw(blessed);
+ my $object_package = blessed( $object );
+
+Most of the time, you shouldn't care what package an object is blessed
+into, however, as long as it claims to inherit from that class:
+
+ my $is_right_class = eval { $object->isa( $package ) }; # true or false
+
+And, with Perl 5.10 and later, you don't have to check for an
+inheritance to see if the object can handle a role. For that, you can
+use C<DOES>, which comes from C<UNIVERSAL>:
+
+ my $class_does_it = eval { $object->DOES( $role ) }; # true or false
+
+You can safely replace C<isa> with C<DOES> (although the converse is not true).
+
+=head2 How can I comment out a large block of Perl code?
+
+(contributed by brian d foy)
+
+The quick-and-dirty way to comment out more than one line of Perl is
+to surround those lines with Pod directives. You have to put these
+directives at the beginning of the line and somewhere where Perl
+expects a new statement (so not in the middle of statements like the C<#>
+comments). You end the comment with C<=cut>, ending the Pod section:
+
+ =pod
+
+ my $object = NotGonnaHappen->new();
+
+ ignored_sub();
+
+ $wont_be_assigned = 37;
+
+ =cut
+
+The quick-and-dirty method only works well when you don't plan to
+leave the commented code in the source. If a Pod parser comes along,
+your multiline comment is going to show up in the Pod translation.
+A better way hides it from Pod parsers as well.
+
+The C<=begin> directive can mark a section for a particular purpose.
+If the Pod parser doesn't want to handle it, it just ignores it. Label
+the comments with C<comment>. End the comment using C<=end> with the
+same label. You still need the C<=cut> to go back to Perl code from
+the Pod comment:
+
+ =begin comment
+
+ my $object = NotGonnaHappen->new();
+
+ ignored_sub();
+
+ $wont_be_assigned = 37;
+
+ =end comment
+
+ =cut
+
+For more information on Pod, check out L<perlpod> and L<perlpodspec>.
+
+=head2 How do I clear a package?
+
+Use this code, provided by Mark-Jason Dominus:
+
+ sub scrub_package {
+ no strict 'refs';
+ my $pack = shift;
+ die "Shouldn't delete main package"
+ if $pack eq "" || $pack eq "main";
+ my $stash = *{$pack . '::'}{HASH};
+ my $name;
+ foreach $name (keys %$stash) {
+ my $fullname = $pack . '::' . $name;
+ # Get rid of everything with that name.
+ undef $$fullname;
+ undef @$fullname;
+ undef %$fullname;
+ undef &$fullname;
+ undef *$fullname;
+ }
+ }
+
+Or, if you're using a recent release of Perl, you can
+just use the Symbol::delete_package() function instead.
+
+=head2 How can I use a variable as a variable name?
+
+Beginners often think they want to have a variable contain the name
+of a variable.
+
+ $fred = 23;
+ $varname = "fred";
+ ++$$varname; # $fred now 24
+
+This works I<sometimes>, but it is a very bad idea for two reasons.
+
+The first reason is that this technique I<only works on global
+variables>. That means that if $fred is a lexical variable created
+with my() in the above example, the code wouldn't work at all: you'd
+accidentally access the global and skip right over the private lexical
+altogether. Global variables are bad because they can easily collide
+accidentally and in general make for non-scalable and confusing code.
+
+Symbolic references are forbidden under the C<use strict> pragma.
+They are not true references and consequently are not reference-counted
+or garbage-collected.
+
+The other reason why using a variable to hold the name of another
+variable is a bad idea is that the question often stems from a lack of
+understanding of Perl data structures, particularly hashes. By using
+symbolic references, you are just using the package's symbol-table hash
+(like C<%main::>) instead of a user-defined hash. The solution is to
+use your own hash or a real reference instead.
+
+ $USER_VARS{"fred"} = 23;
+ my $varname = "fred";
+ $USER_VARS{$varname}++; # not $$varname++
+
+There we're using the %USER_VARS hash instead of symbolic references.
+Sometimes this comes up in reading strings from the user with variable
+references and wanting to expand them to the values of your perl
+program's variables. This is also a bad idea because it conflates the
+program-addressable namespace and the user-addressable one. Instead of
+reading a string and expanding it to the actual contents of your program's
+own variables:
+
+ $str = 'this has a $fred and $barney in it';
+ $str =~ s/(\$\w+)/$1/eeg; # need double eval
+
+it would be better to keep a hash around like %USER_VARS and have
+variable references actually refer to entries in that hash:
+
+ $str =~ s/\$(\w+)/$USER_VARS{$1}/g; # no /e here at all
+
+That's faster, cleaner, and safer than the previous approach. Of course,
+you don't need to use a dollar sign. You could use your own scheme to
+make it less confusing, like bracketed percent symbols, etc.
+
+ $str = 'this has a %fred% and %barney% in it';
+ $str =~ s/%(\w+)%/$USER_VARS{$1}/g; # no /e here at all
+
+Another reason that folks sometimes think they want a variable to
+contain the name of a variable is that they don't know how to build
+proper data structures using hashes. For example, let's say they
+wanted two hashes in their program: %fred and %barney, and that they
+wanted to use another scalar variable to refer to those by name.
+
+ $name = "fred";
+ $$name{WIFE} = "wilma"; # set %fred
+
+ $name = "barney";
+ $$name{WIFE} = "betty"; # set %barney
+
+This is still a symbolic reference, and is still saddled with the
+problems enumerated above. It would be far better to write:
+
+ $folks{"fred"}{WIFE} = "wilma";
+ $folks{"barney"}{WIFE} = "betty";
+
+And just use a multilevel hash to start with.
+
+The only times that you absolutely I<must> use symbolic references are
+when you really must refer to the symbol table. This may be because it's
+something that one can't take a real reference to, such as a format name.
+Doing so may also be important for method calls, since these always go
+through the symbol table for resolution.
+
+In those cases, you would turn off C<strict 'refs'> temporarily so you
+can play around with the symbol table. For example:
+
+ @colors = qw(red blue green yellow orange purple violet);
+ for my $name (@colors) {
+ no strict 'refs'; # renege for the block
+ *$name = sub { "<FONT COLOR='$name'>@_</FONT>" };
+ }
+
+All those functions (red(), blue(), green(), etc.) appear to be separate,
+but the real code in the closure actually was compiled only once.
+
+So, sometimes you might want to use symbolic references to manipulate
+the symbol table directly. This doesn't matter for formats, handles, and
+subroutines, because they are always global--you can't use my() on them.
+For scalars, arrays, and hashes, though--and usually for subroutines--
+you probably only want to use hard references.
+
+=head2 What does "bad interpreter" mean?
+
+(contributed by brian d foy)
+
+The "bad interpreter" message comes from the shell, not perl. The
+actual message may vary depending on your platform, shell, and locale
+settings.
+
+If you see "bad interpreter - no such file or directory", the first
+line in your perl script (the "shebang" line) does not contain the
+right path to perl (or any other program capable of running scripts).
+Sometimes this happens when you move the script from one machine to
+another and each machine has a different path to perl--/usr/bin/perl
+versus /usr/local/bin/perl for instance. It may also indicate
+that the source machine has CRLF line terminators and the
+destination machine has LF only: the shell tries to find
+/usr/bin/perl<CR>, but can't.
+
+If you see "bad interpreter: Permission denied", you need to make your
+script executable.
+
+In either case, you should still be able to run the scripts with perl
+explicitly:
+
+ % perl script.pl
+
+If you get a message like "perl: command not found", perl is not in
+your PATH, which might also mean that the location of perl is not
+where you expect it so you need to adjust your shebang line.
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples in this file
+are hereby placed into the public domain. You are permitted and
+encouraged to use this code in your own programs for fun
+or for profit as you see fit. A simple comment in the code giving
+credit would be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq8.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq8.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq8.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1422 @@
+=head1 NAME
+
+perlfaq8 - System Interaction
+
+=head1 DESCRIPTION
+
+This section of the Perl FAQ covers questions involving operating
+system interaction. Topics include interprocess communication (IPC),
+control over the user-interface (keyboard, screen and pointing
+devices), and most anything else not related to data manipulation.
+
+Read the FAQs and documentation specific to the port of perl to your
+operating system (eg, L<perlvms>, L<perlplan9>, ...). These should
+contain more detailed information on the vagaries of your perl.
+
+=head2 How do I find out which operating system I'm running under?
+
+The C<$^O> variable (C<$OSNAME> if you use C<English>) contains an
+indication of the name of the operating system (not its release
+number) that your perl binary was built for.
+
+=head2 How come exec() doesn't return?
+X<exec> X<system> X<fork> X<open> X<pipe>
+
+(contributed by brian d foy)
+
+The C<exec> function's job is to turn your process into another
+command and never to return. If that's not what you want to do, don't
+use C<exec>. :)
+
+If you want to run an external command and still keep your Perl process
+going, look at a piped C<open>, C<fork>, or C<system>.
+
+=head2 How do I do fancy stuff with the keyboard/screen/mouse?
+
+How you access/control keyboards, screens, and pointing devices
+("mice") is system-dependent. Try the following modules:
+
+=over 4
+
+=item Keyboard
+
+ Term::Cap Standard perl distribution
+ Term::ReadKey CPAN
+ Term::ReadLine::Gnu CPAN
+ Term::ReadLine::Perl CPAN
+ Term::Screen CPAN
+
+=item Screen
+
+ Term::Cap Standard perl distribution
+ Curses CPAN
+ Term::ANSIColor CPAN
+
+=item Mouse
+
+ Tk CPAN
+ Wx CPAN
+ Gtk2 CPAN
+ Qt4 kdebindings4 package
+
+=back
+
+Some of these specific cases are shown as examples in other answers
+in this section of the perlfaq.
+
+=head2 How do I print something out in color?
+
+In general, you don't, because you don't know whether
+the recipient has a color-aware display device. If you
+know that they have an ANSI terminal that understands
+color, you can use the L<Term::ANSIColor> module from CPAN:
+
+ use Term::ANSIColor;
+ print color("red"), "Stop!\n", color("reset");
+ print color("green"), "Go!\n", color("reset");
+
+Or like this:
+
+ use Term::ANSIColor qw(:constants);
+ print RED, "Stop!\n", RESET;
+ print GREEN, "Go!\n", RESET;
+
+=head2 How do I read just one key without waiting for a return key?
+
+Controlling input buffering is a remarkably system-dependent matter.
+On many systems, you can just use the B<stty> command as shown in
+L<perlfunc/getc>, but as you see, that's already getting you into
+portability snags.
+
+ open(TTY, "+</dev/tty") or die "no tty: $!";
+ system "stty cbreak </dev/tty >/dev/tty 2>&1";
+ $key = getc(TTY); # perhaps this works
+ # OR ELSE
+ sysread(TTY, $key, 1); # probably this does
+ system "stty -cbreak </dev/tty >/dev/tty 2>&1";
+
+The L<Term::ReadKey> module from CPAN offers an easy-to-use interface that
+should be more efficient than shelling out to B<stty> for each key.
+It even includes limited support for Windows.
+
+ use Term::ReadKey;
+ ReadMode('cbreak');
+ $key = ReadKey(0);
+ ReadMode('normal');
+
+However, using the code requires that you have a working C compiler
+and can use it to build and install a CPAN module. Here's a solution
+using the standard L<POSIX> module, which is already on your system
+(assuming your system supports POSIX).
+
+ use HotKey;
+ $key = readkey();
+
+And here's the C<HotKey> module, which hides the somewhat mystifying calls
+to manipulate the POSIX termios structures.
+
+ # HotKey.pm
+ package HotKey;
+
+ use strict;
+ use warnings;
+
+ use parent 'Exporter';
+ our @EXPORT = qw(cbreak cooked readkey);
+
+ use POSIX qw(:termios_h);
+ my ($term, $oterm, $echo, $noecho, $fd_stdin);
+
+ $fd_stdin = fileno(STDIN);
+ $term = POSIX::Termios->new();
+ $term->getattr($fd_stdin);
+ $oterm = $term->getlflag();
+
+ $echo = ECHO | ECHOK | ICANON;
+ $noecho = $oterm & ~$echo;
+
+ sub cbreak {
+ $term->setlflag($noecho); # ok, so i don't want echo either
+ $term->setcc(VTIME, 1);
+ $term->setattr($fd_stdin, TCSANOW);
+ }
+
+ sub cooked {
+ $term->setlflag($oterm);
+ $term->setcc(VTIME, 0);
+ $term->setattr($fd_stdin, TCSANOW);
+ }
+
+ sub readkey {
+ my $key = '';
+ cbreak();
+ sysread(STDIN, $key, 1);
+ cooked();
+ return $key;
+ }
+
+ END { cooked() }
+
+ 1;
+
+=head2 How do I check whether input is ready on the keyboard?
+
+The easiest way to do this is to read a key in nonblocking mode with the
+L<Term::ReadKey> module from CPAN, passing it an argument of -1 to indicate
+not to block:
+
+ use Term::ReadKey;
+
+ ReadMode('cbreak');
+
+ if (defined (my $char = ReadKey(-1)) ) {
+ # input was waiting and it was $char
+ } else {
+ # no input was waiting
+ }
+
+ ReadMode('normal'); # restore normal tty settings
+
+=head2 How do I clear the screen?
+
+(contributed by brian d foy)
+
+To clear the screen, you just have to print the special sequence
+that tells the terminal to clear the screen. Once you have that
+sequence, output it when you want to clear the screen.
+
+You can use the L<Term::ANSIScreen> module to get the special
+sequence. Import the C<cls> function (or the C<:screen> tag):
+
+ use Term::ANSIScreen qw(cls);
+ my $clear_screen = cls();
+
+ print $clear_screen;
+
+The L<Term::Cap> module can also get the special sequence if you want
+to deal with the low-level details of terminal control. The C<Tputs>
+method returns the string for the given capability:
+
+ use Term::Cap;
+
+ my $terminal = Term::Cap->Tgetent( { OSPEED => 9600 } );
+ my $clear_string = $terminal->Tputs('cl');
+
+ print $clear_screen;
+
+On Windows, you can use the L<Win32::Console> module. After creating
+an object for the output filehandle you want to affect, call the
+C<Cls> method:
+
+ Win32::Console;
+
+ my $OUT = Win32::Console->new(STD_OUTPUT_HANDLE);
+ my $clear_string = $OUT->Cls;
+
+ print $clear_screen;
+
+If you have a command-line program that does the job, you can call
+it in backticks to capture whatever it outputs so you can use it
+later:
+
+ my $clear_string = `clear`;
+
+ print $clear_string;
+
+=head2 How do I get the screen size?
+
+If you have L<Term::ReadKey> module installed from CPAN,
+you can use it to fetch the width and height in characters
+and in pixels:
+
+ use Term::ReadKey;
+ my ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
+
+This is more portable than the raw C<ioctl>, but not as
+illustrative:
+
+ require 'sys/ioctl.ph';
+ die "no TIOCGWINSZ " unless defined &TIOCGWINSZ;
+ open(my $tty_fh, "+</dev/tty") or die "No tty: $!";
+ unless (ioctl($tty_fh, &TIOCGWINSZ, $winsize='')) {
+ die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
+ }
+ my ($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
+ print "(row,col) = ($row,$col)";
+ print " (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel;
+ print "\n";
+
+=head2 How do I ask the user for a password?
+
+(This question has nothing to do with the web. See a different
+FAQ for that.)
+
+There's an example of this in L<perlfunc/crypt>). First, you put the
+terminal into "no echo" mode, then just read the password normally.
+You may do this with an old-style C<ioctl()> function, POSIX terminal
+control (see L<POSIX> or its documentation the Camel Book), or a call
+to the B<stty> program, with varying degrees of portability.
+
+You can also do this for most systems using the L<Term::ReadKey> module
+from CPAN, which is easier to use and in theory more portable.
+
+ use Term::ReadKey;
+
+ ReadMode('noecho');
+ my $password = ReadLine(0);
+
+=head2 How do I read and write the serial port?
+
+This depends on which operating system your program is running on. In
+the case of Unix, the serial ports will be accessible through files in
+C</dev>; on other systems, device names will doubtless differ.
+Several problem areas common to all device interaction are the
+following:
+
+=over 4
+
+=item lockfiles
+
+Your system may use lockfiles to control multiple access. Make sure
+you follow the correct protocol. Unpredictable behavior can result
+from multiple processes reading from one device.
+
+=item open mode
+
+If you expect to use both read and write operations on the device,
+you'll have to open it for update (see L<perlfunc/"open"> for
+details). You may wish to open it without running the risk of
+blocking by using C<sysopen()> and C<O_RDWR|O_NDELAY|O_NOCTTY> from the
+L<Fcntl> module (part of the standard perl distribution). See
+L<perlfunc/"sysopen"> for more on this approach.
+
+=item end of line
+
+Some devices will be expecting a "\r" at the end of each line rather
+than a "\n". In some ports of perl, "\r" and "\n" are different from
+their usual (Unix) ASCII values of "\015" and "\012". You may have to
+give the numeric values you want directly, using octal ("\015"), hex
+("0x0D"), or as a control-character specification ("\cM").
+
+ print DEV "atv1\012"; # wrong, for some devices
+ print DEV "atv1\015"; # right, for some devices
+
+Even though with normal text files a "\n" will do the trick, there is
+still no unified scheme for terminating a line that is portable
+between Unix, DOS/Win, and Macintosh, except to terminate I<ALL> line
+ends with "\015\012", and strip what you don't need from the output.
+This applies especially to socket I/O and autoflushing, discussed
+next.
+
+=item flushing output
+
+If you expect characters to get to your device when you C<print()> them,
+you'll want to autoflush that filehandle. You can use C<select()>
+and the C<$|> variable to control autoflushing (see L<perlvar/$E<verbar>>
+and L<perlfunc/select>, or L<perlfaq5>, "How do I flush/unbuffer an
+output filehandle? Why must I do this?"):
+
+ my $old_handle = select($dev_fh);
+ $| = 1;
+ select($old_handle);
+
+You'll also see code that does this without a temporary variable, as in
+
+ select((select($deb_handle), $| = 1)[0]);
+
+Or if you don't mind pulling in a few thousand lines
+of code just because you're afraid of a little C<$|> variable:
+
+ use IO::Handle;
+ $dev_fh->autoflush(1);
+
+As mentioned in the previous item, this still doesn't work when using
+socket I/O between Unix and Macintosh. You'll need to hard code your
+line terminators, in that case.
+
+=item non-blocking input
+
+If you are doing a blocking C<read()> or C<sysread()>, you'll have to
+arrange for an alarm handler to provide a timeout (see
+L<perlfunc/alarm>). If you have a non-blocking open, you'll likely
+have a non-blocking read, which means you may have to use a 4-arg
+C<select()> to determine whether I/O is ready on that device (see
+L<perlfunc/"select">.
+
+=back
+
+While trying to read from his caller-id box, the notorious Jamie
+Zawinski C<< <jwz at netscape.com> >>, after much gnashing of teeth and
+fighting with C<sysread>, C<sysopen>, POSIX's C<tcgetattr> business,
+and various other functions that go bump in the night, finally came up
+with this:
+
+ sub open_modem {
+ use IPC::Open2;
+ my $stty = `/bin/stty -g`;
+ open2( \*MODEM_IN, \*MODEM_OUT, "cu -l$modem_device -s2400 2>&1");
+ # starting cu hoses /dev/tty's stty settings, even when it has
+ # been opened on a pipe...
+ system("/bin/stty $stty");
+ $_ = <MODEM_IN>;
+ chomp;
+ if ( !m/^Connected/ ) {
+ print STDERR "$0: cu printed `$_' instead of `Connected'\n";
+ }
+ }
+
+=head2 How do I decode encrypted password files?
+
+You spend lots and lots of money on dedicated hardware, but this is
+bound to get you talked about.
+
+Seriously, you can't if they are Unix password files--the Unix
+password system employs one-way encryption. It's more like hashing
+than encryption. The best you can do is check whether something else
+hashes to the same string. You can't turn a hash back into the
+original string. Programs like Crack can forcibly (and intelligently)
+try to guess passwords, but don't (can't) guarantee quick success.
+
+If you're worried about users selecting bad passwords, you should
+proactively check when they try to change their password (by modifying
+L<passwd(1)>, for example).
+
+=head2 How do I start a process in the background?
+
+(contributed by brian d foy)
+
+There's not a single way to run code in the background so you don't
+have to wait for it to finish before your program moves on to other
+tasks. Process management depends on your particular operating system,
+and many of the techniques are covered in L<perlipc>.
+
+Several CPAN modules may be able to help, including L<IPC::Open2> or
+L<IPC::Open3>, L<IPC::Run>, L<Parallel::Jobs>,
+L<Parallel::ForkManager>, L<POE>, L<Proc::Background>, and
+L<Win32::Process>. There are many other modules you might use, so
+check those namespaces for other options too.
+
+If you are on a Unix-like system, you might be able to get away with a
+system call where you put an C<&> on the end of the command:
+
+ system("cmd &")
+
+You can also try using C<fork>, as described in L<perlfunc> (although
+this is the same thing that many of the modules will do for you).
+
+=over 4
+
+=item STDIN, STDOUT, and STDERR are shared
+
+Both the main process and the backgrounded one (the "child" process)
+share the same STDIN, STDOUT and STDERR filehandles. If both try to
+access them at once, strange things can happen. You may want to close
+or reopen these for the child. You can get around this with
+C<open>ing a pipe (see L<perlfunc/"open">) but on some systems this
+means that the child process cannot outlive the parent.
+
+=item Signals
+
+You'll have to catch the SIGCHLD signal, and possibly SIGPIPE too.
+SIGCHLD is sent when the backgrounded process finishes. SIGPIPE is
+sent when you write to a filehandle whose child process has closed (an
+untrapped SIGPIPE can cause your program to silently die). This is
+not an issue with C<system("cmd&")>.
+
+=item Zombies
+
+You have to be prepared to "reap" the child process when it finishes.
+
+ $SIG{CHLD} = sub { wait };
+
+ $SIG{CHLD} = 'IGNORE';
+
+You can also use a double fork. You immediately C<wait()> for your
+first child, and the init daemon will C<wait()> for your grandchild once
+it exits.
+
+ unless ($pid = fork) {
+ unless (fork) {
+ exec "what you really wanna do";
+ die "exec failed!";
+ }
+ exit 0;
+ }
+ waitpid($pid, 0);
+
+See L<perlipc/"Signals"> for other examples of code to do this.
+Zombies are not an issue with C<system("prog &")>.
+
+=back
+
+=head2 How do I trap control characters/signals?
+
+You don't actually "trap" a control character. Instead, that character
+generates a signal which is sent to your terminal's currently
+foregrounded process group, which you then trap in your process.
+Signals are documented in L<perlipc/"Signals"> and the
+section on "Signals" in the Camel.
+
+You can set the values of the C<%SIG> hash to be the functions you want
+to handle the signal. After perl catches the signal, it looks in C<%SIG>
+for a key with the same name as the signal, then calls the subroutine
+value for that key.
+
+ # as an anonymous subroutine
+
+ $SIG{INT} = sub { syswrite(STDERR, "ouch\n", 5 ) };
+
+ # or a reference to a function
+
+ $SIG{INT} = \&ouch;
+
+ # or the name of the function as a string
+
+ $SIG{INT} = "ouch";
+
+Perl versions before 5.8 had in its C source code signal handlers which
+would catch the signal and possibly run a Perl function that you had set
+in C<%SIG>. This violated the rules of signal handling at that level
+causing perl to dump core. Since version 5.8.0, perl looks at C<%SIG>
+B<after> the signal has been caught, rather than while it is being caught.
+Previous versions of this answer were incorrect.
+
+=head2 How do I modify the shadow password file on a Unix system?
+
+If perl was installed correctly and your shadow library was written
+properly, the C<getpw*()> functions described in L<perlfunc> should in
+theory provide (read-only) access to entries in the shadow password
+file. To change the file, make a new shadow password file (the format
+varies from system to system--see L<passwd(1)> for specifics) and use
+C<pwd_mkdb(8)> to install it (see L<pwd_mkdb(8)> for more details).
+
+=head2 How do I set the time and date?
+
+Assuming you're running under sufficient permissions, you should be
+able to set the system-wide date and time by running the C<date(1)>
+program. (There is no way to set the time and date on a per-process
+basis.) This mechanism will work for Unix, MS-DOS, Windows, and NT;
+the VMS equivalent is C<set time>.
+
+However, if all you want to do is change your time zone, you can
+probably get away with setting an environment variable:
+
+ $ENV{TZ} = "MST7MDT"; # Unixish
+ $ENV{'SYS$TIMEZONE_DIFFERENTIAL'}="-5" # vms
+ system('trn', 'comp.lang.perl.misc');
+
+=head2 How can I sleep() or alarm() for under a second?
+X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
+
+If you want finer granularity than the 1 second that the C<sleep()>
+function provides, the easiest way is to use the C<select()> function as
+documented in L<perlfunc/"select">. Try the L<Time::HiRes> and
+the L<BSD::Itimer> modules (available from CPAN, and starting from
+Perl 5.8 L<Time::HiRes> is part of the standard distribution).
+
+=head2 How can I measure time under a second?
+X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
+
+(contributed by brian d foy)
+
+The L<Time::HiRes> module (part of the standard distribution as of
+Perl 5.8) measures time with the C<gettimeofday()> system call, which
+returns the time in microseconds since the epoch. If you can't install
+L<Time::HiRes> for older Perls and you are on a Unixish system, you
+may be able to call C<gettimeofday(2)> directly. See
+L<perlfunc/syscall>.
+
+=head2 How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
+
+You can use the C<END> block to simulate C<atexit()>. Each package's
+C<END> block is called when the program or thread ends. See the L<perlmod>
+manpage for more details about C<END> blocks.
+
+For example, you can use this to make sure your filter program managed
+to finish its output without filling up the disk:
+
+ END {
+ close(STDOUT) || die "stdout close failed: $!";
+ }
+
+The C<END> block isn't called when untrapped signals kill the program,
+though, so if you use C<END> blocks you should also use
+
+ use sigtrap qw(die normal-signals);
+
+Perl's exception-handling mechanism is its C<eval()> operator. You
+can use C<eval()> as C<setjmp> and C<die()> as C<longjmp>. For
+details of this, see the section on signals, especially the time-out
+handler for a blocking C<flock()> in L<perlipc/"Signals"> or the
+section on "Signals" in I<Programming Perl>.
+
+If exception handling is all you're interested in, use one of the
+many CPAN modules that handle exceptions, such as L<Try::Tiny>.
+
+If you want the C<atexit()> syntax (and an C<rmexit()> as well), try the
+C<AtExit> module available from CPAN.
+
+=head2 Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
+
+Some Sys-V based systems, notably Solaris 2.X, redefined some of the
+standard socket constants. Since these were constant across all
+architectures, they were often hardwired into perl code. The proper
+way to deal with this is to "use Socket" to get the correct values.
+
+Note that even though SunOS and Solaris are binary compatible, these
+values are different. Go figure.
+
+=head2 How can I call my system's unique C functions from Perl?
+
+In most cases, you write an external module to do it--see the answer
+to "Where can I learn about linking C with Perl? [h2xs, xsubpp]".
+However, if the function is a system call, and your system supports
+C<syscall()>, you can use the C<syscall> function (documented in
+L<perlfunc>).
+
+Remember to check the modules that came with your distribution, and
+CPAN as well--someone may already have written a module to do it. On
+Windows, try L<Win32::API>. On Macs, try L<Mac::Carbon>. If no module
+has an interface to the C function, you can inline a bit of C in your
+Perl source with L<Inline::C>.
+
+=head2 Where do I get the include files to do ioctl() or syscall()?
+
+Historically, these would be generated by the L<h2ph> tool, part of the
+standard perl distribution. This program converts C<cpp(1)> directives
+in C header files to files containing subroutine definitions, like
+C<SYS_getitimer()>, which you can use as arguments to your functions.
+It doesn't work perfectly, but it usually gets most of the job done.
+Simple files like F<errno.h>, F<syscall.h>, and F<socket.h> were fine,
+but the hard ones like F<ioctl.h> nearly always need to be hand-edited.
+Here's how to install the *.ph files:
+
+ 1. Become the super-user
+ 2. cd /usr/include
+ 3. h2ph *.h */*.h
+
+If your system supports dynamic loading, for reasons of portability and
+sanity you probably ought to use L<h2xs> (also part of the standard perl
+distribution). This tool converts C header files to Perl extensions.
+See L<perlxstut> for how to get started with L<h2xs>.
+
+If your system doesn't support dynamic loading, you still probably
+ought to use L<h2xs>. See L<perlxstut> and L<ExtUtils::MakeMaker> for
+more information (in brief, just use B<make perl> instead of a plain
+B<make> to rebuild perl with a new static extension).
+
+=head2 Why do setuid perl scripts complain about kernel problems?
+
+Some operating systems have bugs in the kernel that make setuid
+scripts inherently insecure. Perl gives you a number of options
+(described in L<perlsec>) to work around such systems.
+
+=head2 How can I open a pipe both to and from a command?
+
+The L<IPC::Open2> module (part of the standard perl distribution) is
+an easy-to-use approach that internally uses C<pipe()>, C<fork()>, and
+C<exec()> to do the job. Make sure you read the deadlock warnings in
+its documentation, though (see L<IPC::Open2>). See
+L<perlipc/"Bidirectional Communication with Another Process"> and
+L<perlipc/"Bidirectional Communication with Yourself">
+
+You may also use the L<IPC::Open3> module (part of the standard perl
+distribution), but be warned that it has a different order of
+arguments from L<IPC::Open2> (see L<IPC::Open3>).
+
+=head2 Why can't I get the output of a command with system()?
+
+You're confusing the purpose of C<system()> and backticks (``). C<system()>
+runs a command and returns exit status information (as a 16 bit value:
+the low 7 bits are the signal the process died from, if any, and
+the high 8 bits are the actual exit value). Backticks (``) run a
+command and return what it sent to STDOUT.
+
+ my $exit_status = system("mail-users");
+ my $output_string = `ls`;
+
+=head2 How can I capture STDERR from an external command?
+
+There are three basic ways of running external commands:
+
+ system $cmd; # using system()
+ my $output = `$cmd`; # using backticks (``)
+ open (my $pipe_fh, "$cmd |"); # using open()
+
+With C<system()>, both STDOUT and STDERR will go the same place as the
+script's STDOUT and STDERR, unless the C<system()> command redirects them.
+Backticks and C<open()> read B<only> the STDOUT of your command.
+
+You can also use the C<open3()> function from L<IPC::Open3>. Benjamin
+Goldberg provides some sample code:
+
+To capture a program's STDOUT, but discard its STDERR:
+
+ use IPC::Open3;
+ use File::Spec;
+ use Symbol qw(gensym);
+ open(NULL, ">", File::Spec->devnull);
+ my $pid = open3(gensym, \*PH, ">&NULL", "cmd");
+ while( <PH> ) { }
+ waitpid($pid, 0);
+
+To capture a program's STDERR, but discard its STDOUT:
+
+ use IPC::Open3;
+ use File::Spec;
+ use Symbol qw(gensym);
+ open(NULL, ">", File::Spec->devnull);
+ my $pid = open3(gensym, ">&NULL", \*PH, "cmd");
+ while( <PH> ) { }
+ waitpid($pid, 0);
+
+To capture a program's STDERR, and let its STDOUT go to our own STDERR:
+
+ use IPC::Open3;
+ use Symbol qw(gensym);
+ my $pid = open3(gensym, ">&STDERR", \*PH, "cmd");
+ while( <PH> ) { }
+ waitpid($pid, 0);
+
+To read both a command's STDOUT and its STDERR separately, you can
+redirect them to temp files, let the command run, then read the temp
+files:
+
+ use IPC::Open3;
+ use Symbol qw(gensym);
+ use IO::File;
+ local *CATCHOUT = IO::File->new_tmpfile;
+ local *CATCHERR = IO::File->new_tmpfile;
+ my $pid = open3(gensym, ">&CATCHOUT", ">&CATCHERR", "cmd");
+ waitpid($pid, 0);
+ seek $_, 0, 0 for \*CATCHOUT, \*CATCHERR;
+ while( <CATCHOUT> ) {}
+ while( <CATCHERR> ) {}
+
+But there's no real need for B<both> to be tempfiles... the following
+should work just as well, without deadlocking:
+
+ use IPC::Open3;
+ use Symbol qw(gensym);
+ use IO::File;
+ local *CATCHERR = IO::File->new_tmpfile;
+ my $pid = open3(gensym, \*CATCHOUT, ">&CATCHERR", "cmd");
+ while( <CATCHOUT> ) {}
+ waitpid($pid, 0);
+ seek CATCHERR, 0, 0;
+ while( <CATCHERR> ) {}
+
+And it'll be faster, too, since we can begin processing the program's
+stdout immediately, rather than waiting for the program to finish.
+
+With any of these, you can change file descriptors before the call:
+
+ open(STDOUT, ">logfile");
+ system("ls");
+
+or you can use Bourne shell file-descriptor redirection:
+
+ $output = `$cmd 2>some_file`;
+ open (PIPE, "cmd 2>some_file |");
+
+You can also use file-descriptor redirection to make STDERR a
+duplicate of STDOUT:
+
+ $output = `$cmd 2>&1`;
+ open (PIPE, "cmd 2>&1 |");
+
+Note that you I<cannot> simply open STDERR to be a dup of STDOUT
+in your Perl program and avoid calling the shell to do the redirection.
+This doesn't work:
+
+ open(STDERR, ">&STDOUT");
+ $alloutput = `cmd args`; # stderr still escapes
+
+This fails because the C<open()> makes STDERR go to where STDOUT was
+going at the time of the C<open()>. The backticks then make STDOUT go to
+a string, but don't change STDERR (which still goes to the old
+STDOUT).
+
+Note that you I<must> use Bourne shell (C<sh(1)>) redirection syntax in
+backticks, not C<csh(1)>! Details on why Perl's C<system()> and backtick
+and pipe opens all use the Bourne shell are in the
+F<versus/csh.whynot> article in the "Far More Than You Ever Wanted To
+Know" collection in L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz> . To
+capture a command's STDERR and STDOUT together:
+
+ $output = `cmd 2>&1`; # either with backticks
+ $pid = open(PH, "cmd 2>&1 |"); # or with an open pipe
+ while (<PH>) { } # plus a read
+
+To capture a command's STDOUT but discard its STDERR:
+
+ $output = `cmd 2>/dev/null`; # either with backticks
+ $pid = open(PH, "cmd 2>/dev/null |"); # or with an open pipe
+ while (<PH>) { } # plus a read
+
+To capture a command's STDERR but discard its STDOUT:
+
+ $output = `cmd 2>&1 1>/dev/null`; # either with backticks
+ $pid = open(PH, "cmd 2>&1 1>/dev/null |"); # or with an open pipe
+ while (<PH>) { } # plus a read
+
+To exchange a command's STDOUT and STDERR in order to capture the STDERR
+but leave its STDOUT to come out our old STDERR:
+
+ $output = `cmd 3>&1 1>&2 2>&3 3>&-`; # either with backticks
+ $pid = open(PH, "cmd 3>&1 1>&2 2>&3 3>&-|");# or with an open pipe
+ while (<PH>) { } # plus a read
+
+To read both a command's STDOUT and its STDERR separately, it's easiest
+to redirect them separately to files, and then read from those files
+when the program is done:
+
+ system("program args 1>program.stdout 2>program.stderr");
+
+Ordering is important in all these examples. That's because the shell
+processes file descriptor redirections in strictly left to right order.
+
+ system("prog args 1>tmpfile 2>&1");
+ system("prog args 2>&1 1>tmpfile");
+
+The first command sends both standard out and standard error to the
+temporary file. The second command sends only the old standard output
+there, and the old standard error shows up on the old standard out.
+
+=head2 Why doesn't open() return an error when a pipe open fails?
+
+If the second argument to a piped C<open()> contains shell
+metacharacters, perl C<fork()>s, then C<exec()>s a shell to decode the
+metacharacters and eventually run the desired program. If the program
+couldn't be run, it's the shell that gets the message, not Perl. All
+your Perl program can find out is whether the shell itself could be
+successfully started. You can still capture the shell's STDERR and
+check it for error messages. See L<"How can I capture STDERR from an
+external command?"> elsewhere in this document, or use the
+L<IPC::Open3> module.
+
+If there are no shell metacharacters in the argument of C<open()>, Perl
+runs the command directly, without using the shell, and can correctly
+report whether the command started.
+
+=head2 What's wrong with using backticks in a void context?
+
+Strictly speaking, nothing. Stylistically speaking, it's not a good
+way to write maintainable code. Perl has several operators for
+running external commands. Backticks are one; they collect the output
+from the command for use in your program. The C<system> function is
+another; it doesn't do this.
+
+Writing backticks in your program sends a clear message to the readers
+of your code that you wanted to collect the output of the command.
+Why send a clear message that isn't true?
+
+Consider this line:
+
+ `cat /etc/termcap`;
+
+You forgot to check C<$?> to see whether the program even ran
+correctly. Even if you wrote
+
+ print `cat /etc/termcap`;
+
+this code could and probably should be written as
+
+ system("cat /etc/termcap") == 0
+ or die "cat program failed!";
+
+which will echo the cat command's output as it is generated, instead
+of waiting until the program has completed to print it out. It also
+checks the return value.
+
+C<system> also provides direct control over whether shell wildcard
+processing may take place, whereas backticks do not.
+
+=head2 How can I call backticks without shell processing?
+
+This is a bit tricky. You can't simply write the command
+like this:
+
+ @ok = `grep @opts '$search_string' @filenames`;
+
+As of Perl 5.8.0, you can use C<open()> with multiple arguments.
+Just like the list forms of C<system()> and C<exec()>, no shell
+escapes happen.
+
+ open( GREP, "-|", 'grep', @opts, $search_string, @filenames );
+ chomp(@ok = <GREP>);
+ close GREP;
+
+You can also:
+
+ my @ok = ();
+ if (open(GREP, "-|")) {
+ while (<GREP>) {
+ chomp;
+ push(@ok, $_);
+ }
+ close GREP;
+ } else {
+ exec 'grep', @opts, $search_string, @filenames;
+ }
+
+Just as with C<system()>, no shell escapes happen when you C<exec()> a
+list. Further examples of this can be found in L<perlipc/"Safe Pipe
+Opens">.
+
+Note that if you're using Windows, no solution to this vexing issue is
+even possible. Even though Perl emulates C<fork()>, you'll still be
+stuck, because Windows does not have an argc/argv-style API.
+
+=head2 Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
+
+This happens only if your perl is compiled to use stdio instead of
+perlio, which is the default. Some (maybe all?) stdios set error and
+eof flags that you may need to clear. The L<POSIX> module defines
+C<clearerr()> that you can use. That is the technically correct way to
+do it. Here are some less reliable workarounds:
+
+=over 4
+
+=item 1
+
+Try keeping around the seekpointer and go there, like this:
+
+ my $where = tell($log_fh);
+ seek($log_fh, $where, 0);
+
+=item 2
+
+If that doesn't work, try seeking to a different part of the file and
+then back.
+
+=item 3
+
+If that doesn't work, try seeking to a different part of
+the file, reading something, and then seeking back.
+
+=item 4
+
+If that doesn't work, give up on your stdio package and use sysread.
+
+=back
+
+=head2 How can I convert my shell script to perl?
+
+Learn Perl and rewrite it. Seriously, there's no simple converter.
+Things that are awkward to do in the shell are easy to do in Perl, and
+this very awkwardness is what would make a shell->perl converter
+nigh-on impossible to write. By rewriting it, you'll think about what
+you're really trying to do, and hopefully will escape the shell's
+pipeline datastream paradigm, which while convenient for some matters,
+causes many inefficiencies.
+
+=head2 Can I use perl to run a telnet or ftp session?
+
+Try the L<Net::FTP>, L<TCP::Client>, and L<Net::Telnet> modules
+(available from CPAN).
+L<http://www.cpan.org/scripts/netstuff/telnet.emul.shar> will also help
+for emulating the telnet protocol, but L<Net::Telnet> is quite
+probably easier to use.
+
+If all you want to do is pretend to be telnet but don't need
+the initial telnet handshaking, then the standard dual-process
+approach will suffice:
+
+ use IO::Socket; # new in 5.004
+ my $handle = IO::Socket::INET->new('www.perl.com:80')
+ or die "can't connect to port 80 on www.perl.com $!";
+ $handle->autoflush(1);
+ if (fork()) { # XXX: undef means failure
+ select($handle);
+ print while <STDIN>; # everything from stdin to socket
+ } else {
+ print while <$handle>; # everything from socket to stdout
+ }
+ close $handle;
+ exit;
+
+=head2 How can I write expect in Perl?
+
+Once upon a time, there was a library called F<chat2.pl> (part of the
+standard perl distribution), which never really got finished. If you
+find it somewhere, I<don't use it>. These days, your best bet is to
+look at the L<Expect> module available from CPAN, which also requires two
+other modules from CPAN, L<IO::Pty> and L<IO::Stty>.
+
+=head2 Is there a way to hide perl's command line from programs such as "ps"?
+
+First of all note that if you're doing this for security reasons (to
+avoid people seeing passwords, for example) then you should rewrite
+your program so that critical information is never given as an
+argument. Hiding the arguments won't make your program completely
+secure.
+
+To actually alter the visible command line, you can assign to the
+variable $0 as documented in L<perlvar>. This won't work on all
+operating systems, though. Daemon programs like sendmail place their
+state there, as in:
+
+ $0 = "orcus [accepting connections]";
+
+=head2 I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?
+
+=over 4
+
+=item Unix
+
+In the strictest sense, it can't be done--the script executes as a
+different process from the shell it was started from. Changes to a
+process are not reflected in its parent--only in any children
+created after the change. There is shell magic that may allow you to
+fake it by C<eval()>ing the script's output in your shell; check out the
+comp.unix.questions FAQ for details.
+
+=back
+
+=head2 How do I close a process's filehandle without waiting for it to complete?
+
+Assuming your system supports such things, just send an appropriate signal
+to the process (see L<perlfunc/"kill">). It's common to first send a TERM
+signal, wait a little bit, and then send a KILL signal to finish it off.
+
+=head2 How do I fork a daemon process?
+
+If by daemon process you mean one that's detached (disassociated from
+its tty), then the following process is reported to work on most
+Unixish systems. Non-Unix users should check their Your_OS::Process
+module for other solutions.
+
+=over 4
+
+=item *
+
+Open /dev/tty and use the TIOCNOTTY ioctl on it. See L<tty(1)>
+for details. Or better yet, you can just use the C<POSIX::setsid()>
+function, so you don't have to worry about process groups.
+
+=item *
+
+Change directory to /
+
+=item *
+
+Reopen STDIN, STDOUT, and STDERR so they're not connected to the old
+tty.
+
+=item *
+
+Background yourself like this:
+
+ fork && exit;
+
+=back
+
+The L<Proc::Daemon> module, available from CPAN, provides a function to
+perform these actions for you.
+
+=head2 How do I find out if I'm running interactively or not?
+
+(contributed by brian d foy)
+
+This is a difficult question to answer, and the best answer is
+only a guess.
+
+What do you really want to know? If you merely want to know if one of
+your filehandles is connected to a terminal, you can try the C<-t>
+file test:
+
+ if( -t STDOUT ) {
+ print "I'm connected to a terminal!\n";
+ }
+
+However, you might be out of luck if you expect that means there is a
+real person on the other side. With the L<Expect> module, another
+program can pretend to be a person. The program might even come close
+to passing the Turing test.
+
+The L<IO::Interactive> module does the best it can to give you an
+answer. Its C<is_interactive> function returns an output filehandle;
+that filehandle points to standard output if the module thinks the
+session is interactive. Otherwise, the filehandle is a null handle
+that simply discards the output:
+
+ use IO::Interactive;
+
+ print { is_interactive } "I might go to standard output!\n";
+
+This still doesn't guarantee that a real person is answering your
+prompts or reading your output.
+
+If you want to know how to handle automated testing for your
+distribution, you can check the environment. The CPAN
+Testers, for instance, set the value of C<AUTOMATED_TESTING>:
+
+ unless( $ENV{AUTOMATED_TESTING} ) {
+ print "Hello interactive tester!\n";
+ }
+
+=head2 How do I timeout a slow event?
+
+Use the C<alarm()> function, probably in conjunction with a signal
+handler, as documented in L<perlipc/"Signals"> and the section on
+"Signals" in the Camel. You may instead use the more flexible
+L<Sys::AlarmCall> module available from CPAN.
+
+The C<alarm()> function is not implemented on all versions of Windows.
+Check the documentation for your specific version of Perl.
+
+=head2 How do I set CPU limits?
+X<BSD::Resource> X<limit> X<CPU>
+
+(contributed by Xho)
+
+Use the L<BSD::Resource> module from CPAN. As an example:
+
+ use BSD::Resource;
+ setrlimit(RLIMIT_CPU,10,20) or die $!;
+
+This sets the soft and hard limits to 10 and 20 seconds, respectively.
+After 10 seconds of time spent running on the CPU (not "wall" time),
+the process will be sent a signal (XCPU on some systems) which, if not
+trapped, will cause the process to terminate. If that signal is
+trapped, then after 10 more seconds (20 seconds in total) the process
+will be killed with a non-trappable signal.
+
+See the L<BSD::Resource> and your systems documentation for the gory
+details.
+
+=head2 How do I avoid zombies on a Unix system?
+
+Use the reaper code from L<perlipc/"Signals"> to call C<wait()> when a
+SIGCHLD is received, or else use the double-fork technique described
+in L<perlfaq8/"How do I start a process in the background?">.
+
+=head2 How do I use an SQL database?
+
+The L<DBI> module provides an abstract interface to most database
+servers and types, including Oracle, DB2, Sybase, mysql, Postgresql,
+ODBC, and flat files. The DBI module accesses each database type
+through a database driver, or DBD. You can see a complete list of
+available drivers on CPAN: L<http://www.cpan.org/modules/by-module/DBD/> .
+You can read more about DBI on L<http://dbi.perl.org/> .
+
+Other modules provide more specific access: L<Win32::ODBC>, L<Alzabo>,
+C<iodbc>, and others found on CPAN Search: L<http://search.cpan.org/> .
+
+=head2 How do I make a system() exit on control-C?
+
+You can't. You need to imitate the C<system()> call (see L<perlipc> for
+sample code) and then have a signal handler for the INT signal that
+passes the signal on to the subprocess. Or you can check for it:
+
+ $rc = system($cmd);
+ if ($rc & 127) { die "signal death" }
+
+=head2 How do I open a file without blocking?
+
+If you're lucky enough to be using a system that supports
+non-blocking reads (most Unixish systems do), you need only to use the
+C<O_NDELAY> or C<O_NONBLOCK> flag from the C<Fcntl> module in conjunction with
+C<sysopen()>:
+
+ use Fcntl;
+ sysopen(my $fh, "/foo/somefile", O_WRONLY|O_NDELAY|O_CREAT, 0644)
+ or die "can't open /foo/somefile: $!":
+
+=head2 How do I tell the difference between errors from the shell and perl?
+
+(answer contributed by brian d foy)
+
+When you run a Perl script, something else is running the script for you,
+and that something else may output error messages. The script might
+emit its own warnings and error messages. Most of the time you cannot
+tell who said what.
+
+You probably cannot fix the thing that runs perl, but you can change how
+perl outputs its warnings by defining a custom warning and die functions.
+
+Consider this script, which has an error you may not notice immediately.
+
+ #!/usr/locl/bin/perl
+
+ print "Hello World\n";
+
+I get an error when I run this from my shell (which happens to be
+bash). That may look like perl forgot it has a C<print()> function,
+but my shebang line is not the path to perl, so the shell runs the
+script, and I get the error.
+
+ $ ./test
+ ./test: line 3: print: command not found
+
+A quick and dirty fix involves a little bit of code, but this may be all
+you need to figure out the problem.
+
+ #!/usr/bin/perl -w
+
+ BEGIN {
+ $SIG{__WARN__} = sub{ print STDERR "Perl: ", @_; };
+ $SIG{__DIE__} = sub{ print STDERR "Perl: ", @_; exit 1};
+ }
+
+ $a = 1 + undef;
+ $x / 0;
+ __END__
+
+The perl message comes out with "Perl" in front. The C<BEGIN> block
+works at compile time so all of the compilation errors and warnings
+get the "Perl:" prefix too.
+
+ Perl: Useless use of division (/) in void context at ./test line 9.
+ Perl: Name "main::a" used only once: possible typo at ./test line 8.
+ Perl: Name "main::x" used only once: possible typo at ./test line 9.
+ Perl: Use of uninitialized value in addition (+) at ./test line 8.
+ Perl: Use of uninitialized value in division (/) at ./test line 9.
+ Perl: Illegal division by zero at ./test line 9.
+ Perl: Illegal division by zero at -e line 3.
+
+If I don't see that "Perl:", it's not from perl.
+
+You could also just know all the perl errors, and although there are
+some people who may know all of them, you probably don't. However, they
+all should be in the L<perldiag> manpage. If you don't find the error in
+there, it probably isn't a perl error.
+
+Looking up every message is not the easiest way, so let perl to do it
+for you. Use the diagnostics pragma with turns perl's normal messages
+into longer discussions on the topic.
+
+ use diagnostics;
+
+If you don't get a paragraph or two of expanded discussion, it
+might not be perl's message.
+
+=head2 How do I install a module from CPAN?
+
+(contributed by brian d foy)
+
+The easiest way is to have a module also named CPAN do it for you by using
+the C<cpan> command that comes with Perl. You can give it a list of modules
+to install:
+
+ $ cpan IO::Interactive Getopt::Whatever
+
+If you prefer C<CPANPLUS>, it's just as easy:
+
+ $ cpanp i IO::Interactive Getopt::Whatever
+
+If you want to install a distribution from the current directory, you can
+tell C<CPAN.pm> to install C<.> (the full stop):
+
+ $ cpan .
+
+See the documentation for either of those commands to see what else
+you can do.
+
+If you want to try to install a distribution by yourself, resolving
+all dependencies on your own, you follow one of two possible build
+paths.
+
+For distributions that use I<Makefile.PL>:
+
+ $ perl Makefile.PL
+ $ make test install
+
+For distributions that use I<Build.PL>:
+
+ $ perl Build.PL
+ $ ./Build test
+ $ ./Build install
+
+Some distributions may need to link to libraries or other third-party
+code and their build and installation sequences may be more complicated.
+Check any I<README> or I<INSTALL> files that you may find.
+
+=head2 What's the difference between require and use?
+
+(contributed by brian d foy)
+
+Perl runs C<require> statement at run-time. Once Perl loads, compiles,
+and runs the file, it doesn't do anything else. The C<use> statement
+is the same as a C<require> run at compile-time, but Perl also calls the
+C<import> method for the loaded package. These two are the same:
+
+ use MODULE qw(import list);
+
+ BEGIN {
+ require MODULE;
+ MODULE->import(import list);
+ }
+
+However, you can suppress the C<import> by using an explicit, empty
+import list. Both of these still happen at compile-time:
+
+ use MODULE ();
+
+ BEGIN {
+ require MODULE;
+ }
+
+Since C<use> will also call the C<import> method, the actual value
+for C<MODULE> must be a bareword. That is, C<use> cannot load files
+by name, although C<require> can:
+
+ require "$ENV{HOME}/lib/Foo.pm"; # no @INC searching!
+
+See the entry for C<use> in L<perlfunc> for more details.
+
+=head2 How do I keep my own module/library directory?
+
+When you build modules, tell Perl where to install the modules.
+
+If you want to install modules for your own use, the easiest way might
+be L<local::lib>, which you can download from CPAN. It sets various
+installation settings for you, and uses those same settings within
+your programs.
+
+If you want more flexibility, you need to configure your CPAN client
+for your particular situation.
+
+For C<Makefile.PL>-based distributions, use the INSTALL_BASE option
+when generating Makefiles:
+
+ perl Makefile.PL INSTALL_BASE=/mydir/perl
+
+You can set this in your C<CPAN.pm> configuration so modules
+automatically install in your private library directory when you use
+the CPAN.pm shell:
+
+ % cpan
+ cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
+ cpan> o conf commit
+
+For C<Build.PL>-based distributions, use the --install_base option:
+
+ perl Build.PL --install_base /mydir/perl
+
+You can configure C<CPAN.pm> to automatically use this option too:
+
+ % cpan
+ cpan> o conf mbuild_arg "--install_base /mydir/perl"
+ cpan> o conf commit
+
+INSTALL_BASE tells these tools to put your modules into
+F</mydir/perl/lib/perl5>. See L<How do I add a directory to my
+include path (@INC) at runtime?> for details on how to run your newly
+installed modules.
+
+There is one caveat with INSTALL_BASE, though, since it acts
+differently from the PREFIX and LIB settings that older versions of
+L<ExtUtils::MakeMaker> advocated. INSTALL_BASE does not support
+installing modules for multiple versions of Perl or different
+architectures under the same directory. You should consider whether you
+really want that and, if you do, use the older PREFIX and LIB
+settings. See the L<ExtUtils::Makemaker> documentation for more details.
+
+=head2 How do I add the directory my program lives in to the module/library search path?
+
+(contributed by brian d foy)
+
+If you know the directory already, you can add it to C<@INC> as you would
+for any other directory. You might <use lib> if you know the directory
+at compile time:
+
+ use lib $directory;
+
+The trick in this task is to find the directory. Before your script does
+anything else (such as a C<chdir>), you can get the current working
+directory with the C<Cwd> module, which comes with Perl:
+
+ BEGIN {
+ use Cwd;
+ our $directory = cwd;
+ }
+
+ use lib $directory;
+
+You can do a similar thing with the value of C<$0>, which holds the
+script name. That might hold a relative path, but C<rel2abs> can turn
+it into an absolute path. Once you have the
+
+ BEGIN {
+ use File::Spec::Functions qw(rel2abs);
+ use File::Basename qw(dirname);
+
+ my $path = rel2abs( $0 );
+ our $directory = dirname( $path );
+ }
+
+ use lib $directory;
+
+The L<FindBin> module, which comes with Perl, might work. It finds the
+directory of the currently running script and puts it in C<$Bin>, which
+you can then use to construct the right library path:
+
+ use FindBin qw($Bin);
+
+You can also use L<local::lib> to do much of the same thing. Install
+modules using L<local::lib>'s settings then use the module in your
+program:
+
+ use local::lib; # sets up a local lib at ~/perl5
+
+See the L<local::lib> documentation for more details.
+
+=head2 How do I add a directory to my include path (@INC) at runtime?
+
+Here are the suggested ways of modifying your include path, including
+environment variables, run-time switches, and in-code statements:
+
+=over 4
+
+=item the C<PERLLIB> environment variable
+
+ $ export PERLLIB=/path/to/my/dir
+ $ perl program.pl
+
+=item the C<PERL5LIB> environment variable
+
+ $ export PERL5LIB=/path/to/my/dir
+ $ perl program.pl
+
+=item the C<perl -Idir> command line flag
+
+ $ perl -I/path/to/my/dir program.pl
+
+=item the C<lib> pragma:
+
+ use lib "$ENV{HOME}/myown_perllib";
+
+=item the L<local::lib> module:
+
+ use local::lib;
+
+ use local::lib "~/myown_perllib";
+
+=back
+
+The last is particularly useful because it knows about machine-dependent
+architectures. The C<lib.pm> pragmatic module was first
+included with the 5.002 release of Perl.
+
+=head2 What is socket.ph and where do I get it?
+
+It's a Perl 4 style file defining values for system networking
+constants. Sometimes it is built using L<h2ph> when Perl is installed,
+but other times it is not. Modern programs should use C<use Socket;>
+instead.
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples in this file
+are hereby placed into the public domain. You are permitted and
+encouraged to use this code in your own programs for fun
+or for profit as you see fit. A simple comment in the code giving
+credit would be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlfaq9.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlfaq9.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlfaq9.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,426 @@
+=head1 NAME
+
+perlfaq9 - Web, Email and Networking
+
+=head1 DESCRIPTION
+
+This section deals with questions related to running web sites,
+sending and receiving email as well as general networking.
+
+=head2 Should I use a web framework?
+
+Yes. If you are building a web site with any level of interactivity
+(forms / users / databases), you
+will want to use a framework to make handling requests
+and responses easier.
+
+If there is no interactivity then you may still want
+to look at using something like L<Template Toolkit|https://metacpan.org/module/Template>
+or L<Plack::Middleware::TemplateToolkit>
+so maintenance of your HTML files (and other assets) is easier.
+
+=head2 Which web framework should I use?
+X<framework> X<CGI.pm> X<CGI> X<Catalyst> X<Dancer>
+
+There is no simple answer to this question. Perl frameworks can run everything
+from basic file servers and small scale intranets to massive multinational
+multilingual websites that are the core to international businesses.
+
+Below is a list of a few frameworks with comments which might help you in
+making a decision, depending on your specific requirements. Start by reading
+the docs, then ask questions on the relevant mailing list or IRC channel.
+
+=over 4
+
+=item L<Catalyst>
+
+Strongly object-oriented and fully-featured with a long development history and
+a large community and addon ecosystem. It is excellent for large and complex
+applications, where you have full control over the server.
+
+=item L<Dancer>
+
+Young and free of legacy weight, providing a lightweight and easy to learn API.
+Has a growing addon ecosystem. It is best used for smaller projects and
+very easy to learn for beginners.
+
+=item L<Mojolicious>
+
+Fairly young with a focus on HTML5 and real-time web technologies such as
+WebSockets.
+
+=item L<Web::Simple>
+
+Currently experimental, strongly object-oriented, built for speed and intended
+as a toolkit for building micro web apps, custom frameworks or for tieing
+together existing Plack-compatible web applications with one central dispatcher.
+
+=back
+
+All of these interact with or use L<Plack> which is worth understanding
+the basics of when building a website in Perl (there is a lot of useful
+L<Plack::Middleware|https://metacpan.org/search?q=plack%3A%3Amiddleware>).
+
+=head2 What is Plack and PSGI?
+
+L<PSGI> is the Perl Web Server Gateway Interface Specification, it is
+a standard that many Perl web frameworks use, you should not need to
+understand it to build a web site, the part you might want to use is L<Plack>.
+
+L<Plack> is a set of tools for using the PSGI stack. It contains
+L<middleware|https://metacpan.org/search?q=plack%3A%3Amiddleware>
+components, a reference server and utilities for Web application frameworks.
+Plack is like Ruby's Rack or Python's Paste for WSGI.
+
+You could build a web site using L<Plack> and your own code,
+but for anything other than a very basic web site, using a web framework
+(that uses L<Plack>) is a better option.
+
+=head2 How do I remove HTML from a string?
+
+Use L<HTML::Strip>, or L<HTML::FormatText> which not only removes HTML
+but also attempts to do a little simple formatting of the resulting
+plain text.
+
+=head2 How do I extract URLs?
+
+L<HTML::SimpleLinkExtor> will extract URLs from HTML, it handles anchors,
+images, objects, frames, and many other tags that can contain a URL.
+If you need anything more complex, you can create your own subclass of
+L<HTML::LinkExtor> or L<HTML::Parser>. You might even use
+L<HTML::SimpleLinkExtor> as an example for something specifically
+suited to your needs.
+
+You can use L<URI::Find> to extract URLs from an arbitrary text document.
+
+=head2 How do I fetch an HTML file?
+
+(contributed by brian d foy)
+
+Use the libwww-perl distribution. The L<LWP::Simple> module can fetch web
+resources and give their content back to you as a string:
+
+ use LWP::Simple qw(get);
+
+ my $html = get( "http://www.example.com/index.html" );
+
+It can also store the resource directly in a file:
+
+ use LWP::Simple qw(getstore);
+
+ getstore( "http://www.example.com/index.html", "foo.html" );
+
+If you need to do something more complicated, you can use
+L<LWP::UserAgent> module to create your own user-agent (e.g. browser)
+to get the job done. If you want to simulate an interactive web
+browser, you can use the L<WWW::Mechanize> module.
+
+=head2 How do I automate an HTML form submission?
+
+If you are doing something complex, such as moving through many pages
+and forms or a web site, you can use L<WWW::Mechanize>. See its
+documentation for all the details.
+
+If you're submitting values using the GET method, create a URL and encode
+the form using the C<query_form> method:
+
+ use LWP::Simple;
+ use URI::URL;
+
+ my $url = url('L<http://www.perl.com/cgi-bin/cpan_mod')>;
+ $url->query_form(module => 'DB_File', readme => 1);
+ $content = get($url);
+
+If you're using the POST method, create your own user agent and encode
+the content appropriately.
+
+ use HTTP::Request::Common qw(POST);
+ use LWP::UserAgent;
+
+ my $ua = LWP::UserAgent->new();
+ my $req = POST 'L<http://www.perl.com/cgi-bin/cpan_mod'>,
+ [ module => 'DB_File', readme => 1 ];
+ my $content = $ua->request($req)->as_string;
+
+=head2 How do I decode or create those %-encodings on the web?
+X<URI> X<URI::Escape> X<RFC 2396>
+
+Most of the time you should not need to do this as
+your web framework, or if you are making a request,
+the L<LWP> or other module would handle it for you.
+
+To encode a string yourself, use the L<URI::Escape> module. The C<uri_escape>
+function returns the escaped string:
+
+ my $original = "Colon : Hash # Percent %";
+
+ my $escaped = uri_escape( $original );
+
+ print "$escaped\n"; # 'Colon%20%3A%20Hash%20%23%20Percent%20%25'
+
+To decode the string, use the C<uri_unescape> function:
+
+ my $unescaped = uri_unescape( $escaped );
+
+ print $unescaped; # back to original
+
+Remember not to encode a full URI, you need to escape each
+component separately and then join them together.
+
+=head2 How do I redirect to another page?
+
+Most Perl Web Frameworks will have a mechanism for doing this,
+using the L<Catalyst> framework it would be:
+
+ $c->res->redirect($url);
+ $c->detach();
+
+If you are using Plack (which most frameworks do), then
+L<Plack::Middleware::Rewrite> is worth looking at if you
+are migrating from Apache or have URL's you want to always
+redirect.
+
+=head2 How do I put a password on my web pages?
+
+See if the web framework you are using has an
+authentication system and if that fits your needs.
+
+Alternativly look at L<Plack::Middleware::Auth::Basic>,
+or one of the other L<Plack authentication|https://metacpan.org/search?q=plack+auth>
+options.
+
+=head2 How do I make sure users can't enter values into a form that causes my CGI script to do bad things?
+
+(contributed by brian d foy)
+
+You can't prevent people from sending your script bad data. Even if
+you add some client-side checks, people may disable them or bypass
+them completely. For instance, someone might use a module such as
+L<LWP> to submit to your web site. If you want to prevent data that
+try to use SQL injection or other sorts of attacks (and you should
+want to), you have to not trust any data that enter your program.
+
+The L<perlsec> documentation has general advice about data security.
+If you are using the L<DBI> module, use placeholder to fill in data.
+If you are running external programs with C<system> or C<exec>, use
+the list forms. There are many other precautions that you should take,
+too many to list here, and most of them fall under the category of not
+using any data that you don't intend to use. Trust no one.
+
+=head2 How do I parse a mail header?
+
+Use the L<Email::MIME> module. It's well-tested and supports all the
+craziness that you'll see in the real world (comment-folding whitespace,
+encodings, comments, etc.).
+
+ use Email::MIME;
+
+ my $message = Email::MIME->new($rfc2822);
+ my $subject = $message->header('Subject');
+ my $from = $message->header('From');
+
+If you've already got some other kind of email object, consider passing
+it to L<Email::Abstract> and then using its cast method to get an
+L<Email::MIME> object:
+
+ my $mail_message_object = read_message();
+ my $abstract = Email::Abstract->new($mail_message_object);
+ my $email_mime_object = $abstract->cast('Email::MIME');
+
+=head2 How do I check a valid mail address?
+
+(partly contributed by Aaron Sherman)
+
+This isn't as simple a question as it sounds. There are two parts:
+
+a) How do I verify that an email address is correctly formatted?
+
+b) How do I verify that an email address targets a valid recipient?
+
+Without sending mail to the address and seeing whether there's a human
+on the other end to answer you, you cannot fully answer part I<b>, but
+the L<Email::Valid> module will do both part I<a> and part I<b> as far
+as you can in real-time.
+
+Our best advice for verifying a person's mail address is to have them
+enter their address twice, just as you normally do to change a
+password. This usually weeds out typos. If both versions match, send
+mail to that address with a personal message. If you get the message
+back and they've followed your directions, you can be reasonably
+assured that it's real.
+
+A related strategy that's less open to forgery is to give them a PIN
+(personal ID number). Record the address and PIN (best that it be a
+random one) for later processing. In the mail you send, include a link to
+your site with the PIN included. If the mail bounces, you know it's not
+valid. If they don't click on the link, either they forged the address or
+(assuming they got the message) following through wasn't important so you
+don't need to worry about it.
+
+=head2 How do I decode a MIME/BASE64 string?
+
+The L<MIME::Base64> package handles this as well as the MIME/QP encoding.
+Decoding base 64 becomes as simple as:
+
+ use MIME::Base64;
+ my $decoded = decode_base64($encoded);
+
+The L<Email::MIME> module can decode base 64-encoded email message parts
+transparently so the developer doesn't need to worry about it.
+
+=head2 How do I find the user's mail address?
+
+Ask them for it. There are so many email providers available that it's
+unlikely the local system has any idea how to determine a user's email address.
+
+The exception is for organization-specific email (e.g. foo at yourcompany.com)
+where policy can be codified in your program. In that case, you could look at
+$ENV{USER}, $ENV{LOGNAME}, and getpwuid($<) in scalar context, like so:
+
+ my $user_name = getpwuid($<)
+
+But you still cannot make assumptions about whether this is correct, unless
+your policy says it is. You really are best off asking the user.
+
+=head2 How do I send email?
+
+Use the L<Email::MIME> and L<Email::Sender::Simple> modules, like so:
+
+ # first, create your message
+ my $message = Email::MIME->create(
+ header_str => [
+ From => 'you at example.com',
+ To => 'friend at example.com',
+ Subject => 'Happy birthday!',
+ ],
+ attributes => {
+ encoding => 'quoted-printable',
+ charset => 'utf-8',
+ },
+ body_str => "Happy birthday to you!\n",
+ );
+
+ use Email::Sender::Simple qw(sendmail);
+ sendmail($message);
+
+By default, L<Email::Sender::Simple> will try `sendmail` first, if it exists
+in your $PATH. This generally isn't the case. If there's a remote mail
+server you use to send mail, consider investigating one of the Transport
+classes. At time of writing, the available transports include:
+
+=over 4
+
+=item L<Email::Sender::Transport::Sendmail>
+
+This is the default. If you can use the L<mail(1)> or L<mailx(1)>
+program to send mail from the machine where your code runs, you should
+be able to use this.
+
+=item L<Email::Sender::Transport::SMTP>
+
+This transport contacts a remote SMTP server over TCP. It optionally
+uses SSL and can authenticate to the server via SASL.
+
+=item L<Email::Sender::Transport::SMTP::TLS>
+
+This is like the SMTP transport, but uses TLS security. You can
+authenticate with this module as well, using any mechanisms your server
+supports after STARTTLS.
+
+=back
+
+Telling L<Email::Sender::Simple> to use your transport is straightforward.
+
+ sendmail(
+ $message,
+ {
+ transport => $email_sender_transport_object,
+ }
+ );
+
+=head2 How do I use MIME to make an attachment to a mail message?
+
+L<Email::MIME> directly supports multipart messages. L<Email::MIME>
+objects themselves are parts and can be attached to other L<Email::MIME>
+objects. Consult the L<Email::MIME> documentation for more information,
+including all of the supported methods and examples of their use.
+
+=head2 How do I read email?
+
+Use the L<Email::Folder> module, like so:
+
+ use Email::Folder;
+
+ my $folder = Email::Folder->new('/path/to/email/folder');
+ while(my $message = $folder->next_message) {
+ # next_message returns Email::Simple objects, but we want
+ # Email::MIME objects as they're more robust
+ my $mime = Email::MIME->new($message->as_string);
+ }
+
+There are different classes in the L<Email::Folder> namespace for
+supporting various mailbox types. Note that these modules are generally
+rather limited and only support B<reading> rather than writing.
+
+=head2 How do I find out my hostname, domainname, or IP address?
+X<hostname, domainname, IP address, host, domain, hostfqdn, inet_ntoa,
+gethostbyname, Socket, Net::Domain, Sys::Hostname>
+
+(contributed by brian d foy)
+
+The L<Net::Domain> module, which is part of the Standard Library starting
+in Perl 5.7.3, can get you the fully qualified domain name (FQDN), the host
+name, or the domain name.
+
+ use Net::Domain qw(hostname hostfqdn hostdomain);
+
+ my $host = hostfqdn();
+
+The L<Sys::Hostname> module, part of the Standard Library, can also get the
+hostname:
+
+ use Sys::Hostname;
+
+ $host = hostname();
+
+
+The L<Sys::Hostname::Long> module takes a different approach and tries
+harder to return the fully qualified hostname:
+
+ use Sys::Hostname::Long 'hostname_long';
+
+ my $hostname = hostname_long();
+
+To get the IP address, you can use the C<gethostbyname> built-in function
+to turn the name into a number. To turn that number into the dotted octet
+form (a.b.c.d) that most people expect, use the C<inet_ntoa> function
+from the L<Socket> module, which also comes with perl.
+
+ use Socket;
+
+ my $address = inet_ntoa(
+ scalar gethostbyname( $host || 'localhost' )
+ );
+
+=head2 How do I fetch/put an (S)FTP file?
+
+L<Net::FTP>, and L<Net::SFTP> allow you to interact with FTP and SFTP (Secure
+FTP) servers.
+
+=head2 How can I do RPC in Perl?
+
+Use one of the RPC modules( L<https://metacpan.org/search?q=RPC> ).
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
+other authors as noted. All rights reserved.
+
+This documentation is free; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Irrespective of its distribution, all code examples in this file
+are hereby placed into the public domain. You are permitted and
+encouraged to use this code in your own programs for fun
+or for profit as you see fit. A simple comment in the code giving
+credit would be courteous but is not required.
Added: vendor/perl/dist/cpan/perlfaq/lib/perlglossary.pod
===================================================================
--- vendor/perl/dist/cpan/perlfaq/lib/perlglossary.pod (rev 0)
+++ vendor/perl/dist/cpan/perlfaq/lib/perlglossary.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3786 @@
+
+=encoding utf8
+
+=head1 NAME
+
+perlglossary - Perl Glossary
+
+=head1 DESCRIPTION
+
+A glossary of terms (technical and otherwise) used in the Perl
+documentation, derived from the Glossary of I<Programming
+Perl>, Fourth Edition. Words or phrases in bold are defined elsewhere in
+this glossary.
+
+Other useful sources include the Unicode Glossary L<http://unicode.org/glossary/>,
+the Free On-Line Dictionary of Computing L<http://foldoc.org/>,
+the Jargon File L<http://catb.org/~esr/jargon/>,
+and Wikipedia L<http://www.wikipedia.org/>.
+
+=head2 A
+
+=over 4
+
+=item accessor methods
+
+A B<X<accessor methods, defined>X<methods, accessor>method> used to
+indirectly inspect or update an B<object>’s state (its B<instance
+variables>).
+
+=item actual arguments
+
+The B<X<actual arguments>X<arguments, actual>scalar values> that you supply
+to a B<function> or B<subroutine> when you call it. For instance, when you
+call C<power("puff")>, the string C<"puff"> is the actual argument. See also
+B<argument> and B<formal arguments>.
+
+=item address operator
+
+Some X<address operator>languages work directly with the memory addresses of
+values, but this can be like playing with fire. Perl provides a set of
+asbestos gloves for handling all memory management. The closest to an
+address operator in Perl is the backslash operator, but it gives you a
+B<hard reference>, which is much safer than a memory address.
+
+=item algorithm
+
+A X<algorithms (term)>well-defined sequence of steps, explained clearly
+enough that even a computer could do them.
+
+=item alias
+
+A X<aliases, defined>nickname for something, which behaves in all ways as
+though you’d used the original name instead of the nickname. Temporary
+aliases are implicitly created in the loop variable for C<foreach> loops, in
+the C<$_> variable for C<map> or C<grep> operators, in C<$a> and C<$b>
+during C<sort>’s comparison function, and in each element of C<@_> for the
+B<actual arguments> of a subroutine call. Permanent aliases are explicitly
+created in B<packages> by B<importing> symbols or by assignment to
+B<typeglobs>. Lexically scoped aliases for package variables are explicitly
+created by the C<our> declaration.
+
+=item alphabetic
+
+The X<alphabetic sort>sort of characters we put into words. In Unicode, this
+is all letters including all ideographs and certain diacritics, letter
+numbers like Roman numerals, and various combining marks.
+
+=item alternatives
+
+A X<alternative characters>list of possible choices from which you may
+select only one, as in, “Would you like door A, B, or C?” Alternatives in
+regular expressions are separated with a single vertical bar: C<|>.
+Alternatives in normal Perl expressions are separated with a double vertical
+bar: C<||>. Logical alternatives in B<Boolean> expressions are separated
+with either C<||> or C<or>.
+
+=item anonymous
+
+Used to X<anonymous referents>X<referents, anonymous>describe a B<referent>
+that is not directly accessible through a named B<variable>. Such a referent
+must be indirectly accessible through at least one B<hard reference>. When
+the last hard reference goes away, the anonymous referent is destroyed
+without pity.
+
+=item application
+
+A X<applications (term)>bigger, fancier sort of B<program> with a fancier
+name so people don’t realize they are using a program.
+
+=item architecture
+
+The kind of X<architecture>computer you’re working on, where one “kind of
+computer” means all those computers sharing a compatible machine language.
+Since Perl programs are (typically) simple text files, not executable
+images, a Perl program is much less sensitive to the architecture it’s
+running on than programs in other languages, such as C, that are B<compiled>
+into machine code. See also B<platform> and B<operating system>.
+
+=item argument
+
+A X<arguments, defined>piece of data supplied to a B<program>,
+B<subroutine>, B<function>, or B<method> to tell it what it’s supposed to
+do. Also called a “parameter”.
+
+=item ARGV
+
+The name of the X<ARGV filehandle>array containing the B<argument> B<vector>
+from the command line. If you use the empty C<E<lt>E<gt>> operator, C<ARGV>
+is the name of both the B<filehandle> used to traverse the arguments and the
+B<scalar> containing the name of the current input file.
+
+=item arithmetical operator
+
+A B<X<arithmetic operators, about>symbol> such as C<+> or C</> that tells
+Perl to do the arithmetic you were supposed to learn in grade school.
+
+=item array
+
+An X<arrays, defined>ordered sequence of B<values>, stored such that you can
+easily access any of the values using an I<integer subscript> that specifies
+the value’s B<offset> in the sequence.
+
+=item array context
+
+An archaic X<array context>expression for what is more correctly referred to
+as B<list context>.
+
+=item Artistic License
+
+The open X<Artistic License>source license that X<Wall, Larry>Larry Wall
+created for Perl, maximizing Perl’s usefulness, availability, and
+modifiability. The current version is 2. (L<http://www.opensource.org/licenses/artistic-license.php>).
+
+=item ASCII
+
+The X<ASCII (American Standard Code for Information Interchange)>X<American
+Standard Code for Information Interchange (ASCII)>American Standard Code for
+Information Interchange (a 7-bit character set adequate only for poorly
+representing English text). Often used loosely to describe the lowest 128
+values of the various ISO-8859-X character sets, a bunch of mutually
+incompatible 8-bit codes best described as half ASCII. See also B<Unicode>.
+
+=item assertion
+
+A X<assertions (in regexes), defined>X<regular expressions, assertions
+in>component of a B<regular expression> that must be true for the pattern to
+match but does not necessarily match any characters itself. Often used
+specifically to mean a B<zero-width> assertion.
+
+=item assignment
+
+An X<assignments, defined>B<operator> whose assigned mission in life is to
+change the value of a B<variable>.
+
+=item assignment operator
+
+Either a X<assignment operators, about>regular B<assignment> or a compound
+B<operator> composed of an ordinary assignment and some other operator, that
+changes the value of a variable in place; that is, relative to its old
+value. For example, C<$a += 2> adds C<2> to C<$a>.
+
+=item associative array
+
+See B<hash>. X<associative arrays>Please. The term associative array is the
+old Perl 4 term for a B<hash>. Some languages call it a dictionary.
+
+=item associativity
+
+Determines X<associativity>whether you do the left B<operator> first or the
+right B<operator> first when you have “A B<operator> B B<operator> C”, and
+the two operators are of the same precedence. Operators like C<+> are left
+associative, while operators like C<**> are right associative. See Camel
+chapter 3, “Unary and Binary Operators” for a list of operators and their
+associativity.
+
+=item asynchronous
+
+Said of X<asynchronous event processing>events or activities whose relative
+temporal ordering is indeterminate because too many things are going on at
+once. Hence, an asynchronous event is one you didn’t know when to expect.
+
+=item atom
+
+A B<regular X<atoms>expression> component potentially matching a
+B<substring> containing one or more characters and treated as an indivisible
+syntactic unit by any following B<quantifier>. (Contrast with an
+B<assertion> that matches something of B<zero width> and may not be quantified.)
+
+=item atomic operation
+
+When X<atomic operation>Democritus gave the word “atom” to the indivisible
+bits of matter, he meant literally something that could not be cut: I<ἀ->
+(not) + I<-τομος> (cuttable). An atomic operation is an action that can’t be
+interrupted, not one forbidden in a nuclear-free zone.
+
+=item attribute
+
+A new X<attribute feature>feature that allows the declaration of
+B<variables> and B<subroutines> with modifiers, as in C<sub foo : locked
+method>. Also another name for an B<instance variable> of an B<object>.
+
+=item autogeneration
+
+A X<autogeneration, about>feature of B<operator overloading> of B<objects>,
+whereby the behavior of certain B<operators> can be reasonably deduced using
+more fundamental operators. This assumes that the overloaded operators will
+often have the same relationships as the regular operators. See Camel
+chapter 13, “Overloading”.
+
+=item autoincrement
+
+To X<autoincrement (term)>add one to something automatically, hence the name
+of the C<++> operator. To instead subtract one from something automatically
+is known as an “autodecrement”.
+
+=item autoload
+
+To X<autoloading, defined>load on demand. (Also called “lazy” loading.)
+Specifically, to call an C<AUTOLOAD> subroutine on behalf of an undefined
+subroutine.
+
+=item autosplit
+
+To X<autosplit (term)>split a string automatically, as the I<–a> B<switch>
+does when running under I<–p> or I<–n> in order to emulate B<awk>. (See also
+the C<AutoSplit>X<AutoSplit module> module, which has nothing to do with the
+C<–a> switch but a lot to do with autoloading.)
+
+=item autovivification
+
+A X<autovivification>Graeco-Roman word meaning “to bring oneself to life”.
+In Perl, storage locations (B<lvalues>) spontaneously generate themselves as
+needed, including the creation of any B<hard reference> values to point to
+the next level of storage. The assignment C<$a[5][5][5][5][5] = "quintet">
+potentially creates five scalar storage locations, plus four references (in
+the first four scalar locations) pointing to four new anonymous arrays (to
+hold the last four scalar locations). But the point of autovivification is
+that you don’t have to worry about it.
+
+=item AV
+
+Short X<AV (array value)>X<array value (AV)>X<values, array>for “array
+value”, which refers to one of Perl’s internal data types that holds an
+B<array>. The C<AV> type is a subclass of B<SV>.
+
+=item awk
+
+Descriptive X<awk (editing term)>editing term—short for “awkward”. Also
+coincidentally refers to a venerable text-processing language from which
+Perl derived some of its high-level ideas.
+
+=back
+
+=head2 B
+
+=over 4
+
+=item backreference
+
+A X<backreferences, about>X<references, backreferences>substring B<captured>
+by a subpattern within unadorned parentheses in a B<regex>. Backslashed
+decimal numbers (C<\1>, C<\2>, etc.) later in the same pattern refer back to
+the corresponding subpattern in the current match. Outside the pattern, the
+numbered variables (C<$1>, C<$2>, etc.) continue to refer to these same
+values, as long as the pattern was the last successful match of the current
+B<dynamic scope>.
+
+=item backtracking
+
+The X<backtracking>practice of saying, “If I had to do it all over, I’d do
+it differently,” and then actually going back and doing it all over
+differently. Mathematically speaking, it’s returning from an unsuccessful
+recursion on a tree of possibilities. Perl backtracks when it attempts to
+match patterns with a B<regular expression>, and its earlier attempts don’t
+pan out. See the section “The Little Engine That /Couldn(n’t)” in Camel
+chapter 5, “Pattern Matching”.
+
+=item backward compatibility
+
+Means X<backward compatibility, defined>you can still run your old program
+because we didn’t break any of the features or bugs it was relying on.
+
+=item bareword
+
+A word X<barewords, about>sufficiently ambiguous to be deemed illegal under
+C<use strict 'subs'>. In the absence of that stricture, a bareword is
+treated as if quotes were around it.
+
+=item base class
+
+A X<base classes>X<classes, base>generic B<object> type; that is, a B<class>
+from which other, more specific classes are derived genetically by
+B<inheritance>. Also called aX<superclasses>X<classes, superclasses>
+“superclass” by people who respect their ancestors.
+
+=item big-endian
+
+From X<big–endian, defined>X<endianness, big–endian>Swift: someone who
+eats eggs big end first. Also used of computers that store the most
+significant B<byte> of a word at a lower byte address than the least
+significant byte. Often considered superior to little-endian machines. See
+also B<little-endian>.
+
+=item binary
+
+Having X<binary (term)>to do with numbers represented in base 2. That means
+there’s basically two numbers: 0 and 1. Also used to describe a file of
+“nontext”, presumably because such a file makes full use of all the binary
+bits in its bytes. With the advent of B<Unicode>, this distinction, already
+suspect, loses even more of its meaning.
+
+=item binary operator
+
+An B<X<binary operators, about>operator> that takes two B<operands>.
+
+=item bind
+
+To X<bind (term)>assign a specific B<network address> to a B<socket>.
+
+=item bit
+
+An X<bits, defined>integer in the range from 0 to 1, inclusive. The smallest
+possible unit of information storage. An eighth of a B<byte> or of a dollar.
+(The term “Pieces of Eight” comes from being able to split the old Spanish
+dollar into 8 bits, each of which still counted for money. That’s why a 25-
+cent piece today is still “two bits”.)
+
+=item bit shift
+
+The X<bit–shift operators, defined>movement of bits left or right in a
+computer word, which has the effect of multiplying or dividing by a
+power of 2.
+
+=item bit string
+
+A X<bit string>sequence of B<bits> that is actually being thought of as a
+sequence of bits, for once.
+
+=item bless
+
+In X<bless function, about>X<bless (term)>corporate life, to grant official
+approval to a thing, as in, “The VP of Engineering has blessed our
+WebCruncher project.” Similarly, in Perl, to grant official approval to a
+B<referent> so that it can function as an B<object>, such as a WebCruncher
+object. See the C<bless> function in Camel chapter 27, “Functions”.
+
+=item block
+
+What X<blocks, defined>a B<process> does when it has to wait for something:
+“My process blocked waiting for the disk.” As an unrelated noun, it refers
+to a large chunk of data, of a size that the B<operating system> likes to
+deal with (normally a power of 2 such as 512 or 8192). Typically refers to
+a chunk of data that’s coming from or going to a disk file.
+
+=item BLOCK
+
+A X<BLOCK construct, about>X<constructs, BLOCK>syntactic construct
+consisting of a sequence of Perl B<statements> that is delimited by braces.
+The C<if> and C<while> statements are defined in terms of I<C<BLOCK>>s, for
+instance. Sometimes we also say “block” to mean a lexical scope; that is, a
+sequence of statements that acts like a I<C<BLOCK>>, such as within an
+C<eval> or a file, even though the statements aren’t delimited by braces.
+
+=item block buffering
+
+A X<block buffering>X<buffering, block>method of making input and output
+efficient by passing one B<block> at a time. By default, Perl does block
+buffering to disk files. See B<buffer> and B<command buffering>.
+
+=item Boolean
+
+A X<Boolean values>X<values, Boolean>value that is either B<true> or
+B<false>.
+
+=item Boolean context
+
+A X<Boolean context, about>X<context, Boolean>special kind of B<scalar
+context> used in conditionals to decide whether the B<scalar value> returned
+by an expression is B<true> or B<false>. Does not evaluate as either a
+string or a number. See B<context>.
+
+=item breakpoint
+
+A X<breakpoints, defined>spot in your program where you’ve told the debugger
+to stop B<execution> so you can poke around and see whether anything is
+wrong yet.
+
+=item broadcast
+
+To X<broadcast (networking term)>send a B<datagram> to multiple destinations
+simultaneously.
+
+=item BSD
+
+A X<BSD (Berkeley Standard Distribution)>X<Berkeley Standard Distribution
+(BSD)>psychoactive drug, popular in the ’80s, probably developed at UC
+Berkeley or thereabouts. Similar in many ways to the prescription-only
+medication called “System V”, but infinitely more useful. (Or, at least,
+more fun.) The full chemical name is “Berkeley Standard Distribution”.
+
+=item bucket
+
+A X<buckets (term)>location in a B<hash table> containing (potentially)
+multiple entries whose keys “hash” to the same hash value according to its
+hash function. (As internal policy, you don’t have to worry about it unless
+you’re into internals, or policy.)
+
+=item buffer
+
+A X<buffers, defined>temporary holding location for data. Data that are
+B<Block buffering> means that the data is passed on to its destination
+whenever the buffer is full. B<Line buffering> means that it’s passed on
+whenever a complete line is received. B<Command buffering> means that it’s
+passed every time you do a C<print> command (or equivalent). If your output
+is unbuffered, the system processes it one byte at a time without the use of
+a holding area. This can be rather inefficient.
+
+=item built-in
+
+A B<X<built–in functions, about>function> that is predefined in the
+language. Even when hidden by B<overriding>, you can always get at a built-
+in function by B<qualifying> its name with the C<CORE::> pseudopackage.
+
+=item bundle
+
+A X<bundles (term)>group of related modules on B<CPAN>. (Also sometimes
+refers to a group of command-line switches grouped into one B<switch
+cluster>.)
+
+=item byte
+
+A X<bytes (term)>piece of data worth eight B<bits> in most places.
+
+=item bytecode
+
+A pidgin-like lingo spoken among ’droids when they don’t wish to reveal
+their orientation (see B<endian>). Named after some similar languages spoken
+(for similar reasons) between compilers and interpreters in the late 20ᵗʰ
+century. These languages are characterized by representing everything as a
+nonarchitecture-dependent sequence of bytes.
+
+=back
+
+=head2 C
+
+=over 4
+
+=item C
+
+A X<C language, about>language beloved by many for its inside-out B<type>
+definitions, inscrutable B<precedence> rules, and heavy B<overloading> of
+the function-call mechanism. (Well, actually, people first switched to C
+because they found lowercase identifiers easier to read than upper.) Perl is
+written in C, so it’s not surprising that Perl borrowed a few ideas from it.
+
+=item cache
+
+A X<cache (term)>data repository. Instead of computing expensive answers
+several times, compute it once and save the result.
+
+=item callback
+
+A B<X<callbacks>handler> that you register with some other part of your
+program in the hope that the other part of your program will B<trigger> your
+handler when some event of interest transpires.
+
+=item call by reference
+
+An B<argument>-passing X<call by reference>X<references, call by reference
+mechanism>mechanism in which the B<formal arguments> refer directly to the
+B<actual arguments>, and the B<subroutine> can change the actual arguments
+by changing the formal arguments. That is, the formal argument is an
+B<alias> for the actual argument. See also B<call by value>.
+
+=item call by value
+
+An B<X<call by value>argument>-passing mechanism in which the B<formal
+arguments> refer to a copy of the B<actual arguments>, and the
+B<subroutine> cannot change the actual arguments by changing the formal
+arguments. See also B<call by reference>.
+
+=item canonical
+
+Reduced X<canonical (term)>to a standard form to facilitate comparison.
+
+=item capture variables
+
+The X<capture variables>X<variables, capture>variables—such as C<$1> and
+C<$2>, and C<%+> and C<%– >—that hold the text remembered in a pattern
+match. See Camel chapter 5, “Pattern Matching”.
+
+=item capturing
+
+The X<capturing in pattern matching>X<subpatterns, capturing>X<pattern
+matching, capturing in>use of parentheses around a B<subpattern> in a
+B<regular expression> to store the matched B<substring> as a
+B<backreference>. (Captured strings are also returned as a list in B<list
+context>.) See Camel chapter 5, “Pattern Matching”.
+
+=item cargo cult
+
+Copying X<cargo cult>and pasting code without understanding it, while
+superstitiously believing in its value. This term originated from
+preindustrial cultures dealing with the detritus of explorers and colonizers
+of technologically advanced cultures. See I<The Gods Must Be Crazy>.
+
+=item case
+
+A X<case (character)>X<characters, case considerations>property of certain
+characters. Originally, typesetter stored capital letters in the upper of
+two cases and small letters in the lower one. Unicode recognizes three
+cases: B<lowercase> (B<character property> C<\p{lower}>), B<titlecase>
+(C<\p{title}>), and B<uppercase> (C<\p{upper}>). A fourth casemapping called
+B<foldcase> is not itself a distinct case, but it is used internally to
+implement B<casefolding>. Not all letters have case, and some nonletters
+have case.
+
+=item casefolding
+
+Comparing X<casefolding>or matching a string case-insensitively. In Perl, it
+is implemented with the C</i> pattern modifier, the C<fc> function, and the
+C<\F> double-quote translation escape.
+
+=item casemapping
+
+The X<casemapping>process of converting a string to one of the four Unicode
+B<casemaps>; in Perl, it is implemented with the C<fc>, C<lc>, C<ucfirst>,
+and C<uc> functions.
+
+=item character
+
+The X<characters, defined>smallest individual element of a string. Computers
+store characters as integers, but Perl lets you operate on them as text. The
+integer used to represent a particular character is called that character’s
+B<codepoint>.
+
+=item character class
+
+A X<character classes, about>X<classes, character>square-bracketed list of
+characters used in a B<regular expression> to indicate that any character
+of the set may occur at a given point. Loosely, any predefined set of
+characters so used.
+
+=item character property
+
+A X<character property>predefined B<character class> matchable by the C<\p>
+or C<\P> B<metasymbol>. B<Unicode> defines hundreds of standard properties
+for every possible codepoint, and Perl defines a few of its own, too.
+
+=item circumfix operator
+
+An X<circumfix operator>B<operator> that surrounds its B<operand>, like the
+angle operator, or parentheses, or a hug.
+
+=item class
+
+A X<classes, defined>user-defined B<type>, implemented in Perl via a
+B<package> that provides (either directly or by inheritance) B<methods>
+(that is, B<subroutines>) to handle B<instances> of the class (its
+B<objects>). See also B<inheritance>.
+
+=item class method
+
+A B<X<class methods>X<methods, class>method> whose B<invocant> is a
+B<package> name, not an B<object> reference. A method associated with the
+class as a whole. Also see B<instance method>.
+
+=item client
+
+In X<clients, defined>X<processes, client>networking, a B<process> that
+initiates contact with a B<server> process in order to exchange data and
+perhaps receive a service.
+
+=item closure
+
+An B<X<closure subroutines>X<subroutines, closure>anonymous> subroutine
+that, when a reference to it is generated at runtime, keeps track of the
+identities of externally visible B<lexical variables>, even after those
+lexical variables have supposedly gone out of B<scope>. They’re called
+“closures” because this sort of behavior gives mathematicians a sense of
+closure.
+
+=item cluster
+
+A X<clusters, defined>X<subpatterns, cluster>parenthesized B<subpattern>
+used to group parts of a B<regular expression> into a single B<atom>.
+
+=item CODE
+
+The X<CODE (ref function)>X<ref function, about>word returned by the C<ref>
+function when you apply it to a reference to a subroutine. See also B<CV>.
+
+=item code generator
+
+A X<code generators, defined>system that writes code for you in a low-level
+language, such as code to implement the backend of a compiler. See B<program
+generator>.
+
+=item codepoint
+
+The X<codepoints, about>integer a computer uses to represent a given
+character. ASCII codepoints are in the range 0 to 127; Unicode codepoints
+are in the range 0 to 0x1F_FFFF; and Perl codepoints are in the range 0 to
+2³²−1 or 0 to 2⁶⁴−1, depending on your native integer size. In Perl Culture,
+sometimes called B<ordinals>.
+
+=item code subpattern
+
+A B<X<code subpatterns>X<subpatterns, code>regular expression> subpattern
+whose real purpose is to execute some Perl code—for example, the C<(?{...})>
+and C<(??{...})> subpatterns.
+
+=item collating sequence
+
+The X<collating sequence>X<collating sequence>order into which B<characters>
+sort. This is used by B<string> comparison routines to decide, for example,
+where in this glossary to put “collating sequence”.
+
+=item co-maintainer
+
+A X<co–maintainers>person with permissions to index a B<namespace> in
+B<PAUSE>. Anyone can upload any namespace, but only primary and
+co-maintainers get their contributions indexed.
+
+=item combining character
+
+Any X<combining characters>X<characters, combining>character with the
+General Category of Combining Mark (C<\p{GC=M}>), which may be spacing or
+nonspacing. Some are even invisible. A sequence of combining characters
+following a grapheme base character together make up a single user-visible
+character called a B<grapheme>. Most but not all diacritics are combining
+characters, and vice versa.
+
+=item command
+
+In B<shell> X<commands, defined>programming, the syntactic combination of a
+program name and its arguments. More loosely, anything you type to a shell
+(a command interpreter) that starts it doing something. Even more loosely, a
+Perl B<statement>, which might start with a B<label> and typically ends with
+a semicolon.
+
+=item command buffering
+
+A X<command buffering>X<buffering, command>mechanism in Perl that lets you
+store up the output of each Perl B<command> and then flush it out as a
+single request to the B<operating system>. It’s enabled by setting the C<$|>
+(C<$AUTOFLUSH>) variable to a true value. It’s used when you don’t want data
+sitting around, not going where it’s supposed to, which may happen because
+the default on a B<file> or B<pipe> is to use B<block buffering>.
+
+=item command-line arguments
+
+The X<command–line arguments>B<X<arguments, command–line>values> you supply
+along with a program name when you tell a B<shell> to execute a B<command>.
+These values are passed to a Perl program through C<@ARGV>.
+
+=item command name
+
+The X<command names>name of the program currently executing, as typed on the
+command line. In C, the B<command> name is passed to the program as the
+first command-line argument. In Perl, it comes in separately as C<$0>.
+
+=item comment
+
+A X<comments, defined>remark that doesn’t affect the meaning of the program.
+In Perl, a comment is introduced by a C<#> character and continues to the
+end of the line.
+
+=item compilation unit
+
+The X<compilation units>B<file> (or B<string>, in the case of C<eval>) that
+is currently being B<compiled>.
+
+=item compile
+
+The process of turning source code into a machine-usable form. See B<compile
+phase>.
+
+=item compile phase
+
+Any X<compile phase, defined>time before Perl starts running your main
+program. See also B<run phase>. Compile phase is mostly spent in B<compile
+time>, but may also be spent in B<runtime> when C<BEGIN> blocks, C<use> or
+C<no> declarations, or constant subexpressions are being evaluated. The
+startup and import code of any C<use> declaration is also run during
+compile phase.
+
+=item compiler
+
+Strictly X<compilers and compiling, about>speaking, a program that munches
+up another program and spits out yet another file containing the program in
+a “more executable” form, typically containing native machine instructions.
+The I<perl> program is not a compiler by this definition, but it does
+contain a kind of compiler that takes a program and turns it into a more
+executable form (B<syntax trees>) within the I<perl> process itself, which
+the B<interpreter> then interprets. There are, however, extension B<modules>
+to get Perl to act more like a “real” compiler. See Camel chapter 16,
+“Compiling”.
+
+=item compile time
+
+The X<compile time, defined>time when Perl is trying to make sense of your
+code, as opposed to when it thinks it knows what your code means and is
+merely trying to do what it thinks your code says to do, which is B<runtime>.
+
+=item composer
+
+A “constructor” X<composers, about>for a B<referent> that isn’t really an
+B<object>, like an anonymous array or a hash (or a sonata, for that matter).
+For example, a pair of braces acts as a composer for a hash, and a pair of
+brackets acts as a composer for an array. See the section “Creating
+References” in Camel chapter 8, “References”.
+
+=item concatenation
+
+The X<concatenating strings>X<strings, concatenating>process of gluing one
+cat’s nose to another cat’s tail. Also a similar operation on two
+B<strings>.
+
+=item conditional
+
+SomethingX<conditional (term)> “iffy”. See B<Boolean context>.
+
+=item connection
+
+In X<connections (term)>telephony, the temporary electrical circuit between
+the caller’s and the callee’s phone. In networking, the same kind of
+temporary circuit between a B<client> and a B<server>.
+
+=item construct
+
+As a X<constructs, defined>noun, a piece of syntax made up of smaller
+pieces. As a transitive verb, to create an B<object> using a B<constructor>.
+
+=item constructor
+
+AnyX<constructors, defined> B<class method>, B<instance>, or B<subroutine>
+that composes, initializes, blesses, and returns an B<object>. Sometimes we
+use the term loosely to mean a B<composer>.
+
+=item context
+
+The X<context, about>surroundings or environment. The context given by the
+surrounding code determines what kind of data a particular B<expression> is
+expected to return. The three primary contexts are B<list context>,
+B<scalar>, and B<void context>. Scalar context is sometimes subdivided into
+B<Boolean context>, B<numeric context>, B<string context>, and B<void
+context>. There’s also a “don’t care” context (which is dealt with in Camel
+chapter 2, “Bits and Pieces”, if you care).
+
+=item continuation
+
+The X<continuation lines>treatment of more than one physical B<line> as a
+single logical line. B<Makefile> lines are continued by putting a backslash
+before the B<newline>. Mail headers, as defined by X<RFC 822>RFC 822, are
+continued by putting a space or tab I<after> the newline. In general, lines
+in Perl do not need any form of continuation mark, because B<whitespace>
+(including newlines) is gleefully ignored. Usually.
+
+=item core dump
+
+The X<core dump>corpse of a B<process>, in the form of a file left in the
+B<working directory> of the process, usually as a result of certain kinds
+of fatal errors.
+
+=item CPAN
+
+The X<Comprehensive Perl Archive Network>X<CPAN (Comprehensive Perl Archive
+Network), about>Comprehensive Perl Archive Network. (See the Camel Preface
+and Camel chapter 19, “CPAN” for details.)
+
+=item C preprocessor
+
+The X<C preprocessor>typical C compiler’s first pass, which processes lines
+beginning with C<#> for conditional compilation and macro definition, and
+does various manipulations of the program text based on the current
+definitions. Also known as I<cpp>(1).
+
+=item cracker
+
+Someone X<crackers>who breaks security on computer systems. A cracker may
+be a true B<hacker> or only a B<script kiddie>.
+
+=item currently selected output channel
+
+The X<currently selected output channel>last B<filehandle> that was
+designated with C<select(FILEHANDLE)>; C<STDOUT>, if no filehandle has
+been selected.
+
+=item current package
+
+The B<package> X<current package>in which the current statement is
+B<compiled>. Scan backward in the text of your program through the current
+B<lexical scope> or any enclosing lexical scopes until you find a package
+declaration. That’s your current package name.
+
+=item current working directory
+
+SeeX<current working directory> B<working directory>.
+
+=item CV
+
+In academia, a curriculum vitæ, a fancy kind of résumé. In Perl, an X<CV
+(code value)>X<code value (CV)>internal “code value” typedef holding a
+B<subroutine>. The C<CV> type is a subclass of B<SV>.
+
+=back
+
+=head2 D
+
+=over 4
+
+=item dangling statement
+
+A bare, single B<X<dangling statements>X<statements, dangling>statement>,
+without any braces, hanging off an C<if> or C<while> conditional. C allows
+them. Perl doesn’t.
+
+=item datagram
+
+A packet of X<datagrams, defined>data, such as a B<UDP> message, that (from
+the viewpoint of the programs involved) can be sent independently over the
+network. (In fact, all packets are sent independently at the B<IP> level,
+but B<stream> protocols such as B<TCP> hide this from your program.)
+
+=item data structure
+
+How your X<data structures, defined>various pieces of data relate to each
+other and what shape they make when you put them all together, as in a
+rectangular table or a triangular tree.
+
+=item data type
+
+A set of X<data types, defined>possible values, together with all the
+operations that know how to deal with those values. For example, a numeric
+data type has a certain set of numbers that you can work with, as well as
+various mathematical operations that you can do on the numbers, but would
+make little sense on, say, a string such as C<"Kilroy">. Strings have their
+own operations, such as B<concatenation>. Compound types made of a number of
+smaller pieces generally have operations to compose and decompose them, and
+perhaps to rearrange them. B<Objects> that model things in the real world
+often have operations that correspond to real activities. For instance, if
+you model an elevator, your elevator object might have an C<open_door>
+B<method>.
+
+=item DBM
+
+Stands for X<DBM (Database Management) routines>X<Database Management (DBM)
+routines>“Database Management” routines, a set of routines that emulate an
+B<associative array> using disk files. The routines use a dynamic hashing
+scheme to locate any entry with only two disk accesses. DBM files allow a
+Perl program to keep a persistent B<hash> across multiple invocations. You
+can C<tie> your hash variables to various DBM implementations.
+
+=item declaration
+
+An B<assertion> X<declarations, defined>that states something exists and
+perhaps describes what it’s like, without giving any commitment as to how
+or where you’ll use it. A declaration is like the part of your recipe that
+says, “two cups flour, one large egg, four or five tadpoles…” See
+B<statement> for its opposite. Note that some declarations also function
+as statements. Subroutine declarations also act as definitions if a body
+is supplied.
+
+=item declarator
+
+Something X<declarators>that tells your program what sort of variable
+you’d like. Perl doesn’t require you to declare variables, but you can use
+C<my>, C<our>, or C<state> to denote that you want something other than
+the default.
+
+=item decrement
+
+To X<decrementing values>X<values, decrementing>subtract a value from a
+variable, as in “decrement C<$x>” (meaning to remove 1 from its value) or
+“decrement C<$x> by 3”.
+
+=item default
+
+A B<value> X<default values>X<values, default>chosen for you if you don’t
+supply a value of your own.
+
+=item defined
+
+Having a X<defined (term)>meaning. Perl thinks that some of the things
+people try to do are devoid of meaning; in particular, making use of
+variables that have never been given a B<value> and performing certain
+operations on data that isn’t there. For example, if you try to read data
+past the end of a file, Perl will hand you back an undefined value. See also
+B<false> and the C<defined> entry in Camel chapter 27, “Functions”.
+
+=item delimiter
+
+A B<character> X<delimiters (term)>or B<string> that sets bounds to an
+arbitrarily sized textual object, not to be confused with a B<separator> or
+B<terminator>. “To delimit” really just means “to surround” or “to enclose”
+(like these parentheses are doing).
+
+=item dereference
+
+A fancy X<dereference (term)>X<references, dereference>computer science term
+meaning “to follow a B<reference> to what it points to”. The “de” part of it
+refers to the fact that you’re taking away one level of B<indirection>.
+
+=item derived class
+
+A B<class> that X<derived classes>X<classes, derived>X<subclasses>X<classes,
+subclasses>defines some of its B<methods> in terms of a more generic class,
+called a B<base class>. Note that classes aren’t classified exclusively into
+base classes or derived classes: a class can function as both a derived
+class and a base class simultaneously, which is kind of classy.
+
+=item descriptor
+
+See B<file descriptor>.
+
+=item destroy
+
+To deallocate the X<destroy (term)>memory of a B<referent> (first triggering
+its C<DESTROY> method, if it has one).
+
+=item destructor
+
+A special B<method> X<destructor method>X<methods, destructor>that is called
+when an B<object> is thinking about B<destroying> itself. A Perl program’s
+C<DESTROY> method doesn’t do the actual destruction; Perl just B<triggers>
+the method in case the B<class> wants to do any associated cleanup.
+
+=item device
+
+A whiz-bang X<devices (term)>hardware gizmo (like a disk or tape drive or a
+modem or a joystick or a mouse) attached to your computer, which the
+B<operating system> tries to make look like a B<file> (or a bunch of files).
+Under Unix, these fake files tend to live in the I</dev> directory.
+
+=item directive
+
+A B<pod> X<directives, defined>directive. See Camel chapter 23, “Plain Old
+Documentation”.
+
+=item directory
+
+A special X<directories, defined>file that contains other files. Some
+B<operating systems> call these “folders”, “drawers”, “catalogues”, or
+“catalogs”.
+
+=item directory handle
+
+A name X<directory handle>that represents a particular instance of opening a
+directory to read it, until you close it. See the C<opendir> function.
+
+=item discipline
+
+Some X<discipline (I/O layer)>people need this and some people avoid it.
+For Perl, it’s an old way to say B<I/O layer>.
+
+=item dispatch
+
+To send X<dispatching>something to its correct destination. Often used
+metaphorically to indicate a transfer of programmatic control to a
+destination selected algorithmically, often by lookup in a table of function
+B<references> or, in the case of object B<methods>, by traversing the
+inheritance tree looking for the most specific definition for the method.
+
+=item distribution
+
+A standard, X<distributions, defined>bundled release of a system of
+software. The default usage implies source code is included. If that is not
+the case, it will be called a “binary-only” distribution.
+
+=item dual-lived
+
+Some X<dual–lived modules>X<modules, dual–lived>modules live both in the
+B<Standard Library> and on B<CPAN>. These modules might be developed on two
+tracks as people modify either version. The trend currently is to untangle
+these situations.
+
+=item dweomer
+
+An enchantment, illusion, X<dweomer>phantasm, or jugglery. Said when Perl’s
+magical B<dwimmer> effects don’t do what you expect, but rather seem to be
+the product of arcane I<dweomercraft>, sorcery, or wonder working. [From
+Middle English.]
+
+=item dwimmer
+
+DWIM X<DWIM (Do What I Mean) principle>X<Do What I Mean (DWIM) principle>is
+an acronym for X<dwimming>“Do What I Mean”, the principle that something
+should just do what you want it to do without an undue amount of fuss. A bit
+of code that does “dwimming” is a “dwimmer”. Dwimming can require a great
+deal of behind-the-scenes magic, which (if it doesn’t stay properly behind
+the scenes) is called a B<dweomer> instead.
+
+=item dynamic scoping
+
+Dynamic X<dynamic scope>X<scopes, dynamic>scoping works over a B<dynamic
+scope>, making variables visible throughout the rest of the B<block> in
+which they are first used and in any B<subroutines> that are called by the
+rest of the block. Dynamically scoped variables can have their values
+temporarily changed (and implicitly restored later) by a C<local> operator.
+(Compare B<lexical scoping>.) Used more loosely to mean how a subroutine
+that is in the middle of calling another subroutine “contains” that
+subroutine at B<runtime>.
+
+=back
+
+=head2 E
+
+=over 4
+
+=item eclectic
+
+Derived X<eclectic (term)>from many sources. Some would say I<too> many.
+
+=item element
+
+A basic X<elements, about>building block. When you’re talking about an
+B<array>, it’s one of the items that make up the array.
+
+=item embedding
+
+When X<embedding (term)>something is contained in something else,
+particularly when that might be considered surprising: “I’ve embedded a
+complete Perl interpreter in my editor!”
+
+=item empty subclass test
+
+The notion X<empty subclass test>that an empty B<derived class> should
+behave exactly like its B<base class>.
+
+=item encapsulation
+
+The veil of X<encapsulation (term)>abstraction separating the B<interface>
+from the B<implementation> (whether enforced or not), which mandates that
+all access to an B<object>’s state be through B<methods> alone.
+
+=item endian
+
+See B<little-endian> and B<big-endian>.
+
+=item en passant
+
+When you X<en passant (term)>change a B<value> as it is being copied. [From
+French “in passing”, as in the exotic pawn-capturing maneuver in chess.]
+
+=item environment
+
+The collectiveX<environment (term)> set of B<environment variables> your
+B<process> inherits from its parent. Accessed via C<%ENV>.
+
+=item environment variable
+
+A mechanism X<environment variables>X<variables, environment>X<environment
+variables>by which some high-level agent such as a user can pass its
+preferences down to its future offspring (child B<processes>, grandchild
+processes, great-grandchild processes, and so on). Each environment
+variable is a B<key>/B<value> pair, like one entry in a B<hash>.
+
+=item EOF
+
+End of File. X<End of File (EOF)>X<EOF (End of File)>Sometimes used
+metaphorically as the terminating string of a B<here document>.
+
+=item errno
+
+The X<errno (error number)>X<error number (errno)>error number returned by a
+B<syscall> when it fails. Perl refers to the error by the name C<$!> (or
+C<$OS_ERROR> if you use the English module).
+
+=item error
+
+See B<exception> or B<fatal error>.
+
+=item escape sequence
+
+See B<metasymbol>.
+
+=item exception
+
+A fancy term for an error. See B<fatal error>.
+
+=item exception handling
+
+The X<exception handling, defined>way a program responds to an error. The
+exception-handling mechanism in Perl is the C<eval> operator.
+
+=item exec
+
+To X<exec function>throw away the current B<process>’s program and replace
+it with another, without exiting the process or relinquishing any resources
+held (apart from the old memory image).
+
+=item executable file
+
+A B<file> X<executable files>X<files, executable>that is specially marked to
+tell the B<operating system> that it’s okay to run this file as a program.
+Usually shortened to “executable”.
+
+=item execute
+
+To run X<execute (term)>a B<program> or B<subroutine>. (Has nothing to do
+with the C<kill> built-in, unless you’re trying to run a B<signal handler>.)
+
+=item execute bit
+
+The X<execute bit>special mark that tells the operating system it can run
+this program. There are actually three execute bits under Unix, and which
+bit gets used depends on whether you own the file singularly, collectively,
+or not at all.
+
+=item exit status
+
+See B<status>.
+
+=item exploit
+
+Used X<exploits, security>as a noun in this case, this refers to a known way
+to compromise a program to get it to do something the author didn’t intend.
+Your task is to write unexploitable programs.
+
+=item export
+
+To make X<exporting, defined>symbols from a B<module> available for
+B<import> by other modules.
+
+=item expression
+
+Anything X<expressions, defined>X<expressions>you can legally say in a spot
+where a B<value> is required. Typically composed of B<literals>,
+B<variables>, B<operators>, B<functions>, and B<subroutine> calls, not
+necessarily in that order.
+
+=item extension
+
+A Perl module X<extensions, defined>that also pulls in B<compiled> C or C++
+code. More generally, any experimental option that can be B<compiled> into
+Perl, such as multithreading.
+
+=back
+
+=head2 F
+
+=over 4
+
+=item false
+
+In Perl, any value X<false values>X<values, false>that would look like C<"">
+or C<"0"> if evaluated in a string context. Since undefined values evaluate
+to C<"">, all undefined values are false, but not all false values are
+undefined.
+
+=item FAQ
+
+Frequently Asked QuestionX<FAQ (Frequently Asked
+Question)>X<Frequently Asked Question (FAQ)> (although not necessarily
+frequently answered, especially if the answer appears in the Perl FAQ
+shipped standard with Perl).
+
+=item fatal error
+
+An uncaught B<exception>, X<fatal errors>which causes termination of the
+B<process> after printing a message on your B<standard error> stream. Errors
+that happen inside an C<eval> are not fatal. Instead, the C<eval> terminates
+after placing the exception message in the C<$@> (C<$EVAL_ERROR>) variable.
+You can try to provoke a fatal error with the C<die> operator (known as
+throwing or raising an exception), but this may be caught by a dynamically
+enclosing C<eval>. If not caught, the C<die> becomes a fatal error.
+
+=item feeping creaturism
+
+A spoonerism X<feeping creaturism>X<creeping featurism>of “creeping
+featurism”, noting the biological urge to add just one more feature to
+a program.
+
+=item field
+
+A single X<fields (term)>piece of numeric or string data that is part of a
+longer B<string>, B<record>, or B<line>. Variable-width fields are usually
+split up by B<separators> (so use C<split> to extract the fields), while
+fixed-width fields are usually at fixed positions (so use C<unpack>).
+B<Instance variables> are also known as “fields”.
+
+=item FIFO
+
+First In, First Out.X<First In, First Out (FIFO)>X<FIFO (First In, First
+Out)> See also B<LIFO>. Also a nickname for a B<named pipe>.
+
+=item file
+
+A named X<files, defined>collection of data, usually stored on disk in a
+B<directory> in a B<filesystem>. Roughly like a document, if you’re into
+office metaphors. In modern filesystems, you can actually give a file more
+than one name. Some files have special properties, like directories and
+devices.
+
+=item file descriptor
+
+The little X<file descriptors>X<descriptors, file>number the B<operating
+system> uses to keep track of which opened B<file> you’re talking about.
+Perl hides the file descriptor inside a B<standard I/O> stream and then
+attaches the stream to a B<filehandle>.
+
+=item fileglob
+
+A “wildcard” X<fileglobs>match on B<filenames>. See the C<glob> function.
+
+=item filehandle
+
+An identifier X<filehandles, about>(not necessarily related to the real
+name of a file) that represents a particular instance of opening a file,
+until you close it. If you’re going to open and close several different
+files in succession, it’s fine to open each of them with the same
+filehandle, so you don’t have to write out separate code to process each
+file.
+
+=item filename
+
+One name for a X<filenames, about>file. This name is listed in a
+B<directory>. You can use it in an C<open> to tell the B<operating system>
+exactly which file you want to open, and associate the file with a
+B<filehandle>, which will carry the subsequent identity of that file in
+your program, until you close it.
+
+=item filesystem
+
+A set X<filesystems, defined>of B<directories> and B<files> residing on a
+partition of the disk. Sometimes known as a “partition”. You can change the
+file’s name or even move a file around from directory to directory within a
+filesystem without actually moving the file itself, at least under Unix.
+
+=item file test operator
+
+A built-in X<file test operators, about>unary operator that you use to
+determine whether something is B<true> about a file, such as C<–o
+$filename> to test whether you’re the owner of the file.
+
+=item filter
+
+A X<filters, defined>program designed to take a B<stream> of input and
+transform it into a stream of output.
+
+=item first-come
+
+The X<first–come permissions>X<permissions, first–come>first B<PAUSE>
+author to upload a B<namespace> automatically becomes the B<primary
+maintainer> for that namespace. The “first come” permissions distinguish a
+B<primary maintainer> who was assigned that role from one who received it
+automatically.
+
+=item flag
+
+We X<flags (term)>tend to avoid this term because it means so many things.
+It may mean a command-line B<switch> that takes no argument itself (such as
+Perl’s C<–n> and C<–p> flags) or, less frequently, a single-bit indicator
+(such as the C<O_CREAT> and C<O_EXCL> flags used in C<sysopen>). Sometimes
+informally used to refer to certain regex modifiers.
+
+=item floating point
+
+A X<floating point methods>X<methods, floating point>method of storing
+numbers in “scientific notation”, such that the precision of the number is
+independent of its magnitude (the decimal point “floats”). Perl does its
+numeric work with floating-point numbers (sometimes called “floats”) when
+it can’t get away with using B<integers>. Floating-point numbers are mere
+approximations of real numbers.
+
+=item flush
+
+The act of X<flushing buffers>X<buffers, flushing>emptying a B<buffer>,
+often before it’s full.
+
+=item FMTEYEWTK
+
+Far More Than Everything You Ever Wanted To KnowX<FMTEYEWTK acronym>. An
+exhaustive treatise on one narrow topic, something of a super-B<FAQ>. See
+Tom for far more.
+
+=item foldcase
+
+The casemap X<foldcase (term)>used in Unicode when comparing or matching
+without regard to case. Comparing lower-, title-, or uppercase are all
+unreliable due to Unicode’s complex, one-to-many case mappings. Foldcase is
+a B<lowercase> variant (using a partially decomposed B<normalization> form
+for certain codepoints) created specifically to resolve this.
+
+=item fork
+
+To create a X<forking processes>X<processes, forking>child B<process>
+identical to the parent process at its moment of conception, at least until
+it gets ideas of its own. A thread with protected memory.
+
+=item formal arguments
+
+The X<formal arguments>X<arguments, formal>generic names by which a
+B<subroutine> knows its B<arguments>. In many languages, formal arguments
+are always given individual names; in Perl, the formal arguments are just
+the elements of an array. The formal arguments to a Perl program are
+C<$ARGV[0]>, C<$ARGV[1]>, and so on. Similarly, the formal arguments to a
+Perl subroutine are C<$_[0]>, C<$_[1]>, and so on. You may give the
+arguments individual names by assigning the values to a C<my> list. See
+also B<actual arguments>.
+
+=item format
+
+A X<formats, defined>specification of how many spaces and digits and things
+to put somewhere so that whatever you’re printing comes out nice and
+pretty.
+
+=item freely available
+
+Means X<freely available (term)>you don’t have to pay money to get it, but
+the copyright on it may still belong to someone else (like Larry).
+
+=item freely redistributable
+
+Means X<freely redistributable (term)>you’re not in legal trouble if you
+give a bootleg copy of it to your friends and we find out about it. In
+fact, we’d rather you gave a copy to all your friends.
+
+=item freeware
+
+Historically, X<freeware (term)>any software that you give away,
+particularly if you make the source code available as well. Now often
+called B<open source software>. Recently there has been a trend to use the
+term in contradistinction to B<open source software>, to refer only to free
+software released under the X<Free Software Foundation>Free Software
+Foundation’s GPL (General Public License), but this is difficult to justify
+etymologically.
+
+=item function
+
+Mathematically, X<functions, about>a mapping of each of a set of input
+values to a particular output value. In computers, refers to a
+B<subroutine> or B<operator> that returns a B<value>. It may or may not
+have input values (called B<arguments>).
+
+=item funny character
+
+Someone X<funny characters>X<characters, funny>like Larry, or one of his
+peculiar friends. Also refers to the strange prefixes that Perl requires as
+noun markers on its variables.
+
+=back
+
+=head2 G
+
+=over 4
+
+=item garbage collection
+
+A misnamed feature—X<garbage collection, defined>it should be called,
+“expecting your mother to pick up after you”. Strictly speaking, Perl
+doesn’t do this, but it relies on a reference-counting mechanism to keep
+things tidy. However, we rarely speak strictly and will often refer to the
+reference-counting scheme as a form of garbage collection. (If it’s any
+comfort, when your interpreter exits, a “real” garbage collector runs to
+make sure everything is cleaned up if you’ve been messy with circular
+references and such.)
+
+=item GID
+
+Group ID—in Unix, X<GID (Group ID)>X<Group ID (GID)>the numeric group ID
+that the B<operating system> uses to identify you and members of your
+B<group>.
+
+=item glob
+
+Strictly, the X<glob (* character)>shell’s C<*> character, which will match
+a “glob” of characters when you’re trying to generate a list of filenames.
+Loosely, the act of using globs and similar symbols to do pattern matching.
+See also B<fileglob> and B<typeglob>.
+
+=item global
+
+Something X<global (term)>you can see from anywhere, usually used of
+B<variables> and B<subroutines> that are visible everywhere in your
+program. In Perl, only certain special variables are truly global—most
+variables (and all subroutines) exist only in the current B<package>.
+Global variables can be declared with C<our>. See “Global Declarations” in
+Camel chapter 4, “Statements and Declarations”.
+
+=item global destruction
+
+The B<garbage X<global destruction>collection> of globals (and the running
+of any associated object destructors) that takes place when a Perl
+B<interpreter> is being shut down. Global destruction should not be
+confused with the Apocalypse, except perhaps when it should.
+
+=item glue language
+
+A language X<glue language>such as Perl that is good at hooking things
+together that weren’t intended to be hooked together.
+
+=item granularity
+
+The size of the X<granularity>pieces you’re dealing with, mentally
+speaking.
+
+=item grapheme
+
+A graphene is X<graphemes, defined>an allotrope of carbon arranged in a
+hexagonal crystal lattice one atom thick. A B<grapheme>, or more fully, a
+I<grapheme cluster string> is a single user-visible B<character>, which may
+in turn be several characters (B<codepoints>) long. For example, a carriage
+return plus a line feed is a single grapheme but two characters, while a
+“ȫ” is a single grapheme but one, two, or even three characters, depending
+on B<normalization>.
+
+=item greedy
+
+A B<subpattern> X<greedy subpatterns>X<subpatterns, greedy>whose
+B<quantifier> wants to match as many things as possible.
+
+=item grep
+
+Originally X<grep function>from the old Unix editor command for “Globally
+search for a Regular Expression and Print it”, now used in the general
+sense of any kind of search, especially text searches. Perl has a built-in
+C<grep> function that searches a list for elements matching any given
+criterion, whereas the B<grep>(1) program searches for lines matching a
+B<regular expression> in one or more files.
+
+=item group
+
+A set of users X<groups, defined>of which you are a member. In some
+operating systems (like Unix), you can give certain file access permissions
+to other members of your group.
+
+=item GV
+
+An internal “glob value” X<GV (glob value)>X<glob value (GV)>typedef,
+holding a B<typeglob>. The C<GV> type is a subclass of B<SV>.
+
+=back
+
+=head2 H
+
+=over 4
+
+=item hacker
+
+Someone X<hackers>who is brilliantly persistent in solving technical
+problems, whether these involve golfing, fighting orcs, or programming.
+Hacker is a neutral term, morally speaking. Good hackers are not to be
+confused with evil B<crackers> or clueless B<script kiddies>. If you
+confuse them, we will presume that you are either evil or clueless.
+
+=item handler
+
+A B<subroutine> X<handlers, defined>or B<method> that Perl calls when your
+program needs to respond to some internal event, such as a B<signal>, or an
+encounter with an operator subject to B<operator overloading>. See also
+B<callback>.
+
+=item hard reference
+
+A B<scalar> B<value> X<hard references, about>X<references, hard>containing
+the actual address of a B<referent>, such that the referent’s B<reference>
+count accounts for it. (Some hard references are held internally, such as
+the implicit reference from one of a B<typeglob>’s variable slots to its
+corresponding referent.) A hard reference is different from a B<symbolic
+reference>.
+
+=item hash
+
+An unordered X<hashes, about>association of B<key>/B<value> X<key/value
+pairs, about>pairs, stored such that you can easily use a string B<key> to
+look up its associated data B<value>. This glossary is like a hash, where
+the word to be defined is the key and the definition is the value. A hash
+is also sometimes septisyllabically called an “associative array”, which is
+a pretty good reason for simply calling it a “hash” instead.
+
+=item hash table
+
+A data X<hash tables>structure used internally by Perl for implementing
+associative arrays (hashes) efficiently. See also B<bucket>.
+
+=item header file
+
+A file X<header files>X<files, header>containing certain required
+definitions that you must include “ahead” of the rest of your program to do
+certain obscure operations. A C header file has a I<.h> extension. Perl
+doesn’t really have header files, though historically Perl has sometimes
+used translated I<.h> files with a I<.ph> extension. See C<require> in
+Camel chapter 27, “Functions”. (Header files have been superseded by the
+B<module> mechanism.)
+
+=item here document
+
+So X<here documents>called because of a similar construct in B<shells> that
+pretends that the B<lines> following the B<command> are a separate B<file>
+to be fed to the command, up to some terminating string. In Perl, however,
+it’s just a fancy form of quoting.
+
+=item hexadecimal
+
+A X<hexadecimals>number in base 16, “hex” for short. The digits for 10
+through 15 are customarily represented by the letters C<a> through C<f>.
+Hexadecimal constants in Perl start with C<0x>. See also the C<hex>
+function in Camel chapter 27, “Functions”.
+
+=item home directory
+
+The X<home directory>X<directories, home>directory you are put into when
+you log in. On a Unix system, the name is often placed into C<$ENV{HOME}>
+or C<$ENV{LOGDIR}> by I<login>, but you can also find it with
+C<(get>C<pwuid($E<lt>))[7]>. (Some platforms do not have a concept of a
+home directory.)
+
+=item host
+
+The computer X<host computers>on which a program or other data resides.
+
+=item hubris
+
+Excessive pride, X<hubris quality>the sort of thing for which Zeus zaps
+you. Also the quality that makes you write (and maintain) programs that
+other people won’t want to say bad things about. Hence, the third great
+virtue of a programmer. See also B<laziness> and B<impatience>.
+
+=item HV
+
+Short for a “hash value” X<HV (hash value)>X<hash value (HV)>typedef, which
+holds Perl’s internal representation of a hash. The C<HV> type is a
+subclass of B<SV>.
+
+=back
+
+=head2 I
+
+=over 4
+
+=item identifier
+
+A legally X<identifiers, defined>formed name for most anything in which a
+computer program might be interested. Many languages (including Perl) allow
+identifiers to start with an alphabetic character, and then contain
+alphabetics and digits. Perl also allows connector punctuation like the
+underscore character wherever it allows alphabetics. (Perl also has more
+complicated names, like B<qualified> names.)
+
+=item impatience
+
+The anger X<impatience quality>you feel when the computer is being lazy.
+This makes you write programs that don’t just react to your needs, but
+actually anticipate them. Or at least that pretend to. Hence, the second
+great virtue of a programmer. See also B<laziness> and B<hubris>.
+
+=item implementation
+
+How a X<implementation (term)>piece of code actually goes about doing its
+job. Users of the code should not count on implementation details staying
+the same unless they are part of the published B<interface>.
+
+=item import
+
+To gain X<import (term)>access to symbols that are exported from another
+module. See C<use> in Camel chapter 27, “Functions”.
+
+=item increment
+
+To increase the X<incrementing values>X<values, incrementing>value of
+something by 1 (or by some other number, if so specified).
+
+=item indexing
+
+In olden days, X<indexing (term)>the act of looking up a B<key> in an
+actual index (such as a phone book). But now it's merely the act of using
+any kind of key or position to find the corresponding B<value>, even if no
+index is involved. Things have degenerated to the point that Perl’s
+C<index> function merely locates the position (index) of one string in
+another.
+
+=item indirect filehandle
+
+An B<expression> X<indirect filehandles>X<filehandles, indirect>that
+evaluates to something that can be used as a B<filehandle>: a B<string>
+(filehandle name), a B<typeglob>, a typeglob B<reference>, or a low-level
+B<IO> object.
+
+=item indirection
+
+If something in a X<indirection (term)>program isn’t the value you’re
+looking for but indicates where the value is, that’s indirection. This can
+be done with either B<symbolic references> or B<hard>.
+
+=item indirect object
+
+In English grammar, X<indirect objects, defined>X<objects, indirect>a short
+noun phrase between a verb and its direct object indicating the beneficiary
+or recipient of the action. In Perl, C<print STDOUT "$foo\n";> can be
+understood as “verb indirect-object object”, where C<STDOUT> is the
+recipient of the C<print> action, and C<"$foo"> is the object being
+printed. Similarly, when invoking a B<method>, you might place the
+invocant in the dative slot between the method and its arguments:
+
+ $gollum = new Pathetic::Creature "Sméagol";
+ give $gollum "Fisssssh!";
+ give $gollum "Precious!";
+
+=item indirect object slot
+
+The syntactic X<indirect object slot>position falling between a method call
+and its arguments when using the indirect object invocation syntax. (The
+slot is distinguished by the absence of a comma between it and the next
+argument.) C<STDERR> is in the indirect object slot here:
+
+ print STDERR "Awake! Awake! Fear, Fire, Foes! Awake!\n";
+
+=item infix
+
+An B<operator> that X<infix operators>comes in between its B<operands>,
+such as multiplication in C<24 * 7>.
+
+=item inheritance
+
+What you get from your X<inheritance, defined>ancestors, genetically or
+otherwise. If you happen to be a B<class>, your ancestors are called B<base
+classes> and your descendants are called B<derived classes>. See B<single
+inheritance> and B<multiple inheritance>.
+
+=item instance
+
+Short for “an instance of a class”, X<instances (term)>meaning an B<object>
+of that B<class>.
+
+=item instance data
+
+SeeX<instance data> B<instance variable>.
+
+=item instance method
+
+A B<method> of X<instance methods>X<methods, instance>an B<object>, as
+opposed to a B<class method>.
+
+A B<method> whose B<invocant> is an B<object>, not a B<package> name. Every
+object of a class shares all the methods of that class, so an instance
+method applies to all instances of the class, rather than applying to a
+particular instance. Also see B<class method>.
+
+=item instance variable
+
+An B<attribute> of an B<object>; X<instance variables, defined>X<variables,
+instance>data stored with the particular object rather than with the class
+as a whole.
+
+=item integer
+
+A number X<integers (term)>with no fractional (decimal) part. A counting
+number, like 1, 2, 3, and so on, but including 0 and the negatives.
+
+=item interface
+
+The services X<interfaces (term)>a piece of code promises to provide
+forever, in contrast to its B<implementation>, which it should feel free to
+change whenever it likes.
+
+=item interpolation
+
+The insertion of X<interpolation, defined>a scalar or list value somewhere
+in the middle of another value, such that it appears to have been there all
+along. In Perl, variable interpolation happens in double-quoted strings and
+patterns, and list interpolation occurs when constructing the list of
+values to pass to a list operator or other such construct that takes a
+I<C<LIST>>.
+
+=item interpreter
+
+Strictly speaking, X<interpreters, defined>a program that reads a second
+program and does what the second program says directly without turning the
+program into a different form first, which is what B<compilers> do. Perl is
+not an interpreter by this definition, because it contains a kind of
+compiler that takes a program and turns it into a more executable form
+(B<syntax trees>) within the I<perl> process itself, which the Perl
+B<runtime> system then interprets.
+
+=item invocant
+
+The agent on X<invocants, defined>whose behalf a B<method> is invoked. In a
+B<class> method, the invocant is a package name. In an B<instance> method,
+the invocant is an object reference.
+
+=item invocation
+
+The act of X<invocation, method>calling up a deity, daemon, program,
+method, subroutine, or function to get it to do what you think it’s
+supposed to do. We usually “call” subroutines but “invoke” methods, since
+it sounds cooler.
+
+=item I/O
+
+Input from, or X<I/O (Input/Output), defined>X<Input/Output (I/O),
+defined>output to, a B<file> or B<device>.
+
+=item IO
+
+An internal I/O object. Can also mean B<indirect object>.
+
+=item I/O layer
+
+One of the X<I/O layer>filters between the data and what you get as input
+or what you end up with as output.
+
+=item IPA
+
+India Pale Ale. Also the X<International Phonetic Alphabet (IPA)>X<IPA
+(International Phonetic Alphabet)>International Phonetic Alphabet, the
+standard alphabet used for phonetic notation worldwide. Draws heavily on
+Unicode, including many combining characters.
+
+=item IP
+
+Internet ProtocolX<Internet Protocol (IP)>X<IP (Internet Protocol)>, or
+X<IP (Intellectual Property)>X<Intellectual Property (IP)>Intellectual
+Property.
+
+=item IPC
+
+Interprocess X<Interprocess Communication>X<IPC (Interprocess
+Communication), about>X<communication>Communication.
+
+=item is-a
+
+A rX<is–a relationship>elationship between two B<objects> in which one
+object is considered to be a more specific version of the other, generic
+object: “A camel is a mammal.” Since the generic object really only exists
+in a Platonic sense, we usually add a little abstraction to the notion of
+objects and think of the relationship as being between a generic B<base
+class> and a specific B<derived class>. Oddly enough, Platonic classes
+don’t always have Platonic relationships—see B<inheritance>.
+
+=item iteration
+
+Doing X<iteration>something repeatedly.
+
+=item iterator
+
+A special X<iterators>programming gizmo that keeps track of where you are
+in something that you’re trying to iterate over. The C<foreach> loop in
+Perl contains an iterator; so does a hash, allowing you to C<each> through
+it.
+
+=item IV
+
+The integer X<IV (Integer Value)>X<Integer Value (IV)>four, not to be
+confused with six, Tom’s favorite editor. IV also means an internal Integer
+Value of the type a B<scalar> can hold, not to be confused with an B<NV>.
+
+=back
+
+=head2 J
+
+=over 4
+
+=item JAPH
+
+“Just Another Perl Hacker”, a X<JAPH acronym>clever but cryptic bit of Perl
+code that, when executed, evaluates to that string. Often used to
+illustrate a particular Perl feature, and something of an ongoing
+Obfuscated Perl Contest seen in USENET signatures.
+
+=back
+
+=head2 K
+
+=over 4
+
+=item key
+
+The X<keys, defined>string index to a B<hash>, used to look up the B<value>
+associated with that key.
+
+=item keyword
+
+See B<reserved words>.
+
+=back
+
+=head2 L
+
+=over 4
+
+=item label
+
+A X<labels, defined>name you give to a B<statement> so that you can talk
+about that statement elsewhere in the program.
+
+=item laziness
+
+The X<laziness quality>quality that makes you go to great effort to reduce
+overall energy expenditure. It makes you write labor-saving programs that
+other people will find useful, and then document what you wrote so you
+don’t have to answer so many questions about it. Hence, the first great
+virtue of a programmer. Also hence, this book. See also B<impatience> and
+B<hubris>.
+
+=item leftmost longest
+
+The X<leftmost longest preference>X<regular expressions, leftmost longest
+preference>preference of the B<regular expression> engine to match the
+leftmost occurrence of a B<pattern>, then given a position at which a match
+will occur, the preference for the longest match (presuming the use of a
+B<greedy> quantifier). See Camel chapter 5, “Pattern Matching” for I<much>
+more on this subject.
+
+=item left shift
+
+A B<bit shift> that X<left shift (E<lt>E<lt>) bit operator>X<bit–shift
+operators, left shift>X<E<lt>E<lt> (left shift) bit operator>multiplies the
+number by some power of 2.
+
+=item lexeme
+
+Fancy X<lexeme (token)>term for a B<token>.
+
+=item lexer
+
+Fancy X<lexer (tokener)>term for a B<tokener>.
+
+=item lexical analysis
+
+Fancy X<lexical analysis>term for B<tokenizing>.
+
+=item lexical scoping
+
+Looking X<lexical scopes, defined>X<scopes>at your I<Oxford English
+Dictionary> through a microscope. (Also known as B<static scoping>, because
+dictionaries don’t change very fast.) Similarly, looking at variables
+stored in a private dictionary (namespace) for each scope, which are
+visible only from their point of declaration down to the end of theX<static
+scopes>X<scopes, static> lexical scope in which they are declared. —Syn.
+B<static scoping>. —Ant. B<dynamic scoping>.
+
+=item lexical variable
+
+A B<variable> X<lexical variables, about>X<variables, lexical>subject to
+B<lexical scoping>, declared by C<my>. Often just called a “lexical”. (The
+C<our> declaration declares a lexically scoped name for a global variable,
+which is not itself a lexical variable.)
+
+=item library
+
+Generally, a X<libraries, defined>collection of procedures. In ancient
+days, referred to a collection of subroutines in a I<.pl> file. In modern
+times, refers more often to the entire collection of Perl B<modules> on
+your system.
+
+=item LIFO
+
+Last In, First OutX<Last In, First Out (LIFO)>X<LIFO (Last In, First
+Out)>X<stacks, defined>. See also B<FIFO>. A LIFO is usually called a
+B<stack>.
+
+=item line
+
+In Unix, a X<line (term)>sequence of zero or more nonnewline characters
+terminated with a B<newline> character. On non-Unix machines, this is
+emulated by the C library even if the underlying B<operating system> has
+different ideas.
+
+=item linebreak
+
+A B<grapheme> X<linebreaks>consisting of either a carriage return followed
+by a line feed or any character with the Unicode Vertical Space B<character
+property>.
+
+=item line buffering
+
+Used by X<line buffering>X<buffering, line>a B<standard I/O> output stream that
+flushes its B<buffer> after every B<newline>. Many standard I/O libraries
+automatically set up line buffering on output that is going to the terminal.
+
+=item line number
+
+The number X<line number>of lines read previous to this one, plus 1. Perl
+keeps a separate line number for each source or input file it opens. The
+current source file’s line number is represented by C<__LINE__>. The
+current input line number (for the file that was most recently read via
+C<E<lt>FHE<gt>>) is represented by the C<$.> (C<$INPUT_LINE_NUMBER>)
+variable. Many error messages report both values, if available.
+
+=item link
+
+Used as a X<links, defined>noun, a name in a B<directory> that represents a
+B<file>. A given file can have multiple links to it. It’s like having the
+same phone number listed in the phone directory under different names. As a
+verb, to resolve a partially B<compiled> file’s unresolved symbols into a
+(nearly) executable image. Linking can generally be static or dynamic,
+which has nothing to do with static or dynamic scoping.
+
+=item LIST
+
+A syntactic X<LIST construct>X<constructs, LIST>construct representing a
+comma- separated list of expressions, evaluated to produce a B<list value>.
+Each B<expression> in a I<C<LIST>> is evaluated in B<list context> and
+interpolated into the list value.
+
+=item list
+
+An ordered X<lists, defined>set of scalar values.
+
+=item list context
+
+The situation X<list context>X<context, list>in which an B<expression> is
+expected by its surroundings (the code calling it) to return a list of
+values rather than a single value. Functions that want a I<C<LIST>> of
+arguments tell those arguments that they should produce a list value. See
+also B<context>.
+
+=item list operator
+
+An B<operator> that X<list operators, about>does something with a list of
+values, such as C<join> or C<grep>. Usually used for named built-in
+operators (such as C<print>, C<unlink>, and C<system>) that do not require
+parentheses around their B<argument> list.
+
+=item list value
+
+An unnamed X<list values, about>X<values, list>list of temporary scalar
+values that may be passed around within a program from any list-generating
+function to any function or construct that provides a B<list context>.
+
+=item literal
+
+A token X<literals, defined>in a programming language, such as a number or
+B<string>, that gives you an actual B<value> instead of merely representing
+possible values as a B<variable> does.
+
+=item little-endian
+
+From Swift: X<little–endian, defined>X<endianness, little–endian>someone
+who eats eggs little end first. Also used of computers that store the least
+significant B<byte> of a word at a lower byte address than the most
+significant byte. Often considered superior to big-endian machines. See
+also B<big-endian>.
+
+=item local
+
+Not meaning X<local operator, about>the same thing everywhere. A global
+variable in Perl can be localized inside a B<dynamic scope> via the
+C<local> operator.
+
+=item logical operator
+
+Symbols X<logical operators, about>representing the concepts “and”, “or”,
+“xor”, and “not”.
+
+=item lookahead
+
+An B<assertion> that X<lookahead assertions>X<assertions (in regexes),
+lookahead>peeks at the string to the right of the current match location.
+
+=item lookbehind
+
+An B<assertion> X<lookbehind assertions>X<assertions (in regexes),
+lookbehind>that peeks at the string to the left of the current match
+location.
+
+=item loop
+
+A construct X<loop constructs and statements, about>X<constructs, loop>that
+performs something repeatedly, like a roller coaster.
+
+=item loop control statement
+
+Any statement X<statements, loop control>within the body of a loop that can
+make a loop prematurely stop looping or skip an B<iteration>. Generally,
+you shouldn’t try this on roller coasters.
+
+=item loop label
+
+A kind X<loop labels>X<labels, loop>of key or name attached to a loop (or
+roller coaster) so that loop control statements can talk about which loop
+they want to control.
+
+=item lowercase
+
+In Unicode, X<lowercase characters>X<characters, lowercase>not just
+characters with the General Category of Lowercase Letter, but any character
+with the Lowercase property, including Modifier Letters, Letter Numbers,
+some Other Symbols, and one Combining Mark.
+
+=item lvaluable
+
+Able to X<lvaluable function>X<functions, lvaluable>serve as an B<lvalue>.
+
+=item lvalue
+
+Term used by X<lvalue (term)>X<values, lvalue>language lawyers for a
+storage location you can assign a new B<value> to, such as a B<variable> or
+an element of an B<array>. The “l” is short for “left”, as in the left side
+of an assignment, a typical place for lvalues. An B<lvaluable> function or
+expression is one to which a value may be assigned, as in C<pos($x) = 10>.
+
+=item lvalue modifier
+
+An X<lvalue modifier>X<modifiers, lvalue>adjectival pseudofunction that
+warps the meaning of an B<lvalue> in some declarative fashion. Currently
+there are three lvalue modifiers: C<my>, C<our>, and C<local>.
+
+=back
+
+=head2 M
+
+=over 4
+
+=item magic
+
+Technically X<magic (term)>speaking, any extra semantics attached to a
+variable such as C<$!>, C<$0>, C<%ENV>, or C<%SIG>, or to any tied
+variable. Magical things happen when you diddle those variables.
+
+=item magical increment
+
+An B<increment> X<magical increment operator>operator that knows how to
+bump up ASCII alphabetics as well as numbers.
+
+=item magical variables
+
+Special variables X<magical variables>X<variables, magical>that have side
+effects when you access them or assign to them. For example, in Perl,
+changing elements of the C<%ENV> array also changes the corresponding
+environment variables that subprocesses will use. Reading the C<$!>
+variable gives you the current system error number or message.
+
+=item Makefile
+
+A file that X<Makefile>controls the compilation of a program. Perl programs
+don’t usually need a B<Makefile> because the Perl compiler has plenty of
+self-control.
+
+=item man
+
+The Unix X<man program (Unix)>program that displays online documentation
+(manual pages) for you.
+
+=item manpage
+
+A “page” from the X<manpages, defined>manuals, typically accessed via the
+I<man>(1) command. A manpage contains a SYNOPSIS, a DESCRIPTION, a list of
+BUGS, and so on, and is typically longer than a page. There are manpages
+documenting B<commands>, B<syscalls>, B<library> B<functions>, B<devices>,
+B<protocols>, B<files>, and such. In this book, we call any piece of
+standard Perl documentation (like L<perlop> or L<perldelta>) a manpage, no
+matter what format it’s installed in on your system.
+
+=item matching
+
+SeeX<matching> B<pattern matching>.
+
+=item member data
+
+SeeX<member data> B<instance variable>.
+
+=item memory
+
+This X<memory, defined>always means your main memory, not your disk.
+Clouding the issue is the fact that your machine may implement
+B<virtual> memory; that is, it will pretend that it has more memory than
+it really does, and it’ll use disk space to hold inactive bits. This can
+make it seem like you have a little more memory than you really do, but
+it’s not a substitute for real memory. The best thing that can be said
+about virtual memory is that it lets your performance degrade gradually
+rather than suddenly when you run out of real memory. But your program
+can die when you run out of virtual memory, too—if you haven’t thrashed
+your disk to death first.
+
+=item metacharacter
+
+A B<character> that X<metacharacters, about>X<characters, regex
+metacharacters>is I<not> supposed to be treated normally. Which characters
+are to be treated specially as metacharacters varies greatly from context to
+context. Your B<shell> will have certain metacharacters, double-quoted Perl
+B<strings> have other metacharacters,X<regular expressions, metacharacters and>
+and B<regular expression> patterns have all the double-quote metacharacters plus
+some extra ones of their own.
+
+=item metasymbol
+
+Something we’d call X<metasymbols, about>X<escape sequences>a
+B<metacharacter> except that it’s a sequence of more than one character.
+Generally, the first character in the sequence must be a true metacharacter
+to get the other characters in the metasymbol to misbehave along with it.
+
+=item method
+
+A kind of X<methods, defined>action that an B<object> can take if you tell
+it to. See Camel chapter 12, “Objects”.
+
+=item method resolution order
+
+The path X<method resolution order (mro)>X<mro (method resolution
+order)>Perl takes through C<@INC>. By default, this is a double depth first
+search, once looking for defined methods and once for C<AUTOLOAD>. However,
+Perl lets you configure this with C<mro>.
+
+=item minicpan
+
+A CPAN X<minicpan, defined>X<CPAN (Comprehensive Perl Archive Network),
+minicpan and>mirror that includes just the latest versions for each
+distribution, probably created with C<CPAN::Mini>X<CPAN::Mini module>. See
+Camel chapter 19, “CPAN”.
+
+=item minimalism
+
+The belief X<minimalism>that “small is beautiful”. Paradoxically, if you
+say something in a small language, it turns out big, and if you say it in a
+big language, it turns out small. Go figure.
+
+=item mode
+
+In the X<mode>context of the I<stat>(2) syscall, refers to the field
+holding the B<permission bits> and the type of the B<file>.
+
+=item modifier
+
+SeeX<modifiers, defined> B<statement modifier>, B<regular expression>, and
+B<lvalue>, not necessarily in that order.
+
+=item module
+
+A B<file> that X<modules, defined>defines a B<package> of (almost) the same
+name, which can either B<export> symbols or function as an B<object> class.
+(A module’s main I<.pm> file may also load in other files in support of the
+module.) See the C<use> built-in.
+
+=item modulus
+
+An integer X<modulus (%) operator>X<% (modulus) operator>divisor when
+you’re interested in the remainder instead of the quotient.
+
+=item mojibake
+
+When you X<mojibake>speak one language and the computer thinks you’re
+speaking another. You’ll see odd translations when you send UTF‑8, for
+instance, but the computer thinks you sent Latin-1, showing all sorts of
+weird characters instead. The term is written 「文字化け」in Japanese and
+means “character rot”, an apt description. Pronounced [C<modʑibake>] in
+standard B<IPA> phonetics, or approximately “moh-jee-bah-keh”.
+
+=item monger
+
+Short for X<mongers, Perl>X<Perl mongers>one member of B<Perl mongers>, a
+purveyor of Perl.
+
+=item mortal
+
+A temporary X<mortal value>X<values, mortal>value scheduled to die when the
+current statement finishes.
+
+=item mro
+
+See B<method resolution order>.
+
+=item multidimensional array
+
+An array X<multidimensional arrays>X<arrays, multidimensional>with multiple
+subscripts for finding a single element. Perl implements these using
+B<references>—see Camel chapter 9, “Data Structures”.
+
+=item multiple inheritance
+
+The features X<multiple inheritance>X<inheritance, multiple>you got from
+your mother and father, mixed together unpredictably. (See also
+B<inheritance> and B<single inheritance>.) In computer languages (including
+Perl), it is the notion that a given class may have multiple direct
+ancestors or B<base classes>.
+
+=back
+
+=head2 N
+
+=over 4
+
+=item named pipe
+
+A B<pipe> X<named pipes>X<pipes, names>with a name embedded in the
+B<filesystem> so that it can be accessed by two unrelated B<processes>.
+
+=item namespace
+
+A domain of X<namespaces, about>names. You needn’t worry about whether the
+names in one such domain have been used in another. See B<package>.
+
+=item NaN
+
+Not a number. X<NaN (not a number)>X<not a number (NaN)>The value Perl uses
+for certain invalid or inexpressible floating-point operations.
+
+=item network address
+
+The most X<network address>important attribute of a socket, like your
+telephone’s telephone number. Typically an IP address. See also B<port>.
+
+=item newline
+
+A single X<newline character>X<characters, newline>character that
+represents the end of a line, with the ASCII value of 012 octal under Unix
+(but 015 on a Mac), and represented by C<\n> in Perl strings. For Windows
+machines writing text files, and for certain physical devices like
+terminals, the single newline gets automatically translated by your C
+library into a line feed and a carriage return, but normally, no
+translation is done.
+
+=item NFS
+
+Network File System, X<NFS (Network File System)>X<Network File System
+(NFS)>which allows you to mount a remote filesystem as if it were local.
+
+=item normalization
+
+Converting a X<normalization>text string into an alternate but equivalent
+B<canonical> (or compatible) representation that can then be compared for
+equivalence. Unicode recognizes four different normalization forms: NFD,
+NFC, NFKD, and NFKC.
+
+=item null character
+
+A character X<null character>X<characters, null>with the numeric value of
+zero. It’s used by C to terminate strings, but Perl allows strings to
+contain a null.
+
+=item null list
+
+A B<list value> with X<null lists>X<lists, null>zero elements, represented
+in Perl by C<()>.
+
+=item null string
+
+A B<string> X<null strings>X<strings, null>containing no characters, not to
+be confused with a string containing a B<null character>, which has a
+positive length and is B<true>.
+
+=item numeric context
+
+The situation X<numeric context>X<context, numeric>in which an expression
+is expected by its surroundings (the code calling it) to return a number.
+See also B<context> and B<string context>.
+
+=item numification
+
+(Sometimes spelled I<nummification> and I<nummify>.) X<numification>Perl lingo
+for implicit conversion into a number; the related verb is I<numify>.
+I<Numification> is intended to rhyme with I<mummification>, and I<numify> with
+I<mummify>. It is unrelated to English I<numen>, I<numina>, I<numinous>. We
+originally forgot the extra I<m> a long time ago, and some people got used to
+our funny spelling, and so just as with C<HTTP_REFERER>’s own missing letter,
+our weird spelling has stuck around.
+
+=item NV
+
+Short for Nevada, X<Numeric Value (NV)>X<NV (Numeric Value)>no part of
+which will ever be confused with civilization. NV also means an internal
+floating- point Numeric Value of the type a B<scalar> can hold, not to be
+confused with an B<IV>.
+
+=item nybble
+
+Half a B<byte>, X<nybble>equivalent to one B<hexadecimal> digit, and worth
+four B<bits>.
+
+=back
+
+=head2 O
+
+=over 4
+
+=item object
+
+An B<instance> X<objects, defined>of a B<class>. Something that “knows”
+what user-defined type (class) it is, and what it can do because of what
+class it is. Your program can request an object to do things, but the
+object gets to decide whether it wants to do them or not. Some objects are
+more accommodating than others.
+
+=item octal
+
+A number X<octals>in base 8. Only the digits 0 through 7 are allowed. Octal
+constants in Perl start with 0, as in 013. See also the C<oct> function.
+
+=item offset
+
+How many X<offsets in strings>X<strings, offsets in>things you have to skip
+over when moving from the beginning of a string or array to a specific
+position within it. Thus, the minimum offset is zero, not one, because you
+don’t skip anything to get to the first item.
+
+=item one-liner
+
+An entire X<one–liner programs>computer program crammed into one line of
+text.
+
+=item open source software
+
+Programs X<open source software>for which the source code is freely
+available and freely redistributable, with no commercial strings attached.
+For a more detailed definition, see L<http://www.opensource.org/osd.html>.
+
+=item operand
+
+An B<expression> X<operands (term)>that yields a B<value> that an
+B<operator> operates on. See also B<precedence>.
+
+=item operating system
+
+A special X<operating systems, defined>program that runs on the bare
+machine and hides the gory details of managing B<processes> and B<devices>.
+Usually used in a looser sense to indicate a particular culture of
+programming. The loose sense can be used at varying levels of specificity.
+At one extreme, you might say that all versions of Unix and Unix-lookalikes
+are the same operating system (upsetting many people, especially lawyers
+and other advocates). At the other extreme, you could say this particular
+version of this particular vendor’s operating system is different from any
+other version of this or any other vendor’s operating system. Perl is much
+more portable across operating systems than many other languages. See also
+B<architecture> and B<platform>.
+
+=item operator
+
+A gizmo X<operators, about>that transforms some number of input values to
+some number of output values, often built into a language with a special
+syntax or symbol. A given operator may have specific expectations about
+what B<types> of data you give as its arguments (B<operands>) and what type
+of data you want back from it.
+
+=item operator overloading
+
+A kind X<operator overloading, about>X<overloading, operator>of
+B<overloading> that you can do on built-in B<operators> to make them work
+on B<objects> as if the objects were ordinary scalar values, but with the
+actual semantics supplied by the object class. This is set up with the
+overload B<pragma>—see Camel chapter 13, “Overloading”.
+
+=item options
+
+See X<options>either B<switches> or B<regular expression modifiers>.
+
+=item ordinal
+
+An X<ordinals (term)>abstract character’s integer value. Same thing as
+B<codepoint>.
+
+=item overloading
+
+Giving X<overloading, defined>additional meanings to a symbol or construct.
+Actually, all languages do overloading to one extent or another, since
+people are good at figuring out things from B<context>.
+
+=item overriding
+
+Hiding or X<overriding, defined>invalidating some other definition of the
+same name. (Not to be confused with B<overloading>, which adds definitions
+that must be disambiguated some other way.) To confuse the issue further,
+we use the word with two overloaded definitions: to describe how you can
+define your own B<subroutine> to hide a built-in B<function> of the same
+name (see the section “Overriding Built-in Functions” in Camel chapter 11,
+“Modules”), and to describe how you can define a replacement B<method> in a
+B<derived class> to hide a B<base class>’s method of the same name (see
+Camel chapter 12, “Objects”).
+
+=item owner
+
+The one X<ownership, file>X<files, ownership of>user (apart from the
+superuser) who has absolute control over a B<file>. A file may also have a
+B<group> of users who may exercise joint ownership if the real owner
+permits it. See B<permission bits>.
+
+=back
+
+=head2 P
+
+=over 4
+
+=item package
+
+A B<namespace> for X<packages, defined>global B<variables>, B<subroutines>,
+and the like, such that they can be kept separate from like-named
+B<symbols> in other namespaces. In a sense, only the package is global,
+since the symbols in the package’s symbol table are only accessible from
+code B<compiled> outside the package by naming the package. But in another
+sense, all package symbols are also globals—they’re just well-organized
+globals.
+
+=item pad
+
+Short X<pads (scratchpads)>for B<scratchpad>.
+
+=item parameter
+
+SeeX<parameters> B<argument>.
+
+=item parent class
+
+SeeX<parent classes>X<classes, parent> B<base class>.
+
+=item parse tree
+
+SeeX<parse tree> B<syntax tree>.
+
+=item parsing
+
+The X<parsing, about>subtle but sometimes brutal art of attempting to turn
+your possibly malformed program into a valid B<syntax tree>.
+
+=item patch
+
+To X<patches>fix by applying one, as it were. In the realm of hackerdom, a
+listing of the differences between two versions of a program as might be
+applied by the B<patch>(1) program when you want to fix a bug or upgrade
+your old version.
+
+=item PATH
+
+The X<PATH environment variable>X<variables, environment>list of
+B<directories> the system searches to find a program you want to
+B<execute>. The list is stored as one of your B<environment variables>,
+accessible in Perl as C<$ENV{PATH}>.
+
+=item pathname
+
+A X<pathname>fully qualified filename such as I</usr/bin/perl>. Sometimes
+confused with C<PATH>.
+
+=item pattern
+
+A X<patterns, defined>template used in B<pattern matching>.
+
+=item pattern matching
+
+Taking a X<pattern matching, about>pattern, usually a B<regular
+expression>, and trying the pattern various ways on a string to see whether
+there’s any way to make it fit. Often used to pick interesting tidbits out
+of a file.
+
+=item PAUSE
+
+The X<Perl Authors Upload SErver (PAUSE)>X<PAUSE (Perl Authors Upload
+SErver)>Perl Authors Upload SErver (L<http://pause.perl.org>), the gateway
+for B<modules> on their way to B<CPAN>.
+
+=item Perl mongers
+
+A X<Perl mongers>X<mongers, Perl>Perl user group, taking the form of its
+name from the New York Perl mongers, the first Perl user group. Find one
+near you at L<http://www.pm.org>.
+
+=item permission bits
+
+Bits X<permission bits>X<bits, permission>that the B<owner> of a file sets
+or unsets to allow or disallow access to other people. These flag bits are
+part of the B<mode> word returned by the C<stat> built-in when you ask
+about a file. On Unix systems, you can check the I<ls>(1) manpage for more
+information.
+
+=item Pern
+
+What you get X<Pern (term)>when you do C<Perl++> twice. Doing it only once
+will curl your hair. You have to increment it eight times to shampoo your
+hair. Lather, rinse, iterate.
+
+=item pipe
+
+A X<pipes, defined>direct B<connection> that carries the output of one
+B<process> to the input of another without an intermediate temporary file.
+Once the pipe is set up, the two processes in question can read and write
+as if they were talking to a normal file, with some caveats.
+
+=item pipeline
+
+A X<pipeline>series of B<processes> all in a row, linked by B<pipes>, where
+each passes its output stream to the next.
+
+=item platform
+
+The X<platforms, defined>entire hardware and software context in which a
+program runs. A program written in a platform-dependent language might
+break if you change any of the following: machine, operating system,
+libraries, compiler, or system configuration. The I<perl> interpreter has
+to be B<compiled> differently for each platform because it is implemented
+in C, but programs written in the Perl language are largely platform
+independent.
+
+=item pod
+
+The X<pod (plain old documentation), about>X<plain old documentation>markup
+used to embed documentation into your Perl code. Pod stands for “Plain old
+documentation”. See Camel chapter 23, “Plain Old Documentation”.
+
+=item pod command
+
+A X<pod commands>X<commands, pod>sequence, such as C<=head1>, that denotes
+the start of a B<pod> section.
+
+=item pointer
+
+A B<variable> X<pointers>in a language like C that contains the exact
+memory location of some other item. Perl handles pointers internally so you
+don’t have to worry about them. Instead, you just use symbolic pointers in
+the form of B<keys> and B<variable> names, or B<hard references>, which
+aren’t pointers (but act like pointers and do in fact contain pointers).
+
+=item polymorphism
+
+The notion X<polymorphism>that you can tell an B<object> to do something
+generic, and the object will interpret the command in different ways
+depending on its type. [E<lt> Greek πολυ- + μορϕή, many forms.]
+
+=item port
+
+The X<ports (term)>part of the address of a TCP or UDP socket that directs
+packets to the correct process after finding the right machine, something
+like the phone extension you give when you reach the company operator. Also
+the result of converting code to run on a different platform than
+originally intended, or the verb denoting this conversion.
+
+=item portable
+
+Once X<portability, about>upon a time, C code compilable under both BSD and
+SysV. In general, code that can be easily converted to run on another
+B<platform>, where “easily” can be defined however you like, and usually
+is. Anything may be considered portable if you try hard enough, such as a
+mobile home or London Bridge.
+
+=item porter
+
+Someone X<porters>who “carries” software from one B<platform> to another.
+Porting programs written in platform-dependent languages such as C can be
+difficult work, but porting programs like Perl is very much worth the
+agony.
+
+=item possessive
+
+Said of X<possessive (term)>quantifiers and groups in patterns that refuse
+to give up anything once they’ve gotten their mitts on it. Catchier and
+easier to say than the even more formal I<nonbacktrackable>.
+
+=item POSIX
+
+The X<Portable Operating System Interface (POSIX), about>X<POSIX (Portable
+Operating System Interface), about>Portable Operating System Interface
+specification.
+
+=item postfix
+
+An B<operator> X<postfix operator>that follows its B<operand>, as in
+C<$x++>.
+
+=item pp
+
+An X<pp (push–pop) code>X<push–pop (pp) code>internal shorthand for a
+“push- pop” code; that is, C code implementing Perl’s stack machine.
+
+=item pragma
+
+A X<pragmas, about>X<modules>standard module whose practical hints and
+suggestions are received (and possibly ignored) at compile time. Pragmas
+are named in all lowercase.
+
+=item precedence
+
+The X<precedence rules, about>X<operators, precedence rules>rules of
+conduct that, in the absence of other guidance, determine what should
+happen first. For example, in the absence of parentheses, you always do
+multiplication before addition.
+
+=item prefix
+
+An B<operator> X<prefix operators>that precedes its B<operand>, as in
+C<++$x>.
+
+=item preprocessing
+
+What X<preprocessing>some helper B<process> did to transform the incoming
+data into a form more suitable for the current process. Often done with an
+incoming B<pipe>. See also B<C preprocessor>.
+
+=item primary maintainer
+
+The X<primary maintainer>author that PAUSE allows to assign B<co-maintainer>
+permissions to a B<namespace>. A primary maintainer can give up this
+distinction by assigning it to another PAUSE author. See Camel chapter 19,
+“CPAN”.
+
+=item procedure
+
+AX<procedures, defined> B<subroutine>.
+
+=item process
+
+An X<processes, defined>instance of a running program. Under multitasking
+systems like Unix, two or more separate processes could be running the same
+program independently at the same time—in fact, the C<fork> function is
+designed to bring about this happy state of affairs. Under other operating
+systems, processes are sometimes called “threads”, “tasks”, or “jobs”,
+often with slight nuances in meaning.
+
+=item program
+
+See B<script>.
+
+=item program generator
+
+A system X<program generators>that algorithmically writes code for you in a
+high-level language. See also B<code generator>.
+
+=item progressive matching
+
+B<Pattern matching> X<progressive matching>X<pattern matching, progressive
+matching> matching>that picks up where it left off before.
+
+=item property
+
+See X<property>either B<instance variable> or B<character property>.
+
+=item protocol
+
+In X<protocols (term)>networking, an agreed-upon way of sending messages
+back and forth so that neither correspondent will get too confused.
+
+=item prototype
+
+An X<prototypes, about>optional part of a B<subroutine> declaration telling
+the Perl compiler how many and what flavor of arguments may be passed as
+B<actual arguments>, so you can write subroutine calls that parse much like
+built-in functions. (Or don’t parse, as the case may be.)
+
+=item pseudofunction
+
+A X<pseudofunctions>X<constructs, pseudofunctions>X<functions,
+pseudofunctions>construct that sometimes looks like a function but really
+isn’t. Usually reserved for B<lvalue> modifiers like C<my>, for B<context>
+modifiers like C<scalar>, and for the pick-your-own-quotes constructs,
+C<q//>, C<qq//>, C<qx//>, C<qw//>, C<qr//>, C<m//>, C<s///>, C<y///>, and
+C<tr///>.
+
+=item pseudohash
+
+Formerly, a reference X<pseudohashes>X<hashes, pseudohashes>to an array
+whose initial element happens to hold a reference to a hash. You used to be
+able to treat a pseudohash reference as either an array reference or a hash
+reference. Pseduohashes are no longer supported.
+
+=item pseudoliteral
+
+An B<operator> X<pseudoliterals>XC<that looks something like a B<literal>,
+such as the output-grabbing operator, <literal
+moreinfo="none">`>I<C<command>>C<`>.
+
+=item public domain
+
+Something X<public domain>not owned by anybody. Perl is copyrighted and is
+thus I<not> in the public domain—it’s just B<freely available> and B<freely
+redistributable>.
+
+=item pumpkin
+
+A X<pumpkin (term)>notional “baton” handed around the Perl community
+indicating who is the lead integrator in some arena of development.
+
+=item pumpking
+
+A B<X<pumpking>pumpkin> holder, the person in charge of pumping the pump,
+or at least priming it. Must be willing to play the part of the Great
+Pumpkin now and then.
+
+=item PV
+
+A “X<PV (pointer value)>X<pointer value (PV)>pointer value”, which is Perl
+Internals Talk for a C<char*>.
+
+=back
+
+=head2 Q
+
+=over 4
+
+=item qualified
+
+Possessing a X<qualified (term)>complete name. The symbol C<$Ent::moot> is
+qualified; C<$moot> is unqualified. A fully qualified filename is specified
+from the top-level directory.
+
+=item quantifier
+
+A X<quantifiers, about>component of a B<regular expression> specifying how
+many times the foregoing B<atom> may occur.
+
+=back
+
+=head2 R
+
+=over 4
+
+=item race condition
+
+A X<race conditions, defined>race condition exists when the result of
+several interrelated events depends on the ordering of those events, but
+that order cannot be guaranteed due to nondeterministic timing effects. If
+two or more programs, or parts of the same program, try to go through the
+same series of events, one might interrupt the work of the other. This is a
+good way to find an B<exploit>.
+
+=item readable
+
+With X<readable (term)>respect to files, one that has the proper permission
+bit set to let you access the file. With respect to computer programs, one
+that’s written well enough that someone has a chance of figuring out what
+it’s trying to do.
+
+=item reaping
+
+The last X<reaping zombie processes>rites performed by a parent B<process>
+on behalf of a deceased child process so that it doesn’t remain a
+B<zombie>. See the C<wait> and C<waitpid> function calls.
+
+=item record
+
+A set of X<records, defined>related data values in a B<file> or B<stream>,
+often associated with a unique B<key> field. In Unix, often commensurate
+with a B<line>, or a blank-line–terminated set of lines (a “paragraph”).
+Each line of the I</etc/passwd> file is a record, keyed on login name,
+containing information about that user.
+
+=item recursion
+
+The art of X<recursion, defined>defining something (at least partly) in
+terms of itself, which is a naughty no-no in dictionaries but often works
+out okay in computer programs if you’re careful not to recurse forever
+(which is like an infinite loop with more spectacular failure modes).
+
+=item reference
+
+Where you X<references, about>look to find a pointer to information
+somewhere else. (See B<indirection>.) References come in two flavors:
+B<symbolic references> and B<hard references>.
+
+=item referent
+
+Whatever a X<referents, defined>reference refers to, which may or may not
+have a name. Common types of referents include scalars, arrays, hashes, and
+subroutines.
+
+=item regex
+
+See B<regular expression>.
+
+=item regular expression
+
+A single X<regular expressions, defined>entity with various
+interpretations, like an elephant. To a computer scientist, it’s a grammar
+for a little language in which some strings are legal and others aren’t. To
+normal people, it’s a pattern you can use to find what you’re looking for
+when it varies from case to case. Perl’s regular expressions are far from
+regular in the theoretical sense, but in regular use they work quite well.
+Here’s a regular expression: C</Oh s.*t./>. This will match strings like
+“C<Oh say can you see by the dawn's early light>” and “C<Oh sit!>”. See
+Camel chapter 5, “Pattern Matching”.
+
+=item regular expression modifier
+
+An option on a X<regular expression modifiers>X<modifiers, regular
+expression>pattern or substitution, such as C</i> to render the pattern
+case- insensitive.
+
+=item regular file
+
+A B<file> that’s X<regular files>X<files, regular>not a B<directory>, a
+B<device>, a named B<pipe> or B<socket>, or a B<symbolic link>. Perl uses
+the C<–f> file test operator to identify regular files. Sometimes called a
+“plain” file.
+
+=item relational operator
+
+An B<operator> that X<relational operators>says whether a particular
+ordering relationship is B<true> about a pair of B<operands>. Perl has both
+numeric and string relational operators. See B<collating sequence>.
+
+=item reserved words
+
+A word with a X<reserved words>X<keywords (term)>specific, built-in meaning
+to a B<compiler>, such as C<if> or C<delete>. In many languages (not Perl),
+it’s illegal to use reserved words to name anything else. (Which is why
+they’re reserved, after all.) In Perl, you just can’t use them to name
+B<labels> or B<filehandles>. Also called “keywords”.
+
+=item return value
+
+The B<value> produced X<return values>X<values, return>by a B<subroutine>
+or B<expression> when evaluated. In Perl, a return value may be either a
+B<list> or a B<scalar>.
+
+=item RFC
+
+Request For Comment, X<Request For Comment (RFC)>X<RFC (Request For
+Comment)>which despite the timid connotations is the name of a series of
+important standards documents.
+
+=item right shift
+
+A B<bit shift> X<right shift (E<gt>E<gt>) bit operator>X<bit–shift
+operators, right shift>X<E<gt>E<gt> (right shift) bit operator>that divides
+a number by some power of 2.
+
+=item role
+
+A name X<roles (term)>for a concrete set of behaviors. A role is a way to
+add behavior to a class without inheritance.
+
+=item root
+
+The X<root (term)>superuser (C<UID> == 0). Also the top-level directory of
+the filesystem.
+
+=item RTFM
+
+What X<RTFM acronym>you are told when someone thinks you should Read The
+Fine Manual.
+
+=item run phase
+
+Any X<run phase, defined>time after Perl starts running your main program.
+See also B<compile phase>. Run phase is mostly spent in B<runtime> but may
+also be spent in B<compile time> when C<require>, C<do> I<C<FILE>>, or
+C<eval> I<C<STRING>> operators are executed, or when a substitution uses
+the C</ee> modifier.
+
+=item runtime
+
+The time X<runtime (term), defined>when Perl is actually doing what your
+code says to do, as opposed to the earlier period of time when it was
+trying to figure out whether what you said made any sense whatsoever, which
+is B<compile time>.
+
+=item runtime pattern
+
+A X<runtime patterns>X<patterns, runtime>pattern that contains one or more
+variables to be interpolated before parsing the pattern as a B<regular
+expression>, and that therefore cannot be analyzed at compile time, but
+must be reanalyzed each time the pattern match operator is evaluated.
+Runtime patterns are useful but expensive.
+
+=item RV
+
+A X<Reference Value (RV)>X<RV (Reference Value)>recreational vehicle, not
+to be confused with vehicular recreation. RV also means an internal
+Reference Value of the type a B<scalar> can hold. See also B<IV> and B<NV>
+if you’re not confused yet.
+
+=item rvalue
+
+A B<value> that X<rvalue (term)>X<values, rvalue>you might find on the
+right side of an B<assignment>. See also B<lvalue>.
+
+=back
+
+=head2 S
+
+=over 4
+
+=item sandbox
+
+A X<sandbox, defined>walled off area that’s not supposed to affect beyond
+its walls. You let kids play in the sandbox instead of running in the road.
+See Camel chapter 20, “Security”.
+
+=item scalar
+
+A X<scalars, defined>simple, singular value; a number, B<string>, or
+B<reference>.
+
+=item scalar context
+
+The X<scalar context, about>X<context, scalar>situation in which an
+B<expression> is expected by its surroundings (the code calling it) to
+return a single B<value> rather than a B<list> of values. See also
+B<context> and B<list context>. A scalar context sometimes imposes
+additional constraints on the return value—see B<string context> and
+B<numeric context>. Sometimes we talk about a B<Boolean context> inside
+conditionals, but this imposes no additional constraints, since any scalar
+value, whether numeric or B<string>, is already true or false.
+
+=item scalar literal
+
+A X<scalar literals>X<literals, scalar>number or quoted B<string>—an actual
+B<value> in the text of your program, as opposed to a B<variable>.
+
+=item scalar value
+
+A X<scalar values, about>X<values, scalar>X<SV>value that happens to be a
+B<scalar> as opposed to a B<list>.
+
+=item scalar variable
+
+A B<variable> X<scalar variables, defined>X<variables, scalar>prefixed with
+C<$> that holds a single value.
+
+=item scope
+
+From X<scopes, defined>how far away you can see a variable, looking through
+one. Perl has two visibility mechanisms. It does B<dynamic scoping> of
+C<local> B<variables>, meaning that the rest of the B<block>, and any
+B<subroutines> that are called by the rest of the block, can see the
+variables that are local to the block. Perl does B<lexical scoping> of
+C<my> variables, meaning that the rest of the block can see the variable,
+but other subroutines called by the block I<cannot> see the variable.
+
+=item scratchpad
+
+The X<scratchpads>area in which a particular invocation of a particular
+file or subroutine keeps some of its temporary values, including any
+lexically scoped variables.
+
+=item script
+
+A X<scripts (term)>X<programs, defined>text B<file> that is a program
+intended to be B<executed> directly rather than B<compiled> to another form
+of file before B<execution>.
+
+Also, in the context of B<Unicode>, a writing system for a particular
+language or group of languages, such as Greek, Bengali, or Tengwar.
+
+=item script kiddie
+
+A B<cracker> X<script kiddie>who is not a B<hacker> but knows just enough
+to run canned scripts. A B<cargo-cult> programmer.
+
+=item sed
+
+A venerable Stream EDitor X<sed (Stream EDitor)>X<Stream EDitor (sed)>from
+which Perl derives some of its ideas.
+
+=item semaphore
+
+A fancy X<semaphore>kind of interlock that prevents multiple B<threads> or
+B<processes> from using up the same resources simultaneously.
+
+=item separator
+
+A B<character> X<separators>X<characters, separators>X<strings,
+separators>or B<string> that keeps two surrounding strings from being
+confused with each other. The C<split> function X<split function,
+separators and>works on separators. Not to be confused with B<delimiters>
+or B<terminators>. The “or” in the previous sentence separated the two
+alternatives.
+
+=item serialization
+
+Putting a X<serialization>X<marshalling (term)>fancy B<data structure> into
+linear order so that it can be stored as a B<string> in a disk file or
+database, or sent through a B<pipe>. Also called marshalling.
+
+=item server
+
+In networking, X<servers, defined>X<processes, server>a B<process> that
+either advertises a B<service> or just hangs around at a known location and
+waits for B<clients> who need service to get in touch with it.
+
+=item service
+
+Something X<services (term)>you do for someone else to make them happy,
+like giving them the time of day (or of their life). On some machines,
+well-known services are listed by theX<getservent function> C<getservent>
+function.
+
+=item setgid
+
+Same as B<setuid>, X<setgid program, about>only having to do with giving
+away B<group> privileges.
+
+=item setuid
+
+Said of a program X<setuid program, about>that runs with the privileges of
+its B<owner> rather than (as is usually the case) the privileges of whoever
+is running it. Also describes the bit in the mode word (B<permission bits>)
+that controls the feature. This bit must be explicitly set by the owner to
+enable this feature, and the program must be carefully written not to give
+away more privileges than it ought to.
+
+=item shared memory
+
+A piece of B<memory> X<shared memory>X<memory, shared>accessible by two
+different B<processes> who otherwise would not see each other’s memory.
+
+=item shebang
+
+Irish for the X<shebang (term)>whole McGillicuddy. In Perl culture, a
+portmanteau of “sharp” and “bang”, meaning the C<#!> sequence that tells
+the system where to find the interpreter.
+
+=item shell
+
+A B<command>-X<shell program, defined>line B<interpreter>. The program that
+interactively gives you a prompt, accepts one or more B<lines> of input,
+and executes the programs you mentioned, feeding each of them their proper
+B<arguments> and input data. Shells can also execute scripts containing
+such commands. Under Unix, typical shells include the Bourne shell
+(I</bin/sh>), the C shell (I</bin/csh>), and the Korn shell (I</bin/ksh>).
+Perl is not strictly a shell because it’s not interactive (although Perl
+programs can be interactive).
+
+=item side effects
+
+Something extra X<side effects>that happens when you evaluate an
+B<expression>. Nowadays it can refer to almost anything. For example,
+evaluating a simple assignment statement typically has the “side effect” of
+assigning a value to a variable. (And you thought assigning the value was
+your primary intent in the first place!) Likewise, assigning a value to the
+special variable C<$|> (C<$AUTOFLUSH>) has the side effect of forcing a
+flush after every C<write> or C<print> on the currently selected
+filehandle.
+
+=item sigil
+
+A glyph X<sigils, defined>used in magic. Or, for Perl, the symbol in front
+of a variable name, such as C<$>, C<@>, and C<%>.
+
+=item signal
+
+A bolt X<signals and signal handling, about>out of the blue; that is, an
+event triggered by the B<operating system>, probably when you’re least
+expecting it.
+
+=item signal handler
+
+A B<subroutine> that, X<handlers, signal>instead of being content to be
+called in the normal fashion, sits around waiting for a bolt out of the
+blue before it will deign to B<execute>. Under Perl, bolts out of the blue
+are called signals, and you send them with the C<kill> built-in. See the
+C<%SIG> hash in Camel chapter 25, “Special Names” and the section “Signals”
+in Camel chapter 15, “Interprocess Communication”.
+
+=item single inheritance
+
+The features X<single inheritance>X<inheritance, single>you got from your
+mother, if she told you that you don’t have a father. (See also
+B<inheritance> and B<multiple inheritance>.) In computer languages, the
+idea that B<classes> reproduce asexually so that a given class can only
+have one direct ancestor or B<base class>. Perl supplies no such
+restriction, though you may certainly program Perl that way if you like.
+
+=item slice
+
+A selection X<slices of elements>X<elements, slices of>of any number of
+B<elements> from a B<list>, B<array>, or B<hash>.
+
+=item slurp
+
+To read an X<slurp (term)>entire B<file> into a B<string> in one operation.
+
+=item socket
+
+An endpoint for X<sockets, defined>network communication among multiple
+B<processes> that works much like a telephone or a post office box. The
+most important thing about a socket is its B<network address> (like a phone
+number). Different kinds of sockets have different kinds of addresses—some
+look like filenames, and some don’t.
+
+=item soft reference
+
+SeeX<soft references>X<references, soft> B<symbolic reference>.
+
+=item source filter
+
+A special X<source filters>X<filters, source>kind of B<module> that does
+B<preprocessing> on your script just before it gets to the B<tokener>.
+
+=item stack
+
+A X<stacks, defined>device you can put things on the top of, and later take
+them back off in the opposite order in which you put them on. See B<LIFO>.
+
+=item standard
+
+Included X<standard (term)>in the official Perl distribution, as in a
+standard module, a standard tool, or a standard Perl B<manpage>.
+
+=item standard error
+
+The default output B<stream> for nasty remarks that don’t belong in
+B<standard output>. Represented within a Perl program by theX<STDERR
+filehandle, about> output> B<filehandle> C<STDERR>. You can use this
+stream explicitly, but the C<die> and C<warn> built-ins write to your
+standard error stream automatically (unless trapped or otherwise
+intercepted).
+
+=item standard input
+
+The X<STDIN filehandle, about>default input B<stream> for your program,
+which if possible shouldn’t care where its data is coming from. Represented
+within a Perl program by the B<filehandle> C<STDIN>.
+
+=item standard I/O
+
+A X<standard I/O>X<I/O (Input/Output), standard>X<Input/Output (I/O),
+standard>X<STDIO filehandle>standard C library for doing B<buffered> input
+and output to the B<operating system>. (The “standard” of standard I/O is
+at most marginally related to the “standard” of standard input and output.)
+In general, Perl relies on whatever implementation of standard I/O a given
+operating system supplies, so the buffering characteristics of a Perl
+program on one machine may not exactly match those on another machine.
+Normally this only influences efficiency, not semantics. If your standard
+I/O package is doing block buffering and you want it to B<flush> the buffer
+more often, just set the C<$|> variable to a true value.
+
+=item Standard Library
+
+Everything X<Standard Perl Library, about>that comes with the official
+I<perl> distribution. Some vendor versions of I<perl> change their
+distributions, leaving out some parts or including extras. See also
+B<dual-lived>.
+
+=item standard output
+
+The X<STDOUT filehandle, about>default output B<stream> for your program,
+which if possible shouldn’t care where its data is going. Represented
+within a Perl program by the B<filehandle> C<STDOUT>.
+
+=item statement
+
+A B<command> to X<statements, about>the computer about what to do next,
+like a step in a recipe: “Add marmalade to batter and mix until mixed.” A
+statement is distinguished from a B<declaration>, which doesn’t tell the
+computer to do anything, but just to learn something.
+
+=item statement modifier
+
+A B<conditional> X<statement modifiers, about>X<modifiers, statement>or
+B<loop> that you put after the B<statement> instead of before, if you know
+what we mean.
+
+=item static
+
+Varying X<static (term)>slowly compared to something else. (Unfortunately,
+everything is relatively stable compared to something else, except for
+certain elementary particles, and we’re not so sure about them.) In
+computers, where things are supposed to vary rapidly, “static” has a
+derogatory connotation, indicating a slightly dysfunctional B<variable>,
+B<subroutine>, or B<method>. In Perl culture, the word is politely avoided.
+
+If you’re a C or C++ programmer, you might be looking for Perl’s C<state>
+keyword.
+
+=item static method
+
+No such X<static methods>X<methods, static>thing. See B<class method>.
+
+=item static scoping
+
+No such thing. See B<lexical scoping>.
+
+=item static variable
+
+No such X<static variables>X<variables, static>thing. Just use a B<lexical
+variable> in a scope larger than your B<subroutine>, or declare it with
+C<state> instead of with C<my>.
+
+=item stat structure
+
+A special X<stat structure>X<data structures, stat structure>internal spot
+in which Perl keeps the information about the last B<file> on which you
+requested information.
+
+=item status
+
+The B<value> X<status value>X<values, status>X<exit status>returned to the
+parent B<process> when one of its child processes dies. This value is
+placed in the special variable C<$?>. Its upper eight B<bits> are the exit
+status of the defunct process, and its lower eight bits identify the signal
+(if any) that the process died from. On Unix systems, this status value is
+the same as the status word returned by I<wait>(2). See C<system> in Camel
+chapter 27, “Functions”.
+
+=item STDERR
+
+See B<standard error>.
+
+=item STDIN
+
+See B<standard input>.
+
+=item STDIO
+
+See B<standard I/O>.
+
+=item STDOUT
+
+See B<standard output>.
+
+=item stream
+
+A flow X<streaming data>X<processes, streaming data>of data into or out of
+a process as a steady sequence of bytes or characters, without the
+appearance of being broken up into packets. This is a kind of
+B<interface>—the underlying B<implementation> may well break your data up
+into separate packets for delivery, but this is hidden from you.
+
+=item string
+
+A sequence X<strings, defined>of characters such as “He said !@#*&%@#*?!”.
+A string does not have to be entirely printable.
+
+=item string context
+
+The situation X<string context>X<context, string>in which an expression is
+expected by its surroundings (the code calling it) to return a B<string>.
+See also B<context> and B<numeric context>.
+
+=item stringification
+
+The process X<stringification>of producing a B<string> representation of an
+abstract object.
+
+=item struct
+
+C keyword X<struct keyword>introducing a structure definition or name.
+
+=item structure
+
+SeeX<structures> B<data structure>.
+
+=item subclass
+
+See B<derived class>.
+
+=item subpattern
+
+A X<subpatterns, defined>component of a B<regular expression> pattern.
+
+=item subroutine
+
+A X<subroutines, defined>named or otherwise accessible piece of program
+that can be invoked from elsewhere in the program in order to accomplish
+some subgoal of the program. A subroutine is often parameterized to
+accomplish different but related things depending on its input
+B<arguments>. If the subroutine returns a meaningful B<value>, it is also
+called a B<function>.
+
+=item subscript
+
+A B<value> X<subscripts>that indicates the position of a particular
+B<array> B<element> in an array.
+
+=item substitution
+
+Changing X<substitution (s///) operator, about>X<strings, substitution
+in>X<s/// (substitution) operator, about>parts of a string via the C<s///>
+operator. (We avoid use of this term to mean B<variable interpolation>.)
+
+=item substring
+
+A portion of a B<string>, X<substrings (term)>starting at a certain
+B<character> position (B<offset>) and proceeding for a certain number of
+characters.
+
+=item superclass
+
+See B<base class>.
+
+=item superuser
+
+The X<superusers>person whom the B<operating system> will let do almost
+anything. Typically your system administrator or someone pretending to be
+your system administrator. On Unix systems, the B<root> user. On Windows
+systems, usually the Administrator user.
+
+=item SV
+
+Short X<scalar values, about>X<values, scalar>for “scalar value”. But
+within the Perl interpreter, every B<referent> is treated as a member of a
+class derived from SV, in an object-oriented sort of way. Every B<value>
+inside Perl is passed around as a C language C<SV*> pointer. The SV
+B<struct> knows its own “referent type”, and the code is smart enough (we
+hope) not to try to call a B<hash> function on a B<subroutine>.
+
+=item switch
+
+An X<switches, about>X<switches>option you give on a command line to
+influence the way your program works, usually introduced with a minus sign.
+The word is also used as a nickname for a B<switch statement>.
+
+=item switch cluster
+
+The X<switch clusters>X<clusters, switch>combination of multiple command-
+line switches (I<e.g.>, C<–a –b –c>) into one switch (I<e.g.>, C<–abc>).
+Any switch with an additional B<argument> must be the last switch in a
+cluster.
+
+=item switch statement
+
+A X<switch statement>X<statements, switch>program technique that lets you
+evaluate an B<expression> and then, based on the value of the expression,
+do a multiway branch to the appropriate piece of code for that value. Also
+called a “case structure”, named after the similar Pascal construct. Most
+switch statements in Perl are spelled C<given>. See “The C<given>
+statement” in Camel chapter 4, “Statements and Declarations”.
+
+=item symbol
+
+Generally, X<symbols>X<symbols>any B<token> or B<metasymbol>. Often used
+more specifically to mean the sort of name you might find in a B<symbol
+table>.
+
+=item symbolic debugger
+
+A program X<symbolic debugger>X<debugger, about>that lets you step through
+the B<execution> of your program, stopping or printing things out here and
+there to see whether anything has gone wrong, and, if so, what. The
+“symbolic” part just means that you can talk to the debugger using the same
+symbols with which your program is written.
+
+=item symbolic link
+
+An alternate X<symbolic links>X<links, symbolic>filename that points to the
+real B<filename>, which in turn points to the real B<file>. Whenever the
+B<operating system> is trying to parse a B<pathname> containing a symbolic
+link, it merely substitutes the new name and continues parsing.
+
+=item symbolic reference
+
+A variable X<symbolic references>X<references, symbolic>whose value is the
+name of another variable or subroutine. By B<dereferencing> the first
+variable, you can get at the second one. Symbolic references are illegal
+under C<use strict "refs">.
+
+=item symbol table
+
+Where X<symbol tables, about>a B<compiler> remembers symbols. A program
+like Perl must somehow remember all the names of all the B<variables>,
+B<filehandles>, and B<subroutines> you’ve used. It does this by placing the
+names in a symbol table, which is implemented in Perl using a B<hash
+table>. There is a separate symbol table for each B<package> to give each
+package its own B<namespace>.
+
+=item synchronous
+
+Programming X<synchronous (term)>in which the orderly sequence of events
+can be determined; that is, when things happen one after the other, not at
+the same time.
+
+=item syntactic sugar
+
+An X<syntactic sugar>alternative way of writing something more easily; a
+shortcut.
+
+=item syntax
+
+From X<syntax, about>Greek σύνταξις, “with-arrangement”. How things
+(particularly symbols) are put together with each other.
+
+=item syntax tree
+
+An internal X<syntax tree>representation of your program wherein
+lower-level B<constructs> dangle off the higher-level constructs enclosing
+them.
+
+=item syscall
+
+A B<function> X<syscall function, about>call directly to the B<operating
+system>. Many of the important subroutines and functions you use aren’t
+direct system calls, but are built up in one or more layers above the
+system call level. In general, Perl programmers don’t need to worry about
+the distinction. However, if you do happen to know which Perl functions are
+really syscalls, you can predict which of these will set the C<$!>
+(C<$ERRNO>) variable on failure. Unfortunately, beginning programmers often
+confusingly employ the term “system call” to mean what happens when you
+call the Perl C<system> function, which actually involves many syscalls. To
+avoid any confusion, we nearly always say “syscall” for something you could
+call indirectly via Perl’s C<syscall> function, and never for something you
+would call with Perl’s C<system> function.
+
+=back
+
+=head2 T
+
+=over 4
+
+=item taint checks
+
+The X<taint checks, about>special bookkeeping Perl does to track the flow
+of external data through your program and disallow their use in system
+commands.
+
+=item tainted
+
+Said of X<tainted data, about>data derived from the grubby hands of a user,
+and thus unsafe for a secure program to rely on. Perl does taint checks if
+you run a B<setuid> (or B<setgid>) program, or if you use the C<–T> switch.
+
+=item taint mode
+
+Running X<taint mode>under the C<–T> switch, marking all external data as
+suspect and refusing to use it with system commands. See Camel chapter 20,
+“Security”.
+
+=item TCP
+
+Short for X<TCP (Transmission Control Protocol)>X<Transmission Control
+Protocol (TCP)>Transmission Control Protocol. A protocol wrapped around the
+Internet Protocol to make an unreliable packet transmission mechanism
+appear to the application program to be a reliable B<stream> of bytes.
+(Usually.)
+
+=item term
+
+Short for X<terms, defined>a “terminal”—that is, a leaf node of a B<syntax
+tree>. A thing that functions grammatically as an B<operand> for the
+operators in an expression.
+
+=item terminator
+
+A B<character> X<terminators (term)>X<characters, terminators>X<strings,
+terminators in>or B<string> that marks the end of another string. The C<$/>
+variable contains the string that terminates a C<readline> operation, which
+C<chomp> deletes from the end. Not to be confused with B<delimiters> or
+B<separators>. The period at the end of this sentence is a terminator.
+
+=item ternary
+
+An B<operator> X<ternary operators>taking three B<operands>. Sometimes
+pronounced B<trinary>.
+
+=item text
+
+A B<string> or B<file> X<text, defined>X<strings, text>X<files,
+text>X<text>containing primarily printable characters.
+
+=item thread
+
+Like a X<threads (term)>forked process, but without B<fork>’s inherent
+memory protection. A thread is lighter weight than a full process, in that
+a process could have multiple threads running around in it, all fighting
+over the same process’s memory space unless steps are taken to protect
+threads from one another.
+
+=item tie
+
+The bond X<tied variables, about>between a magical variable and its
+implementation class. See the C<tie> function in Camel chapter 27,
+“Functions” and Camel chapter 14, “Tied Variables”.
+
+=item titlecase
+
+The case X<titlecase characters>X<characters, titlecase>used for capitals
+that are followed by lowercase characters instead of by more capitals.
+Sometimes called sentence case or headline case. English doesn’t use
+Unicode titlecase, but casing rules for English titles are more complicated
+than simply capitalizing each word’s first character.
+
+=item TMTOWTDI
+
+There’s More Than One Way To Do It, the Perl MottoX<TMTOWTDI acronym>. The
+notion that there can be more than one valid path to solving a programming
+problem in context. (This doesn’t mean that more ways are always better or
+that all possible paths are equally desirable—just that there need not be
+One True Way.)
+
+=item token
+
+A morpheme X<tokens, defined>in a programming language, the smallest unit
+of text with semantic significance.
+
+=item tokener
+
+A module that X<tokeners, defined>breaks a program text into a sequence of
+B<tokens> for later analysis by a parser.
+
+=item tokenizing
+
+Splitting up a X<tokenizing>program text into B<tokens>. Also known as
+“lexing”, in which case you get “lexemes” instead of tokens.
+
+=item toolbox approach
+
+The notion that, X<toolbox approach>with a complete set of simple tools
+that work well together, you can build almost anything you want. Which is
+fine if you’re assembling a tricycle, but if you’re building a
+defranishizing comboflux regurgalator, you really want your own machine
+shop in which to build special tools. Perl is sort of a machine shop.
+
+=item topic
+
+The thing you’re X<topics (term)>working on. Structures like
+C<while(E<lt>E<gt>)>, C<for>, C<foreach>, and C<given> set the topic for
+you by assigning to C<$_>, the default (I<topic>) variable.
+
+=item transliterate
+
+To turn one X<tr/// (transliteration) operator, about>X<strings,
+transliteration of>X<transliteration (tr///) operator, about>string
+representation into another by mapping each character of the source string
+to its corresponding character in the result string. Not to be confused
+with translation: for example, Greek I<πολύχρωμος> transliterates into
+I<polychromos> but translates into I<many-colored>. See the C<tr///>
+operator in Camel chapter 5, “Pattern Matching”.
+
+=item trigger
+
+An event X<triggers (term)>that causes a B<handler> to be run.
+
+=item trinary
+
+Not a X<trinary operators>stellar system with three stars, but an
+B<operator> taking three B<operands>. Sometimes pronounced B<ternary>.
+
+=item troff
+
+A venerable X<troff language>typesetting language from which Perl derives
+the name of its C<$%> variable and which is secretly used in the production
+of Camel books.
+
+=item true
+
+Any X<true values>X<values, true>scalar value that doesn’t evaluate to 0 or
+C<"">.
+
+=item truncating
+
+Emptying a X<truncate function>X<files, truncating>file of existing
+contents, either automatically when opening a file for writing or
+explicitly via the C<truncate> function.
+
+=item type
+
+SeeX<type> B<data type> and B<class>.
+
+=item type casting
+
+Converting X<type casting>data from one type to another. C permits this.
+Perl does not need it. Nor want it.
+
+=item typedef
+
+A type X<typedef>definition in the C and C++ languages.
+
+=item typed lexical
+
+A B<lexical variable> X<typed lexicals>X<lexical variables, typed
+lexicals>X<variables, variable> lexical>that is declared with a B<class>
+type: C<my Pony $bill>.
+
+=item typeglob
+
+Use of X<typeglobs, defined>a single identifier, prefixed with C<*>. For
+example, C<*name> stands for any or all of C<$name>, C<@name>, C<%name>,
+C<&name>, or just C<name>. How you use it determines whether it is
+interpreted as all or only one of them. See “Typeglobs and Filehandles” in
+Camel chapter 2, “Bits and Pieces”.
+
+=item typemap
+
+A description of X<typemap>how C types may be transformed to and from Perl
+types within an B<extension> module written in B<XS>.
+
+=back
+
+=head2 U
+
+=over 4
+
+=item UDP
+
+User Datagram Protocol, the X<User Datagram Protocol (UDP)>X<UDP (User
+Datagram Protocol)>X<datagrams, UDP support>typical way to send
+B<datagrams> over the Internet.
+
+=item UID
+
+A user ID. X<UID (user ID)>X<user ID (UID)>Often used in the context of
+B<file> or B<process> ownership.
+
+=item umask
+
+A X<umask function>mask of those B<permission bits> that should be forced
+off when creating files or directories, in order to establish a policy of
+whom you’ll ordinarily deny access to. See the C<umask> function.
+
+=item unary operator
+
+An X<unary operators, about>operator with only one B<operand>, like C<!> or
+C<chdir>. Unary operators are usually prefix operators; that is, they
+precede their operand. The C<++> and C<––> operators can be either prefix
+or postfix. (Their position I<does> change their meanings.)
+
+=item Unicode
+
+A character set X<Unicode, about>comprising all the major character sets of
+the world, more or less. See L<http://www.unicode.org>.
+
+=item Unix
+
+A very large X<Unix language>and constantly evolving language with several
+alternative and largely incompatible syntaxes, in which anyone can define
+anything any way they choose, and usually do. Speakers of this language
+think it’s easy to learn because it’s so easily twisted to one’s own ends,
+but dialectical differences make tribal intercommunication nearly
+impossible, and travelers are often reduced to a pidgin-like subset of the
+language. To be universally understood, a Unix shell programmer must spend
+years of study in the art. Many have abandoned this discipline and now
+communicate via an Esperanto-like language called Perl.
+
+In ancient times, Unix was also used to refer to some code that a couple of
+people at Bell Labs wrote to make use of a PDP-7 computer that wasn’t doing
+much of anything else at the time.
+
+=item uppercase
+
+In Unicode, X<uppercase characters>X<characters, uppercase>not just
+characters with the General Category of Uppercase Letter, but any character
+with the Uppercase property, including some Letter Numbers and Symbols. Not
+to be confused with B<titlecase>.
+
+=back
+
+=head2 V
+
+=over 4
+
+=item value
+
+An actual piece X<values, defined>of data, in contrast to all the
+variables, references, keys, indices, operators, and whatnot that you need
+to access the value.
+
+=item variable
+
+A named storage X<variables, defined>X<variables>location that can hold any
+of various kinds of B<value>, as your program sees fit.
+
+=item variable interpolation
+
+TheX<variable interpolation>X<interpolation, variable> B<interpolation> of
+a scalar or array variable into a string.
+
+=item variadic
+
+Said of X<variadic (term)>a B<function> that happily receives an
+indeterminate number of B<actual arguments>.
+
+=item vector
+
+Mathematical X<vectors>jargon for a list of B<scalar values>.
+
+=item virtual
+
+Providing the X<virtual (term)>appearance of something without the reality,
+as in: virtual memory is not real memory. (See also B<memory>.) The
+opposite of “virtual” is “transparent”, which means providing the reality
+of something without the appearance, as in: Perl handles the
+variable-length UTF‑8 character encoding transparently.
+
+=item void context
+
+A form X<void context>X<context, void>of B<scalar context> in which an
+B<expression> is not expected to return any B<value> at all and is
+evaluated for its B<side effects> alone.
+
+=item v-string
+
+A “version” or “vector”X<v–strings>X<strings, v–strings> B<string>
+specified with a C<v> followed by a series of decimal integers in dot
+notation, for instance, C<v1.20.300.4000>. Each number turns into a
+B<character> with the specified ordinal value. (The C<v> is optional when
+there are at least three integers.)
+
+=back
+
+=head2 W
+
+=over 4
+
+=item warning
+
+A message X<warning messages>X<STDERR filehandle, warning messages
+and>printed to the C<STDERR> stream to the effect that something might be
+wrong but isn’t worth blowing up over. See C<warn> in Camel chapter 27,
+“Functions” and the C<warnings> pragma in Camel chapter 28, “Pragmantic
+Modules”.
+
+=item watch expression
+
+An expression which, X<watch expression>X<expressions, watch>when its value
+changes, causes a breakpoint in the Perl debugger.
+
+=item weak reference
+
+A X<weak references>X<references, weak>reference that doesn’t get counted
+normally. When all the normal references to data disappear, the data
+disappears. These are useful for circular references that would never
+disappear otherwise.
+
+=item whitespace
+
+A B<character> X<whitespace characters>X<characters, whitespace>that moves
+your cursor but doesn’t otherwise put anything on your screen. Typically
+refers to any of: space, tab, line feed, carriage return, or form feed. In
+Unicode, matches many other characters that Unicode considers whitespace,
+including the ɴ-ʙʀ .
+
+=item word
+
+In normal “computerese”, the X<words (term)>piece of data of the size most
+efficiently handled by your computer, typically 32 bits or so, give or take a
+few powers of 2. In Perl culture, it more often refers to an alphanumeric
+B<identifier> (including underscores), or to a string of nonwhitespace
+B<characters> bounded by whitespace or string boundaries.
+
+=item working directory
+
+Your X<working directory>X<directories, working>current B<directory>, from
+which relative pathnames are interpreted by the B<operating system>. The
+operating system knows your current directory because you told it with a
+C<chdir>, or because you started out in the place where your parent
+B<process> was when you were born.
+
+=item wrapper
+
+A program X<wrappers (term)>or subroutine that runs some other program or
+subroutine for you, modifying some of its input or output to better suit
+your purposes.
+
+=item WYSIWYG
+
+What X<WYSIWYG acronym>You See Is What You Get. Usually used when something
+that appears on the screen matches how it will eventually look, like Perl’s
+C<format> declarations. Also used to mean the opposite of magic because
+everything works exactly as it appears, as in the three- argument form of
+C<open>.
+
+=back
+
+=head2 X
+
+=over 4
+
+=item XS
+
+An X<XS (eXternal Subroutine)>X<eXternal Subroutine (XS)>extraordinarily
+exported, expeditiously excellent, expressly eXternal Subroutine, executed
+in existing C or C++ or in an exciting extension language called
+(exasperatingly) XS.
+
+=item XSUB
+
+An X<XSUB (term)>external B<subroutine> defined in B<XS>.
+
+=back
+
+=head2 Y
+
+=over 4
+
+=item yacc
+
+Yet X<yacc acronym>Another Compiler Compiler. A parser generator without
+which Perl probably would not have existed. See the file I<perly.y> in the
+Perl source distribution.
+
+=back
+
+=head2 Z
+
+=over 4
+
+=item zero width
+
+A X<zero–width assertions>X<subpatterns, zero–width assertions>X<assertions
+(in regexes), zero–width>subpattern B<assertion> matching the B<null
+string> between B<characters>.
+
+=item zombie
+
+A process X<zombie processes>X<processes, zombie>that has died (exited) but
+whose parent has not yet received proper notification of its demise by
+virtue of having called C<wait> or C<waitpid>. If you C<fork>, you must
+clean up after your child processes when they exit; otherwise, the process
+table will fill up and your system administrator will Not Be Happy with
+you.
+
+=back
+
+=head1 AUTHOR AND COPYRIGHT
+
+Based on the Glossary of I<Programming Perl>, Fourth Edition,
+by Tom Christiansen, brian d foy, Larry Wall, & Jon Orwant.
+Copyright (c) 2000, 1996, 1991, 2012 O'Reilly Media, Inc.
+This document may be distributed under the same terms as Perl itself.
Added: vendor/perl/dist/dist/B-Deparse/t/core.t
===================================================================
--- vendor/perl/dist/dist/B-Deparse/t/core.t (rev 0)
+++ vendor/perl/dist/dist/B-Deparse/t/core.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,622 @@
+#!./perl
+
+# Test the core keywords.
+#
+# Initially this test file just checked that CORE::foo got correctly
+# deparsed as CORE::foo, hence the name. It's since been expanded
+# to fully test both CORE:: verses none, plus that any arguments
+# are correctly deparsed. It also cross-checks against regen/keywords.pl
+# to make sure we've tested all keywords, and with the correct strength.
+#
+# A keyword can be either weak or strong. Strong keywords can never be
+# overridden, while weak ones can. So deparsing of weak keywords depends
+# on whether a sub of that name has been created:
+#
+# for both: keyword(..) deparsed as keyword(..)
+# for weak: CORE::keyword(..) deparsed as CORE::keyword(..)
+# for strong: CORE::keyword(..) deparsed as keyword(..)
+#
+# Three permutations of lex/nonlex args are checked for:
+#
+# foo($a,$b,$c,...)
+# foo(my $a,$b,$c,...)
+# my ($a,$b,$c,...); foo($a,$b,$c,...)
+#
+# Note that tests for prefixing feature.pm-enabled keywords with CORE:: when
+# feature.pm is not enabled are in deparse.t, as they fit that format better.
+
+
+BEGIN {
+ require Config;
+ if (($Config::Config{extensions} !~ /\bB\b/) ){
+ print "1..0 # Skip -- Perl configured without B module\n";
+ exit 0;
+ }
+}
+
+use strict;
+use Test::More;
+plan tests => 2063;
+
+use feature (sprintf(":%vd", $^V)); # to avoid relying on the feature
+ # logic to add CORE::
+use B::Deparse;
+my $deparse = new B::Deparse;
+
+my %SEEN;
+my %SEEN_STRENGH;
+
+# for a given keyword, create a sub of that name, then
+# deparse "() = $expr", and see if it matches $expected_expr
+
+sub testit {
+ my ($keyword, $expr, $expected_expr) = @_;
+
+ $expected_expr //= $expr;
+ $SEEN{$keyword} = 1;
+
+
+ # lex=0: () = foo($a,$b,$c)
+ # lex=1: my ($a,$b); () = foo($a,$b,$c)
+ # lex=2: () = foo(my $a,$b,$c)
+ for my $lex (0, 1, 2) {
+ if ($lex) {
+ next if $keyword =~ /local|our|state|my/;
+ # XXX glob(my $x) incorrectly becomes <my $x>
+ next if $keyword eq 'glob';
+ }
+ my $vars = $lex == 1 ? 'my($a, $b, $c, $d, $e);' . "\n " : "";
+
+ if ($lex == 2) {
+ my $repl = 'my $a';
+ if ($expr =~ /\bmap\(\$a|CORE::(chomp|chop|lstat|stat)\b/) {
+ # for some reason only these do:
+ # 'foo my $a, $b,' => foo my($a), $b, ...
+ # the rest don't parenthesize the my var.
+ $repl = 'my($a)';
+ }
+ s/\$a/$repl/ for $expr, $expected_expr;
+ }
+
+ my $desc = "$keyword: lex=$lex $expr => $expected_expr";
+
+
+ my $code_ref;
+ {
+ package test;
+ use subs ();
+ import subs $keyword;
+ $code_ref = eval "no strict 'vars'; sub { ${vars}() = $expr }"
+ or die "$@ in $expr";
+ }
+
+ my $got_text = $deparse->coderef2text($code_ref);
+
+ unless ($got_text =~ /^{
+ package test;
+ use strict 'refs', 'subs';
+ use feature [^\n]+
+ \Q$vars\E\(\) = (.*)
+}/s) {
+ ::fail($desc);
+ ::diag("couldn't extract line from boilerplate\n");
+ ::diag($got_text);
+ return;
+ }
+
+ my $got_expr = $1;
+ is $got_expr, $expected_expr, $desc;
+ }
+}
+
+
+# Deparse can't distinguish 'and' from '&&' etc
+my %infix_map = qw(and && or ||);
+
+
+# test a keyword that is a binary infix operator, like 'cmp'.
+# $parens - "$a op $b" is deparsed as "($a op $b)"
+# $strong - keyword is strong
+
+sub do_infix_keyword {
+ my ($keyword, $parens, $strong) = @_;
+ $SEEN_STRENGH{$keyword} = $strong;
+ my $expr = "(\$a $keyword \$b)";
+ my $nkey = $infix_map{$keyword} // $keyword;
+ my $expr = "(\$a $keyword \$b)";
+ my $exp = "\$a $nkey \$b";
+ $exp = "($exp)" if $parens;
+ $exp .= ";";
+ # with infix notation, a keyword is always interpreted as core,
+ # so no need for Deparse to disambiguate with CORE::
+ testit $keyword, "(\$a CORE::$keyword \$b)", $exp;
+ testit $keyword, "(\$a $keyword \$b)", $exp;
+ if (!$strong) {
+ testit $keyword, "$keyword(\$a, \$b)", "$keyword(\$a, \$b);";
+ }
+}
+
+# test a keyword that is as tandard op/function, like 'index(...)'.
+# narg - how many args to test it with
+# $parens - "foo $a, $b" is deparsed as "foo($a, $b)"
+# $dollar - an extra '$_' arg will appear in the deparsed output
+# $strong - keyword is strong
+
+
+sub do_std_keyword {
+ my ($keyword, $narg, $parens, $dollar, $strong) = @_;
+
+ $SEEN_STRENGH{$keyword} = $strong;
+
+ for my $core (0,1) { # if true, add CORE:: to keyword being deparsed
+ my @code;
+ for my $do_exp(0, 1) { # first create expr, then expected-expr
+ my @args = map "\$$_", (undef,"a".."z")[1..$narg];
+ push @args, '$_' if $dollar && $do_exp && ($strong || $core);
+ my $args = join(', ', @args);
+ $args = ((!$core && !$strong) || $parens)
+ ? "($args)"
+ : @args ? " $args" : "";
+ push @code, (($core && !($do_exp && $strong)) ? "CORE::" : "")
+ . "$keyword$args;";
+ }
+ testit $keyword, @code; # code[0]: to run; code[1]: expected
+ }
+}
+
+
+while (<DATA>) {
+ chomp;
+ s/#.*//;
+ next unless /\S/;
+
+ my @fields = split;
+ die "not 3 fields" unless @fields == 3;
+ my ($keyword, $args, $flags) = @fields;
+
+ $args = '012' if $args eq '@';
+
+ my $parens = $flags =~ s/p//;
+ my $invert1 = $flags =~ s/1//;
+ my $dollar = $flags =~ s/\$//;
+ my $strong = $flags =~ s/\+//;
+ die "unrecognised flag(s): '$flags'" unless $flags =~ /^-?$/;
+
+ if ($args eq 'B') { # binary infix
+ die "$keyword: binary (B) op can't have '\$' flag\\n" if $dollar;
+ die "$keyword: binary (B) op can't have '1' flag\\n" if $invert1;
+ do_infix_keyword($keyword, $parens, $strong);
+ }
+ else {
+ my @narg = split //, $args;
+ for my $n (0..$#narg) {
+ my $narg = $narg[$n];
+ my $p = $parens;
+ $p = !$p if ($n == 0 && $invert1);
+ do_std_keyword($keyword, $narg, $p, (!$n && $dollar), $strong);
+ }
+ }
+}
+
+
+# Special cases
+
+testit dbmopen => 'CORE::dbmopen(%foo, $bar, $baz);';
+testit dbmclose => 'CORE::dbmclose %foo;';
+
+testit delete => 'CORE::delete $h{\'foo\'};', 'delete $h{\'foo\'};';
+testit delete => 'delete $h{\'foo\'};', 'delete $h{\'foo\'};';
+
+# do is listed as strong, but only do { block } is strong;
+# do $file is weak, so test it separately here
+testit do => 'CORE::do $a;';
+testit do => 'do $a;', 'do($a);';
+testit do => 'CORE::do { 1 }',
+ "do {\n 1\n };";
+testit do => 'do { 1 };',
+ "do {\n 1\n };";
+
+testit each => 'CORE::each %bar;';
+
+testit eof => 'CORE::eof();';
+
+testit exists => 'CORE::exists $h{\'foo\'};', 'exists $h{\'foo\'};';
+testit exists => 'exists $h{\'foo\'};', 'exists $h{\'foo\'};';
+
+testit exec => 'CORE::exec($foo $bar);';
+
+# glob($x) gets deparsed as glob("$x").
+# Whether this is correct, I don't know; but I didn't want
+# to start messing with the whole glob/readline/<> mess - DAPM.
+testit glob => 'glob;', 'glob("$_");';
+testit glob => 'CORE::glob;', 'glob("$_");';
+testit glob => 'glob $a;', 'glob("$a");';
+testit glob => 'CORE::glob $a;', 'glob("$a");';
+
+testit grep => 'CORE::grep { $a } $b, $c', 'grep({$a;} $b, $c);';
+
+testit keys => 'CORE::keys %bar;';
+
+testit map => 'CORE::map { $a } $b, $c', 'map({$a;} $b, $c);';
+
+testit not => '3 unless CORE::not $a && $b;';
+
+testit readline => 'CORE::readline $a . $b;';
+
+testit readpipe => 'CORE::readpipe $a + $b;';
+
+testit reverse => 'CORE::reverse sort(@foo);';
+
+# note that the test does '() = split...' which is why the
+# limit is optimised to 1
+testit split => 'split;', q{split(' ', $_, 1);};
+testit split => 'CORE::split;', q{split(' ', $_, 1);};
+testit split => 'split $a;', q{split(/$a/u, $_, 1);};
+testit split => 'CORE::split $a;', q{split(/$a/u, $_, 1);};
+testit split => 'split $a, $b;', q{split(/$a/u, $b, 1);};
+testit split => 'CORE::split $a, $b;', q{split(/$a/u, $b, 1);};
+testit split => 'split $a, $b, $c;', q{split(/$a/u, $b, $c);};
+testit split => 'CORE::split $a, $b, $c;', q{split(/$a/u, $b, $c);};
+
+testit sub => 'CORE::sub { $a, $b }',
+ "sub {\n \$a, \$b;\n }\n ;";
+
+testit system => 'CORE::system($foo $bar);';
+
+testit values => 'CORE::values %bar;';
+
+
+# XXX These are deparsed wrapped in parens.
+# whether they should be, I don't know!
+
+testit dump => '(CORE::dump);';
+testit dump => '(CORE::dump FOO);';
+testit goto => '(CORE::goto);', '(goto);';
+testit goto => '(CORE::goto FOO);', '(goto FOO);';
+testit last => '(CORE::last);', '(last);';
+testit last => '(CORE::last FOO);', '(last FOO);';
+testit next => '(CORE::next);', '(next);';
+testit next => '(CORE::next FOO);', '(next FOO);';
+testit redo => '(CORE::redo);', '(redo);';
+testit redo => '(CORE::redo FOO);', '(redo FOO);';
+testit redo => '(CORE::redo);', '(redo);';
+testit redo => '(CORE::redo FOO);', '(redo FOO);';
+testit return => '(return);', '(return);';
+testit return => '(CORE::return);', '(return);';
+
+# these are the keywords I couldn't think how to test within this framework
+
+my %not_tested = map { $_ => 1} qw(
+ __DATA__
+ __END__
+ __FILE__
+ __LINE__
+ __PACKAGE__
+ __SUB__
+ AUTOLOAD
+ BEGIN
+ CHECK
+ CORE
+ DESTROY
+ END
+ INIT
+ UNITCHECK
+ default
+ else
+ elsif
+ for
+ foreach
+ format
+ given
+ if
+ m
+ no
+ package
+ q
+ qq
+ qr
+ qw
+ qx
+ require
+ s
+ tr
+ unless
+ until
+ use
+ when
+ while
+ y
+);
+
+
+
+# Sanity check against keyword data:
+# make sure we haven't missed any keywords,
+# and that we got the strength right.
+
+SKIP:
+{
+ skip "sanity checks when not PERL_CORE", 1 unless defined $ENV{PERL_CORE};
+ my $count = 0;
+ my $file = '../../regen/keywords.pl';
+ my $pass = 1;
+ if (open my $fh, '<', $file) {
+ while (<$fh>) {
+ last if /^__END__$/;
+ }
+ while (<$fh>) {
+ next unless /^([+\-])(\w+)$/;
+ my ($strength, $key) = ($1, $2);
+ $strength = ($strength eq '+') ? 1 : 0;
+ $count++;
+ if (!$SEEN{$key} && !$not_tested{$key}) {
+ diag("keyword '$key' seen in $file, but not tested here!!");
+ $pass = 0;
+ }
+ if (exists $SEEN_STRENGH{$key} and $SEEN_STRENGH{$key} != $strength) {
+ diag("keyword '$key' strengh as seen in $file doen't match here!!");
+ $pass = 0;
+ }
+ }
+ }
+ else {
+ diag("Can't open $file: $!");
+ $pass = 0;
+ }
+ # insanity check
+ if ($count < 200) {
+ diag("Saw $count keywords: less than 200!");
+ $pass = 0;
+ }
+ ok($pass, "sanity checks");
+}
+
+
+
+__DATA__
+#
+# format:
+# keyword args flags
+#
+# args consists of:
+# * one of more digits indictating which lengths of args the function accepts,
+# * or 'B' to indiate a binary infix operator,
+# * or '@' to indicate a list function.
+#
+# Flags consists of the following (or '-' if no flags):
+# + : strong keyword: can't be overrriden
+# p : the args are parenthesised on deparsing;
+# 1 : parenthesising of 1st arg length is inverted
+# so '234 p1' means: foo a1,a2; foo(a1,a2,a3); foo(a1,a2,a3,a4)
+# $ : on the first argument length, there is an implicit extra
+# '$_' arg which will appear on deparsing;
+# e.g. 12p$ will be tested as: foo(a1); foo(a1,a2);
+# and deparsed as: foo(a1, $_); foo(a1,a2);
+#
+# XXX Note that we really should get this data from regen/keywords.pl
+# and regen/opcodes (augmented if necessary), rather than duplicating it
+# here.
+
+__SUB__ 0 -
+abs 01 $
+accept 2 p
+alarm 01 $
+and B -
+atan2 2 p
+bind 2 p
+binmode 12 p
+bless 1 p
+break 0 -
+caller 0 -
+chdir 01 -
+chmod @ p1
+chomp @ $
+chop @ $
+chown @ p1
+chr 01 $
+chroot 01 $
+close 01 -
+closedir 1 -
+cmp B -
+connect 2 p
+continue 0 -
+cos 01 $
+crypt 2 p
+# dbmopen handled specially
+# dbmclose handled specially
+defined 01 $+
+# delete handled specially
+die @ p1
+# do handled specially
+# dump handled specially
+each 1 - # also tested specially
+endgrent 0 -
+endhostent 0 -
+endnetent 0 -
+endprotoent 0 -
+endpwent 0 -
+endservent 0 -
+eof 01 - # also tested specially
+eq B -
+eval 01 $+
+evalbytes 01 $
+exec @ p1 # also tested specially
+# exists handled specially
+exit 01 -
+exp 01 $
+fc 01 $
+fcntl 3 p
+fileno 1 -
+flock 2 p
+fork 0 -
+formline 2 p
+ge B -
+getc 01 -
+getgrent 0 -
+getgrgid 1 -
+getgrnam 1 -
+gethostbyaddr 2 p
+gethostbyname 1 -
+gethostent 0 -
+getlogin 0 -
+getnetbyaddr 2 p
+getnetbyname 1 -
+getnetent 0 -
+getpeername 1 -
+getpgrp 1 -
+getppid 0 -
+getpriority 2 p
+getprotobyname 1 -
+getprotobynumber 1 p
+getprotoent 0 -
+getpwent 0 -
+getpwnam 1 -
+getpwuid 1 -
+getservbyname 2 p
+getservbyport 2 p
+getservent 0 -
+getsockname 1 -
+getsockopt 3 p
+# given handled specially
+grep 123 p+ # also tested specially
+# glob handled specially
+# goto handled specially
+gmtime 01 -
+gt B -
+hex 01 $
+index 23 p
+int 01 $
+ioctl 3 p
+join 123 p
+keys 1 - # also tested specially
+kill 123 p
+# last handled specially
+lc 01 $
+lcfirst 01 $
+le B -
+length 01 $
+link 2 p
+listen 2 p
+local 1 p+
+localtime 01 -
+lock 1 -
+log 01 $
+lstat 01 $
+lt B -
+map 123 p+ # also tested specially
+mkdir @ p$
+msgctl 3 p
+msgget 2 p
+msgrcv 5 p
+msgsnd 3 p
+my 123 p+ # skip with 0 args, as my() => ()
+ne B -
+# next handled specially
+# not handled specially
+oct 01 $
+open 12345 p
+opendir 2 p
+or B -
+ord 01 $
+our 123 p+ # skip with 0 args, as our() => ()
+pack 123 p
+pipe 2 p
+pop 01 1
+pos 01 $+
+print @ p$+
+printf @ p$+
+prototype 1 +
+push 123 p
+quotemeta 01 $
+rand 01 -
+read 34 p
+readdir 1 -
+# readline handled specially
+readlink 01 $
+# readpipe handled specially
+recv 4 p
+# redo handled specially
+ref 01 $
+rename 2 p
+# XXX This code prints 'Undefined subroutine &main::require called':
+# use subs (); import subs 'require';
+# eval q[no strict 'vars'; sub { () = require; }]; print $@;
+# so disable for now
+#require 01 $+
+reset 01 -
+# return handled specially
+reverse @ p1 # also tested specially
+rewinddir 1 -
+rindex 23 p
+rmdir 01 $
+say @ p$+
+scalar 1 +
+seek 3 p
+seekdir 2 p
+select 014 p1
+semctl 4 p
+semget 3 p
+semop 2 p
+send 34 p
+setgrent 0 -
+sethostent 1 -
+setnetent 1 -
+setpgrp 2 p
+setpriority 3 p
+setprotoent 1 -
+setpwent 0 -
+setservent 1 -
+setsockopt 4 p
+shift 01 1
+shmctl 3 p
+shmget 3 p
+shmread 4 p
+shmwrite 4 p
+shutdown 2 p
+sin 01 $
+sleep 01 -
+socket 4 p
+socketpair 5 p
+sort @ p+
+# split handled specially
+splice 12345 p
+sprintf 123 p
+sqrt 01 $
+srand 01 -
+stat 01 $
+state 123 p+ # skip with 0 args, as state() => ()
+study 01 $+
+# sub handled specially
+substr 234 p
+symlink 2 p
+syscall 2 p
+sysopen 34 p
+sysread 34 p
+sysseek 3 p
+system @ p1 # also tested specially
+syswrite 234 p
+tell 01 -
+telldir 1 -
+tie 234 p
+tied 1 -
+time 0 -
+times 0 -
+truncate 2 p
+uc 01 $
+ucfirst 01 $
+umask 01 -
+undef 01 +
+unlink @ p$
+unpack 12 p$
+unshift 1 p
+untie 1 -
+utime @ p1
+values 1 - # also tested specially
+vec 3 p
+wait 0 -
+waitpid 2 p
+wantarray 0 -
+warn @ p1
+write 01 -
+x B -
+xor B p
Added: vendor/perl/dist/dist/Carp/Makefile.PL
===================================================================
--- vendor/perl/dist/dist/Carp/Makefile.PL (rev 0)
+++ vendor/perl/dist/dist/Carp/Makefile.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+use warnings;
+use strict;
+
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+ NAME => "Carp",
+ VERSION_FROM => "lib/Carp.pm",
+ ABSTRACT_FROM => "lib/Carp.pm",
+ PREREQ_PM => {
+ "Exporter" => 0,
+ "IPC::Open3" => "1.0103",
+ "Test::More" => 0,
+ "strict" => 0,
+ "warnings" => 0,
+ },
+ LICENSE => "perl",
+ INSTALLDIRS => "$]" < 5.011 ? "perl" : "site",
+);
+
+1;
Added: vendor/perl/dist/dist/Carp/lib/Carp/Heavy.pm
===================================================================
--- vendor/perl/dist/dist/Carp/lib/Carp/Heavy.pm (rev 0)
+++ vendor/perl/dist/dist/Carp/lib/Carp/Heavy.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,13 @@
+package Carp::Heavy;
+
+use Carp ();
+
+our $VERSION = '1.29';
+
+1;
+
+# Most of the machinery of Carp used to be here.
+# It has been moved in Carp.pm now, but this placeholder remains for
+# the benefit of modules that like to preload Carp::Heavy directly.
+# This must load Carp, because some modules rely on the historical
+# behaviour of Carp::Heavy loading Carp.
Added: vendor/perl/dist/dist/Carp/lib/Carp.pm
===================================================================
--- vendor/perl/dist/dist/Carp/lib/Carp.pm (rev 0)
+++ vendor/perl/dist/dist/Carp/lib/Carp.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,709 @@
+package Carp;
+
+{ use 5.006; }
+use strict;
+use warnings;
+
+BEGIN {
+ no strict "refs";
+ if(exists($::{"utf8::"}) && exists(*{$::{"utf8::"}}{HASH}->{"is_utf8"}) &&
+ defined(*{*{$::{"utf8::"}}{HASH}->{"is_utf8"}}{CODE})) {
+ *is_utf8 = \&{"utf8::is_utf8"};
+ } else {
+ *is_utf8 = sub { 0 };
+ }
+}
+
+BEGIN {
+ no strict "refs";
+ if(exists($::{"utf8::"}) && exists(*{$::{"utf8::"}}{HASH}->{"downgrade"}) &&
+ defined(*{*{$::{"utf8::"}}{HASH}->{"downgrade"}}{CODE})) {
+ *downgrade = \&{"utf8::downgrade"};
+ } else {
+ *downgrade = sub {};
+ }
+}
+
+our $VERSION = '1.29';
+
+our $MaxEvalLen = 0;
+our $Verbose = 0;
+our $CarpLevel = 0;
+our $MaxArgLen = 64; # How much of each argument to print. 0 = all.
+our $MaxArgNums = 8; # How many arguments to print. 0 = all.
+
+require Exporter;
+our @ISA = ('Exporter');
+our @EXPORT = qw(confess croak carp);
+our @EXPORT_OK = qw(cluck verbose longmess shortmess);
+our @EXPORT_FAIL = qw(verbose); # hook to enable verbose mode
+
+# The members of %Internal are packages that are internal to perl.
+# Carp will not report errors from within these packages if it
+# can. The members of %CarpInternal are internal to Perl's warning
+# system. Carp will not report errors from within these packages
+# either, and will not report calls *to* these packages for carp and
+# croak. They replace $CarpLevel, which is deprecated. The
+# $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval
+# text and function arguments should be formatted when printed.
+
+our %CarpInternal;
+our %Internal;
+
+# disable these by default, so they can live w/o require Carp
+$CarpInternal{Carp}++;
+$CarpInternal{warnings}++;
+$Internal{Exporter}++;
+$Internal{'Exporter::Heavy'}++;
+
+# if the caller specifies verbose usage ("perl -MCarp=verbose script.pl")
+# then the following method will be called by the Exporter which knows
+# to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word
+# 'verbose'.
+
+sub export_fail { shift; $Verbose = shift if $_[0] eq 'verbose'; @_ }
+
+sub _cgc {
+ no strict 'refs';
+ return \&{"CORE::GLOBAL::caller"} if defined &{"CORE::GLOBAL::caller"};
+ return;
+}
+
+sub longmess {
+ # Icky backwards compatibility wrapper. :-(
+ #
+ # The story is that the original implementation hard-coded the
+ # number of call levels to go back, so calls to longmess were off
+ # by one. Other code began calling longmess and expecting this
+ # behaviour, so the replacement has to emulate that behaviour.
+ my $cgc = _cgc();
+ my $call_pack = $cgc ? $cgc->() : caller();
+ if ( $Internal{$call_pack} or $CarpInternal{$call_pack} ) {
+ return longmess_heavy(@_);
+ }
+ else {
+ local $CarpLevel = $CarpLevel + 1;
+ return longmess_heavy(@_);
+ }
+}
+
+our @CARP_NOT;
+
+sub shortmess {
+ my $cgc = _cgc();
+
+ # Icky backwards compatibility wrapper. :-(
+ local @CARP_NOT = $cgc ? $cgc->() : caller();
+ shortmess_heavy(@_);
+}
+
+sub croak { die shortmess @_ }
+sub confess { die longmess @_ }
+sub carp { warn shortmess @_ }
+sub cluck { warn longmess @_ }
+
+BEGIN {
+ if("$]" >= 5.015002 || ("$]" >= 5.014002 && "$]" < 5.015) ||
+ ("$]" >= 5.012005 && "$]" < 5.013)) {
+ *CALLER_OVERRIDE_CHECK_OK = sub () { 1 };
+ } else {
+ *CALLER_OVERRIDE_CHECK_OK = sub () { 0 };
+ }
+}
+
+sub caller_info {
+ my $i = shift(@_) + 1;
+ my %call_info;
+ my $cgc = _cgc();
+ {
+ # Some things override caller() but forget to implement the
+ # @DB::args part of it, which we need. We check for this by
+ # pre-populating @DB::args with a sentinel which no-one else
+ # has the address of, so that we can detect whether @DB::args
+ # has been properly populated. However, on earlier versions
+ # of perl this check tickles a bug in CORE::caller() which
+ # leaks memory. So we only check on fixed perls.
+ @DB::args = \$i if CALLER_OVERRIDE_CHECK_OK;
+ package DB;
+ @call_info{
+ qw(pack file line sub has_args wantarray evaltext is_require) }
+ = $cgc ? $cgc->($i) : caller($i);
+ }
+
+ unless ( defined $call_info{file} ) {
+ return ();
+ }
+
+ my $sub_name = Carp::get_subname( \%call_info );
+ if ( $call_info{has_args} ) {
+ my @args;
+ if (CALLER_OVERRIDE_CHECK_OK && @DB::args == 1
+ && ref $DB::args[0] eq ref \$i
+ && $DB::args[0] == \$i ) {
+ @DB::args = (); # Don't let anyone see the address of $i
+ local $@;
+ my $where = eval {
+ my $func = $cgc or return '';
+ my $gv =
+ *{
+ ( $::{"B::"} || return '') # B stash
+ ->{svref_2object} || return '' # entry in stash
+ }{CODE} # coderef in entry
+ ->($func)->GV;
+ my $package = $gv->STASH->NAME;
+ my $subname = $gv->NAME;
+ return unless defined $package && defined $subname;
+
+ # returning CORE::GLOBAL::caller isn't useful for tracing the cause:
+ return if $package eq 'CORE::GLOBAL' && $subname eq 'caller';
+ " in &${package}::$subname";
+ } || '';
+ @args
+ = "** Incomplete caller override detected$where; \@DB::args were not set **";
+ }
+ else {
+ @args = @DB::args;
+ my $overflow;
+ if ( $MaxArgNums and @args > $MaxArgNums )
+ { # More than we want to show?
+ $#args = $MaxArgNums;
+ $overflow = 1;
+ }
+
+ @args = map { Carp::format_arg($_) } @args;
+
+ if ($overflow) {
+ push @args, '...';
+ }
+ }
+
+ # Push the args onto the subroutine
+ $sub_name .= '(' . join( ', ', @args ) . ')';
+ }
+ $call_info{sub_name} = $sub_name;
+ return wantarray() ? %call_info : \%call_info;
+}
+
+# Transform an argument to a function into a string.
+sub format_arg {
+ my $arg = shift;
+ if ( ref($arg) ) {
+ $arg = defined($overload::VERSION) ? overload::StrVal($arg) : "$arg";
+ }
+ if ( defined($arg) ) {
+ $arg =~ s/'/\\'/g;
+ $arg = str_len_trim( $arg, $MaxArgLen );
+
+ # Quote it?
+ # Downgrade, and use [0-9] rather than \d, to avoid loading
+ # Unicode tables, which would be liable to fail if we're
+ # processing a syntax error.
+ downgrade($arg, 1);
+ $arg = "'$arg'" unless $arg =~ /^-?[0-9.]+\z/;
+ }
+ else {
+ $arg = 'undef';
+ }
+
+ # The following handling of "control chars" is direct from
+ # the original code - it is broken on Unicode though.
+ # Suggestions?
+ is_utf8($arg)
+ or $arg =~ s/([[:cntrl:]]|[[:^ascii:]])/sprintf("\\x{%x}",ord($1))/eg;
+ return $arg;
+}
+
+# Takes an inheritance cache and a package and returns
+# an anon hash of known inheritances and anon array of
+# inheritances which consequences have not been figured
+# for.
+sub get_status {
+ my $cache = shift;
+ my $pkg = shift;
+ $cache->{$pkg} ||= [ { $pkg => $pkg }, [ trusts_directly($pkg) ] ];
+ return @{ $cache->{$pkg} };
+}
+
+# Takes the info from caller() and figures out the name of
+# the sub/require/eval
+sub get_subname {
+ my $info = shift;
+ if ( defined( $info->{evaltext} ) ) {
+ my $eval = $info->{evaltext};
+ if ( $info->{is_require} ) {
+ return "require $eval";
+ }
+ else {
+ $eval =~ s/([\\\'])/\\$1/g;
+ return "eval '" . str_len_trim( $eval, $MaxEvalLen ) . "'";
+ }
+ }
+
+ # this can happen on older perls when the sub (or the stash containing it)
+ # has been deleted
+ if ( !defined( $info->{sub} ) ) {
+ return '__ANON__::__ANON__';
+ }
+
+ return ( $info->{sub} eq '(eval)' ) ? 'eval {...}' : $info->{sub};
+}
+
+# Figures out what call (from the point of view of the caller)
+# the long error backtrace should start at.
+sub long_error_loc {
+ my $i;
+ my $lvl = $CarpLevel;
+ {
+ ++$i;
+ my $cgc = _cgc();
+ my @caller = $cgc ? $cgc->($i) : caller($i);
+ my $pkg = $caller[0];
+ unless ( defined($pkg) ) {
+
+ # This *shouldn't* happen.
+ if (%Internal) {
+ local %Internal;
+ $i = long_error_loc();
+ last;
+ }
+ elsif (defined $caller[2]) {
+ # this can happen when the stash has been deleted
+ # in that case, just assume that it's a reasonable place to
+ # stop (the file and line data will still be intact in any
+ # case) - the only issue is that we can't detect if the
+ # deleted package was internal (so don't do that then)
+ # -doy
+ redo unless 0 > --$lvl;
+ last;
+ }
+ else {
+ return 2;
+ }
+ }
+ redo if $CarpInternal{$pkg};
+ redo unless 0 > --$lvl;
+ redo if $Internal{$pkg};
+ }
+ return $i - 1;
+}
+
+sub longmess_heavy {
+ return @_ if ref( $_[0] ); # don't break references as exceptions
+ my $i = long_error_loc();
+ return ret_backtrace( $i, @_ );
+}
+
+# Returns a full stack backtrace starting from where it is
+# told.
+sub ret_backtrace {
+ my ( $i, @error ) = @_;
+ my $mess;
+ my $err = join '', @error;
+ $i++;
+
+ my $tid_msg = '';
+ if ( defined &threads::tid ) {
+ my $tid = threads->tid;
+ $tid_msg = " thread $tid" if $tid;
+ }
+
+ my %i = caller_info($i);
+ $mess = "$err at $i{file} line $i{line}$tid_msg";
+ if( defined $. ) {
+ local $@ = '';
+ local $SIG{__DIE__};
+ eval {
+ CORE::die;
+ };
+ if($@ =~ /^Died at .*(, <.*?> line \d+).$/ ) {
+ $mess .= $1;
+ }
+ }
+ $mess .= "\.\n";
+
+ while ( my %i = caller_info( ++$i ) ) {
+ $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n";
+ }
+
+ return $mess;
+}
+
+sub ret_summary {
+ my ( $i, @error ) = @_;
+ my $err = join '', @error;
+ $i++;
+
+ my $tid_msg = '';
+ if ( defined &threads::tid ) {
+ my $tid = threads->tid;
+ $tid_msg = " thread $tid" if $tid;
+ }
+
+ my %i = caller_info($i);
+ return "$err at $i{file} line $i{line}$tid_msg\.\n";
+}
+
+sub short_error_loc {
+ # You have to create your (hash)ref out here, rather than defaulting it
+ # inside trusts *on a lexical*, as you want it to persist across calls.
+ # (You can default it on $_[2], but that gets messy)
+ my $cache = {};
+ my $i = 1;
+ my $lvl = $CarpLevel;
+ {
+ my $cgc = _cgc();
+ my $called = $cgc ? $cgc->($i) : caller($i);
+ $i++;
+ my $caller = $cgc ? $cgc->($i) : caller($i);
+
+ if (!defined($caller)) {
+ my @caller = $cgc ? $cgc->($i) : caller($i);
+ if (@caller) {
+ # if there's no package but there is other caller info, then
+ # the package has been deleted - treat this as a valid package
+ # in this case
+ redo if defined($called) && $CarpInternal{$called};
+ redo unless 0 > --$lvl;
+ last;
+ }
+ else {
+ return 0;
+ }
+ }
+ redo if $Internal{$caller};
+ redo if $CarpInternal{$caller};
+ redo if $CarpInternal{$called};
+ redo if trusts( $called, $caller, $cache );
+ redo if trusts( $caller, $called, $cache );
+ redo unless 0 > --$lvl;
+ }
+ return $i - 1;
+}
+
+sub shortmess_heavy {
+ return longmess_heavy(@_) if $Verbose;
+ return @_ if ref( $_[0] ); # don't break references as exceptions
+ my $i = short_error_loc();
+ if ($i) {
+ ret_summary( $i, @_ );
+ }
+ else {
+ longmess_heavy(@_);
+ }
+}
+
+# If a string is too long, trims it with ...
+sub str_len_trim {
+ my $str = shift;
+ my $max = shift || 0;
+ if ( 2 < $max and $max < length($str) ) {
+ substr( $str, $max - 3 ) = '...';
+ }
+ return $str;
+}
+
+# Takes two packages and an optional cache. Says whether the
+# first inherits from the second.
+#
+# Recursive versions of this have to work to avoid certain
+# possible endless loops, and when following long chains of
+# inheritance are less efficient.
+sub trusts {
+ my $child = shift;
+ my $parent = shift;
+ my $cache = shift;
+ my ( $known, $partial ) = get_status( $cache, $child );
+
+ # Figure out consequences until we have an answer
+ while ( @$partial and not exists $known->{$parent} ) {
+ my $anc = shift @$partial;
+ next if exists $known->{$anc};
+ $known->{$anc}++;
+ my ( $anc_knows, $anc_partial ) = get_status( $cache, $anc );
+ my @found = keys %$anc_knows;
+ @$known{@found} = ();
+ push @$partial, @$anc_partial;
+ }
+ return exists $known->{$parent};
+}
+
+# Takes a package and gives a list of those trusted directly
+sub trusts_directly {
+ my $class = shift;
+ no strict 'refs';
+ no warnings 'once';
+ return @{"$class\::CARP_NOT"}
+ ? @{"$class\::CARP_NOT"}
+ : @{"$class\::ISA"};
+}
+
+if(!defined($warnings::VERSION) ||
+ do { no warnings "numeric"; $warnings::VERSION < 1.03 }) {
+ # Very old versions of warnings.pm import from Carp. This can go
+ # wrong due to the circular dependency. If Carp is invoked before
+ # warnings, then Carp starts by loading warnings, then warnings
+ # tries to import from Carp, and gets nothing because Carp is in
+ # the process of loading and hasn't defined its import method yet.
+ # So we work around that by manually exporting to warnings here.
+ no strict "refs";
+ *{"warnings::$_"} = \&$_ foreach @EXPORT;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Carp - alternative warn and die for modules
+
+=head1 SYNOPSIS
+
+ use Carp;
+
+ # warn user (from perspective of caller)
+ carp "string trimmed to 80 chars";
+
+ # die of errors (from perspective of caller)
+ croak "We're outta here!";
+
+ # die of errors with stack backtrace
+ confess "not implemented";
+
+ # cluck, longmess and shortmess not exported by default
+ use Carp qw(cluck longmess shortmess);
+ cluck "This is how we got here!";
+ $long_message = longmess( "message from cluck() or confess()" );
+ $short_message = shortmess( "message from carp() or croak()" );
+
+=head1 DESCRIPTION
+
+The Carp routines are useful in your own modules because
+they act like C<die()> or C<warn()>, but with a message which is more
+likely to be useful to a user of your module. In the case of
+C<cluck()> and C<confess()>, that context is a summary of every
+call in the call-stack; C<longmess()> returns the contents of the error
+message.
+
+For a shorter message you can use C<carp()> or C<croak()> which report the
+error as being from where your module was called. C<shortmess()> returns the
+contents of this error message. There is no guarantee that that is where the
+error was, but it is a good educated guess.
+
+You can also alter the way the output and logic of C<Carp> works, by
+changing some global variables in the C<Carp> namespace. See the
+section on C<GLOBAL VARIABLES> below.
+
+Here is a more complete description of how C<carp> and C<croak> work.
+What they do is search the call-stack for a function call stack where
+they have not been told that there shouldn't be an error. If every
+call is marked safe, they give up and give a full stack backtrace
+instead. In other words they presume that the first likely looking
+potential suspect is guilty. Their rules for telling whether
+a call shouldn't generate errors work as follows:
+
+=over 4
+
+=item 1.
+
+Any call from a package to itself is safe.
+
+=item 2.
+
+Packages claim that there won't be errors on calls to or from
+packages explicitly marked as safe by inclusion in C<@CARP_NOT>, or
+(if that array is empty) C<@ISA>. The ability to override what
+ at ISA says is new in 5.8.
+
+=item 3.
+
+The trust in item 2 is transitive. If A trusts B, and B
+trusts C, then A trusts C. So if you do not override C<@ISA>
+with C<@CARP_NOT>, then this trust relationship is identical to,
+"inherits from".
+
+=item 4.
+
+Any call from an internal Perl module is safe. (Nothing keeps
+user modules from marking themselves as internal to Perl, but
+this practice is discouraged.)
+
+=item 5.
+
+Any call to Perl's warning system (eg Carp itself) is safe.
+(This rule is what keeps it from reporting the error at the
+point where you call C<carp> or C<croak>.)
+
+=item 6.
+
+C<$Carp::CarpLevel> can be set to skip a fixed number of additional
+call levels. Using this is not recommended because it is very
+difficult to get it to behave correctly.
+
+=back
+
+=head2 Forcing a Stack Trace
+
+As a debugging aid, you can force Carp to treat a croak as a confess
+and a carp as a cluck across I<all> modules. In other words, force a
+detailed stack trace to be given. This can be very helpful when trying
+to understand why, or from where, a warning or error is being generated.
+
+This feature is enabled by 'importing' the non-existent symbol
+'verbose'. You would typically enable it by saying
+
+ perl -MCarp=verbose script.pl
+
+or by including the string C<-MCarp=verbose> in the PERL5OPT
+environment variable.
+
+Alternately, you can set the global variable C<$Carp::Verbose> to true.
+See the C<GLOBAL VARIABLES> section below.
+
+=head1 GLOBAL VARIABLES
+
+=head2 $Carp::MaxEvalLen
+
+This variable determines how many characters of a string-eval are to
+be shown in the output. Use a value of C<0> to show all text.
+
+Defaults to C<0>.
+
+=head2 $Carp::MaxArgLen
+
+This variable determines how many characters of each argument to a
+function to print. Use a value of C<0> to show the full length of the
+argument.
+
+Defaults to C<64>.
+
+=head2 $Carp::MaxArgNums
+
+This variable determines how many arguments to each function to show.
+Use a value of C<0> to show all arguments to a function call.
+
+Defaults to C<8>.
+
+=head2 $Carp::Verbose
+
+This variable makes C<carp()> and C<croak()> generate stack backtraces
+just like C<cluck()> and C<confess()>. This is how C<use Carp 'verbose'>
+is implemented internally.
+
+Defaults to C<0>.
+
+=head2 @CARP_NOT
+
+This variable, I<in your package>, says which packages are I<not> to be
+considered as the location of an error. The C<carp()> and C<cluck()>
+functions will skip over callers when reporting where an error occurred.
+
+NB: This variable must be in the package's symbol table, thus:
+
+ # These work
+ our @CARP_NOT; # file scope
+ use vars qw(@CARP_NOT); # package scope
+ @My::Package::CARP_NOT = ... ; # explicit package variable
+
+ # These don't work
+ sub xyz { ... @CARP_NOT = ... } # w/o declarations above
+ my @CARP_NOT; # even at top-level
+
+Example of use:
+
+ package My::Carping::Package;
+ use Carp;
+ our @CARP_NOT;
+ sub bar { .... or _error('Wrong input') }
+ sub _error {
+ # temporary control of where'ness, __PACKAGE__ is implicit
+ local @CARP_NOT = qw(My::Friendly::Caller);
+ carp(@_)
+ }
+
+This would make C<Carp> report the error as coming from a caller not
+in C<My::Carping::Package>, nor from C<My::Friendly::Caller>.
+
+Also read the L</DESCRIPTION> section above, about how C<Carp> decides
+where the error is reported from.
+
+Use C<@CARP_NOT>, instead of C<$Carp::CarpLevel>.
+
+Overrides C<Carp>'s use of C<@ISA>.
+
+=head2 %Carp::Internal
+
+This says what packages are internal to Perl. C<Carp> will never
+report an error as being from a line in a package that is internal to
+Perl. For example:
+
+ $Carp::Internal{ (__PACKAGE__) }++;
+ # time passes...
+ sub foo { ... or confess("whatever") };
+
+would give a full stack backtrace starting from the first caller
+outside of __PACKAGE__. (Unless that package was also internal to
+Perl.)
+
+=head2 %Carp::CarpInternal
+
+This says which packages are internal to Perl's warning system. For
+generating a full stack backtrace this is the same as being internal
+to Perl, the stack backtrace will not start inside packages that are
+listed in C<%Carp::CarpInternal>. But it is slightly different for
+the summary message generated by C<carp> or C<croak>. There errors
+will not be reported on any lines that are calling packages in
+C<%Carp::CarpInternal>.
+
+For example C<Carp> itself is listed in C<%Carp::CarpInternal>.
+Therefore the full stack backtrace from C<confess> will not start
+inside of C<Carp>, and the short message from calling C<croak> is
+not placed on the line where C<croak> was called.
+
+=head2 $Carp::CarpLevel
+
+This variable determines how many additional call frames are to be
+skipped that would not otherwise be when reporting where an error
+occurred on a call to one of C<Carp>'s functions. It is fairly easy
+to count these call frames on calls that generate a full stack
+backtrace. However it is much harder to do this accounting for calls
+that generate a short message. Usually people skip too many call
+frames. If they are lucky they skip enough that C<Carp> goes all of
+the way through the call stack, realizes that something is wrong, and
+then generates a full stack backtrace. If they are unlucky then the
+error is reported from somewhere misleading very high in the call
+stack.
+
+Therefore it is best to avoid C<$Carp::CarpLevel>. Instead use
+C<@CARP_NOT>, C<%Carp::Internal> and C<%Carp::CarpInternal>.
+
+Defaults to C<0>.
+
+=head1 BUGS
+
+The Carp routines don't handle exception objects currently.
+If called with a first argument that is a reference, they simply
+call die() or warn(), as appropriate.
+
+=head1 SEE ALSO
+
+L<Carp::Always>,
+L<Carp::Clan>
+
+=head1 AUTHOR
+
+The Carp module first appeared in Larry Wall's perl 5.000 distribution.
+Since then it has been modified by several of the perl 5 porters.
+Andrew Main (Zefram) <zefram at fysh.org> divested Carp into an independent
+distribution.
+
+=head1 COPYRIGHT
+
+Copyright (C) 1994-2012 Larry Wall
+
+Copyright (C) 2011, 2012 Andrew Main (Zefram) <zefram at fysh.org>
+
+=head1 LICENSE
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
Added: vendor/perl/dist/dist/Carp/t/Carp.t
===================================================================
--- vendor/perl/dist/dist/Carp/t/Carp.t (rev 0)
+++ vendor/perl/dist/dist/Carp/t/Carp.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,518 @@
+use warnings;
+no warnings "once";
+use Config;
+
+use IPC::Open3 1.0103 qw(open3);
+use Test::More tests => 61;
+
+sub runperl {
+ my(%args) = @_;
+ my($w, $r);
+ my $pid = open3($w, $r, undef, $^X, "-e", $args{prog});
+ close $w;
+ my $output = "";
+ while(<$r>) { $output .= $_; }
+ waitpid($pid, 0);
+ return $output;
+}
+
+my $Is_VMS = $^O eq 'VMS';
+
+use Carp qw(carp cluck croak confess);
+
+BEGIN {
+ # This test must be run at BEGIN time, because code later in this file
+ # sets CORE::GLOBAL::caller
+ ok !exists $CORE::GLOBAL::{caller},
+ "Loading doesn't create CORE::GLOBAL::caller";
+}
+
+{
+ my $str = Carp::longmess("foo");
+ is(
+ $str,
+ "foo at t/Carp.t line 31.\n",
+ "we don't overshoot the top stack frame",
+ );
+}
+
+{
+ local $SIG{__WARN__} = sub {
+ like $_[0], qr/ok (\d+)\n at.+\b(?i:carp\.t) line \d+\.$/, 'ok 2\n';
+ };
+
+ carp "ok 2\n";
+}
+
+{
+ local $SIG{__WARN__} = sub {
+ like $_[0], qr/(\d+) at.+\b(?i:carp\.t) line \d+\.$/, 'carp 3';
+ };
+
+ carp 3;
+}
+
+sub sub_4 {
+ local $SIG{__WARN__} = sub {
+ like $_[0],
+ qr/^(\d+) at.+\b(?i:carp\.t) line \d+\.\n\tmain::sub_4\(\) called at.+\b(?i:carp\.t) line \d+$/,
+ 'cluck 4';
+ };
+
+ cluck 4;
+}
+
+sub_4;
+
+{
+ local $SIG{__DIE__} = sub {
+ like $_[0],
+ qr/^(\d+) at.+\b(?i:carp\.t) line \d+\.\n\teval \Q{...}\E called at.+\b(?i:carp\.t) line \d+$/,
+ 'croak 5';
+ };
+
+ eval { croak 5 };
+}
+
+sub sub_6 {
+ local $SIG{__DIE__} = sub {
+ like $_[0],
+ qr/^(\d+) at.+\b(?i:carp\.t) line \d+\.\n\teval \Q{...}\E called at.+\b(?i:carp\.t) line \d+\n\tmain::sub_6\(\) called at.+\b(?i:carp\.t) line \d+$/,
+ 'confess 6';
+ };
+
+ eval { confess 6 };
+}
+
+sub_6;
+
+ok(1);
+
+# test for caller_info API
+my $eval = "use Carp; return Carp::caller_info(0);";
+my %info = eval($eval);
+is( $info{sub_name}, "eval '$eval'", 'caller_info API' );
+
+# test for '...::CARP_NOT used only once' warning from Carp
+my $warning;
+eval {
+ BEGIN {
+ local $SIG{__WARN__} = sub {
+ if ( defined $^S ) { warn $_[0] }
+ else { $warning = $_[0] }
+ }
+ }
+
+ package Z;
+
+ BEGIN {
+ eval { Carp::croak() };
+ }
+};
+ok !$warning, q/'...::CARP_NOT used only once' warning from Carp/;
+
+# Test the location of error messages.
+like( A::short(), qr/^Error at C/, "Short messages skip carped package" );
+
+{
+ local @C::ISA = "D";
+ like( A::short(), qr/^Error at B/, "Short messages skip inheritance" );
+}
+
+{
+ local @D::ISA = "C";
+ like( A::short(), qr/^Error at B/, "Short messages skip inheritance" );
+}
+
+{
+ local @D::ISA = "B";
+ local @B::ISA = "C";
+ like( A::short(), qr/^Error at A/, "Inheritance is transitive" );
+}
+
+{
+ local @B::ISA = "D";
+ local @C::ISA = "B";
+ like( A::short(), qr/^Error at A/, "Inheritance is transitive" );
+}
+
+{
+ local @C::CARP_NOT = "D";
+ like( A::short(), qr/^Error at B/, "Short messages see \@CARP_NOT" );
+}
+
+{
+ local @D::CARP_NOT = "C";
+ like( A::short(), qr/^Error at B/, "Short messages see \@CARP_NOT" );
+}
+
+{
+ local @D::CARP_NOT = "B";
+ local @B::CARP_NOT = "C";
+ like( A::short(), qr/^Error at A/, "\@CARP_NOT is transitive" );
+}
+
+{
+ local @B::CARP_NOT = "D";
+ local @C::CARP_NOT = "B";
+ like( A::short(), qr/^Error at A/, "\@CARP_NOT is transitive" );
+}
+
+{
+ local @D::ISA = "C";
+ local @D::CARP_NOT = "B";
+ like( A::short(), qr/^Error at C/, "\@CARP_NOT overrides inheritance" );
+}
+
+{
+ local @D::ISA = "B";
+ local @D::CARP_NOT = "C";
+ like( A::short(), qr/^Error at B/, "\@CARP_NOT overrides inheritance" );
+}
+
+# %Carp::Internal
+{
+ local $Carp::Internal{C} = 1;
+ like( A::short(), qr/^Error at B/, "Short doesn't report Internal" );
+}
+
+{
+ local $Carp::Internal{D} = 1;
+ like( A::long(), qr/^Error at C/, "Long doesn't report Internal" );
+}
+
+# %Carp::CarpInternal
+{
+ local $Carp::CarpInternal{D} = 1;
+ like(
+ A::short(), qr/^Error at B/,
+ "Short doesn't report calls to CarpInternal"
+ );
+}
+
+{
+ local $Carp::CarpInternal{D} = 1;
+ like( A::long(), qr/^Error at C/, "Long doesn't report CarpInternal" );
+}
+
+# tests for global variables
+sub x { carp @_ }
+sub w { cluck @_ }
+
+# $Carp::Verbose;
+{
+ my $aref = [
+ qr/t at \S*(?i:carp.t) line \d+\./,
+ qr/t at \S*(?i:carp.t) line \d+\.\n\s*main::x\('t'\) called at \S*(?i:carp.t) line \d+/
+ ];
+ my $i = 0;
+
+ for my $re (@$aref) {
+ local $Carp::Verbose = $i++;
+ local $SIG{__WARN__} = sub {
+ like $_[0], $re, 'Verbose';
+ };
+
+ package Z;
+ main::x('t');
+ }
+}
+
+# $Carp::MaxEvalLen
+{
+ my $test_num = 1;
+ for ( 0, 4 ) {
+ my $txt = "Carp::cluck($test_num)";
+ local $Carp::MaxEvalLen = $_;
+ local $SIG{__WARN__} = sub {
+ "@_" =~ /'(.+?)(?:\n|')/s;
+ is length($1),
+ length( $_ ? substr( $txt, 0, $_ ) : substr( $txt, 0 ) ),
+ 'MaxEvalLen';
+ };
+ eval "$txt";
+ $test_num++;
+ }
+}
+
+# $Carp::MaxArgLen
+{
+ for ( 0, 4 ) {
+ my $arg = 'testtest';
+ local $Carp::MaxArgLen = $_;
+ local $SIG{__WARN__} = sub {
+ "@_" =~ /'(.+?)'/;
+ is length($1),
+ length( $_ ? substr( $arg, 0, $_ ) : substr( $arg, 0 ) ),
+ 'MaxArgLen';
+ };
+
+ package Z;
+ main::w($arg);
+ }
+}
+
+# $Carp::MaxArgNums
+{
+ my $i = 0;
+ my $aref = [
+ qr/1234 at \S*(?i:carp.t) line \d+\.\n\s*main::w\(1, 2, 3, 4\) called at \S*(?i:carp.t) line \d+/,
+ qr/1234 at \S*(?i:carp.t) line \d+\.\n\s*main::w\(1, 2, \.\.\.\) called at \S*(?i:carp.t) line \d+/,
+ ];
+
+ for (@$aref) {
+ local $Carp::MaxArgNums = $i++;
+ local $SIG{__WARN__} = sub {
+ like "@_", $_, 'MaxArgNums';
+ };
+
+ package Z;
+ main::w( 1 .. 4 );
+ }
+}
+
+# $Carp::CarpLevel
+{
+ my $i = 0;
+ my $aref = [
+ qr/1 at \S*(?i:carp.t) line \d+\.\n\s*main::w\(1\) called at \S*(?i:carp.t) line \d+/,
+ qr/1 at \S*(?i:carp.t) line \d+\.$/,
+ ];
+
+ for (@$aref) {
+ local $Carp::CarpLevel = $i++;
+ local $SIG{__WARN__} = sub {
+ like "@_", $_, 'CarpLevel';
+ };
+
+ package Z;
+ main::w(1);
+ }
+}
+
+SKIP:
+{
+ skip "IPC::Open3::open3 needs porting", 2 if $Is_VMS;
+
+ # Check that croak() and confess() don't clobber $!
+ runperl(
+ prog => 'use Carp; $@=q{Phooey}; $!=42; croak(q{Dead})',
+ stderr => 1
+ );
+
+ is( $? >> 8, 42, 'croak() doesn\'t clobber $!' );
+
+ runperl(
+ prog => 'use Carp; $@=q{Phooey}; $!=42; confess(q{Dead})',
+ stderr => 1
+ );
+
+ is( $? >> 8, 42, 'confess() doesn\'t clobber $!' );
+}
+
+# undef used to be incorrectly reported as the string "undef"
+sub cluck_undef {
+
+ local $SIG{__WARN__} = sub {
+ like $_[0],
+ qr/^Bang! at.+\b(?i:carp\.t) line \d+\.\n\tmain::cluck_undef\(0, 'undef', 2, undef, 4\) called at.+\b(?i:carp\.t) line \d+$/,
+ "cluck doesn't quote undef";
+ };
+
+ cluck "Bang!"
+
+}
+
+cluck_undef( 0, "undef", 2, undef, 4 );
+
+# check that Carp respects CORE::GLOBAL::caller override after Carp
+# has been compiled
+for my $bodge_job ( 2, 1, 0 ) { SKIP: {
+ skip "can't safely detect incomplete caller override on perl $]", 6
+ if $bodge_job && !Carp::CALLER_OVERRIDE_CHECK_OK;
+ print '# ', ( $bodge_job ? 'Not ' : '' ),
+ "setting \@DB::args in caller override\n";
+ if ( $bodge_job == 1 ) {
+ require B;
+ print "# required B\n";
+ }
+ my $accum = '';
+ local *CORE::GLOBAL::caller = sub {
+ local *__ANON__ = "fakecaller";
+ my @c = CORE::caller(@_);
+ $c[0] ||= 'undef';
+ $accum .= "@c[0..3]\n";
+ if ( !$bodge_job && CORE::caller() eq 'DB' ) {
+
+ package DB;
+ return CORE::caller( ( $_[0] || 0 ) + 1 );
+ }
+ else {
+ return CORE::caller( ( $_[0] || 0 ) + 1 );
+ }
+ };
+ eval "scalar caller()";
+ like( $accum, qr/main::fakecaller/,
+ "test CORE::GLOBAL::caller override in eval" );
+ $accum = '';
+ my $got = A::long(42);
+ like( $accum, qr/main::fakecaller/,
+ "test CORE::GLOBAL::caller override in Carp" );
+ my $package = 'A';
+ my $where = $bodge_job == 1 ? ' in &main::__ANON__' : '';
+ my $warning
+ = $bodge_job
+ ? "\Q** Incomplete caller override detected$where; \@DB::args were not set **\E"
+ : '';
+
+ for ( 0 .. 2 ) {
+ my $previous_package = $package;
+ ++$package;
+ like( $got,
+ qr/${package}::long\($warning\) called at $previous_package line \d+/,
+ "Correct arguments for $package" );
+ }
+ my $arg = $bodge_job ? $warning : 42;
+ like(
+ $got, qr!A::long\($arg\) called at.+\b(?i:carp\.t) line \d+!,
+ 'Correct arguments for A'
+ );
+} }
+
+SKIP: {
+ skip "can't safely detect incomplete caller override on perl $]", 1
+ unless Carp::CALLER_OVERRIDE_CHECK_OK;
+ eval q{
+ no warnings 'redefine';
+ sub CORE::GLOBAL::caller {
+ my $height = $_[0];
+ $height++;
+ return CORE::caller($height);
+ }
+ };
+
+ my $got = A::long(42);
+
+ like(
+ $got,
+ qr!A::long\(\Q** Incomplete caller override detected; \E\@DB::args\Q were not set **\E\) called at.+\b(?i:carp\.t) line \d+!,
+ 'Correct arguments for A'
+ );
+}
+
+# UTF8-flagged strings should not cause Carp to try to load modules (even
+# implicitly via utf8_heavy.pl) after a syntax error [perl #82854].
+SKIP:
+{
+ skip "IPC::Open3::open3 needs porting", 1 if $Is_VMS;
+ like(
+ runperl(
+ prog => q<
+ use utf8; use strict; use Carp;
+ BEGIN { $SIG{__DIE__} = sub { Carp::croak qq(aaaaa$_[0]) } }
+ $c
+ >,
+ stderr=>1,
+ ),
+ qr/aaaaa/,
+ 'Carp can handle UTF8-flagged strings after a syntax error',
+ );
+}
+
+SKIP:
+{
+ skip "IPC::Open3::open3 needs porting", 1 if $Is_VMS;
+ skip("B:: always created when static", 1)
+ if $Config{static_ext} =~ /\bB\b/;
+ is(
+ runperl(
+ prog => q<
+ use Carp;
+ $SIG{__WARN__} = sub{};
+ carp (qq(A duck, but which duck?));
+ print q(ok) unless exists $::{q(B::)};
+ >,
+ ),
+ 'ok',
+ 'Carp does not autovivify *B::',
+ );
+}
+
+# [perl #96672]
+<D::DATA> for 1..2;
+eval { croak 'heek' };
+$@ =~ s/\n.*//; # just check first line
+is $@, "heek at ".__FILE__." line ".(__LINE__-2).", <DATA> line 2.\n",
+ 'last handle line num is mentioned';
+
+SKIP:
+{
+ skip "IPC::Open3::open3 needs porting", 1 if $Is_VMS;
+ like(
+ runperl(
+ prog => q<
+ open FH, q-Makefile.PL-;
+ <FH>; # set PL_last_in_gv
+ BEGIN { *CORE::GLOBAL::die = sub { die Carp::longmess(@_) } };
+ use Carp;
+ die fumpts;
+ >,
+ ),
+ qr 'fumpts',
+ 'Carp::longmess works inside CORE::GLOBAL::die',
+ );
+}
+
+# New tests go here
+
+# line 1 "A"
+package A;
+
+sub short {
+ B::short();
+}
+
+sub long {
+ B::long();
+}
+
+# line 1 "B"
+package B;
+
+sub short {
+ C::short();
+}
+
+sub long {
+ C::long();
+}
+
+# line 1 "C"
+package C;
+
+sub short {
+ D::short();
+}
+
+sub long {
+ D::long();
+}
+
+# line 1 "D"
+package D;
+
+sub short {
+ eval { Carp::croak("Error") };
+ return $@;
+}
+
+sub long {
+ eval { Carp::confess("Error") };
+ return $@;
+}
+
+# Put new tests at "new tests go here"
+__DATA__
+1
+2
+3
Added: vendor/perl/dist/dist/Carp/t/heavy.t
===================================================================
--- vendor/perl/dist/dist/Carp/t/heavy.t (rev 0)
+++ vendor/perl/dist/dist/Carp/t/heavy.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,11 @@
+print "1..3\n";
+
+print defined(&Carp::carp) ? "not " : "", "ok 1 # control\n";
+require Carp::Heavy;
+print defined(&Carp::carp) ? "" : "not ", "ok 2 # carp loaded by Carp::Heavy\n";
+eval q{
+ print $Carp::Heavy::VERSION eq $Carp::VERSION ? "" : "not ",
+ "ok 3 # version numbers match\n";
+};
+
+1;
Added: vendor/perl/dist/dist/Carp/t/stash_deletion.t
===================================================================
--- vendor/perl/dist/dist/Carp/t/stash_deletion.t (rev 0)
+++ vendor/perl/dist/dist/Carp/t/stash_deletion.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,111 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 15;
+
+use Carp;
+
+{
+ my $sub = eval <<'EVAL';
+package Die;
+sub {
+#line 1 foo
+ die "blah";
+}
+EVAL
+ ok(!$@);
+ eval { $sub->() };
+ like($@, qr/^blah at foo line 1/);
+ {
+ no strict 'refs';
+ delete ${'::'}{'Die::'};
+ }
+ eval { $sub->() };
+ like($@, qr/^blah at foo line 1/);
+}
+
+{
+ my $sub = eval <<'EVAL';
+package Confess;
+sub {
+#line 1 foo
+ Carp::confess("blah");
+}
+EVAL
+ ok(!$@);
+ eval { $sub->() };
+ like($@, qr/^blah at foo line 1/);
+ {
+ no strict 'refs';
+ delete ${'::'}{'Confess::'};
+ }
+ eval { $sub->() };
+ like($@, qr/^blah at foo line 1/);
+}
+
+{
+ my $sub = eval <<'EVAL';
+package CroakHelper;
+sub x {
+ Carp::croak("blah");
+}
+package Croak;
+sub {
+#line 1 foo
+ CroakHelper::x();
+}
+EVAL
+ ok(!$@);
+ eval { $sub->() };
+ like($@, qr/^blah at foo line 1/);
+ {
+ no strict 'refs';
+ delete ${'::'}{'Croak::'};
+ }
+ eval { $sub->() };
+ like($@, qr/^blah at foo line 1/);
+ {
+ no strict 'refs';
+ delete ${'::'}{'CroakHelper::'};
+ }
+ eval { $sub->() };
+ like($@, qr/^blah at foo line 1/);
+}
+
+{
+ # the amount of information available and how it is displayed varies quite
+ # a bit depending on the version of perl (specifically, what caller returns
+ # in that version), so there is a bit of fiddling around required to handle
+ # that
+ my $unknown_pat = qr/__ANON__::/;
+ $unknown_pat = qr/$unknown_pat|\(unknown\)/
+ if $] < 5.014;
+
+ my $sub = eval <<'EVAL';
+package SubHelper;
+sub x {
+ Carp::confess("blah");
+}
+package Sub;
+sub {
+#line 1 foo
+ SubHelper::x();
+}
+EVAL
+ ok(!$@);
+ eval { $sub->() };
+ unlike($@, qr/$unknown_pat/);
+ {
+ no strict 'refs';
+ delete ${'::'}{'Sub::'};
+ }
+ eval { $sub->() };
+ like($@, qr/$unknown_pat|Sub::/);
+ unlike($@, qr/$unknown_pat.*$unknown_pat/s);
+ {
+ no strict 'refs';
+ delete ${'::'}{'SubHelper::'};
+ }
+ eval { $sub->() };
+ like($@, qr/(?:$unknown_pat|SubHelper::).*(?:$unknown_pat|Sub::)/s);
+}
Added: vendor/perl/dist/dist/Carp/t/swash.t
===================================================================
--- vendor/perl/dist/dist/Carp/t/swash.t (rev 0)
+++ vendor/perl/dist/dist/Carp/t/swash.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,5 @@
+BEGIN { print "1..1\n"; }
+use Carp;
+my $x = "foo\x{666}"; $x =~ /foo\p{Alnum}/;
+print "ok 1\n";
+1;
Added: vendor/perl/dist/dist/Carp/t/vivify_gv.t
===================================================================
--- vendor/perl/dist/dist/Carp/t/vivify_gv.t (rev 0)
+++ vendor/perl/dist/dist/Carp/t/vivify_gv.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,11 @@
+BEGIN { print "1..2\n"; }
+
+our $has_is_utf8; BEGIN { $has_is_utf8 = exists($utf8::{"is_utf8"}); }
+our $has_dgrade; BEGIN { $has_dgrade = exists($utf8::{"downgrade"}); }
+
+use Carp;
+
+print !(exists($utf8::{"is_utf8"}) xor $has_is_utf8) ? "" : "not ", "ok 1\n";
+print !(exists($utf8::{"downgrade"}) xor $has_dgrade) ? "" : "not ", "ok 2\n";
+
+1;
Added: vendor/perl/dist/dist/Carp/t/vivify_stash.t
===================================================================
--- vendor/perl/dist/dist/Carp/t/vivify_stash.t (rev 0)
+++ vendor/perl/dist/dist/Carp/t/vivify_stash.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
+BEGIN { print "1..1\n"; }
+
+our $has_utf8; BEGIN { $has_utf8 = exists($::{"utf8::"}); }
+
+use Carp;
+
+print !(exists($::{"utf8::"}) xor $has_utf8) ? "" : "not ", "ok 1\n";
+
+1;
Added: vendor/perl/dist/dist/Carp/t/with_warnings.t
===================================================================
--- vendor/perl/dist/dist/Carp/t/with_warnings.t (rev 0)
+++ vendor/perl/dist/dist/Carp/t/with_warnings.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
+BEGIN { print "1..1\n"; }
+
+use Carp ();
+use warnings ();
+$SIG{__WARN__} = sub {};
+eval { warnings::warn("syntax", "foo") };
+print $@ eq "" ? "" : "not ", "ok 1\n";
+
+1;
Added: vendor/perl/dist/dist/Cwd/t/Spec-taint.t
===================================================================
--- vendor/perl/dist/dist/Cwd/t/Spec-taint.t (rev 0)
+++ vendor/perl/dist/dist/Cwd/t/Spec-taint.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,17 @@
+#!./perl -Tw
+# Testing File::Spec under taint mode.
+
+use strict;
+
+chdir 't' unless $ENV{PERL_CORE};
+
+use File::Spec;
+use lib File::Spec->catdir('t', 'lib');
+use Test::More tests => 2;
+
+use Scalar::Util qw/tainted/;
+
+my $ret;
+eval { $ret = File::Spec->tmpdir };
+is( $@, '', "tmpdir should not explode under taint mode" );
+ok( !tainted($ret), "its return value should not be tainted" );
Added: vendor/perl/dist/dist/Data-Dumper/t/bless_var_method.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/bless_var_method.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/bless_var_method.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,86 @@
+#!./perl -w
+# t/bless.t - Test Bless()
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 8;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+my %d = (
+ delta => 'd',
+ beta => 'b',
+ gamma => 'c',
+ alpha => 'a',
+);
+
+run_tests_for_bless_var_method();
+SKIP: {
+ skip "XS version was unavailable, so we already ran with pure Perl", 4
+ if $Data::Dumper::Useperl;
+ local $Data::Dumper::Useperl = 1;
+ run_tests_for_bless_var_method();
+}
+
+sub run_tests_for_bless_var_method {
+ my ($obj, %dumps, $bless, $starting);
+
+ note("\$Data::Dumper::Bless and Bless() set to true value");
+
+ $starting = $Data::Dumper::Bless;
+ $bless = 1;
+ local $Data::Dumper::Bless = $bless;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddblessone'} = _dumptostr($obj);
+ local $Data::Dumper::Bless = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Bless($bless);
+ $dumps{'objblessone'} = _dumptostr($obj);
+
+ is($dumps{'ddblessone'}, $dumps{'objblessone'},
+ "\$Data::Dumper::Bless = 1 and Bless(1) are equivalent");
+ %dumps = ();
+
+ $bless = 0;
+ local $Data::Dumper::Bless = $bless;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddblesszero'} = _dumptostr($obj);
+ local $Data::Dumper::Bless = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Bless($bless);
+ $dumps{'objblesszero'} = _dumptostr($obj);
+
+ is($dumps{'ddblesszero'}, $dumps{'objblesszero'},
+ "\$Data::Dumper::Bless = 0 and Bless(0) are equivalent");
+
+ $bless = undef;
+ local $Data::Dumper::Bless = $bless;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddblessundef'} = _dumptostr($obj);
+ local $Data::Dumper::Bless = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Bless($bless);
+ $dumps{'objblessundef'} = _dumptostr($obj);
+
+ is($dumps{'ddblessundef'}, $dumps{'objblessundef'},
+ "\$Data::Dumper::Bless = undef and Bless(undef) are equivalent");
+ is($dumps{'ddblesszero'}, $dumps{'objblessundef'},
+ "\$Data::Dumper::Bless = undef and = 0 are equivalent");
+ %dumps = ();
+}
+
Added: vendor/perl/dist/dist/Data-Dumper/t/deparse.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/deparse.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/deparse.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,80 @@
+#!./perl -w
+# t/deparse.t - Test Deparse()
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 8;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+# Thanks to Arthur Axel "fREW" Schmidt:
+# http://search.cpan.org/~frew/Data-Dumper-Concise-2.020/lib/Data/Dumper/Concise.pm
+
+note("\$Data::Dumper::Deparse and Deparse()");
+
+{
+ my ($obj, %dumps, $deparse, $starting);
+ use strict;
+ my $struct = { foo => "bar\nbaz", quux => sub { "fleem" } };
+ $obj = Data::Dumper->new( [ $struct ] );
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $starting = $Data::Dumper::Deparse;
+ local $Data::Dumper::Deparse = 0;
+ $obj = Data::Dumper->new( [ $struct ] );
+ $dumps{'dddzero'} = _dumptostr($obj);
+ local $Data::Dumper::Deparse = $starting;
+
+ $obj = Data::Dumper->new( [ $struct ] );
+ $obj->Deparse();
+ $dumps{'objempty'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new( [ $struct ] );
+ $obj->Deparse(0);
+ $dumps{'objzero'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'dddzero'},
+ "No previous setting and \$Data::Dumper::Deparse = 0 are equivalent");
+ is($dumps{'noprev'}, $dumps{'objempty'},
+ "No previous setting and Deparse() are equivalent");
+ is($dumps{'noprev'}, $dumps{'objzero'},
+ "No previous setting and Deparse(0) are equivalent");
+
+ local $Data::Dumper::Deparse = 1;
+ $obj = Data::Dumper->new( [ $struct ] );
+ $dumps{'dddtrue'} = _dumptostr($obj);
+ local $Data::Dumper::Deparse = $starting;
+
+ $obj = Data::Dumper->new( [ $struct ] );
+ $obj->Deparse(1);
+ $dumps{'objone'} = _dumptostr($obj);
+
+ is($dumps{'dddtrue'}, $dumps{'objone'},
+ "\$Data::Dumper::Deparse = 1 and Deparse(1) are equivalent");
+
+ isnt($dumps{'dddzero'}, $dumps{'dddtrue'},
+ "\$Data::Dumper::Deparse = 0 differs from \$Data::Dumper::Deparse = 1");
+
+ like($dumps{'dddzero'},
+ qr/quux.*?sub.*?DUMMY/s,
+ "\$Data::Dumper::Deparse = 0 reports DUMMY instead of deparsing coderef");
+ unlike($dumps{'dddtrue'},
+ qr/quux.*?sub.*?DUMMY/s,
+ "\$Data::Dumper::Deparse = 1 does not report DUMMY");
+ like($dumps{'dddtrue'},
+ qr/quux.*?sub.*?use\sstrict.*?fleem/s,
+ "\$Data::Dumper::Deparse = 1 deparses coderef");
+}
+
Added: vendor/perl/dist/dist/Data-Dumper/t/dumpperl.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/dumpperl.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/dumpperl.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,144 @@
+#!./perl -w
+# t/dumpperl.t - test all branches of, and modes of triggering, Dumpperl()
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+use Carp;
+use Data::Dumper;
+use Test::More tests => 31;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+$Data::Dumper::Indent=1;
+
+{
+ local $Data::Dumper::Useperl=1;
+ local $Data::Dumper::Useqq=0;
+ local $Data::Dumper::Deparse=0;
+ note('$Data::Dumper::Useperl => 1');
+ run_tests_for_pure_perl_implementations();
+}
+
+{
+ local $Data::Dumper::Useperl=0;
+ local $Data::Dumper::Useqq=1;
+ local $Data::Dumper::Deparse=0;
+ note('$Data::Dumper::Useqq => 1');
+ run_tests_for_pure_perl_implementations();
+}
+
+{
+ local $Data::Dumper::Useperl=0;
+ local $Data::Dumper::Useqq=0;
+ local $Data::Dumper::Deparse=1;
+ note('$Data::Dumper::Deparse => 1');
+ run_tests_for_pure_perl_implementations();
+}
+
+
+
+sub run_tests_for_pure_perl_implementations {
+
+ my ($a, $b, $obj);
+ my (@names);
+ my (@newnames, $objagain, %newnames);
+ my $dumpstr;
+ $a = 'alpha';
+ $b = 'beta';
+ my @c = ( qw| eta theta | );
+ my %d = ( iota => 'kappa' );
+
+ note('names not provided');
+ $obj = Data::Dumper->new([$a, $b]);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$VAR1.+alpha.+\$VAR2.+beta/s,
+ "Dump: two strings"
+ );
+
+ $obj = Data::Dumper->new([$a, \@c]);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$VAR1.+alpha.+\$VAR2.+\[.+eta.+theta.+\]/s,
+ "Dump: one string, one array ref"
+ );
+
+ $obj = Data::Dumper->new([$a, \%d]);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$VAR1.+alpha.+\$VAR2.+\{.+iota.+kappa.+\}/s,
+ "Dump: one string, one hash ref"
+ );
+
+ $obj = Data::Dumper->new([$a, undef]);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$VAR1.+alpha.+\$VAR2.+undef/s,
+ "Dump: one string, one undef"
+ );
+
+ note('names provided');
+
+ $obj = Data::Dumper->new([$a, $b], [ qw( a b ) ]);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$a.+alpha.+\$b.+beta/s,
+ "Dump: names: two strings"
+ );
+
+ $obj = Data::Dumper->new([$a, \@c], [ qw( a *c ) ]);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$a.+alpha.+\@c.+eta.+theta/s,
+ "Dump: names: one string, one array ref"
+ );
+
+ $obj = Data::Dumper->new([$a, \%d], [ qw( a *d ) ]);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$a.+alpha.+\%d.+iota.+kappa/s,
+ "Dump: names: one string, one hash ref"
+ );
+
+ $obj = Data::Dumper->new([$a,undef], [qw(a *c)]);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$a.+alpha.+\$c.+undef/s,
+ "Dump: names: one string, one undef"
+ );
+
+ $obj = Data::Dumper->new([$a, $b], [ 'a', '']);
+ $dumpstr = _dumptostr($obj);
+ like($dumpstr,
+ qr/\$a.+alpha.+\$.+beta/s,
+ "Dump: names: two strings: one name empty"
+ );
+
+ $obj = Data::Dumper->new([$a, $b], [ 'a', '$foo']);
+ $dumpstr = _dumptostr($obj);
+ no warnings 'uninitialized';
+ like($dumpstr,
+ qr/\$a.+alpha.+\$foo.+beta/s,
+ "Dump: names: two strings: one name start with '\$'"
+ );
+ use warnings;
+}
+
+{
+ my ($obj, $dumpstr, $realtype);
+ $obj = Data::Dumper->new([ {IO => *{$::{STDERR}}{IO}} ]);
+ $obj->Useperl(1);
+ eval { $dumpstr = _dumptostr($obj); };
+ $realtype = 'IO';
+ like($@, qr/Can't handle '$realtype' type/,
+ "Got expected error: pure-perl: Data-Dumper does not handle $realtype");
+}
Added: vendor/perl/dist/dist/Data-Dumper/t/freezer_useperl.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/freezer_useperl.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/freezer_useperl.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,106 @@
+#!./perl -w
+#
+# test a few problems with the Freezer option, not a complete Freezer
+# test suite yet
+
+BEGIN {
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+}
+
+use strict;
+use Test::More tests => 7;
+use Data::Dumper;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+local $Data::Dumper::Useperl = 1;
+
+{
+ local $Data::Dumper::Freezer = 'freeze';
+
+ # test for seg-fault bug when freeze() returns a non-ref
+ {
+ my $foo = Test1->new("foo");
+ my $dumped_foo = Dumper($foo);
+ ok($dumped_foo,
+ "Use of freezer sub which returns non-ref worked.");
+ like($dumped_foo, qr/frozed/,
+ "Dumped string has the key added by Freezer with useperl.");
+ like(join(" ", Dumper($foo)), qr/\A\$VAR1 = /,
+ "Dumped list doesn't begin with Freezer's return value with useperl");
+ }
+
+ # test for warning when an object does not have a freeze()
+ {
+ my $warned = 0;
+ local $SIG{__WARN__} = sub { $warned++ };
+ my $bar = Test2->new("bar");
+ my $dumped_bar = Dumper($bar);
+ is($warned, 0, "A missing freeze() shouldn't warn.");
+ }
+
+ # a freeze() which die()s should still trigger the warning
+ {
+ my $warned = 0;
+ local $SIG{__WARN__} = sub { $warned++; };
+ my $bar = Test3->new("bar");
+ my $dumped_bar = Dumper($bar);
+ is($warned, 1, "A freeze() which die()s should warn.");
+ }
+
+}
+
+{
+ my ($obj, %dumps);
+ my $foo = Test1->new("foo");
+
+ local $Data::Dumper::Freezer = '';
+ $obj = Data::Dumper->new( [ $foo ] );
+ $dumps{'ddfemptystr'} = _dumptostr($obj);
+
+ local $Data::Dumper::Freezer = undef;
+ $obj = Data::Dumper->new( [ $foo ] );
+ $dumps{'ddfundef'} = _dumptostr($obj);
+
+ is($dumps{'ddfundef'}, $dumps{'ddfemptystr'},
+ "\$Data::Dumper::Freezer same with empty string or undef");
+}
+
+{
+ my ($obj, %dumps);
+ my $foo = Test1->new("foo");
+
+ $obj = Data::Dumper->new( [ $foo ] );
+ $obj->Freezer('');
+ $dumps{'objemptystr'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new( [ $foo ] );
+ $obj->Freezer(undef);
+ $dumps{'objundef'} = _dumptostr($obj);
+
+ is($dumps{'objundef'}, $dumps{'objemptystr'},
+ "Freezer() same with empty string or undef");
+}
+
+
+# a package with a freeze() which returns a non-ref
+package Test1;
+sub new { bless({name => $_[1]}, $_[0]) }
+sub freeze {
+ my $self = shift;
+ $self->{frozed} = 1;
+}
+
+# a package without a freeze()
+package Test2;
+sub new { bless({name => $_[1]}, $_[0]) }
+
+# a package with a freeze() which dies
+package Test3;
+sub new { bless({name => $_[1]}, $_[0]) }
+sub freeze { die "freeze() is broken" }
Added: vendor/perl/dist/dist/Data-Dumper/t/indent.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/indent.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/indent.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,110 @@
+#!./perl -w
+# t/indent.t - Test Indent()
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 10;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+
+my $hash = { foo => 42 };
+
+my (%dumpstr);
+my $dumper;
+
+$dumper = Data::Dumper->new([$hash]);
+$dumpstr{noindent} = _dumptostr($dumper);
+# $VAR1 = {
+# 'foo' => 42
+# };
+
+$dumper = Data::Dumper->new([$hash]);
+$dumper->Indent();
+$dumpstr{indent_no_arg} = _dumptostr($dumper);
+
+$dumper = Data::Dumper->new([$hash]);
+$dumper->Indent(undef);
+$dumpstr{indent_undef} = _dumptostr($dumper);
+
+$dumper = Data::Dumper->new([$hash]);
+$dumper->Indent(0);
+$dumpstr{indent_0} = _dumptostr($dumper);
+# $VAR1 = {'foo' => 42}; # no newline
+
+$dumper = Data::Dumper->new([$hash]);
+$dumper->Indent(1);
+$dumpstr{indent_1} = _dumptostr($dumper);
+# $VAR1 = {
+# 'foo' => 42
+# };
+
+$dumper = Data::Dumper->new([$hash]);
+$dumper->Indent(2);
+$dumpstr{indent_2} = _dumptostr($dumper);
+# $VAR1 = {
+# 'foo' => 42
+# };
+
+is($dumpstr{noindent}, $dumpstr{indent_no_arg},
+ "absence of Indent is same as Indent()");
+is($dumpstr{noindent}, $dumpstr{indent_undef},
+ "absence of Indent is same as Indent(undef)");
+isnt($dumpstr{noindent}, $dumpstr{indent_0},
+ "absence of Indent is different from Indent(0)");
+isnt($dumpstr{indent_0}, $dumpstr{indent_1},
+ "Indent(0) is different from Indent(1)");
+cmp_ok(length($dumpstr{indent_0}), '<=', length($dumpstr{indent_1}),
+ "Indent(0) is more compact than Indent(1)");
+is($dumpstr{noindent}, $dumpstr{indent_2},
+ "absence of Indent is same as Indent(2), i.e., 2 is default");
+cmp_ok(length($dumpstr{indent_1}), '<=', length($dumpstr{indent_2}),
+ "Indent(1) is more compact than Indent(2)");
+
+my $array = [ qw| foo 42 | ];
+$dumper = Data::Dumper->new([$array]);
+$dumper->Indent(2);
+$dumpstr{ar_indent_2} = _dumptostr($dumper);
+# $VAR1 = [
+# 'foo',
+# '42'
+# ];
+
+$dumper = Data::Dumper->new([$array]);
+$dumper->Indent(3);
+$dumpstr{ar_indent_3} = _dumptostr($dumper);
+# $VAR1 = [
+# #0
+# 'foo',
+# #1
+# '42'
+# ];
+
+isnt($dumpstr{ar_indent_2}, $dumpstr{ar_indent_3},
+ "On arrays, Indent(2) is different from Indent(3)");
+like($dumpstr{ar_indent_3},
+ qr/\#0.+'foo'.+\#1.+42/s,
+ "Indent(3) annotates array elements with their indices"
+);
+is(scalar(split("\n" => $dumpstr{ar_indent_2})) + 2,
+ scalar(split("\n" => $dumpstr{ar_indent_3})),
+ "Indent(3) runs 2 lines longer than Indent(2)");
+
+__END__
+is($dumpstr{noindent}, $dumpstr{indent_0},
+ "absence of Indent is same as Indent(0)");
+isnt($dumpstr{noindent}, $dumpstr{indent_1},
+ "absence of Indent is different from Indent(1)");
+print STDERR $dumpstr{indent_0};
+print STDERR $dumpstr{ar_indent_3};
Added: vendor/perl/dist/dist/Data-Dumper/t/lib/Testing.pm
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/lib/Testing.pm (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/lib/Testing.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+package Testing;
+use 5.006_001;
+use strict;
+use warnings;
+require Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT_OK = qw(_dumptostr);
+use Carp;
+
+sub _dumptostr {
+ my ($obj) = @_;
+ return join '', $obj->Dump;
+}
+
+1;
Added: vendor/perl/dist/dist/Data-Dumper/t/misc.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/misc.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/misc.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,209 @@
+#!./perl -w
+# t/misc.t - Test various functionality
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 20;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+my ($a, $b, @c, %d);
+$a = 'alpha';
+$b = 'beta';
+ at c = ( qw| gamma delta epsilon | );
+%d = ( zeta => 'eta', theta => 'iota' );
+
+note("Argument validation for new()");
+{
+ local $@ = '';
+ eval { my $obj = Data::Dumper->new(undef); };
+ like($@,
+ qr/^Usage:\s+PACKAGE->new\(ARRAYREF,\s*\[ARRAYREF\]\)/,
+ "Got error message: new() needs defined argument"
+ );
+}
+
+{
+ local $@ = '';
+ eval { my $obj = Data::Dumper->new( { $a => $b } ); };
+ like($@,
+ qr/^Usage:\s+PACKAGE->new\(ARRAYREF,\s*\[ARRAYREF\]\)/,
+ "Got error message: new() needs array reference"
+ );
+}
+
+{
+ note("\$Data::Dumper::Useperl, Useqq, Deparse");
+ my ($obj, %dumpstr);
+
+ local $Data::Dumper::Useperl = 1;
+ $obj = Data::Dumper->new( [ \@c, \%d ] );
+ $dumpstr{useperl} = [ $obj->Values ];
+ local $Data::Dumper::Useperl = 0;
+
+ local $Data::Dumper::Useqq = 1;
+ $obj = Data::Dumper->new( [ \@c, \%d ] );
+ $dumpstr{useqq} = [ $obj->Values ];
+ local $Data::Dumper::Useqq = 0;
+
+ is_deeply($dumpstr{useperl}, $dumpstr{useqq},
+ "Useperl and Useqq return same");
+
+ local $Data::Dumper::Deparse = 1;
+ $obj = Data::Dumper->new( [ \@c, \%d ] );
+ $dumpstr{deparse} = [ $obj->Values ];
+ local $Data::Dumper::Deparse = 0;
+
+ is_deeply($dumpstr{useperl}, $dumpstr{deparse},
+ "Useperl and Deparse return same");
+}
+
+{
+ note("\$Data::Dumper::Pad and \$obj->Pad");
+ my ($obj, %dumps, $pad);
+ $obj = Data::Dumper->new([$a,$b]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Pad(undef);
+ $dumps{'undef'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Pad('');
+ $dumps{'emptystring'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'undef'},
+ "No setting for \$Data::Dumper::Pad and Pad(undef) give same result");
+
+ is($dumps{'noprev'}, $dumps{'emptystring'},
+ "No setting for \$Data::Dumper::Pad and Pad('') give same result");
+
+ $pad = 'XXX: ';
+ local $Data::Dumper::Pad = $pad;
+ $obj = Data::Dumper->new([$a,$b]);
+ $dumps{'ddp'} = _dumptostr($obj);
+ local $Data::Dumper::Pad = '';
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Pad($pad);
+ $dumps{'obj'} = _dumptostr($obj);
+
+ is($dumps{'ddp'}, $dumps{'obj'},
+ "\$Data::Dumper::Pad and \$obj->Pad() give same result");
+
+ is( (grep {! /^$pad/} (split(/\n/, $dumps{'ddp'}))), 0,
+ "Each line of dumped output padded as expected");
+}
+
+{
+ note("\$Data::Dumper::Varname and \$obj->Varname");
+ my ($obj, %dumps, $varname);
+ $obj = Data::Dumper->new([$a,$b]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Varname(undef);
+ $dumps{'undef'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Varname('');
+ $dumps{'emptystring'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'undef'},
+ "No setting for \$Data::Dumper::Varname and Varname(undef) give same result");
+
+ # Because Varname defaults to '$VAR', providing an empty argument to
+ # Varname produces a non-default result.
+ isnt($dumps{'noprev'}, $dumps{'emptystring'},
+ "No setting for \$Data::Dumper::Varname and Varname('') give different results");
+
+ $varname = 'MIMI';
+ local $Data::Dumper::Varname = $varname;
+ $obj = Data::Dumper->new([$a,$b]);
+ $dumps{'ddv'} = _dumptostr($obj);
+ local $Data::Dumper::Varname = undef;
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Varname($varname);
+ $dumps{'varname'} = _dumptostr($obj);
+
+ is($dumps{'ddv'}, $dumps{'varname'},
+ "Setting for \$Data::Dumper::Varname and Varname() give same result");
+
+ is( (grep { /^\$$varname/ } (split(/\n/, $dumps{'ddv'}))), 2,
+ "All lines of dumped output use provided varname");
+
+ is( (grep { /^\$VAR/ } (split(/\n/, $dumps{'ddv'}))), 0,
+ "No lines of dumped output use default \$VAR");
+}
+
+{
+ note("\$Data::Dumper::Useqq and \$obj->Useqq");
+ my ($obj, %dumps, $useqq);
+ $obj = Data::Dumper->new([$a,$b]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Useqq(undef);
+ $dumps{'undef'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Useqq('');
+ $dumps{'emptystring'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Useqq(0);
+ $dumps{'zero'} = _dumptostr($obj);
+
+ my $current = $Data::Dumper::Useqq;
+ local $Data::Dumper::Useqq = 0;
+ $obj = Data::Dumper->new([$a,$b]);
+ $dumps{'dduzero'} = _dumptostr($obj);
+ local $Data::Dumper::Useqq = $current;
+
+ is($dumps{'noprev'}, $dumps{'undef'},
+ "No setting for \$Data::Dumper::Useqq and Useqq(undef) give same result");
+
+ is($dumps{'noprev'}, $dumps{'zero'},
+ "No setting for \$Data::Dumper::Useqq and Useqq(0) give same result");
+
+ is($dumps{'noprev'}, $dumps{'emptystring'},
+ "No setting for \$Data::Dumper::Useqq and Useqq('') give same result");
+
+ is($dumps{'noprev'}, $dumps{'dduzero'},
+ "No setting for \$Data::Dumper::Useqq and Useqq(undef) give same result");
+
+ local $Data::Dumper::Useqq = 1;
+ $obj = Data::Dumper->new([$a,$b]);
+ $dumps{'ddu'} = _dumptostr($obj);
+ local $Data::Dumper::Useqq = $current;
+
+ $obj = Data::Dumper->new([$a,$b]);
+ $obj->Useqq(1);
+ $dumps{'obj'} = _dumptostr($obj);
+
+ is($dumps{'ddu'}, $dumps{'obj'},
+ "\$Data::Dumper::Useqq=1 and Useqq(1) give same result");
+
+ like($dumps{'ddu'},
+ qr/"$a".+?"$b"/s,
+ "Double-quotes used around values"
+ );
+
+ unlike($dumps{'ddu'},
+ qr/'$a'.+?'$b'/s,
+ "Single-quotes not used around values"
+ );
+}
Added: vendor/perl/dist/dist/Data-Dumper/t/names.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/names.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/names.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,66 @@
+#!./perl -w
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+use Carp;
+use Data::Dumper;
+use Test::More tests => 15;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+my ($a, $b, $obj);
+my (@names);
+my (@newnames, $objagain, %newnames);
+my $dumpstr;
+$a = 'alpha';
+$b = 'beta';
+
+$obj = Data::Dumper->new([$a,$b], [qw(a b)]);
+ at names = $obj->Names;
+is_deeply(\@names, [qw(a b)], "Names() returned expected list");
+
+ at newnames = ( qw| gamma delta | );
+$objagain = $obj->Names(\@newnames);
+is($objagain, $obj, "Names returned same object");
+is_deeply($objagain->{names}, \@newnames,
+ "Able to use Names() to set names to be dumped");
+
+$obj = Data::Dumper->new([$a,$b], [qw(a b)]);
+%newnames = ( gamma => 'delta', epsilon => 'zeta' );
+eval { @names = $obj->Names(\%newnames); };
+like($@, qr/Argument to Names, if provided, must be array ref/,
+ "Got expected error message: bad argument to Names()");
+
+$obj = Data::Dumper->new([$a,$b], [qw(a b)]);
+ at newnames = ( qw| gamma delta epsilon | );
+$objagain = $obj->Names(\@newnames);
+is($objagain, $obj, "Names returned same object");
+is_deeply($objagain->{names}, \@newnames,
+ "Able to use Names() to set names to be dumped");
+$dumpstr = _dumptostr($obj);
+like($dumpstr, qr/gamma/s, "Got first name expected");
+like($dumpstr, qr/delta/s, "Got first name expected");
+unlike($dumpstr, qr/epsilon/s, "Did not get name which was not expected");
+
+$obj = Data::Dumper->new([$a,$b], [qw(a b)]);
+ at newnames = ( qw| gamma | );
+$objagain = $obj->Names(\@newnames);
+is($objagain, $obj, "Names returned same object");
+is_deeply($objagain->{names}, \@newnames,
+ "Able to use Names() to set names to be dumped");
+$dumpstr = _dumptostr($obj);
+like($dumpstr, qr/gamma/s, "Got name expected");
+unlike($dumpstr, qr/delta/s, "Did not get name which was not expected");
+unlike($dumpstr, qr/epsilon/s, "Did not get name which was not expected");
+like($dumpstr, qr/\$VAR2/s, "Got default name");
+
Added: vendor/perl/dist/dist/Data-Dumper/t/purity_deepcopy_maxdepth.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/purity_deepcopy_maxdepth.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/purity_deepcopy_maxdepth.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,418 @@
+#!./perl -w
+# t/purity_deepcopy_maxdepth.t - Test Purity(), Deepcopy(),
+# Maxdepth() and recursive structures
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 24;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+my ($a, $b, $c, @d);
+my ($d, $e, $f);
+
+note("\$Data::Dumper::Purity and Purity()");
+
+{
+ my ($obj, %dumps, $purity);
+
+ # Adapted from example in Dumper.pm POD:
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ note("Discrepancy between Dumpxs() and Dumpperl() behavior with respect to \$Data::Dumper::Purity = undef");
+ local $Data::Dumper::Useperl = 1;
+ $purity = undef;
+ local $Data::Dumper::Purity = $purity;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'ddpundef'} = _dumptostr($obj);
+
+ $purity = 0;
+ local $Data::Dumper::Purity = $purity;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'ddpzero'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'ddpundef'},
+ "No previous Purity setting equivalent to \$Data::Dumper::Purity = undef");
+
+ is($dumps{'noprev'}, $dumps{'ddpzero'},
+ "No previous Purity setting equivalent to \$Data::Dumper::Purity = 0");
+}
+
+{
+ my ($obj, %dumps, $purity);
+
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $purity = 0;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $obj->Purity($purity);
+ $dumps{'objzero'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'objzero'},
+ "No previous Purity setting equivalent to Purity(0)");
+
+ $purity = undef;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $obj->Purity($purity);
+ $dumps{'objundef'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'objundef'},
+ "No previous Purity setting equivalent to Purity(undef)");
+}
+
+{
+ my ($obj, %dumps, $purity);
+
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $purity = 1;
+ local $Data::Dumper::Purity = $purity;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'ddpone'} = _dumptostr($obj);
+
+ isnt($dumps{'noprev'}, $dumps{'ddpone'},
+ "No previous Purity setting different from \$Data::Dumper::Purity = 1");
+}
+
+{
+ my ($obj, %dumps, $purity);
+
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $purity = 1;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $obj->Purity(1);
+ $dumps{'objone'} = _dumptostr($obj);
+
+ isnt($dumps{'noprev'}, $dumps{'objone'},
+ "No previous Purity setting different from Purity(0)");
+}
+
+{
+ my ($obj, %dumps, $purity);
+
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $purity = 1;
+ local $Data::Dumper::Purity = $purity;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'ddpone'} = _dumptostr($obj);
+ local $Data::Dumper::Purity = undef;
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $obj->Purity(1);
+ $dumps{'objone'} = _dumptostr($obj);
+
+ is($dumps{'ddpone'}, $dumps{'objone'},
+ "\$Data::Dumper::Purity = 1 and Purity(1) are equivalent");
+}
+
+note("\$Data::Dumper::Deepcopy and Deepcopy()");
+
+{
+ my ($obj, %dumps, $deepcopy);
+
+ # Adapted from example in Dumper.pm POD:
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $deepcopy = undef;
+ local $Data::Dumper::Deepcopy = $deepcopy;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'dddundef'} = _dumptostr($obj);
+
+ $deepcopy = 0;
+ local $Data::Dumper::Deepcopy = $deepcopy;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'dddzero'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'dddundef'},
+ "No previous Deepcopy setting equivalent to \$Data::Dumper::Deepcopy = undef");
+
+ is($dumps{'noprev'}, $dumps{'dddzero'},
+ "No previous Deepcopy setting equivalent to \$Data::Dumper::Deepcopy = 0");
+}
+
+{
+ my ($obj, %dumps, $deepcopy);
+
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $deepcopy = 0;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $obj->Deepcopy($deepcopy);
+ $dumps{'objzero'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'objzero'},
+ "No previous Deepcopy setting equivalent to Deepcopy(0)");
+
+ $deepcopy = undef;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $obj->Deepcopy($deepcopy);
+ $dumps{'objundef'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'objundef'},
+ "No previous Deepcopy setting equivalent to Deepcopy(undef)");
+}
+
+{
+ my ($obj, %dumps, $deepcopy);
+
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $deepcopy = 1;
+ local $Data::Dumper::Deepcopy = $deepcopy;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'dddone'} = _dumptostr($obj);
+
+ isnt($dumps{'noprev'}, $dumps{'dddone'},
+ "No previous Deepcopy setting different from \$Data::Dumper::Deepcopy = 1");
+}
+
+{
+ my ($obj, %dumps, $deepcopy);
+
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $deepcopy = 1;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $obj->Deepcopy(1);
+ $dumps{'objone'} = _dumptostr($obj);
+
+ isnt($dumps{'noprev'}, $dumps{'objone'},
+ "No previous Deepcopy setting different from Deepcopy(0)");
+}
+
+{
+ my ($obj, %dumps, $deepcopy);
+
+ @d = ('c');
+ $c = \@d;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+
+ $deepcopy = 1;
+ local $Data::Dumper::Deepcopy = $deepcopy;
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $dumps{'dddone'} = _dumptostr($obj);
+ local $Data::Dumper::Deepcopy = undef;
+
+ $obj = Data::Dumper->new([$a,$b,$c], [qw(a b c)]);
+ $obj->Deepcopy(1);
+ $dumps{'objone'} = _dumptostr($obj);
+
+ is($dumps{'dddone'}, $dumps{'objone'},
+ "\$Data::Dumper::Deepcopy = 1 and Deepcopy(1) are equivalent");
+}
+
+note("\$Data::Dumper::Maxdepth and Maxdepth()");
+
+{
+ # Adapted from Dumper.pm POD
+
+ my ($obj, %dumps, $maxdepth);
+
+ $a = "pearl";
+ $b = [ $a ];
+ $c = { 'b' => $b };
+ $d = [ $c ];
+ $e = { 'd' => $d };
+ $f = { 'e' => $e };
+
+ note("Discrepancy between Dumpxs() and Dumpperl() behavior with respect to \$Data::Dumper::Maxdepth = undef");
+ local $Data::Dumper::Useperl = 1;
+
+ $obj = Data::Dumper->new([$f], [qw(f)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $Data::Dumper::Maxdepth = undef;
+ $obj = Data::Dumper->new([$f], [qw(f)]);
+ $dumps{'ddmundef'} = _dumptostr($obj);
+
+ $maxdepth = 3;
+ local $Data::Dumper::Maxdepth = $maxdepth;
+ $obj = Data::Dumper->new([$f], [qw(f)]);
+ $dumps{'ddm'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'ddmundef'},
+ "No previous Maxdepth setting equivalent to \$Data::Dumper::Maxdepth = undef");
+
+ like($dumps{'noprev'}, qr/$a/s,
+ "Without Maxdepth, got output from deepest level");
+
+ isnt($dumps{'noprev'}, $dumps{'ddm'},
+ "No previous Maxdepth setting differs from setting a shallow Maxdepth");
+
+ unlike($dumps{'ddm'}, qr/$a/s,
+ "With Maxdepth, did not get output from deepest level");
+}
+
+{
+ # Adapted from Dumper.pm POD
+
+ my ($obj, %dumps, $maxdepth);
+
+ $a = "pearl";
+ $b = [ $a ];
+ $c = { 'b' => $b };
+ $d = [ $c ];
+ $e = { 'd' => $d };
+ $f = { 'e' => $e };
+
+ note("Discrepancy between Dumpxs() and Dumpperl() behavior with respect to \$Data::Dumper::Maxdepth = undef");
+ local $Data::Dumper::Useperl = 1;
+
+ $obj = Data::Dumper->new([$f], [qw(f)]);
+ $dumps{'noprev'} = _dumptostr($obj);
+
+ $obj = Data::Dumper->new([$f], [qw(f)]);
+ $obj->Maxdepth();
+ $dumps{'maxdepthempty'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'maxdepthempty'},
+ "No previous Maxdepth setting equivalent to Maxdepth() with no argument");
+
+ $obj = Data::Dumper->new([$f], [qw(f)]);
+ $obj->Maxdepth(undef);
+ $dumps{'maxdepthundef'} = _dumptostr($obj);
+
+ is($dumps{'noprev'}, $dumps{'maxdepthundef'},
+ "No previous Maxdepth setting equivalent to Maxdepth(undef)");
+
+ $maxdepth = 3;
+ $obj = Data::Dumper->new([$f], [qw(f)]);
+ $obj->Maxdepth($maxdepth);
+ $dumps{'maxdepthset'} = _dumptostr($obj);
+
+ isnt($dumps{'noprev'}, $dumps{'maxdepthset'},
+ "No previous Maxdepth setting differs from Maxdepth() with shallow depth");
+
+ local $Data::Dumper::Maxdepth = 3;
+ $obj = Data::Dumper->new([$f], [qw(f)]);
+ $dumps{'ddmset'} = _dumptostr($obj);
+
+ is($dumps{'maxdepthset'}, $dumps{'ddmset'},
+ "Maxdepth set and \$Data::Dumper::Maxdepth are equivalent");
+}
+
+{
+ my ($obj, %dumps);
+
+ my $warning = '';
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+
+ local $Data::Dumper::Deparse = 0;
+ local $Data::Dumper::Purity = 1;
+ local $Data::Dumper::Useperl = 1;
+ sub hello { print "Hello world\n"; }
+ $obj = Data::Dumper->new( [ \&hello ] );
+ $dumps{'ddsksub'} = _dumptostr($obj);
+ like($warning, qr/^Encountered CODE ref, using dummy placeholder/,
+ "Got expected warning: dummy placeholder under Purity = 1");
+}
+
+{
+ my ($obj, %dumps);
+
+ my $warning = '';
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+
+ local $Data::Dumper::Deparse = 0;
+ local $Data::Dumper::Useperl = 1;
+ sub jello { print "Jello world\n"; }
+ $obj = Data::Dumper->new( [ \&hello ] );
+ $dumps{'ddsksub'} = _dumptostr($obj);
+ ok(! $warning, "Encountered CODE ref, but no Purity, hence no warning");
+}
Added: vendor/perl/dist/dist/Data-Dumper/t/qr.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/qr.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/qr.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,24 @@
+#!perl -X
+
+BEGIN {
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+}
+
+use Test::More tests => 2;
+use Data::Dumper;
+
+{
+ my $q = q| \/ |;
+ use Data::Dumper;
+ my $qr = qr{$q};
+ eval Dumper $qr;
+ ok(!$@, "Dumping $qr with XS") or diag $@, Dumper $qr;
+ local $Data::Dumper::Useperl = 1;
+ eval Dumper $qr;
+ ok(!$@, "Dumping $qr with PP") or diag $@, Dumper $qr;
+}
Added: vendor/perl/dist/dist/Data-Dumper/t/quotekeys.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/quotekeys.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/quotekeys.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,94 @@
+#!./perl -w
+# t/quotekeys.t - Test Quotekeys()
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 10;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+my %d = (
+ delta => 'd',
+ beta => 'b',
+ gamma => 'c',
+ alpha => 'a',
+);
+
+run_tests_for_quotekeys();
+SKIP: {
+ skip "XS version was unavailable, so we already ran with pure Perl", 5
+ if $Data::Dumper::Useperl;
+ local $Data::Dumper::Useperl = 1;
+ run_tests_for_quotekeys();
+}
+
+sub run_tests_for_quotekeys {
+ note("\$Data::Dumper::Useperl = $Data::Dumper::Useperl");
+
+ my ($obj, %dumps, $quotekeys, $starting);
+
+ note("\$Data::Dumper::Quotekeys and Quotekeys() set to true value");
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddqkdefault'} = _dumptostr($obj);
+
+ $starting = $Data::Dumper::Quotekeys;
+ $quotekeys = 1;
+ local $Data::Dumper::Quotekeys = $quotekeys;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddqkone'} = _dumptostr($obj);
+ local $Data::Dumper::Quotekeys = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Quotekeys($quotekeys);
+ $dumps{'objqkone'} = _dumptostr($obj);
+
+ is($dumps{'ddqkdefault'}, $dumps{'ddqkone'},
+ "\$Data::Dumper::Quotekeys = 1 is default");
+ is($dumps{'ddqkone'}, $dumps{'objqkone'},
+ "\$Data::Dumper::Quotekeys = 1 and Quotekeys(1) are equivalent");
+ %dumps = ();
+
+ $quotekeys = 0;
+ local $Data::Dumper::Quotekeys = $quotekeys;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddqkzero'} = _dumptostr($obj);
+ local $Data::Dumper::Quotekeys = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Quotekeys($quotekeys);
+ $dumps{'objqkzero'} = _dumptostr($obj);
+
+ is($dumps{'ddqkzero'}, $dumps{'objqkzero'},
+ "\$Data::Dumper::Quotekeys = 0 and Quotekeys(0) are equivalent");
+
+ $quotekeys = undef;
+ local $Data::Dumper::Quotekeys = $quotekeys;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddqkundef'} = _dumptostr($obj);
+ local $Data::Dumper::Quotekeys = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Quotekeys($quotekeys);
+ $dumps{'objqkundef'} = _dumptostr($obj);
+
+ note("Quotekeys(undef) will fall back to the default value\nfor \$Data::Dumper::Quotekeys, which is a true value.");
+ isnt($dumps{'ddqkundef'}, $dumps{'objqkundef'},
+ "\$Data::Dumper::Quotekeys = undef and Quotekeys(undef) are equivalent");
+ isnt($dumps{'ddqkzero'}, $dumps{'objqkundef'},
+ "\$Data::Dumper::Quotekeys = undef and = 0 are equivalent");
+ %dumps = ();
+}
+
Added: vendor/perl/dist/dist/Data-Dumper/t/seen.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/seen.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/seen.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,103 @@
+#!./perl -w
+# t/seen.t - Test Seen()
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 10;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+my ($obj, %dumps);
+
+my (@e, %f, @rv, @g, %h, $k);
+ at e = ( qw| alpha beta gamma | );
+%f = ( epsilon => 'zeta', eta => 'theta' );
+ at g = ( qw| iota kappa lambda | );
+%h = ( mu => 'nu', omicron => 'pi' );
+sub j { print "Hello world\n"; }
+$k = 'just another scalar';
+
+{
+ my $warning = '';
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( { mark => 'snark' } );
+ like($warning,
+ qr/^Only refs supported, ignoring non-ref item \$mark/,
+ "Got expected warning for non-ref item");
+}
+
+{
+ my $warning = '';
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( { mark => undef } );
+ like($warning,
+ qr/^Value of ref must be defined; ignoring undefined item \$mark/,
+ "Got expected warning for undefined value of item");
+}
+
+{
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( undef );
+ is(@rv, 0, "Seen(undef) returned empty array");
+}
+
+{
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( [ qw| mark snark | ] );
+ is(@rv, 0, "Seen(ref other than hashref) returned empty array");
+}
+
+{
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( { '*samba' => \@g } );
+ is_deeply($rv[0], $obj, "Got the object back: value array ref");
+}
+
+{
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( { '*canasta' => \%h } );
+ is_deeply($rv[0], $obj, "Got the object back: value hash ref");
+}
+
+{
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( { '*pinochle' => \&j } );
+ is_deeply($rv[0], $obj, "Got the object back: value code ref");
+}
+
+{
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( { '*poker' => \$k } );
+ is_deeply($rv[0], $obj, "Got the object back: value ref to scalar");
+}
+
+{
+ my $l = 'loo';
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( { $l => \$k } );
+ is_deeply($rv[0], $obj, "Got the object back: value ref to scalar");
+}
+
+{
+ my $l = '$loo';
+ $obj = Data::Dumper->new( [ \@e, \%f ]);
+ @rv = $obj->Seen( { $l => \$k } );
+ is_deeply($rv[0], $obj, "Got the object back: value ref to scalar");
+}
+
Added: vendor/perl/dist/dist/Data-Dumper/t/sortkeys.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/sortkeys.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/sortkeys.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,190 @@
+#!./perl -w
+# t/sortkeys.t - Test Sortkeys()
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 26;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+run_tests_for_sortkeys();
+SKIP: {
+ skip "XS version was unavailable, so we already ran with pure Perl", 13
+ if $Data::Dumper::Useperl;
+ local $Data::Dumper::Useperl = 1;
+ run_tests_for_sortkeys();
+}
+
+sub run_tests_for_sortkeys {
+ note("\$Data::Dumper::Useperl = $Data::Dumper::Useperl");
+
+ my %d = (
+ delta => 'd',
+ beta => 'b',
+ gamma => 'c',
+ alpha => 'a',
+ );
+
+ {
+ my ($obj, %dumps, $sortkeys, $starting);
+
+ note("\$Data::Dumper::Sortkeys and Sortkeys() set to true value");
+
+ $starting = $Data::Dumper::Sortkeys;
+ $sortkeys = 1;
+ local $Data::Dumper::Sortkeys = $sortkeys;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddskone'} = _dumptostr($obj);
+ local $Data::Dumper::Sortkeys = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Sortkeys($sortkeys);
+ $dumps{'objskone'} = _dumptostr($obj);
+
+ is($dumps{'ddskone'}, $dumps{'objskone'},
+ "\$Data::Dumper::Sortkeys = 1 and Sortkeys(1) are equivalent");
+ like($dumps{'ddskone'},
+ qr/alpha.*?beta.*?delta.*?gamma/s,
+ "Sortkeys returned hash keys in Perl's default sort order");
+ %dumps = ();
+
+ }
+
+ {
+ my ($obj, %dumps, $starting);
+
+ note("\$Data::Dumper::Sortkeys and Sortkeys() set to coderef");
+
+ $starting = $Data::Dumper::Sortkeys;
+ local $Data::Dumper::Sortkeys = \&reversekeys;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddsksub'} = _dumptostr($obj);
+ local $Data::Dumper::Sortkeys = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Sortkeys(\&reversekeys);
+ $dumps{'objsksub'} = _dumptostr($obj);
+
+ is($dumps{'ddsksub'}, $dumps{'objsksub'},
+ "\$Data::Dumper::Sortkeys = CODEREF and Sortkeys(CODEREF) are equivalent");
+ like($dumps{'ddsksub'},
+ qr/gamma.*?delta.*?beta.*?alpha/s,
+ "Sortkeys returned hash keys per sorting subroutine");
+ %dumps = ();
+
+ }
+
+ {
+ my ($obj, %dumps, $starting);
+
+ note("\$Data::Dumper::Sortkeys and Sortkeys() set to coderef with filter");
+ $starting = $Data::Dumper::Sortkeys;
+ local $Data::Dumper::Sortkeys = \&reversekeystrim;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddsksub'} = _dumptostr($obj);
+ local $Data::Dumper::Sortkeys = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Sortkeys(\&reversekeystrim);
+ $dumps{'objsksub'} = _dumptostr($obj);
+
+ is($dumps{'ddsksub'}, $dumps{'objsksub'},
+ "\$Data::Dumper::Sortkeys = CODEREF and Sortkeys(CODEREF) select same keys");
+ like($dumps{'ddsksub'},
+ qr/gamma.*?delta.*?beta/s,
+ "Sortkeys returned hash keys per sorting subroutine");
+ unlike($dumps{'ddsksub'},
+ qr/alpha/s,
+ "Sortkeys filtered out one key per request");
+ %dumps = ();
+
+ }
+
+ {
+ my ($obj, %dumps, $sortkeys, $starting);
+
+ note("\$Data::Dumper::Sortkeys(undef) and Sortkeys(undef)");
+
+ $starting = $Data::Dumper::Sortkeys;
+ $sortkeys = 0;
+ local $Data::Dumper::Sortkeys = $sortkeys;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddskzero'} = _dumptostr($obj);
+ local $Data::Dumper::Sortkeys = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Sortkeys($sortkeys);
+ $dumps{'objskzero'} = _dumptostr($obj);
+
+ $sortkeys = undef;
+ local $Data::Dumper::Sortkeys = $sortkeys;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddskundef'} = _dumptostr($obj);
+ local $Data::Dumper::Sortkeys = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Sortkeys($sortkeys);
+ $dumps{'objskundef'} = _dumptostr($obj);
+
+ is($dumps{'ddskzero'}, $dumps{'objskzero'},
+ "\$Data::Dumper::Sortkeys = 0 and Sortkeys(0) are equivalent");
+ is($dumps{'ddskzero'}, $dumps{'ddskundef'},
+ "\$Data::Dumper::Sortkeys = 0 and = undef equivalent");
+ is($dumps{'objkzero'}, $dumps{'objkundef'},
+ "Sortkeys(0) and Sortkeys(undef) are equivalent");
+ %dumps = ();
+
+ }
+
+ note("Internal subroutine _sortkeys");
+ my %e = (
+ nu => 'n',
+ lambda => 'l',
+ kappa => 'k',
+ mu => 'm',
+ omicron => 'o',
+ );
+ my $rv = Data::Dumper::_sortkeys(\%e);
+ is(ref($rv), 'ARRAY', "Data::Dumper::_sortkeys returned an array ref");
+ is_deeply($rv, [ qw( kappa lambda mu nu omicron ) ],
+ "Got keys in Perl default order");
+ {
+ my $warning = '';
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+
+ my ($obj, %dumps, $starting);
+
+ note("\$Data::Dumper::Sortkeys and Sortkeys() set to coderef");
+
+ $starting = $Data::Dumper::Sortkeys;
+ local $Data::Dumper::Sortkeys = \&badreturnvalue;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddsksub'} = _dumptostr($obj);
+ like($warning, qr/^Sortkeys subroutine did not return ARRAYREF/,
+ "Got expected warning: sorting routine did not return array ref");
+ }
+
+}
+
+sub reversekeys { return [ reverse sort keys %{+shift} ]; }
+
+sub reversekeystrim {
+ my $hr = shift;
+ my @keys = sort keys %{$hr};
+ shift(@keys);
+ return [ reverse @keys ];
+}
+
+sub badreturnvalue { return { %{+shift} }; }
Added: vendor/perl/dist/dist/Data-Dumper/t/sparseseen.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/sparseseen.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/sparseseen.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,88 @@
+#!./perl -w
+# t/sparseseen.t - Test Sparseseen()
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 8;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+my %d = (
+ delta => 'd',
+ beta => 'b',
+ gamma => 'c',
+ alpha => 'a',
+);
+
+run_tests_for_sparseseen();
+SKIP: {
+ skip "XS version was unavailable, so we already ran with pure Perl", 4
+ if $Data::Dumper::Useperl;
+ local $Data::Dumper::Useperl = 1;
+ run_tests_for_sparseseen();
+}
+
+sub run_tests_for_sparseseen {
+ note("\$Data::Dumper::Useperl = $Data::Dumper::Useperl");
+
+ my ($obj, %dumps, $sparseseen, $starting);
+
+ note("\$Data::Dumper::Sparseseen and Sparseseen() set to true value");
+
+ $starting = $Data::Dumper::Sparseseen;
+ $sparseseen = 1;
+ local $Data::Dumper::Sparseseen = $sparseseen;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddssone'} = _dumptostr($obj);
+ local $Data::Dumper::Sparseseen = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Sparseseen($sparseseen);
+ $dumps{'objssone'} = _dumptostr($obj);
+
+ is($dumps{'ddssone'}, $dumps{'objssone'},
+ "\$Data::Dumper::Sparseseen = 1 and Sparseseen(1) are equivalent");
+ %dumps = ();
+
+ $sparseseen = 0;
+ local $Data::Dumper::Sparseseen = $sparseseen;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddsszero'} = _dumptostr($obj);
+ local $Data::Dumper::Sparseseen = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Sparseseen($sparseseen);
+ $dumps{'objsszero'} = _dumptostr($obj);
+
+ is($dumps{'ddsszero'}, $dumps{'objsszero'},
+ "\$Data::Dumper::Sparseseen = 0 and Sparseseen(0) are equivalent");
+
+ $sparseseen = undef;
+ local $Data::Dumper::Sparseseen = $sparseseen;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddssundef'} = _dumptostr($obj);
+ local $Data::Dumper::Sparseseen = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Sparseseen($sparseseen);
+ $dumps{'objssundef'} = _dumptostr($obj);
+
+ is($dumps{'ddssundef'}, $dumps{'objssundef'},
+ "\$Data::Dumper::Sparseseen = undef and Sparseseen(undef) are equivalent");
+ is($dumps{'ddsszero'}, $dumps{'objssundef'},
+ "\$Data::Dumper::Sparseseen = undef and = 0 are equivalent");
+ %dumps = ();
+}
+
Added: vendor/perl/dist/dist/Data-Dumper/t/toaster.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/toaster.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/toaster.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,88 @@
+#!./perl -w
+# t/toaster.t - Test Toaster()
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+
+use Data::Dumper;
+use Test::More tests => 8;
+use lib qw( ./t/lib );
+use Testing qw( _dumptostr );
+
+my %d = (
+ delta => 'd',
+ beta => 'b',
+ gamma => 'c',
+ alpha => 'a',
+);
+
+run_tests_for_toaster();
+SKIP: {
+ skip "XS version was unavailable, so we already ran with pure Perl", 4
+ if $Data::Dumper::Useperl;
+ local $Data::Dumper::Useperl = 1;
+ run_tests_for_toaster();
+}
+
+sub run_tests_for_toaster {
+ note("\$Data::Dumper::Useperl = $Data::Dumper::Useperl");
+
+ my ($obj, %dumps, $toaster, $starting);
+
+ note("\$Data::Dumper::Toaster and Toaster() set to true value");
+
+ $starting = $Data::Dumper::Toaster;
+ $toaster = 1;
+ local $Data::Dumper::Toaster = $toaster;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddtoasterone'} = _dumptostr($obj);
+ local $Data::Dumper::Toaster = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Toaster($toaster);
+ $dumps{'objtoasterone'} = _dumptostr($obj);
+
+ is($dumps{'ddtoasterone'}, $dumps{'objtoasterone'},
+ "\$Data::Dumper::Toaster = 1 and Toaster(1) are equivalent");
+ %dumps = ();
+
+ $toaster = 0;
+ local $Data::Dumper::Toaster = $toaster;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddtoasterzero'} = _dumptostr($obj);
+ local $Data::Dumper::Toaster = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Toaster($toaster);
+ $dumps{'objtoasterzero'} = _dumptostr($obj);
+
+ is($dumps{'ddtoasterzero'}, $dumps{'objtoasterzero'},
+ "\$Data::Dumper::Toaster = 0 and Toaster(0) are equivalent");
+
+ $toaster = undef;
+ local $Data::Dumper::Toaster = $toaster;
+ $obj = Data::Dumper->new( [ \%d ] );
+ $dumps{'ddtoasterundef'} = _dumptostr($obj);
+ local $Data::Dumper::Toaster = $starting;
+
+ $obj = Data::Dumper->new( [ \%d ] );
+ $obj->Toaster($toaster);
+ $dumps{'objtoasterundef'} = _dumptostr($obj);
+
+ is($dumps{'ddtoasterundef'}, $dumps{'objtoasterundef'},
+ "\$Data::Dumper::Toaster = undef and Toaster(undef) are equivalent");
+ is($dumps{'ddtoasterzero'}, $dumps{'objtoasterundef'},
+ "\$Data::Dumper::Toaster = undef and = 0 are equivalent");
+ %dumps = ();
+}
+
Added: vendor/perl/dist/dist/Data-Dumper/t/values.t
===================================================================
--- vendor/perl/dist/dist/Data-Dumper/t/values.t (rev 0)
+++ vendor/perl/dist/dist/Data-Dumper/t/values.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,40 @@
+#!./perl -w
+
+BEGIN {
+ if ($ENV{PERL_CORE}){
+ require Config; import Config;
+ no warnings 'once';
+ if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
+ print "1..0 # Skip: Data::Dumper was not built\n";
+ exit 0;
+ }
+ }
+}
+
+use strict;
+use Data::Dumper;
+use Test::More tests => 4;
+
+my ($a, $b, $obj);
+my (@values, @names);
+my (@newvalues, $objagain, %newvalues);
+$a = 'alpha';
+$b = 'beta';
+
+$obj = Data::Dumper->new([$a,$b], [qw(a b)]);
+ at values = $obj->Values;
+is_deeply(\@values, [$a,$b], "Values() returned expected list");
+
+ at newvalues = ( qw| gamma delta epsilon | );
+$objagain = $obj->Values(\@newvalues);
+is($objagain, $obj, "Values returned same object");
+is_deeply($objagain->{todump}, \@newvalues,
+ "Able to use Values() to set values to be dumped");
+
+$obj = Data::Dumper->new([$a,$b], [qw(a b)]);
+%newvalues = ( gamma => 'delta', epsilon => 'zeta' );
+eval { @values = $obj->Values(\%newvalues); };
+like($@, qr/Argument to Values, if provided, must be array ref/,
+ "Got expected error message: bad argument to Values()");
+
+
Added: vendor/perl/dist/dist/ExtUtils-CBuilder/Changes
===================================================================
--- vendor/perl/dist/dist/ExtUtils-CBuilder/Changes (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-CBuilder/Changes 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,455 @@
+Revision history for Perl extension ExtUtils::CBuilder.
+
+0.280209 - 2012-10-20 (Perl v5.17.5)
+
+ Fixed:
+
+ - Allow options to be passed to prelink in Windows (perl #115100)
+ [Eric Brine]
+
+0.280208 - 2012-06-20 (Perl v5.17.1)
+
+ Fixed:
+
+ - Corrected location in which manifest file is looked for on
+ Windows (RT#35943, perl #111798) [snaury at gmail.com]
+
+0.280207 (Not released)
+
+ Fixed:
+
+ - Corrected test for existence of manifest file on Windows
+ (perl #111782) [Steve Hay]
+
+0.280206 - 2012-03-20 (Perl v5.15.9)
+
+ Documented:
+
+ - Added a SUPPORT section to indicate that upstream is Perl 5 core
+
+0.280205 - 2011-12-20 (Perl v5.15.6)
+
+ Fixed:
+
+ - Fixed bug picking up ccflags from Config
+
+0.280204 - 2011-06-20 (Perl v5.15.0)
+
+ Minor:
+
+ - Quotation style cleanup
+
+0.280203 - 2011-05-14 (Perl v5.14.0)
+
+ Fixed:
+
+ - Appends CFLAGS and LDFLAGS environments instead of overriding
+
+ - Reset ccflags on compilation for VMS.
+
+ Changed:
+
+ - Refactored OS name mapping to use Perl::OSType
+
+0.280202 - Sun Jan 23 10:47:51 EST 2011
+
+ - Different file names used for test files; allows EU::CB tests
+ to be run in parallel. [Florian Ragwitz]
+
+0.280201 - Fri Jan 21 15:16:36 EST 2011
+
+ Fixed:
+
+ - t/04-base.t no longer attempt to compile or link as this provokes
+ failures on main platforms
+
+ - Various typo fixes in Pod or comments
+
+0.2802 - Sun Dec 12 07:22:43 EST 2010
+
+ Fixed:
+
+ - Incorporated another t/04-base.t fix from bleadperl
+ [Chris Williams]
+
+0.2801 - Wed Dec 8 21:36:56 EST 2010
+
+ Fixed:
+
+ - Fixed spurious t/04-base.t failure when run from Perl core
+ [David Golden]
+
+0.2800 - Mon Dec 6 16:05:46 EST 2010
+
+ - No changes from 0.27_07
+
+0.27_07 - Wed Sep 29 21:48:55 EDT 2010
+
+ Fixed:
+
+ - Fixed t/02-link.t on perl < 5.8
+
+0.27_06 - Mon Sep 27 15:29:54 EDT 2010
+
+ Fixed:
+
+ - Preserves exit status on VMS [Craig Berry]
+
+ - Fix Win32 split_like_shell escaping [Christian Walde]
+
+0.27_05 - Wed Jul 28 15:29:59 EDT 2010
+
+ Fixed:
+
+ - Tests no longer fail if user has set the CC environment variable
+
+0.27_04 - Mon Jul 26 22:41:43 EDT 2010
+
+ Added:
+ - handle c compiler and c++ compiler separately
+ (adds requirement for IPC::Cmd) [Jens Rehsack]
+
+ Others:
+ - rely on File::Temp::tempfile and File::Spec::tmpdir to
+ get unique file name for checking for compiler
+ [Jens Rehsack]
+
+ - Code base modernization and substantial code coverage improvments
+ [Jim Keenan]
+
+0.2703 - Tue Mar 16 17:10:55 EDT 2010
+
+ Bugs fixed:
+ - fixed tests for Windows and MSVC [Jan Dubois]
+
+0.2702 - Mon Feb 22 15:10:52 EST 2010
+
+ Bugs fixed:
+ - compile() changes in 0.2701 did not work on Windows. Now fixed.
+
+0.2701 - Tue Feb 16 09:12:45 EST 2010
+
+ Bugs fixed:
+ - compile() now accepts both string & array for 'include_dirs'
+ argument, as documented.(RT#54606) [Alberto Sim\xF5es]
+
+0.27 - Thu Oct 29 21:29:56 EDT 2009
+
+ Other:
+ - Removed Build.PL to avoid creating a circular dependency
+ - Added version numbers to Windows compiler driver modules
+
+0.26_05 - Sun Oct 25 17:29:02 EDT 2009
+
+ Bugs fixed:
+ - Fixed t/02link.t failures on cygwin with Perl 5.8 [David Golden]
+
+ Other:
+ - Made have_compiler (and have_cplusplus) quiet without echoing
+ the test command to STDOUT [David Golden]
+
+0.26_04 - Mon Oct 19 21:57:46 EDT 2009
+
+ Enhancements:
+ - Added 'have_cplusplus()' method to check for C++ support
+ - Added patches for building Perl with mingw64 [Sisyphus]
+ - Allow CC environment variable to override $Config{cc}
+
+ Bugs fixed:
+ - Fixed link executable command for Win32 MSVC (RT#40819) [Cosimo
+ Streppone]
+ - Removed MSVC version check when embedding a manifest file
+ (RT #43002) [Steve Hay]
+
+ Other:
+ - Split Windows compiler driver packages into individual *.pm files
+
+0.260301 - Sat Aug 29 11:04:41 EDT 2009
+
+ Bugs fixed:
+ - Fixed linking error on Win32 with gcc compiler (RT#49000)
+ [kmx]
+
+0.2603 - Sat Jul 18 06:56:06 EDT 2009
+
+ Bugs fixed:
+ - Makefile.PL had wrong INSTALLDIRS setting for older Perls
+ (RT#47985) [David Golden]
+
+0.2602 - Sat Jul 4 10:57:12 EDT 2009
+
+ Bugs fixed:
+ - Fixed 00-have-compiler.t if $^X is a relative path [David Wheeler]
+
+0.2601 - Wed Jul 1 09:37:39 EDT 2009
+
+ Bugs fixed:
+ - On VMS, cleans up extra files generated during testing
+ [John E. Malmberg, Craig Berry]
+
+0.26 - Mon Jun 29 20:11:52 EDT 2009
+
+ - No changes from 0.25_01
+
+0.25_01 - Sat Jun 27 23:13:20 EDT 2009
+
+ - Changed test library to Test::More
+
+ - Added tests for have_compiler
+
+ - Skips tests that need a compiler if have_compiler is false
+
+ - have_compiler will try to compile in the current directory
+ if compiling in tmpdir fails for whatever reason
+
+0.25 - Fri Jun 26 16:18:13 EDT 2009
+
+ - Slight diagnostic improvements in link.t
+
+0.24_01 - Sun Mar 8 14:50:10 2009
+
+ - On Windows, don't generate "mt" command when CRT is statically
+ linked. [Jan Dubois]
+
+ - On Cygwin, examine $Config{useshrplib} to see whether we're
+ supposed to be linking with a shared perl library or not. [Reini
+ Urban]
+
+ - In link_executable() on Cygwin, trust $Config{ld} rather than using
+ $Config{cc} for linking. [Reini Urban]
+
+ - Add 'haiku' as a Unix-like platform. [Ingo Weinhold]
+
+0.24 - Fri Aug 15 22:01:48 2008
+
+ - Added 'gnu' and 'gnukfreebsd' as Unix variants. [Niko Tyni]
+
+ - Brought in some VMS fixes from bleadperl: "Correct and complete
+ CBuilder's handling of external libraries when linking on VMS."
+ [Craig Berry]
+
+0.23 - Sat Apr 19 22:28:03 2008
+
+ - Fixed some problems (some old, some new) with Strawberry Perl on
+ Windows. [Alberto Simo~es]
+
+ - Will now install in the core perl lib directory when the user's
+ perl is new enough to have us in core. [Yi Ma Mao]
+
+0.22 - Fri Feb 8 21:52:21 2008
+
+ - Replaced the split_like_shell() method on Windows with a
+ near-no-op, which is probably more correct and has the benefit of
+ not messing up UNC paths. [John R. LoVerso, see
+ http://rt.cpan.org/Ticket/Display.html?id=26545]
+
+ - Fixed extra_compiler_flags on Windows, they were being
+ ignored. [Robert May]
+
+0.21 - Tue Oct 30 06:46:01 2007
+
+ - Clean up perl_src path using Cwd::realpath(). Only affects usage
+ as part of the perl core.
+
+ - Protect $., $@, $!, $^E, and $? from any clobbering that might
+ occur in our DESTROY method. [Zefram]
+
+ - From bleadperl, a patch to clean up debug symbol files (.pdb for
+ VC++, .tds for BCC) when running have_compiler(). [Steve Hay &
+ Steve Peters]
+
+0.19 - Sun May 13 14:29:18 2007
+
+ - When building as part of the perl core (so this is irrelevant for
+ people downloading from CPAN) we now try a little harder to find
+ the perl sources. [Jos Boumans]
+
+ - Fixed a part of the manifest thingy that got broken on 64-bit
+ Windows platforms in version 0.18. [Steve Hay, Jan Dubois]
+
+0.18 - Mon Mar 26 21:29:09 2007
+
+ - Various OS/2 fixes:
+ + Put .LIB file near .DEF file
+ + Got library-file building working better
+ + Handled libperl_overrides better
+ [Ilya Zakharevich]
+
+ - On Windows: embed manifest files in DLLs built with Module-Build
+ when using VC8. [Steve Hay]
+
+ - Added a workaround for a config error on dec_osf: the linker is
+ $Config{cc}, not $Config{ld}. [Jarkko Hietaniemi]
+
+ - Borland's compiler "response files" will not pass through macro
+ definitions that contain quotes. The quotes get stripped and there
+ seems to be no way to escape them. So we leave macros on the
+ command line. [Randy W. Sims]
+
+0.18 Sat Mar 25 13:35:47 CST 2006
+
+ - Yet more fixes for arg_defines() on VMS. [Craig A. Berry and John
+ E. Malmberg]
+
+0.17 Wed Mar 15 22:46:15 CST 2006
+
+ - When we're being run from an uninstalled perl distribution
+ (e.g. one that's in the process of being built and tested), we
+ search for perl first in the current working directory. [Randy
+ Sims]
+
+ - More fixing of the arg_defines() method on VMS. [Craig A. Berry and
+ John E. Malmberg]
+
+0.16 Mon Mar 13 17:08:21 CST 2006
+
+ - Fix quoting of command line arguments on Windows. [Yitzchak
+ Scott-Thoennes]
+
+ - Provided a custom arg_defines() on VMS that does essentially the
+ same thing for /define that version 0.14 did for /include. [Craig
+ A. Berry]
+
+ - Documented the existing 'quiet' parameter, which silences the
+ printing of system() commands. [Suggested by Yitzchak
+ Scott-Thoennes]
+
+0.15 Mon Oct 3 17:10:32 CDT 2005
+
+ - Several OS/2 fixes have been made, including: 1) adding the
+ necessary version string to DLLs, 2) passing the executable's name
+ to 'ldopts' without the .exe extension, 3) avoiding calling 'env'
+ via the 'shrpenv' thingy, since it triggers a fork() bug. [Ilya
+ Zakharevich]
+
+ - Integrate a couple cleanup-related changes from bleadperl that
+ somehow never got into this copy. [Steve Hay]
+
+ - Added a new 'defines' parameter to compile(), which gives a
+ platform-independant way to specify various -Dfoo=bar (or the
+ equivalent) compiler defines. [Randy W. Sims]
+
+0.14 Mon Sep 19 13:40:37 CDT 2005
+
+ - Several fixes have been made for VMS, including: 1) there can only
+ be one /include qualifier, so merge multiple /includes into one; 2)
+ make sure the executable is named the same way that dynaloader will
+ look for it; 3) make sure the option files for the exported symbols
+ and the PERLSHR image are passed properly to the linker. [John
+ E. Malmberg]
+
+0.13 Wed Aug 24 20:05:59 CDT 2005
+
+ - Several temporary files weren't being cleaned up during testing,
+ because the 'cleanup' mechanism was never properly implemented.
+ This is now fixed. [Steve Hay]
+
+0.12 Mon May 30 16:40:10 CDT 2005
+
+ - In order to integrate into the perl core, patches were contributed
+ that a) put a $VERSION variable in each .pm file, b) add a 'quiet'
+ parameter to new() to shut up some of the command-echoing, c)
+ checks for the perl source headers in the CORE/ directory in the
+ perl source tree, not in the post-installation location, and d)
+ adjusts the CWD when running the regression tests under the perl
+ core. [Yitzchak Scott-Thoennes]
+
+ - Various parts of the code were looking for the CORE/ directory in
+ $Config{archlib}, $Config{installarchlib}, and $Config{archlibexp}.
+ Only the latter is correct, so we use that everywhere now.
+ [Curt Tilmes]
+
+ - For Unix-ish platforms, link_executable() will now prefer
+ $Config{cc} to $Config{ld}, because that typically works
+ better. [Jarkko Hietaniemi and H.Merijn Brand]
+
+ - Prelinking (invoking ExtUtils::Mksymlists to create options-files)
+ is now only done when we're building dynamic libraries. [Yitzchak
+ Scott-Thoennes]
+
+0.11 Tue Apr 5 20:58:41 CDT 2005
+
+ - Added a licensing statement to CBuilder.pm. [Spotted by Chip
+ Salzenberg]
+
+0.10 Mon Mar 14 20:18:19 CST 2005
+
+ - Split out a few simple routines that format how compile switches
+ are formatted, so that we can override them for platforms like VMS
+ where they're very different.
+
+ - Fix compile() and link() on VMS. [Help from Michael Schwern and
+ Peter Prymmer]
+
+0.09 Tue Feb 8 17:57:41 CST 2005
+
+ - Fixed a broken link_executable() method on cygwin - it now uses
+ 'gcc' instead of $Config{ld} for the linking, because the latter is
+ actually a shell script which calls a perl script which calls gcc
+ in a way that only works for creating shared libraries, not
+ executables.
+
+0.08 Tue Jan 18 21:54:11 CST 2005
+
+ - Fixed a testing error in which I had the prototype wrong for the
+ main() function. [Jose Pedro Oliveira]
+
+0.07 Wed Jan 12 21:50:34 CST 2005
+
+ - Added the link_executable() method, which provides the ability to
+ create standalone executables. This is NOT yet implemented on
+ Windows, and therefore the tests for it are skipped on Win32.
+ [Alberto Manuel Brandao Simoes]
+
+ - Integrated the latest split_like_shell() for Windows from
+ Module::Build (really need to find a better home for this code...),
+ which now does a much better job of handling quotes and backslashes
+ and so on. [Randy Sims]
+
+ - Fixed a couple of Windows problems related to the output-file name
+ in link(), and some clobbering of the 'include_dirs' parameter to
+ compile(). [Randy Sims]
+
+0.06 Mon Dec 27 22:51:36 CST 2004
+
+ - Fixed a bug on Unix environments in which our work-around for
+ shell-commands like "FOO=BAR cc" (which is supposed to be turned
+ into "env FOO=BAR cc" to actually work) wasn't being called.
+
+0.05 Wed Oct 13 23:09:09 CDT 2004
+
+ - Fixed a bug in split_like_shell() in which leading whitespace was
+ creating an empty word, manifesting as something like "gcc - no
+ such file or directory" during tests. [Spotted by Warren L. Dodge]
+
+ - Incorporate another split_like_shell() fix from Module::Build.
+
+0.04 Sun Oct 10 00:31:08 CDT 2004
+
+ - Changed the split_like_shell() method to use the shellwords()
+ function from Text::ParseWords (a core module since 5.0), which
+ does a much better job than the split() we were using.
+
+
+0.03 Fri May 14 23:12:23 CDT 2004
+
+ - Fixed minor problems with the Build.PL file, the module names
+ should be quoted.
+
+ - The VMS module declared itself with the wrong package name.
+
+
+0.02 Fri Feb 20 10:17:40 CST 2004
+
+ - Fixed a bug in .../Platform/Windows.pm, in which compile() was
+ ignoring an 'include_dirs' argument. [Randy Sims]
+
+ - Fixed a bug in .../Platform/Windows.pm, in which output files were
+ being created in the root directory \ when they should be created
+ in the current directory. [Randy Sims]
+
+
+0.01 Mon Jan 12 08:12:35 CST 2004
+
+ - Original release, taken from Module::Build's C-building code, with
+ patching help from Randy Sims.
Added: vendor/perl/dist/dist/ExtUtils-CBuilder/LICENSE
===================================================================
--- vendor/perl/dist/dist/ExtUtils-CBuilder/LICENSE (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-CBuilder/LICENSE 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,379 @@
+This software is copyright (c) 2012 by Ken Williams.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+Terms of the Perl programming language system itself
+
+a) the GNU General Public License as published by the Free
+ Software Foundation; either version 1, or (at your option) any
+ later version, or
+b) the "Artistic License"
+
+--- The GNU General Public License, Version 1, February 1989 ---
+
+This software is Copyright (c) 2012 by Ken Williams.
+
+This is free software, licensed under:
+
+ The GNU General Public License, Version 1, February 1989
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 51 Franklin St, Suite 500, Boston, MA 02110-1335 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+--- The Artistic License 1.0 ---
+
+This software is Copyright (c) 2012 by Ken Williams.
+
+This is free software, licensed under:
+
+ The Artistic License 1.0
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of
+the package the right to use and distribute the Package in a more-or-less
+customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ - "Package" refers to the collection of files distributed by the Copyright
+ Holder, and derivatives of that collection of files created through
+ textual modification.
+ - "Standard Version" refers to such a Package if it has not been modified,
+ or has been modified in accordance with the wishes of the Copyright
+ Holder.
+ - "Copyright Holder" is whoever is named in the copyright or copyrights for
+ the package.
+ - "You" is you, if you're thinking about copying or distributing this Package.
+ - "Reasonable copying fee" is whatever you can justify on the basis of media
+ cost, duplication charges, time of people involved, and so on. (You will
+ not be required to justify it to the Copyright Holder, but only to the
+ computing community at large as a market that must bear the fee.)
+ - "Freely Available" means that no fee is charged for the item itself, though
+ there may be fees involved in handling the item. It also means that
+ recipients of the item may redistribute it under the same conditions they
+ received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived
+from the Public Domain or from the Copyright Holder. A Package modified in such
+a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that
+you insert a prominent notice in each changed file stating how and when you
+changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or an
+ equivalent medium, or placing the modifications on a major archive site
+ such as ftp.uu.net, or by allowing the Copyright Holder to include your
+ modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with
+ standard executables, which must also be provided, and provide a separate
+ manual page for each non-standard executable that clearly documents how it
+ differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where to
+ get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package
+ with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard
+ Version executables, giving the non-standard executables non-standard
+ names, and clearly documenting the differences in manual pages (or
+ equivalent), together with instructions on where to get the Standard
+ Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this Package. You
+may not charge a fee for this Package itself. However, you may distribute this
+Package in aggregate with other (possibly commercial) programs as part of a
+larger (possibly commercial) software distribution provided that you do not
+advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output
+from the programs of this Package do not automatically fall under the copyright
+of this Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
+
Added: vendor/perl/dist/dist/ExtUtils-CBuilder/Makefile.PL
===================================================================
--- vendor/perl/dist/dist/ExtUtils-CBuilder/Makefile.PL (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-CBuilder/Makefile.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,52 @@
+use strict;
+use warnings;
+
+use ExtUtils::MakeMaker 6.30;
+
+my %WriteMakefileArgs = (
+ "NAME" => "ExtUtils::CBuilder",
+ "VERSION_FROM" => "lib/ExtUtils/CBuilder.pm",
+ "ABSTRACT_FROM" => "lib/ExtUtils/CBuilder.pm",
+ "AUTHOR" => "Ken Williams <kwilliams\@cpan.org>, The Perl 5 Porters",
+ "BUILD_REQUIRES" => {
+ "Test::More" => "0.47"
+ },
+ "CONFIGURE_REQUIRES" => {
+ "ExtUtils::MakeMaker" => "6.30"
+ },
+ "EXE_FILES" => [],
+ "INSTALLDIRS" => ($] < 5.011 ? 'perl' : 'site'),
+ "LICENSE" => "perl",
+ "PREREQ_PM" => {
+ "Cwd" => 0,
+ "File::Basename" => 0,
+ "File::Spec" => "3.13",
+ "File::Temp" => 0,
+ "IO::File" => 0,
+ "IPC::Cmd" => 0,
+ "Perl::OSType" => 0,
+ "Text::ParseWords" => 0
+ },
+);
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
+ my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
+ my $pp = $WriteMakefileArgs{PREREQ_PM};
+ for my $mod ( keys %$br ) {
+ if ( exists $pp->{$mod} ) {
+ $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
+ }
+ else {
+ $pp->{$mod} = $br->{$mod};
+ }
+ }
+}
+
+delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+ unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
+
+$WriteMakefileArgs{INSTALLDIRS} = 'perl'
+ if $] >= 5.009005 && $] <= 5.011000;
+
+WriteMakefile(%WriteMakefileArgs);
+
Added: vendor/perl/dist/dist/ExtUtils-CBuilder/README.patching
===================================================================
--- vendor/perl/dist/dist/ExtUtils-CBuilder/README.patching (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-CBuilder/README.patching 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,27 @@
+Patching instructions for ExtUtils::CBuilder
+
+1. Check for any changes to .pm files since dev or stable Perl release. E.g.
+to check for changes since v5.15.8:
+
+ $ cd dist/ExtUtils-CBuilder
+ $ git log v5.15.8..blead -- .
+
+2. If you are making the first change since the last Perl release, you need to
+bump the $VERSION in all .pm files and update the Changes file with the new
+version. In the Changes file, put the expected *NEXT* release of Perl (dev or
+stable) as the release date and version. E.g. after v5.15.8, I added this line
+to Changes to indicate what will be next release:
+
+ 0.280206 - 2012-03-20 (Perl v5.15.9)
+
+3. Add an entry to Changes for your work
+
+4. Update Makefile.PL, MANIFEST.SKIP or other support files as necessary. E.g.
+update Makefile.PL with any changes to prerequisites.
+
+5. Commit all changes (preferably to a branch)
+
+6. Run Configure/make/make test and check for errors. If there are any, fix them.
+
+7. If all is well, push your commits to blead or send a patch to p5p if you do
+not have commit access to the Perl 5 repository
Added: vendor/perl/dist/dist/ExtUtils-CBuilder/README.release
===================================================================
--- vendor/perl/dist/dist/ExtUtils-CBuilder/README.release (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-CBuilder/README.release 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
+Release instructions for dual-life ExtUtils::CBuilder
+
+1. Check out a tag/commit corresponding to the release point. This
+should generally be a Perl release (dev or stable). Make sure
+your working tree is clear of extraneous files. E.g.
+
+ $ git checkout v5.15.8
+ $ git clean -dxf
+
+2. Rsync the ExtUtils-CBuilder directory to a temporary directory for
+release. E.g.
+
+ $ rsync -av --delete dist/ExtUtils-CBuilder /tmp
+
+3. Change to the temp directory
+
+ $ cd /tmp/ExtUtils-CBuilder
+
+4. Look at the Changes file. If it was not kept up to date in blead,
+take a minute to feel sad, then update it. Remember to copy the
+changes back to blead later.
+
+5. Configure and then make a MANIFEST
+
+ $ perl Makefile.PL
+ $ make manifest
+
+6. Build a release directory and examine its contents, paying particular
+attention to the MANIFEST and the META files
+
+ $ make distdir
+
+7. Test the release directory
+
+ $ make disttest
+
+8. If all looks good, create a tarball and upload it to CPAN (maybe
+install CPAN::Uploader or an equivalent tool)
+
+ $ make dist
+ $ cpan_upload ExtUtils-CBuilder-X.YYYZZZ.tar.gz
+
+9. Update Porting/Maintainers.pl in the Perl repo with the new tarball
+name for ExtUtils-CBuilder.
+
+10. If you updated Changes, copy that back to blead now
+
+11. Commit any changes to blead (or submit it as a patch if you don't have a
+commit bit)
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Constants.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Constants.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Constants.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,42 @@
+package ExtUtils::ParseXS::Constants;
+use strict;
+use warnings;
+use Symbol;
+
+our $VERSION = '3.18';
+
+=head1 NAME
+
+ExtUtils::ParseXS::Constants - Initialization values for some globals
+
+=head1 SYNOPSIS
+
+ use ExtUtils::ParseXS::Constants ();
+
+ $PrototypeRegexp = $ExtUtils::ParseXS::Constants::PrototypeRegexp;
+
+=head1 DESCRIPTION
+
+Initialization of certain non-subroutine variables in ExtUtils::ParseXS and some of its
+supporting packages has been moved into this package so that those values can
+be defined exactly once and then re-used in any package.
+
+Nothing is exported. Use fully qualified variable names.
+
+=cut
+
+# FIXME: THESE ARE NOT CONSTANTS!
+our @InitFileCode;
+
+# Note that to reduce maintenance, $PrototypeRegexp is used
+# by ExtUtils::Typemaps, too!
+our $PrototypeRegexp = "[" . quotemeta('\$%&*@;[]_') . "]";
+our @XSKeywords = qw(
+ REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE
+ OUTPUT CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE
+ VERSIONCHECK INCLUDE INCLUDE_COMMAND SCOPE INTERFACE
+ INTERFACE_MACRO C_ARGS POSTCALL OVERLOAD FALLBACK
+ EXPORT_XSUB_SYMBOLS
+);
+
+1;
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/CountLines.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/CountLines.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/CountLines.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+package ExtUtils::ParseXS::CountLines;
+use strict;
+
+our $VERSION = '3.18';
+
+our $SECTION_END_MARKER;
+
+sub TIEHANDLE {
+ my ($class, $cfile, $fh) = @_;
+ $cfile =~ s/\\/\\\\/g;
+ $cfile =~ s/"/\\"/g;
+ $SECTION_END_MARKER = qq{#line --- "$cfile"};
+
+ return bless {
+ buffer => '',
+ fh => $fh,
+ line_no => 1,
+ }, $class;
+}
+
+sub PRINT {
+ my $self = shift;
+ for (@_) {
+ $self->{buffer} .= $_;
+ while ($self->{buffer} =~ s/^([^\n]*\n)//) {
+ my $line = $1;
+ ++$self->{line_no};
+ $line =~ s|^\#line\s+---(?=\s)|#line $self->{line_no}|;
+ print {$self->{fh}} $line;
+ }
+ }
+}
+
+sub PRINTF {
+ my $self = shift;
+ my $fmt = shift;
+ $self->PRINT(sprintf($fmt, @_));
+}
+
+sub DESTROY {
+ # Not necessary if we're careful to end with a "\n"
+ my $self = shift;
+ print {$self->{fh}} $self->{buffer};
+}
+
+sub UNTIE {
+ # This sub does nothing, but is necessary for references to be released.
+}
+
+sub end_marker {
+ return $SECTION_END_MARKER;
+}
+
+1;
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,924 @@
+package ExtUtils::ParseXS::Utilities;
+use strict;
+use warnings;
+use Exporter;
+use File::Spec;
+use lib qw( lib );
+use ExtUtils::ParseXS::Constants ();
+
+our $VERSION = '3.19';
+
+our (@ISA, @EXPORT_OK);
+ at ISA = qw(Exporter);
+ at EXPORT_OK = qw(
+ standard_typemap_locations
+ trim_whitespace
+ tidy_type
+ C_string
+ valid_proto_string
+ process_typemaps
+ make_targetable
+ map_type
+ standard_XS_defs
+ assign_func_args
+ analyze_preprocessor_statements
+ set_cond
+ Warn
+ current_line_number
+ blurt
+ death
+ check_conditional_preprocessor_statements
+ escape_file_for_line_directive
+ report_typemap_failure
+);
+
+=head1 NAME
+
+ExtUtils::ParseXS::Utilities - Subroutines used with ExtUtils::ParseXS
+
+=head1 SYNOPSIS
+
+ use ExtUtils::ParseXS::Utilities qw(
+ standard_typemap_locations
+ trim_whitespace
+ tidy_type
+ C_string
+ valid_proto_string
+ process_typemaps
+ make_targetable
+ map_type
+ standard_XS_defs
+ assign_func_args
+ analyze_preprocessor_statements
+ set_cond
+ Warn
+ blurt
+ death
+ check_conditional_preprocessor_statements
+ escape_file_for_line_directive
+ report_typemap_failure
+ );
+
+=head1 SUBROUTINES
+
+The following functions are not considered to be part of the public interface.
+They are documented here for the benefit of future maintainers of this module.
+
+=head2 C<standard_typemap_locations()>
+
+=over 4
+
+=item * Purpose
+
+Provide a list of filepaths where F<typemap> files may be found. The
+filepaths -- relative paths to files (not just directory paths) -- appear in this list in lowest-to-highest priority.
+
+The highest priority is to look in the current directory.
+
+ 'typemap'
+
+The second and third highest priorities are to look in the parent of the
+current directory and a directory called F<lib/ExtUtils> underneath the parent
+directory.
+
+ '../typemap',
+ '../lib/ExtUtils/typemap',
+
+The fourth through ninth highest priorities are to look in the corresponding
+grandparent, great-grandparent and great-great-grandparent directories.
+
+ '../../typemap',
+ '../../lib/ExtUtils/typemap',
+ '../../../typemap',
+ '../../../lib/ExtUtils/typemap',
+ '../../../../typemap',
+ '../../../../lib/ExtUtils/typemap',
+
+The tenth and subsequent priorities are to look in directories named
+F<ExtUtils> which are subdirectories of directories found in C<@INC> --
+I<provided> a file named F<typemap> actually exists in such a directory.
+Example:
+
+ '/usr/local/lib/perl5/5.10.1/ExtUtils/typemap',
+
+However, these filepaths appear in the list returned by
+C<standard_typemap_locations()> in reverse order, I<i.e.>, lowest-to-highest.
+
+ '/usr/local/lib/perl5/5.10.1/ExtUtils/typemap',
+ '../../../../lib/ExtUtils/typemap',
+ '../../../../typemap',
+ '../../../lib/ExtUtils/typemap',
+ '../../../typemap',
+ '../../lib/ExtUtils/typemap',
+ '../../typemap',
+ '../lib/ExtUtils/typemap',
+ '../typemap',
+ 'typemap'
+
+=item * Arguments
+
+ my @stl = standard_typemap_locations( \@INC );
+
+Reference to C<@INC>.
+
+=item * Return Value
+
+Array holding list of directories to be searched for F<typemap> files.
+
+=back
+
+=cut
+
+sub standard_typemap_locations {
+ my $include_ref = shift;
+ my @tm = qw(typemap);
+
+ my $updir = File::Spec->updir();
+ foreach my $dir (
+ File::Spec->catdir(($updir) x 1),
+ File::Spec->catdir(($updir) x 2),
+ File::Spec->catdir(($updir) x 3),
+ File::Spec->catdir(($updir) x 4),
+ ) {
+ unshift @tm, File::Spec->catfile($dir, 'typemap');
+ unshift @tm, File::Spec->catfile($dir, lib => ExtUtils => 'typemap');
+ }
+ foreach my $dir (@{ $include_ref}) {
+ my $file = File::Spec->catfile($dir, ExtUtils => 'typemap');
+ unshift @tm, $file if -e $file;
+ }
+ return @tm;
+}
+
+=head2 C<trim_whitespace()>
+
+=over 4
+
+=item * Purpose
+
+Perform an in-place trimming of leading and trailing whitespace from the
+first argument provided to the function.
+
+=item * Argument
+
+ trim_whitespace($arg);
+
+=item * Return Value
+
+None. Remember: this is an I<in-place> modification of the argument.
+
+=back
+
+=cut
+
+sub trim_whitespace {
+ $_[0] =~ s/^\s+|\s+$//go;
+}
+
+=head2 C<tidy_type()>
+
+=over 4
+
+=item * Purpose
+
+Rationalize any asterisks (C<*>) by joining them into bunches, removing
+interior whitespace, then trimming leading and trailing whitespace.
+
+=item * Arguments
+
+ ($ret_type) = tidy_type($_);
+
+String to be cleaned up.
+
+=item * Return Value
+
+String cleaned up.
+
+=back
+
+=cut
+
+sub tidy_type {
+ local ($_) = @_;
+
+ # rationalise any '*' by joining them into bunches and removing whitespace
+ s#\s*(\*+)\s*#$1#g;
+ s#(\*+)# $1 #g;
+
+ # change multiple whitespace into a single space
+ s/\s+/ /g;
+
+ # trim leading & trailing whitespace
+ trim_whitespace($_);
+
+ $_;
+}
+
+=head2 C<C_string()>
+
+=over 4
+
+=item * Purpose
+
+Escape backslashes (C<\>) in prototype strings.
+
+=item * Arguments
+
+ $ProtoThisXSUB = C_string($_);
+
+String needing escaping.
+
+=item * Return Value
+
+Properly escaped string.
+
+=back
+
+=cut
+
+sub C_string {
+ my($string) = @_;
+
+ $string =~ s[\\][\\\\]g;
+ $string;
+}
+
+=head2 C<valid_proto_string()>
+
+=over 4
+
+=item * Purpose
+
+Validate prototype string.
+
+=item * Arguments
+
+String needing checking.
+
+=item * Return Value
+
+Upon success, returns the same string passed as argument.
+
+Upon failure, returns C<0>.
+
+=back
+
+=cut
+
+sub valid_proto_string {
+ my($string) = @_;
+
+ if ( $string =~ /^$ExtUtils::ParseXS::Constants::PrototypeRegexp+$/ ) {
+ return $string;
+ }
+
+ return 0;
+}
+
+=head2 C<process_typemaps()>
+
+=over 4
+
+=item * Purpose
+
+Process all typemap files.
+
+=item * Arguments
+
+ my $typemaps_object = process_typemaps( $args{typemap}, $pwd );
+
+List of two elements: C<typemap> element from C<%args>; current working
+directory.
+
+=item * Return Value
+
+Upon success, returns an L<ExtUtils::Typemaps> object.
+
+=back
+
+=cut
+
+sub process_typemaps {
+ my ($tmap, $pwd) = @_;
+
+ my @tm = ref $tmap ? @{$tmap} : ($tmap);
+
+ foreach my $typemap (@tm) {
+ die "Can't find $typemap in $pwd\n" unless -r $typemap;
+ }
+
+ push @tm, standard_typemap_locations( \@INC );
+
+ require ExtUtils::Typemaps;
+ my $typemap = ExtUtils::Typemaps->new;
+ foreach my $typemap_loc (@tm) {
+ next unless -f $typemap_loc;
+ # skip directories, binary files etc.
+ warn("Warning: ignoring non-text typemap file '$typemap_loc'\n"), next
+ unless -T $typemap_loc;
+
+ $typemap->merge(file => $typemap_loc, replace => 1);
+ }
+
+ return $typemap;
+}
+
+=head2 C<make_targetable()>
+
+=over 4
+
+=item * Purpose
+
+Populate C<%targetable>. This constitutes a refinement of the output of
+C<process_typemaps()> with respect to its fourth output, C<$output_expr_ref>.
+
+=item * Arguments
+
+ %targetable = make_targetable($output_expr_ref);
+
+Single hash reference: the fourth such ref returned by C<process_typemaps()>.
+
+=item * Return Value
+
+Hash.
+
+=back
+
+=cut
+
+sub make_targetable {
+ my $output_expr_ref = shift;
+
+ our $bal; # ()-balanced
+ $bal = qr[
+ (?:
+ (?>[^()]+)
+ |
+ \( (??{ $bal }) \)
+ )*
+ ]x;
+
+ # matches variations on (SV*)
+ my $sv_cast = qr[
+ (?:
+ \( \s* SV \s* \* \s* \) \s*
+ )?
+ ]x;
+
+ my $size = qr[ # Third arg (to setpvn)
+ , \s* (??{ $bal })
+ ]x;
+
+ my %targetable;
+ foreach my $key (keys %{ $output_expr_ref }) {
+ # We can still bootstrap compile 're', because in code re.pm is
+ # available to miniperl, and does not attempt to load the XS code.
+ use re 'eval';
+
+ my ($type, $with_size, $arg, $sarg) =
+ ($output_expr_ref->{$key} =~
+ m[^
+ \s+
+ sv_set([iunp])v(n)? # Type, is_setpvn
+ \s*
+ \( \s*
+ $sv_cast \$arg \s* , \s*
+ ( (??{ $bal }) ) # Set from
+ ( (??{ $size }) )? # Possible sizeof set-from
+ \) \s* ; \s* $
+ ]x
+ );
+ $targetable{$key} = [$type, $with_size, $arg, $sarg] if $type;
+ }
+ return %targetable;
+}
+
+=head2 C<map_type()>
+
+=over 4
+
+=item * Purpose
+
+Performs a mapping at several places inside C<PARAGRAPH> loop.
+
+=item * Arguments
+
+ $type = map_type($self, $type, $varname);
+
+List of three arguments.
+
+=item * Return Value
+
+String holding augmented version of second argument.
+
+=back
+
+=cut
+
+sub map_type {
+ my ($self, $type, $varname) = @_;
+
+ # C++ has :: in types too so skip this
+ $type =~ tr/:/_/ unless $self->{hiertype};
+ $type =~ s/^array\(([^,]*),(.*)\).*/$1 */s;
+ if ($varname) {
+ if ($type =~ / \( \s* \* (?= \s* \) ) /xg) {
+ (substr $type, pos $type, 0) = " $varname ";
+ }
+ else {
+ $type .= "\t$varname";
+ }
+ }
+ return $type;
+}
+
+=head2 C<standard_XS_defs()>
+
+=over 4
+
+=item * Purpose
+
+Writes to the C<.c> output file certain preprocessor directives and function
+headers needed in all such files.
+
+=item * Arguments
+
+None.
+
+=item * Return Value
+
+Returns true.
+
+=back
+
+=cut
+
+sub standard_XS_defs {
+ print <<"EOF";
+#ifndef PERL_UNUSED_VAR
+# define PERL_UNUSED_VAR(var) if (0) var = var
+#endif
+
+#ifndef dVAR
+# define dVAR dNOOP
+#endif
+
+
+/* This stuff is not part of the API! You have been warned. */
+#ifndef PERL_VERSION_DECIMAL
+# define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
+#endif
+#ifndef PERL_DECIMAL_VERSION
+# define PERL_DECIMAL_VERSION \\
+ PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
+#endif
+#ifndef PERL_VERSION_GE
+# define PERL_VERSION_GE(r,v,s) \\
+ (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
+#endif
+#ifndef PERL_VERSION_LE
+# define PERL_VERSION_LE(r,v,s) \\
+ (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
+#endif
+
+/* XS_INTERNAL is the explicit static-linkage variant of the default
+ * XS macro.
+ *
+ * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
+ * "STATIC", ie. it exports XSUB symbols. You probably don't want that
+ * for anything but the BOOT XSUB.
+ *
+ * See XSUB.h in core!
+ */
+
+
+/* TODO: This might be compatible further back than 5.10.0. */
+#if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
+# undef XS_EXTERNAL
+# undef XS_INTERNAL
+# if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
+# define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
+# define XS_INTERNAL(name) STATIC XSPROTO(name)
+# endif
+# if defined(__SYMBIAN32__)
+# define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
+# define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
+# endif
+# ifndef XS_EXTERNAL
+# if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
+# define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
+# define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
+# else
+# ifdef __cplusplus
+# define XS_EXTERNAL(name) extern "C" XSPROTO(name)
+# define XS_INTERNAL(name) static XSPROTO(name)
+# else
+# define XS_EXTERNAL(name) XSPROTO(name)
+# define XS_INTERNAL(name) STATIC XSPROTO(name)
+# endif
+# endif
+# endif
+#endif
+
+/* perl >= 5.10.0 && perl <= 5.15.1 */
+
+
+/* The XS_EXTERNAL macro is used for functions that must not be static
+ * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
+ * macro defined, the best we can do is assume XS is the same.
+ * Dito for XS_INTERNAL.
+ */
+#ifndef XS_EXTERNAL
+# define XS_EXTERNAL(name) XS(name)
+#endif
+#ifndef XS_INTERNAL
+# define XS_INTERNAL(name) XS(name)
+#endif
+
+/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
+ * internal macro that we're free to redefine for varying linkage due
+ * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
+ * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
+ */
+
+#undef XS_EUPXS
+#if defined(PERL_EUPXS_ALWAYS_EXPORT)
+# define XS_EUPXS(name) XS_EXTERNAL(name)
+#else
+ /* default to internal */
+# define XS_EUPXS(name) XS_INTERNAL(name)
+#endif
+
+EOF
+
+ print <<"EOF";
+#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
+#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
+
+/* prototype to pass -Wmissing-prototypes */
+STATIC void
+S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params);
+
+STATIC void
+S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params)
+{
+ const GV *const gv = CvGV(cv);
+
+ PERL_ARGS_ASSERT_CROAK_XS_USAGE;
+
+ if (gv) {
+ const char *const gvname = GvNAME(gv);
+ const HV *const stash = GvSTASH(gv);
+ const char *const hvname = stash ? HvNAME(stash) : NULL;
+
+ if (hvname)
+ Perl_croak(aTHX_ "Usage: %s::%s(%s)", hvname, gvname, params);
+ else
+ Perl_croak(aTHX_ "Usage: %s(%s)", gvname, params);
+ } else {
+ /* Pants. I don't think that it should be possible to get here. */
+ Perl_croak(aTHX_ "Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params);
+ }
+}
+#undef PERL_ARGS_ASSERT_CROAK_XS_USAGE
+
+#ifdef PERL_IMPLICIT_CONTEXT
+#define croak_xs_usage(a,b) S_croak_xs_usage(aTHX_ a,b)
+#else
+#define croak_xs_usage S_croak_xs_usage
+#endif
+
+#endif
+
+/* NOTE: the prototype of newXSproto() is different in versions of perls,
+ * so we define a portable version of newXSproto()
+ */
+#ifdef newXS_flags
+#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
+#else
+#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
+#endif /* !defined(newXS_flags) */
+
+EOF
+ return 1;
+}
+
+=head2 C<assign_func_args()>
+
+=over 4
+
+=item * Purpose
+
+Perform assignment to the C<func_args> attribute.
+
+=item * Arguments
+
+ $string = assign_func_args($self, $argsref, $class);
+
+List of three elements. Second is an array reference; third is a string.
+
+=item * Return Value
+
+String.
+
+=back
+
+=cut
+
+sub assign_func_args {
+ my ($self, $argsref, $class) = @_;
+ my @func_args = @{$argsref};
+ shift @func_args if defined($class);
+
+ for my $arg (@func_args) {
+ $arg =~ s/^/&/ if $self->{in_out}->{$arg};
+ }
+ return join(", ", @func_args);
+}
+
+=head2 C<analyze_preprocessor_statements()>
+
+=over 4
+
+=item * Purpose
+
+Within each function inside each Xsub, print to the F<.c> output file certain
+preprocessor statements.
+
+=item * Arguments
+
+ ( $self, $XSS_work_idx, $BootCode_ref ) =
+ analyze_preprocessor_statements(
+ $self, $statement, $XSS_work_idx, $BootCode_ref
+ );
+
+List of four elements.
+
+=item * Return Value
+
+Modifed values of three of the arguments passed to the function. In
+particular, the C<XSStack> and C<InitFileCode> attributes are modified.
+
+=back
+
+=cut
+
+sub analyze_preprocessor_statements {
+ my ($self, $statement, $XSS_work_idx, $BootCode_ref) = @_;
+
+ if ($statement eq 'if') {
+ $XSS_work_idx = @{ $self->{XSStack} };
+ push(@{ $self->{XSStack} }, {type => 'if'});
+ }
+ else {
+ $self->death("Error: '$statement' with no matching 'if'")
+ if $self->{XSStack}->[-1]{type} ne 'if';
+ if ($self->{XSStack}->[-1]{varname}) {
+ push(@{ $self->{InitFileCode} }, "#endif\n");
+ push(@{ $BootCode_ref }, "#endif");
+ }
+
+ my(@fns) = keys %{$self->{XSStack}->[-1]{functions}};
+ if ($statement ne 'endif') {
+ # Hide the functions defined in other #if branches, and reset.
+ @{$self->{XSStack}->[-1]{other_functions}}{@fns} = (1) x @fns;
+ @{$self->{XSStack}->[-1]}{qw(varname functions)} = ('', {});
+ }
+ else {
+ my($tmp) = pop(@{ $self->{XSStack} });
+ 0 while (--$XSS_work_idx
+ && $self->{XSStack}->[$XSS_work_idx]{type} ne 'if');
+ # Keep all new defined functions
+ push(@fns, keys %{$tmp->{other_functions}});
+ @{$self->{XSStack}->[$XSS_work_idx]{functions}}{@fns} = (1) x @fns;
+ }
+ }
+ return ($self, $XSS_work_idx, $BootCode_ref);
+}
+
+=head2 C<set_cond()>
+
+=over 4
+
+=item * Purpose
+
+=item * Arguments
+
+=item * Return Value
+
+=back
+
+=cut
+
+sub set_cond {
+ my ($ellipsis, $min_args, $num_args) = @_;
+ my $cond;
+ if ($ellipsis) {
+ $cond = ($min_args ? qq(items < $min_args) : 0);
+ }
+ elsif ($min_args == $num_args) {
+ $cond = qq(items != $min_args);
+ }
+ else {
+ $cond = qq(items < $min_args || items > $num_args);
+ }
+ return $cond;
+}
+
+=head2 C<current_line_number()>
+
+=over 4
+
+=item * Purpose
+
+Figures out the current line number in the XS file.
+
+=item * Arguments
+
+C<$self>
+
+=item * Return Value
+
+The current line number.
+
+=back
+
+=cut
+
+sub current_line_number {
+ my $self = shift;
+ my $line_number = $self->{line_no}->[@{ $self->{line_no} } - @{ $self->{line} } -1];
+ return $line_number;
+}
+
+=head2 C<Warn()>
+
+=over 4
+
+=item * Purpose
+
+=item * Arguments
+
+=item * Return Value
+
+=back
+
+=cut
+
+sub Warn {
+ my $self = shift;
+ my $warn_line_number = $self->current_line_number();
+ print STDERR "@_ in $self->{filename}, line $warn_line_number\n";
+}
+
+=head2 C<blurt()>
+
+=over 4
+
+=item * Purpose
+
+=item * Arguments
+
+=item * Return Value
+
+=back
+
+=cut
+
+sub blurt {
+ my $self = shift;
+ $self->Warn(@_);
+ $self->{errors}++
+}
+
+=head2 C<death()>
+
+=over 4
+
+=item * Purpose
+
+=item * Arguments
+
+=item * Return Value
+
+=back
+
+=cut
+
+sub death {
+ my $self = shift;
+ $self->Warn(@_);
+ exit 1;
+}
+
+=head2 C<check_conditional_preprocessor_statements()>
+
+=over 4
+
+=item * Purpose
+
+=item * Arguments
+
+=item * Return Value
+
+=back
+
+=cut
+
+sub check_conditional_preprocessor_statements {
+ my ($self) = @_;
+ my @cpp = grep(/^\#\s*(?:if|e\w+)/, @{ $self->{line} });
+ if (@cpp) {
+ my $cpplevel;
+ for my $cpp (@cpp) {
+ if ($cpp =~ /^\#\s*if/) {
+ $cpplevel++;
+ }
+ elsif (!$cpplevel) {
+ $self->Warn("Warning: #else/elif/endif without #if in this function");
+ print STDERR " (precede it with a blank line if the matching #if is outside the function)\n"
+ if $self->{XSStack}->[-1]{type} eq 'if';
+ return;
+ }
+ elsif ($cpp =~ /^\#\s*endif/) {
+ $cpplevel--;
+ }
+ }
+ $self->Warn("Warning: #if without #endif in this function") if $cpplevel;
+ }
+}
+
+=head2 C<escape_file_for_line_directive()>
+
+=over 4
+
+=item * Purpose
+
+Escapes a given code source name (typically a file name but can also
+be a command that was read from) so that double-quotes and backslashes are escaped.
+
+=item * Arguments
+
+A string.
+
+=item * Return Value
+
+A string with escapes for double-quotes and backslashes.
+
+=back
+
+=cut
+
+sub escape_file_for_line_directive {
+ my $string = shift;
+ $string =~ s/\\/\\\\/g;
+ $string =~ s/"/\\"/g;
+ return $string;
+}
+
+=head2 C<report_typemap_failure>
+
+=over 4
+
+=item * Purpose
+
+Do error reporting for missing typemaps.
+
+=item * Arguments
+
+The C<ExtUtils::ParseXS> object.
+
+An C<ExtUtils::Typemaps> object.
+
+The string that represents the C type that was not found in the typemap.
+
+Optionally, the string C<death> or C<blurt> to choose
+whether the error is immediately fatal or not. Default: C<blurt>
+
+=item * Return Value
+
+Returns nothing. Depending on the arguments, this
+may call C<death> or C<blurt>, the former of which is
+fatal.
+
+=back
+
+=cut
+
+sub report_typemap_failure {
+ my ($self, $tm, $ctype, $error_method) = @_;
+ $error_method ||= 'blurt';
+
+ my @avail_ctypes = $tm->list_mapped_ctypes;
+
+ my $err = "Could not find a typemap for C type '$ctype'.\n"
+ . "The following C types are mapped by the current typemap:\n'"
+ . join("', '", @avail_ctypes) . "'\n";
+
+ $self->$error_method($err);
+ return();
+}
+
+1;
+
+# vim: ts=2 sw=2 et:
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pod
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pod (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,161 @@
+=head1 NAME
+
+ExtUtils::ParseXS - converts Perl XS code into C code
+
+=head1 SYNOPSIS
+
+ use ExtUtils::ParseXS qw(process_file);
+
+ process_file( filename => 'foo.xs' );
+
+ process_file( filename => 'foo.xs',
+ output => 'bar.c',
+ 'C++' => 1,
+ typemap => 'path/to/typemap',
+ hiertype => 1,
+ except => 1,
+ prototypes => 1,
+ versioncheck => 1,
+ linenumbers => 1,
+ optimize => 1,
+ prototypes => 1,
+ );
+
+=head1 DESCRIPTION
+
+C<ExtUtils::ParseXS> will compile XS code into C code by embedding the constructs
+necessary to let C functions manipulate Perl values and creates the glue
+necessary to let Perl access those functions. The compiler uses typemaps to
+determine how to map C function parameters and variables to Perl values.
+
+The compiler will search for typemap files called I<typemap>. It will use
+the following search path to find default typemaps, with the rightmost
+typemap taking precedence.
+
+ ../../../typemap:../../typemap:../typemap:typemap
+
+=head1 EXPORT
+
+None by default. C<process_file()> may be exported upon request.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item process_file()
+
+This function processes an XS file and sends output to a C file.
+Named parameters control how the processing is done. The following
+parameters are accepted:
+
+=over 4
+
+=item B<C++>
+
+Adds C<extern "C"> to the C code. Default is false.
+
+=item B<hiertype>
+
+Retains C<::> in type names so that C++ hierarchical types can be
+mapped. Default is false.
+
+=item B<except>
+
+Adds exception handling stubs to the C code. Default is false.
+
+=item B<typemap>
+
+Indicates that a user-supplied typemap should take precedence over the
+default typemaps. A single typemap may be specified as a string, or
+multiple typemaps can be specified in an array reference, with the
+last typemap having the highest precedence.
+
+=item B<prototypes>
+
+Generates prototype code for all xsubs. Default is false.
+
+=item B<versioncheck>
+
+Makes sure at run time that the object file (derived from the C<.xs>
+file) and the C<.pm> files have the same version number. Default is
+true.
+
+=item B<linenumbers>
+
+Adds C<#line> directives to the C output so error messages will look
+like they came from the original XS file. Default is true.
+
+=item B<optimize>
+
+Enables certain optimizations. The only optimization that is currently
+affected is the use of I<target>s by the output C code (see L<perlguts>).
+Not optimizing may significantly slow down the generated code, but this is the way
+B<xsubpp> of 5.005 and earlier operated. Default is to optimize.
+
+=item B<inout>
+
+Enable recognition of C<IN>, C<OUT_LIST> and C<INOUT_LIST>
+declarations. Default is true.
+
+=item B<argtypes>
+
+Enable recognition of ANSI-like descriptions of function signature.
+Default is true.
+
+=item B<s>
+
+I<Maintainer note:> I have no clue what this does. Strips function prefixes?
+
+=back
+
+=item errors()
+
+This function returns the number of [a certain kind of] errors
+encountered during processing of the XS file.
+
+=back
+
+=head1 AUTHOR
+
+Based on xsubpp code, written by Larry Wall.
+
+Maintained by:
+
+=over 4
+
+=item *
+
+Ken Williams, <ken at mathforum.org>
+
+=item *
+
+David Golden, <dagolden at cpan.org>
+
+=item *
+
+James Keenan, <jkeenan at cpan.org>
+
+=item *
+
+Steffen Mueller, <smueller at cpan.org>
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright 2002-2012 by Ken Williams, David Golden and other contributors. All
+rights reserved.
+
+This library is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+Based on the C<ExtUtils::xsubpp> code by Larry Wall and the Perl 5
+Porters, which was released under the same license terms.
+
+=head1 SEE ALSO
+
+L<perl>, ExtUtils::xsubpp, ExtUtils::MakeMaker, L<perlxs>, L<perlxstut>.
+
+=cut
+
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Cmd.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Cmd.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Cmd.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,168 @@
+package ExtUtils::Typemaps::Cmd;
+use 5.006001;
+use strict;
+use warnings;
+our $VERSION = '3.18';
+
+use ExtUtils::Typemaps;
+
+require Exporter;
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(embeddable_typemap);
+our %EXPORT_TAGS = (all => \@EXPORT);
+
+sub embeddable_typemap {
+ my @tms = @_;
+
+ # Get typemap objects
+ my @tm_objs = map [$_, _intuit_typemap_source($_)], @tms;
+
+ # merge or short-circuit
+ my $final_tm;
+ if (@tm_objs == 1) {
+ # just one, merge would be pointless
+ $final_tm = shift(@tm_objs)->[1];
+ }
+ else {
+ # multiple, need merge
+ $final_tm = ExtUtils::Typemaps->new;
+ foreach my $other_tm (@tm_objs) {
+ my ($tm_ident, $tm_obj) = @$other_tm;
+ eval {
+ $final_tm->merge(typemap => $tm_obj);
+ 1
+ } or do {
+ my $err = $@ || 'Zombie error';
+ die "Failed to merge typ";
+ }
+ }
+ }
+
+ # stringify for embedding
+ return $final_tm->as_embedded_typemap();
+}
+
+sub _load_module {
+ my $name = shift;
+ return eval "require $name; 1";
+}
+
+SCOPE: {
+ my %sources = (
+ module => sub {
+ my $ident = shift;
+ my $tm;
+ if (/::/) { # looks like FQ module name, try that first
+ foreach my $module ($ident, "ExtUtils::Typemaps::$ident") {
+ if (_load_module($module)) {
+ eval { $tm = $module->new }
+ and return $tm;
+ }
+ }
+ }
+ else {
+ foreach my $module ("ExtUtils::Typemaps::$ident", "$ident") {
+ if (_load_module($module)) {
+ eval { $tm = $module->new }
+ and return $tm;
+ }
+ }
+ }
+ return();
+ },
+ file => sub {
+ my $ident = shift;
+ return unless -e $ident and -r _;
+ return ExtUtils::Typemaps->new(file => $ident);
+ },
+ );
+ # Try to find typemap either from module or file
+ sub _intuit_typemap_source {
+ my $identifier = shift;
+
+ my @locate_attempts;
+ if ($identifier =~ /::/ || $identifier !~ /[^\w_]/) {
+ @locate_attempts = qw(module file);
+ }
+ else {
+ @locate_attempts = qw(file module);
+ }
+
+ foreach my $source (@locate_attempts) {
+ my $tm = $sources{$source}->($identifier);
+ return $tm if defined $tm;
+ }
+
+ die "Unable to find typemap for '$identifier': "
+ . "Tried to load both as file or module and failed.\n";
+ }
+} # end SCOPE
+
+=head1 NAME
+
+ExtUtils::Typemaps::Cmd - Quick commands for handling typemaps
+
+=head1 SYNOPSIS
+
+From XS:
+
+ INCLUDE_COMMAND: $^X -MExtUtils::Typemaps::Cmd \
+ -e "print embeddable_typemap(q{Excommunicated})"
+
+Loads C<ExtUtils::Typemaps::Excommunicated>, instantiates an object,
+and dumps it as an embeddable typemap for use directly in your XS file.
+
+=head1 DESCRIPTION
+
+This is a helper module for L<ExtUtils::Typemaps> for quick
+one-liners, specifically for inclusion of shared typemaps
+that live on CPAN into an XS file (see SYNOPSIS).
+
+For this reason, the following functions are exported by default:
+
+=head1 EXPORTED FUNCTIONS
+
+=head2 embeddable_typemap
+
+Given a list of identifiers, C<embeddable_typemap>
+tries to load typemaps from a file of the given name(s),
+or from a module that is an C<ExtUtils::Typemaps> subclass.
+
+Returns a string representation of the merged typemaps that can
+be included verbatim into XS. Example:
+
+ print embeddable_typemap(
+ "Excommunicated", "ExtUtils::Typemaps::Basic", "./typemap"
+ );
+
+This will try to load a module C<ExtUtils::Typemaps::Excommunicated>
+and use it as an C<ExtUtils::Typemaps> subclass. If that fails, it'll
+try loading C<Excommunicated> as a module, if that fails, it'll try to
+read a file called F<Excommunicated>. It'll work similarly for the
+second argument, but the third will be loaded as a file first.
+
+After loading all typemap files or modules, it will merge them in the
+specified order and dump the result as an embeddable typemap.
+
+=head1 SEE ALSO
+
+L<ExtUtils::Typemaps>
+
+L<perlxs>
+
+=head1 AUTHOR
+
+Steffen Mueller C<<smueller at cpan.org>>
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2012 Steffen Mueller
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+1;
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/InputMap.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/InputMap.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/InputMap.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,116 @@
+package ExtUtils::Typemaps::InputMap;
+use 5.006001;
+use strict;
+use warnings;
+our $VERSION = '3.18';
+
+=head1 NAME
+
+ExtUtils::Typemaps::InputMap - Entry in the INPUT section of a typemap
+
+=head1 SYNOPSIS
+
+ use ExtUtils::Typemaps;
+ ...
+ my $input = $typemap->get_input_map('T_NV');
+ my $code = $input->code();
+ $input->code("...");
+
+=head1 DESCRIPTION
+
+Refer to L<ExtUtils::Typemaps> for details.
+
+=head1 METHODS
+
+=cut
+
+=head2 new
+
+Requires C<xstype> and C<code> parameters.
+
+=cut
+
+sub new {
+ my $prot = shift;
+ my $class = ref($prot)||$prot;
+ my %args = @_;
+
+ if (!ref($prot)) {
+ if (not defined $args{xstype} or not defined $args{code}) {
+ die("Need xstype and code parameters");
+ }
+ }
+
+ my $self = bless(
+ (ref($prot) ? {%$prot} : {})
+ => $class
+ );
+
+ $self->{xstype} = $args{xstype} if defined $args{xstype};
+ $self->{code} = $args{code} if defined $args{code};
+ $self->{code} =~ s/^(?=\S)/\t/mg;
+
+ return $self;
+}
+
+=head2 code
+
+Returns or sets the INPUT mapping code for this entry.
+
+=cut
+
+sub code {
+ $_[0]->{code} = $_[1] if @_ > 1;
+ return $_[0]->{code};
+}
+
+=head2 xstype
+
+Returns the name of the XS type of the INPUT map.
+
+=cut
+
+sub xstype {
+ return $_[0]->{xstype};
+}
+
+=head2 cleaned_code
+
+Returns a cleaned-up copy of the code to which certain transformations
+have been applied to make it more ANSI compliant.
+
+=cut
+
+sub cleaned_code {
+ my $self = shift;
+ my $code = $self->code;
+
+ $code =~ s/(?:;+\s*|;*\s+)\z//s;
+
+ # Move C pre-processor instructions to column 1 to be strictly ANSI
+ # conformant. Some pre-processors are fussy about this.
+ $code =~ s/^\s+#/#/mg;
+ $code =~ s/\s*\z/\n/;
+
+ return $code;
+}
+
+=head1 SEE ALSO
+
+L<ExtUtils::Typemaps>
+
+=head1 AUTHOR
+
+Steffen Mueller C<<smueller at cpan.org>>
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2009, 2010, 2011, 2012 Steffen Mueller
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+1;
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/OutputMap.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,195 @@
+package ExtUtils::Typemaps::OutputMap;
+use 5.006001;
+use strict;
+use warnings;
+our $VERSION = '3.18';
+
+=head1 NAME
+
+ExtUtils::Typemaps::OutputMap - Entry in the OUTPUT section of a typemap
+
+=head1 SYNOPSIS
+
+ use ExtUtils::Typemaps;
+ ...
+ my $output = $typemap->get_output_map('T_NV');
+ my $code = $output->code();
+ $output->code("...");
+
+=head1 DESCRIPTION
+
+Refer to L<ExtUtils::Typemaps> for details.
+
+=head1 METHODS
+
+=cut
+
+=head2 new
+
+Requires C<xstype> and C<code> parameters.
+
+=cut
+
+sub new {
+ my $prot = shift;
+ my $class = ref($prot)||$prot;
+ my %args = @_;
+
+ if (!ref($prot)) {
+ if (not defined $args{xstype} or not defined $args{code}) {
+ die("Need xstype and code parameters");
+ }
+ }
+
+ my $self = bless(
+ (ref($prot) ? {%$prot} : {})
+ => $class
+ );
+
+ $self->{xstype} = $args{xstype} if defined $args{xstype};
+ $self->{code} = $args{code} if defined $args{code};
+ $self->{code} =~ s/^(?=\S)/\t/mg;
+
+ return $self;
+}
+
+=head2 code
+
+Returns or sets the OUTPUT mapping code for this entry.
+
+=cut
+
+sub code {
+ $_[0]->{code} = $_[1] if @_ > 1;
+ return $_[0]->{code};
+}
+
+=head2 xstype
+
+Returns the name of the XS type of the OUTPUT map.
+
+=cut
+
+sub xstype {
+ return $_[0]->{xstype};
+}
+
+=head2 cleaned_code
+
+Returns a cleaned-up copy of the code to which certain transformations
+have been applied to make it more ANSI compliant.
+
+=cut
+
+sub cleaned_code {
+ my $self = shift;
+ my $code = $self->code;
+
+ # Move C pre-processor instructions to column 1 to be strictly ANSI
+ # conformant. Some pre-processors are fussy about this.
+ $code =~ s/^\s+#/#/mg;
+ $code =~ s/\s*\z/\n/;
+
+ return $code;
+}
+
+=head2 targetable
+
+This is an obscure optimization that used to live in C<ExtUtils::ParseXS>
+directly.
+
+In a nutshell, this will check whether the output code
+involves calling C<set_iv>, C<set_uv>, C<set_nv>, C<set_pv> or C<set_pvn>
+to set the special C<$arg> placeholder to a new value
+B<AT THE END OF THE OUTPUT CODE>. If that is the case, the code is
+eligible for using the C<TARG>-related macros to optimize this.
+Thus the name of the method: C<targetable>.
+
+If the optimization can not be applied, this returns undef.
+If it can be applied, this method returns a hash reference containing
+the following information:
+
+ type: Any of the characters i, u, n, p
+ with_size: Bool indicating whether this is the sv_setpvn variant
+ what: The code that actually evaluates to the output scalar
+ what_size: If "with_size", this has the string length (as code,
+ not constant)
+
+=cut
+
+sub targetable {
+ my $self = shift;
+ return $self->{targetable} if exists $self->{targetable};
+
+ our $bal; # ()-balanced
+ $bal = qr[
+ (?:
+ (?>[^()]+)
+ |
+ \( (??{ $bal }) \)
+ )*
+ ]x;
+
+ # matches variations on (SV*)
+ my $sv_cast = qr[
+ (?:
+ \( \s* SV \s* \* \s* \) \s*
+ )?
+ ]x;
+
+ my $size = qr[ # Third arg (to setpvn)
+ , \s* (??{ $bal })
+ ]x;
+
+ my $code = $self->code;
+
+ # We can still bootstrap compile 're', because in code re.pm is
+ # available to miniperl, and does not attempt to load the XS code.
+ use re 'eval';
+
+ my ($type, $with_size, $arg, $sarg) =
+ ($code =~
+ m[^
+ \s+
+ sv_set([iunp])v(n)? # Type, is_setpvn
+ \s*
+ \( \s*
+ $sv_cast \$arg \s* , \s*
+ ( (??{ $bal }) ) # Set from
+ ( (??{ $size }) )? # Possible sizeof set-from
+ \) \s* ; \s* $
+ ]x
+ );
+
+ my $rv = undef;
+ if ($type) {
+ $rv = {
+ type => $type,
+ with_size => $with_size,
+ what => $arg,
+ what_size => $sarg,
+ };
+ }
+ $self->{targetable} = $rv;
+ return $rv;
+}
+
+=head1 SEE ALSO
+
+L<ExtUtils::Typemaps>
+
+=head1 AUTHOR
+
+Steffen Mueller C<<smueller at cpan.org>>
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2009, 2010, 2011, 2012 Steffen Mueller
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+1;
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Type.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Type.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps/Type.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,121 @@
+package ExtUtils::Typemaps::Type;
+use 5.006001;
+use strict;
+use warnings;
+require ExtUtils::Typemaps;
+
+our $VERSION = '3.18';
+
+=head1 NAME
+
+ExtUtils::Typemaps::Type - Entry in the TYPEMAP section of a typemap
+
+=head1 SYNOPSIS
+
+ use ExtUtils::Typemaps;
+ ...
+ my $type = $typemap->get_type_map('char*');
+ my $input = $typemap->get_input_map($type->xstype);
+
+=head1 DESCRIPTION
+
+Refer to L<ExtUtils::Typemaps> for details.
+Object associates C<ctype> with C<xstype>, which is the index
+into the in- and output mapping tables.
+
+=head1 METHODS
+
+=cut
+
+=head2 new
+
+Requires C<xstype> and C<ctype> parameters.
+
+Optionally takes C<prototype> parameter.
+
+=cut
+
+sub new {
+ my $prot = shift;
+ my $class = ref($prot)||$prot;
+ my %args = @_;
+
+ if (!ref($prot)) {
+ if (not defined $args{xstype} or not defined $args{ctype}) {
+ die("Need xstype and ctype parameters");
+ }
+ }
+
+ my $self = bless(
+ (ref($prot) ? {%$prot} : {proto => ''})
+ => $class
+ );
+
+ $self->{xstype} = $args{xstype} if defined $args{xstype};
+ $self->{ctype} = $args{ctype} if defined $args{ctype};
+ $self->{tidy_ctype} = ExtUtils::Typemaps::_tidy_type($self->{ctype});
+ $self->{proto} = $args{'prototype'} if defined $args{'prototype'};
+
+ return $self;
+}
+
+=head2 proto
+
+Returns or sets the prototype.
+
+=cut
+
+sub proto {
+ $_[0]->{proto} = $_[1] if @_ > 1;
+ return $_[0]->{proto};
+}
+
+=head2 xstype
+
+Returns the name of the XS type that this C type is associated to.
+
+=cut
+
+sub xstype {
+ return $_[0]->{xstype};
+}
+
+=head2 ctype
+
+Returns the name of the C type as it was set on construction.
+
+=cut
+
+sub ctype {
+ return defined($_[0]->{ctype}) ? $_[0]->{ctype} : $_[0]->{tidy_ctype};
+}
+
+=head2 tidy_ctype
+
+Returns the canonicalized name of the C type.
+
+=cut
+
+sub tidy_ctype {
+ return $_[0]->{tidy_ctype};
+}
+
+=head1 SEE ALSO
+
+L<ExtUtils::Typemaps>
+
+=head1 AUTHOR
+
+Steffen Mueller C<<smueller at cpan.org>>
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2009, 2010, 2011, 2012 Steffen Mueller
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+1;
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1031 @@
+package ExtUtils::Typemaps;
+use 5.006001;
+use strict;
+use warnings;
+our $VERSION = '3.19';
+#use Carp qw(croak);
+
+require ExtUtils::ParseXS;
+require ExtUtils::ParseXS::Constants;
+require ExtUtils::Typemaps::InputMap;
+require ExtUtils::Typemaps::OutputMap;
+require ExtUtils::Typemaps::Type;
+
+=head1 NAME
+
+ExtUtils::Typemaps - Read/Write/Modify Perl/XS typemap files
+
+=head1 SYNOPSIS
+
+ # read/create file
+ my $typemap = ExtUtils::Typemaps->new(file => 'typemap');
+ # alternatively create an in-memory typemap
+ # $typemap = ExtUtils::Typemaps->new();
+ # alternatively create an in-memory typemap by parsing a string
+ # $typemap = ExtUtils::Typemaps->new(string => $sometypemap);
+
+ # add a mapping
+ $typemap->add_typemap(ctype => 'NV', xstype => 'T_NV');
+ $typemap->add_inputmap(
+ xstype => 'T_NV', code => '$var = ($type)SvNV($arg);'
+ );
+ $typemap->add_outputmap(
+ xstype => 'T_NV', code => 'sv_setnv($arg, (NV)$var);'
+ );
+ $typemap->add_string(string => $typemapstring);
+ # will be parsed and merged
+
+ # remove a mapping (same for remove_typemap and remove_outputmap...)
+ $typemap->remove_inputmap(xstype => 'SomeType');
+
+ # save a typemap to a file
+ $typemap->write(file => 'anotherfile.map');
+
+ # merge the other typemap into this one
+ $typemap->merge(typemap => $another_typemap);
+
+=head1 DESCRIPTION
+
+This module can read, modify, create and write Perl XS typemap files. If you don't know
+what a typemap is, please confer the L<perlxstut> and L<perlxs> manuals.
+
+The module is not entirely round-trip safe: For example it currently simply strips all comments.
+The order of entries in the maps is, however, preserved.
+
+We check for duplicate entries in the typemap, but do not check for missing
+C<TYPEMAP> entries for C<INPUTMAP> or C<OUTPUTMAP> entries since these might be hidden
+in a different typemap.
+
+=head1 METHODS
+
+=cut
+
+=head2 new
+
+Returns a new typemap object. Takes an optional C<file> parameter.
+If set, the given file will be read. If the file doesn't exist, an empty typemap
+is returned.
+
+Alternatively, if the C<string> parameter is given, the supplied
+string will be parsed instead of a file.
+
+=cut
+
+sub new {
+ my $class = shift;
+ my %args = @_;
+
+ if (defined $args{file} and defined $args{string}) {
+ die("Cannot handle both 'file' and 'string' arguments to constructor");
+ }
+
+ my $self = bless {
+ file => undef,
+ %args,
+ typemap_section => [],
+ typemap_lookup => {},
+ input_section => [],
+ input_lookup => {},
+ output_section => [],
+ output_lookup => {},
+ } => $class;
+
+ $self->_init();
+
+ return $self;
+}
+
+sub _init {
+ my $self = shift;
+ if (defined $self->{string}) {
+ $self->_parse(\($self->{string}), $self->{lineno_offset}, $self->{fake_filename});
+ delete $self->{string};
+ }
+ elsif (defined $self->{file} and -e $self->{file}) {
+ open my $fh, '<', $self->{file}
+ or die "Cannot open typemap file '"
+ . $self->{file} . "' for reading: $!";
+ local $/ = undef;
+ my $string = <$fh>;
+ $self->_parse(\$string, $self->{lineno_offset}, $self->{file});
+ }
+}
+
+=head2 file
+
+Get/set the file that the typemap is written to when the
+C<write> method is called.
+
+=cut
+
+sub file {
+ $_[0]->{file} = $_[1] if @_ > 1;
+ $_[0]->{file}
+}
+
+=head2 add_typemap
+
+Add a C<TYPEMAP> entry to the typemap.
+
+Required named arguments: The C<ctype> (e.g. C<ctype =E<gt> 'double'>)
+and the C<xstype> (e.g. C<xstype =E<gt> 'T_NV'>).
+
+Optional named arguments: C<replace =E<gt> 1> forces removal/replacement of
+existing C<TYPEMAP> entries of the same C<ctype>. C<skip =E<gt> 1>
+triggers a I<"first come first serve"> logic by which new entries that conflict
+with existing entries are silently ignored.
+
+As an alternative to the named parameters usage, you may pass in
+an C<ExtUtils::Typemaps::Type> object as first argument, a copy of which will be
+added to the typemap. In that case, only the C<replace> or C<skip> named parameters
+may be used after the object. Example:
+
+ $map->add_typemap($type_obj, replace => 1);
+
+=cut
+
+sub add_typemap {
+ my $self = shift;
+ my $type;
+ my %args;
+
+ if ((@_ % 2) == 1) {
+ my $orig = shift;
+ $type = $orig->new();
+ %args = @_;
+ }
+ else {
+ %args = @_;
+ my $ctype = $args{ctype};
+ die("Need ctype argument") if not defined $ctype;
+ my $xstype = $args{xstype};
+ die("Need xstype argument") if not defined $xstype;
+
+ $type = ExtUtils::Typemaps::Type->new(
+ xstype => $xstype,
+ 'prototype' => $args{'prototype'},
+ ctype => $ctype,
+ );
+ }
+
+ if ($args{skip} and $args{replace}) {
+ die("Cannot use both 'skip' and 'replace'");
+ }
+
+ if ($args{replace}) {
+ $self->remove_typemap(ctype => $type->ctype);
+ }
+ elsif ($args{skip}) {
+ return() if exists $self->{typemap_lookup}{$type->ctype};
+ }
+ else {
+ $self->validate(typemap_xstype => $type->xstype, ctype => $type->ctype);
+ }
+
+ # store
+ push @{$self->{typemap_section}}, $type;
+ # remember type for lookup, too.
+ $self->{typemap_lookup}{$type->tidy_ctype} = $#{$self->{typemap_section}};
+
+ return 1;
+}
+
+=head2 add_inputmap
+
+Add an C<INPUT> entry to the typemap.
+
+Required named arguments:
+The C<xstype> (e.g. C<xstype =E<gt> 'T_NV'>)
+and the C<code> to associate with it for input.
+
+Optional named arguments: C<replace =E<gt> 1> forces removal/replacement of
+existing C<INPUT> entries of the same C<xstype>. C<skip =E<gt> 1>
+triggers a I<"first come first serve"> logic by which new entries that conflict
+with existing entries are silently ignored.
+
+As an alternative to the named parameters usage, you may pass in
+an C<ExtUtils::Typemaps::InputMap> object as first argument, a copy of which will be
+added to the typemap. In that case, only the C<replace> or C<skip> named parameters
+may be used after the object. Example:
+
+ $map->add_inputmap($type_obj, replace => 1);
+
+=cut
+
+sub add_inputmap {
+ my $self = shift;
+ my $input;
+ my %args;
+
+ if ((@_ % 2) == 1) {
+ my $orig = shift;
+ $input = $orig->new();
+ %args = @_;
+ }
+ else {
+ %args = @_;
+ my $xstype = $args{xstype};
+ die("Need xstype argument") if not defined $xstype;
+ my $code = $args{code};
+ die("Need code argument") if not defined $code;
+
+ $input = ExtUtils::Typemaps::InputMap->new(
+ xstype => $xstype,
+ code => $code,
+ );
+ }
+
+ if ($args{skip} and $args{replace}) {
+ die("Cannot use both 'skip' and 'replace'");
+ }
+
+ if ($args{replace}) {
+ $self->remove_inputmap(xstype => $input->xstype);
+ }
+ elsif ($args{skip}) {
+ return() if exists $self->{input_lookup}{$input->xstype};
+ }
+ else {
+ $self->validate(inputmap_xstype => $input->xstype);
+ }
+
+ # store
+ push @{$self->{input_section}}, $input;
+ # remember type for lookup, too.
+ $self->{input_lookup}{$input->xstype} = $#{$self->{input_section}};
+
+ return 1;
+}
+
+=head2 add_outputmap
+
+Add an C<OUTPUT> entry to the typemap.
+Works exactly the same as C<add_inputmap>.
+
+=cut
+
+sub add_outputmap {
+ my $self = shift;
+ my $output;
+ my %args;
+
+ if ((@_ % 2) == 1) {
+ my $orig = shift;
+ $output = $orig->new();
+ %args = @_;
+ }
+ else {
+ %args = @_;
+ my $xstype = $args{xstype};
+ die("Need xstype argument") if not defined $xstype;
+ my $code = $args{code};
+ die("Need code argument") if not defined $code;
+
+ $output = ExtUtils::Typemaps::OutputMap->new(
+ xstype => $xstype,
+ code => $code,
+ );
+ }
+
+ if ($args{skip} and $args{replace}) {
+ die("Cannot use both 'skip' and 'replace'");
+ }
+
+ if ($args{replace}) {
+ $self->remove_outputmap(xstype => $output->xstype);
+ }
+ elsif ($args{skip}) {
+ return() if exists $self->{output_lookup}{$output->xstype};
+ }
+ else {
+ $self->validate(outputmap_xstype => $output->xstype);
+ }
+
+ # store
+ push @{$self->{output_section}}, $output;
+ # remember type for lookup, too.
+ $self->{output_lookup}{$output->xstype} = $#{$self->{output_section}};
+
+ return 1;
+}
+
+=head2 add_string
+
+Parses a string as a typemap and merge it into the typemap object.
+
+Required named argument: C<string> to specify the string to parse.
+
+=cut
+
+sub add_string {
+ my $self = shift;
+ my %args = @_;
+ die("Need 'string' argument") if not defined $args{string};
+
+ # no, this is not elegant.
+ my $other = ExtUtils::Typemaps->new(string => $args{string});
+ $self->merge(typemap => $other);
+}
+
+=head2 remove_typemap
+
+Removes a C<TYPEMAP> entry from the typemap.
+
+Required named argument: C<ctype> to specify the entry to remove from the typemap.
+
+Alternatively, you may pass a single C<ExtUtils::Typemaps::Type> object.
+
+=cut
+
+sub remove_typemap {
+ my $self = shift;
+ my $ctype;
+ if (@_ > 1) {
+ my %args = @_;
+ $ctype = $args{ctype};
+ die("Need ctype argument") if not defined $ctype;
+ $ctype = _tidy_type($ctype);
+ }
+ else {
+ $ctype = $_[0]->tidy_ctype;
+ }
+
+ return $self->_remove($ctype, $self->{typemap_section}, $self->{typemap_lookup});
+}
+
+=head2 remove_inputmap
+
+Removes an C<INPUT> entry from the typemap.
+
+Required named argument: C<xstype> to specify the entry to remove from the typemap.
+
+Alternatively, you may pass a single C<ExtUtils::Typemaps::InputMap> object.
+
+=cut
+
+sub remove_inputmap {
+ my $self = shift;
+ my $xstype;
+ if (@_ > 1) {
+ my %args = @_;
+ $xstype = $args{xstype};
+ die("Need xstype argument") if not defined $xstype;
+ }
+ else {
+ $xstype = $_[0]->xstype;
+ }
+
+ return $self->_remove($xstype, $self->{input_section}, $self->{input_lookup});
+}
+
+=head2 remove_inputmap
+
+Removes an C<OUTPUT> entry from the typemap.
+
+Required named argument: C<xstype> to specify the entry to remove from the typemap.
+
+Alternatively, you may pass a single C<ExtUtils::Typemaps::OutputMap> object.
+
+=cut
+
+sub remove_outputmap {
+ my $self = shift;
+ my $xstype;
+ if (@_ > 1) {
+ my %args = @_;
+ $xstype = $args{xstype};
+ die("Need xstype argument") if not defined $xstype;
+ }
+ else {
+ $xstype = $_[0]->xstype;
+ }
+
+ return $self->_remove($xstype, $self->{output_section}, $self->{output_lookup});
+}
+
+sub _remove {
+ my $self = shift;
+ my $rm = shift;
+ my $array = shift;
+ my $lookup = shift;
+
+ # Just fetch the index of the item from the lookup table
+ my $index = $lookup->{$rm};
+ return() if not defined $index;
+
+ # Nuke the item from storage
+ splice(@$array, $index, 1);
+
+ # Decrement the storage position of all items thereafter
+ foreach my $key (keys %$lookup) {
+ if ($lookup->{$key} > $index) {
+ $lookup->{$key}--;
+ }
+ }
+ return();
+}
+
+=head2 get_typemap
+
+Fetches an entry of the TYPEMAP section of the typemap.
+
+Mandatory named arguments: The C<ctype> of the entry.
+
+Returns the C<ExtUtils::Typemaps::Type>
+object for the entry if found.
+
+=cut
+
+sub get_typemap {
+ my $self = shift;
+ die("Need named parameters, got uneven number") if @_ % 2;
+
+ my %args = @_;
+ my $ctype = $args{ctype};
+ die("Need ctype argument") if not defined $ctype;
+ $ctype = _tidy_type($ctype);
+
+ my $index = $self->{typemap_lookup}{$ctype};
+ return() if not defined $index;
+ return $self->{typemap_section}[$index];
+}
+
+=head2 get_inputmap
+
+Fetches an entry of the INPUT section of the
+typemap.
+
+Mandatory named arguments: The C<xstype> of the
+entry or the C<ctype> of the typemap that can be used to find
+the C<xstype>. To wit, the following pieces of code
+are equivalent:
+
+ my $type = $typemap->get_typemap(ctype => $ctype)
+ my $input_map = $typemap->get_inputmap(xstype => $type->xstype);
+
+ my $input_map = $typemap->get_inputmap(ctype => $ctype);
+
+Returns the C<ExtUtils::Typemaps::InputMap>
+object for the entry if found.
+
+=cut
+
+sub get_inputmap {
+ my $self = shift;
+ die("Need named parameters, got uneven number") if @_ % 2;
+
+ my %args = @_;
+ my $xstype = $args{xstype};
+ my $ctype = $args{ctype};
+ die("Need xstype or ctype argument")
+ if not defined $xstype
+ and not defined $ctype;
+ die("Need xstype OR ctype arguments, not both")
+ if defined $xstype and defined $ctype;
+
+ if (defined $ctype) {
+ my $tm = $self->get_typemap(ctype => $ctype);
+ $xstype = $tm && $tm->xstype;
+ return() if not defined $xstype;
+ }
+
+ my $index = $self->{input_lookup}{$xstype};
+ return() if not defined $index;
+ return $self->{input_section}[$index];
+}
+
+=head2 get_outputmap
+
+Fetches an entry of the OUTPUT section of the
+typemap.
+
+Mandatory named arguments: The C<xstype> of the
+entry or the C<ctype> of the typemap that can be used to
+resolve the C<xstype>. (See above for an example.)
+
+Returns the C<ExtUtils::Typemaps::InputMap>
+object for the entry if found.
+
+=cut
+
+sub get_outputmap {
+ my $self = shift;
+ die("Need named parameters, got uneven number") if @_ % 2;
+
+ my %args = @_;
+ my $xstype = $args{xstype};
+ my $ctype = $args{ctype};
+ die("Need xstype or ctype argument")
+ if not defined $xstype
+ and not defined $ctype;
+ die("Need xstype OR ctype arguments, not both")
+ if defined $xstype and defined $ctype;
+
+ if (defined $ctype) {
+ my $tm = $self->get_typemap(ctype => $ctype);
+ $xstype = $tm && $tm->xstype;
+ return() if not defined $xstype;
+ }
+
+ my $index = $self->{output_lookup}{$xstype};
+ return() if not defined $index;
+ return $self->{output_section}[$index];
+}
+
+=head2 write
+
+Write the typemap to a file. Optionally takes a C<file> argument. If given, the
+typemap will be written to the specified file. If not, the typemap is written
+to the currently stored file name (see C<-E<gt>file> above, this defaults to the file
+it was read from if any).
+
+=cut
+
+sub write {
+ my $self = shift;
+ my %args = @_;
+ my $file = defined $args{file} ? $args{file} : $self->file();
+ die("write() needs a file argument (or set the file name of the typemap using the 'file' method)")
+ if not defined $file;
+
+ open my $fh, '>', $file
+ or die "Cannot open typemap file '$file' for writing: $!";
+ print $fh $self->as_string();
+ close $fh;
+}
+
+=head2 as_string
+
+Generates and returns the string form of the typemap.
+
+=cut
+
+sub as_string {
+ my $self = shift;
+ my $typemap = $self->{typemap_section};
+ my @code;
+ push @code, "TYPEMAP\n";
+ foreach my $entry (@$typemap) {
+ # type kind proto
+ # /^(.*?\S)\s+(\S+)\s*($ExtUtils::ParseXS::Constants::PrototypeRegexp*)$/o
+ push @code, $entry->ctype . "\t" . $entry->xstype
+ . ($entry->proto ne '' ? "\t".$entry->proto : '') . "\n";
+ }
+
+ my $input = $self->{input_section};
+ if (@$input) {
+ push @code, "\nINPUT\n";
+ foreach my $entry (@$input) {
+ push @code, $entry->xstype, "\n", $entry->code, "\n";
+ }
+ }
+
+ my $output = $self->{output_section};
+ if (@$output) {
+ push @code, "\nOUTPUT\n";
+ foreach my $entry (@$output) {
+ push @code, $entry->xstype, "\n", $entry->code, "\n";
+ }
+ }
+ return join '', @code;
+}
+
+=head2 as_embedded_typemap
+
+Generates and returns the string form of the typemap with the
+appropriate prefix around it for verbatim inclusion into an
+XS file as an embedded typemap. This will return a string like
+
+ TYPEMAP: <<END_OF_TYPEMAP
+ ... typemap here (see as_string) ...
+ END_OF_TYPEMAP
+
+The method takes care not to use a HERE-doc end marker that
+appears in the typemap string itself.
+
+=cut
+
+sub as_embedded_typemap {
+ my $self = shift;
+ my $string = $self->as_string;
+
+ my @ident_cand = qw(END_TYPEMAP END_OF_TYPEMAP END);
+ my $icand = 0;
+ my $cand_suffix = "";
+ while ($string =~ /^\Q$ident_cand[$icand]$cand_suffix\E\s*$/m) {
+ $icand++;
+ if ($icand == @ident_cand) {
+ $icand = 0;
+ ++$cand_suffix;
+ }
+ }
+
+ my $marker = "$ident_cand[$icand]$cand_suffix";
+ return "TYPEMAP: <<$marker;\n$string\n$marker\n";
+}
+
+=head2 merge
+
+Merges a given typemap into the object. Note that a failed merge
+operation leaves the object in an inconsistent state so clone it if necessary.
+
+Mandatory named arguments: Either C<typemap =E<gt> $another_typemap_obj>
+or C<file =E<gt> $path_to_typemap_file> but not both.
+
+Optional arguments: C<replace =E<gt> 1> to force replacement
+of existing typemap entries without warning or C<skip =E<gt> 1>
+to skip entries that exist already in the typemap.
+
+=cut
+
+sub merge {
+ my $self = shift;
+ my %args = @_;
+
+ if (exists $args{typemap} and exists $args{file}) {
+ die("Need {file} OR {typemap} argument. Not both!");
+ }
+ elsif (not exists $args{typemap} and not exists $args{file}) {
+ die("Need {file} or {typemap} argument!");
+ }
+
+ my @params;
+ push @params, 'replace' => $args{replace} if exists $args{replace};
+ push @params, 'skip' => $args{skip} if exists $args{skip};
+
+ my $typemap = $args{typemap};
+ if (not defined $typemap) {
+ $typemap = ref($self)->new(file => $args{file}, @params);
+ }
+
+ # FIXME breaking encapsulation. Add accessor code.
+ foreach my $entry (@{$typemap->{typemap_section}}) {
+ $self->add_typemap( $entry, @params );
+ }
+
+ foreach my $entry (@{$typemap->{input_section}}) {
+ $self->add_inputmap( $entry, @params );
+ }
+
+ foreach my $entry (@{$typemap->{output_section}}) {
+ $self->add_outputmap( $entry, @params );
+ }
+
+ return 1;
+}
+
+=head2 is_empty
+
+Returns a bool indicating whether this typemap is entirely empty.
+
+=cut
+
+sub is_empty {
+ my $self = shift;
+
+ return @{ $self->{typemap_section} } == 0
+ && @{ $self->{input_section} } == 0
+ && @{ $self->{output_section} } == 0;
+}
+
+=head2 list_mapped_ctypes
+
+Returns a list of the C types that are mappable by
+this typemap object.
+
+=cut
+
+sub list_mapped_ctypes {
+ my $self = shift;
+ return sort keys %{ $self->{typemap_lookup} };
+}
+
+=head2 _get_typemap_hash
+
+Returns a hash mapping the C types to the XS types:
+
+ {
+ 'char **' => 'T_PACKEDARRAY',
+ 'bool_t' => 'T_IV',
+ 'AV *' => 'T_AVREF',
+ 'InputStream' => 'T_IN',
+ 'double' => 'T_DOUBLE',
+ # ...
+ }
+
+This is documented because it is used by C<ExtUtils::ParseXS>,
+but it's not intended for general consumption. May be removed
+at any time.
+
+=cut
+
+sub _get_typemap_hash {
+ my $self = shift;
+ my $lookup = $self->{typemap_lookup};
+ my $storage = $self->{typemap_section};
+
+ my %rv;
+ foreach my $ctype (keys %$lookup) {
+ $rv{$ctype} = $storage->[ $lookup->{$ctype} ]->xstype;
+ }
+
+ return \%rv;
+}
+
+=head2 _get_inputmap_hash
+
+Returns a hash mapping the XS types (identifiers) to the
+corresponding INPUT code:
+
+ {
+ 'T_CALLBACK' => ' $var = make_perl_cb_$type($arg)
+ ',
+ 'T_OUT' => ' $var = IoOFP(sv_2io($arg))
+ ',
+ 'T_REF_IV_PTR' => ' if (sv_isa($arg, \\"${ntype}\\")) {
+ # ...
+ }
+
+This is documented because it is used by C<ExtUtils::ParseXS>,
+but it's not intended for general consumption. May be removed
+at any time.
+
+=cut
+
+sub _get_inputmap_hash {
+ my $self = shift;
+ my $lookup = $self->{input_lookup};
+ my $storage = $self->{input_section};
+
+ my %rv;
+ foreach my $xstype (keys %$lookup) {
+ $rv{$xstype} = $storage->[ $lookup->{$xstype} ]->code;
+
+ # Squash trailing whitespace to one line break
+ # This isn't strictly necessary, but makes the output more similar
+ # to the original ExtUtils::ParseXS.
+ $rv{$xstype} =~ s/\s*\z/\n/;
+ }
+
+ return \%rv;
+}
+
+
+=head2 _get_outputmap_hash
+
+Returns a hash mapping the XS types (identifiers) to the
+corresponding OUTPUT code:
+
+ {
+ 'T_CALLBACK' => ' sv_setpvn($arg, $var.context.value().chp(),
+ $var.context.value().size());
+ ',
+ 'T_OUT' => ' {
+ GV *gv = newGVgen("$Package");
+ if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
+ sv_setsv(
+ $arg,
+ sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))
+ );
+ else
+ $arg = &PL_sv_undef;
+ }
+ ',
+ # ...
+ }
+
+This is documented because it is used by C<ExtUtils::ParseXS>,
+but it's not intended for general consumption. May be removed
+at any time.
+
+=cut
+
+sub _get_outputmap_hash {
+ my $self = shift;
+ my $lookup = $self->{output_lookup};
+ my $storage = $self->{output_section};
+
+ my %rv;
+ foreach my $xstype (keys %$lookup) {
+ $rv{$xstype} = $storage->[ $lookup->{$xstype} ]->code;
+
+ # Squash trailing whitespace to one line break
+ # This isn't strictly necessary, but makes the output more similar
+ # to the original ExtUtils::ParseXS.
+ $rv{$xstype} =~ s/\s*\z/\n/;
+ }
+
+ return \%rv;
+}
+
+=head2 _get_prototype_hash
+
+Returns a hash mapping the C types of the typemap to their
+corresponding prototypes.
+
+ {
+ 'char **' => '$',
+ 'bool_t' => '$',
+ 'AV *' => '$',
+ 'InputStream' => '$',
+ 'double' => '$',
+ # ...
+ }
+
+This is documented because it is used by C<ExtUtils::ParseXS>,
+but it's not intended for general consumption. May be removed
+at any time.
+
+=cut
+
+sub _get_prototype_hash {
+ my $self = shift;
+ my $lookup = $self->{typemap_lookup};
+ my $storage = $self->{typemap_section};
+
+ my %rv;
+ foreach my $ctype (keys %$lookup) {
+ $rv{$ctype} = $storage->[ $lookup->{$ctype} ]->proto || '$';
+ }
+
+ return \%rv;
+}
+
+
+
+# make sure that the provided types wouldn't collide with what's
+# in the object already.
+sub validate {
+ my $self = shift;
+ my %args = @_;
+
+ if ( exists $args{ctype}
+ and exists $self->{typemap_lookup}{_tidy_type($args{ctype})} )
+ {
+ die("Multiple definition of ctype '$args{ctype}' in TYPEMAP section");
+ }
+
+ if ( exists $args{inputmap_xstype}
+ and exists $self->{input_lookup}{$args{inputmap_xstype}} )
+ {
+ die("Multiple definition of xstype '$args{inputmap_xstype}' in INPUTMAP section");
+ }
+
+ if ( exists $args{outputmap_xstype}
+ and exists $self->{output_lookup}{$args{outputmap_xstype}} )
+ {
+ die("Multiple definition of xstype '$args{outputmap_xstype}' in OUTPUTMAP section");
+ }
+
+ return 1;
+}
+
+sub _parse {
+ my $self = shift;
+ my $stringref = shift;
+ my $lineno_offset = shift;
+ $lineno_offset = 0 if not defined $lineno_offset;
+ my $filename = shift;
+ $filename = '<string>' if not defined $filename;
+
+ my $replace = $self->{replace};
+ my $skip = $self->{skip};
+ die "Can only replace OR skip" if $replace and $skip;
+ my @add_params;
+ push @add_params, replace => 1 if $replace;
+ push @add_params, skip => 1 if $skip;
+
+ # TODO comments should round-trip, currently ignoring
+ # TODO order of sections, multiple sections of same type
+ # Heavily influenced by ExtUtils::ParseXS
+ my $section = 'typemap';
+ my $lineno = $lineno_offset;
+ my $junk = "";
+ my $current = \$junk;
+ my @input_expr;
+ my @output_expr;
+ while ($$stringref =~ /^(.*)$/gcm) {
+ local $_ = $1;
+ ++$lineno;
+ chomp;
+ next if /^\s*#/;
+ if (/^INPUT\s*$/) {
+ $section = 'input';
+ $current = \$junk;
+ next;
+ }
+ elsif (/^OUTPUT\s*$/) {
+ $section = 'output';
+ $current = \$junk;
+ next;
+ }
+ elsif (/^TYPEMAP\s*$/) {
+ $section = 'typemap';
+ $current = \$junk;
+ next;
+ }
+
+ if ($section eq 'typemap') {
+ my $line = $_;
+ s/^\s+//; s/\s+$//;
+ next if $_ eq '' or /^#/;
+ my($type, $kind, $proto) = /^(.*?\S)\s+(\S+)\s*($ExtUtils::ParseXS::Constants::PrototypeRegexp*)$/o
+ or warn("Warning: File '$filename' Line $lineno '$line' TYPEMAP entry needs 2 or 3 columns\n"),
+ next;
+ # prototype defaults to '$'
+ $proto = '$' unless $proto;
+ warn("Warning: File '$filename' Line $lineno '$line' Invalid prototype '$proto'\n")
+ unless _valid_proto_string($proto);
+ $self->add_typemap(
+ ExtUtils::Typemaps::Type->new(
+ xstype => $kind, proto => $proto, ctype => $type
+ ),
+ @add_params
+ );
+ } elsif (/^\s/) {
+ s/\s+$//;
+ $$current .= $$current eq '' ? $_ : "\n".$_;
+ } elsif ($_ eq '') {
+ next;
+ } elsif ($section eq 'input') {
+ s/\s+$//;
+ push @input_expr, {xstype => $_, code => ''};
+ $current = \$input_expr[-1]{code};
+ } else { # output section
+ s/\s+$//;
+ push @output_expr, {xstype => $_, code => ''};
+ $current = \$output_expr[-1]{code};
+ }
+
+ } # end while lines
+
+ foreach my $inexpr (@input_expr) {
+ $self->add_inputmap( ExtUtils::Typemaps::InputMap->new(%$inexpr), @add_params );
+ }
+ foreach my $outexpr (@output_expr) {
+ $self->add_outputmap( ExtUtils::Typemaps::OutputMap->new(%$outexpr), @add_params );
+ }
+
+ return 1;
+}
+
+# taken from ExtUtils::ParseXS
+sub _tidy_type {
+ local $_ = shift;
+
+ # rationalise any '*' by joining them into bunches and removing whitespace
+ s#\s*(\*+)\s*#$1#g;
+ s#(\*+)# $1 #g ;
+
+ # trim leading & trailing whitespace
+ s/^\s+//; s/\s+$//;
+
+ # change multiple whitespace into a single space
+ s/\s+/ /g;
+
+ $_;
+}
+
+
+# taken from ExtUtils::ParseXS
+sub _valid_proto_string {
+ my $string = shift;
+ if ($string =~ /^$ExtUtils::ParseXS::Constants::PrototypeRegexp+$/o) {
+ return $string;
+ }
+
+ return 0 ;
+}
+
+# taken from ExtUtils::ParseXS (C_string)
+sub _escape_backslashes {
+ my $string = shift;
+ $string =~ s[\\][\\\\]g;
+ $string;
+}
+
+=head1 CAVEATS
+
+Inherits some evil code from C<ExtUtils::ParseXS>.
+
+=head1 SEE ALSO
+
+The parser is heavily inspired from the one in L<ExtUtils::ParseXS>.
+
+For details on typemaps: L<perlxstut>, L<perlxs>.
+
+=head1 AUTHOR
+
+Steffen Mueller C<<smueller at cpan.org>>
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2009, 2010, 2011, 2012 Steffen Mueller
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
+1;
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxs.pod
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxs.pod (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxs.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2123 @@
+=head1 NAME
+
+perlxs - XS language reference manual
+
+=head1 DESCRIPTION
+
+=head2 Introduction
+
+XS is an interface description file format used to create an extension
+interface between Perl and C code (or a C library) which one wishes
+to use with Perl. The XS interface is combined with the library to
+create a new library which can then be either dynamically loaded
+or statically linked into perl. The XS interface description is
+written in the XS language and is the core component of the Perl
+extension interface.
+
+An B<XSUB> forms the basic unit of the XS interface. After compilation
+by the B<xsubpp> compiler, each XSUB amounts to a C function definition
+which will provide the glue between Perl calling conventions and C
+calling conventions.
+
+The glue code pulls the arguments from the Perl stack, converts these
+Perl values to the formats expected by a C function, call this C function,
+transfers the return values of the C function back to Perl.
+Return values here may be a conventional C return value or any C
+function arguments that may serve as output parameters. These return
+values may be passed back to Perl either by putting them on the
+Perl stack, or by modifying the arguments supplied from the Perl side.
+
+The above is a somewhat simplified view of what really happens. Since
+Perl allows more flexible calling conventions than C, XSUBs may do much
+more in practice, such as checking input parameters for validity,
+throwing exceptions (or returning undef/empty list) if the return value
+from the C function indicates failure, calling different C functions
+based on numbers and types of the arguments, providing an object-oriented
+interface, etc.
+
+Of course, one could write such glue code directly in C. However, this
+would be a tedious task, especially if one needs to write glue for
+multiple C functions, and/or one is not familiar enough with the Perl
+stack discipline and other such arcana. XS comes to the rescue here:
+instead of writing this glue C code in long-hand, one can write
+a more concise short-hand I<description> of what should be done by
+the glue, and let the XS compiler B<xsubpp> handle the rest.
+
+The XS language allows one to describe the mapping between how the C
+routine is used, and how the corresponding Perl routine is used. It
+also allows creation of Perl routines which are directly translated to
+C code and which are not related to a pre-existing C function. In cases
+when the C interface coincides with the Perl interface, the XSUB
+declaration is almost identical to a declaration of a C function (in K&R
+style). In such circumstances, there is another tool called C<h2xs>
+that is able to translate an entire C header file into a corresponding
+XS file that will provide glue to the functions/macros described in
+the header file.
+
+The XS compiler is called B<xsubpp>. This compiler creates
+the constructs necessary to let an XSUB manipulate Perl values, and
+creates the glue necessary to let Perl call the XSUB. The compiler
+uses B<typemaps> to determine how to map C function parameters
+and output values to Perl values and back. The default typemap
+(which comes with Perl) handles many common C types. A supplementary
+typemap may also be needed to handle any special structures and types
+for the library being linked. For more information on typemaps,
+see L<perlxstypemap>.
+
+A file in XS format starts with a C language section which goes until the
+first C<MODULE =Z<>> directive. Other XS directives and XSUB definitions
+may follow this line. The "language" used in this part of the file
+is usually referred to as the XS language. B<xsubpp> recognizes and
+skips POD (see L<perlpod>) in both the C and XS language sections, which
+allows the XS file to contain embedded documentation.
+
+See L<perlxstut> for a tutorial on the whole extension creation process.
+
+Note: For some extensions, Dave Beazley's SWIG system may provide a
+significantly more convenient mechanism for creating the extension
+glue code. See L<http://www.swig.org/> for more information.
+
+=head2 On The Road
+
+Many of the examples which follow will concentrate on creating an interface
+between Perl and the ONC+ RPC bind library functions. The rpcb_gettime()
+function is used to demonstrate many features of the XS language. This
+function has two parameters; the first is an input parameter and the second
+is an output parameter. The function also returns a status value.
+
+ bool_t rpcb_gettime(const char *host, time_t *timep);
+
+From C this function will be called with the following
+statements.
+
+ #include <rpc/rpc.h>
+ bool_t status;
+ time_t timep;
+ status = rpcb_gettime( "localhost", &timep );
+
+If an XSUB is created to offer a direct translation between this function
+and Perl, then this XSUB will be used from Perl with the following code.
+The $status and $timep variables will contain the output of the function.
+
+ use RPC;
+ $status = rpcb_gettime( "localhost", $timep );
+
+The following XS file shows an XS subroutine, or XSUB, which
+demonstrates one possible interface to the rpcb_gettime()
+function. This XSUB represents a direct translation between
+C and Perl and so preserves the interface even from Perl.
+This XSUB will be invoked from Perl with the usage shown
+above. Note that the first three #include statements, for
+C<EXTERN.h>, C<perl.h>, and C<XSUB.h>, will always be present at the
+beginning of an XS file. This approach and others will be
+expanded later in this document.
+
+ #include "EXTERN.h"
+ #include "perl.h"
+ #include "XSUB.h"
+ #include <rpc/rpc.h>
+
+ MODULE = RPC PACKAGE = RPC
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t &timep
+ OUTPUT:
+ timep
+
+Any extension to Perl, including those containing XSUBs,
+should have a Perl module to serve as the bootstrap which
+pulls the extension into Perl. This module will export the
+extension's functions and variables to the Perl program and
+will cause the extension's XSUBs to be linked into Perl.
+The following module will be used for most of the examples
+in this document and should be used from Perl with the C<use>
+command as shown earlier. Perl modules are explained in
+more detail later in this document.
+
+ package RPC;
+
+ require Exporter;
+ require DynaLoader;
+ @ISA = qw(Exporter DynaLoader);
+ @EXPORT = qw( rpcb_gettime );
+
+ bootstrap RPC;
+ 1;
+
+Throughout this document a variety of interfaces to the rpcb_gettime()
+XSUB will be explored. The XSUBs will take their parameters in different
+orders or will take different numbers of parameters. In each case the
+XSUB is an abstraction between Perl and the real C rpcb_gettime()
+function, and the XSUB must always ensure that the real rpcb_gettime()
+function is called with the correct parameters. This abstraction will
+allow the programmer to create a more Perl-like interface to the C
+function.
+
+=head2 The Anatomy of an XSUB
+
+The simplest XSUBs consist of 3 parts: a description of the return
+value, the name of the XSUB routine and the names of its arguments,
+and a description of types or formats of the arguments.
+
+The following XSUB allows a Perl program to access a C library function
+called sin(). The XSUB will imitate the C function which takes a single
+argument and returns a single value.
+
+ double
+ sin(x)
+ double x
+
+Optionally, one can merge the description of types and the list of
+argument names, rewriting this as
+
+ double
+ sin(double x)
+
+This makes this XSUB look similar to an ANSI C declaration. An optional
+semicolon is allowed after the argument list, as in
+
+ double
+ sin(double x);
+
+Parameters with C pointer types can have different semantic: C functions
+with similar declarations
+
+ bool string_looks_as_a_number(char *s);
+ bool make_char_uppercase(char *c);
+
+are used in absolutely incompatible manner. Parameters to these functions
+could be described B<xsubpp> like this:
+
+ char * s
+ char &c
+
+Both these XS declarations correspond to the C<char*> C type, but they have
+different semantics, see L<"The & Unary Operator">.
+
+It is convenient to think that the indirection operator
+C<*> should be considered as a part of the type and the address operator C<&>
+should be considered part of the variable. See L<perlxstypemap>
+for more info about handling qualifiers and unary operators in C types.
+
+The function name and the return type must be placed on
+separate lines and should be flush left-adjusted.
+
+ INCORRECT CORRECT
+
+ double sin(x) double
+ double x sin(x)
+ double x
+
+The rest of the function description may be indented or left-adjusted. The
+following example shows a function with its body left-adjusted. Most
+examples in this document will indent the body for better readability.
+
+ CORRECT
+
+ double
+ sin(x)
+ double x
+
+More complicated XSUBs may contain many other sections. Each section of
+an XSUB starts with the corresponding keyword, such as INIT: or CLEANUP:.
+However, the first two lines of an XSUB always contain the same data:
+descriptions of the return type and the names of the function and its
+parameters. Whatever immediately follows these is considered to be
+an INPUT: section unless explicitly marked with another keyword.
+(See L<The INPUT: Keyword>.)
+
+An XSUB section continues until another section-start keyword is found.
+
+=head2 The Argument Stack
+
+The Perl argument stack is used to store the values which are
+sent as parameters to the XSUB and to store the XSUB's
+return value(s). In reality all Perl functions (including non-XSUB
+ones) keep their values on this stack all the same time, each limited
+to its own range of positions on the stack. In this document the
+first position on that stack which belongs to the active
+function will be referred to as position 0 for that function.
+
+XSUBs refer to their stack arguments with the macro B<ST(x)>, where I<x>
+refers to a position in this XSUB's part of the stack. Position 0 for that
+function would be known to the XSUB as ST(0). The XSUB's incoming
+parameters and outgoing return values always begin at ST(0). For many
+simple cases the B<xsubpp> compiler will generate the code necessary to
+handle the argument stack by embedding code fragments found in the
+typemaps. In more complex cases the programmer must supply the code.
+
+=head2 The RETVAL Variable
+
+The RETVAL variable is a special C variable that is declared automatically
+for you. The C type of RETVAL matches the return type of the C library
+function. The B<xsubpp> compiler will declare this variable in each XSUB
+with non-C<void> return type. By default the generated C function
+will use RETVAL to hold the return value of the C library function being
+called. In simple cases the value of RETVAL will be placed in ST(0) of
+the argument stack where it can be received by Perl as the return value
+of the XSUB.
+
+If the XSUB has a return type of C<void> then the compiler will
+not declare a RETVAL variable for that function. When using
+a PPCODE: section no manipulation of the RETVAL variable is required, the
+section may use direct stack manipulation to place output values on the stack.
+
+If PPCODE: directive is not used, C<void> return value should be used
+only for subroutines which do not return a value, I<even if> CODE:
+directive is used which sets ST(0) explicitly.
+
+Older versions of this document recommended to use C<void> return
+value in such cases. It was discovered that this could lead to
+segfaults in cases when XSUB was I<truly> C<void>. This practice is
+now deprecated, and may be not supported at some future version. Use
+the return value C<SV *> in such cases. (Currently C<xsubpp> contains
+some heuristic code which tries to disambiguate between "truly-void"
+and "old-practice-declared-as-void" functions. Hence your code is at
+mercy of this heuristics unless you use C<SV *> as return value.)
+
+=head2 Returning SVs, AVs and HVs through RETVAL
+
+When you're using RETVAL to return an C<SV *>, there's some magic
+going on behind the scenes that should be mentioned. When you're
+manipulating the argument stack using the ST(x) macro, for example,
+you usually have to pay special attention to reference counts. (For
+more about reference counts, see L<perlguts>.) To make your life
+easier, the typemap file automatically makes C<RETVAL> mortal when
+you're returning an C<SV *>. Thus, the following two XSUBs are more
+or less equivalent:
+
+ void
+ alpha()
+ PPCODE:
+ ST(0) = newSVpv("Hello World",0);
+ sv_2mortal(ST(0));
+ XSRETURN(1);
+
+ SV *
+ beta()
+ CODE:
+ RETVAL = newSVpv("Hello World",0);
+ OUTPUT:
+ RETVAL
+
+This is quite useful as it usually improves readability. While
+this works fine for an C<SV *>, it's unfortunately not as easy
+to have C<AV *> or C<HV *> as a return value. You I<should> be
+able to write:
+
+ AV *
+ array()
+ CODE:
+ RETVAL = newAV();
+ /* do something with RETVAL */
+ OUTPUT:
+ RETVAL
+
+But due to an unfixable bug (fixing it would break lots of existing
+CPAN modules) in the typemap file, the reference count of the C<AV *>
+is not properly decremented. Thus, the above XSUB would leak memory
+whenever it is being called. The same problem exists for C<HV *>,
+C<CV *>, and C<SVREF> (which indicates a scalar reference, not
+a general C<SV *>).
+In XS code on perls starting with perl 5.16, you can override the
+typemaps for any of these types with a version that has proper
+handling of refcounts. In your C<TYPEMAP> section, do
+
+ AV* T_AVREF_REFCOUNT_FIXED
+
+to get the repaired variant. For backward compatibility with older
+versions of perl, you can instead decrement the reference count
+manually when you're returning one of the aforementioned
+types using C<sv_2mortal>:
+
+ AV *
+ array()
+ CODE:
+ RETVAL = newAV();
+ sv_2mortal((SV*)RETVAL);
+ /* do something with RETVAL */
+ OUTPUT:
+ RETVAL
+
+Remember that you don't have to do this for an C<SV *>. The reference
+documentation for all core typemaps can be found in L<perlxstypemap>.
+
+=head2 The MODULE Keyword
+
+The MODULE keyword is used to start the XS code and to specify the package
+of the functions which are being defined. All text preceding the first
+MODULE keyword is considered C code and is passed through to the output with
+POD stripped, but otherwise untouched. Every XS module will have a
+bootstrap function which is used to hook the XSUBs into Perl. The package
+name of this bootstrap function will match the value of the last MODULE
+statement in the XS source files. The value of MODULE should always remain
+constant within the same XS file, though this is not required.
+
+The following example will start the XS code and will place
+all functions in a package named RPC.
+
+ MODULE = RPC
+
+=head2 The PACKAGE Keyword
+
+When functions within an XS source file must be separated into packages
+the PACKAGE keyword should be used. This keyword is used with the MODULE
+keyword and must follow immediately after it when used.
+
+ MODULE = RPC PACKAGE = RPC
+
+ [ XS code in package RPC ]
+
+ MODULE = RPC PACKAGE = RPCB
+
+ [ XS code in package RPCB ]
+
+ MODULE = RPC PACKAGE = RPC
+
+ [ XS code in package RPC ]
+
+The same package name can be used more than once, allowing for
+non-contiguous code. This is useful if you have a stronger ordering
+principle than package names.
+
+Although this keyword is optional and in some cases provides redundant
+information it should always be used. This keyword will ensure that the
+XSUBs appear in the desired package.
+
+=head2 The PREFIX Keyword
+
+The PREFIX keyword designates prefixes which should be
+removed from the Perl function names. If the C function is
+C<rpcb_gettime()> and the PREFIX value is C<rpcb_> then Perl will
+see this function as C<gettime()>.
+
+This keyword should follow the PACKAGE keyword when used.
+If PACKAGE is not used then PREFIX should follow the MODULE
+keyword.
+
+ MODULE = RPC PREFIX = rpc_
+
+ MODULE = RPC PACKAGE = RPCB PREFIX = rpcb_
+
+=head2 The OUTPUT: Keyword
+
+The OUTPUT: keyword indicates that certain function parameters should be
+updated (new values made visible to Perl) when the XSUB terminates or that
+certain values should be returned to the calling Perl function. For
+simple functions which have no CODE: or PPCODE: section,
+such as the sin() function above, the RETVAL variable is
+automatically designated as an output value. For more complex functions
+the B<xsubpp> compiler will need help to determine which variables are output
+variables.
+
+This keyword will normally be used to complement the CODE: keyword.
+The RETVAL variable is not recognized as an output variable when the
+CODE: keyword is present. The OUTPUT: keyword is used in this
+situation to tell the compiler that RETVAL really is an output
+variable.
+
+The OUTPUT: keyword can also be used to indicate that function parameters
+are output variables. This may be necessary when a parameter has been
+modified within the function and the programmer would like the update to
+be seen by Perl.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t &timep
+ OUTPUT:
+ timep
+
+The OUTPUT: keyword will also allow an output parameter to
+be mapped to a matching piece of code rather than to a
+typemap.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t &timep
+ OUTPUT:
+ timep sv_setnv(ST(1), (double)timep);
+
+B<xsubpp> emits an automatic C<SvSETMAGIC()> for all parameters in the
+OUTPUT section of the XSUB, except RETVAL. This is the usually desired
+behavior, as it takes care of properly invoking 'set' magic on output
+parameters (needed for hash or array element parameters that must be
+created if they didn't exist). If for some reason, this behavior is
+not desired, the OUTPUT section may contain a C<SETMAGIC: DISABLE> line
+to disable it for the remainder of the parameters in the OUTPUT section.
+Likewise, C<SETMAGIC: ENABLE> can be used to reenable it for the
+remainder of the OUTPUT section. See L<perlguts> for more details
+about 'set' magic.
+
+=head2 The NO_OUTPUT Keyword
+
+The NO_OUTPUT can be placed as the first token of the XSUB. This keyword
+indicates that while the C subroutine we provide an interface to has
+a non-C<void> return type, the return value of this C subroutine should not
+be returned from the generated Perl subroutine.
+
+With this keyword present L<The RETVAL Variable> is created, and in the
+generated call to the subroutine this variable is assigned to, but the value
+of this variable is not going to be used in the auto-generated code.
+
+This keyword makes sense only if C<RETVAL> is going to be accessed by the
+user-supplied code. It is especially useful to make a function interface
+more Perl-like, especially when the C return value is just an error condition
+indicator. For example,
+
+ NO_OUTPUT int
+ delete_file(char *name)
+ POSTCALL:
+ if (RETVAL != 0)
+ croak("Error %d while deleting file '%s'", RETVAL, name);
+
+Here the generated XS function returns nothing on success, and will die()
+with a meaningful error message on error.
+
+=head2 The CODE: Keyword
+
+This keyword is used in more complicated XSUBs which require
+special handling for the C function. The RETVAL variable is
+still declared, but it will not be returned unless it is specified
+in the OUTPUT: section.
+
+The following XSUB is for a C function which requires special handling of
+its parameters. The Perl usage is given first.
+
+ $status = rpcb_gettime( "localhost", $timep );
+
+The XSUB follows.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t timep
+ CODE:
+ RETVAL = rpcb_gettime( host, &timep );
+ OUTPUT:
+ timep
+ RETVAL
+
+=head2 The INIT: Keyword
+
+The INIT: keyword allows initialization to be inserted into the XSUB before
+the compiler generates the call to the C function. Unlike the CODE: keyword
+above, this keyword does not affect the way the compiler handles RETVAL.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t &timep
+ INIT:
+ printf("# Host is %s\n", host );
+ OUTPUT:
+ timep
+
+Another use for the INIT: section is to check for preconditions before
+making a call to the C function:
+
+ long long
+ lldiv(a,b)
+ long long a
+ long long b
+ INIT:
+ if (a == 0 && b == 0)
+ XSRETURN_UNDEF;
+ if (b == 0)
+ croak("lldiv: cannot divide by 0");
+
+=head2 The NO_INIT Keyword
+
+The NO_INIT keyword is used to indicate that a function
+parameter is being used only as an output value. The B<xsubpp>
+compiler will normally generate code to read the values of
+all function parameters from the argument stack and assign
+them to C variables upon entry to the function. NO_INIT
+will tell the compiler that some parameters will be used for
+output rather than for input and that they will be handled
+before the function terminates.
+
+The following example shows a variation of the rpcb_gettime() function.
+This function uses the timep variable only as an output variable and does
+not care about its initial contents.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t &timep = NO_INIT
+ OUTPUT:
+ timep
+
+=head2 The TYPEMAP: Keyword
+
+Starting with Perl 5.16, you can embed typemaps into your XS code
+instead of or in addition to typemaps in a separate file. Multiple
+such embedded typemaps will be processed in order of appearance in
+the XS code and like local typemap files take precendence over the
+default typemap, the embedded typemaps may overwrite previous
+definitions of TYPEMAP, INPUT, and OUTPUT stanzas. The syntax for
+embedded typemaps is
+
+ TYPEMAP: <<HERE
+ ... your typemap code here ...
+ HERE
+
+where the C<TYPEMAP> keyword must appear in the first column of a
+new line.
+
+Refer to L<perlxstypemap> for details on writing typemaps.
+
+=head2 Initializing Function Parameters
+
+C function parameters are normally initialized with their values from
+the argument stack (which in turn contains the parameters that were
+passed to the XSUB from Perl). The typemaps contain the
+code segments which are used to translate the Perl values to
+the C parameters. The programmer, however, is allowed to
+override the typemaps and supply alternate (or additional)
+initialization code. Initialization code starts with the first
+C<=>, C<;> or C<+> on a line in the INPUT: section. The only
+exception happens if this C<;> terminates the line, then this C<;>
+is quietly ignored.
+
+The following code demonstrates how to supply initialization code for
+function parameters. The initialization code is eval'ed within double
+quotes by the compiler before it is added to the output so anything
+which should be interpreted literally [mainly C<$>, C<@>, or C<\\>]
+must be protected with backslashes. The variables C<$var>, C<$arg>,
+and C<$type> can be used as in typemaps.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host = (char *)SvPV_nolen($arg);
+ time_t &timep = 0;
+ OUTPUT:
+ timep
+
+This should not be used to supply default values for parameters. One
+would normally use this when a function parameter must be processed by
+another library function before it can be used. Default parameters are
+covered in the next section.
+
+If the initialization begins with C<=>, then it is output in
+the declaration for the input variable, replacing the initialization
+supplied by the typemap. If the initialization
+begins with C<;> or C<+>, then it is performed after
+all of the input variables have been declared. In the C<;>
+case the initialization normally supplied by the typemap is not performed.
+For the C<+> case, the declaration for the variable will include the
+initialization from the typemap. A global
+variable, C<%v>, is available for the truly rare case where
+information from one initialization is needed in another
+initialization.
+
+Here's a truly obscure example:
+
+ bool_t
+ rpcb_gettime(host,timep)
+ time_t &timep; /* \$v{timep}=@{[$v{timep}=$arg]} */
+ char *host + SvOK($v{timep}) ? SvPV_nolen($arg) : NULL;
+ OUTPUT:
+ timep
+
+The construct C<\$v{timep}=@{[$v{timep}=$arg]}> used in the above
+example has a two-fold purpose: first, when this line is processed by
+B<xsubpp>, the Perl snippet C<$v{timep}=$arg> is evaluated. Second,
+the text of the evaluated snippet is output into the generated C file
+(inside a C comment)! During the processing of C<char *host> line,
+C<$arg> will evaluate to C<ST(0)>, and C<$v{timep}> will evaluate to
+C<ST(1)>.
+
+=head2 Default Parameter Values
+
+Default values for XSUB arguments can be specified by placing an
+assignment statement in the parameter list. The default value may
+be a number, a string or the special string C<NO_INIT>. Defaults should
+always be used on the right-most parameters only.
+
+To allow the XSUB for rpcb_gettime() to have a default host
+value the parameters to the XSUB could be rearranged. The
+XSUB will then call the real rpcb_gettime() function with
+the parameters in the correct order. This XSUB can be called
+from Perl with either of the following statements:
+
+ $status = rpcb_gettime( $timep, $host );
+
+ $status = rpcb_gettime( $timep );
+
+The XSUB will look like the code which follows. A CODE:
+block is used to call the real rpcb_gettime() function with
+the parameters in the correct order for that function.
+
+ bool_t
+ rpcb_gettime(timep,host="localhost")
+ char *host
+ time_t timep = NO_INIT
+ CODE:
+ RETVAL = rpcb_gettime( host, &timep );
+ OUTPUT:
+ timep
+ RETVAL
+
+=head2 The PREINIT: Keyword
+
+The PREINIT: keyword allows extra variables to be declared immediately
+before or after the declarations of the parameters from the INPUT: section
+are emitted.
+
+If a variable is declared inside a CODE: section it will follow any typemap
+code that is emitted for the input parameters. This may result in the
+declaration ending up after C code, which is C syntax error. Similar
+errors may happen with an explicit C<;>-type or C<+>-type initialization of
+parameters is used (see L<"Initializing Function Parameters">). Declaring
+these variables in an INIT: section will not help.
+
+In such cases, to force an additional variable to be declared together
+with declarations of other variables, place the declaration into a
+PREINIT: section. The PREINIT: keyword may be used one or more times
+within an XSUB.
+
+The following examples are equivalent, but if the code is using complex
+typemaps then the first example is safer.
+
+ bool_t
+ rpcb_gettime(timep)
+ time_t timep = NO_INIT
+ PREINIT:
+ char *host = "localhost";
+ CODE:
+ RETVAL = rpcb_gettime( host, &timep );
+ OUTPUT:
+ timep
+ RETVAL
+
+For this particular case an INIT: keyword would generate the
+same C code as the PREINIT: keyword. Another correct, but error-prone example:
+
+ bool_t
+ rpcb_gettime(timep)
+ time_t timep = NO_INIT
+ CODE:
+ char *host = "localhost";
+ RETVAL = rpcb_gettime( host, &timep );
+ OUTPUT:
+ timep
+ RETVAL
+
+Another way to declare C<host> is to use a C block in the CODE: section:
+
+ bool_t
+ rpcb_gettime(timep)
+ time_t timep = NO_INIT
+ CODE:
+ {
+ char *host = "localhost";
+ RETVAL = rpcb_gettime( host, &timep );
+ }
+ OUTPUT:
+ timep
+ RETVAL
+
+The ability to put additional declarations before the typemap entries are
+processed is very handy in the cases when typemap conversions manipulate
+some global state:
+
+ MyObject
+ mutate(o)
+ PREINIT:
+ MyState st = global_state;
+ INPUT:
+ MyObject o;
+ CLEANUP:
+ reset_to(global_state, st);
+
+Here we suppose that conversion to C<MyObject> in the INPUT: section and from
+MyObject when processing RETVAL will modify a global variable C<global_state>.
+After these conversions are performed, we restore the old value of
+C<global_state> (to avoid memory leaks, for example).
+
+There is another way to trade clarity for compactness: INPUT sections allow
+declaration of C variables which do not appear in the parameter list of
+a subroutine. Thus the above code for mutate() can be rewritten as
+
+ MyObject
+ mutate(o)
+ MyState st = global_state;
+ MyObject o;
+ CLEANUP:
+ reset_to(global_state, st);
+
+and the code for rpcb_gettime() can be rewritten as
+
+ bool_t
+ rpcb_gettime(timep)
+ time_t timep = NO_INIT
+ char *host = "localhost";
+ C_ARGS:
+ host, &timep
+ OUTPUT:
+ timep
+ RETVAL
+
+=head2 The SCOPE: Keyword
+
+The SCOPE: keyword allows scoping to be enabled for a particular XSUB. If
+enabled, the XSUB will invoke ENTER and LEAVE automatically.
+
+To support potentially complex type mappings, if a typemap entry used
+by an XSUB contains a comment like C</*scope*/> then scoping will
+be automatically enabled for that XSUB.
+
+To enable scoping:
+
+ SCOPE: ENABLE
+
+To disable scoping:
+
+ SCOPE: DISABLE
+
+=head2 The INPUT: Keyword
+
+The XSUB's parameters are usually evaluated immediately after entering the
+XSUB. The INPUT: keyword can be used to force those parameters to be
+evaluated a little later. The INPUT: keyword can be used multiple times
+within an XSUB and can be used to list one or more input variables. This
+keyword is used with the PREINIT: keyword.
+
+The following example shows how the input parameter C<timep> can be
+evaluated late, after a PREINIT.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ PREINIT:
+ time_t tt;
+ INPUT:
+ time_t timep
+ CODE:
+ RETVAL = rpcb_gettime( host, &tt );
+ timep = tt;
+ OUTPUT:
+ timep
+ RETVAL
+
+The next example shows each input parameter evaluated late.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ PREINIT:
+ time_t tt;
+ INPUT:
+ char *host
+ PREINIT:
+ char *h;
+ INPUT:
+ time_t timep
+ CODE:
+ h = host;
+ RETVAL = rpcb_gettime( h, &tt );
+ timep = tt;
+ OUTPUT:
+ timep
+ RETVAL
+
+Since INPUT sections allow declaration of C variables which do not appear
+in the parameter list of a subroutine, this may be shortened to:
+
+ bool_t
+ rpcb_gettime(host,timep)
+ time_t tt;
+ char *host;
+ char *h = host;
+ time_t timep;
+ CODE:
+ RETVAL = rpcb_gettime( h, &tt );
+ timep = tt;
+ OUTPUT:
+ timep
+ RETVAL
+
+(We used our knowledge that input conversion for C<char *> is a "simple" one,
+thus C<host> is initialized on the declaration line, and our assignment
+C<h = host> is not performed too early. Otherwise one would need to have the
+assignment C<h = host> in a CODE: or INIT: section.)
+
+=head2 The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords
+
+In the list of parameters for an XSUB, one can precede parameter names
+by the C<IN>/C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT> keywords.
+C<IN> keyword is the default, the other keywords indicate how the Perl
+interface should differ from the C interface.
+
+Parameters preceded by C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT>
+keywords are considered to be used by the C subroutine I<via
+pointers>. C<OUTLIST>/C<OUT> keywords indicate that the C subroutine
+does not inspect the memory pointed by this parameter, but will write
+through this pointer to provide additional return values.
+
+Parameters preceded by C<OUTLIST> keyword do not appear in the usage
+signature of the generated Perl function.
+
+Parameters preceded by C<IN_OUTLIST>/C<IN_OUT>/C<OUT> I<do> appear as
+parameters to the Perl function. With the exception of
+C<OUT>-parameters, these parameters are converted to the corresponding
+C type, then pointers to these data are given as arguments to the C
+function. It is expected that the C function will write through these
+pointers.
+
+The return list of the generated Perl function consists of the C return value
+from the function (unless the XSUB is of C<void> return type or
+C<The NO_OUTPUT Keyword> was used) followed by all the C<OUTLIST>
+and C<IN_OUTLIST> parameters (in the order of appearance). On the
+return from the XSUB the C<IN_OUT>/C<OUT> Perl parameter will be
+modified to have the values written by the C function.
+
+For example, an XSUB
+
+ void
+ day_month(OUTLIST day, IN unix_time, OUTLIST month)
+ int day
+ int unix_time
+ int month
+
+should be used from Perl as
+
+ my ($day, $month) = day_month(time);
+
+The C signature of the corresponding function should be
+
+ void day_month(int *day, int unix_time, int *month);
+
+The C<IN>/C<OUTLIST>/C<IN_OUTLIST>/C<IN_OUT>/C<OUT> keywords can be
+mixed with ANSI-style declarations, as in
+
+ void
+ day_month(OUTLIST int day, int unix_time, OUTLIST int month)
+
+(here the optional C<IN> keyword is omitted).
+
+The C<IN_OUT> parameters are identical with parameters introduced with
+L<The & Unary Operator> and put into the C<OUTPUT:> section (see
+L<The OUTPUT: Keyword>). The C<IN_OUTLIST> parameters are very similar,
+the only difference being that the value C function writes through the
+pointer would not modify the Perl parameter, but is put in the output
+list.
+
+The C<OUTLIST>/C<OUT> parameter differ from C<IN_OUTLIST>/C<IN_OUT>
+parameters only by the initial value of the Perl parameter not
+being read (and not being given to the C function - which gets some
+garbage instead). For example, the same C function as above can be
+interfaced with as
+
+ void day_month(OUT int day, int unix_time, OUT int month);
+
+or
+
+ void
+ day_month(day, unix_time, month)
+ int &day = NO_INIT
+ int unix_time
+ int &month = NO_INIT
+ OUTPUT:
+ day
+ month
+
+However, the generated Perl function is called in very C-ish style:
+
+ my ($day, $month);
+ day_month($day, time, $month);
+
+=head2 The C<length(NAME)> Keyword
+
+If one of the input arguments to the C function is the length of a string
+argument C<NAME>, one can substitute the name of the length-argument by
+C<length(NAME)> in the XSUB declaration. This argument must be omitted when
+the generated Perl function is called. E.g.,
+
+ void
+ dump_chars(char *s, short l)
+ {
+ short n = 0;
+ while (n < l) {
+ printf("s[%d] = \"\\%#03o\"\n", n, (int)s[n]);
+ n++;
+ }
+ }
+
+ MODULE = x PACKAGE = x
+
+ void dump_chars(char *s, short length(s))
+
+should be called as C<dump_chars($string)>.
+
+This directive is supported with ANSI-type function declarations only.
+
+=head2 Variable-length Parameter Lists
+
+XSUBs can have variable-length parameter lists by specifying an ellipsis
+C<(...)> in the parameter list. This use of the ellipsis is similar to that
+found in ANSI C. The programmer is able to determine the number of
+arguments passed to the XSUB by examining the C<items> variable which the
+B<xsubpp> compiler supplies for all XSUBs. By using this mechanism one can
+create an XSUB which accepts a list of parameters of unknown length.
+
+The I<host> parameter for the rpcb_gettime() XSUB can be
+optional so the ellipsis can be used to indicate that the
+XSUB will take a variable number of parameters. Perl should
+be able to call this XSUB with either of the following statements.
+
+ $status = rpcb_gettime( $timep, $host );
+
+ $status = rpcb_gettime( $timep );
+
+The XS code, with ellipsis, follows.
+
+ bool_t
+ rpcb_gettime(timep, ...)
+ time_t timep = NO_INIT
+ PREINIT:
+ char *host = "localhost";
+ CODE:
+ if( items > 1 )
+ host = (char *)SvPV_nolen(ST(1));
+ RETVAL = rpcb_gettime( host, &timep );
+ OUTPUT:
+ timep
+ RETVAL
+
+=head2 The C_ARGS: Keyword
+
+The C_ARGS: keyword allows creating of XSUBS which have different
+calling sequence from Perl than from C, without a need to write
+CODE: or PPCODE: section. The contents of the C_ARGS: paragraph is
+put as the argument to the called C function without any change.
+
+For example, suppose that a C function is declared as
+
+ symbolic nth_derivative(int n, symbolic function, int flags);
+
+and that the default flags are kept in a global C variable
+C<default_flags>. Suppose that you want to create an interface which
+is called as
+
+ $second_deriv = $function->nth_derivative(2);
+
+To do this, declare the XSUB as
+
+ symbolic
+ nth_derivative(function, n)
+ symbolic function
+ int n
+ C_ARGS:
+ n, function, default_flags
+
+=head2 The PPCODE: Keyword
+
+The PPCODE: keyword is an alternate form of the CODE: keyword and is used
+to tell the B<xsubpp> compiler that the programmer is supplying the code to
+control the argument stack for the XSUBs return values. Occasionally one
+will want an XSUB to return a list of values rather than a single value.
+In these cases one must use PPCODE: and then explicitly push the list of
+values on the stack. The PPCODE: and CODE: keywords should not be used
+together within the same XSUB.
+
+The actual difference between PPCODE: and CODE: sections is in the
+initialization of C<SP> macro (which stands for the I<current> Perl
+stack pointer), and in the handling of data on the stack when returning
+from an XSUB. In CODE: sections SP preserves the value which was on
+entry to the XSUB: SP is on the function pointer (which follows the
+last parameter). In PPCODE: sections SP is moved backward to the
+beginning of the parameter list, which allows C<PUSH*()> macros
+to place output values in the place Perl expects them to be when
+the XSUB returns back to Perl.
+
+The generated trailer for a CODE: section ensures that the number of return
+values Perl will see is either 0 or 1 (depending on the C<void>ness of the
+return value of the C function, and heuristics mentioned in
+L<"The RETVAL Variable">). The trailer generated for a PPCODE: section
+is based on the number of return values and on the number of times
+C<SP> was updated by C<[X]PUSH*()> macros.
+
+Note that macros C<ST(i)>, C<XST_m*()> and C<XSRETURN*()> work equally
+well in CODE: sections and PPCODE: sections.
+
+The following XSUB will call the C rpcb_gettime() function
+and will return its two output values, timep and status, to
+Perl as a single list.
+
+ void
+ rpcb_gettime(host)
+ char *host
+ PREINIT:
+ time_t timep;
+ bool_t status;
+ PPCODE:
+ status = rpcb_gettime( host, &timep );
+ EXTEND(SP, 2);
+ PUSHs(sv_2mortal(newSViv(status)));
+ PUSHs(sv_2mortal(newSViv(timep)));
+
+Notice that the programmer must supply the C code necessary
+to have the real rpcb_gettime() function called and to have
+the return values properly placed on the argument stack.
+
+The C<void> return type for this function tells the B<xsubpp> compiler that
+the RETVAL variable is not needed or used and that it should not be created.
+In most scenarios the void return type should be used with the PPCODE:
+directive.
+
+The EXTEND() macro is used to make room on the argument
+stack for 2 return values. The PPCODE: directive causes the
+B<xsubpp> compiler to create a stack pointer available as C<SP>, and it
+is this pointer which is being used in the EXTEND() macro.
+The values are then pushed onto the stack with the PUSHs()
+macro.
+
+Now the rpcb_gettime() function can be used from Perl with
+the following statement.
+
+ ($status, $timep) = rpcb_gettime("localhost");
+
+When handling output parameters with a PPCODE section, be sure to handle
+'set' magic properly. See L<perlguts> for details about 'set' magic.
+
+=head2 Returning Undef And Empty Lists
+
+Occasionally the programmer will want to return simply
+C<undef> or an empty list if a function fails rather than a
+separate status value. The rpcb_gettime() function offers
+just this situation. If the function succeeds we would like
+to have it return the time and if it fails we would like to
+have undef returned. In the following Perl code the value
+of $timep will either be undef or it will be a valid time.
+
+ $timep = rpcb_gettime( "localhost" );
+
+The following XSUB uses the C<SV *> return type as a mnemonic only,
+and uses a CODE: block to indicate to the compiler
+that the programmer has supplied all the necessary code. The
+sv_newmortal() call will initialize the return value to undef, making that
+the default return value.
+
+ SV *
+ rpcb_gettime(host)
+ char * host
+ PREINIT:
+ time_t timep;
+ bool_t x;
+ CODE:
+ ST(0) = sv_newmortal();
+ if( rpcb_gettime( host, &timep ) )
+ sv_setnv( ST(0), (double)timep);
+
+The next example demonstrates how one would place an explicit undef in the
+return value, should the need arise.
+
+ SV *
+ rpcb_gettime(host)
+ char * host
+ PREINIT:
+ time_t timep;
+ bool_t x;
+ CODE:
+ if( rpcb_gettime( host, &timep ) ){
+ ST(0) = sv_newmortal();
+ sv_setnv( ST(0), (double)timep);
+ }
+ else{
+ ST(0) = &PL_sv_undef;
+ }
+
+To return an empty list one must use a PPCODE: block and
+then not push return values on the stack.
+
+ void
+ rpcb_gettime(host)
+ char *host
+ PREINIT:
+ time_t timep;
+ PPCODE:
+ if( rpcb_gettime( host, &timep ) )
+ PUSHs(sv_2mortal(newSViv(timep)));
+ else{
+ /* Nothing pushed on stack, so an empty
+ * list is implicitly returned. */
+ }
+
+Some people may be inclined to include an explicit C<return> in the above
+XSUB, rather than letting control fall through to the end. In those
+situations C<XSRETURN_EMPTY> should be used, instead. This will ensure that
+the XSUB stack is properly adjusted. Consult L<perlapi> for other
+C<XSRETURN> macros.
+
+Since C<XSRETURN_*> macros can be used with CODE blocks as well, one can
+rewrite this example as:
+
+ int
+ rpcb_gettime(host)
+ char *host
+ PREINIT:
+ time_t timep;
+ CODE:
+ RETVAL = rpcb_gettime( host, &timep );
+ if (RETVAL == 0)
+ XSRETURN_UNDEF;
+ OUTPUT:
+ RETVAL
+
+In fact, one can put this check into a POSTCALL: section as well. Together
+with PREINIT: simplifications, this leads to:
+
+ int
+ rpcb_gettime(host)
+ char *host
+ time_t timep;
+ POSTCALL:
+ if (RETVAL == 0)
+ XSRETURN_UNDEF;
+
+=head2 The REQUIRE: Keyword
+
+The REQUIRE: keyword is used to indicate the minimum version of the
+B<xsubpp> compiler needed to compile the XS module. An XS module which
+contains the following statement will compile with only B<xsubpp> version
+1.922 or greater:
+
+ REQUIRE: 1.922
+
+=head2 The CLEANUP: Keyword
+
+This keyword can be used when an XSUB requires special cleanup procedures
+before it terminates. When the CLEANUP: keyword is used it must follow
+any CODE:, PPCODE:, or OUTPUT: blocks which are present in the XSUB. The
+code specified for the cleanup block will be added as the last statements
+in the XSUB.
+
+=head2 The POSTCALL: Keyword
+
+This keyword can be used when an XSUB requires special procedures
+executed after the C subroutine call is performed. When the POSTCALL:
+keyword is used it must precede OUTPUT: and CLEANUP: blocks which are
+present in the XSUB.
+
+See examples in L<"The NO_OUTPUT Keyword"> and L<"Returning Undef And Empty Lists">.
+
+The POSTCALL: block does not make a lot of sense when the C subroutine
+call is supplied by user by providing either CODE: or PPCODE: section.
+
+=head2 The BOOT: Keyword
+
+The BOOT: keyword is used to add code to the extension's bootstrap
+function. The bootstrap function is generated by the B<xsubpp> compiler and
+normally holds the statements necessary to register any XSUBs with Perl.
+With the BOOT: keyword the programmer can tell the compiler to add extra
+statements to the bootstrap function.
+
+This keyword may be used any time after the first MODULE keyword and should
+appear on a line by itself. The first blank line after the keyword will
+terminate the code block.
+
+ BOOT:
+ # The following message will be printed when the
+ # bootstrap function executes.
+ printf("Hello from the bootstrap!\n");
+
+=head2 The VERSIONCHECK: Keyword
+
+The VERSIONCHECK: keyword corresponds to B<xsubpp>'s C<-versioncheck> and
+C<-noversioncheck> options. This keyword overrides the command line
+options. Version checking is enabled by default. When version checking is
+enabled the XS module will attempt to verify that its version matches the
+version of the PM module.
+
+To enable version checking:
+
+ VERSIONCHECK: ENABLE
+
+To disable version checking:
+
+ VERSIONCHECK: DISABLE
+
+Note that if the version of the PM module is an NV (a floating point
+number), it will be stringified with a possible loss of precision
+(currently chopping to nine decimal places) so that it may not match
+the version of the XS module anymore. Quoting the $VERSION declaration
+to make it a string is recommended if long version numbers are used.
+
+=head2 The PROTOTYPES: Keyword
+
+The PROTOTYPES: keyword corresponds to B<xsubpp>'s C<-prototypes> and
+C<-noprototypes> options. This keyword overrides the command line options.
+Prototypes are enabled by default. When prototypes are enabled XSUBs will
+be given Perl prototypes. This keyword may be used multiple times in an XS
+module to enable and disable prototypes for different parts of the module.
+
+To enable prototypes:
+
+ PROTOTYPES: ENABLE
+
+To disable prototypes:
+
+ PROTOTYPES: DISABLE
+
+=head2 The PROTOTYPE: Keyword
+
+This keyword is similar to the PROTOTYPES: keyword above but can be used to
+force B<xsubpp> to use a specific prototype for the XSUB. This keyword
+overrides all other prototype options and keywords but affects only the
+current XSUB. Consult L<perlsub/Prototypes> for information about Perl
+prototypes.
+
+ bool_t
+ rpcb_gettime(timep, ...)
+ time_t timep = NO_INIT
+ PROTOTYPE: $;$
+ PREINIT:
+ char *host = "localhost";
+ CODE:
+ if( items > 1 )
+ host = (char *)SvPV_nolen(ST(1));
+ RETVAL = rpcb_gettime( host, &timep );
+ OUTPUT:
+ timep
+ RETVAL
+
+If the prototypes are enabled, you can disable it locally for a given
+XSUB as in the following example:
+
+ void
+ rpcb_gettime_noproto()
+ PROTOTYPE: DISABLE
+ ...
+
+=head2 The ALIAS: Keyword
+
+The ALIAS: keyword allows an XSUB to have two or more unique Perl names
+and to know which of those names was used when it was invoked. The Perl
+names may be fully-qualified with package names. Each alias is given an
+index. The compiler will setup a variable called C<ix> which contain the
+index of the alias which was used. When the XSUB is called with its
+declared name C<ix> will be 0.
+
+The following example will create aliases C<FOO::gettime()> and
+C<BAR::getit()> for this function.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t &timep
+ ALIAS:
+ FOO::gettime = 1
+ BAR::getit = 2
+ INIT:
+ printf("# ix = %d\n", ix );
+ OUTPUT:
+ timep
+
+=head2 The OVERLOAD: Keyword
+
+Instead of writing an overloaded interface using pure Perl, you
+can also use the OVERLOAD keyword to define additional Perl names
+for your functions (like the ALIAS: keyword above). However, the
+overloaded functions must be defined with three parameters (except
+for the nomethod() function which needs four parameters). If any
+function has the OVERLOAD: keyword, several additional lines
+will be defined in the c file generated by xsubpp in order to
+register with the overload magic.
+
+Since blessed objects are actually stored as RV's, it is useful
+to use the typemap features to preprocess parameters and extract
+the actual SV stored within the blessed RV. See the sample for
+T_PTROBJ_SPECIAL below.
+
+To use the OVERLOAD: keyword, create an XS function which takes
+three input parameters ( or use the c style '...' definition) like
+this:
+
+ SV *
+ cmp (lobj, robj, swap)
+ My_Module_obj lobj
+ My_Module_obj robj
+ IV swap
+ OVERLOAD: cmp <=>
+ { /* function defined here */}
+
+In this case, the function will overload both of the three way
+comparison operators. For all overload operations using non-alpha
+characters, you must type the parameter without quoting, separating
+multiple overloads with whitespace. Note that "" (the stringify
+overload) should be entered as \"\" (i.e. escaped).
+
+=head2 The FALLBACK: Keyword
+
+In addition to the OVERLOAD keyword, if you need to control how
+Perl autogenerates missing overloaded operators, you can set the
+FALLBACK keyword in the module header section, like this:
+
+ MODULE = RPC PACKAGE = RPC
+
+ FALLBACK: TRUE
+ ...
+
+where FALLBACK can take any of the three values TRUE, FALSE, or
+UNDEF. If you do not set any FALLBACK value when using OVERLOAD,
+it defaults to UNDEF. FALLBACK is not used except when one or
+more functions using OVERLOAD have been defined. Please see
+L<overload/fallback> for more details.
+
+=head2 The INTERFACE: Keyword
+
+This keyword declares the current XSUB as a keeper of the given
+calling signature. If some text follows this keyword, it is
+considered as a list of functions which have this signature, and
+should be attached to the current XSUB.
+
+For example, if you have 4 C functions multiply(), divide(), add(),
+subtract() all having the signature:
+
+ symbolic f(symbolic, symbolic);
+
+you can make them all to use the same XSUB using this:
+
+ symbolic
+ interface_s_ss(arg1, arg2)
+ symbolic arg1
+ symbolic arg2
+ INTERFACE:
+ multiply divide
+ add subtract
+
+(This is the complete XSUB code for 4 Perl functions!) Four generated
+Perl function share names with corresponding C functions.
+
+The advantage of this approach comparing to ALIAS: keyword is that there
+is no need to code a switch statement, each Perl function (which shares
+the same XSUB) knows which C function it should call. Additionally, one
+can attach an extra function remainder() at runtime by using
+
+ CV *mycv = newXSproto("Symbolic::remainder",
+ XS_Symbolic_interface_s_ss, __FILE__, "$$");
+ XSINTERFACE_FUNC_SET(mycv, remainder);
+
+say, from another XSUB. (This example supposes that there was no
+INTERFACE_MACRO: section, otherwise one needs to use something else instead of
+C<XSINTERFACE_FUNC_SET>, see the next section.)
+
+=head2 The INTERFACE_MACRO: Keyword
+
+This keyword allows one to define an INTERFACE using a different way
+to extract a function pointer from an XSUB. The text which follows
+this keyword should give the name of macros which would extract/set a
+function pointer. The extractor macro is given return type, C<CV*>,
+and C<XSANY.any_dptr> for this C<CV*>. The setter macro is given cv,
+and the function pointer.
+
+The default value is C<XSINTERFACE_FUNC> and C<XSINTERFACE_FUNC_SET>.
+An INTERFACE keyword with an empty list of functions can be omitted if
+INTERFACE_MACRO keyword is used.
+
+Suppose that in the previous example functions pointers for
+multiply(), divide(), add(), subtract() are kept in a global C array
+C<fp[]> with offsets being C<multiply_off>, C<divide_off>, C<add_off>,
+C<subtract_off>. Then one can use
+
+ #define XSINTERFACE_FUNC_BYOFFSET(ret,cv,f) \
+ ((XSINTERFACE_CVT_ANON(ret))fp[CvXSUBANY(cv).any_i32])
+ #define XSINTERFACE_FUNC_BYOFFSET_set(cv,f) \
+ CvXSUBANY(cv).any_i32 = CAT2( f, _off )
+
+in C section,
+
+ symbolic
+ interface_s_ss(arg1, arg2)
+ symbolic arg1
+ symbolic arg2
+ INTERFACE_MACRO:
+ XSINTERFACE_FUNC_BYOFFSET
+ XSINTERFACE_FUNC_BYOFFSET_set
+ INTERFACE:
+ multiply divide
+ add subtract
+
+in XSUB section.
+
+=head2 The INCLUDE: Keyword
+
+This keyword can be used to pull other files into the XS module. The other
+files may have XS code. INCLUDE: can also be used to run a command to
+generate the XS code to be pulled into the module.
+
+The file F<Rpcb1.xsh> contains our C<rpcb_gettime()> function:
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t &timep
+ OUTPUT:
+ timep
+
+The XS module can use INCLUDE: to pull that file into it.
+
+ INCLUDE: Rpcb1.xsh
+
+If the parameters to the INCLUDE: keyword are followed by a pipe (C<|>) then
+the compiler will interpret the parameters as a command. This feature is
+mildly deprecated in favour of the C<INCLUDE_COMMAND:> directive, as documented
+below.
+
+ INCLUDE: cat Rpcb1.xsh |
+
+Do not use this to run perl: C<INCLUDE: perl |> will run the perl that
+happens to be the first in your path and not necessarily the same perl that is
+used to run C<xsubpp>. See L<"The INCLUDE_COMMAND: Keyword">.
+
+=head2 The INCLUDE_COMMAND: Keyword
+
+Runs the supplied command and includes its output into the current XS
+document. C<INCLUDE_COMMAND> assigns special meaning to the C<$^X> token
+in that it runs the same perl interpreter that is running C<xsubpp>:
+
+ INCLUDE_COMMAND: cat Rpcb1.xsh
+
+ INCLUDE_COMMAND: $^X -e ...
+
+=head2 The CASE: Keyword
+
+The CASE: keyword allows an XSUB to have multiple distinct parts with each
+part acting as a virtual XSUB. CASE: is greedy and if it is used then all
+other XS keywords must be contained within a CASE:. This means nothing may
+precede the first CASE: in the XSUB and anything following the last CASE: is
+included in that case.
+
+A CASE: might switch via a parameter of the XSUB, via the C<ix> ALIAS:
+variable (see L<"The ALIAS: Keyword">), or maybe via the C<items> variable
+(see L<"Variable-length Parameter Lists">). The last CASE: becomes the
+B<default> case if it is not associated with a conditional. The following
+example shows CASE switched via C<ix> with a function C<rpcb_gettime()>
+having an alias C<x_gettime()>. When the function is called as
+C<rpcb_gettime()> its parameters are the usual C<(char *host, time_t *timep)>,
+but when the function is called as C<x_gettime()> its parameters are
+reversed, C<(time_t *timep, char *host)>.
+
+ long
+ rpcb_gettime(a,b)
+ CASE: ix == 1
+ ALIAS:
+ x_gettime = 1
+ INPUT:
+ # 'a' is timep, 'b' is host
+ char *b
+ time_t a = NO_INIT
+ CODE:
+ RETVAL = rpcb_gettime( b, &a );
+ OUTPUT:
+ a
+ RETVAL
+ CASE:
+ # 'a' is host, 'b' is timep
+ char *a
+ time_t &b = NO_INIT
+ OUTPUT:
+ b
+ RETVAL
+
+That function can be called with either of the following statements. Note
+the different argument lists.
+
+ $status = rpcb_gettime( $host, $timep );
+
+ $status = x_gettime( $timep, $host );
+
+=head2 The EXPORT_XSUB_SYMBOLS: Keyword
+
+The EXPORT_XSUB_SYMBOLS: keyword is likely something you will never need.
+In perl versions earlier than 5.16.0, this keyword does nothing. Starting
+with 5.16, XSUB symbols are no longer exported by default. That is, they
+are C<static> functions. If you include
+
+ EXPORT_XSUB_SYMBOLS: ENABLE
+
+in your XS code, the XSUBs following this line will not be declared C<static>.
+You can later disable this with
+
+ EXPORT_XSUB_SYMBOLS: DISABLE
+
+which, again, is the default that you should probably never change.
+You cannot use this keyword on versions of perl before 5.16 to make
+XSUBs C<static>.
+
+=head2 The & Unary Operator
+
+The C<&> unary operator in the INPUT: section is used to tell B<xsubpp>
+that it should convert a Perl value to/from C using the C type to the left
+of C<&>, but provide a pointer to this value when the C function is called.
+
+This is useful to avoid a CODE: block for a C function which takes a parameter
+by reference. Typically, the parameter should be not a pointer type (an
+C<int> or C<long> but not an C<int*> or C<long*>).
+
+The following XSUB will generate incorrect C code. The B<xsubpp> compiler will
+turn this into code which calls C<rpcb_gettime()> with parameters C<(char
+*host, time_t timep)>, but the real C<rpcb_gettime()> wants the C<timep>
+parameter to be of type C<time_t*> rather than C<time_t>.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t timep
+ OUTPUT:
+ timep
+
+That problem is corrected by using the C<&> operator. The B<xsubpp> compiler
+will now turn this into code which calls C<rpcb_gettime()> correctly with
+parameters C<(char *host, time_t *timep)>. It does this by carrying the
+C<&> through, so the function call looks like C<rpcb_gettime(host, &timep)>.
+
+ bool_t
+ rpcb_gettime(host,timep)
+ char *host
+ time_t &timep
+ OUTPUT:
+ timep
+
+=head2 Inserting POD, Comments and C Preprocessor Directives
+
+C preprocessor directives are allowed within BOOT:, PREINIT: INIT:, CODE:,
+PPCODE:, POSTCALL:, and CLEANUP: blocks, as well as outside the functions.
+Comments are allowed anywhere after the MODULE keyword. The compiler will
+pass the preprocessor directives through untouched and will remove the
+commented lines. POD documentation is allowed at any point, both in the
+C and XS language sections. POD must be terminated with a C<=cut> command;
+C<xsubpp> will exit with an error if it does not. It is very unlikely that
+human generated C code will be mistaken for POD, as most indenting styles
+result in whitespace in front of any line starting with C<=>. Machine
+generated XS files may fall into this trap unless care is taken to
+ensure that a space breaks the sequence "\n=".
+
+Comments can be added to XSUBs by placing a C<#> as the first
+non-whitespace of a line. Care should be taken to avoid making the
+comment look like a C preprocessor directive, lest it be interpreted as
+such. The simplest way to prevent this is to put whitespace in front of
+the C<#>.
+
+If you use preprocessor directives to choose one of two
+versions of a function, use
+
+ #if ... version1
+ #else /* ... version2 */
+ #endif
+
+and not
+
+ #if ... version1
+ #endif
+ #if ... version2
+ #endif
+
+because otherwise B<xsubpp> will believe that you made a duplicate
+definition of the function. Also, put a blank line before the
+#else/#endif so it will not be seen as part of the function body.
+
+=head2 Using XS With C++
+
+If an XSUB name contains C<::>, it is considered to be a C++ method.
+The generated Perl function will assume that
+its first argument is an object pointer. The object pointer
+will be stored in a variable called THIS. The object should
+have been created by C++ with the new() function and should
+be blessed by Perl with the sv_setref_pv() macro. The
+blessing of the object by Perl can be handled by a typemap. An example
+typemap is shown at the end of this section.
+
+If the return type of the XSUB includes C<static>, the method is considered
+to be a static method. It will call the C++
+function using the class::method() syntax. If the method is not static
+the function will be called using the THIS-E<gt>method() syntax.
+
+The next examples will use the following C++ class.
+
+ class color {
+ public:
+ color();
+ ~color();
+ int blue();
+ void set_blue( int );
+
+ private:
+ int c_blue;
+ };
+
+The XSUBs for the blue() and set_blue() methods are defined with the class
+name but the parameter for the object (THIS, or "self") is implicit and is
+not listed.
+
+ int
+ color::blue()
+
+ void
+ color::set_blue( val )
+ int val
+
+Both Perl functions will expect an object as the first parameter. In the
+generated C++ code the object is called C<THIS>, and the method call will
+be performed on this object. So in the C++ code the blue() and set_blue()
+methods will be called as this:
+
+ RETVAL = THIS->blue();
+
+ THIS->set_blue( val );
+
+You could also write a single get/set method using an optional argument:
+
+ int
+ color::blue( val = NO_INIT )
+ int val
+ PROTOTYPE $;$
+ CODE:
+ if (items > 1)
+ THIS->set_blue( val );
+ RETVAL = THIS->blue();
+ OUTPUT:
+ RETVAL
+
+If the function's name is B<DESTROY> then the C++ C<delete> function will be
+called and C<THIS> will be given as its parameter. The generated C++ code for
+
+ void
+ color::DESTROY()
+
+will look like this:
+
+ color *THIS = ...; // Initialized as in typemap
+
+ delete THIS;
+
+If the function's name is B<new> then the C++ C<new> function will be called
+to create a dynamic C++ object. The XSUB will expect the class name, which
+will be kept in a variable called C<CLASS>, to be given as the first
+argument.
+
+ color *
+ color::new()
+
+The generated C++ code will call C<new>.
+
+ RETVAL = new color();
+
+The following is an example of a typemap that could be used for this C++
+example.
+
+ TYPEMAP
+ color * O_OBJECT
+
+ OUTPUT
+ # The Perl object is blessed into 'CLASS', which should be a
+ # char* having the name of the package for the blessing.
+ O_OBJECT
+ sv_setref_pv( $arg, CLASS, (void*)$var );
+
+ INPUT
+ O_OBJECT
+ if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
+ $var = ($type)SvIV((SV*)SvRV( $arg ));
+ else{
+ warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
+ XSRETURN_UNDEF;
+ }
+
+=head2 Interface Strategy
+
+When designing an interface between Perl and a C library a straight
+translation from C to XS (such as created by C<h2xs -x>) is often sufficient.
+However, sometimes the interface will look
+very C-like and occasionally nonintuitive, especially when the C function
+modifies one of its parameters, or returns failure inband (as in "negative
+return values mean failure"). In cases where the programmer wishes to
+create a more Perl-like interface the following strategy may help to
+identify the more critical parts of the interface.
+
+Identify the C functions with input/output or output parameters. The XSUBs for
+these functions may be able to return lists to Perl.
+
+Identify the C functions which use some inband info as an indication
+of failure. They may be
+candidates to return undef or an empty list in case of failure. If the
+failure may be detected without a call to the C function, you may want to use
+an INIT: section to report the failure. For failures detectable after the C
+function returns one may want to use a POSTCALL: section to process the
+failure. In more complicated cases use CODE: or PPCODE: sections.
+
+If many functions use the same failure indication based on the return value,
+you may want to create a special typedef to handle this situation. Put
+
+ typedef int negative_is_failure;
+
+near the beginning of XS file, and create an OUTPUT typemap entry
+for C<negative_is_failure> which converts negative values to C<undef>, or
+maybe croak()s. After this the return value of type C<negative_is_failure>
+will create more Perl-like interface.
+
+Identify which values are used by only the C and XSUB functions
+themselves, say, when a parameter to a function should be a contents of a
+global variable. If Perl does not need to access the contents of the value
+then it may not be necessary to provide a translation for that value
+from C to Perl.
+
+Identify the pointers in the C function parameter lists and return
+values. Some pointers may be used to implement input/output or
+output parameters, they can be handled in XS with the C<&> unary operator,
+and, possibly, using the NO_INIT keyword.
+Some others will require handling of types like C<int *>, and one needs
+to decide what a useful Perl translation will do in such a case. When
+the semantic is clear, it is advisable to put the translation into a typemap
+file.
+
+Identify the structures used by the C functions. In many
+cases it may be helpful to use the T_PTROBJ typemap for
+these structures so they can be manipulated by Perl as
+blessed objects. (This is handled automatically by C<h2xs -x>.)
+
+If the same C type is used in several different contexts which require
+different translations, C<typedef> several new types mapped to this C type,
+and create separate F<typemap> entries for these new types. Use these
+types in declarations of return type and parameters to XSUBs.
+
+=head2 Perl Objects And C Structures
+
+When dealing with C structures one should select either
+B<T_PTROBJ> or B<T_PTRREF> for the XS type. Both types are
+designed to handle pointers to complex objects. The
+T_PTRREF type will allow the Perl object to be unblessed
+while the T_PTROBJ type requires that the object be blessed.
+By using T_PTROBJ one can achieve a form of type-checking
+because the XSUB will attempt to verify that the Perl object
+is of the expected type.
+
+The following XS code shows the getnetconfigent() function which is used
+with ONC+ TIRPC. The getnetconfigent() function will return a pointer to a
+C structure and has the C prototype shown below. The example will
+demonstrate how the C pointer will become a Perl reference. Perl will
+consider this reference to be a pointer to a blessed object and will
+attempt to call a destructor for the object. A destructor will be
+provided in the XS source to free the memory used by getnetconfigent().
+Destructors in XS can be created by specifying an XSUB function whose name
+ends with the word B<DESTROY>. XS destructors can be used to free memory
+which may have been malloc'd by another XSUB.
+
+ struct netconfig *getnetconfigent(const char *netid);
+
+A C<typedef> will be created for C<struct netconfig>. The Perl
+object will be blessed in a class matching the name of the C
+type, with the tag C<Ptr> appended, and the name should not
+have embedded spaces if it will be a Perl package name. The
+destructor will be placed in a class corresponding to the
+class of the object and the PREFIX keyword will be used to
+trim the name to the word DESTROY as Perl will expect.
+
+ typedef struct netconfig Netconfig;
+
+ MODULE = RPC PACKAGE = RPC
+
+ Netconfig *
+ getnetconfigent(netid)
+ char *netid
+
+ MODULE = RPC PACKAGE = NetconfigPtr PREFIX = rpcb_
+
+ void
+ rpcb_DESTROY(netconf)
+ Netconfig *netconf
+ CODE:
+ printf("Now in NetconfigPtr::DESTROY\n");
+ free( netconf );
+
+This example requires the following typemap entry. Consult
+L<perlxstypemap> for more information about adding new typemaps
+for an extension.
+
+ TYPEMAP
+ Netconfig * T_PTROBJ
+
+This example will be used with the following Perl statements.
+
+ use RPC;
+ $netconf = getnetconfigent("udp");
+
+When Perl destroys the object referenced by $netconf it will send the
+object to the supplied XSUB DESTROY function. Perl cannot determine, and
+does not care, that this object is a C struct and not a Perl object. In
+this sense, there is no difference between the object created by the
+getnetconfigent() XSUB and an object created by a normal Perl subroutine.
+
+=head2 Safely Storing Static Data in XS
+
+Starting with Perl 5.8, a macro framework has been defined to allow
+static data to be safely stored in XS modules that will be accessed from
+a multi-threaded Perl.
+
+Although primarily designed for use with multi-threaded Perl, the macros
+have been designed so that they will work with non-threaded Perl as well.
+
+It is therefore strongly recommended that these macros be used by all
+XS modules that make use of static data.
+
+The easiest way to get a template set of macros to use is by specifying
+the C<-g> (C<--global>) option with h2xs (see L<h2xs>).
+
+Below is an example module that makes use of the macros.
+
+ #include "EXTERN.h"
+ #include "perl.h"
+ #include "XSUB.h"
+
+ /* Global Data */
+
+ #define MY_CXT_KEY "BlindMice::_guts" XS_VERSION
+
+ typedef struct {
+ int count;
+ char name[3][100];
+ } my_cxt_t;
+
+ START_MY_CXT
+
+ MODULE = BlindMice PACKAGE = BlindMice
+
+ BOOT:
+ {
+ MY_CXT_INIT;
+ MY_CXT.count = 0;
+ strcpy(MY_CXT.name[0], "None");
+ strcpy(MY_CXT.name[1], "None");
+ strcpy(MY_CXT.name[2], "None");
+ }
+
+ int
+ newMouse(char * name)
+ char * name;
+ PREINIT:
+ dMY_CXT;
+ CODE:
+ if (MY_CXT.count >= 3) {
+ warn("Already have 3 blind mice");
+ RETVAL = 0;
+ }
+ else {
+ RETVAL = ++ MY_CXT.count;
+ strcpy(MY_CXT.name[MY_CXT.count - 1], name);
+ }
+
+ char *
+ get_mouse_name(index)
+ int index
+ CODE:
+ dMY_CXT;
+ RETVAL = MY_CXT.lives ++;
+ if (index > MY_CXT.count)
+ croak("There are only 3 blind mice.");
+ else
+ RETVAL = newSVpv(MY_CXT.name[index - 1]);
+
+ void
+ CLONE(...)
+ CODE:
+ MY_CXT_CLONE;
+
+B<REFERENCE>
+
+=over 5
+
+=item MY_CXT_KEY
+
+This macro is used to define a unique key to refer to the static data
+for an XS module. The suggested naming scheme, as used by h2xs, is to
+use a string that consists of the module name, the string "::_guts"
+and the module version number.
+
+ #define MY_CXT_KEY "MyModule::_guts" XS_VERSION
+
+=item typedef my_cxt_t
+
+This struct typedef I<must> always be called C<my_cxt_t>. The other
+C<CXT*> macros assume the existence of the C<my_cxt_t> typedef name.
+
+Declare a typedef named C<my_cxt_t> that is a structure that contains
+all the data that needs to be interpreter-local.
+
+ typedef struct {
+ int some_value;
+ } my_cxt_t;
+
+=item START_MY_CXT
+
+Always place the START_MY_CXT macro directly after the declaration
+of C<my_cxt_t>.
+
+=item MY_CXT_INIT
+
+The MY_CXT_INIT macro initialises storage for the C<my_cxt_t> struct.
+
+It I<must> be called exactly once, typically in a BOOT: section. If you
+are maintaining multiple interpreters, it should be called once in each
+interpreter instance, except for interpreters cloned from existing ones.
+(But see L</MY_CXT_CLONE> below.)
+
+=item dMY_CXT
+
+Use the dMY_CXT macro (a declaration) in all the functions that access
+MY_CXT.
+
+=item MY_CXT
+
+Use the MY_CXT macro to access members of the C<my_cxt_t> struct. For
+example, if C<my_cxt_t> is
+
+ typedef struct {
+ int index;
+ } my_cxt_t;
+
+then use this to access the C<index> member
+
+ dMY_CXT;
+ MY_CXT.index = 2;
+
+=item aMY_CXT/pMY_CXT
+
+C<dMY_CXT> may be quite expensive to calculate, and to avoid the overhead
+of invoking it in each function it is possible to pass the declaration
+onto other functions using the C<aMY_CXT>/C<pMY_CXT> macros, eg
+
+ void sub1() {
+ dMY_CXT;
+ MY_CXT.index = 1;
+ sub2(aMY_CXT);
+ }
+
+ void sub2(pMY_CXT) {
+ MY_CXT.index = 2;
+ }
+
+Analogously to C<pTHX>, there are equivalent forms for when the macro is the
+first or last in multiple arguments, where an underscore represents a
+comma, i.e. C<_aMY_CXT>, C<aMY_CXT_>, C<_pMY_CXT> and C<pMY_CXT_>.
+
+=item MY_CXT_CLONE
+
+By default, when a new interpreter is created as a copy of an existing one
+(eg via C<< threads->create() >>), both interpreters share the same physical
+my_cxt_t structure. Calling C<MY_CXT_CLONE> (typically via the package's
+C<CLONE()> function), causes a byte-for-byte copy of the structure to be
+taken, and any future dMY_CXT will cause the copy to be accessed instead.
+
+=item MY_CXT_INIT_INTERP(my_perl)
+
+=item dMY_CXT_INTERP(my_perl)
+
+These are versions of the macros which take an explicit interpreter as an
+argument.
+
+=back
+
+Note that these macros will only work together within the I<same> source
+file; that is, a dMY_CTX in one source file will access a different structure
+than a dMY_CTX in another source file.
+
+=head2 Thread-aware system interfaces
+
+Starting from Perl 5.8, in C/C++ level Perl knows how to wrap
+system/library interfaces that have thread-aware versions
+(e.g. getpwent_r()) into frontend macros (e.g. getpwent()) that
+correctly handle the multithreaded interaction with the Perl
+interpreter. This will happen transparently, the only thing
+you need to do is to instantiate a Perl interpreter.
+
+This wrapping happens always when compiling Perl core source
+(PERL_CORE is defined) or the Perl core extensions (PERL_EXT is
+defined). When compiling XS code outside of Perl core the wrapping
+does not take place. Note, however, that intermixing the _r-forms
+(as Perl compiled for multithreaded operation will do) and the _r-less
+forms is neither well-defined (inconsistent results, data corruption,
+or even crashes become more likely), nor is it very portable.
+
+=head1 EXAMPLES
+
+File C<RPC.xs>: Interface to some ONC+ RPC bind library functions.
+
+ #include "EXTERN.h"
+ #include "perl.h"
+ #include "XSUB.h"
+
+ #include <rpc/rpc.h>
+
+ typedef struct netconfig Netconfig;
+
+ MODULE = RPC PACKAGE = RPC
+
+ SV *
+ rpcb_gettime(host="localhost")
+ char *host
+ PREINIT:
+ time_t timep;
+ CODE:
+ ST(0) = sv_newmortal();
+ if( rpcb_gettime( host, &timep ) )
+ sv_setnv( ST(0), (double)timep );
+
+ Netconfig *
+ getnetconfigent(netid="udp")
+ char *netid
+
+ MODULE = RPC PACKAGE = NetconfigPtr PREFIX = rpcb_
+
+ void
+ rpcb_DESTROY(netconf)
+ Netconfig *netconf
+ CODE:
+ printf("NetconfigPtr::DESTROY\n");
+ free( netconf );
+
+File C<typemap>: Custom typemap for RPC.xs. (cf. L<perlxstypemap>)
+
+ TYPEMAP
+ Netconfig * T_PTROBJ
+
+File C<RPC.pm>: Perl module for the RPC extension.
+
+ package RPC;
+
+ require Exporter;
+ require DynaLoader;
+ @ISA = qw(Exporter DynaLoader);
+ @EXPORT = qw(rpcb_gettime getnetconfigent);
+
+ bootstrap RPC;
+ 1;
+
+File C<rpctest.pl>: Perl test program for the RPC extension.
+
+ use RPC;
+
+ $netconf = getnetconfigent();
+ $a = rpcb_gettime();
+ print "time = $a\n";
+ print "netconf = $netconf\n";
+
+ $netconf = getnetconfigent("tcp");
+ $a = rpcb_gettime("poplar");
+ print "time = $a\n";
+ print "netconf = $netconf\n";
+
+
+=head1 XS VERSION
+
+This document covers features supported by C<ExtUtils::ParseXS>
+(also known as C<xsubpp>) 3.13_01.
+
+=head1 AUTHOR
+
+Originally written by Dean Roehrich <F<roehrich at cray.com>>.
+
+Maintained since 1996 by The Perl Porters <F<perlbug at perl.org>>.
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxstut.pod
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxstut.pod (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxstut.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1379 @@
+=head1 NAME
+
+perlxstut - Tutorial for writing XSUBs
+
+=head1 DESCRIPTION
+
+This tutorial will educate the reader on the steps involved in creating
+a Perl extension. The reader is assumed to have access to L<perlguts>,
+L<perlapi> and L<perlxs>.
+
+This tutorial starts with very simple examples and becomes more complex,
+with each new example adding new features. Certain concepts may not be
+completely explained until later in the tutorial in order to slowly ease
+the reader into building extensions.
+
+This tutorial was written from a Unix point of view. Where I know them
+to be otherwise different for other platforms (e.g. Win32), I will list
+them. If you find something that was missed, please let me know.
+
+=head1 SPECIAL NOTES
+
+=head2 make
+
+This tutorial assumes that the make program that Perl is configured to
+use is called C<make>. Instead of running "make" in the examples that
+follow, you may have to substitute whatever make program Perl has been
+configured to use. Running B<perl -V:make> should tell you what it is.
+
+=head2 Version caveat
+
+When writing a Perl extension for general consumption, one should expect that
+the extension will be used with versions of Perl different from the
+version available on your machine. Since you are reading this document,
+the version of Perl on your machine is probably 5.005 or later, but the users
+of your extension may have more ancient versions.
+
+To understand what kinds of incompatibilities one may expect, and in the rare
+case that the version of Perl on your machine is older than this document,
+see the section on "Troubleshooting these Examples" for more information.
+
+If your extension uses some features of Perl which are not available on older
+releases of Perl, your users would appreciate an early meaningful warning.
+You would probably put this information into the F<README> file, but nowadays
+installation of extensions may be performed automatically, guided by F<CPAN.pm>
+module or other tools.
+
+In MakeMaker-based installations, F<Makefile.PL> provides the earliest
+opportunity to perform version checks. One can put something like this
+in F<Makefile.PL> for this purpose:
+
+ eval { require 5.007 }
+ or die <<EOD;
+ ############
+ ### This module uses frobnication framework which is not available before
+ ### version 5.007 of Perl. Upgrade your Perl before installing Kara::Mba.
+ ############
+ EOD
+
+=head2 Dynamic Loading versus Static Loading
+
+It is commonly thought that if a system does not have the capability to
+dynamically load a library, you cannot build XSUBs. This is incorrect.
+You I<can> build them, but you must link the XSUBs subroutines with the
+rest of Perl, creating a new executable. This situation is similar to
+Perl 4.
+
+This tutorial can still be used on such a system. The XSUB build mechanism
+will check the system and build a dynamically-loadable library if possible,
+or else a static library and then, optionally, a new statically-linked
+executable with that static library linked in.
+
+Should you wish to build a statically-linked executable on a system which
+can dynamically load libraries, you may, in all the following examples,
+where the command "C<make>" with no arguments is executed, run the command
+"C<make perl>" instead.
+
+If you have generated such a statically-linked executable by choice, then
+instead of saying "C<make test>", you should say "C<make test_static>".
+On systems that cannot build dynamically-loadable libraries at all, simply
+saying "C<make test>" is sufficient.
+
+=head1 TUTORIAL
+
+Now let's go on with the show!
+
+=head2 EXAMPLE 1
+
+Our first extension will be very simple. When we call the routine in the
+extension, it will print out a well-known message and return.
+
+Run "C<h2xs -A -n Mytest>". This creates a directory named Mytest,
+possibly under ext/ if that directory exists in the current working
+directory. Several files will be created under the Mytest dir, including
+MANIFEST, Makefile.PL, lib/Mytest.pm, Mytest.xs, t/Mytest.t, and Changes.
+
+The MANIFEST file contains the names of all the files just created in the
+Mytest directory.
+
+The file Makefile.PL should look something like this:
+
+ use ExtUtils::MakeMaker;
+ # See lib/ExtUtils/MakeMaker.pm for details of how to influence
+ # the contents of the Makefile that is written.
+ WriteMakefile(
+ NAME => 'Mytest',
+ VERSION_FROM => 'Mytest.pm', # finds $VERSION
+ LIBS => [''], # e.g., '-lm'
+ DEFINE => '', # e.g., '-DHAVE_SOMETHING'
+ INC => '', # e.g., '-I/usr/include/other'
+ );
+
+The file Mytest.pm should start with something like this:
+
+ package Mytest;
+
+ use 5.008008;
+ use strict;
+ use warnings;
+
+ require Exporter;
+
+ our @ISA = qw(Exporter);
+ our %EXPORT_TAGS = ( 'all' => [ qw(
+
+ ) ] );
+
+ our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
+
+ our @EXPORT = qw(
+
+ );
+
+ our $VERSION = '0.01';
+
+ require XSLoader;
+ XSLoader::load('Mytest', $VERSION);
+
+ # Preloaded methods go here.
+
+ 1;
+ __END__
+ # Below is the stub of documentation for your module. You better edit it!
+
+The rest of the .pm file contains sample code for providing documentation for
+the extension.
+
+Finally, the Mytest.xs file should look something like this:
+
+ #include "EXTERN.h"
+ #include "perl.h"
+ #include "XSUB.h"
+
+ #include "ppport.h"
+
+ MODULE = Mytest PACKAGE = Mytest
+
+Let's edit the .xs file by adding this to the end of the file:
+
+ void
+ hello()
+ CODE:
+ printf("Hello, world!\n");
+
+It is okay for the lines starting at the "CODE:" line to not be indented.
+However, for readability purposes, it is suggested that you indent CODE:
+one level and the lines following one more level.
+
+Now we'll run "C<perl Makefile.PL>". This will create a real Makefile,
+which make needs. Its output looks something like:
+
+ % perl Makefile.PL
+ Checking if your kit is complete...
+ Looks good
+ Writing Makefile for Mytest
+ %
+
+Now, running make will produce output that looks something like this (some
+long lines have been shortened for clarity and some extraneous lines have
+been deleted):
+
+ % make
+ cp lib/Mytest.pm blib/lib/Mytest.pm
+ perl xsubpp -typemap typemap Mytest.xs > Mytest.xsc && mv Mytest.xsc Mytest.c
+ Please specify prototyping behavior for Mytest.xs (see perlxs manual)
+ cc -c Mytest.c
+ Running Mkbootstrap for Mytest ()
+ chmod 644 Mytest.bs
+ rm -f blib/arch/auto/Mytest/Mytest.so
+ cc -shared -L/usr/local/lib Mytest.o -o blib/arch/auto/Mytest/Mytest.so \
+ \
+
+ chmod 755 blib/arch/auto/Mytest/Mytest.so
+ cp Mytest.bs blib/arch/auto/Mytest/Mytest.bs
+ chmod 644 blib/arch/auto/Mytest/Mytest.bs
+ Manifying blib/man3/Mytest.3pm
+ %
+
+You can safely ignore the line about "prototyping behavior" - it is
+explained in L<perlxs/"The PROTOTYPES: Keyword">.
+
+Perl has its own special way of easily writing test scripts, but for this
+example only, we'll create our own test script. Create a file called hello
+that looks like this:
+
+ #! /opt/perl5/bin/perl
+
+ use ExtUtils::testlib;
+
+ use Mytest;
+
+ Mytest::hello();
+
+Now we make the script executable (C<chmod +x hello>), run the script
+and we should see the following output:
+
+ % ./hello
+ Hello, world!
+ %
+
+=head2 EXAMPLE 2
+
+Now let's add to our extension a subroutine that will take a single numeric
+argument as input and return 1 if the number is even or 0 if the number
+is odd.
+
+Add the following to the end of Mytest.xs:
+
+ int
+ is_even(input)
+ int input
+ CODE:
+ RETVAL = (input % 2 == 0);
+ OUTPUT:
+ RETVAL
+
+There does not need to be whitespace at the start of the "C<int input>"
+line, but it is useful for improving readability. Placing a semi-colon at
+the end of that line is also optional. Any amount and kind of whitespace
+may be placed between the "C<int>" and "C<input>".
+
+Now re-run make to rebuild our new shared library.
+
+Now perform the same steps as before, generating a Makefile from the
+Makefile.PL file, and running make.
+
+In order to test that our extension works, we now need to look at the
+file Mytest.t. This file is set up to imitate the same kind of testing
+structure that Perl itself has. Within the test script, you perform a
+number of tests to confirm the behavior of the extension, printing "ok"
+when the test is correct, "not ok" when it is not.
+
+ use Test::More tests => 4;
+ BEGIN { use_ok('Mytest') };
+
+ #########################
+
+ # Insert your test code below, the Test::More module is use()ed here so read
+ # its man page ( perldoc Test::More ) for help writing this test script.
+
+ is(&Mytest::is_even(0), 1);
+ is(&Mytest::is_even(1), 0);
+ is(&Mytest::is_even(2), 1);
+
+We will be calling the test script through the command "C<make test>". You
+should see output that looks something like this:
+
+ %make test
+ PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
+ t/Mytest....ok
+ All tests successful.
+ Files=1, Tests=4, 0 wallclock secs ( 0.03 cusr + 0.00 csys = 0.03 CPU)
+ %
+
+=head2 What has gone on?
+
+The program h2xs is the starting point for creating extensions. In later
+examples we'll see how we can use h2xs to read header files and generate
+templates to connect to C routines.
+
+h2xs creates a number of files in the extension directory. The file
+Makefile.PL is a perl script which will generate a true Makefile to build
+the extension. We'll take a closer look at it later.
+
+The .pm and .xs files contain the meat of the extension. The .xs file holds
+the C routines that make up the extension. The .pm file contains routines
+that tell Perl how to load your extension.
+
+Generating the Makefile and running C<make> created a directory called blib
+(which stands for "build library") in the current working directory. This
+directory will contain the shared library that we will build. Once we have
+tested it, we can install it into its final location.
+
+Invoking the test script via "C<make test>" did something very important.
+It invoked perl with all those C<-I> arguments so that it could find the
+various files that are part of the extension. It is I<very> important that
+while you are still testing extensions that you use "C<make test>". If you
+try to run the test script all by itself, you will get a fatal error.
+Another reason it is important to use "C<make test>" to run your test
+script is that if you are testing an upgrade to an already-existing version,
+using "C<make test>" ensures that you will test your new extension, not the
+already-existing version.
+
+When Perl sees a C<use extension;>, it searches for a file with the same name
+as the C<use>'d extension that has a .pm suffix. If that file cannot be found,
+Perl dies with a fatal error. The default search path is contained in the
+C<@INC> array.
+
+In our case, Mytest.pm tells perl that it will need the Exporter and Dynamic
+Loader extensions. It then sets the C<@ISA> and C<@EXPORT> arrays and the
+C<$VERSION> scalar; finally it tells perl to bootstrap the module. Perl
+will call its dynamic loader routine (if there is one) and load the shared
+library.
+
+The two arrays C<@ISA> and C<@EXPORT> are very important. The C<@ISA>
+array contains a list of other packages in which to search for methods (or
+subroutines) that do not exist in the current package. This is usually
+only important for object-oriented extensions (which we will talk about
+much later), and so usually doesn't need to be modified.
+
+The C<@EXPORT> array tells Perl which of the extension's variables and
+subroutines should be placed into the calling package's namespace. Because
+you don't know if the user has already used your variable and subroutine
+names, it's vitally important to carefully select what to export. Do I<not>
+export method or variable names I<by default> without a good reason.
+
+As a general rule, if the module is trying to be object-oriented then don't
+export anything. If it's just a collection of functions and variables, then
+you can export them via another array, called C<@EXPORT_OK>. This array
+does not automatically place its subroutine and variable names into the
+namespace unless the user specifically requests that this be done.
+
+See L<perlmod> for more information.
+
+The C<$VERSION> variable is used to ensure that the .pm file and the shared
+library are "in sync" with each other. Any time you make changes to
+the .pm or .xs files, you should increment the value of this variable.
+
+=head2 Writing good test scripts
+
+The importance of writing good test scripts cannot be over-emphasized. You
+should closely follow the "ok/not ok" style that Perl itself uses, so that
+it is very easy and unambiguous to determine the outcome of each test case.
+When you find and fix a bug, make sure you add a test case for it.
+
+By running "C<make test>", you ensure that your Mytest.t script runs and uses
+the correct version of your extension. If you have many test cases,
+save your test files in the "t" directory and use the suffix ".t".
+When you run "C<make test>", all of these test files will be executed.
+
+=head2 EXAMPLE 3
+
+Our third extension will take one argument as its input, round off that
+value, and set the I<argument> to the rounded value.
+
+Add the following to the end of Mytest.xs:
+
+ void
+ round(arg)
+ double arg
+ CODE:
+ if (arg > 0.0) {
+ arg = floor(arg + 0.5);
+ } else if (arg < 0.0) {
+ arg = ceil(arg - 0.5);
+ } else {
+ arg = 0.0;
+ }
+ OUTPUT:
+ arg
+
+Edit the Makefile.PL file so that the corresponding line looks like this:
+
+ 'LIBS' => ['-lm'], # e.g., '-lm'
+
+Generate the Makefile and run make. Change the test number in Mytest.t to
+"9" and add the following tests:
+
+ $i = -1.5; &Mytest::round($i); is( $i, -2.0 );
+ $i = -1.1; &Mytest::round($i); is( $i, -1.0 );
+ $i = 0.0; &Mytest::round($i); is( $i, 0.0 );
+ $i = 0.5; &Mytest::round($i); is( $i, 1.0 );
+ $i = 1.2; &Mytest::round($i); is( $i, 1.0 );
+
+Running "C<make test>" should now print out that all nine tests are okay.
+
+Notice that in these new test cases, the argument passed to round was a
+scalar variable. You might be wondering if you can round a constant or
+literal. To see what happens, temporarily add the following line to Mytest.t:
+
+ &Mytest::round(3);
+
+Run "C<make test>" and notice that Perl dies with a fatal error. Perl won't
+let you change the value of constants!
+
+=head2 What's new here?
+
+=over 4
+
+=item *
+
+We've made some changes to Makefile.PL. In this case, we've specified an
+extra library to be linked into the extension's shared library, the math
+library libm in this case. We'll talk later about how to write XSUBs that
+can call every routine in a library.
+
+=item *
+
+The value of the function is not being passed back as the function's return
+value, but by changing the value of the variable that was passed into the
+function. You might have guessed that when you saw that the return value
+of round is of type "void".
+
+=back
+
+=head2 Input and Output Parameters
+
+You specify the parameters that will be passed into the XSUB on the line(s)
+after you declare the function's return value and name. Each input parameter
+line starts with optional whitespace, and may have an optional terminating
+semicolon.
+
+The list of output parameters occurs at the very end of the function, just
+after the OUTPUT: directive. The use of RETVAL tells Perl that you
+wish to send this value back as the return value of the XSUB function. In
+Example 3, we wanted the "return value" placed in the original variable
+which we passed in, so we listed it (and not RETVAL) in the OUTPUT: section.
+
+=head2 The XSUBPP Program
+
+The B<xsubpp> program takes the XS code in the .xs file and translates it into
+C code, placing it in a file whose suffix is .c. The C code created makes
+heavy use of the C functions within Perl.
+
+=head2 The TYPEMAP file
+
+The B<xsubpp> program uses rules to convert from Perl's data types (scalar,
+array, etc.) to C's data types (int, char, etc.). These rules are stored
+in the typemap file ($PERLLIB/ExtUtils/typemap). There's a brief discussion
+below, but all the nitty-gritty details can be found in L<perlxstypemap>.
+If you have a new-enough version of perl (5.16 and up) or an upgraded
+XS compiler (C<ExtUtils::ParseXS> 3.13_01 or better), then you can inline
+typemaps in your XS instead of writing separate files.
+Either way, this typemap thing is split into three parts:
+
+The first section maps various C data types to a name, which corresponds
+somewhat with the various Perl types. The second section contains C code
+which B<xsubpp> uses to handle input parameters. The third section contains
+C code which B<xsubpp> uses to handle output parameters.
+
+Let's take a look at a portion of the .c file created for our extension.
+The file name is Mytest.c:
+
+ XS(XS_Mytest_round)
+ {
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Mytest::round(arg)");
+ PERL_UNUSED_VAR(cv); /* -W */
+ {
+ double arg = (double)SvNV(ST(0)); /* XXXXX */
+ if (arg > 0.0) {
+ arg = floor(arg + 0.5);
+ } else if (arg < 0.0) {
+ arg = ceil(arg - 0.5);
+ } else {
+ arg = 0.0;
+ }
+ sv_setnv(ST(0), (double)arg); /* XXXXX */
+ SvSETMAGIC(ST(0));
+ }
+ XSRETURN_EMPTY;
+ }
+
+Notice the two lines commented with "XXXXX". If you check the first part
+of the typemap file (or section), you'll see that doubles are of type
+T_DOUBLE. In the INPUT part of the typemap, an argument that is T_DOUBLE
+is assigned to the variable arg by calling the routine SvNV on something,
+then casting it to double, then assigned to the variable arg. Similarly,
+in the OUTPUT section, once arg has its final value, it is passed to the
+sv_setnv function to be passed back to the calling subroutine. These two
+functions are explained in L<perlguts>; we'll talk more later about what
+that "ST(0)" means in the section on the argument stack.
+
+=head2 Warning about Output Arguments
+
+In general, it's not a good idea to write extensions that modify their input
+parameters, as in Example 3. Instead, you should probably return multiple
+values in an array and let the caller handle them (we'll do this in a later
+example). However, in order to better accommodate calling pre-existing C
+routines, which often do modify their input parameters, this behavior is
+tolerated.
+
+=head2 EXAMPLE 4
+
+In this example, we'll now begin to write XSUBs that will interact with
+pre-defined C libraries. To begin with, we will build a small library of
+our own, then let h2xs write our .pm and .xs files for us.
+
+Create a new directory called Mytest2 at the same level as the directory
+Mytest. In the Mytest2 directory, create another directory called mylib,
+and cd into that directory.
+
+Here we'll create some files that will generate a test library. These will
+include a C source file and a header file. We'll also create a Makefile.PL
+in this directory. Then we'll make sure that running make at the Mytest2
+level will automatically run this Makefile.PL file and the resulting Makefile.
+
+In the mylib directory, create a file mylib.h that looks like this:
+
+ #define TESTVAL 4
+
+ extern double foo(int, long, const char*);
+
+Also create a file mylib.c that looks like this:
+
+ #include <stdlib.h>
+ #include "./mylib.h"
+
+ double
+ foo(int a, long b, const char *c)
+ {
+ return (a + b + atof(c) + TESTVAL);
+ }
+
+And finally create a file Makefile.PL that looks like this:
+
+ use ExtUtils::MakeMaker;
+ $Verbose = 1;
+ WriteMakefile(
+ NAME => 'Mytest2::mylib',
+ SKIP => [qw(all static static_lib dynamic dynamic_lib)],
+ clean => {'FILES' => 'libmylib$(LIB_EXT)'},
+ );
+
+
+ sub MY::top_targets {
+ '
+ all :: static
+
+ pure_all :: static
+
+ static :: libmylib$(LIB_EXT)
+
+ libmylib$(LIB_EXT): $(O_FILES)
+ $(AR) cr libmylib$(LIB_EXT) $(O_FILES)
+ $(RANLIB) libmylib$(LIB_EXT)
+
+ ';
+ }
+
+Make sure you use a tab and not spaces on the lines beginning with "$(AR)"
+and "$(RANLIB)". Make will not function properly if you use spaces.
+It has also been reported that the "cr" argument to $(AR) is unnecessary
+on Win32 systems.
+
+We will now create the main top-level Mytest2 files. Change to the directory
+above Mytest2 and run the following command:
+
+ % h2xs -O -n Mytest2 ./Mytest2/mylib/mylib.h
+
+This will print out a warning about overwriting Mytest2, but that's okay.
+Our files are stored in Mytest2/mylib, and will be untouched.
+
+The normal Makefile.PL that h2xs generates doesn't know about the mylib
+directory. We need to tell it that there is a subdirectory and that we
+will be generating a library in it. Let's add the argument MYEXTLIB to
+the WriteMakefile call so that it looks like this:
+
+ WriteMakefile(
+ 'NAME' => 'Mytest2',
+ 'VERSION_FROM' => 'Mytest2.pm', # finds $VERSION
+ 'LIBS' => [''], # e.g., '-lm'
+ 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING'
+ 'INC' => '', # e.g., '-I/usr/include/other'
+ 'MYEXTLIB' => 'mylib/libmylib$(LIB_EXT)',
+ );
+
+and then at the end add a subroutine (which will override the pre-existing
+subroutine). Remember to use a tab character to indent the line beginning
+with "cd"!
+
+ sub MY::postamble {
+ '
+ $(MYEXTLIB): mylib/Makefile
+ cd mylib && $(MAKE) $(PASSTHRU)
+ ';
+ }
+
+Let's also fix the MANIFEST file so that it accurately reflects the contents
+of our extension. The single line that says "mylib" should be replaced by
+the following three lines:
+
+ mylib/Makefile.PL
+ mylib/mylib.c
+ mylib/mylib.h
+
+To keep our namespace nice and unpolluted, edit the .pm file and change
+the variable C<@EXPORT> to C<@EXPORT_OK>. Finally, in the
+.xs file, edit the #include line to read:
+
+ #include "mylib/mylib.h"
+
+And also add the following function definition to the end of the .xs file:
+
+ double
+ foo(a,b,c)
+ int a
+ long b
+ const char * c
+ OUTPUT:
+ RETVAL
+
+Now we also need to create a typemap because the default Perl doesn't
+currently support the C<const char *> type. Include a new TYPEMAP
+section in your XS code before the above function:
+
+ TYPEMAP: <<END;
+ const char * T_PV
+ END
+
+Now run perl on the top-level Makefile.PL. Notice that it also created a
+Makefile in the mylib directory. Run make and watch that it does cd into
+the mylib directory and run make in there as well.
+
+Now edit the Mytest2.t script and change the number of tests to "4",
+and add the following lines to the end of the script:
+
+ is( &Mytest2::foo(1, 2, "Hello, world!"), 7 );
+ is( &Mytest2::foo(1, 2, "0.0"), 7 );
+ ok( abs(&Mytest2::foo(0, 0, "-3.4") - 0.6) <= 0.01 );
+
+(When dealing with floating-point comparisons, it is best to not check for
+equality, but rather that the difference between the expected and actual
+result is below a certain amount (called epsilon) which is 0.01 in this case)
+
+Run "C<make test>" and all should be well. There are some warnings on missing tests
+for the Mytest2::mylib extension, but you can ignore them.
+
+=head2 What has happened here?
+
+Unlike previous examples, we've now run h2xs on a real include file. This
+has caused some extra goodies to appear in both the .pm and .xs files.
+
+=over 4
+
+=item *
+
+In the .xs file, there's now a #include directive with the absolute path to
+the mylib.h header file. We changed this to a relative path so that we
+could move the extension directory if we wanted to.
+
+=item *
+
+There's now some new C code that's been added to the .xs file. The purpose
+of the C<constant> routine is to make the values that are #define'd in the
+header file accessible by the Perl script (by calling either C<TESTVAL> or
+C<&Mytest2::TESTVAL>). There's also some XS code to allow calls to the
+C<constant> routine.
+
+=item *
+
+The .pm file originally exported the name C<TESTVAL> in the C<@EXPORT> array.
+This could lead to name clashes. A good rule of thumb is that if the #define
+is only going to be used by the C routines themselves, and not by the user,
+they should be removed from the C<@EXPORT> array. Alternately, if you don't
+mind using the "fully qualified name" of a variable, you could move most
+or all of the items from the C<@EXPORT> array into the C<@EXPORT_OK> array.
+
+=item *
+
+If our include file had contained #include directives, these would not have
+been processed by h2xs. There is no good solution to this right now.
+
+=item *
+
+We've also told Perl about the library that we built in the mylib
+subdirectory. That required only the addition of the C<MYEXTLIB> variable
+to the WriteMakefile call and the replacement of the postamble subroutine
+to cd into the subdirectory and run make. The Makefile.PL for the
+library is a bit more complicated, but not excessively so. Again we
+replaced the postamble subroutine to insert our own code. This code
+simply specified that the library to be created here was a static archive
+library (as opposed to a dynamically loadable library) and provided the
+commands to build it.
+
+=back
+
+=head2 Anatomy of .xs file
+
+The .xs file of L<"EXAMPLE 4"> contained some new elements. To understand
+the meaning of these elements, pay attention to the line which reads
+
+ MODULE = Mytest2 PACKAGE = Mytest2
+
+Anything before this line is plain C code which describes which headers
+to include, and defines some convenience functions. No translations are
+performed on this part, apart from having embedded POD documentation
+skipped over (see L<perlpod>) it goes into the generated output C file as is.
+
+Anything after this line is the description of XSUB functions.
+These descriptions are translated by B<xsubpp> into C code which
+implements these functions using Perl calling conventions, and which
+makes these functions visible from Perl interpreter.
+
+Pay a special attention to the function C<constant>. This name appears
+twice in the generated .xs file: once in the first part, as a static C
+function, then another time in the second part, when an XSUB interface to
+this static C function is defined.
+
+This is quite typical for .xs files: usually the .xs file provides
+an interface to an existing C function. Then this C function is defined
+somewhere (either in an external library, or in the first part of .xs file),
+and a Perl interface to this function (i.e. "Perl glue") is described in the
+second part of .xs file. The situation in L<"EXAMPLE 1">, L<"EXAMPLE 2">,
+and L<"EXAMPLE 3">, when all the work is done inside the "Perl glue", is
+somewhat of an exception rather than the rule.
+
+=head2 Getting the fat out of XSUBs
+
+In L<"EXAMPLE 4"> the second part of .xs file contained the following
+description of an XSUB:
+
+ double
+ foo(a,b,c)
+ int a
+ long b
+ const char * c
+ OUTPUT:
+ RETVAL
+
+Note that in contrast with L<"EXAMPLE 1">, L<"EXAMPLE 2"> and L<"EXAMPLE 3">,
+this description does not contain the actual I<code> for what is done
+during a call to Perl function foo(). To understand what is going
+on here, one can add a CODE section to this XSUB:
+
+ double
+ foo(a,b,c)
+ int a
+ long b
+ const char * c
+ CODE:
+ RETVAL = foo(a,b,c);
+ OUTPUT:
+ RETVAL
+
+However, these two XSUBs provide almost identical generated C code: B<xsubpp>
+compiler is smart enough to figure out the C<CODE:> section from the first
+two lines of the description of XSUB. What about C<OUTPUT:> section? In
+fact, that is absolutely the same! The C<OUTPUT:> section can be removed
+as well, I<as far as C<CODE:> section or C<PPCODE:> section> is not
+specified: B<xsubpp> can see that it needs to generate a function call
+section, and will autogenerate the OUTPUT section too. Thus one can
+shortcut the XSUB to become:
+
+ double
+ foo(a,b,c)
+ int a
+ long b
+ const char * c
+
+Can we do the same with an XSUB
+
+ int
+ is_even(input)
+ int input
+ CODE:
+ RETVAL = (input % 2 == 0);
+ OUTPUT:
+ RETVAL
+
+of L<"EXAMPLE 2">? To do this, one needs to define a C function C<int
+is_even(int input)>. As we saw in L<Anatomy of .xs file>, a proper place
+for this definition is in the first part of .xs file. In fact a C function
+
+ int
+ is_even(int arg)
+ {
+ return (arg % 2 == 0);
+ }
+
+is probably overkill for this. Something as simple as a C<#define> will
+do too:
+
+ #define is_even(arg) ((arg) % 2 == 0)
+
+After having this in the first part of .xs file, the "Perl glue" part becomes
+as simple as
+
+ int
+ is_even(input)
+ int input
+
+This technique of separation of the glue part from the workhorse part has
+obvious tradeoffs: if you want to change a Perl interface, you need to
+change two places in your code. However, it removes a lot of clutter,
+and makes the workhorse part independent from idiosyncrasies of Perl calling
+convention. (In fact, there is nothing Perl-specific in the above description,
+a different version of B<xsubpp> might have translated this to TCL glue or
+Python glue as well.)
+
+=head2 More about XSUB arguments
+
+With the completion of Example 4, we now have an easy way to simulate some
+real-life libraries whose interfaces may not be the cleanest in the world.
+We shall now continue with a discussion of the arguments passed to the
+B<xsubpp> compiler.
+
+When you specify arguments to routines in the .xs file, you are really
+passing three pieces of information for each argument listed. The first
+piece is the order of that argument relative to the others (first, second,
+etc). The second is the type of argument, and consists of the type
+declaration of the argument (e.g., int, char*, etc). The third piece is
+the calling convention for the argument in the call to the library function.
+
+While Perl passes arguments to functions by reference,
+C passes arguments by value; to implement a C function which modifies data
+of one of the "arguments", the actual argument of this C function would be
+a pointer to the data. Thus two C functions with declarations
+
+ int string_length(char *s);
+ int upper_case_char(char *cp);
+
+may have completely different semantics: the first one may inspect an array
+of chars pointed by s, and the second one may immediately dereference C<cp>
+and manipulate C<*cp> only (using the return value as, say, a success
+indicator). From Perl one would use these functions in
+a completely different manner.
+
+One conveys this info to B<xsubpp> by replacing C<*> before the
+argument by C<&>. C<&> means that the argument should be passed to a library
+function by its address. The above two function may be XSUB-ified as
+
+ int
+ string_length(s)
+ char * s
+
+ int
+ upper_case_char(cp)
+ char &cp
+
+For example, consider:
+
+ int
+ foo(a,b)
+ char &a
+ char * b
+
+The first Perl argument to this function would be treated as a char and assigned
+to the variable a, and its address would be passed into the function foo.
+The second Perl argument would be treated as a string pointer and assigned to the
+variable b. The I<value> of b would be passed into the function foo. The
+actual call to the function foo that B<xsubpp> generates would look like this:
+
+ foo(&a, b);
+
+B<xsubpp> will parse the following function argument lists identically:
+
+ char &a
+ char&a
+ char & a
+
+However, to help ease understanding, it is suggested that you place a "&"
+next to the variable name and away from the variable type), and place a
+"*" near the variable type, but away from the variable name (as in the
+call to foo above). By doing so, it is easy to understand exactly what
+will be passed to the C function; it will be whatever is in the "last
+column".
+
+You should take great pains to try to pass the function the type of variable
+it wants, when possible. It will save you a lot of trouble in the long run.
+
+=head2 The Argument Stack
+
+If we look at any of the C code generated by any of the examples except
+example 1, you will notice a number of references to ST(n), where n is
+usually 0. "ST" is actually a macro that points to the n'th argument
+on the argument stack. ST(0) is thus the first argument on the stack and
+therefore the first argument passed to the XSUB, ST(1) is the second
+argument, and so on.
+
+When you list the arguments to the XSUB in the .xs file, that tells B<xsubpp>
+which argument corresponds to which of the argument stack (i.e., the first
+one listed is the first argument, and so on). You invite disaster if you
+do not list them in the same order as the function expects them.
+
+The actual values on the argument stack are pointers to the values passed
+in. When an argument is listed as being an OUTPUT value, its corresponding
+value on the stack (i.e., ST(0) if it was the first argument) is changed.
+You can verify this by looking at the C code generated for Example 3.
+The code for the round() XSUB routine contains lines that look like this:
+
+ double arg = (double)SvNV(ST(0));
+ /* Round the contents of the variable arg */
+ sv_setnv(ST(0), (double)arg);
+
+The arg variable is initially set by taking the value from ST(0), then is
+stored back into ST(0) at the end of the routine.
+
+XSUBs are also allowed to return lists, not just scalars. This must be
+done by manipulating stack values ST(0), ST(1), etc, in a subtly
+different way. See L<perlxs> for details.
+
+XSUBs are also allowed to avoid automatic conversion of Perl function arguments
+to C function arguments. See L<perlxs> for details. Some people prefer
+manual conversion by inspecting C<ST(i)> even in the cases when automatic
+conversion will do, arguing that this makes the logic of an XSUB call clearer.
+Compare with L<"Getting the fat out of XSUBs"> for a similar tradeoff of
+a complete separation of "Perl glue" and "workhorse" parts of an XSUB.
+
+While experts may argue about these idioms, a novice to Perl guts may
+prefer a way which is as little Perl-guts-specific as possible, meaning
+automatic conversion and automatic call generation, as in
+L<"Getting the fat out of XSUBs">. This approach has the additional
+benefit of protecting the XSUB writer from future changes to the Perl API.
+
+=head2 Extending your Extension
+
+Sometimes you might want to provide some extra methods or subroutines
+to assist in making the interface between Perl and your extension simpler
+or easier to understand. These routines should live in the .pm file.
+Whether they are automatically loaded when the extension itself is loaded
+or only loaded when called depends on where in the .pm file the subroutine
+definition is placed. You can also consult L<AutoLoader> for an alternate
+way to store and load your extra subroutines.
+
+=head2 Documenting your Extension
+
+There is absolutely no excuse for not documenting your extension.
+Documentation belongs in the .pm file. This file will be fed to pod2man,
+and the embedded documentation will be converted to the manpage format,
+then placed in the blib directory. It will be copied to Perl's
+manpage directory when the extension is installed.
+
+You may intersperse documentation and Perl code within the .pm file.
+In fact, if you want to use method autoloading, you must do this,
+as the comment inside the .pm file explains.
+
+See L<perlpod> for more information about the pod format.
+
+=head2 Installing your Extension
+
+Once your extension is complete and passes all its tests, installing it
+is quite simple: you simply run "make install". You will either need
+to have write permission into the directories where Perl is installed,
+or ask your system administrator to run the make for you.
+
+Alternately, you can specify the exact directory to place the extension's
+files by placing a "PREFIX=/destination/directory" after the make install.
+(or in between the make and install if you have a brain-dead version of make).
+This can be very useful if you are building an extension that will eventually
+be distributed to multiple systems. You can then just archive the files in
+the destination directory and distribute them to your destination systems.
+
+=head2 EXAMPLE 5
+
+In this example, we'll do some more work with the argument stack. The
+previous examples have all returned only a single value. We'll now
+create an extension that returns an array.
+
+This extension is very Unix-oriented (struct statfs and the statfs system
+call). If you are not running on a Unix system, you can substitute for
+statfs any other function that returns multiple values, you can hard-code
+values to be returned to the caller (although this will be a bit harder
+to test the error case), or you can simply not do this example. If you
+change the XSUB, be sure to fix the test cases to match the changes.
+
+Return to the Mytest directory and add the following code to the end of
+Mytest.xs:
+
+ void
+ statfs(path)
+ char * path
+ INIT:
+ int i;
+ struct statfs buf;
+
+ PPCODE:
+ i = statfs(path, &buf);
+ if (i == 0) {
+ XPUSHs(sv_2mortal(newSVnv(buf.f_bavail)));
+ XPUSHs(sv_2mortal(newSVnv(buf.f_bfree)));
+ XPUSHs(sv_2mortal(newSVnv(buf.f_blocks)));
+ XPUSHs(sv_2mortal(newSVnv(buf.f_bsize)));
+ XPUSHs(sv_2mortal(newSVnv(buf.f_ffree)));
+ XPUSHs(sv_2mortal(newSVnv(buf.f_files)));
+ XPUSHs(sv_2mortal(newSVnv(buf.f_type)));
+ } else {
+ XPUSHs(sv_2mortal(newSVnv(errno)));
+ }
+
+You'll also need to add the following code to the top of the .xs file, just
+after the include of "XSUB.h":
+
+ #include <sys/vfs.h>
+
+Also add the following code segment to Mytest.t while incrementing the "9"
+tests to "11":
+
+ @a = &Mytest::statfs("/blech");
+ ok( scalar(@a) == 1 && $a[0] == 2 );
+ @a = &Mytest::statfs("/");
+ is( scalar(@a), 7 );
+
+=head2 New Things in this Example
+
+This example added quite a few new concepts. We'll take them one at a time.
+
+=over 4
+
+=item *
+
+The INIT: directive contains code that will be placed immediately after
+the argument stack is decoded. C does not allow variable declarations at
+arbitrary locations inside a function,
+so this is usually the best way to declare local variables needed by the XSUB.
+(Alternatively, one could put the whole C<PPCODE:> section into braces, and
+put these declarations on top.)
+
+=item *
+
+This routine also returns a different number of arguments depending on the
+success or failure of the call to statfs. If there is an error, the error
+number is returned as a single-element array. If the call is successful,
+then a 7-element array is returned. Since only one argument is passed into
+this function, we need room on the stack to hold the 7 values which may be
+returned.
+
+We do this by using the PPCODE: directive, rather than the CODE: directive.
+This tells B<xsubpp> that we will be managing the return values that will be
+put on the argument stack by ourselves.
+
+=item *
+
+When we want to place values to be returned to the caller onto the stack,
+we use the series of macros that begin with "XPUSH". There are five
+different versions, for placing integers, unsigned integers, doubles,
+strings, and Perl scalars on the stack. In our example, we placed a
+Perl scalar onto the stack. (In fact this is the only macro which
+can be used to return multiple values.)
+
+The XPUSH* macros will automatically extend the return stack to prevent
+it from being overrun. You push values onto the stack in the order you
+want them seen by the calling program.
+
+=item *
+
+The values pushed onto the return stack of the XSUB are actually mortal SV's.
+They are made mortal so that once the values are copied by the calling
+program, the SV's that held the returned values can be deallocated.
+If they were not mortal, then they would continue to exist after the XSUB
+routine returned, but would not be accessible. This is a memory leak.
+
+=item *
+
+If we were interested in performance, not in code compactness, in the success
+branch we would not use C<XPUSHs> macros, but C<PUSHs> macros, and would
+pre-extend the stack before pushing the return values:
+
+ EXTEND(SP, 7);
+
+The tradeoff is that one needs to calculate the number of return values
+in advance (though overextending the stack will not typically hurt
+anything but memory consumption).
+
+Similarly, in the failure branch we could use C<PUSHs> I<without> extending
+the stack: the Perl function reference comes to an XSUB on the stack, thus
+the stack is I<always> large enough to take one return value.
+
+=back
+
+=head2 EXAMPLE 6
+
+In this example, we will accept a reference to an array as an input
+parameter, and return a reference to an array of hashes. This will
+demonstrate manipulation of complex Perl data types from an XSUB.
+
+This extension is somewhat contrived. It is based on the code in
+the previous example. It calls the statfs function multiple times,
+accepting a reference to an array of filenames as input, and returning
+a reference to an array of hashes containing the data for each of the
+filesystems.
+
+Return to the Mytest directory and add the following code to the end of
+Mytest.xs:
+
+ SV *
+ multi_statfs(paths)
+ SV * paths
+ INIT:
+ AV * results;
+ I32 numpaths = 0;
+ int i, n;
+ struct statfs buf;
+
+ SvGETMAGIC(paths);
+ if ((!SvROK(paths))
+ || (SvTYPE(SvRV(paths)) != SVt_PVAV)
+ || ((numpaths = av_top_index((AV *)SvRV(paths))) < 0))
+ {
+ XSRETURN_UNDEF;
+ }
+ results = (AV *)sv_2mortal((SV *)newAV());
+ CODE:
+ for (n = 0; n <= numpaths; n++) {
+ HV * rh;
+ STRLEN l;
+ char * fn = SvPV(*av_fetch((AV *)SvRV(paths), n, 0), l);
+
+ i = statfs(fn, &buf);
+ if (i != 0) {
+ av_push(results, newSVnv(errno));
+ continue;
+ }
+
+ rh = (HV *)sv_2mortal((SV *)newHV());
+
+ hv_store(rh, "f_bavail", 8, newSVnv(buf.f_bavail), 0);
+ hv_store(rh, "f_bfree", 7, newSVnv(buf.f_bfree), 0);
+ hv_store(rh, "f_blocks", 8, newSVnv(buf.f_blocks), 0);
+ hv_store(rh, "f_bsize", 7, newSVnv(buf.f_bsize), 0);
+ hv_store(rh, "f_ffree", 7, newSVnv(buf.f_ffree), 0);
+ hv_store(rh, "f_files", 7, newSVnv(buf.f_files), 0);
+ hv_store(rh, "f_type", 6, newSVnv(buf.f_type), 0);
+
+ av_push(results, newRV((SV *)rh));
+ }
+ RETVAL = newRV((SV *)results);
+ OUTPUT:
+ RETVAL
+
+And add the following code to Mytest.t, while incrementing the "11"
+tests to "13":
+
+ $results = Mytest::multi_statfs([ '/', '/blech' ]);
+ ok( ref $results->[0] );
+ ok( ! ref $results->[1] );
+
+=head2 New Things in this Example
+
+There are a number of new concepts introduced here, described below:
+
+=over 4
+
+=item *
+
+This function does not use a typemap. Instead, we declare it as accepting
+one SV* (scalar) parameter, and returning an SV* value, and we take care of
+populating these scalars within the code. Because we are only returning
+one value, we don't need a C<PPCODE:> directive - instead, we use C<CODE:>
+and C<OUTPUT:> directives.
+
+=item *
+
+When dealing with references, it is important to handle them with caution.
+The C<INIT:> block first calls SvGETMAGIC(paths), in case
+paths is a tied variable. Then it checks that C<SvROK> returns
+true, which indicates that paths is a valid reference. (Simply
+checking C<SvROK> won't trigger FETCH on a tied variable.) It
+then verifies that the object referenced by paths is an array, using C<SvRV>
+to dereference paths, and C<SvTYPE> to discover its type. As an added test,
+it checks that the array referenced by paths is non-empty, using the C<av_top_index>
+function (which returns -1 if the array is empty). The XSRETURN_UNDEF macro
+is used to abort the XSUB and return the undefined value whenever all three of
+these conditions are not met.
+
+=item *
+
+We manipulate several arrays in this XSUB. Note that an array is represented
+internally by an AV* pointer. The functions and macros for manipulating
+arrays are similar to the functions in Perl: C<av_top_index> returns the highest
+index in an AV*, much like $#array; C<av_fetch> fetches a single scalar value
+from an array, given its index; C<av_push> pushes a scalar value onto the
+end of the array, automatically extending the array as necessary.
+
+Specifically, we read pathnames one at a time from the input array, and
+store the results in an output array (results) in the same order. If
+statfs fails, the element pushed onto the return array is the value of
+errno after the failure. If statfs succeeds, though, the value pushed
+onto the return array is a reference to a hash containing some of the
+information in the statfs structure.
+
+As with the return stack, it would be possible (and a small performance win)
+to pre-extend the return array before pushing data into it, since we know
+how many elements we will return:
+
+ av_extend(results, numpaths);
+
+=item *
+
+We are performing only one hash operation in this function, which is storing
+a new scalar under a key using C<hv_store>. A hash is represented by an HV*
+pointer. Like arrays, the functions for manipulating hashes from an XSUB
+mirror the functionality available from Perl. See L<perlguts> and L<perlapi>
+for details.
+
+=item *
+
+To create a reference, we use the C<newRV> function. Note that you can
+cast an AV* or an HV* to type SV* in this case (and many others). This
+allows you to take references to arrays, hashes and scalars with the same
+function. Conversely, the C<SvRV> function always returns an SV*, which may
+need to be cast to the appropriate type if it is something other than a
+scalar (check with C<SvTYPE>).
+
+=item *
+
+At this point, xsubpp is doing very little work - the differences between
+Mytest.xs and Mytest.c are minimal.
+
+=back
+
+=head2 EXAMPLE 7 (Coming Soon)
+
+XPUSH args AND set RETVAL AND assign return value to array
+
+=head2 EXAMPLE 8 (Coming Soon)
+
+Setting $!
+
+=head2 EXAMPLE 9 Passing open files to XSes
+
+You would think passing files to an XS is difficult, with all the
+typeglobs and stuff. Well, it isn't.
+
+Suppose that for some strange reason we need a wrapper around the
+standard C library function C<fputs()>. This is all we need:
+
+ #define PERLIO_NOT_STDIO 0
+ #include "EXTERN.h"
+ #include "perl.h"
+ #include "XSUB.h"
+
+ #include <stdio.h>
+
+ int
+ fputs(s, stream)
+ char * s
+ FILE * stream
+
+The real work is done in the standard typemap.
+
+B<But> you lose all the fine stuff done by the perlio layers. This
+calls the stdio function C<fputs()>, which knows nothing about them.
+
+The standard typemap offers three variants of PerlIO *:
+C<InputStream> (T_IN), C<InOutStream> (T_INOUT) and C<OutputStream>
+(T_OUT). A bare C<PerlIO *> is considered a T_INOUT. If it matters
+in your code (see below for why it might) #define or typedef
+one of the specific names and use that as the argument or result
+type in your XS file.
+
+The standard typemap does not contain PerlIO * before perl 5.7,
+but it has the three stream variants. Using a PerlIO * directly
+is not backwards compatible unless you provide your own typemap.
+
+For streams coming I<from> perl the main difference is that
+C<OutputStream> will get the output PerlIO * - which may make
+a difference on a socket. Like in our example...
+
+For streams being handed I<to> perl a new file handle is created
+(i.e. a reference to a new glob) and associated with the PerlIO *
+provided. If the read/write state of the PerlIO * is not correct then you
+may get errors or warnings from when the file handle is used.
+So if you opened the PerlIO * as "w" it should really be an
+C<OutputStream> if open as "r" it should be an C<InputStream>.
+
+Now, suppose you want to use perlio layers in your XS. We'll use the
+perlio C<PerlIO_puts()> function as an example.
+
+In the C part of the XS file (above the first MODULE line) you
+have
+
+ #define OutputStream PerlIO *
+ or
+ typedef PerlIO * OutputStream;
+
+
+And this is the XS code:
+
+ int
+ perlioputs(s, stream)
+ char * s
+ OutputStream stream
+ CODE:
+ RETVAL = PerlIO_puts(stream, s);
+ OUTPUT:
+ RETVAL
+
+We have to use a C<CODE> section because C<PerlIO_puts()> has the arguments
+reversed compared to C<fputs()>, and we want to keep the arguments the same.
+
+Wanting to explore this thoroughly, we want to use the stdio C<fputs()>
+on a PerlIO *. This means we have to ask the perlio system for a stdio
+C<FILE *>:
+
+ int
+ perliofputs(s, stream)
+ char * s
+ OutputStream stream
+ PREINIT:
+ FILE *fp = PerlIO_findFILE(stream);
+ CODE:
+ if (fp != (FILE*) 0) {
+ RETVAL = fputs(s, fp);
+ } else {
+ RETVAL = -1;
+ }
+ OUTPUT:
+ RETVAL
+
+Note: C<PerlIO_findFILE()> will search the layers for a stdio
+layer. If it can't find one, it will call C<PerlIO_exportFILE()> to
+generate a new stdio C<FILE>. Please only call C<PerlIO_exportFILE()> if
+you want a I<new> C<FILE>. It will generate one on each call and push a
+new stdio layer. So don't call it repeatedly on the same
+file. C<PerlIO_findFILE()> will retrieve the stdio layer once it has been
+generated by C<PerlIO_exportFILE()>.
+
+This applies to the perlio system only. For versions before 5.7,
+C<PerlIO_exportFILE()> is equivalent to C<PerlIO_findFILE()>.
+
+=head2 Troubleshooting these Examples
+
+As mentioned at the top of this document, if you are having problems with
+these example extensions, you might see if any of these help you.
+
+=over 4
+
+=item *
+
+In versions of 5.002 prior to the gamma version, the test script in Example
+1 will not function properly. You need to change the "use lib" line to
+read:
+
+ use lib './blib';
+
+=item *
+
+In versions of 5.002 prior to version 5.002b1h, the test.pl file was not
+automatically created by h2xs. This means that you cannot say "make test"
+to run the test script. You will need to add the following line before the
+"use extension" statement:
+
+ use lib './blib';
+
+=item *
+
+In versions 5.000 and 5.001, instead of using the above line, you will need
+to use the following line:
+
+ BEGIN { unshift(@INC, "./blib") }
+
+=item *
+
+This document assumes that the executable named "perl" is Perl version 5.
+Some systems may have installed Perl version 5 as "perl5".
+
+=back
+
+=head1 See also
+
+For more information, consult L<perlguts>, L<perlapi>, L<perlxs>, L<perlmod>,
+and L<perlpod>.
+
+=head1 Author
+
+Jeff Okamoto <F<okamoto at corp.hp.com>>
+
+Reviewed and assisted by Dean Roehrich, Ilya Zakharevich, Andreas Koenig,
+and Tim Bunce.
+
+PerlIO material contributed by Lupe Christoph, with some clarification
+by Nick Ing-Simmons.
+
+Changes for h2xs as of Perl 5.8.x by Renee Baecker
+
+=head2 Last Changed
+
+2012-01-20
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxstypemap.pod
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxstypemap.pod (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/lib/perlxstypemap.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,699 @@
+=head1 NAME
+
+perlxstypemap - Perl XS C/Perl type mapping
+
+=head1 DESCRIPTION
+
+The more you think about interfacing between two languages, the more
+you'll realize that the majority of programmer effort has to go into
+converting between the data structures that are native to either of
+the languages involved. This trumps other matter such as differing
+calling conventions because the problem space is so much greater.
+There are simply more ways to shove data into memory than there are
+ways to implement a function call.
+
+Perl XS' attempt at a solution to this is the concept of typemaps.
+At an abstract level, a Perl XS typemap is nothing but a recipe for
+converting from a certain Perl data structure to a certain C
+data structure and vice versa. Since there can be C types that
+are sufficiently similar to warrant converting with the same logic,
+XS typemaps are represented by a unique identifier, henceforth
+called an <XS type> in this document. You can then tell the XS
+compiler that multiple C types are to be mapped with the same
+XS typemap.
+
+In your XS code, when you define an argument with a C type or when
+you are using a C<CODE:> and an C<OUTPUT:> section together with a
+C return type of your XSUB, it'll be the typemapping mechanism that
+makes this easy.
+
+=head2 Anatomy of a typemap
+
+In more practical terms, the typemap is a collection of code
+fragments which are used by the B<xsubpp> compiler to map C function
+parameters and values to Perl values. The typemap file may consist
+of three sections labelled C<TYPEMAP>, C<INPUT>, and C<OUTPUT>.
+An unlabelled initial section is assumed to be a C<TYPEMAP> section.
+The INPUT section tells the compiler how to translate Perl values
+into variables of certain C types. The OUTPUT section tells the
+compiler how to translate the values from certain C types into values
+Perl can understand. The TYPEMAP section tells the compiler which
+of the INPUT and OUTPUT code fragments should be used to map a given
+C type to a Perl value. The section labels C<TYPEMAP>, C<INPUT>, or
+C<OUTPUT> must begin in the first column on a line by themselves,
+and must be in uppercase.
+
+Each type of section can appear an arbitrary number of times
+and does not have to appear at all. For example, a typemap may
+commonly lack C<INPUT> and C<OUTPUT> sections if all it needs to
+do is associate additional C types with core XS types like T_PTROBJ.
+Lines that start with a hash C<#> are considered comments and ignored
+in the C<TYPEMAP> section, but are considered significant in C<INPUT>
+and C<OUTPUT>. Blank lines are generally ignored.
+
+Traditionally, typemaps needed to be written to a separate file,
+conventionally called C<typemap> in a CPAN distribution. With
+ExtUtils::ParseXS (the XS compiler) version 3.12 or better which
+comes with perl 5.16, typemaps can also be embedded directly into
+XS code using a HERE-doc like syntax:
+
+ TYPEMAP: <<HERE
+ ...
+ HERE
+
+where C<HERE> can be replaced by other identifiers like with normal
+Perl HERE-docs. All details below about the typemap textual format
+remain valid.
+
+The C<TYPEMAP> section should contain one pair of C type and
+XS type per line as follows. An example from the core typemap file:
+
+ TYPEMAP
+ # all variants of char* is handled by the T_PV typemap
+ char * T_PV
+ const char * T_PV
+ unsigned char * T_PV
+ ...
+
+The C<INPUT> and C<OUTPUT> sections have identical formats, that is,
+each unindented line starts a new in- or output map respectively.
+A new in- or output map must start with the name of the XS type to
+map on a line by itself, followed by the code that implements it
+indented on the following lines. Example:
+
+ INPUT
+ T_PV
+ $var = ($type)SvPV_nolen($arg)
+ T_PTR
+ $var = INT2PTR($type,SvIV($arg))
+
+We'll get to the meaning of those Perlish-looking variables in a
+little bit.
+
+Finally, here's an example of the full typemap file for mapping C
+strings of the C<char *> type to Perl scalars/strings:
+
+ TYPEMAP
+ char * T_PV
+
+ INPUT
+ T_PV
+ $var = ($type)SvPV_nolen($arg)
+
+ OUTPUT
+ T_PV
+ sv_setpv((SV*)$arg, $var);
+
+Here's a more complicated example: suppose that you wanted
+C<struct netconfig> to be blessed into the class C<Net::Config>.
+One way to do this is to use underscores (_) to separate package
+names, as follows:
+
+ typedef struct netconfig * Net_Config;
+
+And then provide a typemap entry C<T_PTROBJ_SPECIAL> that maps
+underscores to double-colons (::), and declare C<Net_Config> to be of
+that type:
+
+ TYPEMAP
+ Net_Config T_PTROBJ_SPECIAL
+
+ INPUT
+ T_PTROBJ_SPECIAL
+ if (sv_derived_from($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\")){
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type, tmp);
+ }
+ else
+ croak(\"$var is not of type ${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\")
+
+ OUTPUT
+ T_PTROBJ_SPECIAL
+ sv_setref_pv($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\",
+ (void*)$var);
+
+The INPUT and OUTPUT sections substitute underscores for double-colons
+on the fly, giving the desired effect. This example demonstrates some
+of the power and versatility of the typemap facility.
+
+The C<INT2PTR> macro (defined in perl.h) casts an integer to a pointer
+of a given type, taking care of the possible different size of integers
+and pointers. There are also C<PTR2IV>, C<PTR2UV>, C<PTR2NV> macros,
+to map the other way, which may be useful in OUTPUT sections.
+
+=head2 The Role of the typemap File in Your Distribution
+
+The default typemap in the F<lib/ExtUtils> directory of the Perl source
+contains many useful types which can be used by Perl extensions. Some
+extensions define additional typemaps which they keep in their own directory.
+These additional typemaps may reference INPUT and OUTPUT maps in the main
+typemap. The B<xsubpp> compiler will allow the extension's own typemap to
+override any mappings which are in the default typemap. Instead of using
+an additional F<typemap> file, typemaps may be embedded verbatim in XS
+with a heredoc-like syntax. See the documentation on the C<TYPEMAP:> XS
+keyword.
+
+For CPAN distributions, you can assume that the XS types defined by
+the perl core are already available. Additionally, the core typemap
+has default XS types for a large number of C types. For example, if
+you simply return a C<char *> from your XSUB, the core typemap will
+have this C type associated with the T_PV XS type. That means your
+C string will be copied into the PV (pointer value) slot of a new scalar
+that will be returned from your XSUB to to Perl.
+
+If you're developing a CPAN distribution using XS, you may add your own
+file called F<typemap> to the distribution. That file may contain
+typemaps that either map types that are specific to your code or that
+override the core typemap file's mappings for common C types.
+
+=head2 Sharing typemaps Between CPAN Distributions
+
+Starting with ExtUtils::ParseXS version 3.13_01 (comes with perl 5.16
+and better), it is rather easy to share typemap code between multiple
+CPAN distributions. The general idea is to share it as a module that
+offers a certain API and have the dependent modules declare that as a
+built-time requirement and import the typemap into the XS. An example
+of such a typemap-sharing module on CPAN is
+C<ExtUtils::Typemaps::Basic>. Two steps to getting that module's
+typemaps available in your code:
+
+=over 4
+
+=item *
+
+Declare C<ExtUtils::Typemaps::Basic> as a build-time dependency
+in C<Makefile.PL> (use C<BUILD_REQUIRES>), or in your C<Build.PL>
+(use C<build_requires>).
+
+=item *
+
+Include the following line in the XS section of your XS file:
+(don't break the line)
+
+ INCLUDE_COMMAND: $^X -MExtUtils::Typemaps::Cmd
+ -e "print embeddable_typemap(q{Basic})"
+
+=back
+
+=head2 Writing typemap Entries
+
+Each INPUT or OUTPUT typemap entry is a double-quoted Perl string that
+will be evaluated in the presence of certain variables to get the
+final C code for mapping a certain C type.
+
+This means that you can embed Perl code in your typemap (C) code using
+constructs such as
+C<${ perl code that evaluates to scalar reference here }>. A common
+use case is to generate error messages that refer to the true function
+name even when using the ALIAS XS feature:
+
+ ${ $ALIAS ? \q[GvNAME(CvGV(cv))] : \qq[\"$pname\"] }
+
+For many typemap examples, refer to the core typemap file that can be
+found in the perl source tree at F<lib/ExtUtils/typemap>.
+
+The Perl variables that are available for interpolation into typemaps
+are the following:
+
+=over 4
+
+=item *
+
+I<$var> - the name of the input or output variable, eg. RETVAL for
+return values.
+
+=item *
+
+I<$type> - the raw C type of the parameter, any C<:> replaced with
+C<_>.
+
+=item *
+
+I<$ntype> - the supplied type with C<*> replaced with C<Ptr>.
+e.g. for a type of C<Foo::Bar>, I<$ntype> is C<Foo::Bar>
+
+=item *
+
+I<$arg> - the stack entry, that the parameter is input from or output
+to, e.g. C<ST(0)>
+
+=item *
+
+I<$argoff> - the argument stack offset of the argument. ie. 0 for the
+first argument, etc.
+
+=item *
+
+I<$pname> - the full name of the XSUB, with including the C<PACKAGE>
+name, with any C<PREFIX> stripped. This is the non-ALIAS name.
+
+=item *
+
+I<$Package> - the package specified by the most recent C<PACKAGE>
+keyword.
+
+=item *
+
+I<$ALIAS> - non-zero if the current XSUB has any aliases declared with
+C<ALIAS>.
+
+=back
+
+=head2 Full Listing of Core Typemaps
+
+Each C type is represented by an entry in the typemap file that
+is responsible for converting perl variables (SV, AV, HV, CV, etc.)
+to and from that type. The following sections list all XS types
+that come with perl by default.
+
+=over 4
+
+=item T_SV
+
+This simply passes the C representation of the Perl variable (an SV*)
+in and out of the XS layer. This can be used if the C code wants
+to deal directly with the Perl variable.
+
+=item T_SVREF
+
+Used to pass in and return a reference to an SV.
+
+Note that this typemap does not decrement the reference count
+when returning the reference to an SV*.
+See also: T_SVREF_REFCOUNT_FIXED
+
+=item T_SVREF_FIXED
+
+Used to pass in and return a reference to an SV.
+This is a fixed
+variant of T_SVREF that decrements the refcount appropriately
+when returning a reference to an SV*. Introduced in perl 5.15.4.
+
+=item T_AVREF
+
+From the perl level this is a reference to a perl array.
+From the C level this is a pointer to an AV.
+
+Note that this typemap does not decrement the reference count
+when returning an AV*. See also: T_AVREF_REFCOUNT_FIXED
+
+=item T_AVREF_REFCOUNT_FIXED
+
+From the perl level this is a reference to a perl array.
+From the C level this is a pointer to an AV. This is a fixed
+variant of T_AVREF that decrements the refcount appropriately
+when returning an AV*. Introduced in perl 5.15.4.
+
+=item T_HVREF
+
+From the perl level this is a reference to a perl hash.
+From the C level this is a pointer to an HV.
+
+Note that this typemap does not decrement the reference count
+when returning an HV*. See also: T_HVREF_REFCOUNT_FIXED
+
+=item T_HVREF_REFCOUNT_FIXED
+
+From the perl level this is a reference to a perl hash.
+From the C level this is a pointer to an HV. This is a fixed
+variant of T_HVREF that decrements the refcount appropriately
+when returning an HV*. Introduced in perl 5.15.4.
+
+=item T_CVREF
+
+From the perl level this is a reference to a perl subroutine
+(e.g. $sub = sub { 1 };). From the C level this is a pointer
+to a CV.
+
+Note that this typemap does not decrement the reference count
+when returning an HV*. See also: T_HVREF_REFCOUNT_FIXED
+
+=item T_CVREF_REFCOUNT_FIXED
+
+From the perl level this is a reference to a perl subroutine
+(e.g. $sub = sub { 1 };). From the C level this is a pointer
+to a CV.
+
+This is a fixed
+variant of T_HVREF that decrements the refcount appropriately
+when returning an HV*. Introduced in perl 5.15.4.
+
+=item T_SYSRET
+
+The T_SYSRET typemap is used to process return values from system calls.
+It is only meaningful when passing values from C to perl (there is
+no concept of passing a system return value from Perl to C).
+
+System calls return -1 on error (setting ERRNO with the reason)
+and (usually) 0 on success. If the return value is -1 this typemap
+returns C<undef>. If the return value is not -1, this typemap
+translates a 0 (perl false) to "0 but true" (which
+is perl true) or returns the value itself, to indicate that the
+command succeeded.
+
+The L<POSIX|POSIX> module makes extensive use of this type.
+
+=item T_UV
+
+An unsigned integer.
+
+=item T_IV
+
+A signed integer. This is cast to the required integer type when
+passed to C and converted to an IV when passed back to Perl.
+
+=item T_INT
+
+A signed integer. This typemap converts the Perl value to a native
+integer type (the C<int> type on the current platform). When returning
+the value to perl it is processed in the same way as for T_IV.
+
+Its behaviour is identical to using an C<int> type in XS with T_IV.
+
+=item T_ENUM
+
+An enum value. Used to transfer an enum component
+from C. There is no reason to pass an enum value to C since
+it is stored as an IV inside perl.
+
+=item T_BOOL
+
+A boolean type. This can be used to pass true and false values to and
+from C.
+
+=item T_U_INT
+
+This is for unsigned integers. It is equivalent to using T_UV
+but explicitly casts the variable to type C<unsigned int>.
+The default type for C<unsigned int> is T_UV.
+
+=item T_SHORT
+
+Short integers. This is equivalent to T_IV but explicitly casts
+the return to type C<short>. The default typemap for C<short>
+is T_IV.
+
+=item T_U_SHORT
+
+Unsigned short integers. This is equivalent to T_UV but explicitly
+casts the return to type C<unsigned short>. The default typemap for
+C<unsigned short> is T_UV.
+
+T_U_SHORT is used for type C<U16> in the standard typemap.
+
+=item T_LONG
+
+Long integers. This is equivalent to T_IV but explicitly casts
+the return to type C<long>. The default typemap for C<long>
+is T_IV.
+
+=item T_U_LONG
+
+Unsigned long integers. This is equivalent to T_UV but explicitly
+casts the return to type C<unsigned long>. The default typemap for
+C<unsigned long> is T_UV.
+
+T_U_LONG is used for type C<U32> in the standard typemap.
+
+=item T_CHAR
+
+Single 8-bit characters.
+
+=item T_U_CHAR
+
+An unsigned byte.
+
+=item T_FLOAT
+
+A floating point number. This typemap guarantees to return a variable
+cast to a C<float>.
+
+=item T_NV
+
+A Perl floating point number. Similar to T_IV and T_UV in that the
+return type is cast to the requested numeric type rather than
+to a specific type.
+
+=item T_DOUBLE
+
+A double precision floating point number. This typemap guarantees to
+return a variable cast to a C<double>.
+
+=item T_PV
+
+A string (char *).
+
+=item T_PTR
+
+A memory address (pointer). Typically associated with a C<void *>
+type.
+
+=item T_PTRREF
+
+Similar to T_PTR except that the pointer is stored in a scalar and the
+reference to that scalar is returned to the caller. This can be used
+to hide the actual pointer value from the programmer since it is usually
+not required directly from within perl.
+
+The typemap checks that a scalar reference is passed from perl to XS.
+
+=item T_PTROBJ
+
+Similar to T_PTRREF except that the reference is blessed into a class.
+This allows the pointer to be used as an object. Most commonly used to
+deal with C structs. The typemap checks that the perl object passed
+into the XS routine is of the correct class (or part of a subclass).
+
+The pointer is blessed into a class that is derived from the name
+of type of the pointer but with all '*' in the name replaced with
+'Ptr'.
+
+=item T_REF_IV_REF
+
+NOT YET
+
+=item T_REF_IV_PTR
+
+Similar to T_PTROBJ in that the pointer is blessed into a scalar object.
+The difference is that when the object is passed back into XS it must be
+of the correct type (inheritance is not supported).
+
+The pointer is blessed into a class that is derived from the name
+of type of the pointer but with all '*' in the name replaced with
+'Ptr'.
+
+=item T_PTRDESC
+
+NOT YET
+
+=item T_REFREF
+
+Similar to T_PTRREF, except the pointer stored in the referenced scalar
+is dereferenced and copied to the output variable. This means that
+T_REFREF is to T_PTRREF as T_OPAQUE is to T_OPAQUEPTR. All clear?
+
+Only the INPUT part of this is implemented (Perl to XSUB) and there
+are no known users in core or on CPAN.
+
+=item T_REFOBJ
+
+NOT YET
+
+=item T_OPAQUEPTR
+
+This can be used to store bytes in the string component of the
+SV. Here the representation of the data is irrelevant to perl and the
+bytes themselves are just stored in the SV. It is assumed that the C
+variable is a pointer (the bytes are copied from that memory
+location). If the pointer is pointing to something that is
+represented by 8 bytes then those 8 bytes are stored in the SV (and
+length() will report a value of 8). This entry is similar to T_OPAQUE.
+
+In principle the unpack() command can be used to convert the bytes
+back to a number (if the underlying type is known to be a number).
+
+This entry can be used to store a C structure (the number
+of bytes to be copied is calculated using the C C<sizeof> function)
+and can be used as an alternative to T_PTRREF without having to worry
+about a memory leak (since Perl will clean up the SV).
+
+=item T_OPAQUE
+
+This can be used to store data from non-pointer types in the string
+part of an SV. It is similar to T_OPAQUEPTR except that the
+typemap retrieves the pointer directly rather than assuming it
+is being supplied. For example, if an integer is imported into
+Perl using T_OPAQUE rather than T_IV the underlying bytes representing
+the integer will be stored in the SV but the actual integer value will
+not be available. i.e. The data is opaque to perl.
+
+The data may be retrieved using the C<unpack> function if the
+underlying type of the byte stream is known.
+
+T_OPAQUE supports input and output of simple types.
+T_OPAQUEPTR can be used to pass these bytes back into C if a pointer
+is acceptable.
+
+=item Implicit array
+
+xsubpp supports a special syntax for returning
+packed C arrays to perl. If the XS return type is given as
+
+ array(type, nelem)
+
+xsubpp will copy the contents of C<nelem * sizeof(type)> bytes from
+RETVAL to an SV and push it onto the stack. This is only really useful
+if the number of items to be returned is known at compile time and you
+don't mind having a string of bytes in your SV. Use T_ARRAY to push a
+variable number of arguments onto the return stack (they won't be
+packed as a single string though).
+
+This is similar to using T_OPAQUEPTR but can be used to process more
+than one element.
+
+=item T_PACKED
+
+Calls user-supplied functions for conversion. For C<OUTPUT>
+(XSUB to Perl), a function named C<XS_pack_$ntype> is called
+with the output Perl scalar and the C variable to convert from.
+C<$ntype> is the normalized C type that is to be mapped to
+Perl. Normalized means that all C<*> are replaced by the
+string C<Ptr>. The return value of the function is ignored.
+
+Conversely for C<INPUT> (Perl to XSUB) mapping, the
+function named C<XS_unpack_$ntype> is called with the input Perl
+scalar as argument and the return value is cast to the mapped
+C type and assigned to the output C variable.
+
+An example conversion function for a typemapped struct
+C<foo_t *> might be:
+
+ static void
+ XS_pack_foo_tPtr(SV *out, foo_t *in)
+ {
+ dTHX; /* alas, signature does not include pTHX_ */
+ HV* hash = newHV();
+ hv_stores(hash, "int_member", newSViv(in->int_member));
+ hv_stores(hash, "float_member", newSVnv(in->float_member));
+ /* ... */
+
+ /* mortalize as thy stack is not refcounted */
+ sv_setsv(out, sv_2mortal(newRV_noinc((SV*)hash)));
+ }
+
+The conversion from Perl to C is left as an exercise to the reader,
+but the prototype would be:
+
+ static foo_t *
+ XS_unpack_foo_tPtr(SV *in);
+
+Instead of an actual C function that has to fetch the thread context
+using C<dTHX>, you can define macros of the same name and avoid the
+overhead. Also, keep in mind to possibly free the memory allocated by
+C<XS_unpack_foo_tPtr>.
+
+=item T_PACKEDARRAY
+
+T_PACKEDARRAY is similar to T_PACKED. In fact, the C<INPUT> (Perl
+to XSUB) typemap is indentical, but the C<OUTPUT> typemap passes
+an additional argument to the C<XS_pack_$ntype> function. This
+third parameter indicates the number of elements in the output
+so that the function can handle C arrays sanely. The variable
+needs to be declared by the user and must have the name
+C<count_$ntype> where C<$ntype> is the normalized C type name
+as explained above. The signature of the function would be for
+the example above and C<foo_t **>:
+
+ static void
+ XS_pack_foo_tPtrPtr(SV *out, foo_t *in, UV count_foo_tPtrPtr);
+
+The type of the third parameter is arbitrary as far as the typemap
+is concerned. It just has to be in line with the declared variable.
+
+Of course, unless you know the number of elements in the
+C<sometype **> C array, within your XSUB, the return value from
+C<foo_t ** XS_unpack_foo_tPtrPtr(...)> will be hard to decypher.
+Since the details are all up to the XS author (the typemap user),
+there are several solutions, none of which particularly elegant.
+The most commonly seen solution has been to allocate memory for
+N+1 pointers and assign C<NULL> to the (N+1)th to facilitate
+iteration.
+
+Alternatively, using a customized typemap for your purposes in
+the first place is probably preferrable.
+
+=item T_DATAUNIT
+
+NOT YET
+
+=item T_CALLBACK
+
+NOT YET
+
+=item T_ARRAY
+
+This is used to convert the perl argument list to a C array
+and for pushing the contents of a C array onto the perl
+argument stack.
+
+The usual calling signature is
+
+ @out = array_func( @in );
+
+Any number of arguments can occur in the list before the array but
+the input and output arrays must be the last elements in the list.
+
+When used to pass a perl list to C the XS writer must provide a
+function (named after the array type but with 'Ptr' substituted for
+'*') to allocate the memory required to hold the list. A pointer
+should be returned. It is up to the XS writer to free the memory on
+exit from the function. The variable C<ix_$var> is set to the number
+of elements in the new array.
+
+When returning a C array to Perl the XS writer must provide an integer
+variable called C<size_$var> containing the number of elements in the
+array. This is used to determine how many elements should be pushed
+onto the return argument stack. This is not required on input since
+Perl knows how many arguments are on the stack when the routine is
+called. Ordinarily this variable would be called C<size_RETVAL>.
+
+Additionally, the type of each element is determined from the type of
+the array. If the array uses type C<intArray *> xsubpp will
+automatically work out that it contains variables of type C<int> and
+use that typemap entry to perform the copy of each element. All
+pointer '*' and 'Array' tags are removed from the name to determine
+the subtype.
+
+=item T_STDIO
+
+This is used for passing perl filehandles to and from C using
+C<FILE *> structures.
+
+=item T_INOUT
+
+This is used for passing perl filehandles to and from C using
+C<PerlIO *> structures. The file handle can used for reading and
+writing. This corresponds to the C<+E<lt>> mode, see also T_IN
+and T_OUT.
+
+See L<perliol> for more information on the Perl IO abstraction
+layer. Perl must have been built with C<-Duseperlio>.
+
+There is no check to assert that the filehandle passed from Perl
+to C was created with the right C<open()> mode.
+
+Hint: The L<perlxstut> tutorial covers the T_INOUT, T_IN, and T_OUT
+XS types nicely.
+
+=item T_IN
+
+Same as T_INOUT, but the filehandle that is returned from C to Perl
+can only be used for reading (mode C<E<lt>>).
+
+=item T_OUT
+
+Same as T_INOUT, but the filehandle that is returned from C to Perl
+is set to use the open mode C<+E<gt>>.
+
+=back
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/001-basic.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/001-basic.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/001-basic.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,89 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More tests => 11;
+use Config;
+use DynaLoader;
+use ExtUtils::CBuilder;
+
+my ($source_file, $obj_file, $lib_file);
+
+require_ok( 'ExtUtils::ParseXS' );
+ExtUtils::ParseXS->import('process_file');
+
+chdir 't' or die "Can't chdir to t/, $!";
+
+use Carp; $SIG{__WARN__} = \&Carp::cluck;
+
+#########################
+
+# Try sending to filehandle
+tie *FH, 'Foo';
+process_file( filename => 'XSTest.xs', output => \*FH, prototypes => 1 );
+like tied(*FH)->content, '/is_even/', "Test that output contains some text";
+
+$source_file = 'XSTest.c';
+
+# Try sending to file
+process_file(filename => 'XSTest.xs', output => $source_file, prototypes => 0);
+ok -e $source_file, "Create an output file";
+
+my $quiet = $ENV{PERL_CORE} && !$ENV{HARNESS_ACTIVE};
+my $b = ExtUtils::CBuilder->new(quiet => $quiet);
+
+SKIP: {
+ skip "no compiler available", 2
+ if ! $b->have_compiler;
+ $obj_file = $b->compile( source => $source_file );
+ ok $obj_file, "ExtUtils::CBuilder::compile() returned true value";
+ ok -e $obj_file, "Make sure $obj_file exists";
+}
+
+SKIP: {
+ skip "no dynamic loading", 5
+ if !$b->have_compiler || !$Config{usedl};
+ my $module = 'XSTest';
+ $lib_file = $b->link( objects => $obj_file, module_name => $module );
+ ok $lib_file, "ExtUtils::CBuilder::link() returned true value";
+ ok -e $lib_file, "Make sure $lib_file exists";
+
+ eval {require XSTest};
+ is $@, '', "No error message recorded, as expected";
+ ok XSTest::is_even(8),
+ "Function created thru XS returned expected true value";
+ ok !XSTest::is_even(9),
+ "Function created thru XS returned expected false value";
+
+ # Win32 needs to close the DLL before it can unlink it, but unfortunately
+ # dl_unload_file was missing on Win32 prior to perl change #24679!
+ if ($^O eq 'MSWin32' and defined &DynaLoader::dl_unload_file) {
+ for (my $i = 0; $i < @DynaLoader::dl_modules; $i++) {
+ if ($DynaLoader::dl_modules[$i] eq $module) {
+ DynaLoader::dl_unload_file($DynaLoader::dl_librefs[$i]);
+ last;
+ }
+ }
+ }
+}
+
+my $seen = 0;
+open my $IN, '<', $source_file
+ or die "Unable to open $source_file: $!";
+while (my $l = <$IN>) {
+ $seen++ if $l =~ m/#line\s1\s/;
+}
+close $IN or die "Unable to close $source_file: $!";
+is( $seen, 1, "Linenumbers created in output file, as intended" );
+
+unless ($ENV{PERL_NO_CLEANUP}) {
+ for ( $obj_file, $lib_file, $source_file) {
+ next unless defined $_;
+ 1 while unlink $_;
+ }
+}
+
+#####################################################################
+
+sub Foo::TIEHANDLE { bless {}, 'Foo' }
+sub Foo::PRINT { shift->{buf} .= join '', @_ }
+sub Foo::content { shift->{buf} }
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/002-more.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/002-more.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/002-more.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,116 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More;
+use Config;
+use DynaLoader;
+use ExtUtils::CBuilder;
+use attributes;
+use overload;
+
+plan tests => 28;
+
+my ($source_file, $obj_file, $lib_file);
+
+require_ok( 'ExtUtils::ParseXS' );
+ExtUtils::ParseXS->import('process_file');
+
+chdir 't' or die "Can't chdir to t/, $!";
+
+use Carp; $SIG{__WARN__} = \&Carp::cluck;
+
+#########################
+
+$source_file = 'XSMore.c';
+
+# Try sending to file
+ExtUtils::ParseXS->process_file(
+ filename => 'XSMore.xs',
+ output => $source_file,
+);
+ok -e $source_file, "Create an output file";
+
+my $quiet = $ENV{PERL_CORE} && !$ENV{HARNESS_ACTIVE};
+my $b = ExtUtils::CBuilder->new(quiet => $quiet);
+
+SKIP: {
+ skip "no compiler available", 2
+ if ! $b->have_compiler;
+ $obj_file = $b->compile( source => $source_file );
+ ok $obj_file, "ExtUtils::CBuilder::compile() returned true value";
+ ok -e $obj_file, "Make sure $obj_file exists";
+}
+
+SKIP: {
+ skip "no dynamic loading", 24
+ if !$b->have_compiler || !$Config{usedl};
+ my $module = 'XSMore';
+ $lib_file = $b->link( objects => $obj_file, module_name => $module );
+ ok $lib_file, "ExtUtils::CBuilder::link() returned true value";
+ ok -e $lib_file, "Make sure $lib_file exists";
+
+ eval{
+ package XSMore;
+ our $VERSION = 42;
+ our $boot_ok;
+ DynaLoader::bootstrap_inherit(__PACKAGE__, $VERSION); # VERSIONCHECK disabled
+
+ sub new{ bless {}, shift }
+ };
+ is $@, '', "No error message recorded, as expected";
+ is ExtUtils::ParseXS::report_error_count(), 0, 'ExtUtils::ParseXS::errors()';
+
+ is $XSMore::boot_ok, 100, 'the BOOT keyword';
+
+ ok XSMore::include_ok(), 'the INCLUDE keyword';
+ is prototype(\&XSMore::include_ok), "", 'the PROTOTYPES keyword';
+
+ is prototype(\&XSMore::prototype_ssa), '$$@', 'the PROTOTYPE keyword';
+
+ is_deeply [attributes::get(\&XSMore::attr_method)], [qw(method)], 'the ATTRS keyword';
+ is prototype(\&XSMore::attr_method), '$;@', 'ATTRS with prototype';
+
+ is XSMore::return_1(), 1, 'the CASE keyword (1)';
+ is XSMore::return_2(), 2, 'the CASE keyword (2)';
+ is prototype(\&XSMore::return_1), "", 'ALIAS with prototype (1)';
+ is prototype(\&XSMore::return_2), "", 'ALIAS with prototype (2)';
+
+ is XSMore::arg_init(200), 200, 'argument init';
+
+ ok overload::Overloaded(XSMore->new), 'the FALLBACK keyword';
+ is abs(XSMore->new), 42, 'the OVERLOAD keyword';
+
+ my @a;
+ XSMore::hook(\@a);
+ is_deeply \@a, [qw(INIT CODE POSTCALL CLEANUP)], 'the INIT & POSTCALL & CLEANUP keywords';
+
+ is_deeply [XSMore::outlist()], [ord('a'), ord('b')], 'the OUTLIST keyword';
+
+ is XSMore::len("foo"), 3, 'the length keyword';
+
+ is XSMore::sum(5, 9), 14, 'the INCLUDE_COMMAND directive';
+
+ # Tests for embedded typemaps
+ is XSMore::typemaptest1(), 42, 'Simple embedded typemap works';
+ is XSMore::typemaptest2(), 42, 'Simple embedded typemap works with funny end marker';
+ is XSMore::typemaptest3(12, 13, 14), 12, 'Simple embedded typemap works for input, too';
+
+ # Win32 needs to close the DLL before it can unlink it, but unfortunately
+ # dl_unload_file was missing on Win32 prior to perl change #24679!
+ if ($^O eq 'MSWin32' and defined &DynaLoader::dl_unload_file) {
+ for (my $i = 0; $i < @DynaLoader::dl_modules; $i++) {
+ if ($DynaLoader::dl_modules[$i] eq $module) {
+ DynaLoader::dl_unload_file($DynaLoader::dl_librefs[$i]);
+ last;
+ }
+ }
+ }
+}
+
+unless ($ENV{PERL_NO_CLEANUP}) {
+ for ( $obj_file, $lib_file, $source_file) {
+ next unless defined $_;
+ 1 while unlink $_;
+ }
+}
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/003-usage.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/003-usage.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/003-usage.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,117 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More;
+use Config;
+use DynaLoader;
+use ExtUtils::CBuilder;
+
+if ( $] < 5.008 ) {
+ plan skip_all => "INTERFACE keyword support broken before 5.8";
+}
+else {
+ plan tests => 24;
+}
+
+my ($source_file, $obj_file, $lib_file, $module);
+
+require_ok( 'ExtUtils::ParseXS' );
+ExtUtils::ParseXS->import('process_file');
+
+chdir 't' or die "Can't chdir to t/, $!";
+
+use Carp; $SIG{__WARN__} = \&Carp::cluck;
+
+#########################
+
+$source_file = 'XSUsage.c';
+
+# Try sending to file
+process_file(filename => 'XSUsage.xs', output => $source_file);
+ok -e $source_file, "Create an output file";
+
+# TEST doesn't like extraneous output
+my $quiet = $ENV{PERL_CORE} && !$ENV{HARNESS_ACTIVE};
+
+# Try to compile the file! Don't get too fancy, though.
+my $b = ExtUtils::CBuilder->new(quiet => $quiet);
+
+SKIP: {
+ skip "no compiler available", 2
+ if ! $b->have_compiler;
+ $module = 'XSUsage';
+
+ $obj_file = $b->compile( source => $source_file );
+ ok $obj_file;
+ ok -e $obj_file, "Make sure $obj_file exists";
+}
+SKIP: {
+ skip "no dynamic loading", 20
+ if !$b->have_compiler || !$Config{usedl};
+
+ $lib_file = $b->link( objects => $obj_file, module_name => $module );
+ ok $lib_file;
+ ok -e $lib_file, "Make sure $lib_file exists";
+
+ eval {require XSUsage};
+ is $@, '';
+
+ # The real tests here - for each way of calling the functions, call with the
+ # wrong number of arguments and check the Usage line is what we expect
+
+ eval { XSUsage::one(1) };
+ ok $@;
+ ok $@ =~ /^Usage: XSUsage::one/;
+
+ eval { XSUsage::two(1) };
+ ok $@;
+ ok $@ =~ /^Usage: XSUsage::two/;
+
+ eval { XSUsage::two_x(1) };
+ ok $@;
+ ok $@ =~ /^Usage: XSUsage::two_x/;
+
+ eval { FOO::two(1) };
+ ok $@;
+ ok $@ =~ /^Usage: FOO::two/;
+
+ eval { XSUsage::three(1) };
+ ok $@;
+ ok $@ =~ /^Usage: XSUsage::three/;
+
+ eval { XSUsage::four(1) };
+ ok !$@;
+
+ eval { XSUsage::five() };
+ ok $@;
+ ok $@ =~ /^Usage: XSUsage::five/;
+
+ eval { XSUsage::six() };
+ ok !$@;
+
+ eval { XSUsage::six(1) };
+ ok !$@;
+
+ eval { XSUsage::six(1,2) };
+ ok $@;
+ ok $@ =~ /^Usage: XSUsage::six/;
+
+ # Win32 needs to close the DLL before it can unlink it, but unfortunately
+ # dl_unload_file was missing on Win32 prior to perl change #24679!
+ if ($^O eq 'MSWin32' and defined &DynaLoader::dl_unload_file) {
+ for (my $i = 0; $i < @DynaLoader::dl_modules; $i++) {
+ if ($DynaLoader::dl_modules[$i] eq $module) {
+ DynaLoader::dl_unload_file($DynaLoader::dl_librefs[$i]);
+ last;
+ }
+ }
+ }
+}
+
+unless ($ENV{PERL_NO_CLEANUP}) {
+ for ( $obj_file, $lib_file, $source_file) {
+ next unless defined $_;
+ 1 while unlink $_;
+ }
+}
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/004-nolinenumbers.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/004-nolinenumbers.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/004-nolinenumbers.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+
+use strict;
+use Test::More tests => 11;
+use Config;
+use DynaLoader;
+use ExtUtils::CBuilder;
+
+my ($source_file, $obj_file, $lib_file);
+
+require_ok( 'ExtUtils::ParseXS' );
+ExtUtils::ParseXS->import('process_file');
+
+chdir 't' or die "Can't chdir to t/, $!";
+
+use Carp; $SIG{__WARN__} = \&Carp::cluck;
+
+#########################
+
+# Try sending to filehandle
+tie *FH, 'Foo';
+process_file(
+ filename => 'XSTest.xs',
+ output => \*FH,
+ prototypes => 1,
+ linenumbers => 0,
+);
+like tied(*FH)->content, '/is_even/', "Test that output contains some text";
+
+$source_file = 'XSTest.c';
+
+# Try sending to file
+process_file(
+ filename => 'XSTest.xs',
+ output => $source_file,
+ prototypes => 0,
+ linenumbers => 0,
+);
+ok -e $source_file, "Create an output file";
+
+my $quiet = $ENV{PERL_CORE} && !$ENV{HARNESS_ACTIVE};
+my $b = ExtUtils::CBuilder->new(quiet => $quiet);
+
+SKIP: {
+ skip "no compiler available", 2
+ if ! $b->have_compiler;
+ $obj_file = $b->compile( source => $source_file );
+ ok $obj_file, "ExtUtils::CBuilder::compile() returned true value";
+ ok -e $obj_file, "Make sure $obj_file exists";
+}
+
+SKIP: {
+ skip "no dynamic loading", 5
+ if !$b->have_compiler || !$Config{usedl};
+ my $module = 'XSTest';
+ $lib_file = $b->link( objects => $obj_file, module_name => $module );
+ ok $lib_file, "ExtUtils::CBuilder::link() returned true value";
+ ok -e $lib_file, "Make sure $lib_file exists";
+
+ eval {require XSTest};
+ is $@, '', "No error message recorded, as expected";
+ ok XSTest::is_even(8),
+ "Function created thru XS returned expected true value";
+ ok !XSTest::is_even(9),
+ "Function created thru XS returned expected false value";
+
+ # Win32 needs to close the DLL before it can unlink it, but unfortunately
+ # dl_unload_file was missing on Win32 prior to perl change #24679!
+ if ($^O eq 'MSWin32' and defined &DynaLoader::dl_unload_file) {
+ for (my $i = 0; $i < @DynaLoader::dl_modules; $i++) {
+ if ($DynaLoader::dl_modules[$i] eq $module) {
+ DynaLoader::dl_unload_file($DynaLoader::dl_librefs[$i]);
+ last;
+ }
+ }
+ }
+}
+
+my $seen = 0;
+open my $IN, '<', $source_file
+ or die "Unable to open $source_file: $!";
+while (my $l = <$IN>) {
+ $seen++ if $l =~ m/#line\s1\s/;
+}
+close $IN or die "Unable to close $source_file: $!";
+is( $seen, 0, "No linenumbers created in output file, as intended" );
+
+
+unless ($ENV{PERL_NO_CLEANUP}) {
+ for ( $obj_file, $lib_file, $source_file) {
+ next unless defined $_;
+ 1 while unlink $_;
+ }
+}
+
+#####################################################################
+
+sub Foo::TIEHANDLE { bless {}, 'Foo' }
+sub Foo::PRINT { shift->{buf} .= join '', @_ }
+sub Foo::content { shift->{buf} }
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/101-standard_typemap_locations.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More tests => 3;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ standard_typemap_locations
+);
+
+{
+ local @INC = @INC;
+ my @stl = standard_typemap_locations( \@INC );
+ ok( @stl >= 9, "At least 9 entries in typemap locations list" );
+ is( $stl[$#stl], 'typemap',
+ "Last element is typemap in current directory");
+ SKIP: {
+ skip "No lib/ExtUtils/ directories under directories in \@INC",
+ 1
+ unless @stl > 9;
+
+ # We check only as many location entries from the start of the array
+ # (where the @INC-related entries are) as there are entries from @INC.
+ # We manage to do that by stopping when we find the "updir" related
+ # entries, which we assume is never contained in a default @INC entry.
+ my $updir = File::Spec->updir;
+ my $max = $#INC;
+ $max = $#stl if $#stl < $max;
+ foreach my $i (0.. $max) {
+ $max = $i, last if $stl[$i] =~ /\Q$updir\E/;
+ }
+
+ ok(
+ ( 0 < (grep -f $_, @stl[0..$max]) ),
+ "At least one typemap file exists underneath \@INC directories"
+ );
+ }
+}
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/102-trim_whitespace.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/102-trim_whitespace.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/102-trim_whitespace.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,30 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More tests => 5;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ trim_whitespace
+);
+
+my $str;
+
+$str = 'overworked';
+trim_whitespace($str);
+is( $str, 'overworked', "Got expected value" );
+
+$str = ' overworked';
+trim_whitespace($str);
+is( $str, 'overworked', "Got expected value" );
+
+$str = 'overworked ';
+trim_whitespace($str);
+is( $str, 'overworked', "Got expected value" );
+
+$str = ' overworked ';
+trim_whitespace($str);
+is( $str, 'overworked', "Got expected value" );
+
+$str = "\toverworked";
+trim_whitespace($str);
+is( $str, 'overworked', "Got expected value" );
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/103-tidy_type.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/103-tidy_type.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/103-tidy_type.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More tests => 3;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ tidy_type
+);
+
+my $input;
+
+$input = ' * ** ';
+is( tidy_type($input), '***',
+ "Got expected value for '$input'" );
+
+$input = ' * ** ';
+is( tidy_type($input), '***',
+ "Got expected value for '$input'" );
+
+$input = ' * ** foobar * ';
+is( tidy_type($input), '*** foobar *',
+ "Got expected value for '$input'" );
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/104-map_type.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/104-map_type.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/104-map_type.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More tests => 7;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ map_type
+);
+
+my ($self, $type, $varname);
+my ($result, $expected);
+
+$type = 'struct DATA *';
+$varname = 'RETVAL';
+$self->{hiertype} = 0;
+$expected = "$type\t$varname";
+$result = map_type($self, $type, $varname);
+is( $result, $expected,
+ "Got expected map_type for <$type>, <$varname>, <$self->{hiertype}>" );
+
+$type = 'Crypt::Shark';
+$varname = undef;
+$self->{hiertype} = 0;
+$expected = 'Crypt__Shark';
+$result = map_type($self, $type, $varname);
+is( $result, $expected,
+ "Got expected map_type for <$type>, undef, <$self->{hiertype}>" );
+
+$type = 'Crypt::Shark';
+$varname = undef;
+$self->{hiertype} = 1;
+$expected = 'Crypt::Shark';
+$result = map_type($self, $type, $varname);
+is( $result, $expected,
+ "Got expected map_type for <$type>, undef, <$self->{hiertype}>" );
+
+$type = 'Crypt::TC18';
+$varname = 'RETVAL';
+$self->{hiertype} = 0;
+$expected = "Crypt__TC18\t$varname";
+$result = map_type($self, $type, $varname);
+is( $result, $expected,
+ "Got expected map_type for <$type>, <$varname>, <$self->{hiertype}>" );
+
+$type = 'Crypt::TC18';
+$varname = 'RETVAL';
+$self->{hiertype} = 1;
+$expected = "Crypt::TC18\t$varname";
+$result = map_type($self, $type, $varname);
+is( $result, $expected,
+ "Got expected map_type for <$type>, <$varname>, <$self->{hiertype}>" );
+
+$type = 'array(alpha,beta) gamma';
+$varname = 'RETVAL';
+$self->{hiertype} = 0;
+$expected = "alpha *\t$varname";
+$result = map_type($self, $type, $varname);
+is( $result, $expected,
+ "Got expected map_type for <$type>, <$varname>, <$self->{hiertype}>" );
+
+$type = '(*)';
+$varname = 'RETVAL';
+$self->{hiertype} = 0;
+$expected = "(* $varname )";
+$result = map_type($self, $type, $varname);
+is( $result, $expected,
+ "Got expected map_type for <$type>, <$varname>, <$self->{hiertype}>" );
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/105-valid_proto_string.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/105-valid_proto_string.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/105-valid_proto_string.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More tests => 6;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ valid_proto_string
+);
+
+my ($input, $output);
+
+$input = '[\$]';
+$output = valid_proto_string($input);
+is( $output, $input, "Got expected value for <$input>" );
+
+$input = '[$]';
+$output = valid_proto_string($input);
+is( $output, $input, "Got expected value for <$input>" );
+
+$input = '[\$\@]';
+$output = valid_proto_string($input);
+is( $output, $input, "Got expected value for <$input>" );
+
+$input = '[\$alpha]';
+$output = valid_proto_string($input);
+is( $output, 0, "Got expected value for <$input>" );
+
+$input = '[alpha]';
+$output = valid_proto_string($input);
+is( $output, 0, "Got expected value for <$input>" );
+
+$input = '[_]';
+$output = valid_proto_string($input);
+is( $output, $input, "Got expected value for <$input>" );
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/106-process_typemaps.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/106-process_typemaps.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/106-process_typemaps.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Carp;
+use Cwd;
+use File::Spec;
+use File::Temp qw( tempdir );
+use Test::More tests => 2;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ process_typemaps
+);
+
+my $startdir = cwd();
+{
+ my ($type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref);
+ my $typemap = 'typemap';
+ my $tdir = tempdir( CLEANUP => 1 );
+ chdir $tdir or croak "Unable to change to tempdir for testing";
+ eval {
+ ($type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref)
+ = process_typemaps( $typemap, $tdir );
+ };
+ like( $@, qr/Can't find \Q$typemap\E in \Q$tdir\E/, #'
+ "Got expected result for no typemap in current directory" );
+ chdir $startdir;
+}
+
+{
+ my ($type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref);
+ my $typemap = [ qw( pseudo typemap ) ];
+ my $tdir = tempdir( CLEANUP => 1 );
+ chdir $tdir or croak "Unable to change to tempdir for testing";
+ open my $IN, '>', 'typemap' or croak "Cannot open for writing";
+ print $IN "\n";
+ close $IN or croak "Cannot close after writing";
+ eval {
+ ($type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref)
+ = process_typemaps( $typemap, $tdir );
+ };
+ like( $@, qr/Can't find pseudo in \Q$tdir\E/, #'
+ "Got expected result for no typemap in current directory" );
+ chdir $startdir;
+}
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/107-make_targetable.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/107-make_targetable.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/107-make_targetable.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,146 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Carp;
+use Cwd;
+use File::Spec;
+use File::Temp qw( tempdir );
+use Test::More qw(no_plan); # tests => 7;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ make_targetable
+);
+
+my $output_expr_ref = {
+ 'T_CALLBACK' => ' sv_setpvn($arg, $var.context.value().chp(),
+ $var.context.value().size());
+',
+ 'T_OUT' => ' {
+ GV *gv = newGVgen("$Package");
+ if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
+',
+ 'T_REF_IV_PTR' => ' sv_setref_pv($arg, \\"${ntype}\\", (void*)$var);
+',
+ 'T_U_LONG' => ' sv_setuv($arg, (UV)$var);
+',
+ 'T_U_CHAR' => ' sv_setuv($arg, (UV)$var);
+',
+ 'T_U_INT' => ' sv_setuv($arg, (UV)$var);
+',
+ 'T_ARRAY' => ' {
+ U32 ix_$var;
+ EXTEND(SP,size_$var);
+ for (ix_$var = 0; ix_$var < size_$var; ix_$var++) {
+ ST(ix_$var) = sv_newmortal();
+ DO_ARRAY_ELEM
+ }
+ }
+',
+ 'T_NV' => ' sv_setnv($arg, (NV)$var);
+',
+ 'T_SHORT' => ' sv_setiv($arg, (IV)$var);
+',
+ 'T_OPAQUE' => ' sv_setpvn($arg, (char *)&$var, sizeof($var));
+',
+ 'T_PTROBJ' => ' sv_setref_pv($arg, \\"${ntype}\\", (void*)$var);
+',
+ 'T_HVREF' => ' $arg = newRV((SV*)$var);
+',
+ 'T_PACKEDARRAY' => ' XS_pack_$ntype($arg, $var, count_$ntype);
+',
+ 'T_INT' => ' sv_setiv($arg, (IV)$var);
+',
+ 'T_OPAQUEPTR' => ' sv_setpvn($arg, (char *)$var, sizeof(*$var));
+',
+ 'T_BOOL' => ' $arg = boolSV($var);
+',
+ 'T_REFREF' => ' NOT_IMPLEMENTED
+',
+ 'T_REF_IV_REF' => ' sv_setref_pv($arg, \\"${ntype}\\", (void*)new $ntype($var));
+',
+ 'T_STDIO' => ' {
+ GV *gv = newGVgen("$Package");
+ PerlIO *fp = PerlIO_importFILE($var,0);
+ if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
+',
+ 'T_FLOAT' => ' sv_setnv($arg, (double)$var);
+',
+ 'T_IN' => ' {
+ GV *gv = newGVgen("$Package");
+ if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
+',
+ 'T_PV' => ' sv_setpv((SV*)$arg, $var);
+',
+ 'T_INOUT' => ' {
+ GV *gv = newGVgen("$Package");
+ if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
+',
+ 'T_CHAR' => ' sv_setpvn($arg, (char *)&$var, 1);
+',
+ 'T_LONG' => ' sv_setiv($arg, (IV)$var);
+',
+ 'T_DOUBLE' => ' sv_setnv($arg, (double)$var);
+',
+ 'T_PTR' => ' sv_setiv($arg, PTR2IV($var));
+',
+ 'T_AVREF' => ' $arg = newRV((SV*)$var);
+',
+ 'T_SV' => ' $arg = $var;
+',
+ 'T_ENUM' => ' sv_setiv($arg, (IV)$var);
+',
+ 'T_REFOBJ' => ' NOT IMPLEMENTED
+',
+ 'T_CVREF' => ' $arg = newRV((SV*)$var);
+',
+ 'T_UV' => ' sv_setuv($arg, (UV)$var);
+',
+ 'T_PACKED' => ' XS_pack_$ntype($arg, $var);
+',
+ 'T_SYSRET' => ' if ($var != -1) {
+ if ($var == 0)
+ sv_setpvn($arg, "0 but true", 10);
+ else
+ sv_setiv($arg, (IV)$var);
+ }
+',
+ 'T_IV' => ' sv_setiv($arg, (IV)$var);
+',
+ 'T_PTRDESC' => ' sv_setref_pv($arg, \\"${ntype}\\", (void*)new\\U${type}_DESC\\E($var));
+',
+ 'T_DATAUNIT' => ' sv_setpvn($arg, $var.chp(), $var.size());
+',
+ 'T_U_SHORT' => ' sv_setuv($arg, (UV)$var);
+',
+ 'T_SVREF' => ' $arg = newRV((SV*)$var);
+',
+ 'T_PTRREF' => ' sv_setref_pv($arg, Nullch, (void*)$var);
+',
+};
+
+my %targetable;
+%targetable = make_targetable($output_expr_ref);
+
+ok(! exists $targetable{'T_AVREF'},
+ "Element found in 'output_expr' not found in \%targetable: not an 'sv_set'" );
+
+ok(exists $targetable{'T_CALLBACK'},
+ "Element found in 'output_expr' found in \%targetable as expected" );
+
+pass("Passed all tests in $0");
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/108-map_type.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/108-map_type.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/108-map_type.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Carp;
+use Cwd;
+use File::Spec;
+use File::Temp qw( tempdir );
+use Test::More qw(no_plan); # tests => 7;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ map_type
+);
+
+#print "\t" . map_type($self->{ret_type}, 'RETVAL', $self->{hiertype}) . ";\n"
+#print "\t" . map_type($var_type, $var_name, $self->{hiertype});
+#print "\t" . map_type($var_type, undef, $self->{hiertype});
+
+pass("Passed all tests in $0");
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/109-standard_XS_defs.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/109-standard_XS_defs.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/109-standard_XS_defs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+$| = 1;
+use Test::More tests => 5;
+use lib qw( lib t/lib );
+use ExtUtils::ParseXS::Utilities qw(
+ standard_XS_defs
+);
+use PrimitiveCapture;
+
+my @statements = (
+ '#ifndef PERL_UNUSED_VAR',
+ '#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE',
+ '#ifdef PERL_IMPLICIT_CONTEXT',
+ '#ifdef newXS_flags',
+);
+
+my $stdout = PrimitiveCapture::capture_stdout(sub {
+ standard_XS_defs();
+});
+
+foreach my $s (@statements) {
+ like( $stdout, qr/$s/s, "Printed <$s>" );
+}
+
+pass("Passed all tests in $0");
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/110-assign_func_args.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/110-assign_func_args.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/110-assign_func_args.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,52 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Carp;
+use Cwd;
+use File::Spec;
+use File::Temp qw( tempdir );
+use Test::More qw(no_plan); # tests => 7;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ assign_func_args
+);
+
+#sub assign_func_args {
+# my ($self, $argsref, $class) = @_;
+# return join(", ", @func_args);
+
+my ($self, @args, $class);
+my ($func_args, $expected);
+
+ at args = qw( alpha beta gamma );
+$self->{in_out}->{alpha} = 'OUT';
+$expected = q|&alpha, beta, gamma|;
+$func_args = assign_func_args($self, \@args, $class);
+is( $func_args, $expected,
+ "Got expected func_args: in_out true; class undefined" );
+
+ at args = ( 'My::Class', qw( beta gamma ) );
+$self->{in_out}->{beta} = 'OUT';
+$class = 'My::Class';
+$expected = q|&beta, gamma|;
+$func_args = assign_func_args($self, \@args, $class);
+is( $func_args, $expected,
+ "Got expected func_args: in_out true; class defined" );
+
+ at args = ( 'My::Class', qw( beta gamma ) );
+$self->{in_out}->{beta} = '';
+$class = 'My::Class';
+$expected = q|beta, gamma|;
+$func_args = assign_func_args($self, \@args, $class);
+is( $func_args, $expected,
+ "Got expected func_args: in_out false; class defined" );
+
+ at args = qw( alpha beta gamma );
+$self->{in_out}->{alpha} = '';
+$class = undef;
+$expected = q|alpha, beta, gamma|;
+$func_args = assign_func_args($self, \@args, $class);
+is( $func_args, $expected,
+ "Got expected func_args: in_out false; class undefined" );
+
+pass("Passed all tests in $0");
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/111-analyze_preprocessor_statements.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/111-analyze_preprocessor_statements.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/111-analyze_preprocessor_statements.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+$| = 1;
+use Carp;
+use Cwd;
+use File::Spec;
+use File::Temp qw( tempdir );
+use Test::More qw(no_plan); # tests => 7;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ analyze_preprocessor_statements
+);
+
+# ( $self, $XSS_work_idx, $BootCode_ref ) =
+# analyze_preprocessor_statements(
+# $self, $statement, $XSS_work_idx, $BootCode_ref
+# );
+
+pass("Passed all tests in $0");
+
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/112-set_cond.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/112-set_cond.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/112-set_cond.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Carp;
+use Cwd;
+use File::Spec;
+use File::Temp qw( tempdir );
+use Test::More qw(no_plan); # tests => 7;
+use lib qw( lib );
+use ExtUtils::ParseXS::Utilities qw(
+ set_cond
+);
+
+pass("Passed all tests in $0");
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/113-check_cond_preproc_statements.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/113-check_cond_preproc_statements.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/113-check_cond_preproc_statements.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,149 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Carp;
+use Cwd;
+use File::Spec;
+use File::Temp qw( tempdir );
+use Test::More tests => 13;
+use lib qw( lib t/lib );
+use ExtUtils::ParseXS;
+use ExtUtils::ParseXS::Utilities qw(
+ check_conditional_preprocessor_statements
+);
+use PrimitiveCapture;
+
+my $self = bless({} => 'ExtUtils::ParseXS');
+$self->{line} = [];
+$self->{XSStack} = [];
+$self->{XSStack}->[0] = {};
+
+{
+ $self->{line} = [
+ "#if this_is_an_if_statement",
+ "Alpha this is not an if/elif/elsif/endif",
+ "#elif this_is_an_elif_statement",
+ "Beta this is not an if/elif/elsif/endif",
+ "#else this_is_an_else_statement",
+ "Gamma this is not an if/elif/elsif/endif",
+ "#endif this_is_an_endif_statement",
+ ];
+ $self->{line_no} = [ 17 .. 23 ];
+ $self->{XSStack}->[-1]{type} = 'if';
+ $self->{filename} = 'myfile1';
+
+ my $rv;
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ $rv = check_conditional_preprocessor_statements($self);
+ });
+
+ is( $rv, 0, "Basic case: returned 0: all ifs resolved" );
+ ok( ! $stderr, "No warnings captured, as expected" );
+}
+
+{
+ $self->{line} = [
+ "#if this_is_an_if_statement",
+ "Alpha this is not an if/elif/elsif/endif",
+ "#if this_is_a_different_if_statement",
+ "Beta this is not an if/elif/elsif/endif",
+ "#endif this_is_a_different_endif_statement",
+ "Gamma this is not an if/elif/elsif/endif",
+ "#endif this_is_an_endif_statement",
+ ];
+ $self->{line_no} = [ 17 .. 23 ];
+ $self->{XSStack}->[-1]{type} = 'if';
+ $self->{filename} = 'myfile1';
+
+ my $rv;
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ $rv = check_conditional_preprocessor_statements($self);
+ });
+ is( $rv, 0, "One nested if case: returned 0: all ifs resolved" );
+ ok( ! $stderr, "No warnings captured, as expected" );
+}
+
+{
+ $self->{line} = [
+ "Alpha this is not an if/elif/elsif/endif",
+ "#elif this_is_an_elif_statement",
+ "Beta this is not an if/elif/elsif/endif",
+ "#else this_is_an_else_statement",
+ "Gamma this is not an if/elif/elsif/endif",
+ "#endif this_is_an_endif_statement",
+ ];
+ $self->{line_no} = [ 17 .. 22 ];
+ $self->{XSStack}->[-1]{type} = 'if';
+ $self->{filename} = 'myfile1';
+
+ my $rv;
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ $rv = check_conditional_preprocessor_statements($self);
+ });
+ is( $rv, undef,
+ "Missing 'if' case: returned undef: all ifs resolved" );
+ like( $stderr,
+ qr/Warning: #else\/elif\/endif without #if in this function/,
+ "Got expected warning: lack of #if"
+ );
+ like( $stderr,
+ qr/precede it with a blank line/s,
+ "Got expected warning: advice re blank line"
+ );
+}
+
+{
+ $self->{line} = [
+ "Alpha this is not an if/elif/elsif/endif",
+ "#elif this_is_an_elif_statement",
+ "Beta this is not an if/elif/elsif/endif",
+ "#else this_is_an_else_statement",
+ "Gamma this is not an if/elif/elsif/endif",
+ "#endif this_is_an_endif_statement",
+ ];
+ $self->{line_no} = [ 17 .. 22 ];
+ $self->{XSStack}->[-1]{type} = 'file';
+ $self->{filename} = 'myfile1';
+
+ my $rv;
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ $rv = check_conditional_preprocessor_statements($self);
+ });
+ is( $rv, undef,
+ "Missing 'if' case: returned undef: all ifs resolved" );
+ like( $stderr,
+ qr/Warning: #else\/elif\/endif without #if in this function/,
+ "Got expected warning: lack of #if"
+ );
+ unlike( $stderr,
+ qr/precede it with a blank line/s,
+ "Did not get unexpected stderr"
+ );
+}
+
+{
+ $self->{line} = [
+ "#if this_is_an_if_statement",
+ "Alpha this is not an if/elif/elsif/endif",
+ "#elif this_is_an_elif_statement",
+ "Beta this is not an if/elif/elsif/endif",
+ "#else this_is_an_else_statement",
+ "Gamma this is not an if/elif/elsif/endif",
+ ];
+ $self->{line_no} = [ 17 .. 22 ];
+ $self->{XSStack}->[-1]{type} = 'if';
+ $self->{filename} = 'myfile1';
+
+ my $rv;
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ $rv = check_conditional_preprocessor_statements($self);
+ });
+ isnt( $rv, 0,
+ "Missing 'endif' case: returned non-zero as expected" );
+ like( $stderr,
+ qr/Warning: #if without #endif in this function/s,
+ "Got expected warning: lack of #endif"
+ );
+}
+
+pass("Passed all tests in $0");
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/114-blurt_death_Warn.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/114-blurt_death_Warn.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/114-blurt_death_Warn.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,132 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+$| = 1;
+use Carp;
+use Cwd;
+use File::Spec;
+use File::Temp qw( tempdir );
+use Test::More tests => 7;
+use lib qw( lib t/lib );
+use ExtUtils::ParseXS;
+use ExtUtils::ParseXS::Utilities qw(
+ Warn
+ blurt
+ death
+);
+use PrimitiveCapture;
+
+my $self = bless({} => 'ExtUtils::ParseXS');
+$self->{line} = [];
+$self->{line_no} = [];
+
+{
+ $self->{line} = [
+ 'Alpha',
+ 'Beta',
+ 'Gamma',
+ 'Delta',
+ ];
+ $self->{line_no} = [ 17 .. 20 ];
+ $self->{filename} = 'myfile1';
+
+ my $message = 'Warning: Ignoring duplicate alias';
+
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ Warn( $self, $message);
+ });
+ like( $stderr,
+ qr/$message in $self->{filename}, line 20/,
+ "Got expected Warn output",
+ );
+}
+
+{
+ $self->{line} = [
+ 'Alpha',
+ 'Beta',
+ 'Gamma',
+ 'Delta',
+ 'Epsilon',
+ ];
+ $self->{line_no} = [ 17 .. 20 ];
+ $self->{filename} = 'myfile2';
+
+ my $message = 'Warning: Ignoring duplicate alias';
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ Warn( $self, $message);
+ });
+ like( $stderr,
+ qr/$message in $self->{filename}, line 19/,
+ "Got expected Warn output",
+ );
+}
+
+{
+ $self->{line} = [
+ 'Alpha',
+ 'Beta',
+ 'Gamma',
+ 'Delta',
+ ];
+ $self->{line_no} = [ 17 .. 21 ];
+ $self->{filename} = 'myfile1';
+
+ my $message = 'Warning: Ignoring duplicate alias';
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ Warn( $self, $message);
+ });
+ like( $stderr,
+ qr/$message in $self->{filename}, line 17/,
+ "Got expected Warn output",
+ );
+}
+
+{
+ $self->{line} = [
+ 'Alpha',
+ 'Beta',
+ 'Gamma',
+ 'Delta',
+ ];
+ $self->{line_no} = [ 17 .. 20 ];
+ $self->{filename} = 'myfile1';
+ $self->{errors} = 0;
+
+
+ my $message = 'Error: Cannot parse function definition';
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ blurt( $self, $message);
+ });
+ like( $stderr,
+ qr/$message in $self->{filename}, line 20/,
+ "Got expected blurt output",
+ );
+ is( $self->{errors}, 1, "Error count incremented correctly" );
+}
+
+SKIP: {
+ skip "death() not testable as long as it contains hard-coded 'exit'", 1;
+
+ $self->{line} = [
+ 'Alpha',
+ 'Beta',
+ 'Gamma',
+ 'Delta',
+ ];
+ $self->{line_no} = [ 17 .. 20 ];
+ $self->{filename} = 'myfile1';
+
+ my $message = "Code is not inside a function";
+ eval {
+ my $stderr = PrimitiveCapture::capture_stderr(sub {
+ death( $self, $message);
+ });
+ like( $stderr,
+ qr/$message in $self->{filename}, line 20/,
+ "Got expected death output",
+ );
+ };
+}
+
+pass("Passed all tests in $0");
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/115-avoid-noise.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/115-avoid-noise.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/115-avoid-noise.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+use File::Spec;
+use Test::More tests => 1;
+use lib qw( lib t/lib );
+use ExtUtils::ParseXS qw(process_file);
+
+chdir 't' or die "Can't chdir to t/, $!";
+
+# Module-Build uses ExtUtils::ParseXS with $^W set, try to avoid
+# warning in that case.
+
+{
+ my $out;
+ open my $out_fh, ">", \$out;
+ my @warnings;
+ local $SIG{__WARN__} = sub { push @warnings, "@_" };
+ process_file(filename => "XSWarn.xs", output => $out_fh);
+ is_deeply(\@warnings, [], "shouldn't be any warnings");
+}
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/501-t-compile.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/501-t-compile.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/501-t-compile.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+use strict;
+BEGIN {
+ $| = 1;
+ $^W = 1;
+}
+
+use Test::More tests => 2;
+
+# Check their perl version
+ok( $] >= 5.006001, "Your perl is new enough" );
+
+# Does the module load
+use_ok( 'ExtUtils::Typemaps' );
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/510-t-bare.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/510-t-bare.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/510-t-bare.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,160 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More tests => 43;
+use ExtUtils::Typemaps;
+
+# empty typemap
+SCOPE: {
+ ok(ExtUtils::Typemaps->new()->is_empty(), "This is an empty typemap");
+}
+
+# typemap only
+SCOPE: {
+ my $map = ExtUtils::Typemaps->new();
+ $map->add_typemap(ctype => 'unsigned int', xstype => 'T_IV');
+ ok(!$map->is_empty(), "This is not an empty typemap");
+
+ is($map->as_string(), <<'HERE', "Simple typemap matches expectations");
+TYPEMAP
+unsigned int T_IV
+HERE
+
+ my $type = $map->get_typemap(ctype => 'unsigned int');
+ isa_ok($type, 'ExtUtils::Typemaps::Type');
+ is($type->ctype, 'unsigned int');
+ is($type->xstype, 'T_IV');
+ is($type->tidy_ctype, 'unsigned int');
+
+
+ # test failure
+ ok(!$map->get_typemap(ctype => 'foo'), "Access to nonexistent typemap doesn't die");
+ ok(!$map->get_inputmap(ctype => 'foo'), "Access to nonexistent inputmap via ctype doesn't die");
+ ok(!$map->get_outputmap(ctype => 'foo'), "Access to nonexistent outputmap via ctype doesn't die");
+ ok(!$map->get_inputmap(xstype => 'foo'), "Access to nonexistent inputmap via xstype doesn't die");
+ ok(!$map->get_outputmap(xstype => 'foo'), "Access to nonexistent outputmap via xstype doesn't die");
+ ok(!eval{$map->get_typemap('foo')} && $@, "Access to typemap with positional params dies");
+ ok(!eval{$map->get_inputmap('foo')} && $@, "Access to inputmap with positional params dies");
+ ok(!eval{$map->get_outputmap('foo')} && $@, "Access to outputmap with positional params dies");
+}
+
+# typemap & input
+SCOPE: {
+ my $map = ExtUtils::Typemaps->new();
+ $map->add_inputmap(xstype => 'T_UV', code => '$var = ($type)SvUV($arg);');
+ ok(!$map->is_empty(), "This is not an empty typemap");
+ $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
+ is($map->as_string(), <<'HERE', "Simple typemap (with input) matches expectations");
+TYPEMAP
+unsigned int T_UV
+
+INPUT
+T_UV
+ $var = ($type)SvUV($arg);
+HERE
+
+ my $type = $map->get_typemap(ctype => 'unsigned int');
+ isa_ok($type, 'ExtUtils::Typemaps::Type');
+ is($type->ctype, 'unsigned int');
+ is($type->xstype, 'T_UV');
+ is($type->tidy_ctype, 'unsigned int');
+
+ my $in = $map->get_inputmap(xstype => 'T_UV');
+ isa_ok($in, 'ExtUtils::Typemaps::InputMap');
+ is($in->xstype, 'T_UV');
+
+ # test fetching inputmap by ctype
+ my $in2 = $map->get_inputmap(ctype => 'unsigned int');
+ is_deeply($in2, $in, "get_inputmap returns the same typemap for ctype and xstype");
+}
+
+
+# typemap & output
+SCOPE: {
+ my $map = ExtUtils::Typemaps->new();
+ $map->add_outputmap(xstype => 'T_UV', code => 'sv_setuv($arg, (UV)$var);');
+ ok(!$map->is_empty(), "This is not an empty typemap");
+ $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
+ is($map->as_string(), <<'HERE', "Simple typemap (with output) matches expectations");
+TYPEMAP
+unsigned int T_UV
+
+OUTPUT
+T_UV
+ sv_setuv($arg, (UV)$var);
+HERE
+
+ my $type = $map->get_typemap(ctype => 'unsigned int');
+ isa_ok($type, 'ExtUtils::Typemaps::Type');
+ is($type->ctype, 'unsigned int');
+ is($type->xstype, 'T_UV');
+ is($type->tidy_ctype, 'unsigned int');
+
+ my $in = $map->get_outputmap(xstype => 'T_UV');
+ isa_ok($in, 'ExtUtils::Typemaps::OutputMap');
+ is($in->xstype, 'T_UV');
+}
+
+# typemap & input & output
+SCOPE: {
+ my $map = ExtUtils::Typemaps->new();
+ $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
+ $map->add_inputmap(xstype => 'T_UV', code => '$var = ($type)SvUV($arg);');
+ $map->add_outputmap(xstype => 'T_UV', code => 'sv_setuv($arg, (UV)$var);');
+ ok(!$map->is_empty(), "This is not an empty typemap");
+ is($map->as_string(), <<'HERE', "Simple typemap (with in- & output) matches expectations");
+TYPEMAP
+unsigned int T_UV
+
+INPUT
+T_UV
+ $var = ($type)SvUV($arg);
+
+OUTPUT
+T_UV
+ sv_setuv($arg, (UV)$var);
+HERE
+}
+
+# two typemaps & input & output
+SCOPE: {
+ my $map = ExtUtils::Typemaps->new();
+ $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
+ $map->add_inputmap(xstype => 'T_UV', code => '$var = ($type)SvUV($arg);');
+ $map->add_outputmap(xstype => 'T_UV', code => 'sv_setuv($arg, (UV)$var);');
+
+ $map->add_typemap(ctype => 'int', xstype => 'T_IV');
+ $map->add_inputmap(xstype => 'T_IV', code => '$var = ($type)SvIV($arg);');
+ $map->add_outputmap(xstype => 'T_IV', code => 'sv_setiv($arg, (IV)$var);');
+ is($map->as_string(), <<'HERE', "Simple typemap (with in- & output) matches expectations");
+TYPEMAP
+unsigned int T_UV
+int T_IV
+
+INPUT
+T_UV
+ $var = ($type)SvUV($arg);
+T_IV
+ $var = ($type)SvIV($arg);
+
+OUTPUT
+T_UV
+ sv_setuv($arg, (UV)$var);
+T_IV
+ sv_setiv($arg, (IV)$var);
+HERE
+ my $type = $map->get_typemap(ctype => 'unsigned int');
+ isa_ok($type, 'ExtUtils::Typemaps::Type');
+ is($type->ctype, 'unsigned int');
+ is($type->xstype, 'T_UV');
+ is($type->tidy_ctype, 'unsigned int');
+
+ my $in = $map->get_outputmap(xstype => 'T_UV');
+ isa_ok($in, 'ExtUtils::Typemaps::OutputMap');
+ is($in->xstype, 'T_UV');
+ $in = $map->get_outputmap(xstype => 'T_IV');
+ isa_ok($in, 'ExtUtils::Typemaps::OutputMap');
+ is($in->xstype, 'T_IV');
+}
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/511-t-whitespace.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/511-t-whitespace.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/511-t-whitespace.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+use ExtUtils::Typemaps;
+
+SCOPE: {
+ my $map = ExtUtils::Typemaps->new();
+ $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
+ $map->add_inputmap(xstype => 'T_UV', code => ' $var = ($type)SvUV($arg);');
+ is($map->as_string(), <<'HERE', "Simple typemap (with input and code including leading whitespace) matches expectations");
+TYPEMAP
+unsigned int T_UV
+
+INPUT
+T_UV
+ $var = ($type)SvUV($arg);
+HERE
+}
+
+
+SCOPE: {
+ my $map = ExtUtils::Typemaps->new();
+ $map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
+ $map->add_inputmap(xstype => 'T_UV', code => " \$var =\n(\$type)\n SvUV(\$arg);");
+ is($map->as_string(), <<'HERE', "Simple typemap (with input and multi-line code) matches expectations");
+TYPEMAP
+unsigned int T_UV
+
+INPUT
+T_UV
+ $var =
+ ($type)
+ SvUV($arg);
+HERE
+}
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/512-t-file.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/512-t-file.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/512-t-file.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More tests => 6;
+use ExtUtils::Typemaps;
+use File::Spec;
+use File::Temp;
+
+my $datadir = -d 't' ? File::Spec->catdir(qw/t data/) : 'data';
+
+sub slurp {
+ my $file = shift;
+ open my $fh, '<', $file
+ or die "Cannot open file '$file' for reading: $!";
+ local $/ = undef;
+ return <$fh>;
+}
+
+my $cmp_typemap_file = File::Spec->catfile($datadir, 'simple.typemap');
+my $cmp_typemap_str = slurp($cmp_typemap_file);
+
+my $map = ExtUtils::Typemaps->new();
+$map->add_typemap(ctype => 'unsigned int', xstype => 'T_UV');
+$map->add_inputmap(xstype => 'T_UV', code => '$var = ($type)SvUV($arg);');
+$map->add_outputmap(xstype => 'T_UV', code => 'sv_setuv($arg, (UV)$var);');
+$map->add_typemap(ctype => 'int', xstype => 'T_IV');
+$map->add_inputmap(xstype => 'T_IV', code => '$var = ($type)SvIV($arg);');
+$map->add_outputmap(xstype => 'T_IV', code => 'sv_setiv($arg, (IV)$var);');
+
+is($map->as_string(), $cmp_typemap_str, "Simple typemap matches reference file");
+
+my $tmpdir = File::Temp::tempdir(CLEANUP => 1, TMPDIR => 1);
+my $tmpfile = File::Spec->catfile($tmpdir, 'simple.typemap');
+
+$map->write(file => $tmpfile);
+is($map->as_string(), slurp($tmpfile), "Simple typemap write matches as_string");
+is(ExtUtils::Typemaps->new(file => $cmp_typemap_file)->as_string(), $cmp_typemap_str, "Simple typemap roundtrips");
+is(ExtUtils::Typemaps->new(file => $tmpfile)->as_string(), $cmp_typemap_str, "Simple typemap roundtrips (2)");
+
+SCOPE: {
+ local $map->{file} = $cmp_typemap_file;
+ is_deeply(ExtUtils::Typemaps->new(file => $cmp_typemap_file), $map, "Simple typemap roundtrips (in memory)");
+}
+
+# test that we can also create them from a string
+my $map_from_str = ExtUtils::Typemaps->new(string => $map->as_string());
+is_deeply($map_from_str, $map);
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/513-t-merge.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/513-t-merge.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/513-t-merge.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,116 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More tests => 19;
+use ExtUtils::Typemaps;
+use File::Spec;
+use File::Temp;
+
+my $datadir = -d 't' ? File::Spec->catdir(qw/t data/) : 'data';
+
+sub slurp {
+ my $file = shift;
+ open my $fh, '<', $file
+ or die "Cannot open file '$file' for reading: $!";
+ local $/ = undef;
+ return <$fh>;
+}
+
+my $first_typemap_file = File::Spec->catfile($datadir, 'simple.typemap');
+my $second_typemap_file = File::Spec->catfile($datadir, 'other.typemap');
+my $combined_typemap_file = File::Spec->catfile($datadir, 'combined.typemap');
+my $conflicting_typemap_file = File::Spec->catfile($datadir, 'conflicting.typemap');
+my $confl_replace_typemap_file = File::Spec->catfile($datadir, 'confl_repl.typemap');
+my $confl_skip_typemap_file = File::Spec->catfile($datadir, 'confl_skip.typemap');
+
+# test merging two typemaps
+SCOPE: {
+ my $first = ExtUtils::Typemaps->new(file => $first_typemap_file);
+ isa_ok($first, 'ExtUtils::Typemaps');
+ my $second = ExtUtils::Typemaps->new(file => $second_typemap_file);
+ isa_ok($second, 'ExtUtils::Typemaps');
+
+ $first->merge(typemap => $second);
+
+ is($first->as_string(), slurp($combined_typemap_file), "merging produces expected output");
+}
+
+# test merging a typemap from file
+SCOPE: {
+ my $first = ExtUtils::Typemaps->new(file => $first_typemap_file);
+ isa_ok($first, 'ExtUtils::Typemaps');
+
+ $first->merge(file => $second_typemap_file);
+
+ is($first->as_string(), slurp($combined_typemap_file), "merging produces expected output");
+}
+
+
+# test merging a typemap as string
+SCOPE: {
+ my $first = ExtUtils::Typemaps->new(file => $first_typemap_file);
+ isa_ok($first, 'ExtUtils::Typemaps');
+ my $second_str = slurp($second_typemap_file);
+
+ $first->add_string(string => $second_str);
+
+ is($first->as_string(), slurp($combined_typemap_file), "merging (string) produces expected output");
+}
+
+# test merging a conflicting typemap without "replace"
+SCOPE: {
+ my $second = ExtUtils::Typemaps->new(file => $second_typemap_file);
+ isa_ok($second, 'ExtUtils::Typemaps');
+ my $conflict = ExtUtils::Typemaps->new(file => $conflicting_typemap_file);
+ isa_ok($conflict, 'ExtUtils::Typemaps');
+
+ ok(
+ !eval {
+ $second->merge(typemap => $conflict);
+ 1;
+ },
+ "Merging conflicting typemap croaks"
+ );
+ ok(
+ $@ =~ /Multiple definition/,
+ "Conflicting typemap error as expected"
+ );
+}
+
+# test merging a conflicting typemap with "replace"
+SCOPE: {
+ my $second = ExtUtils::Typemaps->new(file => $second_typemap_file);
+ isa_ok($second, 'ExtUtils::Typemaps');
+ my $conflict = ExtUtils::Typemaps->new(file => $conflicting_typemap_file);
+ isa_ok($conflict, 'ExtUtils::Typemaps');
+
+ ok(
+ eval {
+ $second->merge(typemap => $conflict, replace => 1);
+ 1;
+ },
+ "Conflicting typemap merge with 'replace' doesn't croak"
+ );
+
+ is($second->as_string(), slurp($confl_replace_typemap_file), "merging (string) produces expected output");
+}
+
+# test merging a conflicting typemap file with "skip"
+SCOPE: {
+ my $second = ExtUtils::Typemaps->new(file => $second_typemap_file);
+ isa_ok($second, 'ExtUtils::Typemaps');
+ my $conflict = ExtUtils::Typemaps->new(file => $conflicting_typemap_file);
+ isa_ok($conflict, 'ExtUtils::Typemaps');
+
+ ok(
+ eval {
+ $second->merge(typemap => $conflict, skip => 1);
+ 1;
+ },
+ "Conflicting typemap merge with 'skip' doesn't croak"
+ );
+
+ is($second->as_string(), slurp($confl_skip_typemap_file), "merging (string) produces expected output");
+}
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/514-t-embed.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/514-t-embed.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/514-t-embed.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+# tests for generating embedded typemaps
+
+use Test::More tests => 1;
+use ExtUtils::Typemaps;
+
+SCOPE: {
+ my $map = ExtUtils::Typemaps->new();
+ $map->add_string(string => <<HERE);
+char* T_PV
+HERE
+ is($map->as_embedded_typemap(), <<'HERE', "Embedded typemap as expected");
+TYPEMAP: <<END_TYPEMAP;
+TYPEMAP
+char* T_PV
+
+END_TYPEMAP
+HERE
+}
+
+
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/515-t-cmd.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/515-t-cmd.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/515-t-cmd.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,93 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+# tests for the quick-n-dirty interface for XS inclusion
+
+use Test::More tests => 6;
+use File::Spec;
+use ExtUtils::Typemaps::Cmd;
+
+my $datadir = -d 't' ? File::Spec->catdir(qw/t data/) : 'data';
+my $libdir = -d 't' ? File::Spec->catdir(qw/t lib/) : 'lib';
+
+unshift @INC, $libdir;
+
+sub slurp {
+ my $file = shift;
+ open my $fh, '<', $file
+ or die "Cannot open file '$file' for reading: $!";
+ local $/ = undef;
+ return <$fh>;
+}
+
+sub permute (&@) {
+ my $code = shift;
+ my @idx = 0..$#_;
+ while ( $code->(@_[@idx]) ) {
+ my $p = $#idx;
+ --$p while $idx[$p-1] > $idx[$p];
+ my $q = $p or return;
+ push @idx, reverse splice @idx, $p;
+ ++$q while $idx[$p-1] > $idx[$q];
+ @idx[$p-1,$q]=@idx[$q,$p-1];
+ }
+}
+
+
+SCOPE: {
+ no warnings 'once';
+ ok(defined(*embeddable_typemap{CODE}), "function exported");
+}
+
+my $start = "TYPEMAP: <<END_TYPEMAP;\n";
+my $end = "\nEND_TYPEMAP\n";
+is(
+ embeddable_typemap(),
+ "${start}TYPEMAP\n$end",
+ "empty call to embeddable_typemap"
+);
+
+my $typemap_file = File::Spec->catfile($datadir, "simple.typemap");
+is(
+ embeddable_typemap($typemap_file),
+ $start . slurp($typemap_file) . $end,
+ "embeddable typemap from file"
+);
+
+my $foo_content = <<HERE;
+TYPEMAP
+myfoo* T_PV
+HERE
+is(
+ embeddable_typemap("TypemapTest::Foo"),
+ "$start$foo_content$end",
+ "embeddable typemap from full module name"
+);
+
+
+my $test_content = <<HERE;
+TYPEMAP
+mytype* T_SV
+HERE
+is(
+ embeddable_typemap("Test"),
+ "$start$test_content$end",
+ "embeddable typemap from relative module name"
+);
+
+SCOPE: {
+ my $combined = embeddable_typemap("Test", "TypemapTest::Foo");
+ my @lines = (
+ 'myfoo* T_PV',
+ 'mytype* T_SV',
+ );
+ my @exp = map {"TYPEMAP\n" . join("\n", @$_) . "\n"}
+ (\@lines, [reverse @lines]);
+ ok(scalar(grep "$start$_$end" eq $combined, @exp), "combined both modules")
+ or note("Actual output: '$combined'");
+}
+
+# in theory, we should test
+# embeddable_typemap($typemap_file, "Test", "TypemapTest::Foo"),
+# but I can't be bothered.
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/600-t-compat.t
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/600-t-compat.t (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/600-t-compat.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,182 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More;
+
+# This test is for making sure that the new EU::Typemaps
+# based typemap merging produces the same result as the old
+# EU::ParseXS code.
+
+use ExtUtils::Typemaps;
+use ExtUtils::ParseXS::Utilities qw(
+ C_string
+ tidy_type
+ trim_whitespace
+ process_typemaps
+);
+use ExtUtils::ParseXS::Constants;
+use File::Spec;
+
+my $path_prefix = File::Spec->catdir(-d 't' ? qw(t data) : qw(data));
+
+my @tests = (
+ {
+ name => 'Simple conflict',
+ local_maps => [
+ File::Spec->catfile($path_prefix, "conflicting.typemap"),
+ ],
+ std_maps => [
+ File::Spec->catfile($path_prefix, "other.typemap"),
+ ],
+ },
+ {
+ name => 'B',
+ local_maps => [
+ File::Spec->catfile($path_prefix, "b.typemap"),
+ ],
+ std_maps => [],
+ },
+ {
+ name => 'B and perl',
+ local_maps => [
+ File::Spec->catfile($path_prefix, "b.typemap"),
+ ],
+ std_maps => [
+ File::Spec->catfile($path_prefix, "perl.typemap"),
+ ],
+ },
+ {
+ name => 'B and perl and B again',
+ local_maps => [
+ File::Spec->catfile($path_prefix, "b.typemap"),
+ ],
+ std_maps => [
+ File::Spec->catfile($path_prefix, "perl.typemap"),
+ File::Spec->catfile($path_prefix, "b.typemap"),
+ ],
+ },
+);
+plan tests => scalar(@tests);
+
+my @local_tmaps;
+my @standard_typemap_locations;
+SCOPE: {
+ no warnings 'redefine';
+ sub ExtUtils::ParseXS::Utilities::standard_typemap_locations {
+ @standard_typemap_locations;
+ }
+ sub standard_typemap_locations {
+ @standard_typemap_locations;
+ }
+}
+
+foreach my $test (@tests) {
+ @local_tmaps = @{ $test->{local_maps} };
+ @standard_typemap_locations = @{ $test->{std_maps} };
+
+ my $res = [_process_typemaps([@local_tmaps], '.')];
+ my $tm = process_typemaps([@local_tmaps], '.');
+ my $res_new = [map $tm->$_(), qw(_get_typemap_hash _get_prototype_hash _get_inputmap_hash _get_outputmap_hash) ];
+
+ # Normalize trailing whitespace. Let's be that lenient, mkay?
+ for ($res, $res_new) {
+ for ($_->[2], $_->[3]) {
+ for (values %$_) {
+ s/\s+\z//;
+ }
+ }
+ }
+ #use Data::Dumper; warn Dumper $res;
+ #use Data::Dumper; warn Dumper $res_new;
+
+ is_deeply($res_new, $res, "typemap equivalency for '$test->{name}'");
+}
+
+
+# The code below is a reproduction of what the pre-ExtUtils::Typemap
+# typemap-parsing/handling code in ExtUtils::ParseXS looked like. For
+# bug-compatibility, we want to produce the same data structures as that
+# code as much as possible.
+sub _process_typemaps {
+ my ($tmap, $pwd) = @_;
+
+ my @tm = ref $tmap ? @{$tmap} : ($tmap);
+
+ foreach my $typemap (@tm) {
+ die "Can't find $typemap in $pwd\n" unless -r $typemap;
+ }
+
+ push @tm, standard_typemap_locations( \@INC );
+
+ my ($type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref)
+ = ( {}, {}, {}, {} );
+
+ foreach my $typemap (@tm) {
+ next unless -f $typemap;
+ # skip directories, binary files etc.
+ warn("Warning: ignoring non-text typemap file '$typemap'\n"), next
+ unless -T $typemap;
+ ($type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref) =
+ _process_single_typemap( $typemap,
+ $type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref);
+ }
+ return ($type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref);
+}
+
+sub _process_single_typemap {
+ my ($typemap,
+ $type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref) = @_;
+ open my $TYPEMAP, '<', $typemap
+ or warn ("Warning: could not open typemap file '$typemap': $!\n"), next;
+ my $mode = 'Typemap';
+ my $junk = "";
+ my $current = \$junk;
+ while (<$TYPEMAP>) {
+ # skip comments
+ next if /^\s*#/;
+ if (/^INPUT\s*$/) {
+ $mode = 'Input'; $current = \$junk; next;
+ }
+ if (/^OUTPUT\s*$/) {
+ $mode = 'Output'; $current = \$junk; next;
+ }
+ if (/^TYPEMAP\s*$/) {
+ $mode = 'Typemap'; $current = \$junk; next;
+ }
+ if ($mode eq 'Typemap') {
+ chomp;
+ my $logged_line = $_;
+ trim_whitespace($_);
+ # skip blank lines
+ next if /^$/;
+ my($type,$kind, $proto) =
+ m/^\s*(.*?\S)\s+(\S+)\s*($ExtUtils::ParseXS::Constants::PrototypeRegexp*)\s*$/
+ or warn(
+ "Warning: File '$typemap' Line $. '$logged_line' " .
+ "TYPEMAP entry needs 2 or 3 columns\n"
+ ),
+ next;
+ $type = tidy_type($type);
+ $type_kind_ref->{$type} = $kind;
+ # prototype defaults to '$'
+ $proto = "\$" unless $proto;
+ $proto_letter_ref->{$type} = C_string($proto);
+ }
+ elsif (/^\s/) {
+ $$current .= $_;
+ }
+ elsif ($mode eq 'Input') {
+ s/\s+$//;
+ $input_expr_ref->{$_} = '';
+ $current = \$input_expr_ref->{$_};
+ }
+ else {
+ s/\s+$//;
+ $output_expr_ref->{$_} = '';
+ $current = \$output_expr_ref->{$_};
+ }
+ }
+ close $TYPEMAP;
+ return ($type_kind_ref, $proto_letter_ref, $input_expr_ref, $output_expr_ref);
+}
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/XSWarn.xs
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/XSWarn.xs (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/XSWarn.xs 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+MODULE = XSWarn PACKAGE = XSWarn PREFIX = xswarn_
+
+PROTOTYPES: DISABLE
+
+void
+xswarn_nonargs()
+# see perl #112776
+ SV *sv = sv_2mortal(newSV());
+ CODE:
+ ;
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/b.typemap
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/b.typemap (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/b.typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,88 @@
+TYPEMAP
+
+B::OP T_OP_OBJ
+B::UNOP T_OP_OBJ
+B::BINOP T_OP_OBJ
+B::LOGOP T_OP_OBJ
+B::LISTOP T_OP_OBJ
+B::PMOP T_OP_OBJ
+B::SVOP T_OP_OBJ
+B::PADOP T_OP_OBJ
+B::PVOP T_OP_OBJ
+B::LOOP T_OP_OBJ
+B::COP T_OP_OBJ
+
+B::SV T_SV_OBJ
+B::PV T_SV_OBJ
+B::IV T_SV_OBJ
+B::NV T_SV_OBJ
+B::PVMG T_SV_OBJ
+B::REGEXP T_SV_OBJ
+B::PVLV T_SV_OBJ
+B::BM T_SV_OBJ
+B::RV T_SV_OBJ
+B::GV T_SV_OBJ
+B::CV T_SV_OBJ
+B::HV T_SV_OBJ
+B::AV T_SV_OBJ
+B::IO T_SV_OBJ
+B::FM T_SV_OBJ
+
+B::MAGIC T_MG_OBJ
+SSize_t T_IV
+STRLEN T_UV
+PADOFFSET T_UV
+
+B::HE T_HE_OBJ
+B::RHE T_RHE_OBJ
+
+INPUT
+T_OP_OBJ
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ croak(\"$var is not a reference\")
+
+T_SV_OBJ
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ croak(\"$var is not a reference\")
+
+T_MG_OBJ
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ croak(\"$var is not a reference\")
+
+T_HE_OBJ
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ croak(\"$var is not a reference\")
+
+T_RHE_OBJ
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ croak(\"$var is not a reference\")
+
+OUTPUT
+T_MG_OBJ
+ sv_setiv(newSVrv($arg, "B::MAGIC"), PTR2IV($var));
+
+T_HE_OBJ
+ sv_setiv(newSVrv($arg, "B::HE"), PTR2IV($var));
+
+T_RHE_OBJ
+ sv_setiv(newSVrv($arg, "B::RHE"), PTR2IV($var));
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/combined.typemap
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/combined.typemap (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/combined.typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+TYPEMAP
+unsigned int T_UV
+int T_IV
+double T_NV
+
+INPUT
+T_UV
+ $var = ($type)SvUV($arg);
+T_IV
+ $var = ($type)SvIV($arg);
+T_NV
+ $var = ($type)SvNV($arg);
+
+OUTPUT
+T_UV
+ sv_setuv($arg, (UV)$var);
+T_IV
+ sv_setiv($arg, (IV)$var);
+T_NV
+ sv_setnv($arg, (NV)$var);
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/confl_repl.typemap
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/confl_repl.typemap (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/confl_repl.typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,12 @@
+TYPEMAP
+double T_DIFFERENT
+
+INPUT
+T_NV
+ $var = ($type)SvNV($arg);
+T_DIFFERENT
+ $var = ($type)SvNV($arg);
+
+OUTPUT
+T_NV
+ sv_setnv($arg, (NV)$var);
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/confl_skip.typemap
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/confl_skip.typemap (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/confl_skip.typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,12 @@
+TYPEMAP
+double T_NV
+
+INPUT
+T_NV
+ $var = ($type)SvNV($arg);
+T_DIFFERENT
+ $var = ($type)SvNV($arg);
+
+OUTPUT
+T_NV
+ sv_setnv($arg, (NV)$var);
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/conflicting.typemap
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/conflicting.typemap (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/conflicting.typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+TYPEMAP
+double T_DIFFERENT
+
+INPUT
+T_DIFFERENT
+ $var = ($type)SvNV($arg);
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/other.typemap
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/other.typemap (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/other.typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
+TYPEMAP
+double T_NV
+
+INPUT
+T_NV
+ $var = ($type)SvNV($arg);
+
+OUTPUT
+T_NV
+ sv_setnv($arg, (NV)$var);
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/perl.typemap
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/perl.typemap (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/perl.typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,360 @@
+# basic C types
+int T_IV
+unsigned T_UV
+unsigned int T_UV
+long T_IV
+unsigned long T_UV
+short T_IV
+unsigned short T_UV
+char T_CHAR
+unsigned char T_U_CHAR
+char * T_PV
+unsigned char * T_PV
+const char * T_PV
+caddr_t T_PV
+wchar_t * T_PV
+wchar_t T_IV
+# bool_t is defined in <rpc/rpc.h>
+bool_t T_IV
+size_t T_UV
+ssize_t T_IV
+time_t T_NV
+unsigned long * T_OPAQUEPTR
+char ** T_PACKEDARRAY
+void * T_PTR
+Time_t * T_PV
+SV * T_SV
+SVREF T_SVREF
+AV * T_AVREF
+HV * T_HVREF
+CV * T_CVREF
+
+IV T_IV
+UV T_UV
+NV T_NV
+I32 T_IV
+I16 T_IV
+I8 T_IV
+STRLEN T_UV
+U32 T_U_LONG
+U16 T_U_SHORT
+U8 T_UV
+Result T_U_CHAR
+Boolean T_BOOL
+float T_FLOAT
+double T_DOUBLE
+SysRet T_SYSRET
+SysRetLong T_SYSRET
+FILE * T_STDIO
+PerlIO * T_INOUT
+FileHandle T_PTROBJ
+InputStream T_IN
+InOutStream T_INOUT
+OutputStream T_OUT
+bool T_BOOL
+
+#############################################################################
+INPUT
+T_SV
+ $var = $arg
+T_SVREF
+ STMT_START {
+ SV* const xsub_tmp_sv = $arg;
+ SvGETMAGIC(xsub_tmp_sv);
+ if (SvROK(xsub_tmp_sv)){
+ $var = SvRV(xsub_tmp_sv);
+ }
+ else{
+ Perl_croak(aTHX_ \"%s: %s is not a reference\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\");
+ }
+ } STMT_END
+T_AVREF
+ STMT_START {
+ SV* const xsub_tmp_sv = $arg;
+ SvGETMAGIC(xsub_tmp_sv);
+ if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVAV){
+ $var = (AV*)SvRV(xsub_tmp_sv);
+ }
+ else{
+ Perl_croak(aTHX_ \"%s: %s is not an ARRAY reference\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\");
+ }
+ } STMT_END
+T_HVREF
+ STMT_START {
+ SV* const xsub_tmp_sv = $arg;
+ SvGETMAGIC(xsub_tmp_sv);
+ if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVHV){
+ $var = (HV*)SvRV(xsub_tmp_sv);
+ }
+ else{
+ Perl_croak(aTHX_ \"%s: %s is not a HASH reference\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\");
+ }
+ } STMT_END
+T_CVREF
+ STMT_START {
+ SV* const xsub_tmp_sv = $arg;
+ SvGETMAGIC(xsub_tmp_sv);
+ if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVCV){
+ $var = (CV*)SvRV(xsub_tmp_sv);
+ }
+ else{
+ Perl_croak(aTHX_ \"%s: %s is not a CODE reference\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\");
+ }
+ } STMT_END
+T_SYSRET
+ $var NOT IMPLEMENTED
+T_UV
+ $var = ($type)SvUV($arg)
+T_IV
+ $var = ($type)SvIV($arg)
+T_INT
+ $var = (int)SvIV($arg)
+T_ENUM
+ $var = ($type)SvIV($arg)
+T_BOOL
+ $var = (bool)SvTRUE($arg)
+T_U_INT
+ $var = (unsigned int)SvUV($arg)
+T_SHORT
+ $var = (short)SvIV($arg)
+T_U_SHORT
+ $var = (unsigned short)SvUV($arg)
+T_LONG
+ $var = (long)SvIV($arg)
+T_U_LONG
+ $var = (unsigned long)SvUV($arg)
+T_CHAR
+ $var = (char)*SvPV_nolen($arg)
+T_U_CHAR
+ $var = (unsigned char)SvUV($arg)
+T_FLOAT
+ $var = (float)SvNV($arg)
+T_NV
+ $var = ($type)SvNV($arg)
+T_DOUBLE
+ $var = (double)SvNV($arg)
+T_PV
+ $var = ($type)SvPV_nolen($arg)
+T_PTR
+ $var = INT2PTR($type,SvIV($arg))
+T_PTRREF
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"%s: %s is not a reference\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\")
+T_REF_IV_REF
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = *INT2PTR($type *, tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"%s: %s is not of type %s\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\", \"$ntype\")
+T_REF_IV_PTR
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type, tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"%s: %s is not of type %s\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\", \"$ntype\")
+T_PTROBJ
+ if (SvROK($arg) && sv_derived_from($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"%s: %s is not of type %s\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\", \"$ntype\")
+T_PTRDESC
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ ${type}_desc = (\U${type}_DESC\E*) tmp;
+ $var = ${type}_desc->ptr;
+ }
+ else
+ Perl_croak(aTHX_ \"%s: %s is not of type %s\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\", \"$ntype\")
+T_REFREF
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = *INT2PTR($type,tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"%s: %s is not a reference\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\")
+T_REFOBJ
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = *INT2PTR($type,tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"%s: %s is not of type %s\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\", \"$ntype\")
+T_OPAQUE
+ $var = *($type *)SvPV_nolen($arg)
+T_OPAQUEPTR
+ $var = ($type)SvPV_nolen($arg)
+T_PACKED
+ $var = XS_unpack_$ntype($arg)
+T_PACKEDARRAY
+ $var = XS_unpack_$ntype($arg)
+T_CALLBACK
+ $var = make_perl_cb_$type($arg)
+T_ARRAY
+ U32 ix_$var = $argoff;
+ $var = $ntype(items -= $argoff);
+ while (items--) {
+ DO_ARRAY_ELEM;
+ ix_$var++;
+ }
+ /* this is the number of elements in the array */
+ ix_$var -= $argoff
+T_STDIO
+ $var = PerlIO_findFILE(IoIFP(sv_2io($arg)))
+T_IN
+ $var = IoIFP(sv_2io($arg))
+T_INOUT
+ $var = IoIFP(sv_2io($arg))
+T_OUT
+ $var = IoOFP(sv_2io($arg))
+#############################################################################
+OUTPUT
+T_SV
+ $arg = $var;
+T_SVREF
+ $arg = newRV((SV*)$var);
+T_AVREF
+ $arg = newRV((SV*)$var);
+T_HVREF
+ $arg = newRV((SV*)$var);
+T_CVREF
+ $arg = newRV((SV*)$var);
+T_IV
+ sv_setiv($arg, (IV)$var);
+T_UV
+ sv_setuv($arg, (UV)$var);
+T_INT
+ sv_setiv($arg, (IV)$var);
+T_SYSRET
+ if ($var != -1) {
+ if ($var == 0)
+ sv_setpvn($arg, "0 but true", 10);
+ else
+ sv_setiv($arg, (IV)$var);
+ }
+T_ENUM
+ sv_setiv($arg, (IV)$var);
+T_BOOL
+ $arg = boolSV($var);
+T_U_INT
+ sv_setuv($arg, (UV)$var);
+T_SHORT
+ sv_setiv($arg, (IV)$var);
+T_U_SHORT
+ sv_setuv($arg, (UV)$var);
+T_LONG
+ sv_setiv($arg, (IV)$var);
+T_U_LONG
+ sv_setuv($arg, (UV)$var);
+T_CHAR
+ sv_setpvn($arg, (char *)&$var, 1);
+T_U_CHAR
+ sv_setuv($arg, (UV)$var);
+T_FLOAT
+ sv_setnv($arg, (double)$var);
+T_NV
+ sv_setnv($arg, (NV)$var);
+T_DOUBLE
+ sv_setnv($arg, (double)$var);
+T_PV
+ sv_setpv((SV*)$arg, $var);
+T_PTR
+ sv_setiv($arg, PTR2IV($var));
+T_PTRREF
+ sv_setref_pv($arg, Nullch, (void*)$var);
+T_REF_IV_REF
+ sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
+T_REF_IV_PTR
+ sv_setref_pv($arg, \"${ntype}\", (void*)$var);
+T_PTROBJ
+ sv_setref_pv($arg, \"${ntype}\", (void*)$var);
+T_PTRDESC
+ sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
+T_REFREF
+ NOT_IMPLEMENTED
+T_REFOBJ
+ NOT IMPLEMENTED
+T_OPAQUE
+ sv_setpvn($arg, (char *)&$var, sizeof($var));
+T_OPAQUEPTR
+ sv_setpvn($arg, (char *)$var, sizeof(*$var));
+T_PACKED
+ XS_pack_$ntype($arg, $var);
+T_PACKEDARRAY
+ XS_pack_$ntype($arg, $var, count_$ntype);
+T_DATAUNIT
+ sv_setpvn($arg, $var.chp(), $var.size());
+T_CALLBACK
+ sv_setpvn($arg, $var.context.value().chp(),
+ $var.context.value().size());
+T_ARRAY
+ {
+ U32 ix_$var;
+ EXTEND(SP,size_$var);
+ for (ix_$var = 0; ix_$var < size_$var; ix_$var++) {
+ ST(ix_$var) = sv_newmortal();
+ DO_ARRAY_ELEM
+ }
+ }
+T_STDIO
+ {
+ GV *gv = newGVgen("$Package");
+ PerlIO *fp = PerlIO_importFILE($var,0);
+ if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
+T_IN
+ {
+ GV *gv = newGVgen("$Package");
+ if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
+T_INOUT
+ {
+ GV *gv = newGVgen("$Package");
+ if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
+T_OUT
+ {
+ GV *gv = newGVgen("$Package");
+ if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/simple.typemap
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/simple.typemap (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/data/simple.typemap 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+TYPEMAP
+unsigned int T_UV
+int T_IV
+
+INPUT
+T_UV
+ $var = ($type)SvUV($arg);
+T_IV
+ $var = ($type)SvIV($arg);
+
+OUTPUT
+T_UV
+ sv_setuv($arg, (UV)$var);
+T_IV
+ sv_setiv($arg, (IV)$var);
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/ExtUtils/Typemaps/Test.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/ExtUtils/Typemaps/Test.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/ExtUtils/Typemaps/Test.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+package # hide from indexers
+ ExtUtils::Typemaps::Test;
+use strict;
+use warnings;
+require ExtUtils::Typemaps;
+our @ISA = qw(ExtUtils::Typemaps);
+
+sub new {
+ my $class = shift;
+ my $obj = $class->SUPER::new(@_);
+ $obj->add_typemap(ctype => 'mytype*', xstype => 'T_SV');
+ return $obj;
+}
+
+1;
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/PrimitiveCapture.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/PrimitiveCapture.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/PrimitiveCapture.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,77 @@
+package PrimitiveCapture;
+use strict;
+use warnings;
+
+if ("$]" >= 5.008000) {
+ eval "#line @{[__LINE__+1]} ".q{"lib/PrimitiveCapture.pm"
+ sub capture_stdout {
+ my $sub = shift;
+ my $stdout;
+ open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
+ close STDOUT;
+ open STDOUT, '>', \$stdout or die "Can't open STDOUT: $!";
+ $sub->();
+ close STDOUT;
+ open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";
+ return $stdout;
+ }
+ sub capture_stderr {
+ my $sub = shift;
+ my $stderr;
+ open my $olderr, ">&STDERR" or die "Can't dup STDERR: $!";
+ close STDERR;
+ open STDERR, '>', \$stderr or die "Can't open STDERR: $!";
+ $sub->();
+ close STDERR;
+ open STDERR, ">&", $olderr or die "Can't dup \$olderr: $!";
+ return $stderr;
+ }
+ }; die $@ unless $@ eq "";
+} else {
+ eval "#line @{[__LINE__+1]} ".q{"lib/PrimitiveCapture.pm"
+ use File::Spec;
+ use File::Temp;
+ my $tmpdir;
+ my $i = 0;
+ sub _tmpfile {
+ $tmpdir ||= File::Temp::tempdir(CLEANUP => 1, TMPDIR => 1);
+ return File::Spec->catfile($tmpdir, $i++);
+ }
+ sub _slurp {
+ my $filename = shift;
+ open my $fh, "<", $filename or die "Can't read $filename: $!";
+ local $/ = undef;
+ my $content = <$fh>;
+ defined $content or die "Can't read $filename: $!";
+ return $content;
+ }
+ sub capture_stdout {
+ my $sub = shift;
+ my $tmpfile = _tmpfile();
+ local *OLDSTDOUT;
+ open OLDSTDOUT, ">&STDOUT" or die "Can't dup STDOUT: $!";
+ close STDOUT;
+ open STDOUT, '>', $tmpfile or die "Can't open STDOUT: $!";
+ $sub->();
+ close STDOUT;
+ open STDOUT, ">&OLDSTDOUT" or die "Can't dup OLDSTDOUT: $!";
+ close OLDSTDOUT;
+ return _slurp($tmpfile);
+ }
+ sub capture_stderr {
+ my $sub = shift;
+ my $tmpfile = _tmpfile();
+ local *OLDSTDERR;
+ open OLDSTDERR, ">&STDERR" or die "Can't dup STDERR: $!";
+ close STDERR;
+ open STDERR, '>', $tmpfile or die "Can't open STDERR: $!";
+ $sub->();
+ close STDERR;
+ open STDERR, ">&OLDSTDERR" or die "Can't dup OLDSTDERR: $!";
+ close OLDSTDERR;
+ return _slurp($tmpfile);
+ }
+ }; die $@ unless $@ eq "";
+}
+
+1;
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/TypemapTest/Foo.pm
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/TypemapTest/Foo.pm (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/lib/TypemapTest/Foo.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+package # hide from indexers
+ TypemapTest::Foo;
+use strict;
+use warnings;
+require ExtUtils::Typemaps;
+our @ISA = qw(ExtUtils::Typemaps);
+
+sub new {
+ my $class = shift;
+ my $obj = $class->SUPER::new(@_);
+ $obj->add_typemap(ctype => 'myfoo*', xstype => 'T_PV');
+ return $obj;
+}
+
+1;
Added: vendor/perl/dist/dist/ExtUtils-ParseXS/t/pseudotypemap1
===================================================================
--- vendor/perl/dist/dist/ExtUtils-ParseXS/t/pseudotypemap1 (rev 0)
+++ vendor/perl/dist/dist/ExtUtils-ParseXS/t/pseudotypemap1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,5 @@
+ # pseudotypemap1: comment with leading whitespace
+TYPEMAP
+
+line_to_generate_insufficient_columns_warning
+unsigned long T_UV
Added: vendor/perl/dist/dist/Filter-Simple/t/code_no_comments.t
===================================================================
--- vendor/perl/dist/dist/Filter-Simple/t/code_no_comments.t (rev 0)
+++ vendor/perl/dist/dist/Filter-Simple/t/code_no_comments.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+BEGIN {
+ unshift @INC, 't/lib/';
+}
+
+use Filter::Simple::CodeNoComments qr/ok/ => 'not ok';
+
+print "1..1\n";
+
+
+# Perl bug #92436 (the second bug in the ticket)
+
+sub method { $_[1] }
+my $obj = bless[];
+
+print $obj->method("ok 1\n");
Added: vendor/perl/dist/dist/Filter-Simple/t/lib/Filter/Simple/CodeNoComments.pm
===================================================================
--- vendor/perl/dist/dist/Filter-Simple/t/lib/Filter/Simple/CodeNoComments.pm (rev 0)
+++ vendor/perl/dist/dist/Filter-Simple/t/lib/Filter/Simple/CodeNoComments.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,13 @@
+package Filter::Simple::CodeNoComments;
+
+use Filter::Simple;
+
+FILTER_ONLY
+ code_no_comments => sub {
+ shift;
+ while (my($pat, $str) = splice @_, 0, 2) {
+ s/$pat/$str/g;
+ }
+ };
+
+1;
Added: vendor/perl/dist/dist/IO/t/cachepropagate-tcp.t
===================================================================
--- vendor/perl/dist/dist/IO/t/cachepropagate-tcp.t (rev 0)
+++ vendor/perl/dist/dist/IO/t/cachepropagate-tcp.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,57 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use IO::Socket;
+use IO::Socket::INET;
+use Socket;
+use Test::More;
+use Config;
+
+plan tests => 8;
+
+my $listener = IO::Socket::INET->new(Listen => 1,
+ LocalAddr => '127.0.0.1',
+ Proto => 'tcp');
+ok(defined($listener), 'socket created');
+
+my $port = $listener->sockport();
+
+my $p = $listener->protocol();
+ok(defined($p), 'protocol defined');
+my $d = $listener->sockdomain();
+ok(defined($d), 'domain defined');
+my $s = $listener->socktype();
+ok(defined($s), 'type defined');
+
+SKIP: {
+ skip "fork not available", 4
+ unless $Config{d_fork} || $Config{d_pseudofork};
+
+ my $cpid = fork();
+ if (0 == $cpid) {
+ # the child:
+ sleep(1);
+ my $connector = IO::Socket::INET->new(PeerAddr => '127.0.0.1',
+ PeerPort => $port,
+ Proto => 'tcp');
+ exit(0);
+ } else {;
+ ok(defined($cpid), 'spawned a child');
+ }
+
+ my $new = $listener->accept();
+
+ is($new->sockdomain(), $d, 'domain match');
+ SKIP: {
+ skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
+ is($new->protocol(), $p, 'protocol match');
+ }
+ SKIP: {
+ skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
+ is($new->socktype(), $s, 'type match');
+ }
+
+ wait();
+}
Added: vendor/perl/dist/dist/IO/t/cachepropagate-udp.t
===================================================================
--- vendor/perl/dist/dist/IO/t/cachepropagate-udp.t (rev 0)
+++ vendor/perl/dist/dist/IO/t/cachepropagate-udp.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use IO::Socket;
+use IO::Socket::INET;
+use Socket;
+use Test::More;
+
+plan tests => 7;
+
+my $listener = IO::Socket::INET->new(LocalAddr => '127.0.0.1',
+ Proto => 'udp');
+ok(defined($listener), 'socket created');
+
+my $p = $listener->protocol();
+ok(defined($p), 'protocol defined');
+my $d = $listener->sockdomain();
+ok(defined($d), 'domain defined');
+my $s = $listener->socktype();
+ok(defined($s), 'type defined');
+
+my $new = IO::Socket::INET->new_from_fd($listener->fileno(), 'r+');
+
+is($new->sockdomain(), $d, 'domain match');
+SKIP: {
+ skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
+ skip "SO_PROTOCOL defined but not implemented", 1
+ if !defined $new->sockopt(Socket::SO_PROTOCOL);
+ is($new->protocol(), $p, 'protocol match');
+}
+SKIP: {
+ skip "AIX: getsockopt(SO_TYPE) is badly broken on UDP/UNIX sockets", 1
+ if $^O eq "aix";
+ skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
+ skip "SO_TYPE defined but not implemented", 1
+ if !defined $new->sockopt(Socket::SO_TYPE);
+ is($new->socktype(), $s, 'type match');
+}
Added: vendor/perl/dist/dist/IO/t/cachepropagate-unix.t
===================================================================
--- vendor/perl/dist/dist/IO/t/cachepropagate-unix.t (rev 0)
+++ vendor/perl/dist/dist/IO/t/cachepropagate-unix.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,102 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use File::Temp qw(tempdir);
+use File::Spec::Functions;
+use IO::Socket;
+use IO::Socket::UNIX;
+use Socket;
+use Config;
+use Test::More;
+
+plan skip_all => "UNIX domain sockets not implemented on $^O"
+ if ($^O =~ m/^(?:qnx|nto|vos|MSWin32|VMS)$/);
+
+plan tests => 15;
+
+my $socketpath = catfile(tempdir( CLEANUP => 1 ), 'testsock');
+
+# start testing stream sockets:
+my $listener = IO::Socket::UNIX->new(Type => SOCK_STREAM,
+ Listen => 1,
+ Local => $socketpath);
+ok(defined($listener), 'stream socket created');
+
+my $p = $listener->protocol();
+ok(defined($p), 'protocol defined');
+my $d = $listener->sockdomain();
+ok(defined($d), 'domain defined');
+my $s = $listener->socktype();
+ok(defined($s), 'type defined');
+
+SKIP: {
+ skip "fork not available", 4
+ unless $Config{d_fork} || $Config{d_pseudofork};
+
+ my $cpid = fork();
+ if (0 == $cpid) {
+ # the child:
+ sleep(1);
+ my $connector = IO::Socket::UNIX->new(Peer => $socketpath);
+ exit(0);
+ } else {
+ ok(defined($cpid), 'spawned a child');
+ }
+
+ my $new = $listener->accept();
+
+ is($new->sockdomain(), $d, 'domain match');
+ SKIP: {
+ skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
+ skip "SO_PROTOCOL defined but not implemented", 1
+ if !defined $new->sockopt(Socket::SO_PROTOCOL);
+ is($new->protocol(), $p, 'protocol match');
+ }
+ SKIP: {
+ skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
+ skip "SO_TYPE defined but not implemented", 1
+ if !defined $new->sockopt(Socket::SO_TYPE);
+ is($new->socktype(), $s, 'type match');
+ }
+
+ unlink($socketpath);
+ wait();
+}
+
+undef $TODO;
+SKIP: {
+ skip "datagram unix sockets not supported on $^O", 7
+ if $^O eq "haiku";
+ # now test datagram sockets:
+ $listener = IO::Socket::UNIX->new(Type => SOCK_DGRAM,
+ Local => $socketpath);
+ ok(defined($listener), 'datagram socket created');
+
+ $p = $listener->protocol();
+ ok(defined($p), 'protocol defined');
+ $d = $listener->sockdomain();
+ ok(defined($d), 'domain defined');
+ $s = $listener->socktype();
+ ok(defined($s), 'type defined');
+
+ my $new = IO::Socket::UNIX->new_from_fd($listener->fileno(), 'r+');
+
+ is($new->sockdomain(), $d, 'domain match');
+ SKIP: {
+ skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
+ skip "SO_PROTOCOL defined but not implemented", 1
+ if !defined $new->sockopt(Socket::SO_PROTOCOL);
+ is($new->protocol(), $p, 'protocol match');
+ }
+ SKIP: {
+ skip "AIX: getsockopt(SO_TYPE) is badly broken on UDP/UNIX sockets", 1
+ if $^O eq "aix";
+ skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
+ skip "SO_TYPE defined but not implemented", 1
+ if !defined $new->sockopt(Socket::SO_TYPE);
+ is($new->socktype(), $s, 'type match');
+ }
+}
+unlink($socketpath);
Added: vendor/perl/dist/dist/IO/t/io_utf8argv.t
===================================================================
--- vendor/perl/dist/dist/IO/t/io_utf8argv.t (rev 0)
+++ vendor/perl/dist/dist/IO/t/io_utf8argv.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,38 @@
+#!./perl
+
+BEGIN {
+ unless ($] >= 5.008 and find PerlIO::Layer 'perlio') {
+ print "1..0 # Skip: not perlio\n";
+ exit 0;
+ }
+ require($ENV{PERL_CORE} ? "../../t/test.pl" : "./t/test.pl");
+}
+
+use utf8;
+
+
+plan(tests => 2);
+
+open my $fh, ">:raw", 'io_utf8argv';
+print $fh
+ "\xce\x9c\xe1\xbd\xb7\xce\xb1\x20\xcf\x80\xe1\xbd\xb1\xcf\x80\xce".
+ "\xb9\xce\xb1\x2c\x20\xce\xbc\xe1\xbd\xb0\x20\xcf\x80\xce\xbf\xce".
+ "\xb9\xe1\xbd\xb0\x20\xcf\x80\xe1\xbd\xb1\xcf\x80\xce\xb9\xce\xb1".
+ "\xcd\xbe\x0a";
+close $fh or die "close: $!";
+
+
+use open ":std", ":utf8";
+
+use IO::Handle;
+
+ at ARGV = ('io_utf8argv') x 2;
+is *ARGV->getline, "Μία πάπια, μὰ ποιὰ πάπια;\n",
+ 'getline respects open pragma when magically opening ARGV';
+
+is join('',*ARGV->getlines), "Μία πάπια, μὰ ποιὰ πάπια;\n",
+ 'getlines respects open pragma when magically opening ARGV';
+
+END {
+ 1 while unlink "io_utf8argv";
+}
Added: vendor/perl/dist/dist/Math-BigInt/t/rt-16221.t
===================================================================
--- vendor/perl/dist/dist/Math-BigInt/t/rt-16221.t (rev 0)
+++ vendor/perl/dist/dist/Math-BigInt/t/rt-16221.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,77 @@
+#!/usr/bin/perl
+#
+# Verify that
+# - Math::BigInt::objectify() calls as_int() (or as_number(), as a fallback)
+# if the target object class is Math::BigInt.
+# - Math::BigInt::objectify() calls as_float() if the target object class is
+# Math::BigFloat.
+#
+# See RT #16221 and RT #52124.
+
+use strict;
+use warnings;
+
+package main;
+
+use Test::More tests => 2;
+use Math::BigInt;
+use Math::BigFloat;
+
+############################################################################
+
+my $int = Math::BigInt->new(10);
+my $int_percent = My::Percent::Float->new(100);
+
+is($int * $int_percent, 10);
+
+############################################################################
+
+my $float = Math::BigFloat->new(10);
+my $float_percent = My::Percent::Float->new(100);
+
+is($float * $float_percent, 10);
+
+############################################################################
+
+package My::Percent::Int;
+
+sub new {
+ my $class = shift;
+ my $num = shift;
+ return bless \$num, $class;
+}
+
+sub as_number {
+ my $self = shift;
+ return Math::BigInt->new($$self / 100);
+}
+
+sub as_string {
+ my $self = shift;
+ return $$self;
+}
+
+############################################################################
+
+package My::Percent::Float;
+
+sub new {
+ my $class = shift;
+ my $num = shift;
+ return bless \$num, $class;
+}
+
+sub as_int {
+ my $self = shift;
+ return Math::BigInt->new($$self / 100);
+}
+
+sub as_float {
+ my $self = shift;
+ return Math::BigFloat->new($$self / 100);
+}
+
+sub as_string {
+ my $self = shift;
+ return $$self;
+}
Added: vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/TieHashDelta.pm
===================================================================
--- vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/TieHashDelta.pm (rev 0)
+++ vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/TieHashDelta.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,74 @@
+# For internal Module::CoreList use only.
+package Module::CoreList::TieHashDelta;
+use strict;
+use vars qw($VERSION);
+
+$VERSION = "2.96";
+
+sub TIEHASH {
+ my ($class, $changed, $removed, $parent) = @_;
+
+ return bless {
+ changed => $changed,
+ removed => $removed,
+ parent => $parent,
+ keys_inflated => 0,
+ }, $class;
+}
+
+sub FETCH {
+ my ($self, $key) = @_;
+
+ if (exists $self->{changed}{$key}) {
+ return $self->{changed}{$key};
+ } elsif (exists $self->{removed}{$key}) {
+ return undef;
+ } elsif (defined $self->{parent}) {
+ return $self->{parent}{$key};
+ }
+ return undef;
+}
+
+sub EXISTS {
+ my ($self, $key) = @_;
+
+ if (exists $self->{changed}{$key}) {
+ return 1;
+ } elsif (exists $self->{removed}{$key}) {
+ return '';
+ } elsif (defined $self->{parent}) {
+ return exists $self->{parent}{$key};
+ }
+ return '';
+}
+
+sub FIRSTKEY {
+ my ($self) = @_;
+
+ if (not $self->{keys_inflated}) {
+ # This inflates the whole set of hashes... Somewhat expensive, but saves
+ # many tied hash calls later.
+ my @parent_keys;
+ if (defined $self->{parent}) {
+ @parent_keys = keys %{$self->{parent}};
+ }
+
+ @parent_keys = grep !exists $self->{removed}{$_}, @parent_keys;
+ for my $key (@parent_keys) {
+ next if exists $self->{changed}->{$key};
+ $self->{changed}{$key} = $self->{parent}{$key};
+ }
+
+ $self->{keys_inflated} = 1;
+ }
+
+ keys %{$self->{changed}}; # reset each
+ $self->NEXTKEY;
+}
+
+sub NEXTKEY {
+ my ($self) = @_;
+ each %{$self->{changed}};
+}
+
+1;
Added: vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/Utils.pm
===================================================================
--- vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/Utils.pm (rev 0)
+++ vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList/Utils.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,986 @@
+package Module::CoreList::Utils;
+
+use strict;
+use warnings;
+use vars qw[$VERSION %utilities];
+use Module::CoreList;
+use Module::CoreList::TieHashDelta;
+
+$VERSION = '2.96';
+
+sub utilities {
+ my $perl = shift;
+ $perl = shift if eval { $perl->isa(__PACKAGE__) };
+ return unless $perl or exists $utilities{$perl};
+ return sort keys %{ $utilities{$perl} };
+}
+
+sub first_release_raw {
+ my $util = shift;
+ $util = shift if eval { $util->isa(__PACKAGE__) };
+ #and scalar @_ and $_[0] =~ m#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z#;
+ my $version = shift;
+
+ my @perls = $version
+ ? grep { exists $utilities{$_}{ $util } &&
+ $utilities{$_}{ $util } ge $version } keys %utilities
+ : grep { exists $utilities{$_}{ $util } } keys %utilities;
+
+ return grep { exists $Module::CoreList::released{$_} } @perls;
+}
+
+sub first_release_by_date {
+ my @perls = &first_release_raw;
+ return unless @perls;
+ return (sort { $Module::CoreList::released{$a} cmp $Module::CoreList::released{$b} } @perls)[0];
+}
+
+sub first_release {
+ my @perls = &first_release_raw;
+ return unless @perls;
+ return (sort { $a cmp $b } @perls)[0];
+}
+
+sub removed_from {
+ my @perls = &removed_raw;
+ return shift @perls;
+}
+
+sub removed_from_by_date {
+ my @perls = sort { $Module::CoreList::released{$a} cmp $Module::CoreList::released{$b} } &removed_raw;
+ return shift @perls;
+}
+
+sub removed_raw {
+ my $util = shift;
+ $util = shift if eval { $util->isa(__PACKAGE__) };
+ return unless my @perls = sort { $a cmp $b } first_release_raw($util);
+ @perls = grep { exists $Module::CoreList::released{$_} } @perls;
+ my $last = pop @perls;
+ my @removed = grep { $_ > $last } sort { $a cmp $b } keys %utilities;
+ return @removed;
+}
+
+my %delta = (
+ 5 => {
+ changed => {
+ 'a2p' => '1',
+ 'c2ph' => '1',
+ 'cppstdin' => '1',
+ 'find2perl' => '1',
+ 'pstruct' => '1',
+ 's2p' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.001 => {
+ delta_from => 5,
+ changed => {
+ 'h2xs' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.002 => {
+ delta_from => 5.001,
+ changed => {
+ 'h2ph' => '1',
+ 'perlbug' => '1',
+ 'perldoc' => '1',
+ 'pod2html' => '1',
+ 'pod2latex' => '1',
+ 'pod2man' => '1',
+ 'pod2text' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.00307 => {
+ delta_from => 5.002,
+ changed => {
+ 'pl2pm' => '1',
+ },
+ removed => {
+ 'cppstdin' => 1,
+ 'pstruct' => 1,
+ }
+ },
+
+ 5.004 => {
+ delta_from => 5.00307,
+ changed => {
+ 'splain' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.005 => {
+ delta_from => 5.00405,
+ changed => {
+ 'perlcc' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.00503 => {
+ delta_from => 5.005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.00405 => {
+ delta_from => 5.004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.006 => {
+ delta_from => 5.00504,
+ changed => {
+ 'dprofpp' => '1',
+ 'pod2usage' => '1',
+ 'podchecker' => '1',
+ 'podselect' => '1',
+ 'pstruct' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.006001 => {
+ delta_from => 5.006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.007003 => {
+ delta_from => 5.006002,
+ changed => {
+ 'libnetcfg' => '1',
+ 'perlivp' => '1',
+ 'psed' => '1',
+ 'xsubpp' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008 => {
+ delta_from => 5.007003,
+ changed => {
+ 'enc2xs' => '1',
+ 'piconv' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008001 => {
+ delta_from => 5.008,
+ changed => {
+ 'cpan' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.009 => {
+ delta_from => 5.008009,
+ changed => {
+ },
+ removed => {
+ 'corelist' => 1,
+ 'instmodsh' => 1,
+ 'prove' => 1,
+ }
+ },
+
+ 5.008002 => {
+ delta_from => 5.008001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.006002 => {
+ delta_from => 5.006001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.008003 => {
+ delta_from => 5.008002,
+ changed => {
+ 'instmodsh' => '1',
+ 'prove' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.00504 => {
+ delta_from => 5.00503,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.009001 => {
+ delta_from => 5.009,
+ changed => {
+ 'instmodsh' => '1',
+ 'prove' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008004 => {
+ delta_from => 5.008003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.008005 => {
+ delta_from => 5.008004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.008006 => {
+ delta_from => 5.008005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.009002 => {
+ delta_from => 5.009001,
+ changed => {
+ 'corelist' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008007 => {
+ delta_from => 5.008006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.009003 => {
+ delta_from => 5.009002,
+ changed => {
+ 'ptar' => '1',
+ 'ptardiff' => '1',
+ 'shasum' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008008 => {
+ delta_from => 5.008007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.009004 => {
+ delta_from => 5.009003,
+ changed => {
+ 'config_data' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.009005 => {
+ delta_from => 5.009004,
+ changed => {
+ 'cpan2dist' => '1',
+ 'cpanp' => '1',
+ 'cpanp-run-perl' => '1',
+ },
+ removed => {
+ 'perlcc' => 1,
+ }
+ },
+
+ 5.010000 => {
+ delta_from => 5.009005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.008009 => {
+ delta_from => 5.008008,
+ changed => {
+ 'corelist' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.010001 => {
+ delta_from => 5.010000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011 => {
+ delta_from => 5.010001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011001 => {
+ delta_from => 5.011,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011002 => {
+ delta_from => 5.011001,
+ changed => {
+ 'perlthanks' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.011003 => {
+ delta_from => 5.011002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011004 => {
+ delta_from => 5.011003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011005 => {
+ delta_from => 5.011004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.012 => {
+ delta_from => 5.011005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013 => {
+ delta_from => 5.012005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.012001 => {
+ delta_from => 5.012,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013001 => {
+ delta_from => 5.013,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013002 => {
+ delta_from => 5.013001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013003 => {
+ delta_from => 5.013002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013004 => {
+ delta_from => 5.013003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.012002 => {
+ delta_from => 5.012001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013005 => {
+ delta_from => 5.013004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013006 => {
+ delta_from => 5.013005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013007 => {
+ delta_from => 5.013006,
+ changed => {
+ 'ptargrep' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.013008 => {
+ delta_from => 5.013007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013009 => {
+ delta_from => 5.013008,
+ changed => {
+ 'json_pp' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.012003 => {
+ delta_from => 5.012002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013010 => {
+ delta_from => 5.013009,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013011 => {
+ delta_from => 5.013010,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014 => {
+ delta_from => 5.013011,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014001 => {
+ delta_from => 5.014,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015 => {
+ delta_from => 5.014004,
+ changed => {
+ },
+ removed => {
+ 'dprofpp' => 1,
+ }
+ },
+
+ 5.012004 => {
+ delta_from => 5.012003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015001 => {
+ delta_from => 5.015,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015002 => {
+ delta_from => 5.015001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015003 => {
+ delta_from => 5.015002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014002 => {
+ delta_from => 5.014001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015004 => {
+ delta_from => 5.015003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015005 => {
+ delta_from => 5.015004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015006 => {
+ delta_from => 5.015005,
+ changed => {
+ 'zipdetails' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.015007 => {
+ delta_from => 5.015006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015008 => {
+ delta_from => 5.015007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015009 => {
+ delta_from => 5.015008,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.016 => {
+ delta_from => 5.015009,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017 => {
+ delta_from => 5.016003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017001 => {
+ delta_from => 5.017,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017002 => {
+ delta_from => 5.017001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.016001 => {
+ delta_from => 5.016,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017003 => {
+ delta_from => 5.017002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017004 => {
+ delta_from => 5.017003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014003 => {
+ delta_from => 5.014002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017005 => {
+ delta_from => 5.017004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.016002 => {
+ delta_from => 5.016001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.012005 => {
+ delta_from => 5.012004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017006 => {
+ delta_from => 5.017005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017007 => {
+ delta_from => 5.017006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017008 => {
+ delta_from => 5.017007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017009 => {
+ delta_from => 5.017008,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014004 => {
+ delta_from => 5.014003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.016003 => {
+ delta_from => 5.016002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017010 => {
+ delta_from => 5.017009,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017011 => {
+ delta_from => 5.017010,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.018000 => {
+ delta_from => 5.017011,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.018001 => {
+ delta_from => 5.018000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019000 => {
+ delta_from => 5.018000,
+ changed => {
+ },
+ removed => {
+ 'cpan2dist' => '1',
+ 'cpanp' => '1',
+ 'cpanp-run-perl' => '1',
+ 'pod2latex' => '1',
+ }
+ },
+ 5.019001 => {
+ delta_from => 5.019000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019002 => {
+ delta_from => 5.019001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019003 => {
+ delta_from => 5.019002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+);
+
+for my $version (sort { $a <=> $b } keys %delta) {
+ my $data = $delta{$version};
+
+ tie %{$utilities{$version}}, 'Module::CoreList::TieHashDelta',
+ $data->{changed}, $data->{removed},
+ $data->{delta_from} ? $utilities{$data->{delta_from}} : undef;
+}
+
+# Create aliases with trailing zeros for $] use
+
+$utilities{'5.000'} = $utilities{5};
+
+_create_aliases(\%utilities);
+
+sub _create_aliases {
+ my ($hash) = @_;
+
+ for my $version (keys %$hash) {
+ next unless $version >= 5.010;
+
+ my $padded = sprintf "%0.6f", $version;
+
+ # If the version in string form isn't the same as the numeric version,
+ # alias it.
+ if ($padded ne $version && $version == $padded) {
+ $hash->{$padded} = $hash->{$version};
+ }
+ }
+}
+
+'foo';
+
+=pod
+
+=head1 NAME
+
+Module::CoreList::Utils - what utilities shipped with versions of perl
+
+=head1 SYNOPSIS
+
+ use Module::CoreList::Utils;
+
+ print $Module::CoreList::Utils::utilities{5.009003}{ptar}; # prints 1
+
+ print Module::CoreList::Utils->first_release('corelist'); # prints 5.008009
+ print Module::CoreList::Utils->first_release_by_date('corelist'); # prints 5.009002
+
+=head1 DESCRIPTION
+
+Module::CoreList::Utils provides information on which core and dual-life utilities shipped
+with each version of L<perl>.
+
+It provides a number of mechanisms for querying this information.
+
+There is a functional programming API available for programmers to query
+information.
+
+Programmers may also query the contained hash structure to find relevant
+information.
+
+=head1 FUNCTIONS API
+
+These are the functions that are available, they may either be called as functions or class methods:
+
+ Module::CoreList::Utils::first_release('corelist'); # as a function
+
+ Module::CoreList::Utils->first_release('corelist'); # class method
+
+=over
+
+=item C<utilities>
+
+Requires a perl version as an argument, returns a list of utilities that shipped with
+that version of perl, or undef/empty list if that perl doesn't exist.
+
+=item C<first_release( UTILITY )>
+
+Requires a UTILITY name as an argument, returns the perl version when that utility first
+appeared in core as ordered by perl version number or undef ( in scalar context )
+or an empty list ( in list context ) if that utility is not in core.
+
+=item C<first_release_by_date( UTILITY )>
+
+Requires a UTILITY name as an argument, returns the perl version when that utility first
+appeared in core as ordered by release date or undef ( in scalar context )
+or an empty list ( in list context ) if that utility is not in core.
+
+=item C<removed_from( UTILITY )>
+
+Takes a UTILITY name as an argument, returns the first perl version where that utility
+was removed from core. Returns undef if the given utility was never in core or remains
+in core.
+
+=item C<removed_from_by_date( UTILITY )>
+
+Takes a UTILITY name as an argument, returns the first perl version by release date where that
+utility was removed from core. Returns undef if the given utility was never in core or remains
+in core.
+
+=back
+
+=head1 DATA STRUCTURES
+
+These are the hash data structures that are available:
+
+=over
+
+=item C<%Module::CoreList::Utils::utilities>
+
+A hash of hashes that is keyed on perl version as indicated
+in $]. The second level hash is utility / defined pairs.
+
+=back
+
+=head1 AUTHOR
+
+Chris C<BinGOs> Williams <chris at bingosnet.co.uk>
+
+Currently maintained by the perl 5 porters E<lt>perl5-porters at perl.orgE<gt>.
+
+This module is the result of archaeology undertaken during QA Hackathon
+in Lancaster, April 2013.
+
+=head1 LICENSE
+
+Copyright (C) 2013 Chris Williams. All Rights Reserved.
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<corelist>, L<Module::CoreList>, L<perl>, L<http://perlpunks.de/corelist>
+
+=cut
Added: vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList.pod
===================================================================
--- vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList.pod (rev 0)
+++ vendor/perl/dist/dist/Module-CoreList/lib/Module/CoreList.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,223 @@
+=head1 NAME
+
+Module::CoreList - what modules shipped with versions of perl
+
+=head1 SYNOPSIS
+
+ use Module::CoreList;
+
+ print $Module::CoreList::version{5.00503}{CPAN}; # prints 1.48
+
+ print Module::CoreList->first_release('File::Spec'); # prints 5.00405
+ print Module::CoreList->first_release_by_date('File::Spec'); # prints 5.005
+ print Module::CoreList->first_release('File::Spec', 0.82); # prints 5.006001
+
+ print join ', ', Module::CoreList->find_modules(qr/Data/);
+ # prints 'Data::Dumper'
+ print join ', ', Module::CoreList->find_modules(qr/test::h.*::.*s/i, 5.008008);
+ # prints 'Test::Harness::Assert, Test::Harness::Straps'
+
+ print join ", ", @{ $Module::CoreList::families{5.005} };
+ # prints "5.005, 5.00503, 5.00504"
+
+=head1 DESCRIPTION
+
+Module::CoreList provides information on which core and dual-life modules shipped
+with each version of L<perl>.
+
+It provides a number of mechanisms for querying this information.
+
+There is a utility called L<corelist> provided with this module
+which is a convenient way of querying from the command-line.
+
+There is a functional programming API available for programmers to query
+information.
+
+Programmers may also query the contained hash structures to find relevant
+information.
+
+=head1 FUNCTIONS API
+
+These are the functions that are available, they may either be called as functions or class methods:
+
+ Module::CoreList::first_release('File::Spec'); # as a function
+
+ Module::CoreList->first_release('File::Spec'); # class method
+
+=over
+
+=item C<first_release( MODULE )>
+
+Behaviour since version 2.11
+
+Requires a MODULE name as an argument, returns the perl version when that module first
+appeared in core as ordered by perl version number or undef ( in scalar context )
+or an empty list ( in list context ) if that module is not in core.
+
+=item C<first_release_by_date( MODULE )>
+
+Requires a MODULE name as an argument, returns the perl version when that module first
+appeared in core as ordered by release date or undef ( in scalar context )
+or an empty list ( in list context ) if that module is not in core.
+
+=item C<find_modules( REGEX, [ LIST OF PERLS ] )>
+
+Takes a regex as an argument, returns a list of modules that match the regex given.
+If only a regex is provided applies to all modules in all perl versions. Optionally
+you may provide a list of perl versions to limit the regex search.
+
+=item C<find_version( PERL_VERSION )>
+
+Takes a perl version as an argument. Returns that perl version if it exists or C<undef>
+otherwise.
+
+=item C<is_deprecated( MODULE, PERL_VERSION )>
+
+Available in version 2.22 and above.
+
+Returns true if MODULE is marked as deprecated in PERL_VERSION. If PERL_VERSION is
+omitted, it defaults to the current version of Perl.
+
+=item C<deprecated_in( MODULE )>
+
+Available in version 2.77 and above.
+
+Returns the first PERL_VERSION where the MODULE was marked as deprecated. Returns C<undef>
+if the MODULE has not been marked as deprecated.
+
+=item C<removed_from( MODULE )>
+
+Available in version 2.32 and above
+
+Takes a module name as an argument, returns the first perl version where that module
+was removed from core. Returns undef if the given module was never in core or remains
+in core.
+
+=item C<removed_from_by_date( MODULE )>
+
+Available in version 2.32 and above
+
+Takes a module name as an argument, returns the first perl version by release date where that module
+was removed from core. Returns undef if the given module was never in core or remains
+in core.
+
+=item C<changes_between( PERL_VERSION, PERL_VERSION )>
+
+Available in version 2.66 and above.
+
+Given two perl versions, this returns a list of pairs describing the changes in
+core module content between them. The list is suitable for storing in a hash.
+The keys are library names and the values are hashrefs. Each hashref has an
+entry for one or both of C<left> and C<right>, giving the versions of the
+library in each of the left and right perl distributions.
+
+For example, it might return these data (among others) for the difference
+between 5.008000 and 5.008001:
+
+ 'Pod::ParseLink' => { left => '1.05', right => '1.06' },
+ 'Pod::ParseUtils' => { left => '0.22', right => '0.3' },
+ 'Pod::Perldoc' => { right => '3.10' },
+ 'Pod::Perldoc::BaseTo' => { right => undef },
+
+This shows us two libraries being updated and two being added, one of which has
+an undefined version in the right-hand side version.
+
+=back
+
+=head1 DATA STRUCTURES
+
+These are the hash data structures that are available:
+
+=over
+
+=item C<%Module::CoreList::version>
+
+A hash of hashes that is keyed on perl version as indicated
+in $]. The second level hash is module => version pairs.
+
+Note, it is possible for the version of a module to be unspecified,
+whereby the value is C<undef>, so use C<exists $version{$foo}{$bar}> if
+that's what you're testing for.
+
+Starting with 2.10, the special module name C<Unicode> refers to the version of
+the Unicode Character Database bundled with Perl.
+
+=item C<%Module::CoreList::released>
+
+Keyed on perl version this contains ISO
+formatted versions of the release dates, as gleaned from L<perlhist>.
+
+=item C<%Module::CoreList::families>
+
+New, in 1.96, a hash that
+clusters known perl releases by their major versions.
+
+=item C<%Module::CoreList::deprecated>
+
+A hash of hashes keyed on perl version and on module name.
+If a module is defined it indicates that that module is
+deprecated in that perl version and is scheduled for removal
+from core at some future point.
+
+=item C<%Module::CoreList::upstream>
+
+A hash that contains information on where patches should be directed
+for each core module.
+
+UPSTREAM indicates where patches should go. C<undef> implies
+that this hasn't been discussed for the module at hand.
+C<blead> indicates that the copy of the module in the blead
+sources is to be considered canonical, C<cpan> means that the
+module on CPAN is to be patched first. C<first-come> means
+that blead can be patched freely if it is in sync with the
+latest release on CPAN.
+
+=item C<%Module::CoreList::bug_tracker>
+
+A hash that contains information on the appropriate bug tracker
+for each core module.
+
+BUGS is an email or url to post bug reports. For modules with
+UPSTREAM => 'blead', use perl5-porters at perl.org. rt.cpan.org
+appears to automatically provide a URL for CPAN modules; any value
+given here overrides the default:
+http://rt.cpan.org/Public/Dist/Display.html?Name=$ModuleName
+
+=back
+
+=head1 CAVEATS
+
+Module::CoreList currently covers the 5.000, 5.001, 5.002, 5.003_07,
+5.004, 5.004_05, 5.005, 5.005_03, 5.005_04, 5.6.0, 5.6.1, 5.6.2, 5.7.3,
+5.8.0, 5.8.1, 5.8.2, 5.8.3, 5.8.4, 5.8.5, 5.8.6, 5.8.7, 5.8.8, 5.8.9,
+5.9.0, 5.9.1, 5.9.2, 5.9.3, 5.9.4, 5.9.5, 5.10.0, 5.10.1, 5.11.0, 5.11.1,
+5.11.2, 5.11.3, 5.11.4, 5.11.5, 5.12.0, 5.12.1, 5.12.2, 5.12.3, 5.12.4,
+5.12.5, 5.13.0, 5.13.1, 5.13.2, 5.13.3, 5.13.4, 5.13.5, 5.13.6, 5.13.7,
+5.13.8, 5.13.9, 5.13.10, 5.13.11, 5.14.0, 5.14.1, 5.14.2 5.14.3, 5.14.4,
+5.15.0, 5.15.1, 5.15.2, 5.15.3, 5.15.4, 5.15.5, 5.15.6, 5.15.7, 5.15.8,
+5.15.9, 5.16.0, 5.16.1, 5.16.2, 5.16.3, 5.17.0, 5.17.1, 5.17.2, 5.17.3,
+5.17.4, 5.17.5, 5.17.6, 5.17.7, 5.17.8, 5.17.9, 5.17.10, 5.17.11, 5.18.0,
+5.19.0, 5.19.1, 5.19.2, 5.19.3 and 5.18.1 releases of perl.
+
+=head1 HISTORY
+
+Moved to Changes file.
+
+=head1 AUTHOR
+
+Richard Clamp E<lt>richardc at unixbeard.netE<gt>
+
+Currently maintained by the perl 5 porters E<lt>perl5-porters at perl.orgE<gt>.
+
+=head1 LICENSE
+
+Copyright (C) 2002-2009 Richard Clamp. All Rights Reserved.
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<corelist>, L<Module::Info>, L<perl>, L<http://perlpunks.de/corelist>
+
+=cut
Added: vendor/perl/dist/dist/Module-CoreList/t/utils.t
===================================================================
--- vendor/perl/dist/dist/Module-CoreList/t/utils.t (rev 0)
+++ vendor/perl/dist/dist/Module-CoreList/t/utils.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+use strict;
+use warnings;
+use Test::More tests => 9;
+
+BEGIN { require_ok('Module::CoreList::Utils'); }
+
+ok( defined $Module::CoreList::Utils::utilities{5}{a2p}, '5 had a2p' );
+is( Module::CoreList::Utils->first_release('a2p'), 5, 'a2p first released in 5' );
+is( Module::CoreList::Utils::first_release('a2p'), 5, 'a2p first released in 5' );
+is( Module::CoreList::Utils->first_release('corelist'), 5.008009, 'corelist with v5.8.9');
+is( Module::CoreList::Utils->first_release_by_date('corelist'), 5.009002, 'corelist with v5.9.2');
+is( Module::CoreList::Utils::first_release_by_date('corelist'), 5.009002, 'corelist with v5.9.2');
+{
+ my @expected = qw(a2p c2ph cppstdin find2perl h2xs pstruct s2p);
+ {
+ my @foo = Module::CoreList::Utils->utilities(5.001);
+ is_deeply( \@foo, \@expected, '5.001 utils all present and correct' );
+ }
+ {
+ my @foo = Module::CoreList::Utils::utilities(5.001);
+ is_deeply( \@foo, \@expected, '5.001 utils all present and correct' );
+ }
+}
Added: vendor/perl/dist/dist/Net-Ping/t/520_icmp_ttl.t
===================================================================
--- vendor/perl/dist/dist/Net-Ping/t/520_icmp_ttl.t (rev 0)
+++ vendor/perl/dist/dist/Net-Ping/t/520_icmp_ttl.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,47 @@
+# Test to perform icmp protocol testing.
+# Root access is required.
+
+BEGIN {
+ unless (eval "require Socket") {
+ print "1..0 \# Skip: no Socket\n";
+ exit;
+ }
+}
+
+use Test::More qw(no_plan);
+BEGIN {use_ok('Net::Ping')};
+
+SKIP: {
+ skip "icmp ping requires root privileges.", 1
+ if ($> and $^O ne 'VMS' and $^O ne 'cygwin')
+ or (($^O eq 'MSWin32' or $^O eq 'cygwin')
+ and !IsAdminUser())
+ or ($^O eq 'VMS'
+ and (`write sys\$output f\$privilege("SYSPRV")` =~ m/FALSE/));
+ my $p = new Net::Ping ("icmp",undef,undef,undef,undef,undef);
+ isa_ok($p, 'Net::Ping');
+ ok $p->ping("127.0.0.1");
+ $p->close();
+ $p = new Net::Ping ("icmp",undef,undef,undef,undef,0);
+ ok $p->ping("127.0.0.1");
+ $p->close();
+ $p = undef();
+ $p = new Net::Ping ("icmp",undef,undef,undef,undef,1);
+ isa_ok($p, 'Net::Ping');
+ $p = undef();
+ $p = eval 'new Net::Ping ("icmp",undef,undef,undef,undef,-1)';
+ ok(!defined($p));
+ $p = undef();
+ $p = eval 'new Net::Ping ("icmp",undef,undef,undef,undef,256)';
+ ok(!defined($p));
+ $p = new Net::Ping ("icmp",undef,undef,undef,undef,10);
+ ok $p->ping("127.0.0.1");
+ $p->close();
+}
+
+sub IsAdminUser {
+ return unless $^O eq 'MSWin32' or $^O eq "cygwin";
+ return unless eval { require Win32 };
+ return unless defined &Win32::IsAdminUser;
+ return Win32::IsAdminUser();
+}
Added: vendor/perl/dist/dist/Safe/t/safenamedcap.t
===================================================================
--- vendor/perl/dist/dist/Safe/t/safenamedcap.t (rev 0)
+++ vendor/perl/dist/dist/Safe/t/safenamedcap.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+BEGIN {
+ if ($] < 5.010) {
+ print "1..0\n";
+ exit 0;
+ }
+ require Config;
+ import Config;
+ if ($Config{'extensions'} !~ /\bOpcode\b/) {
+ print "1..0\n";
+ exit 0;
+ }
+}
+
+use strict;
+use Test::More;
+use Safe;
+plan(tests => 1);
+
+BEGIN { Safe->new }
+"foo" =~ /(?<foo>fo*)/;
+is( $+{foo}, "foo", "Named capture works" );
Added: vendor/perl/dist/dist/Safe/t/saferegexp.t
===================================================================
--- vendor/perl/dist/dist/Safe/t/saferegexp.t (rev 0)
+++ vendor/perl/dist/dist/Safe/t/saferegexp.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,34 @@
+#!perl -w
+
+BEGIN {
+ require Config; import Config;
+ if ($Config{'extensions'} !~ /\bOpcode\b/) {
+ print "1..0\n";
+ exit 0;
+ }
+}
+
+use Test::More tests => 3;
+use Safe;
+
+my $c; my $r;
+my $snippet = q{
+ my $foo = qr/foo/;
+ ref $foo;
+};
+$c = new Safe;
+$r = $c->reval($snippet);
+is( $r, "Safe::Root0::Regexp" );
+$r or diag $@;
+
+# once more with the same compartment
+# (where DESTROY has been cleaned up)
+$r = $c->reval($snippet);
+is( $r, "Safe::Root0::Regexp" );
+$r or diag $@;
+
+# try with a new compartment
+$c = new Safe;
+$r = $c->reval($snippet);
+is( $r, "Safe::Root1::Regexp" );
+$r or diag $@;
Added: vendor/perl/dist/dist/Search-Dict/Changes
===================================================================
--- vendor/perl/dist/dist/Search-Dict/Changes (rev 0)
+++ vendor/perl/dist/dist/Search-Dict/Changes 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,16 @@
+1.07 2012-04-11
+
+ - install into sitelib for Perl 5.12+
+ - use Tie::Handle to get Tie::StdHandle for older Perls
+ - avoid using fc() in v5.15.0 - v5.15.7
+ - fix tests for older Perls
+
+1.06 2012-03-31
+
+ - suppress stat() warnings on tied filehandles
+
+1.05 2012-03-31
+
+ - no longer requires stat() on filehandle
+ - tests use Test::More
+ - case folds with fc() on Perl 5.15+
Added: vendor/perl/dist/dist/Search-Dict/Makefile.PL
===================================================================
--- vendor/perl/dist/dist/Search-Dict/Makefile.PL (rev 0)
+++ vendor/perl/dist/dist/Search-Dict/Makefile.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+use strict;
+use warnings;
+
+use ExtUtils::MakeMaker;
+
+my %WriteMakefileArgs = (
+ "NAME" => "Search::Dict",
+ "VERSION_FROM" => "lib/Search/Dict.pm",
+ "ABSTRACT_FROM" => "lib/Search/Dict.pm",
+ "AUTHOR" => "The Perl 5 Porters",
+ "EXE_FILES" => [],
+ "LICENSE" => "perl",
+ "PREREQ_PM" => {
+ "Exporter" => 0,
+ "Test::More" => 0.47,
+ "Tie::Handle" => 0,
+ },
+ INSTALLDIRS => ( $] lt '5.012' ? 'perl' : 'site' ),
+);
+
+WriteMakefile(%WriteMakefileArgs);
+
Added: vendor/perl/dist/dist/Search-Dict/README.patching
===================================================================
--- vendor/perl/dist/dist/Search-Dict/README.patching (rev 0)
+++ vendor/perl/dist/dist/Search-Dict/README.patching 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,27 @@
+Patching instructions for Search-Dict
+
+1. Check for any changes to .pm files since dev or stable Perl release. E.g.
+to check for changes since v5.15.8:
+
+ $ cd dist/g
+ $ git log v5.15.8..blead -- .
+
+2. If you are making the first change since the last Perl release, you need to
+bump the $VERSION in all .pm files and update the Changes file with the new
+version. In the Changes file, put the expected *NEXT* release of Perl (dev or
+stable) as the release date and version. E.g. after v5.15.8, I would add this line
+to Changes to indicate what will be next release:
+
+ 0.280206 - 2012-03-20 (Perl v5.15.9)
+
+3. Add an entry to Changes for your work
+
+4. Update Makefile.PL, MANIFEST.SKIP or other support files as necessary. E.g.
+update Makefile.PL with any changes to prerequisites.
+
+5. Commit all changes (preferably to a branch)
+
+6. Run Configure/make/make test and check for errors. If there are any, fix them.
+
+7. If all is well, push your commits to blead or send a patch to p5p if you do
+not have commit access to the Perl 5 repository
Added: vendor/perl/dist/dist/Search-Dict/README.release
===================================================================
--- vendor/perl/dist/dist/Search-Dict/README.release (rev 0)
+++ vendor/perl/dist/dist/Search-Dict/README.release 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
+Release instructions for dual-life Search::Dict
+
+1. Check out a tag/commit corresponding to the release point. This
+should generally be a Perl release (dev or stable). Make sure
+your working tree is clear of extraneous files. E.g.
+
+ $ git checkout v5.15.8
+ $ git clean -dxf
+
+2. Rsync the Search-Dict directory to a temporary directory for
+release. E.g.
+
+ $ rsync -av --delete dist/Search-Dict /tmp
+
+3. Change to the temp directory
+
+ $ cd /tmp/Search-Dict
+
+4. Look at the Changes file. If it was not kept up to date in blead,
+take a minute to feel sad, then update it. Remember to copy the
+changes back to blead later.
+
+5. Configure and then make a MANIFEST
+
+ $ perl Makefile.PL
+ $ make manifest
+
+6. Build a release directory and examine its contents, paying particular
+attention to the MANIFEST and the META files
+
+ $ make distdir
+
+7. Test the release directory
+
+ $ make disttest
+
+8. If all looks good, create a tarball and upload it to CPAN (maybe
+install CPAN::Uploader or an equivalent tool)
+
+ $ make dist
+ $ cpan_upload Search-Dict-X.YYYZZZ.tar.gz
+
+9. Update Porting/Maintainers.pl in the Perl repo with the new tarball
+name for Search-Dict.
+
+10. If you updated Changes, copy that back to blead now
+
+11. Commit any changes to blead (or submit it as a patch if you don't have a
+commit bit)
Added: vendor/perl/dist/dist/Search-Dict/lib/Search/Dict.pm
===================================================================
--- vendor/perl/dist/dist/Search-Dict/lib/Search/Dict.pm (rev 0)
+++ vendor/perl/dist/dist/Search-Dict/lib/Search/Dict.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,128 @@
+package Search::Dict;
+require 5.000;
+require Exporter;
+
+my $fc_available;
+BEGIN {
+ $fc_available = '5.015008';
+ if ( $] ge $fc_available ) {
+ require feature;
+ 'feature'->import('fc'); # string avoids warning on old Perls <sigh>
+ }
+}
+
+use strict;
+
+our $VERSION = '1.07';
+our @ISA = qw(Exporter);
+our @EXPORT = qw(look);
+
+=head1 NAME
+
+Search::Dict - look - search for key in dictionary file
+
+=head1 SYNOPSIS
+
+ use Search::Dict;
+ look *FILEHANDLE, $key, $dict, $fold;
+
+ use Search::Dict;
+ look *FILEHANDLE, $params;
+
+=head1 DESCRIPTION
+
+Sets file position in FILEHANDLE to be first line greater than or equal
+(stringwise) to I<$key>. Returns the new file position, or -1 if an error
+occurs.
+
+The flags specify dictionary order and case folding:
+
+If I<$dict> is true, search by dictionary order (ignore anything but word
+characters and whitespace). The default is honour all characters.
+
+If I<$fold> is true, ignore case. The default is to honour case.
+
+If there are only three arguments and the third argument is a hash
+reference, the keys of that hash can have values C<dict>, C<fold>, and
+C<comp> or C<xfrm> (see below), and their corresponding values will be
+used as the parameters.
+
+If a comparison subroutine (comp) is defined, it must return less than zero,
+zero, or greater than zero, if the first comparand is less than,
+equal, or greater than the second comparand.
+
+If a transformation subroutine (xfrm) is defined, its value is used to
+transform the lines read from the filehandle before their comparison.
+
+=cut
+
+sub look {
+ my($fh,$key,$dict,$fold) = @_;
+ my ($comp, $xfrm);
+ if (@_ == 3 && ref $dict eq 'HASH') {
+ my $params = $dict;
+ $dict = 0;
+ $dict = $params->{dict} if exists $params->{dict};
+ $fold = $params->{fold} if exists $params->{fold};
+ $comp = $params->{comp} if exists $params->{comp};
+ $xfrm = $params->{xfrm} if exists $params->{xfrm};
+ }
+ $comp = sub { $_[0] cmp $_[1] } unless defined $comp;
+ local($_);
+ my $fno = fileno $fh;
+ my @stat;
+ if ( defined $fno && $fno >= 0 && ! tied *{$fh} ) { # real, open file
+ @stat = eval { stat($fh) }; # in case fileno lies
+ }
+ my($size, $blksize) = @stat[7,11];
+ $size = do { seek($fh,0,2); my $s = tell($fh); seek($fh,0,0); $s }
+ unless defined $size;
+ $blksize ||= 8192;
+ $key =~ s/[^\w\s]//g if $dict;
+ if ( $fold ) {
+ $key = $] ge $fc_available ? fc($key) : lc($key);
+ }
+ # find the right block
+ my($min, $max) = (0, int($size / $blksize));
+ my $mid;
+ while ($max - $min > 1) {
+ $mid = int(($max + $min) / 2);
+ seek($fh, $mid * $blksize, 0)
+ or return -1;
+ <$fh> if $mid; # probably a partial line
+ $_ = <$fh>;
+ $_ = $xfrm->($_) if defined $xfrm;
+ chomp;
+ s/[^\w\s]//g if $dict;
+ if ( $fold ) {
+ $_ = $] ge $fc_available ? fc($_) : lc($_);
+ }
+ if (defined($_) && $comp->($_, $key) < 0) {
+ $min = $mid;
+ }
+ else {
+ $max = $mid;
+ }
+ }
+ # find the right line
+ $min *= $blksize;
+ seek($fh,$min,0)
+ or return -1;
+ <$fh> if $min;
+ for (;;) {
+ $min = tell($fh);
+ defined($_ = <$fh>)
+ or last;
+ $_ = $xfrm->($_) if defined $xfrm;
+ chomp;
+ s/[^\w\s]//g if $dict;
+ if ( $fold ) {
+ $_ = $] ge $fc_available ? fc($_) : lc($_);
+ }
+ last if $comp->($_, $key) >= 0;
+ }
+ seek($fh,$min,0);
+ $min;
+}
+
+1;
Added: vendor/perl/dist/dist/Search-Dict/t/Dict.t
===================================================================
--- vendor/perl/dist/dist/Search-Dict/t/Dict.t (rev 0)
+++ vendor/perl/dist/dist/Search-Dict/t/Dict.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,124 @@
+#!./perl
+
+use strict;
+use Test::More;
+plan tests => ( $] ge '5.008' ? 14 : 10 );
+
+my $DICT = <<EOT;
+Aarhus
+Aaron
+Ababa
+aback
+abaft
+abandon
+abandoned
+abandoning
+abandonment
+abandons
+abase
+abased
+abasement
+abasements
+abases
+abash
+abashed
+abashes
+abashing
+abasing
+abate
+abated
+abatement
+abatements
+abater
+abates
+abating
+Abba
+EOT
+
+use Tie::Handle; # loads Tie::StdHandle
+use Search::Dict;
+
+open(DICT, "+>dict-$$") or die "Can't create dict-$$: $!";
+binmode DICT; # To make length expected one.
+print DICT $DICT;
+
+my $word;
+
+my $pos = look *DICT, "Ababa";
+chomp($word = <DICT>);
+cmp_ok $pos, ">=", 0;
+is $word, "Ababa", "found 'Ababa' from file";
+
+if (ord('a') > ord('A') ) { # ASCII
+
+ $pos = look *DICT, "foo";
+ $word = <DICT>;
+
+ is $pos, length($DICT), "word not found will search to end of file";
+
+ my $pos = look *DICT, "abash";
+ chomp($word = <DICT>);
+ cmp_ok $pos, ">=", 0;
+ is $word, "abash";
+}
+else { # EBCDIC systems e.g. os390
+
+ $pos = look *DICT, "FOO";
+ $word = <DICT>;
+
+ is $pos, length($DICT); # will search to end of file
+
+ my $pos = look *DICT, "Abba";
+ chomp($word = <DICT>);
+ cmp_ok $pos, ">=", 0;
+ is $word, "Abba";
+}
+
+$pos = look *DICT, "aarhus", 1, 1;
+chomp($word = <DICT>);
+
+cmp_ok $pos, ">=", 0;
+is $word, "Aarhus";
+
+close DICT or die "cannot close";
+
+{
+ local $^W = 1; # turn on global warnings for stat() in Search::Dict
+
+ my $warn = '';
+ local $SIG{__WARN__} = sub { $warn = join("\n", at _) };
+
+ tie *DICT, 'Tie::StdHandle', "<", "dict-$$";
+
+ $pos = look \*DICT, "aarhus", 1, 1;
+ is( $warn, '', "no warning seen" );
+
+ $word = <DICT>;
+ chomp $word;
+
+ cmp_ok $pos, ">=", 0, "case-insensitive search for 'aarhus' returned > 0";
+ is $word, "Aarhus", "case-insensitive search found 'Aarhus'";
+
+ untie *DICT;
+}
+unlink "dict-$$";
+
+if ( $] ge '5.008' ) {
+ open my $strfh, "<", \$DICT or die $!;
+
+ {
+ my $pos = look $strfh, 'Ababa';
+ chomp($word = <$strfh>);
+ cmp_ok $pos, ">=", 0;
+ is $word, "Ababa";
+ }
+
+ {
+ my $pos = look $strfh, "aarhus", 1, 1;
+ chomp($word = <$strfh>);
+ cmp_ok $pos, ">=", 0;
+ is $word, "Aarhus";
+ }
+
+ close $strfh;
+}
Added: vendor/perl/dist/dist/Storable/t/robust.t
===================================================================
--- vendor/perl/dist/dist/Storable/t/robust.t (rev 0)
+++ vendor/perl/dist/dist/Storable/t/robust.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,12 @@
+#!/usr/bin/perl
+
+# This test script checks that Storable will load properly if someone
+# is incorrectly messing with %INC to hide Log::Agent. No, no-one should
+# really be doing this, but, then, it *used* to work!
+
+use Test::More;
+plan tests => 1;
+
+$INC{'Log/Agent.pm'} = '#ignore#';
+require Storable;
+pass;
Added: vendor/perl/dist/dist/Term-Complete/lib/Term/Complete.pm
===================================================================
--- vendor/perl/dist/dist/Term-Complete/lib/Term/Complete.pm (rev 0)
+++ vendor/perl/dist/dist/Term-Complete/lib/Term/Complete.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,188 @@
+package Term::Complete;
+require 5.000;
+require Exporter;
+
+use strict;
+our @ISA = qw(Exporter);
+our @EXPORT = qw(Complete);
+our $VERSION = '1.402';
+
+# @(#)complete.pl,v1.2 (me at anywhere.EBay.Sun.COM) 09/23/91
+
+=head1 NAME
+
+Term::Complete - Perl word completion module
+
+=head1 SYNOPSIS
+
+ $input = Complete('prompt_string', \@completion_list);
+ $input = Complete('prompt_string', @completion_list);
+
+=head1 DESCRIPTION
+
+This routine provides word completion on the list of words in
+the array (or array ref).
+
+The tty driver is put into raw mode and restored using an operating
+system specific command, in UNIX-like environments C<stty>.
+
+The following command characters are defined:
+
+=over 4
+
+=item E<lt>tabE<gt>
+
+Attempts word completion.
+Cannot be changed.
+
+=item ^D
+
+Prints completion list.
+Defined by I<$Term::Complete::complete>.
+
+=item ^U
+
+Erases the current input.
+Defined by I<$Term::Complete::kill>.
+
+=item E<lt>delE<gt>, E<lt>bsE<gt>
+
+Erases one character.
+Defined by I<$Term::Complete::erase1> and I<$Term::Complete::erase2>.
+
+=back
+
+=head1 DIAGNOSTICS
+
+Bell sounds when word completion fails.
+
+=head1 BUGS
+
+The completion character E<lt>tabE<gt> cannot be changed.
+
+=head1 AUTHOR
+
+Wayne Thompson
+
+=cut
+
+our($complete, $kill, $erase1, $erase2, $tty_raw_noecho, $tty_restore, $stty, $tty_safe_restore);
+our($tty_saved_state) = '';
+CONFIG: {
+ $complete = "\004";
+ $kill = "\025";
+ $erase1 = "\177";
+ $erase2 = "\010";
+ foreach my $s (qw(/bin/stty /usr/bin/stty)) {
+ if (-x $s) {
+ $tty_raw_noecho = "$s raw -echo";
+ $tty_restore = "$s -raw echo";
+ $tty_safe_restore = $tty_restore;
+ $stty = $s;
+ last;
+ }
+ }
+}
+
+sub Complete {
+ my($prompt, @cmp_lst, $cmp, $test, $l, @match);
+ my ($return, $r) = ("", 0);
+
+ $return = "";
+ $r = 0;
+
+ $prompt = shift;
+ if (ref $_[0] || $_[0] =~ /^\*/) {
+ @cmp_lst = sort @{$_[0]};
+ }
+ else {
+ @cmp_lst = sort(@_);
+ }
+
+ # Attempt to save the current stty state, to be restored later
+ if (defined $stty && defined $tty_saved_state && $tty_saved_state eq '') {
+ $tty_saved_state = qx($stty -g 2>/dev/null);
+ if ($?) {
+ # stty -g not supported
+ $tty_saved_state = undef;
+ }
+ else {
+ $tty_saved_state =~ s/\s+$//g;
+ $tty_restore = qq($stty "$tty_saved_state" 2>/dev/null);
+ }
+ }
+ system $tty_raw_noecho if defined $tty_raw_noecho;
+ LOOP: {
+ local $_;
+ print($prompt, $return);
+ while (($_ = getc(STDIN)) ne "\r") {
+ CASE: {
+ # (TAB) attempt completion
+ $_ eq "\t" && do {
+ @match = grep(/^\Q$return/, @cmp_lst);
+ unless ($#match < 0) {
+ $l = length($test = shift(@match));
+ foreach $cmp (@match) {
+ until (substr($cmp, 0, $l) eq substr($test, 0, $l)) {
+ $l--;
+ }
+ }
+ print("\a");
+ print($test = substr($test, $r, $l - $r));
+ $r = length($return .= $test);
+ }
+ last CASE;
+ };
+
+ # (^D) completion list
+ $_ eq $complete && do {
+ print(join("\r\n", '', grep(/^\Q$return/, @cmp_lst)), "\r\n");
+ redo LOOP;
+ };
+
+ # (^U) kill
+ $_ eq $kill && do {
+ if ($r) {
+ $r = 0;
+ $return = "";
+ print("\r\n");
+ redo LOOP;
+ }
+ last CASE;
+ };
+
+ # (DEL) || (BS) erase
+ ($_ eq $erase1 || $_ eq $erase2) && do {
+ if($r) {
+ print("\b \b");
+ chop($return);
+ $r--;
+ }
+ last CASE;
+ };
+
+ # printable char
+ ord >= 32 && do {
+ $return .= $_;
+ $r++;
+ print;
+ last CASE;
+ };
+ }
+ }
+ }
+
+ # system $tty_restore if defined $tty_restore;
+ if (defined $tty_saved_state && defined $tty_restore && defined $tty_safe_restore)
+ {
+ system $tty_restore;
+ if ($?) {
+ # tty_restore caused error
+ system $tty_safe_restore;
+ }
+ }
+ print("\n");
+ $return;
+}
+
+1;
Added: vendor/perl/dist/dist/Term-Complete/t/Complete.t
===================================================================
--- vendor/perl/dist/dist/Term-Complete/t/Complete.t (rev 0)
+++ vendor/perl/dist/dist/Term-Complete/t/Complete.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,111 @@
+#!./perl
+
+use warnings;
+use Test::More tests => 8;
+use vars qw( $Term::Complete::complete $complete $Term::Complete::stty );
+
+SKIP: {
+ skip('PERL_SKIP_TTY_TEST', 8) if $ENV{PERL_SKIP_TTY_TEST};
+
+ use_ok( 'Term::Complete' );
+
+ # this skips tests AND prevents the "used only once" warning
+ skip('No stty, Term::Complete will not run here', 7)
+ unless defined $Term::Complete::tty_raw_noecho &&
+ defined $Term::Complete::tty_restore;
+
+ # also prevent Term::Complete from running stty and messing up the terminal
+ undef $Term::Complete::tty_restore;
+ undef $Term::Complete::tty_raw_noecho;
+ undef $Term::Complete::stty;
+
+ *complete = \$Term::Complete::complete;
+
+ my $in = tie *STDIN, 'FakeIn', "fro\t";
+ my $out = tie *STDOUT, 'FakeOut';
+ my @words = ( 'frobnitz', 'frobozz', 'frostychocolatemilkshakes' );
+
+ Complete('', \@words);
+ my $data = get_expected('fro', @words);
+
+ # there should be an \a after our word
+ like( $$out, qr/fro\a/, 'found bell character' );
+
+ # now remove the \a -- there should be only one
+ is( $out->scrub(), 1, '(single) bell removed');
+
+ # 'fro' should match all three words
+ like( $$out, qr/$data/, 'all three words possible' );
+ $out->clear();
+
+ # should only find 'frobnitz' and 'frobozz'
+ $in->add('frob');
+ Complete('', @words);
+ $out->scrub();
+ is( $$out, get_expected('frob', 'frobnitz', 'frobozz'), 'expected frob*' );
+ $out->clear();
+
+ # should only do 'frobozz'
+ $in->add('frobo');
+ Complete('', @words);
+ $out->scrub();
+ is( $$out, get_expected( 'frobo', 'frobozz' ), 'only frobozz possible' );
+ $out->clear();
+
+ # change the completion character
+ $complete = "!";
+ $in->add('frobn');
+ Complete('prompt:', @words);
+ $out->scrub();
+ like( $$out, qr/prompt:frobn/, 'prompt is okay' );
+
+ # now remove the prompt and we should be okay
+ $$out =~ s/prompt://g;
+ is( $$out, get_expected('frobn', 'frobnitz' ), 'works with new $complete' );
+
+} # end of SKIP, end of tests
+
+# easier than matching space characters
+sub get_expected {
+ my $word = shift;
+ return join('.', $word, @_, $word, '.');
+}
+
+package FakeIn;
+
+sub TIEHANDLE {
+ my ($class, $text) = @_;
+ $text .= "$main::complete\025";
+ bless(\$text, $class);
+}
+
+sub add {
+ my ($self, $text) = @_;
+ $$self = $text . "$main::complete\025";
+}
+
+sub GETC {
+ my $self = shift;
+ return length $$self ? substr($$self, 0, 1, '') : "\r";
+}
+
+package FakeOut;
+
+sub TIEHANDLE {
+ bless(\(my $text), $_[0]);
+}
+
+sub clear {
+ ${ $_[0] } = '';
+}
+
+# remove the bell character
+sub scrub {
+ ${ $_[0] } =~ tr/\a//d;
+}
+
+# must shift off self
+sub PRINT {
+ my $self = shift;
+ ($$self .= join('', @_)) =~ s/\s+/./gm;
+}
Added: vendor/perl/dist/dist/Term-ReadLine/lib/Term/ReadLine.pm
===================================================================
--- vendor/perl/dist/dist/Term-ReadLine/lib/Term/ReadLine.pm (rev 0)
+++ vendor/perl/dist/dist/Term-ReadLine/lib/Term/ReadLine.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,479 @@
+=head1 NAME
+
+Term::ReadLine - Perl interface to various C<readline> packages.
+If no real package is found, substitutes stubs instead of basic functions.
+
+=head1 SYNOPSIS
+
+ use Term::ReadLine;
+ my $term = Term::ReadLine->new('Simple Perl calc');
+ my $prompt = "Enter your arithmetic expression: ";
+ my $OUT = $term->OUT || \*STDOUT;
+ while ( defined ($_ = $term->readline($prompt)) ) {
+ my $res = eval($_);
+ warn $@ if $@;
+ print $OUT $res, "\n" unless $@;
+ $term->addhistory($_) if /\S/;
+ }
+
+=head1 DESCRIPTION
+
+This package is just a front end to some other packages. It's a stub to
+set up a common interface to the various ReadLine implementations found on
+CPAN (under the C<Term::ReadLine::*> namespace).
+
+=head1 Minimal set of supported functions
+
+All the supported functions should be called as methods, i.e., either as
+
+ $term = Term::ReadLine->new('name');
+
+or as
+
+ $term->addhistory('row');
+
+where $term is a return value of Term::ReadLine-E<gt>new().
+
+=over 12
+
+=item C<ReadLine>
+
+returns the actual package that executes the commands. Among possible
+values are C<Term::ReadLine::Gnu>, C<Term::ReadLine::Perl>,
+C<Term::ReadLine::Stub>.
+
+=item C<new>
+
+returns the handle for subsequent calls to following
+functions. Argument is the name of the application. Optionally can be
+followed by two arguments for C<IN> and C<OUT> filehandles. These
+arguments should be globs.
+
+=item C<readline>
+
+gets an input line, I<possibly> with actual C<readline>
+support. Trailing newline is removed. Returns C<undef> on C<EOF>.
+
+=item C<addhistory>
+
+adds the line to the history of input, from where it can be used if
+the actual C<readline> is present.
+
+=item C<IN>, C<OUT>
+
+return the filehandles for input and output or C<undef> if C<readline>
+input and output cannot be used for Perl.
+
+=item C<MinLine>
+
+If argument is specified, it is an advice on minimal size of line to
+be included into history. C<undef> means do not include anything into
+history. Returns the old value.
+
+=item C<findConsole>
+
+returns an array with two strings that give most appropriate names for
+files for input and output using conventions C<"E<lt>$in">, C<"E<gt>out">.
+
+=item Attribs
+
+returns a reference to a hash which describes internal configuration
+of the package. Names of keys in this hash conform to standard
+conventions with the leading C<rl_> stripped.
+
+=item C<Features>
+
+Returns a reference to a hash with keys being features present in
+current implementation. Several optional features are used in the
+minimal interface: C<appname> should be present if the first argument
+to C<new> is recognized, and C<minline> should be present if
+C<MinLine> method is not dummy. C<autohistory> should be present if
+lines are put into history automatically (maybe subject to
+C<MinLine>), and C<addhistory> if C<addhistory> method is not dummy.
+
+If C<Features> method reports a feature C<attribs> as present, the
+method C<Attribs> is not dummy.
+
+=back
+
+=head1 Additional supported functions
+
+Actually C<Term::ReadLine> can use some other package, that will
+support a richer set of commands.
+
+All these commands are callable via method interface and have names
+which conform to standard conventions with the leading C<rl_> stripped.
+
+The stub package included with the perl distribution allows some
+additional methods:
+
+=over 12
+
+=item C<tkRunning>
+
+makes Tk event loop run when waiting for user input (i.e., during
+C<readline> method).
+
+=item C<event_loop>
+
+Registers call-backs to wait for user input (i.e., during C<readline>
+method). This supersedes tkRunning.
+
+The first call-back registered is the call back for waiting. It is
+expected that the callback will call the current event loop until
+there is something waiting to get on the input filehandle. The parameter
+passed in is the return value of the second call back.
+
+The second call-back registered is the call back for registration. The
+input filehandle (often STDIN, but not necessarily) will be passed in.
+
+For example, with AnyEvent:
+
+ $term->event_loop(sub {
+ my $data = shift;
+ $data->[1] = AE::cv();
+ $data->[1]->recv();
+ }, sub {
+ my $fh = shift;
+ my $data = [];
+ $data->[0] = AE::io($fh, 0, sub { $data->[1]->send() });
+ $data;
+ });
+
+The second call-back is optional if the call back is registered prior to
+the call to $term-E<gt>readline.
+
+Deregistration is done in this case by calling event_loop with C<undef>
+as its parameter:
+
+ $term->event_loop(undef);
+
+This will cause the data array ref to be removed, allowing normal garbage
+collection to clean it up. With AnyEvent, that will cause $data->[0] to
+be cleaned up, and AnyEvent will automatically cancel the watcher at that
+time. If another loop requires more than that to clean up a file watcher,
+that will be up to the caller to handle.
+
+=item C<ornaments>
+
+makes the command line stand out by using termcap data. The argument
+to C<ornaments> should be 0, 1, or a string of a form
+C<"aa,bb,cc,dd">. Four components of this string should be names of
+I<terminal capacities>, first two will be issued to make the prompt
+standout, last two to make the input line standout.
+
+=item C<newTTY>
+
+takes two arguments which are input filehandle and output filehandle.
+Switches to use these filehandles.
+
+=back
+
+One can check whether the currently loaded ReadLine package supports
+these methods by checking for corresponding C<Features>.
+
+=head1 EXPORTS
+
+None
+
+=head1 ENVIRONMENT
+
+The environment variable C<PERL_RL> governs which ReadLine clone is
+loaded. If the value is false, a dummy interface is used. If the value
+is true, it should be tail of the name of the package to use, such as
+C<Perl> or C<Gnu>.
+
+As a special case, if the value of this variable is space-separated,
+the tail might be used to disable the ornaments by setting the tail to
+be C<o=0> or C<ornaments=0>. The head should be as described above, say
+
+If the variable is not set, or if the head of space-separated list is
+empty, the best available package is loaded.
+
+ export "PERL_RL=Perl o=0" # Use Perl ReadLine sans ornaments
+ export "PERL_RL= o=0" # Use best available ReadLine sans ornaments
+
+(Note that processing of C<PERL_RL> for ornaments is in the discretion of the
+particular used C<Term::ReadLine::*> package).
+
+=cut
+
+use strict;
+
+package Term::ReadLine::Stub;
+our @ISA = qw'Term::ReadLine::Tk Term::ReadLine::TermCap';
+
+$DB::emacs = $DB::emacs; # To peacify -w
+our @rl_term_set;
+*rl_term_set = \@Term::ReadLine::TermCap::rl_term_set;
+
+sub PERL_UNICODE_STDIN () { 0x0001 }
+
+sub ReadLine {'Term::ReadLine::Stub'}
+sub readline {
+ my $self = shift;
+ my ($in,$out,$str) = @$self;
+ my $prompt = shift;
+ print $out $rl_term_set[0], $prompt, $rl_term_set[1], $rl_term_set[2];
+ $self->register_Tk
+ if not $Term::ReadLine::registered and $Term::ReadLine::toloop;
+ #$str = scalar <$in>;
+ $str = $self->get_line;
+ utf8::upgrade($str)
+ if (${^UNICODE} & PERL_UNICODE_STDIN || defined ${^ENCODING}) &&
+ utf8::valid($str);
+ print $out $rl_term_set[3];
+ # bug in 5.000: chomping empty string creats length -1:
+ chomp $str if defined $str;
+ $str;
+}
+sub addhistory {}
+
+sub findConsole {
+ my $console;
+ my $consoleOUT;
+
+ if (-e "/dev/tty" and $^O ne 'MSWin32') {
+ $console = "/dev/tty";
+ } elsif (-e "con" or $^O eq 'MSWin32' or $^O eq 'msys') {
+ $console = 'CONIN$';
+ $consoleOUT = 'CONOUT$';
+ } elsif ($^O eq 'VMS') {
+ $console = "sys\$command";
+ } elsif ($^O eq 'os2' && !$DB::emacs) {
+ $console = "/dev/con";
+ } else {
+ $console = undef;
+ }
+
+ $consoleOUT = $console unless defined $consoleOUT;
+ $console = "&STDIN" unless defined $console;
+ if ($console eq "/dev/tty" && !open(my $fh, "<", $console)) {
+ $console = "&STDIN";
+ undef($consoleOUT);
+ }
+ if (!defined $consoleOUT) {
+ $consoleOUT = defined fileno(STDERR) && $^O ne 'MSWin32' ? "&STDERR" : "&STDOUT";
+ }
+ ($console,$consoleOUT);
+}
+
+sub new {
+ die "method new called with wrong number of arguments"
+ unless @_==2 or @_==4;
+ #local (*FIN, *FOUT);
+ my ($FIN, $FOUT, $ret);
+ if (@_==2) {
+ my($console, $consoleOUT) = $_[0]->findConsole;
+
+
+ # the Windows CONIN$ needs GENERIC_WRITE mode to allow
+ # a SetConsoleMode() if we end up using Term::ReadKey
+ open FIN, ( $^O eq 'MSWin32' && $console eq 'CONIN$' ) ? "+<$console" :
+ "<$console";
+ open FOUT,">$consoleOUT";
+
+ #OUT->autoflush(1); # Conflicts with debugger?
+ my $sel = select(FOUT);
+ $| = 1; # for DB::OUT
+ select($sel);
+ $ret = bless [\*FIN, \*FOUT];
+ } else { # Filehandles supplied
+ $FIN = $_[2]; $FOUT = $_[3];
+ #OUT->autoflush(1); # Conflicts with debugger?
+ my $sel = select($FOUT);
+ $| = 1; # for DB::OUT
+ select($sel);
+ $ret = bless [$FIN, $FOUT];
+ }
+ if ($ret->Features->{ornaments}
+ and not ($ENV{PERL_RL} and $ENV{PERL_RL} =~ /\bo\w*=0/)) {
+ local $Term::ReadLine::termcap_nowarn = 1;
+ $ret->ornaments(1);
+ }
+ return $ret;
+}
+
+sub newTTY {
+ my ($self, $in, $out) = @_;
+ $self->[0] = $in;
+ $self->[1] = $out;
+ my $sel = select($out);
+ $| = 1; # for DB::OUT
+ select($sel);
+}
+
+sub IN { shift->[0] }
+sub OUT { shift->[1] }
+sub MinLine { undef }
+sub Attribs { {} }
+
+my %features = (tkRunning => 1, ornaments => 1, 'newTTY' => 1);
+sub Features { \%features }
+
+#sub get_line {
+# my $self = shift;
+# my $in = $self->IN;
+# local ($/) = "\n";
+# return scalar <$in>;
+#}
+
+package Term::ReadLine; # So late to allow the above code be defined?
+
+our $VERSION = '1.12';
+
+my ($which) = exists $ENV{PERL_RL} ? split /\s+/, $ENV{PERL_RL} : undef;
+if ($which) {
+ if ($which =~ /\bgnu\b/i){
+ eval "use Term::ReadLine::Gnu;";
+ } elsif ($which =~ /\bperl\b/i) {
+ eval "use Term::ReadLine::Perl;";
+ } elsif ($which =~ /^(Stub|TermCap|Tk)$/) {
+ # it is already in memory to avoid false exception as seen in:
+ # PERL_RL=Stub perl -e'$SIG{__DIE__} = sub { print @_ }; require Term::ReadLine'
+ } else {
+ eval "use Term::ReadLine::$which;";
+ }
+} elsif (defined $which and $which ne '') { # Defined but false
+ # Do nothing fancy
+} else {
+ eval "use Term::ReadLine::Gnu; 1" or eval "use Term::ReadLine::Perl; 1";
+}
+
+#require FileHandle;
+
+# To make possible switch off RL in debugger: (Not needed, work done
+# in debugger).
+our @ISA;
+if (defined &Term::ReadLine::Gnu::readline) {
+ @ISA = qw(Term::ReadLine::Gnu Term::ReadLine::Stub);
+} elsif (defined &Term::ReadLine::Perl::readline) {
+ @ISA = qw(Term::ReadLine::Perl Term::ReadLine::Stub);
+} elsif (defined $which && defined &{"Term::ReadLine::$which\::readline"}) {
+ @ISA = "Term::ReadLine::$which";
+} else {
+ @ISA = qw(Term::ReadLine::Stub);
+}
+
+package Term::ReadLine::TermCap;
+
+# Prompt-start, prompt-end, command-line-start, command-line-end
+# -- zero-width beautifies to emit around prompt and the command line.
+our @rl_term_set = ("","","","");
+# string encoded:
+our $rl_term_set = ',,,';
+
+our $terminal;
+sub LoadTermCap {
+ return if defined $terminal;
+
+ require Term::Cap;
+ $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning.
+}
+
+sub ornaments {
+ shift;
+ return $rl_term_set unless @_;
+ $rl_term_set = shift;
+ $rl_term_set ||= ',,,';
+ $rl_term_set = 'us,ue,md,me' if $rl_term_set eq '1';
+ my @ts = split /,/, $rl_term_set, 4;
+ eval { LoadTermCap };
+ unless (defined $terminal) {
+ warn("Cannot find termcap: $@\n") unless $Term::ReadLine::termcap_nowarn;
+ $rl_term_set = ',,,';
+ return;
+ }
+ @rl_term_set = map {$_ ? $terminal->Tputs($_,1) || '' : ''} @ts;
+ return $rl_term_set;
+}
+
+
+package Term::ReadLine::Tk;
+
+# This package inserts a Tk->fileevent() before the diamond operator.
+# The Tk watcher dispatches Tk events until the filehandle returned by
+# the$term->IN() accessor becomes ready for reading. It's assumed
+# that the diamond operator will return a line of input immediately at
+# that point.
+
+my ($giveup);
+
+# maybe in the future the Tk-specific aspects will be removed.
+sub Tk_loop{
+ if (ref $Term::ReadLine::toloop)
+ {
+ $Term::ReadLine::toloop->[0]->($Term::ReadLine::toloop->[2]);
+ }
+ else
+ {
+ Tk::DoOneEvent(0) until $giveup;
+ $giveup = 0;
+ }
+};
+
+sub register_Tk {
+ my $self = shift;
+ unless ($Term::ReadLine::registered++)
+ {
+ if (ref $Term::ReadLine::toloop)
+ {
+ $Term::ReadLine::toloop->[2] = $Term::ReadLine::toloop->[1]->($self->IN) if $Term::ReadLine::toloop->[1];
+ }
+ else
+ {
+ Tk->fileevent($self->IN,'readable',sub { $giveup = 1});
+ }
+ }
+};
+
+sub tkRunning {
+ $Term::ReadLine::toloop = $_[1] if @_ > 1;
+ $Term::ReadLine::toloop;
+}
+
+sub event_loop {
+ shift;
+
+ # T::RL::Gnu and T::RL::Perl check that this exists, if not,
+ # it doesn't call the loop. Those modules will need to be
+ # fixed before this can be removed.
+ if (not defined &Tk::DoOneEvent)
+ {
+ *Tk::DoOneEvent = sub {
+ die "what?"; # this shouldn't be called.
+ }
+ }
+
+ # store the callback in toloop, again so that other modules will
+ # recognise it and call us for the loop.
+ $Term::ReadLine::toloop = [ @_ ] if @_ > 0; # 0 because we shifted off $self.
+ $Term::ReadLine::toloop;
+}
+
+sub PERL_UNICODE_STDIN () { 0x0001 }
+
+sub get_line {
+ my $self = shift;
+ my ($in,$out,$str) = @$self;
+
+ if ($Term::ReadLine::toloop) {
+ $self->register_Tk if not $Term::ReadLine::registered;
+ $self->Tk_loop;
+ }
+
+ local ($/) = "\n";
+ $str = <$in>;
+
+ utf8::upgrade($str)
+ if (${^UNICODE} & PERL_UNICODE_STDIN || defined ${^ENCODING}) &&
+ utf8::valid($str);
+ print $out $rl_term_set[3];
+ # bug in 5.000: chomping empty string creats length -1:
+ chomp $str if defined $str;
+
+ $str;
+}
+
+1;
+
Added: vendor/perl/dist/dist/Term-ReadLine/t/AE.t
===================================================================
--- vendor/perl/dist/dist/Term-ReadLine/t/AE.t (rev 0)
+++ vendor/perl/dist/dist/Term-ReadLine/t/AE.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,43 @@
+#!perl
+
+use Test::More;
+
+eval "use AnyEvent; 1" or
+ plan skip_all => "AnyEvent is not installed.";
+
+# seeing as the entire point of this test is to test the event handler,
+# we need to mock as little as possible. To keep things tightly controlled,
+# we'll use the Stub directly.
+BEGIN {
+ $ENV{PERL_RL} = 'Stub o=0';
+}
+plan tests => 3;
+
+# need to delay this so that AE is loaded first.
+require Term::ReadLine;
+use File::Spec;
+
+my $t = Term::ReadLine->new('AE');
+ok($t, "Created object");
+is($t->ReadLine, 'Term::ReadLine::Stub', 'Correct type');
+
+my ($cv, $fe);
+$t->event_loop(
+ sub {
+ $cv = AE::cv();
+ $cv->recv();
+ }, sub {
+ my $fh = shift;
+ $fe ||= AE::io($fh, 0, sub { $cv->send() });
+ }
+ );
+
+my $text = 'some text';
+my $T = $text . "\n";
+my $w = AE::timer(0,1,sub {
+pass("Event loop called");
+exit 0;
+});
+
+my $result = $t->readline('Do not press enter>');
+fail("Should not get here.");
Added: vendor/perl/dist/dist/Term-ReadLine/t/AETk.t
===================================================================
(Binary files differ)
Index: vendor/perl/dist/dist/Term-ReadLine/t/AETk.t
===================================================================
--- vendor/perl/dist/dist/Term-ReadLine/t/AETk.t 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/dist/Term-ReadLine/t/AETk.t 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/dist/Term-ReadLine/t/AETk.t
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: vendor/perl/dist/dist/Term-ReadLine/t/ReadLine.t
===================================================================
--- vendor/perl/dist/dist/Term-ReadLine/t/ReadLine.t (rev 0)
+++ vendor/perl/dist/dist/Term-ReadLine/t/ReadLine.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,32 @@
+#!./perl -w
+use strict;
+
+package Term::ReadLine::Mock;
+our @ISA = 'Term::ReadLine::Stub';
+sub ReadLine {'Term::ReadLine::Mock'};
+sub readline { "a line" }
+sub new { bless {} }
+
+package main;
+
+use Test::More tests => 15;
+
+BEGIN {
+ $ENV{PERL_RL} = 'Mock'; # test against our instrumented class
+ use_ok('Term::ReadLine');
+}
+
+my $t = new Term::ReadLine 'test term::readline';
+
+ok($t, "made something");
+
+isa_ok($t, 'Term::ReadLine::Mock');
+
+for my $method (qw( ReadLine readline addhistory IN OUT MinLine
+ findConsole Attribs Features new ) ) {
+ can_ok($t, $method);
+}
+
+is($t->ReadLine, 'Term::ReadLine::Mock', "\$object->ReadLine");
+is($t->readline, 'a line', "\$object->readline");
+
Added: vendor/perl/dist/dist/Term-ReadLine/t/Tk.t
===================================================================
--- vendor/perl/dist/dist/Term-ReadLine/t/Tk.t (rev 0)
+++ vendor/perl/dist/dist/Term-ReadLine/t/Tk.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,42 @@
+#!perl
+
+use Test::More;
+
+eval "use Tk; 1" or
+ plan skip_all => "Tk is not installed.";
+
+# seeing as the entire point of this test is to test the event handler,
+# we need to mock as little as possible. To keep things tightly controlled,
+# we'll use the Stub directly.
+BEGIN {
+ $ENV{PERL_RL} = 'Stub o=0';
+}
+
+my $mw;
+eval {
+ use File::Spec;
+ $mw = MainWindow->new(); $mw->withdraw();
+ 1;
+} or plan skip_all => "Tk can't start. DISPLAY not set?";
+
+# need to delay this so that Tk is loaded first.
+require Term::ReadLine;
+
+plan tests => 3;
+
+my $t = Term::ReadLine->new('Tk');
+ok($t, "Created object");
+is($t->ReadLine, 'Term::ReadLine::Stub', 'Correct type');
+$t->tkRunning(1);
+
+my $text = 'some text';
+my $T = $text . "\n";
+
+my $w = Tk::after($mw,0,
+ sub {
+ pass("Event loop called");
+ exit 0;
+ });
+
+my $result = $t->readline('Do not press enter>');
+fail("Should not get here.");
Added: vendor/perl/dist/dist/Text-Abbrev/lib/Text/Abbrev.pm
===================================================================
--- vendor/perl/dist/dist/Text-Abbrev/lib/Text/Abbrev.pm (rev 0)
+++ vendor/perl/dist/dist/Text-Abbrev/lib/Text/Abbrev.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,84 @@
+package Text::Abbrev;
+require 5.005; # Probably works on earlier versions too.
+require Exporter;
+
+our $VERSION = '1.02';
+
+=head1 NAME
+
+Text::Abbrev - abbrev - create an abbreviation table from a list
+
+=head1 SYNOPSIS
+
+ use Text::Abbrev;
+ abbrev $hashref, LIST
+
+
+=head1 DESCRIPTION
+
+Stores all unambiguous truncations of each element of LIST
+as keys in the associative array referenced by C<$hashref>.
+The values are the original list elements.
+
+=head1 EXAMPLE
+
+ $hashref = abbrev qw(list edit send abort gripe);
+
+ %hash = abbrev qw(list edit send abort gripe);
+
+ abbrev $hashref, qw(list edit send abort gripe);
+
+ abbrev(*hash, qw(list edit send abort gripe));
+
+=cut
+
+ at ISA = qw(Exporter);
+ at EXPORT = qw(abbrev);
+
+# Usage:
+# abbrev \%foo, LIST;
+# ...
+# $long = $foo{$short};
+
+sub abbrev {
+ my ($word, $hashref, $glob, %table, $returnvoid);
+
+ @_ or return; # So we don't autovivify onto @_ and trigger warning
+ if (ref($_[0])) { # hash reference preferably
+ $hashref = shift;
+ $returnvoid = 1;
+ } elsif (ref \$_[0] eq 'GLOB') { # is actually a glob (deprecated)
+ $hashref = \%{shift()};
+ $returnvoid = 1;
+ }
+ %{$hashref} = ();
+
+ WORD: foreach $word (@_) {
+ for (my $len = (length $word) - 1; $len > 0; --$len) {
+ my $abbrev = substr($word,0,$len);
+ my $seen = ++$table{$abbrev};
+ if ($seen == 1) { # We're the first word so far to have
+ # this abbreviation.
+ $hashref->{$abbrev} = $word;
+ } elsif ($seen == 2) { # We're the second word to have this
+ # abbreviation, so we can't use it.
+ delete $hashref->{$abbrev};
+ } else { # We're the third word to have this
+ # abbreviation, so skip to the next word.
+ next WORD;
+ }
+ }
+ }
+ # Non-abbreviations always get entered, even if they aren't unique
+ foreach $word (@_) {
+ $hashref->{$word} = $word;
+ }
+ return if $returnvoid;
+ if (wantarray) {
+ %{$hashref};
+ } else {
+ $hashref;
+ }
+}
+
+1;
Added: vendor/perl/dist/dist/Text-Abbrev/t/Abbrev.t
===================================================================
--- vendor/perl/dist/dist/Text-Abbrev/t/Abbrev.t (rev 0)
+++ vendor/perl/dist/dist/Text-Abbrev/t/Abbrev.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!./perl
+
+print "1..8\n";
+
+use Text::Abbrev;
+
+print "ok 1\n";
+
+# old style as reference
+local(%x);
+my @z = qw(list edit send abort gripe listen);
+abbrev(*x, @z);
+my $r = join ':', sort keys %x;
+print "not " if exists $x{'l'} ||
+ exists $x{'li'} ||
+ exists $x{'lis'};
+print "ok 2\n";
+
+print "not " unless $x{'list'} eq 'list' &&
+ $x{'liste'} eq 'listen' &&
+ $x{'listen'} eq 'listen';
+print "ok 3\n";
+
+print "not " unless $x{'a'} eq 'abort' &&
+ $x{'ab'} eq 'abort' &&
+ $x{'abo'} eq 'abort' &&
+ $x{'abor'} eq 'abort' &&
+ $x{'abort'} eq 'abort';
+print "ok 4\n";
+
+my $test = 5;
+
+# wantarray
+my %y = abbrev @z;
+my $s = join ':', sort keys %y;
+print (($r eq $s)?"ok $test\n":"not ok $test\n"); $test++;
+
+my $y = abbrev @z;
+$s = join ':', sort keys %$y;
+print (($r eq $s)?"ok $test\n":"not ok $test\n"); $test++;
+
+%y = ();
+abbrev \%y, @z;
+
+$s = join ':', sort keys %y;
+print (($r eq $s)?"ok $test\n":"not ok $test\n"); $test++;
+
+
+# warnings safe with zero arguments
+my $notok;
+$^W = 1;
+$SIG{__WARN__} = sub { $notok++ };
+abbrev();
+print ($notok ? "not ok $test\n" : "ok $test\n"); $test++;
Added: vendor/perl/dist/dist/Thread-Queue/t/09_ended.t
===================================================================
--- vendor/perl/dist/dist/Thread-Queue/t/09_ended.t (rev 0)
+++ vendor/perl/dist/dist/Thread-Queue/t/09_ended.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,146 @@
+use strict;
+use warnings;
+
+use Config;
+
+BEGIN {
+ if (! $Config{'useithreads'}) {
+ print("1..0 # SKIP Perl not compiled with 'useithreads'\n");
+ exit(0);
+ }
+ if (! $Config{'d_select'}) {
+ print("1..0 # SKIP 'select()' not available for testing\n");
+ exit(0);
+ }
+}
+
+use threads;
+use Thread::Queue;
+
+use Test::More;
+
+my $num_threads = 3;
+my $cycles = 2;
+my $count = 2;
+plan tests => 3*$num_threads*$cycles*$count + 6*$num_threads + 6;
+
+# Test for end() while threads are blocked and no more items in queue
+{
+ my @items = 1..($num_threads*$cycles*$count);
+ my $q = Thread::Queue->new(@items);
+ my $r = Thread::Queue->new();
+
+ my @threads;
+ for my $ii (1..$num_threads) {
+ push @threads, threads->create( sub {
+ # Thread will loop until no more work is coming
+ LOOP:
+ while (my @set = $q->dequeue($count)) {
+ foreach my $item (@set) {
+ last LOOP if (! defined($item));
+ pass("'$item' read from queue in thread $ii");
+ }
+ select(undef, undef, undef, rand(1));
+ $r->enqueue($ii);
+ }
+ pass("Thread $ii exiting");
+ });
+ }
+
+ # Make sure there's nothing in the queue and threads are blocking
+ for my $ii (1..($num_threads*$cycles)) {
+ $r->dequeue();
+ }
+ sleep(1);
+ threads->yield();
+
+ is($q->pending(), 0, 'Queue is empty');
+
+ # Signal no more work is coming
+ $q->end();
+
+ is($q->pending(), undef, 'Queue is ended');
+
+ for my $thread (@threads) {
+ $thread->join;
+ pass($thread->tid." joined");
+ }
+}
+
+# Test for end() while threads are blocked and items still remain in queue
+{
+ my @items = 1..($num_threads*$cycles*$count + 1);
+ my $q = Thread::Queue->new(@items);
+ my $r = Thread::Queue->new();
+
+ my @threads;
+ for my $ii (1..$num_threads) {
+ push @threads, threads->create( sub {
+ # Thread will loop until no more work is coming
+ LOOP:
+ while (my @set = $q->dequeue($count)) {
+ foreach my $item (@set) {
+ last LOOP if (! defined($item));
+ pass("'$item' read from queue in thread $ii");
+ }
+ select(undef, undef, undef, rand(1));
+ $r->enqueue($ii);
+ }
+ pass("Thread $ii exiting");
+ });
+ }
+
+ # Make sure there's nothing in the queue and threads are blocking
+ for my $ii (1..($num_threads*$cycles)) {
+ $r->dequeue();
+ }
+ sleep(1);
+ threads->yield();
+
+ is($q->pending(), 1, 'Queue has one left');
+
+ # Signal no more work is coming
+ $q->end();
+
+ for my $thread (@threads) {
+ $thread->join;
+ pass($thread->tid." joined");
+ }
+
+ is($q->pending(), undef, 'Queue is ended');
+}
+
+# Test of end() send while items in queue
+{
+ my @items = 1..($num_threads*$cycles*$count + 1);
+ my $q = Thread::Queue->new(@items);
+
+ my @threads;
+ for my $ii (1..$num_threads) {
+ push @threads, threads->create( sub {
+ # Thread will loop until no more work is coming
+ LOOP:
+ while (my @set = $q->dequeue($count)) {
+ foreach my $item (@set) {
+ last LOOP if (! defined($item));
+ pass("'$item' read from queue in thread $ii");
+ }
+ select(undef, undef, undef, rand(1));
+ }
+ pass("Thread $ii exiting");
+ });
+ }
+
+ # Signal no more work is coming to the blocked threads, they
+ # should unblock.
+ $q->end();
+
+ for my $thread (@threads) {
+ $thread->join;
+ pass($thread->tid." joined");
+ }
+}
+
+exit(0);
+
+# EOF
Added: vendor/perl/dist/dist/Thread-Queue/t/10_timed.t
===================================================================
--- vendor/perl/dist/dist/Thread-Queue/t/10_timed.t (rev 0)
+++ vendor/perl/dist/dist/Thread-Queue/t/10_timed.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,66 @@
+use strict;
+use warnings;
+
+BEGIN {
+ use Config;
+ if (! $Config{'useithreads'}) {
+ print("1..0 # SKIP Perl not compiled with 'useithreads'\n");
+ exit(0);
+ }
+}
+
+use threads;
+use Thread::Queue;
+
+if ($] == 5.008) {
+ require 't/test.pl'; # Test::More work-alike for Perl 5.8.0
+} else {
+ require Test::More;
+}
+Test::More->import();
+plan('tests' => 19);
+
+### ->dequeue_timed(TIMEOUT, COUNT) test ###
+
+my $q = Thread::Queue->new();
+ok($q, 'New queue');
+
+my @items = qw/foo bar baz qux exit/;
+$q->enqueue(@items);
+is($q->pending(), scalar(@items), 'Queue count');
+
+threads->create(sub {
+ is($q->pending(), scalar(@items), 'Queue count in thread');
+ while (my @el = $q->dequeue_timed(2.5, 2)) {
+ is($el[0], shift(@items), "Thread got $el[0]");
+ if ($el[0] eq 'exit') {
+ is(scalar(@el), 1, 'Thread to exit');
+ } else {
+ is($el[1], shift(@items), "Thread got $el[1]");
+ }
+ }
+ is($q->pending(), 0, 'Empty queue');
+ $q->enqueue('done');
+})->join();
+
+is($q->pending(), 1, 'Queue count after thread');
+is($q->dequeue(), 'done', 'Thread reported done');
+is($q->pending(), 0, 'Empty queue');
+
+### ->dequeue_timed(TIMEOUT) test on empty queue ###
+
+threads->create(sub {
+ is($q->pending(), 0, 'Empty queue in thread');
+ my @el = $q->dequeue_timed(1.5);
+ is($el[0], undef, "Thread got no items");
+ is($q->pending(), 0, 'Empty queue in thread');
+ $q->enqueue('done');
+})->join();
+
+is($q->pending(), 1, 'Queue count after thread');
+is($q->dequeue(), 'done', 'Thread reported done');
+is($q->pending(), 0, 'Empty queue');
+
+exit(0);
+
+# EOF
Added: vendor/perl/dist/dist/Tie-File/lib/Tie/File.pm
===================================================================
--- vendor/perl/dist/dist/Tie-File/lib/Tie/File.pm (rev 0)
+++ vendor/perl/dist/dist/Tie-File/lib/Tie/File.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2633 @@
+
+package Tie::File;
+require 5.005;
+use Carp ':DEFAULT', 'confess';
+use POSIX 'SEEK_SET';
+use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY';
+sub O_ACCMODE () { O_RDONLY | O_RDWR | O_WRONLY }
+
+
+$VERSION = "0.99";
+my $DEFAULT_MEMORY_SIZE = 1<<21; # 2 megabytes
+my $DEFAULT_AUTODEFER_THRESHHOLD = 3; # 3 records
+my $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD = 65536; # 16 disk blocksful
+
+my %good_opt = map {$_ => 1, "-$_" => 1}
+ qw(memory dw_size mode recsep discipline
+ autodefer autochomp autodefer_threshhold concurrent);
+
+sub TIEARRAY {
+ if (@_ % 2 != 0) {
+ croak "usage: tie \@array, $_[0], filename, [option => value]...";
+ }
+ my ($pack, $file, %opts) = @_;
+
+ # transform '-foo' keys into 'foo' keys
+ for my $key (keys %opts) {
+ unless ($good_opt{$key}) {
+ croak("$pack: Unrecognized option '$key'\n");
+ }
+ my $okey = $key;
+ if ($key =~ s/^-+//) {
+ $opts{$key} = delete $opts{$okey};
+ }
+ }
+
+ if ($opts{concurrent}) {
+ croak("$pack: concurrent access not supported yet\n");
+ }
+
+ unless (defined $opts{memory}) {
+ # default is the larger of the default cache size and the
+ # deferred-write buffer size (if specified)
+ $opts{memory} = $DEFAULT_MEMORY_SIZE;
+ $opts{memory} = $opts{dw_size}
+ if defined $opts{dw_size} && $opts{dw_size} > $DEFAULT_MEMORY_SIZE;
+ # Dora Winifred Read
+ }
+ $opts{dw_size} = $opts{memory} unless defined $opts{dw_size};
+ if ($opts{dw_size} > $opts{memory}) {
+ croak("$pack: dw_size may not be larger than total memory allocation\n");
+ }
+ # are we in deferred-write mode?
+ $opts{defer} = 0 unless defined $opts{defer};
+ $opts{deferred} = {}; # no records are presently deferred
+ $opts{deferred_s} = 0; # count of total bytes in ->{deferred}
+ $opts{deferred_max} = -1; # empty
+
+ # What's a good way to arrange that this class can be overridden?
+ $opts{cache} = Tie::File::Cache->new($opts{memory});
+
+ # autodeferment is enabled by default
+ $opts{autodefer} = 1 unless defined $opts{autodefer};
+ $opts{autodeferring} = 0; # but is not initially active
+ $opts{ad_history} = [];
+ $opts{autodefer_threshhold} = $DEFAULT_AUTODEFER_THRESHHOLD
+ unless defined $opts{autodefer_threshhold};
+ $opts{autodefer_filelen_threshhold} = $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD
+ unless defined $opts{autodefer_filelen_threshhold};
+
+ $opts{offsets} = [0];
+ $opts{filename} = $file;
+ unless (defined $opts{recsep}) {
+ $opts{recsep} = _default_recsep();
+ }
+ $opts{recseplen} = length($opts{recsep});
+ if ($opts{recseplen} == 0) {
+ croak "Empty record separator not supported by $pack";
+ }
+
+ $opts{autochomp} = 1 unless defined $opts{autochomp};
+
+ $opts{mode} = O_CREAT|O_RDWR unless defined $opts{mode};
+ $opts{rdonly} = (($opts{mode} & O_ACCMODE) == O_RDONLY);
+ $opts{sawlastrec} = undef;
+
+ my $fh;
+
+ if (UNIVERSAL::isa($file, 'GLOB')) {
+ # We use 1 here on the theory that some systems
+ # may not indicate failure if we use 0.
+ # MSWin32 does not indicate failure with 0, but I don't know if
+ # it will indicate failure with 1 or not.
+ unless (seek $file, 1, SEEK_SET) {
+ croak "$pack: your filehandle does not appear to be seekable";
+ }
+ seek $file, 0, SEEK_SET; # put it back
+ $fh = $file; # setting binmode is the user's problem
+ } elsif (ref $file) {
+ croak "usage: tie \@array, $pack, filename, [option => value]...";
+ } else {
+ # $fh = \do { local *FH }; # XXX this is buggy
+ if ($] < 5.006) {
+ # perl 5.005 and earlier don't autovivify filehandles
+ require Symbol;
+ $fh = Symbol::gensym();
+ }
+ sysopen $fh, $file, $opts{mode}, 0666 or return;
+ binmode $fh;
+ ++$opts{ourfh};
+ }
+ { my $ofh = select $fh; $| = 1; select $ofh } # autoflush on write
+ if (defined $opts{discipline} && $] >= 5.006) {
+ # This avoids a compile-time warning under 5.005
+ eval 'binmode($fh, $opts{discipline})';
+ croak $@ if $@ =~ /unknown discipline/i;
+ die if $@;
+ }
+ $opts{fh} = $fh;
+
+ bless \%opts => $pack;
+}
+
+sub FETCH {
+ my ($self, $n) = @_;
+ my $rec;
+
+ # check the defer buffer
+ $rec = $self->{deferred}{$n} if exists $self->{deferred}{$n};
+ $rec = $self->_fetch($n) unless defined $rec;
+
+ # inlined _chomp1
+ substr($rec, - $self->{recseplen}) = ""
+ if defined $rec && $self->{autochomp};
+ $rec;
+}
+
+# Chomp many records in-place; return nothing useful
+sub _chomp {
+ my $self = shift;
+ return unless $self->{autochomp};
+ if ($self->{autochomp}) {
+ for (@_) {
+ next unless defined;
+ substr($_, - $self->{recseplen}) = "";
+ }
+ }
+}
+
+# Chomp one record in-place; return modified record
+sub _chomp1 {
+ my ($self, $rec) = @_;
+ return $rec unless $self->{autochomp};
+ return unless defined $rec;
+ substr($rec, - $self->{recseplen}) = "";
+ $rec;
+}
+
+sub _fetch {
+ my ($self, $n) = @_;
+
+ # check the record cache
+ { my $cached = $self->{cache}->lookup($n);
+ return $cached if defined $cached;
+ }
+
+ if ($#{$self->{offsets}} < $n) {
+ return if $self->{eof}; # request for record beyond end of file
+ my $o = $self->_fill_offsets_to($n);
+ # If it's still undefined, there is no such record, so return 'undef'
+ return unless defined $o;
+ }
+
+ my $fh = $self->{FH};
+ $self->_seek($n); # we can do this now that offsets is populated
+ my $rec = $self->_read_record;
+
+# If we happen to have just read the first record, check to see if
+# the length of the record matches what 'tell' says. If not, Tie::File
+# won't work, and should drop dead.
+#
+# if ($n == 0 && defined($rec) && tell($self->{fh}) != length($rec)) {
+# if (defined $self->{discipline}) {
+# croak "I/O discipline $self->{discipline} not supported";
+# } else {
+# croak "File encoding not supported";
+# }
+# }
+
+ $self->{cache}->insert($n, $rec) if defined $rec && not $self->{flushing};
+ $rec;
+}
+
+sub STORE {
+ my ($self, $n, $rec) = @_;
+ die "STORE called from _check_integrity!" if $DIAGNOSTIC;
+
+ $self->_fixrecs($rec);
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history($n);
+ }
+
+ return $self->_store_deferred($n, $rec) if $self->_is_deferring;
+
+
+ # We need this to decide whether the new record will fit
+ # It incidentally populates the offsets table
+ # Note we have to do this before we alter the cache
+ # 20020324 Wait, but this DOES alter the cache. TODO BUG?
+ my $oldrec = $self->_fetch($n);
+
+ if (not defined $oldrec) {
+ # We're storing a record beyond the end of the file
+ $self->_extend_file_to($n+1);
+ $oldrec = $self->{recsep};
+ }
+# return if $oldrec eq $rec; # don't bother
+ my $len_diff = length($rec) - length($oldrec);
+
+ # length($oldrec) here is not consistent with text mode TODO XXX BUG
+ $self->_mtwrite($rec, $self->{offsets}[$n], length($oldrec));
+ $self->_oadjust([$n, 1, $rec]);
+ $self->{cache}->update($n, $rec);
+}
+
+sub _store_deferred {
+ my ($self, $n, $rec) = @_;
+ $self->{cache}->remove($n);
+ my $old_deferred = $self->{deferred}{$n};
+
+ if (defined $self->{deferred_max} && $n > $self->{deferred_max}) {
+ $self->{deferred_max} = $n;
+ }
+ $self->{deferred}{$n} = $rec;
+
+ my $len_diff = length($rec);
+ $len_diff -= length($old_deferred) if defined $old_deferred;
+ $self->{deferred_s} += $len_diff;
+ $self->{cache}->adj_limit(-$len_diff);
+ if ($self->{deferred_s} > $self->{dw_size}) {
+ $self->_flush;
+ } elsif ($self->_cache_too_full) {
+ $self->_cache_flush;
+ }
+}
+
+# Remove a single record from the deferred-write buffer without writing it
+# The record need not be present
+sub _delete_deferred {
+ my ($self, $n) = @_;
+ my $rec = delete $self->{deferred}{$n};
+ return unless defined $rec;
+
+ if (defined $self->{deferred_max}
+ && $n == $self->{deferred_max}) {
+ undef $self->{deferred_max};
+ }
+
+ $self->{deferred_s} -= length $rec;
+ $self->{cache}->adj_limit(length $rec);
+}
+
+sub FETCHSIZE {
+ my $self = shift;
+ my $n = $self->{eof} ? $#{$self->{offsets}} : $self->_fill_offsets;
+
+ my $top_deferred = $self->_defer_max;
+ $n = $top_deferred+1 if defined $top_deferred && $n < $top_deferred+1;
+ $n;
+}
+
+sub STORESIZE {
+ my ($self, $len) = @_;
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history('STORESIZE');
+ }
+
+ my $olen = $self->FETCHSIZE;
+ return if $len == $olen; # Woo-hoo!
+
+ # file gets longer
+ if ($len > $olen) {
+ if ($self->_is_deferring) {
+ for ($olen .. $len-1) {
+ $self->_store_deferred($_, $self->{recsep});
+ }
+ } else {
+ $self->_extend_file_to($len);
+ }
+ return;
+ }
+
+ # file gets shorter
+ if ($self->_is_deferring) {
+ # TODO maybe replace this with map-plus-assignment?
+ for (grep $_ >= $len, keys %{$self->{deferred}}) {
+ $self->_delete_deferred($_);
+ }
+ $self->{deferred_max} = $len-1;
+ }
+
+ $self->_seek($len);
+ $self->_chop_file;
+ $#{$self->{offsets}} = $len;
+# $self->{offsets}[0] = 0; # in case we just chopped this
+
+ $self->{cache}->remove(grep $_ >= $len, $self->{cache}->ckeys);
+}
+
+### OPTIMIZE ME
+### It should not be necessary to do FETCHSIZE
+### Just seek to the end of the file.
+sub PUSH {
+ my $self = shift;
+ $self->SPLICE($self->FETCHSIZE, scalar(@_), @_);
+
+ # No need to return:
+ # $self->FETCHSIZE; # because av.c takes care of this for me
+}
+
+sub POP {
+ my $self = shift;
+ my $size = $self->FETCHSIZE;
+ return if $size == 0;
+# print STDERR "# POPPITY POP POP POP\n";
+ scalar $self->SPLICE($size-1, 1);
+}
+
+sub SHIFT {
+ my $self = shift;
+ scalar $self->SPLICE(0, 1);
+}
+
+sub UNSHIFT {
+ my $self = shift;
+ $self->SPLICE(0, 0, @_);
+ # $self->FETCHSIZE; # av.c takes care of this for me
+}
+
+sub CLEAR {
+ my $self = shift;
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history('CLEAR');
+ }
+
+ $self->_seekb(0);
+ $self->_chop_file;
+ $self->{cache}->set_limit($self->{memory});
+ $self->{cache}->empty;
+ @{$self->{offsets}} = (0);
+ %{$self->{deferred}}= ();
+ $self->{deferred_s} = 0;
+ $self->{deferred_max} = -1;
+}
+
+sub EXTEND {
+ my ($self, $n) = @_;
+
+ # No need to pre-extend anything in this case
+ return if $self->_is_deferring;
+
+ $self->_fill_offsets_to($n);
+ $self->_extend_file_to($n);
+}
+
+sub DELETE {
+ my ($self, $n) = @_;
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history('DELETE');
+ }
+
+ my $lastrec = $self->FETCHSIZE-1;
+ my $rec = $self->FETCH($n);
+ $self->_delete_deferred($n) if $self->_is_deferring;
+ if ($n == $lastrec) {
+ $self->_seek($n);
+ $self->_chop_file;
+ $#{$self->{offsets}}--;
+ $self->{cache}->remove($n);
+ # perhaps in this case I should also remove trailing null records?
+ # 20020316
+ # Note that delete @a[-3..-1] deletes the records in the wrong order,
+ # so we only chop the very last one out of the file. We could repair this
+ # by tracking deleted records inside the object.
+ } elsif ($n < $lastrec) {
+ $self->STORE($n, "");
+ }
+ $rec;
+}
+
+sub EXISTS {
+ my ($self, $n) = @_;
+ return 1 if exists $self->{deferred}{$n};
+ $n < $self->FETCHSIZE;
+}
+
+sub SPLICE {
+ my $self = shift;
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history('SPLICE');
+ }
+
+ $self->_flush if $self->_is_deferring; # move this up?
+ if (wantarray) {
+ $self->_chomp(my @a = $self->_splice(@_));
+ @a;
+ } else {
+ $self->_chomp1(scalar $self->_splice(@_));
+ }
+}
+
+sub DESTROY {
+ my $self = shift;
+ $self->flush if $self->_is_deferring;
+ $self->{cache}->delink if defined $self->{cache}; # break circular link
+ if ($self->{fh} and $self->{ourfh}) {
+ delete $self->{ourfh};
+ close delete $self->{fh};
+ }
+}
+
+sub _splice {
+ my ($self, $pos, $nrecs, @data) = @_;
+ my @result;
+
+ $pos = 0 unless defined $pos;
+
+ # Deal with negative and other out-of-range positions
+ # Also set default for $nrecs
+ {
+ my $oldsize = $self->FETCHSIZE;
+ $nrecs = $oldsize unless defined $nrecs;
+ my $oldpos = $pos;
+
+ if ($pos < 0) {
+ $pos += $oldsize;
+ if ($pos < 0) {
+ croak "Modification of non-creatable array value attempted, subscript $oldpos";
+ }
+ }
+
+ if ($pos > $oldsize) {
+ return unless @data;
+ $pos = $oldsize; # This is what perl does for normal arrays
+ }
+
+ # The manual is very unclear here
+ if ($nrecs < 0) {
+ $nrecs = $oldsize - $pos + $nrecs;
+ $nrecs = 0 if $nrecs < 0;
+ }
+
+ # nrecs is too big---it really means "until the end"
+ # 20030507
+ if ($nrecs + $pos > $oldsize) {
+ $nrecs = $oldsize - $pos;
+ }
+ }
+
+ $self->_fixrecs(@data);
+ my $data = join '', @data;
+ my $datalen = length $data;
+ my $oldlen = 0;
+
+ # compute length of data being removed
+ for ($pos .. $pos+$nrecs-1) {
+ last unless defined $self->_fill_offsets_to($_);
+ my $rec = $self->_fetch($_);
+ last unless defined $rec;
+ push @result, $rec;
+
+ # Why don't we just use length($rec) here?
+ # Because that record might have come from the cache. _splice
+ # might have been called to flush out the deferred-write records,
+ # and in this case length($rec) is the length of the record to be
+ # *written*, not the length of the actual record in the file. But
+ # the offsets are still true. 20020322
+ $oldlen += $self->{offsets}[$_+1] - $self->{offsets}[$_]
+ if defined $self->{offsets}[$_+1];
+ }
+ $self->_fill_offsets_to($pos+$nrecs);
+
+ # Modify the file
+ $self->_mtwrite($data, $self->{offsets}[$pos], $oldlen);
+ # Adjust the offsets table
+ $self->_oadjust([$pos, $nrecs, @data]);
+
+ { # Take this read cache stuff out into a separate function
+ # You made a half-attempt to put it into _oadjust.
+ # Finish something like that up eventually.
+ # STORE also needs to do something similarish
+
+ # update the read cache, part 1
+ # modified records
+ for ($pos .. $pos+$nrecs-1) {
+ my $new = $data[$_-$pos];
+ if (defined $new) {
+ $self->{cache}->update($_, $new);
+ } else {
+ $self->{cache}->remove($_);
+ }
+ }
+
+ # update the read cache, part 2
+ # moved records - records past the site of the change
+ # need to be renumbered
+ # Maybe merge this with the previous block?
+ {
+ my @oldkeys = grep $_ >= $pos + $nrecs, $self->{cache}->ckeys;
+ my @newkeys = map $_-$nrecs+ at data, @oldkeys;
+ $self->{cache}->rekey(\@oldkeys, \@newkeys);
+ }
+
+ # Now there might be too much data in the cache, if we spliced out
+ # some short records and spliced in some long ones. If so, flush
+ # the cache.
+ $self->_cache_flush;
+ }
+
+ # Yes, the return value of 'splice' *is* actually this complicated
+ wantarray ? @result : @result ? $result[-1] : undef;
+}
+
+
+# write data into the file
+# $data is the data to be written.
+# it should be written at position $pos, and should overwrite
+# exactly $len of the following bytes.
+# Note that if length($data) > $len, the subsequent bytes will have to
+# be moved up, and if length($data) < $len, they will have to
+# be moved down
+sub _twrite {
+ my ($self, $data, $pos, $len) = @_;
+
+ unless (defined $pos) {
+ die "\$pos was undefined in _twrite";
+ }
+
+ my $len_diff = length($data) - $len;
+
+ if ($len_diff == 0) { # Woo-hoo!
+ my $fh = $self->{fh};
+ $self->_seekb($pos);
+ $self->_write_record($data);
+ return; # well, that was easy.
+ }
+
+ # the two records are of different lengths
+ # our strategy here: rewrite the tail of the file,
+ # reading ahead one buffer at a time
+ # $bufsize is required to be at least as large as the data we're overwriting
+ my $bufsize = _bufsize($len_diff);
+ my ($writepos, $readpos) = ($pos, $pos+$len);
+ my $next_block;
+ my $more_data;
+
+ # Seems like there ought to be a way to avoid the repeated code
+ # and the special case here. The read(1) is also a little weird.
+ # Think about this.
+ do {
+ $self->_seekb($readpos);
+ my $br = read $self->{fh}, $next_block, $bufsize;
+ $more_data = read $self->{fh}, my($dummy), 1;
+ $self->_seekb($writepos);
+ $self->_write_record($data);
+ $readpos += $br;
+ $writepos += length $data;
+ $data = $next_block;
+ } while $more_data;
+ $self->_seekb($writepos);
+ $self->_write_record($next_block);
+
+ # There might be leftover data at the end of the file
+ $self->_chop_file if $len_diff < 0;
+}
+
+# _iwrite(D, S, E)
+# Insert text D at position S.
+# Let C = E-S-|D|. If C < 0; die.
+# Data in [S,S+C) is copied to [S+D,S+D+C) = [S+D,E).
+# Data in [S+C = E-D, E) is returned. Data in [E, oo) is untouched.
+#
+# In a later version, don't read the entire intervening area into
+# memory at once; do the copying block by block.
+sub _iwrite {
+ my $self = shift;
+ my ($D, $s, $e) = @_;
+ my $d = length $D;
+ my $c = $e-$s-$d;
+ local *FH = $self->{fh};
+ confess "Not enough space to insert $d bytes between $s and $e"
+ if $c < 0;
+ confess "[$s,$e) is an invalid insertion range" if $e < $s;
+
+ $self->_seekb($s);
+ read FH, my $buf, $e-$s;
+
+ $D .= substr($buf, 0, $c, "");
+
+ $self->_seekb($s);
+ $self->_write_record($D);
+
+ return $buf;
+}
+
+# Like _twrite, but the data-pos-len triple may be repeated; you may
+# write several chunks. All the writing will be done in
+# one pass. Chunks SHALL be in ascending order and SHALL NOT overlap.
+sub _mtwrite {
+ my $self = shift;
+ my $unwritten = "";
+ my $delta = 0;
+
+ @_ % 3 == 0
+ or die "Arguments to _mtwrite did not come in groups of three";
+
+ while (@_) {
+ my ($data, $pos, $len) = splice @_, 0, 3;
+ my $end = $pos + $len; # The OLD end of the segment to be replaced
+ $data = $unwritten . $data;
+ $delta -= length($unwritten);
+ $unwritten = "";
+ $pos += $delta; # This is where the data goes now
+ my $dlen = length $data;
+ $self->_seekb($pos);
+ if ($len >= $dlen) { # the data will fit
+ $self->_write_record($data);
+ $delta += ($dlen - $len); # everything following moves down by this much
+ $data = ""; # All the data in the buffer has been written
+ } else { # won't fit
+ my $writable = substr($data, 0, $len - $delta, "");
+ $self->_write_record($writable);
+ $delta += ($dlen - $len); # everything following moves down by this much
+ }
+
+ # At this point we've written some but maybe not all of the data.
+ # There might be a gap to close up, or $data might still contain a
+ # bunch of unwritten data that didn't fit.
+ my $ndlen = length $data;
+ if ($delta == 0) {
+ $self->_write_record($data);
+ } elsif ($delta < 0) {
+ # upcopy (close up gap)
+ if (@_) {
+ $self->_upcopy($end, $end + $delta, $_[1] - $end);
+ } else {
+ $self->_upcopy($end, $end + $delta);
+ }
+ } else {
+ # downcopy (insert data that didn't fit; replace this data in memory
+ # with _later_ data that doesn't fit)
+ if (@_) {
+ $unwritten = $self->_downcopy($data, $end, $_[1] - $end);
+ } else {
+ # Make the file longer to accommodate the last segment that doesn'
+ $unwritten = $self->_downcopy($data, $end);
+ }
+ }
+ }
+}
+
+# Copy block of data of length $len from position $spos to position $dpos
+# $dpos must be <= $spos
+#
+# If $len is undefined, go all the way to the end of the file
+# and then truncate it ($spos - $dpos bytes will be removed)
+sub _upcopy {
+ my $blocksize = 8192;
+ my ($self, $spos, $dpos, $len) = @_;
+ if ($dpos > $spos) {
+ die "source ($spos) was upstream of destination ($dpos) in _upcopy";
+ } elsif ($dpos == $spos) {
+ return;
+ }
+
+ while (! defined ($len) || $len > 0) {
+ my $readsize = ! defined($len) ? $blocksize
+ : $len > $blocksize ? $blocksize
+ : $len;
+
+ my $fh = $self->{fh};
+ $self->_seekb($spos);
+ my $bytes_read = read $fh, my($data), $readsize;
+ $self->_seekb($dpos);
+ if ($data eq "") {
+ $self->_chop_file;
+ last;
+ }
+ $self->_write_record($data);
+ $spos += $bytes_read;
+ $dpos += $bytes_read;
+ $len -= $bytes_read if defined $len;
+ }
+}
+
+# Write $data into a block of length $len at position $pos,
+# moving everything in the block forwards to make room.
+# Instead of writing the last length($data) bytes from the block
+# (because there isn't room for them any longer) return them.
+#
+# Undefined $len means 'until the end of the file'
+sub _downcopy {
+ my $blocksize = 8192;
+ my ($self, $data, $pos, $len) = @_;
+ my $fh = $self->{fh};
+
+ while (! defined $len || $len > 0) {
+ my $readsize = ! defined($len) ? $blocksize
+ : $len > $blocksize? $blocksize : $len;
+ $self->_seekb($pos);
+ read $fh, my($old), $readsize;
+ my $last_read_was_short = length($old) < $readsize;
+ $data .= $old;
+ my $writable;
+ if ($last_read_was_short) {
+ # If last read was short, then $data now contains the entire rest
+ # of the file, so there's no need to write only one block of it
+ $writable = $data;
+ $data = "";
+ } else {
+ $writable = substr($data, 0, $readsize, "");
+ }
+ last if $writable eq "";
+ $self->_seekb($pos);
+ $self->_write_record($writable);
+ last if $last_read_was_short && $data eq "";
+ $len -= $readsize if defined $len;
+ $pos += $readsize;
+ }
+ return $data;
+}
+
+# Adjust the object data structures following an '_mtwrite'
+# Arguments are
+# [$pos, $nrecs, @length] items
+# indicating that $nrecs records were removed at $recpos (a record offset)
+# and replaced with records of length @length...
+# Arguments guarantee that $recpos is strictly increasing.
+# No return value
+sub _oadjust {
+ my $self = shift;
+ my $delta = 0;
+ my $delta_recs = 0;
+ my $prev_end = -1;
+ my %newkeys;
+
+ for (@_) {
+ my ($pos, $nrecs, @data) = @$_;
+ $pos += $delta_recs;
+
+ # Adjust the offsets of the records after the previous batch up
+ # to the first new one of this batch
+ for my $i ($prev_end+2 .. $pos - 1) {
+ $self->{offsets}[$i] += $delta;
+ $newkey{$i} = $i + $delta_recs;
+ }
+
+ $prev_end = $pos + @data - 1; # last record moved on this pass
+
+ # Remove the offsets for the removed records;
+ # replace with the offsets for the inserted records
+ my @newoff = ($self->{offsets}[$pos] + $delta);
+ for my $i (0 .. $#data) {
+ my $newlen = length $data[$i];
+ push @newoff, $newoff[$i] + $newlen;
+ $delta += $newlen;
+ }
+
+ for my $i ($pos .. $pos+$nrecs-1) {
+ last if $i+1 > $#{$self->{offsets}};
+ my $oldlen = $self->{offsets}[$i+1] - $self->{offsets}[$i];
+ $delta -= $oldlen;
+ }
+
+# # also this data has changed, so update it in the cache
+# for (0 .. $#data) {
+# $self->{cache}->update($pos + $_, $data[$_]);
+# }
+# if ($delta_recs) {
+# my @oldkeys = grep $_ >= $pos + @data, $self->{cache}->ckeys;
+# my @newkeys = map $_ + $delta_recs, @oldkeys;
+# $self->{cache}->rekey(\@oldkeys, \@newkeys);
+# }
+
+ # replace old offsets with new
+ splice @{$self->{offsets}}, $pos, $nrecs+1, @newoff;
+ # What if we just spliced out the end of the offsets table?
+ # shouldn't we clear $self->{eof}? Test for this XXX BUG TODO
+
+ $delta_recs += @data - $nrecs; # net change in total number of records
+ }
+
+ # The trailing records at the very end of the file
+ if ($delta) {
+ for my $i ($prev_end+2 .. $#{$self->{offsets}}) {
+ $self->{offsets}[$i] += $delta;
+ }
+ }
+
+ # If we scrubbed out all known offsets, regenerate the trivial table
+ # that knows that the file does indeed start at 0.
+ $self->{offsets}[0] = 0 unless @{$self->{offsets}};
+ # If the file got longer, the offsets table is no longer complete
+ # $self->{eof} = 0 if $delta_recs > 0;
+
+ # Now there might be too much data in the cache, if we spliced out
+ # some short records and spliced in some long ones. If so, flush
+ # the cache.
+ $self->_cache_flush;
+}
+
+# If a record does not already end with the appropriate terminator
+# string, append one.
+sub _fixrecs {
+ my $self = shift;
+ for (@_) {
+ $_ = "" unless defined $_;
+ $_ .= $self->{recsep}
+ unless substr($_, - $self->{recseplen}) eq $self->{recsep};
+ }
+}
+
+
+################################################################
+#
+# Basic read, write, and seek
+#
+
+# seek to the beginning of record #$n
+# Assumes that the offsets table is already correctly populated
+#
+# Note that $n=-1 has a special meaning here: It means the start of
+# the last known record; this may or may not be the very last record
+# in the file, depending on whether the offsets table is fully populated.
+#
+sub _seek {
+ my ($self, $n) = @_;
+ my $o = $self->{offsets}[$n];
+ defined($o)
+ or confess("logic error: undefined offset for record $n");
+ seek $self->{fh}, $o, SEEK_SET
+ or confess "Couldn't seek filehandle: $!"; # "Should never happen."
+}
+
+# seek to byte $b in the file
+sub _seekb {
+ my ($self, $b) = @_;
+ seek $self->{fh}, $b, SEEK_SET
+ or die "Couldn't seek filehandle: $!"; # "Should never happen."
+}
+
+# populate the offsets table up to the beginning of record $n
+# return the offset of record $n
+sub _fill_offsets_to {
+ my ($self, $n) = @_;
+
+ return $self->{offsets}[$n] if $self->{eof};
+
+ my $fh = $self->{fh};
+ local *OFF = $self->{offsets};
+ my $rec;
+
+ until ($#OFF >= $n) {
+ $self->_seek(-1); # tricky -- see comment at _seek
+ $rec = $self->_read_record;
+ if (defined $rec) {
+ push @OFF, int(tell $fh); # Tels says that int() saves memory here
+ } else {
+ $self->{eof} = 1;
+ return; # It turns out there is no such record
+ }
+ }
+
+ # we have now read all the records up to record n-1,
+ # so we can return the offset of record n
+ $OFF[$n];
+}
+
+sub _fill_offsets {
+ my ($self) = @_;
+
+ my $fh = $self->{fh};
+ local *OFF = $self->{offsets};
+
+ $self->_seek(-1); # tricky -- see comment at _seek
+
+ # Tels says that inlining read_record() would make this loop
+ # five times faster. 20030508
+ while ( defined $self->_read_record()) {
+ # int() saves us memory here
+ push @OFF, int(tell $fh);
+ }
+
+ $self->{eof} = 1;
+ $#OFF;
+}
+
+# assumes that $rec is already suitably terminated
+sub _write_record {
+ my ($self, $rec) = @_;
+ my $fh = $self->{fh};
+ local $\ = "";
+ print $fh $rec
+ or die "Couldn't write record: $!"; # "Should never happen."
+# $self->{_written} += length($rec);
+}
+
+sub _read_record {
+ my $self = shift;
+ my $rec;
+ { local $/ = $self->{recsep};
+ my $fh = $self->{fh};
+ $rec = <$fh>;
+ }
+ return unless defined $rec;
+ if (substr($rec, -$self->{recseplen}) ne $self->{recsep}) {
+ # improperly terminated final record --- quietly fix it.
+# my $ac = substr($rec, -$self->{recseplen});
+# $ac =~ s/\n/\\n/g;
+ $self->{sawlastrec} = 1;
+ unless ($self->{rdonly}) {
+ local $\ = "";
+ my $fh = $self->{fh};
+ print $fh $self->{recsep};
+ }
+ $rec .= $self->{recsep};
+ }
+# $self->{_read} += length($rec) if defined $rec;
+ $rec;
+}
+
+sub _rw_stats {
+ my $self = shift;
+ @{$self}{'_read', '_written'};
+}
+
+################################################################
+#
+# Read cache management
+
+sub _cache_flush {
+ my ($self) = @_;
+ $self->{cache}->reduce_size_to($self->{memory} - $self->{deferred_s});
+}
+
+sub _cache_too_full {
+ my $self = shift;
+ $self->{cache}->bytes + $self->{deferred_s} >= $self->{memory};
+}
+
+################################################################
+#
+# File custodial services
+#
+
+
+# We have read to the end of the file and have the offsets table
+# entirely populated. Now we need to write a new record beyond
+# the end of the file. We prepare for this by writing
+# empty records into the file up to the position we want
+#
+# assumes that the offsets table already contains the offset of record $n,
+# if it exists, and extends to the end of the file if not.
+sub _extend_file_to {
+ my ($self, $n) = @_;
+ $self->_seek(-1); # position after the end of the last record
+ my $pos = $self->{offsets}[-1];
+
+ # the offsets table has one entry more than the total number of records
+ my $extras = $n - $#{$self->{offsets}};
+
+ # Todo : just use $self->{recsep} x $extras here?
+ while ($extras-- > 0) {
+ $self->_write_record($self->{recsep});
+ push @{$self->{offsets}}, int(tell $self->{fh});
+ }
+}
+
+# Truncate the file at the current position
+sub _chop_file {
+ my $self = shift;
+ truncate $self->{fh}, tell($self->{fh});
+}
+
+
+# compute the size of a buffer suitable for moving
+# all the data in a file forward $n bytes
+# ($n may be negative)
+# The result should be at least $n.
+sub _bufsize {
+ my $n = shift;
+ return 8192 if $n <= 0;
+ my $b = $n & ~8191;
+ $b += 8192 if $n & 8191;
+ $b;
+}
+
+################################################################
+#
+# Miscellaneous public methods
+#
+
+# Lock the file
+sub flock {
+ my ($self, $op) = @_;
+ unless (@_ <= 3) {
+ my $pack = ref $self;
+ croak "Usage: $pack\->flock([OPERATION])";
+ }
+ my $fh = $self->{fh};
+ $op = LOCK_EX unless defined $op;
+ my $locked = flock $fh, $op;
+
+ if ($locked && ($op & (LOCK_EX | LOCK_SH))) {
+ # If you're locking the file, then presumably it's because
+ # there might have been a write access by another process.
+ # In that case, the read cache contents and the offsets table
+ # might be invalid, so discard them. 20030508
+ $self->{offsets} = [0];
+ $self->{cache}->empty;
+ }
+
+ $locked;
+}
+
+# Get/set autochomp option
+sub autochomp {
+ my $self = shift;
+ if (@_) {
+ my $old = $self->{autochomp};
+ $self->{autochomp} = shift;
+ $old;
+ } else {
+ $self->{autochomp};
+ }
+}
+
+# Get offset table entries; returns offset of nth record
+sub offset {
+ my ($self, $n) = @_;
+
+ if ($#{$self->{offsets}} < $n) {
+ return if $self->{eof}; # request for record beyond the end of file
+ my $o = $self->_fill_offsets_to($n);
+ # If it's still undefined, there is no such record, so return 'undef'
+ return unless defined $o;
+ }
+
+ $self->{offsets}[$n];
+}
+
+sub discard_offsets {
+ my $self = shift;
+ $self->{offsets} = [0];
+}
+
+################################################################
+#
+# Matters related to deferred writing
+#
+
+# Defer writes
+sub defer {
+ my $self = shift;
+ $self->_stop_autodeferring;
+ @{$self->{ad_history}} = ();
+ $self->{defer} = 1;
+}
+
+# Flush deferred writes
+#
+# This could be better optimized to write the file in one pass, instead
+# of one pass per block of records. But that will require modifications
+# to _twrite, so I should have a good _twrite test suite first.
+sub flush {
+ my $self = shift;
+
+ $self->_flush;
+ $self->{defer} = 0;
+}
+
+sub _old_flush {
+ my $self = shift;
+ my @writable = sort {$a<=>$b} (keys %{$self->{deferred}});
+
+ while (@writable) {
+ # gather all consecutive records from the front of @writable
+ my $first_rec = shift @writable;
+ my $last_rec = $first_rec+1;
+ ++$last_rec, shift @writable while @writable && $last_rec == $writable[0];
+ --$last_rec;
+ $self->_fill_offsets_to($last_rec);
+ $self->_extend_file_to($last_rec);
+ $self->_splice($first_rec, $last_rec-$first_rec+1,
+ @{$self->{deferred}}{$first_rec .. $last_rec});
+ }
+
+ $self->_discard; # clear out defered-write-cache
+}
+
+sub _flush {
+ my $self = shift;
+ my @writable = sort {$a<=>$b} (keys %{$self->{deferred}});
+ my @args;
+ my @adjust;
+
+ while (@writable) {
+ # gather all consecutive records from the front of @writable
+ my $first_rec = shift @writable;
+ my $last_rec = $first_rec+1;
+ ++$last_rec, shift @writable while @writable && $last_rec == $writable[0];
+ --$last_rec;
+ my $end = $self->_fill_offsets_to($last_rec+1);
+ if (not defined $end) {
+ $self->_extend_file_to($last_rec);
+ $end = $self->{offsets}[$last_rec];
+ }
+ my ($start) = $self->{offsets}[$first_rec];
+ push @args,
+ join("", @{$self->{deferred}}{$first_rec .. $last_rec}), # data
+ $start, # position
+ $end-$start; # length
+ push @adjust, [$first_rec, # starting at this position...
+ $last_rec-$first_rec+1, # this many records...
+ # are replaced with these...
+ @{$self->{deferred}}{$first_rec .. $last_rec},
+ ];
+ }
+
+ $self->_mtwrite(@args); # write multiple record groups
+ $self->_discard; # clear out defered-write-cache
+ $self->_oadjust(@adjust);
+}
+
+# Discard deferred writes and disable future deferred writes
+sub discard {
+ my $self = shift;
+ $self->_discard;
+ $self->{defer} = 0;
+}
+
+# Discard deferred writes, but retain old deferred writing mode
+sub _discard {
+ my $self = shift;
+ %{$self->{deferred}} = ();
+ $self->{deferred_s} = 0;
+ $self->{deferred_max} = -1;
+ $self->{cache}->set_limit($self->{memory});
+}
+
+# Deferred writing is enabled, either explicitly ($self->{defer})
+# or automatically ($self->{autodeferring})
+sub _is_deferring {
+ my $self = shift;
+ $self->{defer} || $self->{autodeferring};
+}
+
+# The largest record number of any deferred record
+sub _defer_max {
+ my $self = shift;
+ return $self->{deferred_max} if defined $self->{deferred_max};
+ my $max = -1;
+ for my $key (keys %{$self->{deferred}}) {
+ $max = $key if $key > $max;
+ }
+ $self->{deferred_max} = $max;
+ $max;
+}
+
+################################################################
+#
+# Matters related to autodeferment
+#
+
+# Get/set autodefer option
+sub autodefer {
+ my $self = shift;
+ if (@_) {
+ my $old = $self->{autodefer};
+ $self->{autodefer} = shift;
+ if ($old) {
+ $self->_stop_autodeferring;
+ @{$self->{ad_history}} = ();
+ }
+ $old;
+ } else {
+ $self->{autodefer};
+ }
+}
+
+# The user is trying to store record #$n Record that in the history,
+# and then enable (or disable) autodeferment if that seems useful.
+# Note that it's OK for $n to be a non-number, as long as the function
+# is prepared to deal with that. Nobody else looks at the ad_history.
+#
+# Now, what does the ad_history mean, and what is this function doing?
+# Essentially, the idea is to enable autodeferring when we see that the
+# user has made three consecutive STORE calls to three consecutive records.
+# ("Three" is actually ->{autodefer_threshhold}.)
+# A STORE call for record #$n inserts $n into the autodefer history,
+# and if the history contains three consecutive records, we enable
+# autodeferment. An ad_history of [X, Y] means that the most recent
+# STOREs were for records X, X+1, ..., Y, in that order.
+#
+# Inserting a nonconsecutive number erases the history and starts over.
+#
+# Performing a special operation like SPLICE erases the history.
+#
+# There's one special case: CLEAR means that CLEAR was just called.
+# In this case, we prime the history with [-2, -1] so that if the next
+# write is for record 0, autodeferring goes on immediately. This is for
+# the common special case of "@a = (...)".
+#
+sub _annotate_ad_history {
+ my ($self, $n) = @_;
+ return unless $self->{autodefer}; # feature is disabled
+ return if $self->{defer}; # already in explicit defer mode
+ return unless $self->{offsets}[-1] >= $self->{autodefer_filelen_threshhold};
+
+ local *H = $self->{ad_history};
+ if ($n eq 'CLEAR') {
+ @H = (-2, -1); # prime the history with fake records
+ $self->_stop_autodeferring;
+ } elsif ($n =~ /^\d+$/) {
+ if (@H == 0) {
+ @H = ($n, $n);
+ } else { # @H == 2
+ if ($H[1] == $n-1) { # another consecutive record
+ $H[1]++;
+ if ($H[1] - $H[0] + 1 >= $self->{autodefer_threshhold}) {
+ $self->{autodeferring} = 1;
+ }
+ } else { # nonconsecutive- erase and start over
+ @H = ($n, $n);
+ $self->_stop_autodeferring;
+ }
+ }
+ } else { # SPLICE or STORESIZE or some such
+ @H = ();
+ $self->_stop_autodeferring;
+ }
+}
+
+# If autodeferring was enabled, cut it out and discard the history
+sub _stop_autodeferring {
+ my $self = shift;
+ if ($self->{autodeferring}) {
+ $self->_flush;
+ }
+ $self->{autodeferring} = 0;
+}
+
+################################################################
+
+
+# This is NOT a method. It is here for two reasons:
+# 1. To factor a fairly complicated block out of the constructor
+# 2. To provide access for the test suite, which need to be sure
+# files are being written properly.
+sub _default_recsep {
+ my $recsep = $/;
+ if ($^O eq 'MSWin32') { # Dos too?
+ # Windows users expect files to be terminated with \r\n
+ # But $/ is set to \n instead
+ # Note that this also transforms \n\n into \r\n\r\n.
+ # That is a feature.
+ $recsep =~ s/\n/\r\n/g;
+ }
+ $recsep;
+}
+
+# Utility function for _check_integrity
+sub _ci_warn {
+ my $msg = shift;
+ $msg =~ s/\n/\\n/g;
+ $msg =~ s/\r/\\r/g;
+ print "# $msg\n";
+}
+
+# Given a file, make sure the cache is consistent with the
+# file contents and the internal data structures are consistent with
+# each other. Returns true if everything checks out, false if not
+#
+# The $file argument is no longer used. It is retained for compatibility
+# with the existing test suite.
+sub _check_integrity {
+ my ($self, $file, $warn) = @_;
+ my $rsl = $self->{recseplen};
+ my $rs = $self->{recsep};
+ my $good = 1;
+ local *_; # local $_ does not work here
+ local $DIAGNOSTIC = 1;
+
+ if (not defined $rs) {
+ _ci_warn("recsep is undef!");
+ $good = 0;
+ } elsif ($rs eq "") {
+ _ci_warn("recsep is empty!");
+ $good = 0;
+ } elsif ($rsl != length $rs) {
+ my $ln = length $rs;
+ _ci_warn("recsep <$rs> has length $ln, should be $rsl");
+ $good = 0;
+ }
+
+ if (not defined $self->{offsets}[0]) {
+ _ci_warn("offset 0 is missing!");
+ $good = 0;
+
+ } elsif ($self->{offsets}[0] != 0) {
+ _ci_warn("rec 0: offset <$self->{offsets}[0]> s/b 0!");
+ $good = 0;
+ }
+
+ my $cached = 0;
+ {
+ local *F = $self->{fh};
+ seek F, 0, SEEK_SET;
+ local $. = 0;
+ local $/ = $rs;
+
+ while (<F>) {
+ my $n = $. - 1;
+ my $cached = $self->{cache}->_produce($n);
+ my $offset = $self->{offsets}[$.];
+ my $ao = tell F;
+ if (defined $offset && $offset != $ao) {
+ _ci_warn("rec $n: offset <$offset> actual <$ao>");
+ $good = 0;
+ }
+ if (defined $cached && $_ ne $cached && ! $self->{deferred}{$n}) {
+ $good = 0;
+ _ci_warn("rec $n: cached <$cached> actual <$_>");
+ }
+ if (defined $cached && substr($cached, -$rsl) ne $rs) {
+ $good = 0;
+ _ci_warn("rec $n in the cache is missing the record separator");
+ }
+ if (! defined $offset && $self->{eof}) {
+ $good = 0;
+ _ci_warn("The offset table was marked complete, but it is missing element $.");
+ }
+ }
+ if (@{$self->{offsets}} > $.+1) {
+ $good = 0;
+ my $n = @{$self->{offsets}};
+ _ci_warn("The offset table has $n items, but the file has only $.");
+ }
+
+ my $deferring = $self->_is_deferring;
+ for my $n ($self->{cache}->ckeys) {
+ my $r = $self->{cache}->_produce($n);
+ $cached += length($r);
+ next if $n+1 <= $.; # checked this already
+ _ci_warn("spurious caching of record $n");
+ $good = 0;
+ }
+ my $b = $self->{cache}->bytes;
+ if ($cached != $b) {
+ _ci_warn("cache size is $b, should be $cached");
+ $good = 0;
+ }
+ }
+
+ # That cache has its own set of tests
+ $good = 0 unless $self->{cache}->_check_integrity;
+
+ # Now let's check the deferbuffer
+ # Unless deferred writing is enabled, it should be empty
+ if (! $self->_is_deferring && %{$self->{deferred}}) {
+ _ci_warn("deferred writing disabled, but deferbuffer nonempty");
+ $good = 0;
+ }
+
+ # Any record in the deferbuffer should *not* be present in the readcache
+ my $deferred_s = 0;
+ while (my ($n, $r) = each %{$self->{deferred}}) {
+ $deferred_s += length($r);
+ if (defined $self->{cache}->_produce($n)) {
+ _ci_warn("record $n is in the deferbuffer *and* the readcache");
+ $good = 0;
+ }
+ if (substr($r, -$rsl) ne $rs) {
+ _ci_warn("rec $n in the deferbuffer is missing the record separator");
+ $good = 0;
+ }
+ }
+
+ # Total size of deferbuffer should match internal total
+ if ($deferred_s != $self->{deferred_s}) {
+ _ci_warn("buffer size is $self->{deferred_s}, should be $deferred_s");
+ $good = 0;
+ }
+
+ # Total size of deferbuffer should not exceed the specified limit
+ if ($deferred_s > $self->{dw_size}) {
+ _ci_warn("buffer size is $self->{deferred_s} which exceeds the limit of $self->{dw_size}");
+ $good = 0;
+ }
+
+ # Total size of cached data should not exceed the specified limit
+ if ($deferred_s + $cached > $self->{memory}) {
+ my $total = $deferred_s + $cached;
+ _ci_warn("total stored data size is $total which exceeds the limit of $self->{memory}");
+ $good = 0;
+ }
+
+ # Stuff related to autodeferment
+ if (!$self->{autodefer} && @{$self->{ad_history}}) {
+ _ci_warn("autodefer is disabled, but ad_history is nonempty");
+ $good = 0;
+ }
+ if ($self->{autodeferring} && $self->{defer}) {
+ _ci_warn("both autodeferring and explicit deferring are active");
+ $good = 0;
+ }
+ if (@{$self->{ad_history}} == 0) {
+ # That's OK, no additional tests required
+ } elsif (@{$self->{ad_history}} == 2) {
+ my @non_number = grep !/^-?\d+$/, @{$self->{ad_history}};
+ if (@non_number) {
+ my $msg;
+ { local $" = ')(';
+ $msg = "ad_history contains non-numbers (@{$self->{ad_history}})";
+ }
+ _ci_warn($msg);
+ $good = 0;
+ } elsif ($self->{ad_history}[1] < $self->{ad_history}[0]) {
+ _ci_warn("ad_history has nonsensical values @{$self->{ad_history}}");
+ $good = 0;
+ }
+ } else {
+ _ci_warn("ad_history has bad length <@{$self->{ad_history}}>");
+ $good = 0;
+ }
+
+ $good;
+}
+
+################################################################
+#
+# Tie::File::Cache
+#
+# Read cache
+
+package Tie::File::Cache;
+$Tie::File::Cache::VERSION = $Tie::File::VERSION;
+use Carp ':DEFAULT', 'confess';
+
+sub HEAP () { 0 }
+sub HASH () { 1 }
+sub MAX () { 2 }
+sub BYTES() { 3 }
+#sub STAT () { 4 } # Array with request statistics for each record
+#sub MISS () { 5 } # Total number of cache misses
+#sub REQ () { 6 } # Total number of cache requests
+use strict 'vars';
+
+sub new {
+ my ($pack, $max) = @_;
+ local *_;
+ croak "missing argument to ->new" unless defined $max;
+ my $self = [];
+ bless $self => $pack;
+ @$self = (Tie::File::Heap->new($self), {}, $max, 0);
+ $self;
+}
+
+sub adj_limit {
+ my ($self, $n) = @_;
+ $self->[MAX] += $n;
+}
+
+sub set_limit {
+ my ($self, $n) = @_;
+ $self->[MAX] = $n;
+}
+
+# For internal use only
+# Will be called by the heap structure to notify us that a certain
+# piece of data has moved from one heap element to another.
+# $k is the hash key of the item
+# $n is the new index into the heap at which it is stored
+# If $n is undefined, the item has been removed from the heap.
+sub _heap_move {
+ my ($self, $k, $n) = @_;
+ if (defined $n) {
+ $self->[HASH]{$k} = $n;
+ } else {
+ delete $self->[HASH]{$k};
+ }
+}
+
+sub insert {
+ my ($self, $key, $val) = @_;
+ local *_;
+ croak "missing argument to ->insert" unless defined $key;
+ unless (defined $self->[MAX]) {
+ confess "undefined max" ;
+ }
+ confess "undefined val" unless defined $val;
+ return if length($val) > $self->[MAX];
+
+# if ($self->[STAT]) {
+# $self->[STAT][$key] = 1;
+# return;
+# }
+
+ my $oldnode = $self->[HASH]{$key};
+ if (defined $oldnode) {
+ my $oldval = $self->[HEAP]->set_val($oldnode, $val);
+ $self->[BYTES] -= length($oldval);
+ } else {
+ $self->[HEAP]->insert($key, $val);
+ }
+ $self->[BYTES] += length($val);
+ $self->flush if $self->[BYTES] > $self->[MAX];
+}
+
+sub expire {
+ my $self = shift;
+ my $old_data = $self->[HEAP]->popheap;
+ return unless defined $old_data;
+ $self->[BYTES] -= length $old_data;
+ $old_data;
+}
+
+sub remove {
+ my ($self, @keys) = @_;
+ my @result;
+
+# if ($self->[STAT]) {
+# for my $key (@keys) {
+# $self->[STAT][$key] = 0;
+# }
+# return;
+# }
+
+ for my $key (@keys) {
+ next unless exists $self->[HASH]{$key};
+ my $old_data = $self->[HEAP]->remove($self->[HASH]{$key});
+ $self->[BYTES] -= length $old_data;
+ push @result, $old_data;
+ }
+ @result;
+}
+
+sub lookup {
+ my ($self, $key) = @_;
+ local *_;
+ croak "missing argument to ->lookup" unless defined $key;
+
+# if ($self->[STAT]) {
+# $self->[MISS]++ if $self->[STAT][$key]++ == 0;
+# $self->[REQ]++;
+# my $hit_rate = 1 - $self->[MISS] / $self->[REQ];
+# # Do some testing to determine this threshhold
+# $#$self = STAT - 1 if $hit_rate > 0.20;
+# }
+
+ if (exists $self->[HASH]{$key}) {
+ $self->[HEAP]->lookup($self->[HASH]{$key});
+ } else {
+ return;
+ }
+}
+
+# For internal use only
+sub _produce {
+ my ($self, $key) = @_;
+ my $loc = $self->[HASH]{$key};
+ return unless defined $loc;
+ $self->[HEAP][$loc][2];
+}
+
+# For internal use only
+sub _promote {
+ my ($self, $key) = @_;
+ $self->[HEAP]->promote($self->[HASH]{$key});
+}
+
+sub empty {
+ my ($self) = @_;
+ %{$self->[HASH]} = ();
+ $self->[BYTES] = 0;
+ $self->[HEAP]->empty;
+# @{$self->[STAT]} = ();
+# $self->[MISS] = 0;
+# $self->[REQ] = 0;
+}
+
+sub is_empty {
+ my ($self) = @_;
+ keys %{$self->[HASH]} == 0;
+}
+
+sub update {
+ my ($self, $key, $val) = @_;
+ local *_;
+ croak "missing argument to ->update" unless defined $key;
+ if (length($val) > $self->[MAX]) {
+ my ($oldval) = $self->remove($key);
+ $self->[BYTES] -= length($oldval) if defined $oldval;
+ } elsif (exists $self->[HASH]{$key}) {
+ my $oldval = $self->[HEAP]->set_val($self->[HASH]{$key}, $val);
+ $self->[BYTES] += length($val);
+ $self->[BYTES] -= length($oldval) if defined $oldval;
+ } else {
+ $self->[HEAP]->insert($key, $val);
+ $self->[BYTES] += length($val);
+ }
+ $self->flush;
+}
+
+sub rekey {
+ my ($self, $okeys, $nkeys) = @_;
+ local *_;
+ my %map;
+ @map{@$okeys} = @$nkeys;
+ croak "missing argument to ->rekey" unless defined $nkeys;
+ croak "length mismatch in ->rekey arguments" unless @$nkeys == @$okeys;
+ my %adjusted; # map new keys to heap indices
+ # You should be able to cut this to one loop TODO XXX
+ for (0 .. $#$okeys) {
+ $adjusted{$nkeys->[$_]} = delete $self->[HASH]{$okeys->[$_]};
+ }
+ while (my ($nk, $ix) = each %adjusted) {
+ # @{$self->[HASH]}{keys %adjusted} = values %adjusted;
+ $self->[HEAP]->rekey($ix, $nk);
+ $self->[HASH]{$nk} = $ix;
+ }
+}
+
+sub ckeys {
+ my $self = shift;
+ my @a = keys %{$self->[HASH]};
+ @a;
+}
+
+# Return total amount of cached data
+sub bytes {
+ my $self = shift;
+ $self->[BYTES];
+}
+
+# Expire oldest item from cache until cache size is smaller than $max
+sub reduce_size_to {
+ my ($self, $max) = @_;
+ until ($self->[BYTES] <= $max) {
+ # Note that Tie::File::Cache::expire has been inlined here
+ my $old_data = $self->[HEAP]->popheap;
+ return unless defined $old_data;
+ $self->[BYTES] -= length $old_data;
+ }
+}
+
+# Why not just $self->reduce_size_to($self->[MAX])?
+# Try this when things stabilize TODO XXX
+# If the cache is too full, expire the oldest records
+sub flush {
+ my $self = shift;
+ $self->reduce_size_to($self->[MAX]) if $self->[BYTES] > $self->[MAX];
+}
+
+# For internal use only
+sub _produce_lru {
+ my $self = shift;
+ $self->[HEAP]->expire_order;
+}
+
+BEGIN { *_ci_warn = \&Tie::File::_ci_warn }
+
+sub _check_integrity { # For CACHE
+ my $self = shift;
+ my $good = 1;
+
+ # Test HEAP
+ $self->[HEAP]->_check_integrity or $good = 0;
+
+ # Test HASH
+ my $bytes = 0;
+ for my $k (keys %{$self->[HASH]}) {
+ if ($k ne '0' && $k !~ /^[1-9][0-9]*$/) {
+ $good = 0;
+ _ci_warn "Cache hash key <$k> is non-numeric";
+ }
+
+ my $h = $self->[HASH]{$k};
+ if (! defined $h) {
+ $good = 0;
+ _ci_warn "Heap index number for key $k is undefined";
+ } elsif ($h == 0) {
+ $good = 0;
+ _ci_warn "Heap index number for key $k is zero";
+ } else {
+ my $j = $self->[HEAP][$h];
+ if (! defined $j) {
+ $good = 0;
+ _ci_warn "Heap contents key $k (=> $h) are undefined";
+ } else {
+ $bytes += length($j->[2]);
+ if ($k ne $j->[1]) {
+ $good = 0;
+ _ci_warn "Heap contents key $k (=> $h) is $j->[1], should be $k";
+ }
+ }
+ }
+ }
+
+ # Test BYTES
+ if ($bytes != $self->[BYTES]) {
+ $good = 0;
+ _ci_warn "Total data in cache is $bytes, expected $self->[BYTES]";
+ }
+
+ # Test MAX
+ if ($bytes > $self->[MAX]) {
+ $good = 0;
+ _ci_warn "Total data in cache is $bytes, exceeds maximum $self->[MAX]";
+ }
+
+ return $good;
+}
+
+sub delink {
+ my $self = shift;
+ $self->[HEAP] = undef; # Bye bye heap
+}
+
+################################################################
+#
+# Tie::File::Heap
+#
+# Heap data structure for use by cache LRU routines
+
+package Tie::File::Heap;
+use Carp ':DEFAULT', 'confess';
+$Tie::File::Heap::VERSION = $Tie::File::Cache::VERSION;
+sub SEQ () { 0 };
+sub KEY () { 1 };
+sub DAT () { 2 };
+
+sub new {
+ my ($pack, $cache) = @_;
+ die "$pack: Parent cache object $cache does not support _heap_move method"
+ unless eval { $cache->can('_heap_move') };
+ my $self = [[0,$cache,0]];
+ bless $self => $pack;
+}
+
+# Allocate a new sequence number, larger than all previously allocated numbers
+sub _nseq {
+ my $self = shift;
+ $self->[0][0]++;
+}
+
+sub _cache {
+ my $self = shift;
+ $self->[0][1];
+}
+
+sub _nelts {
+ my $self = shift;
+ $self->[0][2];
+}
+
+sub _nelts_inc {
+ my $self = shift;
+ ++$self->[0][2];
+}
+
+sub _nelts_dec {
+ my $self = shift;
+ --$self->[0][2];
+}
+
+sub is_empty {
+ my $self = shift;
+ $self->_nelts == 0;
+}
+
+sub empty {
+ my $self = shift;
+ $#$self = 0;
+ $self->[0][2] = 0;
+ $self->[0][0] = 0; # might as well reset the sequence numbers
+}
+
+# notify the parent cache object that we moved something
+sub _heap_move {
+ my $self = shift;
+ $self->_cache->_heap_move(@_);
+}
+
+# Insert a piece of data into the heap with the indicated sequence number.
+# The item with the smallest sequence number is always at the top.
+# If no sequence number is specified, allocate a new one and insert the
+# item at the bottom.
+sub insert {
+ my ($self, $key, $data, $seq) = @_;
+ $seq = $self->_nseq unless defined $seq;
+ $self->_insert_new([$seq, $key, $data]);
+}
+
+# Insert a new, fresh item at the bottom of the heap
+sub _insert_new {
+ my ($self, $item) = @_;
+ my $i = @$self;
+ $i = int($i/2) until defined $self->[$i/2];
+ $self->[$i] = $item;
+ $self->[0][1]->_heap_move($self->[$i][KEY], $i);
+ $self->_nelts_inc;
+}
+
+# Insert [$data, $seq] pair at or below item $i in the heap.
+# If $i is omitted, default to 1 (the top element.)
+sub _insert {
+ my ($self, $item, $i) = @_;
+# $self->_check_loc($i) if defined $i;
+ $i = 1 unless defined $i;
+ until (! defined $self->[$i]) {
+ if ($self->[$i][SEQ] > $item->[SEQ]) { # inserted item is older
+ ($self->[$i], $item) = ($item, $self->[$i]);
+ $self->[0][1]->_heap_move($self->[$i][KEY], $i);
+ }
+ # If either is undefined, go that way. Otherwise, choose at random
+ my $dir;
+ $dir = 0 if !defined $self->[2*$i];
+ $dir = 1 if !defined $self->[2*$i+1];
+ $dir = int(rand(2)) unless defined $dir;
+ $i = 2*$i + $dir;
+ }
+ $self->[$i] = $item;
+ $self->[0][1]->_heap_move($self->[$i][KEY], $i);
+ $self->_nelts_inc;
+}
+
+# Remove the item at node $i from the heap, moving child items upwards.
+# The item with the smallest sequence number is always at the top.
+# Moving items upwards maintains this condition.
+# Return the removed item. Return undef if there was no item at node $i.
+sub remove {
+ my ($self, $i) = @_;
+ $i = 1 unless defined $i;
+ my $top = $self->[$i];
+ return unless defined $top;
+ while (1) {
+ my $ii;
+ my ($L, $R) = (2*$i, 2*$i+1);
+
+ # If either is undefined, go the other way.
+ # Otherwise, go towards the smallest.
+ last unless defined $self->[$L] || defined $self->[$R];
+ $ii = $R if not defined $self->[$L];
+ $ii = $L if not defined $self->[$R];
+ unless (defined $ii) {
+ $ii = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R;
+ }
+
+ $self->[$i] = $self->[$ii]; # Promote child to fill vacated spot
+ $self->[0][1]->_heap_move($self->[$i][KEY], $i);
+ $i = $ii; # Fill new vacated spot
+ }
+ $self->[0][1]->_heap_move($top->[KEY], undef);
+ undef $self->[$i];
+ $self->_nelts_dec;
+ return $top->[DAT];
+}
+
+sub popheap {
+ my $self = shift;
+ $self->remove(1);
+}
+
+# set the sequence number of the indicated item to a higher number
+# than any other item in the heap, and bubble the item down to the
+# bottom.
+sub promote {
+ my ($self, $n) = @_;
+# $self->_check_loc($n);
+ $self->[$n][SEQ] = $self->_nseq;
+ my $i = $n;
+ while (1) {
+ my ($L, $R) = (2*$i, 2*$i+1);
+ my $dir;
+ last unless defined $self->[$L] || defined $self->[$R];
+ $dir = $R unless defined $self->[$L];
+ $dir = $L unless defined $self->[$R];
+ unless (defined $dir) {
+ $dir = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R;
+ }
+ @{$self}[$i, $dir] = @{$self}[$dir, $i];
+ for ($i, $dir) {
+ $self->[0][1]->_heap_move($self->[$_][KEY], $_) if defined $self->[$_];
+ }
+ $i = $dir;
+ }
+}
+
+# Return item $n from the heap, promoting its LRU status
+sub lookup {
+ my ($self, $n) = @_;
+# $self->_check_loc($n);
+ my $val = $self->[$n];
+ $self->promote($n);
+ $val->[DAT];
+}
+
+
+# Assign a new value for node $n, promoting it to the bottom of the heap
+sub set_val {
+ my ($self, $n, $val) = @_;
+# $self->_check_loc($n);
+ my $oval = $self->[$n][DAT];
+ $self->[$n][DAT] = $val;
+ $self->promote($n);
+ return $oval;
+}
+
+# The hask key has changed for an item;
+# alter the heap's record of the hash key
+sub rekey {
+ my ($self, $n, $new_key) = @_;
+# $self->_check_loc($n);
+ $self->[$n][KEY] = $new_key;
+}
+
+sub _check_loc {
+ my ($self, $n) = @_;
+ unless (1 || defined $self->[$n]) {
+ confess "_check_loc($n) failed";
+ }
+}
+
+BEGIN { *_ci_warn = \&Tie::File::_ci_warn }
+
+sub _check_integrity {
+ my $self = shift;
+ my $good = 1;
+ my %seq;
+
+ unless (eval {$self->[0][1]->isa("Tie::File::Cache")}) {
+ _ci_warn "Element 0 of heap corrupt";
+ $good = 0;
+ }
+ $good = 0 unless $self->_satisfies_heap_condition(1);
+ for my $i (2 .. $#{$self}) {
+ my $p = int($i/2); # index of parent node
+ if (defined $self->[$i] && ! defined $self->[$p]) {
+ _ci_warn "Element $i of heap defined, but parent $p isn't";
+ $good = 0;
+ }
+
+ if (defined $self->[$i]) {
+ if ($seq{$self->[$i][SEQ]}) {
+ my $seq = $self->[$i][SEQ];
+ _ci_warn "Nodes $i and $seq{$seq} both have SEQ=$seq";
+ $good = 0;
+ } else {
+ $seq{$self->[$i][SEQ]} = $i;
+ }
+ }
+ }
+
+ return $good;
+}
+
+sub _satisfies_heap_condition {
+ my $self = shift;
+ my $n = shift || 1;
+ my $good = 1;
+ for (0, 1) {
+ my $c = $n*2 + $_;
+ next unless defined $self->[$c];
+ if ($self->[$n][SEQ] >= $self->[$c]) {
+ _ci_warn "Node $n of heap does not predate node $c";
+ $good = 0 ;
+ }
+ $good = 0 unless $self->_satisfies_heap_condition($c);
+ }
+ return $good;
+}
+
+# Return a list of all the values, sorted by expiration order
+sub expire_order {
+ my $self = shift;
+ my @nodes = sort {$a->[SEQ] <=> $b->[SEQ]} $self->_nodes;
+ map { $_->[KEY] } @nodes;
+}
+
+sub _nodes {
+ my $self = shift;
+ my $i = shift || 1;
+ return unless defined $self->[$i];
+ ($self->[$i], $self->_nodes($i*2), $self->_nodes($i*2+1));
+}
+
+"Cogito, ergo sum."; # don't forget to return a true value from the file
+
+__END__
+
+=head1 NAME
+
+Tie::File - Access the lines of a disk file via a Perl array
+
+=head1 SYNOPSIS
+
+ # This file documents Tie::File version 0.98
+ use Tie::File;
+
+ tie @array, 'Tie::File', filename or die ...;
+
+ $array[13] = 'blah'; # line 13 of the file is now 'blah'
+ print $array[42]; # display line 42 of the file
+
+ $n_recs = @array; # how many records are in the file?
+ $#array -= 2; # chop two records off the end
+
+
+ for (@array) {
+ s/PERL/Perl/g; # Replace PERL with Perl everywhere in the file
+ }
+
+ # These are just like regular push, pop, unshift, shift, and splice
+ # Except that they modify the file in the way you would expect
+
+ push @array, new recs...;
+ my $r1 = pop @array;
+ unshift @array, new recs...;
+ my $r2 = shift @array;
+ @old_recs = splice @array, 3, 7, new recs...;
+
+ untie @array; # all finished
+
+
+=head1 DESCRIPTION
+
+C<Tie::File> represents a regular text file as a Perl array. Each
+element in the array corresponds to a record in the file. The first
+line of the file is element 0 of the array; the second line is element
+1, and so on.
+
+The file is I<not> loaded into memory, so this will work even for
+gigantic files.
+
+Changes to the array are reflected in the file immediately.
+
+Lazy people and beginners may now stop reading the manual.
+
+=head2 C<recsep>
+
+What is a 'record'? By default, the meaning is the same as for the
+C<E<lt>...E<gt>> operator: It's a string terminated by C<$/>, which is
+probably C<"\n">. (Minor exception: on DOS and Win32 systems, a
+'record' is a string terminated by C<"\r\n">.) You may change the
+definition of "record" by supplying the C<recsep> option in the C<tie>
+call:
+
+ tie @array, 'Tie::File', $file, recsep => 'es';
+
+This says that records are delimited by the string C<es>. If the file
+contained the following data:
+
+ Curse these pesky flies!\n
+
+then the C<@array> would appear to have four elements:
+
+ "Curse th"
+ "e p"
+ "ky fli"
+ "!\n"
+
+An undefined value is not permitted as a record separator. Perl's
+special "paragraph mode" semantics (E<agrave> la C<$/ = "">) are not
+emulated.
+
+Records read from the tied array do not have the record separator
+string on the end; this is to allow
+
+ $array[17] .= "extra";
+
+to work as expected.
+
+(See L<"autochomp">, below.) Records stored into the array will have
+the record separator string appended before they are written to the
+file, if they don't have one already. For example, if the record
+separator string is C<"\n">, then the following two lines do exactly
+the same thing:
+
+ $array[17] = "Cherry pie";
+ $array[17] = "Cherry pie\n";
+
+The result is that the contents of line 17 of the file will be
+replaced with "Cherry pie"; a newline character will separate line 17
+from line 18. This means that this code will do nothing:
+
+ chomp $array[17];
+
+Because the C<chomp>ed value will have the separator reattached when
+it is written back to the file. There is no way to create a file
+whose trailing record separator string is missing.
+
+Inserting records that I<contain> the record separator string is not
+supported by this module. It will probably produce a reasonable
+result, but what this result will be may change in a future version.
+Use 'splice' to insert records or to replace one record with several.
+
+=head2 C<autochomp>
+
+Normally, array elements have the record separator removed, so that if
+the file contains the text
+
+ Gold
+ Frankincense
+ Myrrh
+
+the tied array will appear to contain C<("Gold", "Frankincense",
+"Myrrh")>. If you set C<autochomp> to a false value, the record
+separator will not be removed. If the file above was tied with
+
+ tie @gifts, "Tie::File", $gifts, autochomp => 0;
+
+then the array C<@gifts> would appear to contain C<("Gold\n",
+"Frankincense\n", "Myrrh\n")>, or (on Win32 systems) C<("Gold\r\n",
+"Frankincense\r\n", "Myrrh\r\n")>.
+
+=head2 C<mode>
+
+Normally, the specified file will be opened for read and write access,
+and will be created if it does not exist. (That is, the flags
+C<O_RDWR | O_CREAT> are supplied in the C<open> call.) If you want to
+change this, you may supply alternative flags in the C<mode> option.
+See L<Fcntl> for a listing of available flags.
+For example:
+
+ # open the file if it exists, but fail if it does not exist
+ use Fcntl 'O_RDWR';
+ tie @array, 'Tie::File', $file, mode => O_RDWR;
+
+ # create the file if it does not exist
+ use Fcntl 'O_RDWR', 'O_CREAT';
+ tie @array, 'Tie::File', $file, mode => O_RDWR | O_CREAT;
+
+ # open an existing file in read-only mode
+ use Fcntl 'O_RDONLY';
+ tie @array, 'Tie::File', $file, mode => O_RDONLY;
+
+Opening the data file in write-only or append mode is not supported.
+
+=head2 C<memory>
+
+This is an upper limit on the amount of memory that C<Tie::File> will
+consume at any time while managing the file. This is used for two
+things: managing the I<read cache> and managing the I<deferred write
+buffer>.
+
+Records read in from the file are cached, to avoid having to re-read
+them repeatedly. If you read the same record twice, the first time it
+will be stored in memory, and the second time it will be fetched from
+the I<read cache>. The amount of data in the read cache will not
+exceed the value you specified for C<memory>. If C<Tie::File> wants
+to cache a new record, but the read cache is full, it will make room
+by expiring the least-recently visited records from the read cache.
+
+The default memory limit is 2Mib. You can adjust the maximum read
+cache size by supplying the C<memory> option. The argument is the
+desired cache size, in bytes.
+
+ # I have a lot of memory, so use a large cache to speed up access
+ tie @array, 'Tie::File', $file, memory => 20_000_000;
+
+Setting the memory limit to 0 will inhibit caching; records will be
+fetched from disk every time you examine them.
+
+The C<memory> value is not an absolute or exact limit on the memory
+used. C<Tie::File> objects contains some structures besides the read
+cache and the deferred write buffer, whose sizes are not charged
+against C<memory>.
+
+The cache itself consumes about 310 bytes per cached record, so if
+your file has many short records, you may want to decrease the cache
+memory limit, or else the cache overhead may exceed the size of the
+cached data.
+
+
+=head2 C<dw_size>
+
+(This is an advanced feature. Skip this section on first reading.)
+
+If you use deferred writing (See L<"Deferred Writing">, below) then
+data you write into the array will not be written directly to the
+file; instead, it will be saved in the I<deferred write buffer> to be
+written out later. Data in the deferred write buffer is also charged
+against the memory limit you set with the C<memory> option.
+
+You may set the C<dw_size> option to limit the amount of data that can
+be saved in the deferred write buffer. This limit may not exceed the
+total memory limit. For example, if you set C<dw_size> to 1000 and
+C<memory> to 2500, that means that no more than 1000 bytes of deferred
+writes will be saved up. The space available for the read cache will
+vary, but it will always be at least 1500 bytes (if the deferred write
+buffer is full) and it could grow as large as 2500 bytes (if the
+deferred write buffer is empty.)
+
+If you don't specify a C<dw_size>, it defaults to the entire memory
+limit.
+
+=head2 Option Format
+
+C<-mode> is a synonym for C<mode>. C<-recsep> is a synonym for
+C<recsep>. C<-memory> is a synonym for C<memory>. You get the
+idea.
+
+=head1 Public Methods
+
+The C<tie> call returns an object, say C<$o>. You may call
+
+ $rec = $o->FETCH($n);
+ $o->STORE($n, $rec);
+
+to fetch or store the record at line C<$n>, respectively; similarly
+the other tied array methods. (See L<perltie> for details.) You may
+also call the following methods on this object:
+
+=head2 C<flock>
+
+ $o->flock(MODE)
+
+will lock the tied file. C<MODE> has the same meaning as the second
+argument to the Perl built-in C<flock> function; for example
+C<LOCK_SH> or C<LOCK_EX | LOCK_NB>. (These constants are provided by
+the C<use Fcntl ':flock'> declaration.)
+
+C<MODE> is optional; the default is C<LOCK_EX>.
+
+C<Tie::File> maintains an internal table of the byte offset of each
+record it has seen in the file.
+
+When you use C<flock> to lock the file, C<Tie::File> assumes that the
+read cache is no longer trustworthy, because another process might
+have modified the file since the last time it was read. Therefore, a
+successful call to C<flock> discards the contents of the read cache
+and the internal record offset table.
+
+C<Tie::File> promises that the following sequence of operations will
+be safe:
+
+ my $o = tie @array, "Tie::File", $filename;
+ $o->flock;
+
+In particular, C<Tie::File> will I<not> read or write the file during
+the C<tie> call. (Exception: Using C<mode =E<gt> O_TRUNC> will, of
+course, erase the file during the C<tie> call. If you want to do this
+safely, then open the file without C<O_TRUNC>, lock the file, and use
+C<@array = ()>.)
+
+The best way to unlock a file is to discard the object and untie the
+array. It is probably unsafe to unlock the file without also untying
+it, because if you do, changes may remain unwritten inside the object.
+That is why there is no shortcut for unlocking. If you really want to
+unlock the file prematurely, you know what to do; if you don't know
+what to do, then don't do it.
+
+All the usual warnings about file locking apply here. In particular,
+note that file locking in Perl is B<advisory>, which means that
+holding a lock will not prevent anyone else from reading, writing, or
+erasing the file; it only prevents them from getting another lock at
+the same time. Locks are analogous to green traffic lights: If you
+have a green light, that does not prevent the idiot coming the other
+way from plowing into you sideways; it merely guarantees to you that
+the idiot does not also have a green light at the same time.
+
+=head2 C<autochomp>
+
+ my $old_value = $o->autochomp(0); # disable autochomp option
+ my $old_value = $o->autochomp(1); # enable autochomp option
+
+ my $ac = $o->autochomp(); # recover current value
+
+See L<"autochomp">, above.
+
+=head2 C<defer>, C<flush>, C<discard>, and C<autodefer>
+
+See L<"Deferred Writing">, below.
+
+=head2 C<offset>
+
+ $off = $o->offset($n);
+
+This method returns the byte offset of the start of the C<$n>th record
+in the file. If there is no such record, it returns an undefined
+value.
+
+=head1 Tying to an already-opened filehandle
+
+If C<$fh> is a filehandle, such as is returned by C<IO::File> or one
+of the other C<IO> modules, you may use:
+
+ tie @array, 'Tie::File', $fh, ...;
+
+Similarly if you opened that handle C<FH> with regular C<open> or
+C<sysopen>, you may use:
+
+ tie @array, 'Tie::File', \*FH, ...;
+
+Handles that were opened write-only won't work. Handles that were
+opened read-only will work as long as you don't try to modify the
+array. Handles must be attached to seekable sources of data---that
+means no pipes or sockets. If C<Tie::File> can detect that you
+supplied a non-seekable handle, the C<tie> call will throw an
+exception. (On Unix systems, it can detect this.)
+
+Note that Tie::File will only close any filehandles that it opened
+internally. If you passed it a filehandle as above, you "own" the
+filehandle, and are responsible for closing it after you have untied
+the @array.
+
+=head1 Deferred Writing
+
+(This is an advanced feature. Skip this section on first reading.)
+
+Normally, modifying a C<Tie::File> array writes to the underlying file
+immediately. Every assignment like C<$a[3] = ...> rewrites as much of
+the file as is necessary; typically, everything from line 3 through
+the end will need to be rewritten. This is the simplest and most
+transparent behavior. Performance even for large files is reasonably
+good.
+
+However, under some circumstances, this behavior may be excessively
+slow. For example, suppose you have a million-record file, and you
+want to do:
+
+ for (@FILE) {
+ $_ = "> $_";
+ }
+
+The first time through the loop, you will rewrite the entire file,
+from line 0 through the end. The second time through the loop, you
+will rewrite the entire file from line 1 through the end. The third
+time through the loop, you will rewrite the entire file from line 2 to
+the end. And so on.
+
+If the performance in such cases is unacceptable, you may defer the
+actual writing, and then have it done all at once. The following loop
+will perform much better for large files:
+
+ (tied @a)->defer;
+ for (@a) {
+ $_ = "> $_";
+ }
+ (tied @a)->flush;
+
+If C<Tie::File>'s memory limit is large enough, all the writing will
+done in memory. Then, when you call C<-E<gt>flush>, the entire file
+will be rewritten in a single pass.
+
+(Actually, the preceding discussion is something of a fib. You don't
+need to enable deferred writing to get good performance for this
+common case, because C<Tie::File> will do it for you automatically
+unless you specifically tell it not to. See L<"Autodeferring">,
+below.)
+
+Calling C<-E<gt>flush> returns the array to immediate-write mode. If
+you wish to discard the deferred writes, you may call C<-E<gt>discard>
+instead of C<-E<gt>flush>. Note that in some cases, some of the data
+will have been written already, and it will be too late for
+C<-E<gt>discard> to discard all the changes. Support for
+C<-E<gt>discard> may be withdrawn in a future version of C<Tie::File>.
+
+Deferred writes are cached in memory up to the limit specified by the
+C<dw_size> option (see above). If the deferred-write buffer is full
+and you try to write still more deferred data, the buffer will be
+flushed. All buffered data will be written immediately, the buffer
+will be emptied, and the now-empty space will be used for future
+deferred writes.
+
+If the deferred-write buffer isn't yet full, but the total size of the
+buffer and the read cache would exceed the C<memory> limit, the oldest
+records will be expired from the read cache until the total size is
+under the limit.
+
+C<push>, C<pop>, C<shift>, C<unshift>, and C<splice> cannot be
+deferred. When you perform one of these operations, any deferred data
+is written to the file and the operation is performed immediately.
+This may change in a future version.
+
+If you resize the array with deferred writing enabled, the file will
+be resized immediately, but deferred records will not be written.
+This has a surprising consequence: C<@a = (...)> erases the file
+immediately, but the writing of the actual data is deferred. This
+might be a bug. If it is a bug, it will be fixed in a future version.
+
+=head2 Autodeferring
+
+C<Tie::File> tries to guess when deferred writing might be helpful,
+and to turn it on and off automatically.
+
+ for (@a) {
+ $_ = "> $_";
+ }
+
+In this example, only the first two assignments will be done
+immediately; after this, all the changes to the file will be deferred
+up to the user-specified memory limit.
+
+You should usually be able to ignore this and just use the module
+without thinking about deferring. However, special applications may
+require fine control over which writes are deferred, or may require
+that all writes be immediate. To disable the autodeferment feature,
+use
+
+ (tied @o)->autodefer(0);
+
+or
+
+ tie @array, 'Tie::File', $file, autodefer => 0;
+
+
+Similarly, C<-E<gt>autodefer(1)> re-enables autodeferment, and
+C<-E<gt>autodefer()> recovers the current value of the autodefer setting.
+
+
+=head1 CONCURRENT ACCESS TO FILES
+
+Caching and deferred writing are inappropriate if you want the same
+file to be accessed simultaneously from more than one process. Other
+optimizations performed internally by this module are also
+incompatible with concurrent access. A future version of this module will
+support a C<concurrent =E<gt> 1> option that enables safe concurrent access.
+
+Previous versions of this documentation suggested using C<memory
+=E<gt> 0> for safe concurrent access. This was mistaken. Tie::File
+will not support safe concurrent access before version 0.96.
+
+=head1 CAVEATS
+
+(That's Latin for 'warnings'.)
+
+=over 4
+
+=item *
+
+Reasonable effort was made to make this module efficient. Nevertheless,
+changing the size of a record in the middle of a large file will
+always be fairly slow, because everything after the new record must be
+moved.
+
+=item *
+
+The behavior of tied arrays is not precisely the same as for regular
+arrays. For example:
+
+ # This DOES print "How unusual!"
+ undef $a[10]; print "How unusual!\n" if defined $a[10];
+
+C<undef>-ing a C<Tie::File> array element just blanks out the
+corresponding record in the file. When you read it back again, you'll
+get the empty string, so the supposedly-C<undef>'ed value will be
+defined. Similarly, if you have C<autochomp> disabled, then
+
+ # This DOES print "How unusual!" if 'autochomp' is disabled
+ undef $a[10];
+ print "How unusual!\n" if $a[10];
+
+Because when C<autochomp> is disabled, C<$a[10]> will read back as
+C<"\n"> (or whatever the record separator string is.)
+
+There are other minor differences, particularly regarding C<exists>
+and C<delete>, but in general, the correspondence is extremely close.
+
+=item *
+
+I have supposed that since this module is concerned with file I/O,
+almost all normal use of it will be heavily I/O bound. This means
+that the time to maintain complicated data structures inside the
+module will be dominated by the time to actually perform the I/O.
+When there was an opportunity to spend CPU time to avoid doing I/O, I
+usually tried to take it.
+
+=item *
+
+You might be tempted to think that deferred writing is like
+transactions, with C<flush> as C<commit> and C<discard> as
+C<rollback>, but it isn't, so don't.
+
+=item *
+
+There is a large memory overhead for each record offset and for each
+cache entry: about 310 bytes per cached data record, and about 21 bytes per offset table entry.
+
+The per-record overhead will limit the maximum number of records you
+can access per file. Note that I<accessing> the length of the array
+via C<$x = scalar @tied_file> accesses B<all> records and stores their
+offsets. The same for C<foreach (@tied_file)>, even if you exit the
+loop early.
+
+=back
+
+=head1 SUBCLASSING
+
+This version promises absolutely nothing about the internals, which
+may change without notice. A future version of the module will have a
+well-defined and stable subclassing API.
+
+=head1 WHAT ABOUT C<DB_File>?
+
+People sometimes point out that L<DB_File> will do something similar,
+and ask why C<Tie::File> module is necessary.
+
+There are a number of reasons that you might prefer C<Tie::File>.
+A list is available at C<http://perl.plover.com/TieFile/why-not-DB_File>.
+
+=head1 AUTHOR
+
+Mark Jason Dominus
+
+To contact the author, send email to: C<mjd-perl-tiefile+ at plover.com>
+
+To receive an announcement whenever a new version of this module is
+released, send a blank email message to
+C<mjd-perl-tiefile-subscribe at plover.com>.
+
+The most recent version of this module, including documentation and
+any news of importance, will be available at
+
+ http://perl.plover.com/TieFile/
+
+
+=head1 LICENSE
+
+C<Tie::File> version 0.96 is copyright (C) 2003 Mark Jason Dominus.
+
+This library is free software; you may redistribute it and/or modify
+it under the same terms as Perl itself.
+
+These terms are your choice of any of (1) the Perl Artistic Licence,
+or (2) version 2 of the GNU General Public License as published by the
+Free Software Foundation, or (3) any later version of the GNU General
+Public License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this library program; it should be in the file C<COPYING>.
+If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
+Fifth Floor, Boston, MA 02110-1301, USA
+
+For licensing inquiries, contact the author at:
+
+ Mark Jason Dominus
+ 255 S. Warnock St.
+ Philadelphia, PA 19107
+
+=head1 WARRANTY
+
+C<Tie::File> version 0.98 comes with ABSOLUTELY NO WARRANTY.
+For details, see the license.
+
+=head1 THANKS
+
+Gigantic thanks to Jarkko Hietaniemi, for agreeing to put this in the
+core when I hadn't written it yet, and for generally being helpful,
+supportive, and competent. (Usually the rule is "choose any one.")
+Also big thanks to Abhijit Menon-Sen for all of the same things.
+
+Special thanks to Craig Berry and Peter Prymmer (for VMS portability
+help), Randy Kobes (for Win32 portability help), Clinton Pierce and
+Autrijus Tang (for heroic eleventh-hour Win32 testing above and beyond
+the call of duty), Michael G Schwern (for testing advice), and the
+rest of the CPAN testers (for testing generally).
+
+Special thanks to Tels for suggesting several speed and memory
+optimizations.
+
+Additional thanks to:
+Edward Avis /
+Mattia Barbon /
+Tom Christiansen /
+Gerrit Haase /
+Gurusamy Sarathy /
+Jarkko Hietaniemi (again) /
+Nikola Knezevic /
+John Kominetz /
+Nick Ing-Simmons /
+Tassilo von Parseval /
+H. Dieter Pearcey /
+Slaven Rezic /
+Eric Roode /
+Peter Scott /
+Peter Somu /
+Autrijus Tang (again) /
+Tels (again) /
+Juerd Waalboer /
+Todd Rinaldo
+
+=head1 TODO
+
+More tests. (Stuff I didn't think of yet.)
+
+Paragraph mode?
+
+Fixed-length mode. Leave-blanks mode.
+
+Maybe an autolocking mode?
+
+For many common uses of the module, the read cache is a liability.
+For example, a program that inserts a single record, or that scans the
+file once, will have a cache hit rate of zero. This suggests a major
+optimization: The cache should be initially disabled. Here's a hybrid
+approach: Initially, the cache is disabled, but the cache code
+maintains statistics about how high the hit rate would be *if* it were
+enabled. When it sees the hit rate get high enough, it enables
+itself. The STAT comments in this code are the beginning of an
+implementation of this.
+
+Record locking with fcntl()? Then the module might support an undo
+log and get real transactions. What a tour de force that would be.
+
+Keeping track of the highest cached record. This would allow reads-in-a-row
+to skip the cache lookup faster (if reading from 1..N with empty cache at
+start, the last cached value will be always N-1).
+
+More tests.
+
+=cut
+
Added: vendor/perl/dist/dist/Tie-File/t/00_version.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/00_version.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/00_version.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+
+print "1..1\n";
+
+my $testversion = "0.99";
+use Tie::File;
+
+if ($Tie::File::VERSION != $testversion) {
+ print STDERR "
+
+*** WHOA THERE!!! ***
+
+You seem to be running version $Tie::File::VERSION of the module
+against version $testversion of the test suite!
+
+None of the other test results will be reliable.
+";
+ exit 1;
+}
+
+print "ok 1\n";
+
Added: vendor/perl/dist/dist/Tie-File/t/01_gen.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/01_gen.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/01_gen.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,165 @@
+#!/usr/bin/perl
+
+$| = 1;
+my $file = "tf$$.txt";
+1 while unlink $file;
+
+print "1..75\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 0, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$: = $o->{recsep};
+
+# 3-5 create
+$a[0] = 'rec0';
+check_contents("rec0");
+
+# 6-11 append
+$a[1] = 'rec1';
+check_contents("rec0", "rec1");
+$a[2] = 'rec2';
+check_contents("rec0", "rec1", "rec2");
+
+# 12-20 same-length alterations
+$a[0] = 'new0';
+check_contents("new0", "rec1", "rec2");
+$a[1] = 'new1';
+check_contents("new0", "new1", "rec2");
+$a[2] = 'new2';
+check_contents("new0", "new1", "new2");
+
+# 21-35 lengthening alterations
+$a[0] = 'long0';
+check_contents("long0", "new1", "new2");
+$a[1] = 'long1';
+check_contents("long0", "long1", "new2");
+$a[2] = 'long2';
+check_contents("long0", "long1", "long2");
+$a[1] = 'longer1';
+check_contents("long0", "longer1", "long2");
+$a[0] = 'longer0';
+check_contents("longer0", "longer1", "long2");
+
+# 36-50 shortening alterations, including truncation
+$a[0] = 'short0';
+check_contents("short0", "longer1", "long2");
+$a[1] = 'short1';
+check_contents("short0", "short1", "long2");
+$a[2] = 'short2';
+check_contents("short0", "short1", "short2");
+$a[1] = 'sh1';
+check_contents("short0", "sh1", "short2");
+$a[0] = 'sh0';
+check_contents("sh0", "sh1", "short2");
+
+# (51-56) file with holes
+$a[4] = 'rec4';
+check_contents("sh0", "sh1", "short2", "", "rec4");
+$a[3] = 'rec3';
+check_contents("sh0", "sh1", "short2", "rec3", "rec4");
+
+# (57-59) zero out file
+ at a = ();
+check_contents();
+
+# (60-62) insert into the middle of an empty file
+$a[3] = "rec3";
+check_contents("", "", "", "rec3");
+
+# (63-68) 20020326 You thought there would be a bug in STORE where if
+# a cached record was false, STORE wouldn't see it at all. But you
+# forgot that records always come back from the cache with the record
+# separator attached, so they are unlikely to be false. The only
+# really weird case is when the cached record is empty and the record
+# separator is "0". Test that in 09_gen_rs.t.
+$a[1] = "0";
+check_contents("", "0", "", "rec3");
+$a[1] = "whoops";
+check_contents("", "whoops", "", "rec3");
+
+# (69-72) make sure that undefs are treated correctly---they should
+# be converted to empty records, and should not raise any warnings.
+# (Some of these failed in 0.90. The change to _fixrec fixed them.)
+# 20020331
+{
+ my $good = 1; my $warn;
+ # If any of these raise warnings, we have a problem.
+ local $SIG{__WARN__} = sub { $good = 0; $warn = shift(); ctrlfix($warn)};
+ local $^W = 1;
+ @a = (1);
+ $a[0] = undef;
+ print $good ? "ok $N\n" : "not ok $N # $warn\n";
+ $N++; $good = 1;
+ print defined($a[0]) ? "ok $N\n" : "not ok $N\n";
+ $N++; $good = 1;
+ $a[3] = '3';
+ print defined($a[1]) ? "ok $N\n" : "not ok $N\n";
+ $N++; $good = 1;
+ undef $a[3];
+ print $good ? "ok $N\n" : "not ok $N # $warn\n";
+ $N++; $good = 1;
+}
+
+# (73-75) What if the user has tampered with $\ ?
+{ { local $\ = "stop messing with the funny variables!";
+ @a = (0..2);
+ }
+ check_contents(0..2);
+}
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my @c = @_;
+ my $x = join $:, @c, '';
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+# my $open = open FH, "< $file";
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix($a, $x);
+ print "not ok $N\n# expected <$x>, got <$a>\n";
+ }
+ $N++;
+
+ # now check FETCH:
+ my $good = 1;
+ my $msg;
+ for (0.. $#c) {
+ my $aa = $a[$_];
+ unless ($aa eq "$c[$_]$:") {
+ $msg = "expected <$c[$_]$:>, got <$aa>";
+ ctrlfix($msg);
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N # $msg\n";
+ $N++;
+
+ print $o->_check_integrity($file, $ENV{INTEGRITY})
+ ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/02_fetchsize.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/02_fetchsize.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/02_fetchsize.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = "rec1$:rec2$:rec3$:";
+
+print "1..6\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$: = $o->{recsep};
+
+my $n;
+
+# 3 test array element count
+$n = @a;
+print $n == 3 ? "ok $N\n" : "not ok $N # n=$n\n";
+$N++;
+
+# 4 same thing again
+$n = @a;
+print $n == 3 ? "ok $N\n" : "not ok $N # n=$n\n";
+$N++;
+
+# 5 test $#a notation
+$n = $#a;
+print $n == 2 ? "ok $N\n" : "not ok $N # n=$n\n";
+$N++;
+
+# 6 test looping over array elements
+my $q;
+for (@a) { $q .= $_ }
+print $q eq $data ? "ok $N\n" : "not ok $N # n=$n\n";
+$N++;
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/03_longfetch.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/03_longfetch.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/03_longfetch.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,54 @@
+#!/usr/bin/perl
+#
+# Make sure we can fetch a record in the middle of the file
+# before we've ever looked at any records before it
+#
+# Make sure fetching past the end of the file returns the undefined value
+#
+# (tests _fill_offsets_to() )
+#
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = "rec0$:rec1$:rec2$:";
+
+print "1..8\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$: = $o->{recsep};
+
+my $n;
+
+# 3-5
+for (2, 1, 0) {
+ my $rec = $a[$_];
+ print $rec eq "rec$_$:" ? "ok $N\n" : "not ok $N # rec=<$rec> ?\n";
+ $N++;
+}
+
+# 6-8
+for (3, 4, 6) {
+ my $rec = $a[$_];
+ print ((not defined $rec) ? "ok $N\n" : "not ok $N # rec=<$rec> is defined\n");
+ $N++;
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/04_splice.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/04_splice.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/04_splice.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,264 @@
+#!/usr/bin/perl
+
+#
+# Check SPLICE function's effect on the file
+# (07_rv_splice.t checks its return value)
+#
+# Each call to 'check_contents' actually performs two tests.
+# First, it calls the tied object's own 'check_integrity' method,
+# which makes sure that the contents of the read cache and offset tables
+# accurately reflect the contents of the file.
+# Then, it checks the actual contents of the file against the expected
+# contents.
+
+
+$| = 1;
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = "rec0$:rec1$:rec2$:";
+print "1..118\n";
+
+init_file($data);
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++; # partial credit just for showing up
+
+my $o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$: = $o->{recsep};
+my $n;
+
+# (3-22) splicing at the beginning
+splice(@a, 0, 0, "rec4");
+check_contents("rec4$:$data");
+splice(@a, 0, 1, "rec5"); # same length
+check_contents("rec5$:$data");
+splice(@a, 0, 1, "record5"); # longer
+check_contents("record5$:$data");
+
+splice(@a, 0, 1, "r5"); # shorter
+check_contents("r5$:$data");
+splice(@a, 0, 1); # removal
+check_contents("$data");
+splice(@a, 0, 0); # no-op
+check_contents("$data");
+splice(@a, 0, 0, 'r7', 'rec8'); # insert more than one
+check_contents("r7$:rec8$:$data");
+splice(@a, 0, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_contents("rec7$:record8$:rec9$:$data");
+
+splice(@a, 0, 3, 'record9', 'rec10'); # delete more than insert
+check_contents("record9$:rec10$:$data");
+splice(@a, 0, 2); # delete more than one
+check_contents("$data");
+
+
+# (23-42) splicing in the middle
+splice(@a, 1, 0, "rec4");
+check_contents("rec0$:rec4$:rec1$:rec2$:");
+splice(@a, 1, 1, "rec5"); # same length
+check_contents("rec0$:rec5$:rec1$:rec2$:");
+splice(@a, 1, 1, "record5"); # longer
+check_contents("rec0$:record5$:rec1$:rec2$:");
+
+splice(@a, 1, 1, "r5"); # shorter
+check_contents("rec0$:r5$:rec1$:rec2$:");
+splice(@a, 1, 1); # removal
+check_contents("$data");
+splice(@a, 1, 0); # no-op
+check_contents("$data");
+splice(@a, 1, 0, 'r7', 'rec8'); # insert more than one
+check_contents("rec0$:r7$:rec8$:rec1$:rec2$:");
+splice(@a, 1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_contents("rec0$:rec7$:record8$:rec9$:rec1$:rec2$:");
+
+splice(@a, 1, 3, 'record9', 'rec10'); # delete more than insert
+check_contents("rec0$:record9$:rec10$:rec1$:rec2$:");
+splice(@a, 1, 2); # delete more than one
+check_contents("$data");
+
+# (43-62) splicing at the end
+splice(@a, 3, 0, "rec4");
+check_contents("$ {data}rec4$:");
+splice(@a, 3, 1, "rec5"); # same length
+check_contents("$ {data}rec5$:");
+splice(@a, 3, 1, "record5"); # longer
+check_contents("$ {data}record5$:");
+
+splice(@a, 3, 1, "r5"); # shorter
+check_contents("$ {data}r5$:");
+splice(@a, 3, 1); # removal
+check_contents("$data");
+splice(@a, 3, 0); # no-op
+check_contents("$data");
+splice(@a, 3, 0, 'r7', 'rec8'); # insert more than one
+check_contents("$ {data}r7$:rec8$:");
+splice(@a, 3, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_contents("$ {data}rec7$:record8$:rec9$:");
+
+splice(@a, 3, 3, 'record9', 'rec10'); # delete more than insert
+check_contents("$ {data}record9$:rec10$:");
+splice(@a, 3, 2); # delete more than one
+check_contents("$data");
+
+# (63-82) splicing with negative subscript
+splice(@a, -1, 0, "rec4");
+check_contents("rec0$:rec1$:rec4$:rec2$:");
+splice(@a, -1, 1, "rec5"); # same length
+check_contents("rec0$:rec1$:rec4$:rec5$:");
+splice(@a, -1, 1, "record5"); # longer
+check_contents("rec0$:rec1$:rec4$:record5$:");
+
+splice(@a, -1, 1, "r5"); # shorter
+check_contents("rec0$:rec1$:rec4$:r5$:");
+splice(@a, -1, 1); # removal
+check_contents("rec0$:rec1$:rec4$:");
+splice(@a, -1, 0); # no-op
+check_contents("rec0$:rec1$:rec4$:");
+splice(@a, -1, 0, 'r7', 'rec8'); # insert more than one
+check_contents("rec0$:rec1$:r7$:rec8$:rec4$:");
+splice(@a, -1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_contents("rec0$:rec1$:r7$:rec8$:rec7$:record8$:rec9$:");
+
+splice(@a, -3, 3, 'record9', 'rec10'); # delete more than insert
+check_contents("rec0$:rec1$:r7$:rec8$:record9$:rec10$:");
+splice(@a, -4, 3); # delete more than one
+check_contents("rec0$:rec1$:rec10$:");
+
+# (83-84) scrub it all out
+splice(@a, 0, 3);
+check_contents("");
+
+# (85-86) put some back in
+splice(@a, 0, 0, "rec0", "rec1");
+check_contents("rec0$:rec1$:");
+
+# (87-88) what if we remove too many records?
+splice(@a, 0, 17);
+check_contents("");
+
+# (89-92) In the past, splicing past the end was not correctly detected
+# (1.14)
+splice(@a, 89, 3);
+check_contents("");
+splice(@a, @a, 3);
+check_contents("");
+
+# (93-96) Also we did not emulate splice's freaky behavior when inserting
+# past the end of the array (1.14)
+splice(@a, 89, 0, "I", "like", "pie");
+check_contents("I$:like$:pie$:");
+splice(@a, 89, 0, "pie pie pie");
+check_contents("I$:like$:pie$:pie pie pie$:");
+
+# (97) Splicing with too large a negative number should be fatal
+# This test ignored because it causes 5.6.1 and 5.7.3 to dump core
+# It also garbles the stack under 5.005_03 (20020401)
+# NOT MY FAULT
+if ($] > 5.007003) {
+ eval { splice(@a, -7, 0) };
+ print $@ =~ /^Modification of non-creatable array value attempted, subscript -7/
+ ? "ok $N\n" : "not ok $N \# \$\@ was '$@'\n";
+} else {
+ print "ok $N \# skipped (versions through 5.7.3 dump core here.)\n";
+}
+$N++;
+
+# (98-101) Test default arguments
+splice @a, 0, 0, (0..11);
+splice @a, 4;
+check_contents("0$:1$:2$:3$:");
+splice @a;
+check_contents("");
+
+# (102-103) I think there's a bug here---it will fail to clear the EOF flag
+ at a = (0..11);
+splice @a, -1, 1000;
+check_contents("0$:1$:2$:3$:4$:5$:6$:7$:8$:9$:10$:");
+
+# (104-106) make sure that undefs are treated correctly---they should
+# be converted to empty records, and should not raise any warnings.
+# (Some of these failed in 0.90. The change to _fixrec fixed them.)
+# 20020331
+{
+ my $good = 1; my $warn;
+ # If any of these raise warnings, we have a problem.
+ local $SIG{__WARN__} = sub { $good = 0; $warn = shift(); ctrlfix($warn)};
+ local $^W = 1;
+ @a = (1);
+ splice @a, 1, 0, undef, undef, undef;
+ print $good ? "ok $N\n" : "not ok $N # $warn\n";
+ $N++; $good = 1;
+ print defined($a[2]) ? "ok $N\n" : "not ok $N\n";
+ $N++; $good = 1;
+ my @r = splice @a, 2;
+ print defined($r[0]) ? "ok $N\n" : "not ok $N\n";
+ $N++; $good = 1;
+}
+
+# (107-118) splice with negative length was treated wrong
+# 20020402 Reported by Juerd Waalboer
+ at a = (0..8) ;
+splice @a, 0, -3;
+check_contents("6$:7$:8$:");
+ at a = (0..8) ;
+splice @a, 1, -3;
+check_contents("0$:6$:7$:8$:");
+ at a = (0..8) ;
+splice @a, 7, -3;
+check_contents("0$:1$:2$:3$:4$:5$:6$:7$:8$:");
+ at a = (0..2) ;
+splice @a, 0, -3;
+check_contents("0$:1$:2$:");
+ at a = (0..2) ;
+splice @a, 1, -3;
+check_contents("0$:1$:2$:");
+ at a = (0..2) ;
+splice @a, 7, -3;
+check_contents("0$:1$:2$:");
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my $x = shift;
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix($a, $x);
+ print "not ok $N\n# expected <$x>, got <$a>\n";
+ }
+ $N++;
+}
+
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/05_size.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/05_size.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/05_size.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,129 @@
+#!/usr/bin/perl
+#
+# Check FETCHSIZE and SETSIZE functions
+# PUSH POP SHIFT UNSHIFT
+#
+
+use POSIX 'SEEK_SET';
+
+my $file = "tf$$.txt";
+my ($o, $n);
+
+print "1..16\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+# 2-3 FETCHSIZE 0-length file
+open F, "> $file" or die $!;
+binmode F;
+close F;
+$o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$: = $o->{recsep};
+
+$n = @a;
+print $n == 0 ? "ok $N\n" : "not ok $N # $n, s/b 0\n";
+$N++;
+
+# Reset everything
+undef $o;
+untie @a;
+
+my $data = "rec0$:rec1$:rec2$:";
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+
+$o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# 4-5 FETCHSIZE positive-length file
+$n = @a;
+print $n == 3 ? "ok $N\n" : "not ok $N # $n, s/b 0\n";
+$N++;
+
+# STORESIZE
+# (6-7) Make it longer:
+populate();
+$#a = 4;
+check_contents("$data$:$:");
+
+# (8-9) Make it longer again:
+populate();
+$#a = 6;
+check_contents("$data$:$:$:$:");
+
+# (10-11) Make it shorter:
+populate();
+$#a = 4;
+check_contents("$data$:$:");
+
+# (12-13) Make it shorter again:
+populate();
+$#a = 2;
+check_contents($data);
+
+# (14-15) Get rid of it completely:
+populate();
+$#a = -1;
+check_contents('');
+
+# (16) 20020324 I have an idea that shortening the array will not
+# expunge a cached record at the end if one is present.
+$o->defer;
+$a[3] = "record";
+my $r = $a[3];
+$#a = -1;
+$r = $a[3];
+print (! defined $r ? "ok $N\n" : "not ok $N \# was <$r>; should be UNDEF\n");
+# Turns out not to be the case---STORESIZE explicitly removes them later
+# 20020326 Well, but happily, this test did fail today.
+
+# In the past, there was a bug in STORESIZE that it didn't correctly
+# remove deleted records from the cache. This wasn't detected
+# because these tests were all done with an empty cache. populate()
+# will ensure that the cache is fully populated.
+sub populate {
+ my $z;
+ $z = $a[$_] for 0 .. $#a;
+}
+
+sub check_contents {
+ my $x = shift;
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix($a, $x);
+ print "not ok $N\n# expected <$x>, got <$a>\n";
+ }
+ $N++;
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N \# integrity\n";
+ $N++;
+}
+
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/06_fixrec.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/06_fixrec.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/06_fixrec.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+use POSIX 'SEEK_SET';
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+
+print "1..5\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+my $o = tie @a, 'Tie::File', $file, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$a[0] = 'rec0';
+check_contents("rec0$:");
+$a[1] = "rec1$:";
+check_contents("rec0$:rec1$:");
+$a[2] = "rec2$:$:"; # should we detect this?
+check_contents("rec0$:rec1$:rec2$:$:");
+
+sub check_contents {
+ my $x = shift;
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ my $msg = "not ok $N # expected <$x>, got <$a>";
+ ctrlfix($msg);
+ print "$msg\n";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/07_rv_splice.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/07_rv_splice.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/07_rv_splice.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,205 @@
+#!/usr/bin/perl
+#
+# Check SPLICE function's return value
+# (04_splice.t checks its effect on the file)
+#
+
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = "rec0$:rec1$:rec2$:";
+
+print "1..56\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++; # partial credit just for showing up
+
+init_file($data);
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+my $n;
+
+# (3-12) splicing at the beginning
+ at r = splice(@a, 0, 0, "rec4");
+check_result();
+ at r = splice(@a, 0, 1, "rec5"); # same length
+check_result("rec4");
+ at r = splice(@a, 0, 1, "record5"); # longer
+check_result("rec5");
+
+ at r = splice(@a, 0, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, 0, 1); # removal
+check_result("r5");
+ at r = splice(@a, 0, 0); # no-op
+check_result();
+ at r = splice(@a, 0, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 0, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 0, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 0, 2); # delete more than one
+check_result('record9', 'rec10');
+
+
+# (13-22) splicing in the middle
+ at r = splice(@a, 1, 0, "rec4");
+check_result();
+ at r = splice(@a, 1, 1, "rec5"); # same length
+check_result('rec4');
+ at r = splice(@a, 1, 1, "record5"); # longer
+check_result('rec5');
+
+ at r = splice(@a, 1, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, 1, 1); # removal
+check_result("r5");
+ at r = splice(@a, 1, 0); # no-op
+check_result();
+ at r = splice(@a, 1, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 1, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 1, 2); # delete more than one
+check_result('record9','rec10');
+
+# (23-32) splicing at the end
+ at r = splice(@a, 3, 0, "rec4");
+check_result();
+ at r = splice(@a, 3, 1, "rec5"); # same length
+check_result('rec4');
+ at r = splice(@a, 3, 1, "record5"); # longer
+check_result('rec5');
+
+ at r = splice(@a, 3, 1, "r5"); # shorter
+check_result('record5');
+ at r = splice(@a, 3, 1); # removal
+check_result('r5');
+ at r = splice(@a, 3, 0); # no-op
+check_result();
+ at r = splice(@a, 3, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 3, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 3, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 3, 2); # delete more than one
+check_result('record9', 'rec10');
+
+# (33-42) splicing with negative subscript
+ at r = splice(@a, -1, 0, "rec4");
+check_result();
+ at r = splice(@a, -1, 1, "rec5"); # same length
+check_result('rec2');
+ at r = splice(@a, -1, 1, "record5"); # longer
+check_result("rec5");
+
+ at r = splice(@a, -1, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, -1, 1); # removal
+check_result("r5");
+ at r = splice(@a, -1, 0); # no-op
+check_result();
+ at r = splice(@a, -1, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, -1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('rec4');
+
+ at r = splice(@a, -3, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, -4, 3); # delete more than one
+check_result('r7', 'rec8', 'record9');
+
+# (43) scrub it all out
+ at r = splice(@a, 0, 3);
+check_result('rec0', 'rec1', 'rec10');
+
+# (44) put some back in
+ at r = splice(@a, 0, 0, "rec0", "rec1");
+check_result();
+
+# (45) what if we remove too many records?
+ at r = splice(@a, 0, 17);
+check_result('rec0', 'rec1');
+
+# (46-48) Now check the scalar context return
+splice(@a, 0, 0, qw(I like pie));
+my $r;
+$r = splice(@a, 0, 0);
+print !defined($r) ? "ok $N\n" : "not ok $N \# return should have been undef, was <$r>\n";
+$N++;
+
+$r = splice(@a, 2, 1);
+print $r eq "pie$:" ? "ok $N\n" : "not ok $N \# return should have been 'pie\\n', was <$r>\n";
+$N++;
+
+$r = splice(@a, 0, 2);
+print $r eq "like$:" ? "ok $N\n" : "not ok $N \# return should have been 'like\\n', was <$r>\n";
+$N++;
+
+# (49-50) Test default arguments
+splice @a, 0, 0, (0..11);
+ at r = splice @a, 4;
+check_result(4..11);
+ at r = splice @a;
+check_result(0..3);
+
+# (51-56) splice with negative length was treated wrong
+# 20020402 Reported by Juerd Waalboer
+ at a = (0..8) ;
+ at r = splice @a, 0, -3;
+check_result(0..5);
+ at a = (0..8) ;
+ at r = splice @a, 1, -3;
+check_result(1..5);
+ at a = (0..8) ;
+ at r = splice @a, 7, -3;
+check_result();
+ at a = (0..2) ;
+ at r = splice @a, 0, -3;
+check_result();
+ at a = (0..2) ;
+ at r = splice @a, 1, -3;
+check_result();
+ at a = (0..2) ;
+ at r = splice @a, 7, -3;
+check_result();
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+# actual results are in @r.
+# expected results are in @_
+sub check_result {
+ my @x = @_;
+ s/$:$// for @r;
+ my $good = 1;
+ $good = 0 unless @r == @x;
+ for my $i (0 .. $#r) {
+ $good = 0 unless $r[$i] eq $x[$i];
+ }
+ print $good ? "ok $N\n" : "not ok $N \# was (@r); should be (@x)\n";
+ $N++;
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/08_ro.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/08_ro.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/08_ro.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+#
+# Make sure it works to open the file in read-only mode
+#
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+
+print "1..13\n";
+
+my $N = 1;
+use Tie::File;
+use Fcntl 'O_RDONLY';
+print "ok $N\n"; $N++;
+
+my @items = qw(Gold Frankincense Myrrh Ivory Apes Peacocks);
+init_file(join $:, @items, '');
+
+my $o = tie @a, 'Tie::File', $file, mode => O_RDONLY, autochomp => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$#a == $#items ? print "ok $N\n" : print "not ok $N\n";
+$N++;
+
+for my $i (0..$#items) {
+ ("$items[$i]$:" eq $a[$i]) ? print "ok $N\n" : print "not ok $N\n";
+ $N++;
+}
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+undef $o; untie @a;
+my $badrec = "Malformed";
+# (10-13) When a record lacks the record seprator, we sneakily try
+# to fix it. How does that work when the file is read-only?
+if (setup_badly_terminated_file(4)) {
+ my $good = 1;
+ my $warn;
+ local $SIG{__WARN__} = sub { $good = 0; ctrlfix($warn = shift); };
+ local $^W = 1;
+ my $o = tie @a, 'Tie::File', $file, mode => O_RDONLY, autochomp => 0
+ or die "Couldn't tie $file: $!";
+
+ print $a[0] eq "Malformed$:" ? "ok $N\n" : "not ok $N\n"; $N++;
+ print $good ? "ok $N\n" : "not ok $N # $warn\n"; $good = 1; $N++;
+ print $a[0] eq "Malformed$:" ? "ok $N\n" : "not ok $N\n"; $N++;
+ print $good ? "ok $N\n" : "not ok $N # $warn\n"; $good = 1; $N++;
+}
+
+sub setup_badly_terminated_file {
+ my $NTESTS = shift;
+ open F, "> $file" or die "Couldn't open $file: $!";
+ binmode F;
+ print F $badrec;
+ close F;
+ unless (-s $file == length $badrec) {
+ for (1 .. $NTESTS) {
+ print "ok $N \# skipped - can't create improperly terminated file\n";
+ $N++;
+ }
+ return;
+ }
+ return 1;
+}
+
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/09_gen_rs.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/09_gen_rs.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/09_gen_rs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,225 @@
+#!/usr/bin/perl
+
+my $file = "tf$$.txt";
+
+print "1..59\n";
+
+use Fcntl 'O_RDONLY';
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+$RECSEP = 'blah';
+my $o = tie @a, 'Tie::File', $file,
+ recsep => $RECSEP, autochomp => 0, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+
+# 3-4 create
+$a[0] = 'rec0';
+check_contents("rec0");
+
+# 5-8 append
+$a[1] = 'rec1';
+check_contents("rec0", "rec1");
+$a[2] = 'rec2';
+check_contents("rec0", "rec1", "rec2");
+
+# 9-14 same-length alterations
+$a[0] = 'new0';
+check_contents("new0", "rec1", "rec2");
+$a[1] = 'new1';
+check_contents("new0", "new1", "rec2");
+$a[2] = 'new2';
+check_contents("new0", "new1", "new2");
+
+# 15-24 lengthening alterations
+$a[0] = 'long0';
+check_contents("long0", "new1", "new2");
+$a[1] = 'long1';
+check_contents("long0", "long1", "new2");
+$a[2] = 'long2';
+check_contents("long0", "long1", "long2");
+$a[1] = 'longer1';
+check_contents("long0", "longer1", "long2");
+$a[0] = 'longer0';
+check_contents("longer0", "longer1", "long2");
+
+# 25-34 shortening alterations, including truncation
+$a[0] = 'short0';
+check_contents("short0", "longer1", "long2");
+$a[1] = 'short1';
+check_contents("short0", "short1", "long2");
+$a[2] = 'short2';
+check_contents("short0", "short1", "short2");
+$a[1] = 'sh1';
+check_contents("short0", "sh1", "short2");
+$a[0] = 'sh0';
+check_contents("sh0", "sh1", "short2");
+
+# (35-38) file with holes
+$a[4] = 'rec4';
+check_contents("sh0", "sh1", "short2", "", "rec4");
+$a[3] = 'rec3';
+check_contents("sh0", "sh1", "short2", "rec3", "rec4");
+
+# (39-40) zero out file
+ at a = ();
+check_contents();
+
+# (41-42) insert into the middle of an empty file
+$a[3] = "rec3";
+check_contents("", "", "", "rec3");
+
+# (43-47) 20020326 You thought there would be a bug in STORE where if
+# a cached record was false, STORE wouldn't see it at all. Yup, there is,
+# and adding the appropriate defined() test fixes the problem.
+undef $o; untie @a; 1 while unlink $file;
+$RECSEP = '0';
+$o = tie @a, 'Tie::File', $file,
+ recsep => $RECSEP, autochomp => 0, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+$#a = 2;
+my $z = $a[1]; # caches "0"
+$a[2] = "oops";
+check_contents("", "", "oops");
+$a[1] = "bah";
+check_contents("", "bah", "oops");
+undef $o; untie @a;
+
+# (48-56) 20020331 Make sure we correctly handle the case where the final
+# record of the file is not properly terminated, Through version 0.90,
+# we would mangle the file.
+my $badrec = "Malformed";
+$: = $RECSEP = Tie::File::_default_recsep();
+# (48-50)
+if (setup_badly_terminated_file(3)) {
+ $o = tie @a, 'Tie::File', $file,
+ recsep => $RECSEP, autochomp => 0, autodefer => 0
+ or die "Couldn't tie file: $!";
+ my $z = $a[0];
+ print $z eq "$badrec$:" ? "ok $N\n" :
+ "not ok $N \# got $z, expected $badrec\n";
+ $N++;
+ push @a, "next";
+ check_contents($badrec, "next");
+}
+# (51-52)
+if (setup_badly_terminated_file(2)) {
+ $o = tie @a, 'Tie::File', $file,
+ recsep => $RECSEP, autochomp => 0, autodefer => 0
+ or die "Couldn't tie file: $!";
+ splice @a, 1, 0, "x", "y";
+ check_contents($badrec, "x", "y");
+}
+# (53-56)
+if (setup_badly_terminated_file(4)) {
+ $o = tie @a, 'Tie::File', $file,
+ recsep => $RECSEP, autochomp => 0, autodefer => 0
+ or die "Couldn't tie file: $!";
+ my @r = splice @a, 0, 1, "x", "y";
+ my $n = @r;
+ print $n == 1 ? "ok $N\n" : "not ok $N \# expected 1 elt, got $n\n";
+ $N++;
+ print $r[0] eq "$badrec$:" ? "ok $N\n"
+ : "not ok $N \# expected <$badrec>, got <$r[0]>\n";
+ $N++;
+ check_contents("x", "y");
+}
+
+# (57-58) 20020402 The modification would have failed if $\ were set wrong.
+# I hate $\.
+if (setup_badly_terminated_file(2)) {
+ $o = tie @a, 'Tie::File', $file,
+ recsep => $RECSEP, autochomp => 0, autodefer => 0
+ or die "Couldn't tie file: $!";
+ { local $\ = "I hate \$\\.";
+ my $z = $a[0];
+ }
+ check_contents($badrec);
+}
+
+# (59) 20030527 Tom Christiansen pointed out that FETCH returns the wrong
+# data on the final record of an unterminated file if the file is opened
+# in read-only mode. Note that the $#a is necessary here.
+# There's special-case code to fix the final record when it is read normally.
+# But the $#a forces it to be read from the cache, which skips the
+# termination.
+$badrec = "world${RECSEP}hello";
+if (setup_badly_terminated_file(1)) {
+ tie(@a, "Tie::File", $file, mode => O_RDONLY, recsep => $RECSEP)
+ or die "Couldn't tie file: $!";
+ my $z = $#a;
+ $z = $a[1];
+ print $z eq "hello" ? "ok $N\n" :
+ "not ok $N \# got $z, expected hello\n";
+ $N++;
+}
+
+sub setup_badly_terminated_file {
+ my $NTESTS = shift;
+ open F, "> $file" or die "Couldn't open $file: $!";
+ binmode F;
+ print F $badrec;
+ close F;
+ unless (-s $file == length $badrec) {
+ for (1 .. $NTESTS) {
+ print "ok $N \# skipped - can't create improperly terminated file\n";
+ $N++;
+ }
+ return;
+ }
+ return 1;
+}
+
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my @c = @_;
+ my $x = join $RECSEP, @c, '';
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ my $a;
+ { local $/; $a = <FH> }
+
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ my $msg = "# expected <$x>, got <$a>";
+ ctrlfix($msg);
+ print "not ok $N $msg\n";
+ }
+ $N++;
+
+ # now check FETCH:
+ my $good = 1;
+ for (0.. $#c) {
+ unless ($a[$_] eq "$c[$_]$RECSEP") {
+ $msg = "expected $c[$_]$RECSEP, got $a[$_]";
+ ctrlfix($msg);
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N # fetch $msg\n";
+ $N++;
+}
+
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/10_splice_rs.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/10_splice_rs.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/10_splice_rs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,215 @@
+#!/usr/bin/perl
+#
+# Check SPLICE function's effect on the file
+# (07_rv_splice.t checks its return value)
+#
+# Each call to 'check_contents' actually performs two tests.
+# First, it calls the tied object's own 'check_integrity' method,
+# which makes sure that the contents of the read cache and offset tables
+# accurately reflect the contents of the file.
+# Then, it checks the actual contents of the file against the expected
+# contents.
+
+use POSIX 'SEEK_SET';
+
+my $file = "tf$$.txt";
+my $data = "rec0blahrec1blahrec2blah";
+
+print "1..101\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++; # partial credit just for showing up
+
+init_file($data);
+
+my $o = tie @a, 'Tie::File', $file, recsep => 'blah';
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+my $n;
+
+# (3-22) splicing at the beginning
+splice(@a, 0, 0, "rec4");
+check_contents("rec4blah$data");
+splice(@a, 0, 1, "rec5"); # same length
+check_contents("rec5blah$data");
+splice(@a, 0, 1, "record5"); # longer
+check_contents("record5blah$data");
+
+splice(@a, 0, 1, "r5"); # shorter
+check_contents("r5blah$data");
+splice(@a, 0, 1); # removal
+check_contents("$data");
+splice(@a, 0, 0); # no-op
+check_contents("$data");
+splice(@a, 0, 0, 'r7', 'rec8'); # insert more than one
+check_contents("r7blahrec8blah$data");
+splice(@a, 0, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_contents("rec7blahrecord8blahrec9blah$data");
+
+splice(@a, 0, 3, 'record9', 'rec10'); # delete more than insert
+check_contents("record9blahrec10blah$data");
+splice(@a, 0, 2); # delete more than one
+check_contents("$data");
+
+
+# (23-42) splicing in the middle
+splice(@a, 1, 0, "rec4");
+check_contents("rec0blahrec4blahrec1blahrec2blah");
+splice(@a, 1, 1, "rec5"); # same length
+check_contents("rec0blahrec5blahrec1blahrec2blah");
+splice(@a, 1, 1, "record5"); # longer
+check_contents("rec0blahrecord5blahrec1blahrec2blah");
+
+splice(@a, 1, 1, "r5"); # shorter
+check_contents("rec0blahr5blahrec1blahrec2blah");
+splice(@a, 1, 1); # removal
+check_contents("$data");
+splice(@a, 1, 0); # no-op
+check_contents("$data");
+splice(@a, 1, 0, 'r7', 'rec8'); # insert more than one
+check_contents("rec0blahr7blahrec8blahrec1blahrec2blah");
+splice(@a, 1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_contents("rec0blahrec7blahrecord8blahrec9blahrec1blahrec2blah");
+
+splice(@a, 1, 3, 'record9', 'rec10'); # delete more than insert
+check_contents("rec0blahrecord9blahrec10blahrec1blahrec2blah");
+splice(@a, 1, 2); # delete more than one
+check_contents("$data");
+
+# (43-62) splicing at the end
+splice(@a, 3, 0, "rec4");
+check_contents("$ {data}rec4blah");
+splice(@a, 3, 1, "rec5"); # same length
+check_contents("$ {data}rec5blah");
+splice(@a, 3, 1, "record5"); # longer
+check_contents("$ {data}record5blah");
+
+splice(@a, 3, 1, "r5"); # shorter
+check_contents("$ {data}r5blah");
+splice(@a, 3, 1); # removal
+check_contents("$data");
+splice(@a, 3, 0); # no-op
+check_contents("$data");
+splice(@a, 3, 0, 'r7', 'rec8'); # insert more than one
+check_contents("$ {data}r7blahrec8blah");
+splice(@a, 3, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_contents("$ {data}rec7blahrecord8blahrec9blah");
+
+splice(@a, 3, 3, 'record9', 'rec10'); # delete more than insert
+check_contents("$ {data}record9blahrec10blah");
+splice(@a, 3, 2); # delete more than one
+check_contents("$data");
+
+# (63-82) splicing with negative subscript
+splice(@a, -1, 0, "rec4");
+check_contents("rec0blahrec1blahrec4blahrec2blah");
+splice(@a, -1, 1, "rec5"); # same length
+check_contents("rec0blahrec1blahrec4blahrec5blah");
+splice(@a, -1, 1, "record5"); # longer
+check_contents("rec0blahrec1blahrec4blahrecord5blah");
+
+splice(@a, -1, 1, "r5"); # shorter
+check_contents("rec0blahrec1blahrec4blahr5blah");
+splice(@a, -1, 1); # removal
+check_contents("rec0blahrec1blahrec4blah");
+splice(@a, -1, 0); # no-op
+check_contents("rec0blahrec1blahrec4blah");
+splice(@a, -1, 0, 'r7', 'rec8'); # insert more than one
+check_contents("rec0blahrec1blahr7blahrec8blahrec4blah");
+splice(@a, -1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_contents("rec0blahrec1blahr7blahrec8blahrec7blahrecord8blahrec9blah");
+
+splice(@a, -3, 3, 'record9', 'rec10'); # delete more than insert
+check_contents("rec0blahrec1blahr7blahrec8blahrecord9blahrec10blah");
+splice(@a, -4, 3); # delete more than one
+check_contents("rec0blahrec1blahrec10blah");
+
+# (83-84) scrub it all out
+splice(@a, 0, 3);
+check_contents("");
+
+# (85-86) put some back in
+splice(@a, 0, 0, "rec0", "rec1");
+check_contents("rec0blahrec1blah");
+
+# (87-88) what if we remove too many records?
+splice(@a, 0, 17);
+check_contents("");
+
+# (89-92) In the past, splicing past the end was not correctly detected
+# (0.14)
+splice(@a, 89, 3);
+check_contents("");
+splice(@a, @a, 3);
+check_contents("");
+
+# (93-96) Also we did not emulate splice's freaky behavior when inserting
+# past the end of the array (1.14)
+splice(@a, 89, 0, "I", "like", "pie");
+check_contents("Iblahlikeblahpieblah");
+splice(@a, 89, 0, "pie pie pie");
+check_contents("Iblahlikeblahpieblahpie pie pieblah");
+
+# (97) Splicing with too large a negative number should be fatal
+# This test ignored because it causes 5.6.1 and 5.7.3 to dump core
+# It also garbles the stack under 5.005_03 (20020401)
+# NOT MY FAULT
+if ($] > 5.007003) {
+ eval { splice(@a, -7, 0) };
+ print $@ =~ /^Modification of non-creatable array value attempted, subscript -7/
+ ? "ok $N\n" : "not ok $N \# \$\@ was '$@'\n";
+} else {
+ print "ok $N \# skipped (versions through 5.7.3 dump core here.)\n";
+}
+$N++;
+
+# (98-101) Test default arguments
+splice @a, 0, 0, (0..11);
+splice @a, 4;
+check_contents("0blah1blah2blah3blah");
+splice @a;
+check_contents("");
+
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+sub check_contents {
+ my $x = shift;
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix(my $msg = "# expected <$x>, got <$a>");
+ print "not ok $N\n$msg\n";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/11_rv_splice_rs.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/11_rv_splice_rs.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/11_rv_splice_rs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,182 @@
+#!/usr/bin/perl
+#
+# Check SPLICE function's return value
+# (04_splice.t checks its effect on the file)
+#
+
+my $file = "tf$$.txt";
+my $data = "rec0blahrec1blahrec2blah";
+
+print "1..50\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++; # partial credit just for showing up
+
+init_file($data);
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 0, recsep => 'blah';
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+my $n;
+
+# (3-12) splicing at the beginning
+ at r = splice(@a, 0, 0, "rec4");
+check_result();
+ at r = splice(@a, 0, 1, "rec5"); # same length
+check_result("rec4");
+ at r = splice(@a, 0, 1, "record5"); # longer
+check_result("rec5");
+
+ at r = splice(@a, 0, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, 0, 1); # removal
+check_result("r5");
+ at r = splice(@a, 0, 0); # no-op
+check_result();
+ at r = splice(@a, 0, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 0, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 0, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 0, 2); # delete more than one
+check_result('record9', 'rec10');
+
+
+# (13-22) splicing in the middle
+ at r = splice(@a, 1, 0, "rec4");
+check_result();
+ at r = splice(@a, 1, 1, "rec5"); # same length
+check_result('rec4');
+ at r = splice(@a, 1, 1, "record5"); # longer
+check_result('rec5');
+
+ at r = splice(@a, 1, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, 1, 1); # removal
+check_result("r5");
+ at r = splice(@a, 1, 0); # no-op
+check_result();
+ at r = splice(@a, 1, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 1, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 1, 2); # delete more than one
+check_result('record9','rec10');
+
+# (23-32) splicing at the end
+ at r = splice(@a, 3, 0, "rec4");
+check_result();
+ at r = splice(@a, 3, 1, "rec5"); # same length
+check_result('rec4');
+ at r = splice(@a, 3, 1, "record5"); # longer
+check_result('rec5');
+
+ at r = splice(@a, 3, 1, "r5"); # shorter
+check_result('record5');
+ at r = splice(@a, 3, 1); # removal
+check_result('r5');
+ at r = splice(@a, 3, 0); # no-op
+check_result();
+ at r = splice(@a, 3, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 3, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 3, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 3, 2); # delete more than one
+check_result('record9', 'rec10');
+
+# (33-42) splicing with negative subscript
+ at r = splice(@a, -1, 0, "rec4");
+check_result();
+ at r = splice(@a, -1, 1, "rec5"); # same length
+check_result('rec2');
+ at r = splice(@a, -1, 1, "record5"); # longer
+check_result("rec5");
+
+ at r = splice(@a, -1, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, -1, 1); # removal
+check_result("r5");
+ at r = splice(@a, -1, 0); # no-op
+check_result();
+ at r = splice(@a, -1, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, -1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('rec4');
+
+ at r = splice(@a, -3, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, -4, 3); # delete more than one
+check_result('r7', 'rec8', 'record9');
+
+# (43) scrub it all out
+ at r = splice(@a, 0, 3);
+check_result('rec0', 'rec1', 'rec10');
+
+# (44) put some back in
+ at r = splice(@a, 0, 0, "rec0", "rec1");
+check_result();
+
+# (45) what if we remove too many records?
+ at r = splice(@a, 0, 17);
+check_result('rec0', 'rec1');
+
+# (46-48) Now check the scalar context return
+splice(@a, 0, 0, qw(I like pie));
+my $r;
+$r = splice(@a, 0, 0);
+print !defined($r) ? "ok $N\n" : "not ok $N \# return should have been undef\n";
+$N++;
+
+$r = splice(@a, 2, 1);
+print $r eq "pieblah" ? "ok $N\n" : "not ok $N \# return should have been 'pie'\n";
+$N++;
+
+$r = splice(@a, 0, 2);
+print $r eq "likeblah" ? "ok $N\n" : "not ok $N \# return should have been 'like'\n";
+$N++;
+
+# (49-50) Test default arguments
+splice @a, 0, 0, (0..11);
+ at r = splice @a, 4;
+check_result(4..11);
+ at r = splice @a;
+check_result(0..3);
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+# actual results are in @r.
+# expected results are in @_
+sub check_result {
+ my @x = @_;
+ s/blah$// for @r;
+ my $good = 1;
+ $good = 0 unless @r == @x;
+ for my $i (0 .. $#r) {
+ $good = 0 unless $r[$i] eq $x[$i];
+ }
+ print $good ? "ok $N\n" : "not ok $N \# was (@r); should be (@x)\n";
+ $N++;
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/12_longfetch_rs.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/12_longfetch_rs.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/12_longfetch_rs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+#
+# Make sure we can fetch a record in the middle of the file
+# before we've ever looked at any records before it
+#
+# (tests _fill_offsets_to() )
+#
+
+my $file = "tf$$.txt";
+my $data = "rec0blahrec1blahrec2blah";
+
+print "1..5\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 0, recsep => 'blah';
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+my $n;
+
+# 3-5
+for (2, 1, 0) {
+ print $a[$_] eq "rec${_}blah" ? "ok $N\n" : "not ok $N # rec=$a[$_] ?\n";
+ $N++;
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/13_size_rs.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/13_size_rs.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/13_size_rs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,95 @@
+#!/usr/bin/perl
+#
+# Check FETCHSIZE and SETSIZE functions
+# PUSH POP SHIFT UNSHIFT
+#
+
+use POSIX 'SEEK_SET';
+
+my $file = "tf$$.txt";
+my $data = "rec0blahrec1blahrec2blah";
+my ($o, $n);
+
+print "1..10\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+# 2-3 FETCHSIZE 0-length file
+open F, "> $file" or die $!;
+close F;
+$o = tie @a, 'Tie::File', $file, recsep => 'blah';
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+$n = @a;
+print $n == 0 ? "ok $N\n" : "not ok $N # $n, s/b 0\n";
+$N++;
+
+# Reset everything
+undef $o;
+untie @a;
+
+# 4-5 FETCHSIZE positive-length file
+open F, "> $file" or die $!;
+print F $data;
+close F;
+$o = tie @a, 'Tie::File', $file, recsep => 'blah';
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+$n = @a;
+print $n == 3 ? "ok $N\n" : "not ok $N # $n, s/b 0\n";
+$N++;
+
+# STORESIZE
+# 6 Make it longer:
+$#a = 4;
+check_contents("${data}blahblah");
+
+# 7 Make it longer again:
+$#a = 6;
+check_contents("${data}blahblahblahblah");
+
+# 8 Make it shorter:
+$#a = 4;
+check_contents("${data}blahblah");
+
+# 9 Make it shorter again:
+$#a = 2;
+check_contents($data);
+
+# 10 Get rid of it completely:
+$#a = -1;
+check_contents('');
+
+
+sub check_contents {
+ my $x = shift;
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix(my $msg = "# expected <$x>, got <$a>");
+ print "not ok $N\n$msg\n";
+ }
+ $N++;
+}
+
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/14_lock.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/14_lock.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/14_lock.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+#
+# Check flock() feature
+#
+# This isn't a real test; it just checks to make sure we can call the method.
+# It doesn't even check to make sure that the default behavior
+# (LOCK_EX) is occurring. This is because I don't know how to write a good
+# portable test for flocking. I checked the Perl core distribution,
+# and found that Perl doesn't test flock either!
+
+BEGIN {
+ eval { flock STDOUT, 0 };
+ if ($@ && $@ =~ /unimplemented/) {
+ print "1..0\n";
+ exit;
+ }
+}
+
+use Fcntl ':flock'; # This works at least back to 5.004_04
+
+my $file = "tf$$.txt";
+my ($o, $n);
+my @a;
+
+print "1..4\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+# 2-4 Who the heck knows?
+open F, "> $file" or die $!;
+close F;
+$o = tie @a, 'Tie::File', $file, recsep => 'blah';
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+print $o->flock() ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+print $o->flock(LOCK_UN) ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/15_pushpop.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/15_pushpop.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/15_pushpop.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,135 @@
+#!/usr/bin/perl
+#
+# Check PUSH, POP, SHIFT, and UNSHIFT
+#
+# Each call to 'check_contents' actually performs two tests.
+# First, it calls the tied object's own 'check_integrity' method,
+# which makes sure that the contents of the read cache and offset tables
+# accurately reflect the contents of the file.
+# Then, it checks the actual contents of the file against the expected
+# contents.
+
+use POSIX 'SEEK_SET';
+
+my $file = "tf$$.txt";
+1 while unlink $file;
+$: = Tie::File::_default_recsep();
+my $data = "rec0$:rec1$:rec2$:";
+
+print "1..38\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++; # partial credit just for showing up
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+my ($n, @r);
+
+
+# (3-11) PUSH tests
+$n = push @a, "rec0", "rec1", "rec2";
+check_contents($data);
+print $n == 3 ? "ok $N\n" : "not ok $N # size is $n, should be 3\n";
+$N++;
+
+$n = push @a, "rec3", "rec4$:";
+check_contents("$ {data}rec3$:rec4$:");
+print $n == 5 ? "ok $N\n" : "not ok $N # size is $n, should be 5\n";
+$N++;
+
+# Trivial push
+$n = push @a, ();
+check_contents("$ {data}rec3$:rec4$:");
+print $n == 5 ? "ok $N\n" : "not ok $N # size is $n, should be 5\n";
+$N++;
+
+# (12-20) POP tests
+$n = pop @a;
+check_contents("$ {data}rec3$:");
+print $n eq "rec4$:" ? "ok $N\n" : "not ok $N # last rec is $n, should be rec4\n";
+$N++;
+
+# Presumably we have already tested this to death
+splice(@a, 1, 3);
+$n = pop @a;
+check_contents("");
+print $n eq "rec0$:" ? "ok $N\n" : "not ok $N # last rec is $n, should be rec0\n";
+$N++;
+
+$n = pop @a;
+check_contents("");
+print ! defined $n ? "ok $N\n" : "not ok $N # last rec should be undef, is $n\n";
+$N++;
+
+
+# (21-29) UNSHIFT tests
+$n = unshift @a, "rec0", "rec1", "rec2";
+check_contents($data);
+print $n == 3 ? "ok $N\n" : "not ok $N # size is $n, should be 3\n";
+$N++;
+
+$n = unshift @a, "rec3", "rec4$:";
+check_contents("rec3$:rec4$:$data");
+print $n == 5 ? "ok $N\n" : "not ok $N # size is $n, should be 5\n";
+$N++;
+
+# Trivial unshift
+$n = unshift @a, ();
+check_contents("rec3$:rec4$:$data");
+print $n == 5 ? "ok $N\n" : "not ok $N # size is $n, should be 5\n";
+$N++;
+
+# (30-38) SHIFT tests
+$n = shift @a;
+check_contents("rec4$:$data");
+print $n eq "rec3$:" ? "ok $N\n" : "not ok $N # last rec is $n, should be rec3\n";
+$N++;
+
+# Presumably we have already tested this to death
+splice(@a, 1, 3);
+$n = shift @a;
+check_contents("");
+print $n eq "rec4$:" ? "ok $N\n" : "not ok $N # last rec is $n, should be rec4\n";
+$N++;
+
+$n = shift @a;
+check_contents("");
+print ! defined $n ? "ok $N\n" : "not ok $N # last rec should be undef, is $n\n";
+$N++;
+
+
+sub check_contents {
+ my $x = shift;
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix(my $msg = "# expected <$x>, got <$a>");
+ print "not ok $N\n$msg\n";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/16_handle.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/16_handle.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/16_handle.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,160 @@
+#!/usr/bin/perl
+#
+# Basic operation, initializing the object from an already-open handle
+# instead of from a filename
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+
+if ($^O =~ /vms/i) {
+ print "1..0\n";
+ exit;
+}
+
+print "1..39\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+use Fcntl 'O_CREAT', 'O_RDWR';
+sysopen F, $file, O_CREAT | O_RDWR
+ or die "Couldn't create temp file $file: $!; aborting";
+binmode F;
+
+my $o = tie @a, 'Tie::File', \*F, autochomp => 0, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# 3-4 create
+$a[0] = 'rec0';
+check_contents("rec0");
+
+# 5-8 append
+$a[1] = 'rec1';
+check_contents("rec0", "rec1");
+$a[2] = 'rec2';
+check_contents("rec0", "rec1", "rec2");
+
+# 9-14 same-length alterations
+$a[0] = 'new0';
+check_contents("new0", "rec1", "rec2");
+$a[1] = 'new1';
+check_contents("new0", "new1", "rec2");
+$a[2] = 'new2';
+check_contents("new0", "new1", "new2");
+
+# 15-24 lengthening alterations
+$a[0] = 'long0';
+check_contents("long0", "new1", "new2");
+$a[1] = 'long1';
+check_contents("long0", "long1", "new2");
+$a[2] = 'long2';
+check_contents("long0", "long1", "long2");
+$a[1] = 'longer1';
+check_contents("long0", "longer1", "long2");
+$a[0] = 'longer0';
+check_contents("longer0", "longer1", "long2");
+
+# 25-38 shortening alterations, including truncation
+$a[0] = 'short0';
+check_contents("short0", "longer1", "long2");
+$a[1] = 'short1';
+check_contents("short0", "short1", "long2");
+$a[2] = 'short2';
+check_contents("short0", "short1", "short2");
+$a[1] = 'sh1';
+check_contents("short0", "sh1", "short2");
+$a[0] = 'sh0';
+check_contents("sh0", "sh1", "short2");
+
+# file with holes
+$a[4] = 'rec4';
+check_contents("sh0", "sh1", "short2", "", "rec4");
+$a[3] = 'rec3';
+check_contents("sh0", "sh1", "short2", "rec3", "rec4");
+
+close F;
+undef $o;
+untie @a;
+
+# (39) Does it correctly detect a non-seekable handle?
+{ if ($^O =~ /^(MSWin32|dos|beos)$/) {
+ print "ok $N # skipped ($^O has broken pipe semantics)\n";
+ last;
+ }
+ if ($] < 5.006) {
+ print "ok $N # skipped - 5.005_03 panics after this test\n";
+ last;
+ }
+ my $pipe_succeeded = eval {pipe *R, *W};
+ if ($@) {
+ chomp $@;
+ print "ok $N # skipped (no pipes: $@)\n";
+ last;
+ } elsif (! $pipe_succeeded) {
+ print "ok $N # skipped (pipe call failed: $!)\n";
+ last;
+ }
+ close R;
+ $o = eval {tie @a, 'Tie::File', \*W};
+ if ($@) {
+ if ($@ =~ /filehandle does not appear to be seekable/) {
+ print "ok $N\n";
+ } else {
+ chomp $@;
+ print "not ok $N \# \$\@ is $@\n";
+ }
+ } else {
+ print "not ok $N \# passing pipe to TIEARRAY didn't abort program\n";
+ }
+ $N++;
+}
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my @c = @_;
+ my $x = join $:, @c, '';
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+# my $open = open FH, "< $file";
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix(my $msg = "# expected <$x>, got <$a>");
+ print "not ok $N\n$msg\n";
+ }
+ $N++;
+
+ # now check FETCH:
+ my $good = 1;
+ my $msg;
+ for (0.. $#c) {
+ unless ($a[$_] eq "$c[$_]$:") {
+ $msg = "expected $c[$_]$:, got $a[$_]";
+ ctrlfix($msg);
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N # $msg\n";
+ $N++;
+}
+
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
+
Added: vendor/perl/dist/dist/Tie-File/t/17_misc_meth.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/17_misc_meth.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/17_misc_meth.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,158 @@
+#!/usr/bin/perl
+#
+# Check miscellaneous tied-array interface methods
+# EXTEND, CLEAR, DELETE, EXISTS
+#
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+1 while unlink $file;
+
+print "1..35\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+my $o = tie @a, 'Tie::File', $file, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (3-8) EXTEND
+$o->EXTEND(3);
+check_contents("$:$:$:");
+$o->EXTEND(4);
+check_contents("$:$:$:$:");
+$o->EXTEND(3);
+check_contents("$:$:$:$:");
+
+# (9-10) CLEAR
+ at a = ();
+check_contents("");
+
+# (11-20) EXISTS
+if ($] >= 5.006) {
+ eval << 'TESTS';
+print !exists $a[0] ? "ok $N\n" : "not ok $N\n";
+$N++;
+$a[0] = "I like pie.";
+print exists $a[0] ? "ok $N\n" : "not ok $N\n";
+$N++;
+print !exists $a[1] ? "ok $N\n" : "not ok $N\n";
+$N++;
+$a[2] = "GIVE ME PIE";
+print exists $a[0] ? "ok $N\n" : "not ok $N\n";
+$N++;
+# exists $a[1] is not defined by this module under these circumstances
+print exists $a[1] ? "ok $N\n" : "ok $N\n";
+$N++;
+print exists $a[2] ? "ok $N\n" : "not ok $N\n";
+$N++;
+print exists $a[-1] ? "ok $N\n" : "not ok $N\n";
+$N++;
+print exists $a[-2] ? "ok $N\n" : "not ok $N\n";
+$N++;
+print exists $a[-3] ? "ok $N\n" : "not ok $N\n";
+$N++;
+print !exists $a[-4] ? "ok $N\n" : "not ok $N\n";
+$N++;
+TESTS
+ } else { # perl 5.005 doesn't have exists $array[1]
+ for (11..20) {
+ print "ok $_ \# skipped (no exists for arrays)\n";
+ $N++;
+ }
+ }
+
+my $del;
+
+# (21-35) DELETE
+if ($] >= 5.006) {
+ eval << 'TESTS';
+$del = delete $a[0];
+check_contents("$:$:GIVE ME PIE$:");
+# 20020317 Through 0.20, the 'delete' function returned the wrong values.
+expect($del, "I like pie.");
+$del = delete $a[2];
+check_contents("$:$:");
+expect($del, "GIVE ME PIE");
+$del = delete $a[0];
+check_contents("$:$:");
+expect($del, "");
+$del = delete $a[1];
+check_contents("$:");
+expect($del, "");
+
+# 20020317 Through 0.20, we had a bug where deleting an element past the
+# end of the array would actually extend the array to that length.
+$del = delete $a[4];
+check_contents("$:");
+expect($del, undef);
+
+
+
+TESTS
+ } else { # perl 5.005 doesn't have delete $array[1]
+ for (21..35) {
+ print "ok $_ \# skipped (no delete for arrays)\n";
+ $N++;
+ }
+ }
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my $x = shift;
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix(my $msg = "# expected <$x>, got <$a>");
+ print "not ok $N # $msg\n";
+ }
+ $N++;
+ print $o->_check_integrity($file, $ENV{INTEGRITY}) ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub expect {
+ if (@_ == 1) {
+ print $_[0] ? "ok $N\n" : "not ok $N\n";
+ } elsif (@_ == 2) {
+ my ($a, $x) = @_;
+ if (! defined($a) && ! defined($x)) { print "ok $N\n" }
+ elsif ( defined($a) && ! defined($x)) {
+ ctrlfix(my $msg = "expected UNDEF, got <$a>");
+ print "not ok $N \# $msg\n";
+ }
+ elsif (! defined($a) && defined($x)) {
+ ctrlfix(my $msg = "expected <$x>, got UNDEF");
+ print "not ok $N \# $msg\n";
+ } elsif ($a eq $x) { print "ok $N\n" }
+ else {
+ ctrlfix(my $msg = "expected <$x>, got <$a>");
+ print "not ok $N \# $msg\n";
+ }
+ } else {
+ die "expect() got ", scalar(@_), " args, should have been 1 or 2";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
+
Added: vendor/perl/dist/dist/Tie-File/t/18_rs_fixrec.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/18_rs_fixrec.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/18_rs_fixrec.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+use POSIX 'SEEK_SET';
+my $file = "tf$$.txt";
+$/ = "blah";
+
+print "1..5\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+my $o = tie @a, 'Tie::File', $file, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$a[0] = 'rec0';
+check_contents("rec0blah");
+$a[1] = "rec1blah";
+check_contents("rec0blahrec1blah");
+$a[2] = "rec2blahblah"; # should we detect this?
+check_contents("rec0blahrec1blahrec2blahblah");
+
+sub check_contents {
+ my $x = shift;
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ my $msg = "not ok $N # expected <$x>, got <$a>";
+ ctrlfix($msg);
+ print "$msg\n";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/19_cache.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/19_cache.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/19_cache.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,205 @@
+#!/usr/bin/perl
+#
+# Tests for various caching errors
+#
+
+$|=1;
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = join $:, "rec0" .. "rec9", "";
+my $V = $ENV{INTEGRITY}; # Verbose integrity checking?
+
+print "1..55\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+
+my $o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (3) Through 0.18, this 'splice' call would corrupt the cache.
+my @z = @a; # force cache to contain all ten records
+splice @a, 0, 0, "x";
+print $o->_check_integrity($file, $V) ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# Here we redo *all* the splice tests, with populate()
+# calls before each one, to make sure that splice() does not botch the cache.
+
+# (4-14) splicing at the beginning
+check();
+splice(@a, 0, 0, "rec4");
+check();
+splice(@a, 0, 1, "rec5"); # same length
+check();
+splice(@a, 0, 1, "record5"); # longer
+check();
+splice(@a, 0, 1, "r5"); # shorter
+check();
+splice(@a, 0, 1); # removal
+check();
+splice(@a, 0, 0); # no-op
+check();
+
+splice(@a, 0, 0, 'r7', 'rec8'); # insert more than one
+check();
+splice(@a, 0, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check();
+splice(@a, 0, 3, 'record9', 'rec10'); # delete more than insert
+check();
+splice(@a, 0, 2); # delete more than one
+check();
+
+
+# (15-24) splicing in the middle
+splice(@a, 1, 0, "rec4");
+check();
+splice(@a, 1, 1, "rec5"); # same length
+check();
+splice(@a, 1, 1, "record5"); # longer
+check();
+splice(@a, 1, 1, "r5"); # shorter
+check();
+splice(@a, 1, 1); # removal
+check();
+splice(@a, 1, 0); # no-op
+check();
+
+splice(@a, 1, 0, 'r7', 'rec8'); # insert more than one
+check();
+splice(@a, 1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check();
+splice(@a, 1, 3, 'record9', 'rec10'); # delete more than insert
+check();
+splice(@a, 1, 2); # delete more than one
+check();
+
+# (25-34) splicing at the end
+splice(@a, 3, 0, "rec4");
+check();
+splice(@a, 3, 1, "rec5"); # same length
+check();
+splice(@a, 3, 1, "record5"); # longer
+check();
+splice(@a, 3, 1, "r5"); # shorter
+check();
+splice(@a, 3, 1); # removal
+check();
+splice(@a, 3, 0); # no-op
+check();
+
+splice(@a, 3, 0, 'r7', 'rec8'); # insert more than one
+check();
+splice(@a, 3, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check();
+splice(@a, 3, 3, 'record9', 'rec10'); # delete more than insert
+check();
+splice(@a, 3, 2); # delete more than one
+check();
+
+# (35-44) splicing with negative subscript
+splice(@a, -1, 0, "rec4");
+check();
+splice(@a, -1, 1, "rec5"); # same length
+check();
+splice(@a, -1, 1, "record5"); # longer
+check();
+splice(@a, -1, 1, "r5"); # shorter
+check();
+splice(@a, -1, 1); # removal
+check();
+splice(@a, -1, 0); # no-op
+check();
+
+splice(@a, -1, 0, 'r7', 'rec8'); # insert more than one
+check();
+splice(@a, -1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check();
+splice(@a, -3, 3, 'record9', 'rec10'); # delete more than insert
+check();
+splice(@a, -4, 3); # delete more than one
+check();
+
+# (45) scrub it all out
+splice(@a, 0, 3);
+check();
+
+# (46) put some back in
+splice(@a, 0, 0, "rec0", "rec1");
+check();
+
+# (47) what if we remove too many records?
+splice(@a, 0, 17);
+check();
+
+# (48-49) In the past, splicing past the end was not correctly detected
+# (1.14)
+splice(@a, 89, 3);
+check();
+splice(@a, @a, 3);
+check();
+
+# (50-51) Also we did not emulate splice's freaky behavior when inserting
+# past the end of the array (1.14)
+splice(@a, 89, 0, "I", "like", "pie");
+check();
+splice(@a, 89, 0, "pie pie pie");
+check();
+
+# (52-54) Test default arguments
+splice @a, 0, 0, (0..11);
+check();
+splice @a, 4;
+check();
+splice @a;
+check();
+
+# (55) This was broken on 20030507 when you moved the cache management
+# stuff out of _oadjust back into _splice without also putting it back
+# into _store.
+ at a = (0..11);
+check();
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+sub check {
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+ repopulate();
+}
+
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+sub repopulate {
+ $o->{cache}->empty;
+ my @z = @a; # refill the cache with correct data
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
+
+
Added: vendor/perl/dist/dist/Tie-File/t/20_cache_full.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/20_cache_full.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/20_cache_full.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,228 @@
+#!/usr/bin/perl
+#
+# Tests for various caching errors
+#
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = join $:, "record0" .. "record9", "";
+my $V = $ENV{INTEGRITY}; # Verbose integrity checking?
+
+print "1..111\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+
+# Limit cache size to 30 bytes
+my $MAX = 30;
+# -- that's enough space for 3 records, but not 4, on both \n and \r\n systems
+my $o = tie @a, 'Tie::File', $file, memory => $MAX, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (3-5) Let's see if data was properly expired from the cache
+my @z = @a; # force cache to contain all ten records
+# It should now contain only the *last* three records, 7, 8, and 9
+{
+ my $x = "7 8 9";
+ my $a = join " ", sort $o->{cache}->ckeys;
+ if ($a eq $x) { print "ok $N\n" }
+ else { print "not ok $N # cache keys were <$a>; expected <$x>\n" }
+ $N++;
+}
+check();
+
+# Here we redo *all* the splice tests, with populate()
+# calls before each one, to make sure that splice() does not botch the cache.
+
+# (6-25) splicing at the beginning
+splice(@a, 0, 0, "rec4");
+check();
+splice(@a, 0, 1, "rec5"); # same length
+check();
+splice(@a, 0, 1, "record5"); # longer
+check();
+splice(@a, 0, 1, "r5"); # shorter
+check();
+splice(@a, 0, 1); # removal
+check();
+splice(@a, 0, 0); # no-op
+check();
+
+splice(@a, 0, 0, 'r7', 'rec8'); # insert more than one
+check();
+splice(@a, 0, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check();
+splice(@a, 0, 3, 'record9', 'rec10'); # delete more than insert
+check();
+splice(@a, 0, 2); # delete more than one
+check();
+
+
+# (26-45) splicing in the middle
+splice(@a, 1, 0, "rec4");
+check();
+splice(@a, 1, 1, "rec5"); # same length
+check();
+splice(@a, 1, 1, "record5"); # longer
+check();
+splice(@a, 1, 1, "r5"); # shorter
+check();
+splice(@a, 1, 1); # removal
+check();
+splice(@a, 1, 0); # no-op
+check();
+
+splice(@a, 1, 0, 'r7', 'rec8'); # insert more than one
+check();
+splice(@a, 1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check();
+splice(@a, 1, 3, 'record9', 'rec10'); # delete more than insert
+check();
+splice(@a, 1, 2); # delete more than one
+check();
+
+# (46-65) splicing at the end
+splice(@a, 3, 0, "rec4");
+check();
+splice(@a, 3, 1, "rec5"); # same length
+check();
+splice(@a, 3, 1, "record5"); # longer
+check();
+splice(@a, 3, 1, "r5"); # shorter
+check();
+splice(@a, 3, 1); # removal
+check();
+splice(@a, 3, 0); # no-op
+check();
+
+splice(@a, 3, 0, 'r7', 'rec8'); # insert more than one
+check();
+splice(@a, 3, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check();
+splice(@a, 3, 3, 'record9', 'rec10'); # delete more than insert
+check();
+splice(@a, 3, 2); # delete more than one
+check();
+
+# (66-85) splicing with negative subscript
+splice(@a, -1, 0, "rec4");
+check();
+splice(@a, -1, 1, "rec5"); # same length
+check();
+splice(@a, -1, 1, "record5"); # longer
+check();
+splice(@a, -1, 1, "r5"); # shorter
+check();
+splice(@a, -1, 1); # removal
+check();
+splice(@a, -1, 0); # no-op
+check();
+
+splice(@a, -1, 0, 'r7', 'rec8'); # insert more than one
+check();
+splice(@a, -1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check();
+splice(@a, -3, 3, 'record9', 'rec10'); # delete more than insert
+check();
+splice(@a, -4, 3); # delete more than one
+check();
+
+# (86-87) scrub it all out
+splice(@a, 0, 3);
+check();
+
+# (88-89) put some back in
+splice(@a, 0, 0, "rec0", "rec1");
+check();
+
+# (90-91) what if we remove too many records?
+splice(@a, 0, 17);
+check();
+
+# (92-95) In the past, splicing past the end was not correctly detected
+# (1.14)
+splice(@a, 89, 3);
+check();
+splice(@a, @a, 3);
+check();
+
+# (96-99) Also we did not emulate splice's freaky behavior when inserting
+# past the end of the array (1.14)
+splice(@a, 89, 0, "I", "like", "pie");
+check();
+splice(@a, 89, 0, "pie pie pie");
+check();
+
+# (100-105) Test default arguments
+splice @a, 0, 0, (0..11);
+check();
+splice @a, 4;
+check();
+splice @a;
+check();
+
+# (106-111) One last set of tests. I don't know what state the cache
+# is in now. But if I read any three records, those three records are
+# what should be in the cache, and nothing else.
+ at a = "record0" .. "record9";
+check(); # In 0.18 #107 fails here--STORE was not flushing the cache when
+ # replacing an old cached record with a longer one
+for (5, 6, 1) { my $z = $a[$_] }
+{
+ my $x = "5 6 1";
+ my $a = join " ", $o->{cache}->_produce_lru;
+ if ($a eq $x) { print "ok $N\n" }
+ else { print "not ok $N # LRU was <$a>; expected <$x>\n" }
+ $N++;
+ $x = "1 5 6";
+ $a = join " ", sort $o->{cache}->ckeys;
+ if ($a eq $x) { print "ok $N\n" }
+ else { print "not ok $N # cache keys were <$a>; expected <$x>\n" }
+ $N++;
+}
+check();
+
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+sub check {
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+
+ my $b = $o->{cache}->bytes;
+ print $b <= $MAX
+ ? "ok $N\n"
+ : "not ok $N # $b bytes cached, should be <= $MAX\n";
+ $N++;
+}
+
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
+
+
Added: vendor/perl/dist/dist/Tie-File/t/21_win32.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/21_win32.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/21_win32.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+#
+# Formerly, on a Win32 system, Tie::File would create files with
+# \n-terminated records instead of \r\n-terminated. The tests never
+# picked this up because they were using $/ everywhere, and $/ is \n
+# on windows systems.
+#
+# These tests (Win32 only) make sure that the file had \r\n as it should.
+
+my $file = "tf$$.txt";
+
+unless ($^O =~ /^(MSWin32|dos)$/) {
+ print "1..0\n";
+ exit;
+}
+
+
+print "1..3\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+my $o = tie @a, 'Tie::File', $file, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+my $n;
+
+# (3) Make sure that on Win32 systems, the file is written with \r\n by default
+ at a = qw(fish dog carrot);
+undef $o;
+untie @a;
+open F, "< $file" or die "Couldn't open file $file: $!";
+binmode F;
+my $a = do {local $/ ; <F> };
+my $x = "fish\r\ndog\r\ncarrot\r\n" ;
+if ($a eq $x) {
+ print "ok $N\n";
+} else {
+ ctrlfix(my $msg = "expected <$x>, got <$a>");
+ print "not ok $N # $msg\n";
+}
+
+close F;
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/22_autochomp.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/22_autochomp.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/22_autochomp.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,175 @@
+#!/usr/bin/perl
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+
+print "1..71\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 1, autodefer => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# 3-5 create
+$a[0] = 'rec0';
+check_contents("rec0");
+
+# 6-11 append
+$a[1] = 'rec1';
+check_contents("rec0", "rec1");
+$a[2] = 'rec2';
+check_contents("rec0", "rec1", "rec2");
+
+# 12-20 same-length alterations
+$a[0] = 'new0';
+check_contents("new0", "rec1", "rec2");
+$a[1] = 'new1';
+check_contents("new0", "new1", "rec2");
+$a[2] = 'new2';
+check_contents("new0", "new1", "new2");
+
+# 21-35 lengthening alterations
+$a[0] = 'long0';
+check_contents("long0", "new1", "new2");
+$a[1] = 'long1';
+check_contents("long0", "long1", "new2");
+$a[2] = 'long2';
+check_contents("long0", "long1", "long2");
+$a[1] = 'longer1';
+check_contents("long0", "longer1", "long2");
+$a[0] = 'longer0';
+check_contents("longer0", "longer1", "long2");
+
+# 36-50 shortening alterations, including truncation
+$a[0] = 'short0';
+check_contents("short0", "longer1", "long2");
+$a[1] = 'short1';
+check_contents("short0", "short1", "long2");
+$a[2] = 'short2';
+check_contents("short0", "short1", "short2");
+$a[1] = 'sh1';
+check_contents("short0", "sh1", "short2");
+$a[0] = 'sh0';
+check_contents("sh0", "sh1", "short2");
+
+# (51-56) file with holes
+$a[4] = 'rec4';
+check_contents("sh0", "sh1", "short2", "", "rec4");
+$a[3] = 'rec3';
+check_contents("sh0", "sh1", "short2", "rec3", "rec4");
+
+# (57-59) zero out file
+ at a = ();
+check_contents();
+
+# (60-62) insert into the middle of an empty file
+$a[3] = "rec3";
+check_contents("", "", "", "rec3");
+
+# (63-68) Test the ->autochomp() method
+ at a = qw(Gold Frankincense Myrrh);
+my $ac;
+$ac = $o->autochomp();
+expect($ac);
+# See if that accidentally changed it
+$ac = $o->autochomp();
+expect($ac);
+# Now clear it
+$ac = $o->autochomp(0);
+expect($ac);
+expect(join("-", @a), "Gold$:-Frankincense$:-Myrrh$:");
+# Now set it again
+$ac = $o->autochomp(1);
+expect(!$ac);
+expect(join("-", @a), "Gold-Frankincense-Myrrh");
+
+# (69) Does 'splice' work correctly with autochomp?
+my @sr;
+ at sr = splice @a, 0, 2;
+expect(join("-", @sr), "Gold-Frankincense");
+
+# (70-71) Didn't you forget that fetch may return an unchomped cached record?
+$a1 = $a[0]; # populate cache
+$a2 = $a[0];
+expect($a1, "Myrrh");
+expect($a2, "Myrrh");
+# Actually no, you didn't---_fetch might return such a record, but
+# the chomping is done by FETCH.
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my @c = @_;
+ my $x = join $:, @c, '';
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+# my $open = open FH, "< $file";
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix($a, $x);
+ print "not ok $N\n# expected <$x>, got <$a>\n";
+ }
+ $N++;
+
+ # now check FETCH:
+ my $good = 1;
+ my $msg;
+ for (0.. $#c) {
+ my $aa = $a[$_];
+ unless ($aa eq $c[$_]) {
+ $msg = "expected <$c[$_]>, got <$aa>";
+ ctrlfix($msg);
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N # $msg\n";
+ $N++;
+
+ print $o->_check_integrity($file, $ENV{INTEGRITY})
+ ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub expect {
+ if (@_ == 1) {
+ print $_[0] ? "ok $N\n" : "not ok $N\n";
+ } elsif (@_ == 2) {
+ my ($a, $x) = @_;
+ if (! defined($a) && ! defined($x)) { print "ok $N\n" }
+ elsif ( defined($a) && ! defined($x)) {
+ ctrlfix(my $msg = "expected UNDEF, got <$a>");
+ print "not ok $N \# $msg\n";
+ }
+ elsif (! defined($a) && defined($x)) {
+ ctrlfix(my $msg = "expected <$x>, got UNDEF");
+ print "not ok $N \# $msg\n";
+ } elsif ($a eq $x) { print "ok $N\n" }
+ else {
+ ctrlfix(my $msg = "expected <$x>, got <$a>");
+ print "not ok $N \# $msg\n";
+ }
+ } else {
+ die "expect() got ", scalar(@_), " args, should have been 1 or 2";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/23_rv_ac_splice.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/23_rv_ac_splice.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/23_rv_ac_splice.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,182 @@
+#!/usr/bin/perl
+#
+# Check SPLICE function's return value when autochoping is now
+# (07_rv_splice.t checks it aith autochomping off)
+#
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = "rec0$:rec1$:rec2$:";
+
+print "1..50\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++; # partial credit just for showing up
+
+init_file($data);
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 1;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+my $n;
+
+# (3-12) splicing at the beginning
+ at r = splice(@a, 0, 0, "rec4");
+check_result();
+ at r = splice(@a, 0, 1, "rec5"); # same length
+check_result("rec4");
+ at r = splice(@a, 0, 1, "record5"); # longer
+check_result("rec5");
+
+ at r = splice(@a, 0, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, 0, 1); # removal
+check_result("r5");
+ at r = splice(@a, 0, 0); # no-op
+check_result();
+ at r = splice(@a, 0, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 0, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 0, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 0, 2); # delete more than one
+check_result('record9', 'rec10');
+
+
+# (13-22) splicing in the middle
+ at r = splice(@a, 1, 0, "rec4");
+check_result();
+ at r = splice(@a, 1, 1, "rec5"); # same length
+check_result('rec4');
+ at r = splice(@a, 1, 1, "record5"); # longer
+check_result('rec5');
+
+ at r = splice(@a, 1, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, 1, 1); # removal
+check_result("r5");
+ at r = splice(@a, 1, 0); # no-op
+check_result();
+ at r = splice(@a, 1, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 1, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 1, 2); # delete more than one
+check_result('record9','rec10');
+
+# (23-32) splicing at the end
+ at r = splice(@a, 3, 0, "rec4");
+check_result();
+ at r = splice(@a, 3, 1, "rec5"); # same length
+check_result('rec4');
+ at r = splice(@a, 3, 1, "record5"); # longer
+check_result('rec5');
+
+ at r = splice(@a, 3, 1, "r5"); # shorter
+check_result('record5');
+ at r = splice(@a, 3, 1); # removal
+check_result('r5');
+ at r = splice(@a, 3, 0); # no-op
+check_result();
+ at r = splice(@a, 3, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, 3, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('r7', 'rec8');
+
+ at r = splice(@a, 3, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, 3, 2); # delete more than one
+check_result('record9', 'rec10');
+
+# (33-42) splicing with negative subscript
+ at r = splice(@a, -1, 0, "rec4");
+check_result();
+ at r = splice(@a, -1, 1, "rec5"); # same length
+check_result('rec2');
+ at r = splice(@a, -1, 1, "record5"); # longer
+check_result("rec5");
+
+ at r = splice(@a, -1, 1, "r5"); # shorter
+check_result("record5");
+ at r = splice(@a, -1, 1); # removal
+check_result("r5");
+ at r = splice(@a, -1, 0); # no-op
+check_result();
+ at r = splice(@a, -1, 0, 'r7', 'rec8'); # insert more than one
+check_result();
+ at r = splice(@a, -1, 2, 'rec7', 'record8', 'rec9'); # insert more than delete
+check_result('rec4');
+
+ at r = splice(@a, -3, 3, 'record9', 'rec10'); # delete more than insert
+check_result('rec7', 'record8', 'rec9');
+ at r = splice(@a, -4, 3); # delete more than one
+check_result('r7', 'rec8', 'record9');
+
+# (43) scrub it all out
+ at r = splice(@a, 0, 3);
+check_result('rec0', 'rec1', 'rec10');
+
+# (44) put some back in
+ at r = splice(@a, 0, 0, "rec0", "rec1");
+check_result();
+
+# (45) what if we remove too many records?
+ at r = splice(@a, 0, 17);
+check_result('rec0', 'rec1');
+
+# (46-48) Now check the scalar context return
+splice(@a, 0, 0, qw(I like pie));
+my $r;
+$r = splice(@a, 0, 0);
+print !defined($r) ? "ok $N\n" : "not ok $N \# return should have been undef, was <$r>\n";
+$N++;
+
+$r = splice(@a, 2, 1);
+print $r eq "pie" ? "ok $N\n" : "not ok $N \# return should have been 'pie', was <$r>\n";
+$N++;
+
+$r = splice(@a, 0, 2);
+print $r eq "like" ? "ok $N\n" : "not ok $N \# return should have been 'like', was <$r>\n";
+$N++;
+
+# (49-50) Test default arguments
+splice @a, 0, 0, (0..11);
+ at r = splice @a, 4;
+check_result(4..11);
+ at r = splice @a;
+check_result(0..3);
+
+sub init_file {
+ my $data = shift;
+ open F, "> $file" or die $!;
+ binmode F;
+ print F $data;
+ close F;
+}
+
+# actual results are in @r.
+# expected results are in @_
+sub check_result {
+ my @x = @_;
+ my $good = 1;
+ $good = 0 unless @r == @x;
+ for my $i (0 .. $#r) {
+ $good = 0 unless $r[$i] eq $x[$i];
+ }
+ print $good ? "ok $N\n" : "not ok $N \# was (@r); should be (@x)\n";
+ $N++;
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/24_cache_loop.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/24_cache_loop.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/24_cache_loop.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,55 @@
+#!/usr/bin/perl
+#
+# Tests for various caching errors
+#
+
+use Config;
+my $file = "tf$$.txt";
+unless ($Config{d_alarm}) {
+ print "1..0\n"; exit;
+}
+
+$: = Tie::File::_default_recsep();
+my $data = join $:, "record0" .. "record9", "";
+my $V = $ENV{INTEGRITY}; # Verbose integrity checking?
+
+print "1..3\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+
+# Limit cache size to 30 bytes
+my $MAX = 30;
+# -- that's enough space for 3 records, but not 4, on both \n and \r\n systems
+my $o = tie @a, 'Tie::File', $file, memory => $MAX, autodefer => 1;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (3) In 0.50 this goes into an infinite loop. Explanation:
+#
+# Suppose you overfill the defer buffer by so much that the memory
+# limit is also exceeded. You'll go into _splice to prepare to
+# write out the defer buffer, and _splice will call _fetch, which
+# will then try to flush the read cache---but the read cache is
+# already empty, so you're stuck in an infinite loop.
+#
+# Five seconds should be plenty of time for it to complete if it works.
+alarm 5 unless $^P;
+ at a = "record0" .. "record9";
+print "ok 3\n";
+alarm 0;
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
+
+
Added: vendor/perl/dist/dist/Tie-File/t/25_gen_nocache.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/25_gen_nocache.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/25_gen_nocache.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,137 @@
+#!/usr/bin/perl
+#
+# Regular read-write tests with caching disabled
+# (Same as 01_gen.t)
+#
+my $file = "tf$$.txt";
+
+print "1..68\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+my $o = tie @a, 'Tie::File', $file, autochomp => 0, autodefer => 0, memory => 0;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+$: = $o->{recsep};
+
+# 3-5 create
+$a[0] = 'rec0';
+check_contents("rec0");
+
+# 6-11 append
+$a[1] = 'rec1';
+check_contents("rec0", "rec1");
+$a[2] = 'rec2';
+check_contents("rec0", "rec1", "rec2");
+
+# 12-20 same-length alterations
+$a[0] = 'new0';
+check_contents("new0", "rec1", "rec2");
+$a[1] = 'new1';
+check_contents("new0", "new1", "rec2");
+$a[2] = 'new2';
+check_contents("new0", "new1", "new2");
+
+# 21-35 lengthening alterations
+$a[0] = 'long0';
+check_contents("long0", "new1", "new2");
+$a[1] = 'long1';
+check_contents("long0", "long1", "new2");
+$a[2] = 'long2';
+check_contents("long0", "long1", "long2");
+$a[1] = 'longer1';
+check_contents("long0", "longer1", "long2");
+$a[0] = 'longer0';
+check_contents("longer0", "longer1", "long2");
+
+# 36-50 shortening alterations, including truncation
+$a[0] = 'short0';
+check_contents("short0", "longer1", "long2");
+$a[1] = 'short1';
+check_contents("short0", "short1", "long2");
+$a[2] = 'short2';
+check_contents("short0", "short1", "short2");
+$a[1] = 'sh1';
+check_contents("short0", "sh1", "short2");
+$a[0] = 'sh0';
+check_contents("sh0", "sh1", "short2");
+
+# (51-56) file with holes
+$a[4] = 'rec4';
+check_contents("sh0", "sh1", "short2", "", "rec4");
+$a[3] = 'rec3';
+check_contents("sh0", "sh1", "short2", "rec3", "rec4");
+
+# (57-59) zero out file
+ at a = ();
+check_contents();
+
+# (60-62) insert into the middle of an empty file
+$a[3] = "rec3";
+check_contents("", "", "", "rec3");
+
+# (63-68) 20020326 You thought there would be a bug in STORE where if
+# a cached record was false, STORE wouldn't see it at all. But you
+# forgot that records always come back from the cache with the record
+# separator attached, so they are unlikely to be false. The only
+# really weird case is when the cached record is empty and the record
+# separator is "0". Test that in 09_gen_rs.t.
+$a[1] = "0";
+check_contents("", "0", "", "rec3");
+$a[1] = "whoops";
+check_contents("", "whoops", "", "rec3");
+
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my @c = @_;
+ my $x = join $:, @c, '';
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+# my $open = open FH, "< $file";
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix($a, $x);
+ print "not ok $N\n# expected <$x>, got <$a>\n";
+ }
+ $N++;
+
+ # now check FETCH:
+ my $good = 1;
+ my $msg;
+ for (0.. $#c) {
+ my $aa = $a[$_];
+ unless ($aa eq "$c[$_]$:") {
+ $msg = "expected <$c[$_]$:>, got <$aa>";
+ ctrlfix($msg);
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N # $msg\n";
+ $N++;
+
+ print $o->_check_integrity($file, $ENV{INTEGRITY})
+ ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/26_twrite.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/26_twrite.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/26_twrite.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,359 @@
+#!/usr/bin/perl
+#
+# Unit tests of _twrite function
+#
+# _twrite($self, $data, $pos, $len)
+#
+# 't' here is for 'tail'. This writes $data at absolute position $pos
+# in the file, overwriting exactly $len of the bytes at that position.
+# Everything else is moved down or up, dependong on whether
+# length($data) > $len or length($data) < $len.
+# $len == 0 is a pure insert; $len == length($data) is a simple overwrite.
+#
+
+my $file = "tf$$.txt";
+
+print "1..181\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+$: = Tie::File::_default_recsep();
+
+# (2) Peter Scott sent this one. It fails in 0.51 and works in 0.90
+# <4.3.2.7.2.20020331102819.00b913d0 at shell2.webquarry.com>
+#
+# The problem was premature termination in the inner loop
+# because you had $more_data scoped *inside* the block instead of outside.
+# 20020331
+open F, "> $file" or die "Couldn't open $file: $!";
+binmode F;
+for (1..100) {
+ print F "$_ ", 'a'x150, $: ;
+}
+close F;
+# The file is now 15292 characters long on Unix, 15392 on Win32
+die -s $file unless -s $file == 15292 + 100 * length($:);
+
+tie my @lines, 'Tie::File', $file or die $!;
+push @lines, "1001 ".('a' x 100);
+splice @lines, 0, 1;
+untie @lines;
+
+my $s = -s $file;
+my $x = 15292 - 152 + 105 + 100*length($:);
+print $s == $x
+ ? "ok $N\n" : "not ok $N # expected $x, got $s\n";
+$N++;
+
+my @subtests = qw(x <x x> x><x <x> <x><x x><x> <x><x> <x><x><x> 0);
+
+# (3-73) These were generated by 'gentests.pl' to cover all possible cases
+# (I hope)
+# Legend:
+# x: data is entirely contained within one block
+# x>: data runs from the middle to the end of the block
+# <x: data runs from the start to the middle of the block
+# <x>: data occupies precisely one block
+# x><x: data overlaps one block boundary
+# <x><x: data runs from the start of one block into the middle of the next
+# x><x>: data runs from the middle of one block to the end of the next
+# <x><x>: data occupies two blocks exactly
+# <x><x><x>: data occupies three blocks exactly
+# 0: data is null
+#
+# For each possible alignment of the old and new data, we investigate
+# up to three situations: old data is shorter, old and new data are the
+# same length, and new data is shorter.
+#
+# try($pos, $old, $new) means to run a test where the data starts at
+# position $pos, the old data has length $old,
+# and the new data has length $new.
+try( 9659, 6635, 6691); # old=x , new=x ; old < new
+try( 8605, 2394, 2394); # old=x , new=x ; old = new
+try( 9768, 1361, 664); # old=x , new=x ; old > new
+try( 9955, 6429, 6429); # old=x> , new=x ; old = new
+try(10550, 5834, 4123); # old=x> , new=x ; old > new
+try(14580, 6158, 851); # old=x><x , new=x ; old > new
+try(13442, 11134, 1572); # old=x><x> , new=x ; old > new
+try( 8394, 0, 5742); # old=0 , new=x ; old < new
+try( 8192, 2819, 6738); # old=<x , new=<x ; old < new
+try( 8192, 514, 514); # old=<x , new=<x ; old = new
+try( 8192, 2196, 858); # old=<x , new=<x ; old > new
+try( 8192, 8192, 8192); # old=<x> , new=<x ; old = new
+try( 8192, 8192, 1290); # old=<x> , new=<x ; old > new
+try( 8192, 10575, 6644); # old=<x><x , new=<x ; old > new
+try( 8192, 16384, 5616); # old=<x><x> , new=<x ; old > new
+try( 8192, 24576, 6253); # old=<x><x><x>, new=<x ; old > new
+try( 8192, 0, 6870); # old=0 , new=<x ; old < new
+try( 8478, 6259, 7906); # old=x , new=x> ; old < new
+try( 9965, 6419, 6419); # old=x> , new=x> ; old = new
+try(16059, 6102, 325); # old=x><x , new=x> ; old > new
+try( 9503, 15073, 6881); # old=x><x> , new=x> ; old > new
+try( 9759, 0, 6625); # old=0 , new=x> ; old < new
+try( 8525, 2081, 8534); # old=x , new=x><x ; old < new
+try(15550, 834, 1428); # old=x> , new=x><x ; old < new
+try(14966, 1668, 3479); # old=x><x , new=x><x ; old < new
+try(16316, 1605, 1605); # old=x><x , new=x><x ; old = new
+try(16093, 4074, 993); # old=x><x , new=x><x ; old > new
+try(14739, 9837, 9837); # old=x><x> , new=x><x ; old = new
+try(14071, 10505, 7344); # old=x><x> , new=x><x ; old > new
+try(12602, 0, 8354); # old=0 , new=x><x ; old < new
+try( 8192, 2767, 8192); # old=<x , new=<x> ; old < new
+try( 8192, 8192, 8192); # old=<x> , new=<x> ; old = new
+try( 8192, 14817, 8192); # old=<x><x , new=<x> ; old > new
+try( 8192, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try( 8192, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try( 8192, 0, 8192); # old=0 , new=<x> ; old < new
+try( 8192, 6532, 10882); # old=<x , new=<x><x ; old < new
+try( 8192, 8192, 16044); # old=<x> , new=<x><x ; old < new
+try( 8192, 9555, 11020); # old=<x><x , new=<x><x ; old < new
+try( 8192, 9001, 9001); # old=<x><x , new=<x><x ; old = new
+try( 8192, 11760, 10274); # old=<x><x , new=<x><x ; old > new
+try( 8192, 16384, 10781); # old=<x><x> , new=<x><x ; old > new
+try( 8192, 24576, 9284); # old=<x><x><x>, new=<x><x ; old > new
+try( 8192, 0, 12488); # old=0 , new=<x><x ; old < new
+try( 8222, 6385, 16354); # old=x , new=x><x> ; old < new
+try(13500, 2884, 11076); # old=x> , new=x><x> ; old < new
+try(14069, 4334, 10507); # old=x><x , new=x><x> ; old < new
+try(14761, 9815, 9815); # old=x><x> , new=x><x> ; old = new
+try(10469, 0, 14107); # old=0 , new=x><x> ; old < new
+try( 8192, 4181, 16384); # old=<x , new=<x><x> ; old < new
+try( 8192, 8192, 16384); # old=<x> , new=<x><x> ; old < new
+try( 8192, 12087, 16384); # old=<x><x , new=<x><x> ; old < new
+try( 8192, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try( 8192, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try( 8192, 0, 16384); # old=0 , new=<x><x> ; old < new
+try( 8192, 4968, 24576); # old=<x , new=<x><x><x>; old < new
+try( 8192, 8192, 24576); # old=<x> , new=<x><x><x>; old < new
+try( 8192, 14163, 24576); # old=<x><x , new=<x><x><x>; old < new
+try( 8192, 16384, 24576); # old=<x><x> , new=<x><x><x>; old < new
+try( 8192, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try( 8192, 0, 24576); # old=0 , new=<x><x><x>; old < new
+try( 8771, 776, 0); # old=x , new=0 ; old > new
+try( 8192, 2813, 0); # old=<x , new=0 ; old > new
+try(13945, 2439, 0); # old=x> , new=0 ; old > new
+try(14493, 6090, 0); # old=x><x , new=0 ; old > new
+try( 8192, 8192, 0); # old=<x> , new=0 ; old > new
+try( 8192, 10030, 0); # old=<x><x , new=0 ; old > new
+try(14983, 9593, 0); # old=x><x> , new=0 ; old > new
+try( 8192, 16384, 0); # old=<x><x> , new=0 ; old > new
+try( 8192, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try(10489, 0, 0); # old=0 , new=0 ; old = new
+
+# (74-114)
+# These tests all take place at the start of the file
+try( 0, 771, 1593); # old=<x , new=<x ; old < new
+try( 0, 4868, 4868); # old=<x , new=<x ; old = new
+try( 0, 147, 118); # old=<x , new=<x ; old > new
+try( 0, 8192, 8192); # old=<x> , new=<x ; old = new
+try( 0, 8192, 4574); # old=<x> , new=<x ; old > new
+try( 0, 11891, 1917); # old=<x><x , new=<x ; old > new
+try( 0, 16384, 5155); # old=<x><x> , new=<x ; old > new
+try( 0, 24576, 2953); # old=<x><x><x>, new=<x ; old > new
+try( 0, 0, 1317); # old=0 , new=<x ; old < new
+try( 0, 5609, 8192); # old=<x , new=<x> ; old < new
+try( 0, 8192, 8192); # old=<x> , new=<x> ; old = new
+try( 0, 11083, 8192); # old=<x><x , new=<x> ; old > new
+try( 0, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try( 0, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try( 0, 0, 8192); # old=0 , new=<x> ; old < new
+try( 0, 6265, 9991); # old=<x , new=<x><x ; old < new
+try( 0, 8192, 16119); # old=<x> , new=<x><x ; old < new
+try( 0, 10218, 11888); # old=<x><x , new=<x><x ; old < new
+try( 0, 14126, 14126); # old=<x><x , new=<x><x ; old = new
+try( 0, 12002, 9034); # old=<x><x , new=<x><x ; old > new
+try( 0, 16384, 13258); # old=<x><x> , new=<x><x ; old > new
+try( 0, 24576, 14367); # old=<x><x><x>, new=<x><x ; old > new
+try( 0, 0, 10881); # old=0 , new=<x><x ; old < new
+try( 0, 6448, 16384); # old=<x , new=<x><x> ; old < new
+try( 0, 8192, 16384); # old=<x> , new=<x><x> ; old < new
+try( 0, 15082, 16384); # old=<x><x , new=<x><x> ; old < new
+try( 0, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try( 0, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try( 0, 0, 16384); # old=0 , new=<x><x> ; old < new
+try( 0, 2421, 24576); # old=<x , new=<x><x><x>; old < new
+try( 0, 8192, 24576); # old=<x> , new=<x><x><x>; old < new
+try( 0, 11655, 24576); # old=<x><x , new=<x><x><x>; old < new
+try( 0, 16384, 24576); # old=<x><x> , new=<x><x><x>; old < new
+try( 0, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try( 0, 0, 24576); # old=0 , new=<x><x><x>; old < new
+try( 0, 6530, 0); # old=<x , new=0 ; old > new
+try( 0, 8192, 0); # old=<x> , new=0 ; old > new
+try( 0, 14707, 0); # old=<x><x , new=0 ; old > new
+try( 0, 16384, 0); # old=<x><x> , new=0 ; old > new
+try( 0, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try( 0, 0, 0); # old=0 , new=0 ; old = new
+
+# (115-141)
+# These tests all take place at the end of the file
+$FLEN = 40960; # Force the file to be exactly 40960 bytes long
+try(32768, 8192, 8192); # old=<x> , new=<x ; old = new
+try(32768, 8192, 4026); # old=<x> , new=<x ; old > new
+try(24576, 16384, 1917); # old=<x><x> , new=<x ; old > new
+try(16384, 24576, 3818); # old=<x><x><x>, new=<x ; old > new
+try(40960, 0, 2779); # old=0 , new=<x ; old < new
+try(32768, 8192, 8192); # old=<x> , new=<x> ; old = new
+try(24576, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try(16384, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try(40960, 0, 8192); # old=0 , new=<x> ; old < new
+try(32768, 8192, 10724); # old=<x> , new=<x><x ; old < new
+try(24576, 16384, 12221); # old=<x><x> , new=<x><x ; old > new
+try(16384, 24576, 15030); # old=<x><x><x>, new=<x><x ; old > new
+try(40960, 0, 11752); # old=0 , new=<x><x ; old < new
+try(32768, 8192, 16384); # old=<x> , new=<x><x> ; old < new
+try(24576, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try(16384, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try(40960, 0, 16384); # old=0 , new=<x><x> ; old < new
+try(32768, 8192, 24576); # old=<x> , new=<x><x><x>; old < new
+try(24576, 16384, 24576); # old=<x><x> , new=<x><x><x>; old < new
+try(16384, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try(40960, 0, 24576); # old=0 , new=<x><x><x>; old < new
+try(35973, 4987, 0); # old=x> , new=0 ; old > new
+try(32768, 8192, 0); # old=<x> , new=0 ; old > new
+try(29932, 11028, 0); # old=x><x> , new=0 ; old > new
+try(24576, 16384, 0); # old=<x><x> , new=0 ; old > new
+try(16384, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try(40960, 0, 0); # old=0 , new=0 ; old = new
+
+# (142-181)
+# These tests all take place at the end of the file
+$FLEN = 42000; # Force the file to be exactly 42000 bytes long
+try(41275, 725, 4059); # old=x , new=x ; old < new
+try(41683, 317, 317); # old=x , new=x ; old = new
+try(41225, 775, 405); # old=x , new=x ; old > new
+try(35709, 6291, 284); # old=x><x , new=x ; old > new
+try(42000, 0, 2434); # old=0 , new=x ; old < new
+try(40960, 1040, 1608); # old=<x , new=<x ; old < new
+try(40960, 1040, 1040); # old=<x , new=<x ; old = new
+try(40960, 1040, 378); # old=<x , new=<x ; old > new
+try(32768, 9232, 5604); # old=<x><x , new=<x ; old > new
+try(42000, 0, 6637); # old=0 , new=<x ; old < new
+try(41022, 978, 8130); # old=x , new=x> ; old < new
+try(39994, 2006, 966); # old=x><x , new=x> ; old > new
+try(42000, 0, 7152); # old=0 , new=x> ; old < new
+try(41613, 387, 10601); # old=x , new=x><x ; old < new
+try(38460, 3540, 3938); # old=x><x , new=x><x ; old < new
+try(36725, 5275, 5275); # old=x><x , new=x><x ; old = new
+try(37990, 4010, 3199); # old=x><x , new=x><x ; old > new
+try(42000, 0, 9189); # old=0 , new=x><x ; old < new
+try(40960, 1040, 8192); # old=<x , new=<x> ; old < new
+try(32768, 9232, 8192); # old=<x><x , new=<x> ; old > new
+try(42000, 0, 8192); # old=0 , new=<x> ; old < new
+try(40960, 1040, 11778); # old=<x , new=<x><x ; old < new
+try(32768, 9232, 13792); # old=<x><x , new=<x><x ; old < new
+try(32768, 9232, 9232); # old=<x><x , new=<x><x ; old = new
+try(32768, 9232, 8795); # old=<x><x , new=<x><x ; old > new
+try(42000, 0, 8578); # old=0 , new=<x><x ; old < new
+try(41531, 469, 15813); # old=x , new=x><x> ; old < new
+try(39618, 2382, 9534); # old=x><x , new=x><x> ; old < new
+try(42000, 0, 15344); # old=0 , new=x><x> ; old < new
+try(40960, 1040, 16384); # old=<x , new=<x><x> ; old < new
+try(32768, 9232, 16384); # old=<x><x , new=<x><x> ; old < new
+try(42000, 0, 16384); # old=0 , new=<x><x> ; old < new
+try(40960, 1040, 24576); # old=<x , new=<x><x><x>; old < new
+try(32768, 9232, 24576); # old=<x><x , new=<x><x><x>; old < new
+try(42000, 0, 24576); # old=0 , new=<x><x><x>; old < new
+try(41500, 500, 0); # old=x , new=0 ; old > new
+try(40960, 1040, 0); # old=<x , new=0 ; old > new
+try(35272, 6728, 0); # old=x><x , new=0 ; old > new
+try(32768, 9232, 0); # old=<x><x , new=0 ; old > new
+try(42000, 0, 0); # old=0 , new=0 ; old = new
+
+sub try {
+ my ($pos, $len, $newlen) = @_;
+ open F, "> $file" or die "Couldn't open file $file: $!";
+ binmode F;
+
+ # The record has exactly 17 characters. This will help ensure that
+ # even if _twrite screws up, the data doesn't coincidentally
+ # look good because the remainder accidentally lines up.
+ my $d = substr("0123456789abcdef$:", -17);
+ my $recs = defined($FLEN) ?
+ int($FLEN/length($d))+1 : # enough to make up at least $FLEN
+ int(8192*5/length($d))+1; # at least 5 blocks' worth
+ my $oldfile = $d x $recs;
+ my $flen = defined($FLEN) ? $FLEN : $recs * 17;
+ substr($oldfile, $FLEN) = "" if defined $FLEN; # truncate
+ print F $oldfile;
+ close F;
+
+ die "wrong length!" unless -s $file == $flen;
+
+ my $newdata = "-" x $newlen;
+ my $expected = $oldfile;
+ substr($expected, $pos, $len) = $newdata;
+
+ my $o = tie my @lines, 'Tie::File', $file or die $!;
+ $o->_twrite($newdata, $pos, $len);
+ undef $o; untie @lines;
+
+ open F, "< $file" or die "Couldn't open file $file: $!";
+ binmode F;
+ my $actual;
+ { local $/;
+ $actual = <F>;
+ }
+ close F;
+
+ my ($alen, $xlen) = (length $actual, length $expected);
+ unless ($alen == $xlen) {
+ print "# try(@_) expected file length $xlen, actual $alen!\n";
+ }
+ print $actual eq $expected ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my @c = @_;
+ my $x = join $:, @c, '';
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+# my $open = open FH, "< $file";
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix($a, $x);
+ print "not ok $N\n# expected <$x>, got <$a>\n";
+ }
+ $N++;
+
+ # now check FETCH:
+ my $good = 1;
+ my $msg;
+ for (0.. $#c) {
+ my $aa = $a[$_];
+ unless ($aa eq "$c[$_]$:") {
+ $msg = "expected <$c[$_]$:>, got <$aa>";
+ ctrlfix($msg);
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N # $msg\n";
+ $N++;
+
+ print $o->_check_integrity($file, $ENV{INTEGRITY})
+ ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/27_iwrite.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/27_iwrite.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/27_iwrite.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,235 @@
+#!/usr/bin/perl
+#
+# Unit tests of _iwrite function
+#
+# _iwrite($self, $data, $start, $end)
+#
+# 'i' here is for 'insert'. This writes $data at absolute position $start
+# in the file, copying the data at that position downwards---
+# but only down to position $end. Data at or past $end is not moved
+# or even examined. Since there isn't enough room for the full copy
+# (Because we inserted $data at the beginning) we copy as much as possible
+# and return a string containing the remainder.
+
+my $file = "tf$$.txt";
+$| = 1;
+
+print "1..203\n";
+
+my $N = 1;
+my $oldfile;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+$: = Tie::File::_default_recsep();
+
+$FLEN = 40970; # Use files of this length
+$oldfile = mkrand($FLEN);
+print "# MOF tests\n";
+# (2-85) These were generated by 'gentests.pl' to cover all possible cases
+# (I hope)
+# Legend:
+# x: data is entirely contained within one block
+# x>: data runs from the middle to the end of the block
+# <x: data runs from the start to the middle of the block
+# <x>: data occupies precisely one block
+# x><x: data overlaps one block boundary
+# <x><x: data runs from the start of one block into the middle of the next
+# x><x>: data runs from the middle of one block to the end of the next
+# <x><x>: data occupies two blocks exactly
+# <x><x><x>: data occupies three blocks exactly
+# 0: data is null
+#
+# For each possible alignment of the old and new data, we investigate
+# up to three situations: old data is shorter, old and new data are the
+# same length, and new data is shorter.
+#
+# try($pos, $old, $new) means to run a test where the area being
+# written into starts at position $pos, the area being written into
+# has length $old, and and the new data has length $new.
+try( 8605, 2394, 2394); # old=x , new=x ; old = new
+try( 9768, 1361, 664); # old=x , new=x ; old > new
+try( 9955, 6429, 6429); # old=x> , new=x ; old = new
+try(10550, 5834, 4123); # old=x> , new=x ; old > new
+try(14580, 6158, 851); # old=x><x , new=x ; old > new
+try(13442, 11134, 1572); # old=x><x> , new=x ; old > new
+try( 8192, 514, 514); # old=<x , new=<x ; old = new
+try( 8192, 2196, 858); # old=<x , new=<x ; old > new
+try( 8192, 8192, 8192); # old=<x> , new=<x ; old = new
+try( 8192, 8192, 1290); # old=<x> , new=<x ; old > new
+try( 8192, 10575, 6644); # old=<x><x , new=<x ; old > new
+try( 8192, 16384, 5616); # old=<x><x> , new=<x ; old > new
+try( 8192, 24576, 6253); # old=<x><x><x>, new=<x ; old > new
+try( 9965, 6419, 6419); # old=x> , new=x> ; old = new
+try(16059, 6102, 325); # old=x><x , new=x> ; old > new
+try( 9503, 15073, 6881); # old=x><x> , new=x> ; old > new
+try(16316, 1605, 1605); # old=x><x , new=x><x ; old = new
+try(16093, 4074, 993); # old=x><x , new=x><x ; old > new
+try(14739, 9837, 9837); # old=x><x> , new=x><x ; old = new
+try(14071, 10505, 7344); # old=x><x> , new=x><x ; old > new
+try( 8192, 8192, 8192); # old=<x> , new=<x> ; old = new
+try( 8192, 14817, 8192); # old=<x><x , new=<x> ; old > new
+try( 8192, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try( 8192, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try( 8192, 9001, 9001); # old=<x><x , new=<x><x ; old = new
+try( 8192, 11760, 10274); # old=<x><x , new=<x><x ; old > new
+try( 8192, 16384, 10781); # old=<x><x> , new=<x><x ; old > new
+try( 8192, 24576, 9284); # old=<x><x><x>, new=<x><x ; old > new
+try(14761, 9815, 9815); # old=x><x> , new=x><x> ; old = new
+try( 8192, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try( 8192, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try( 8192, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try( 8771, 776, 0); # old=x , new=0 ; old > new
+try( 8192, 2813, 0); # old=<x , new=0 ; old > new
+try(13945, 2439, 0); # old=x> , new=0 ; old > new
+try(14493, 6090, 0); # old=x><x , new=0 ; old > new
+try( 8192, 8192, 0); # old=<x> , new=0 ; old > new
+try( 8192, 10030, 0); # old=<x><x , new=0 ; old > new
+try(14983, 9593, 0); # old=x><x> , new=0 ; old > new
+try( 8192, 16384, 0); # old=<x><x> , new=0 ; old > new
+try( 8192, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try(10489, 0, 0); # old=0 , new=0 ; old = new
+
+print "# SOF tests\n";
+# (86-133)
+# These tests all take place at the start of the file
+try( 0, 4868, 4868); # old=<x , new=<x ; old = new
+try( 0, 147, 118); # old=<x , new=<x ; old > new
+try( 0, 8192, 8192); # old=<x> , new=<x ; old = new
+try( 0, 8192, 4574); # old=<x> , new=<x ; old > new
+try( 0, 11891, 1917); # old=<x><x , new=<x ; old > new
+try( 0, 16384, 5155); # old=<x><x> , new=<x ; old > new
+try( 0, 24576, 2953); # old=<x><x><x>, new=<x ; old > new
+try( 0, 8192, 8192); # old=<x> , new=<x> ; old = new
+try( 0, 11083, 8192); # old=<x><x , new=<x> ; old > new
+try( 0, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try( 0, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try( 0, 14126, 14126); # old=<x><x , new=<x><x ; old = new
+try( 0, 12002, 9034); # old=<x><x , new=<x><x ; old > new
+try( 0, 16384, 13258); # old=<x><x> , new=<x><x ; old > new
+try( 0, 24576, 14367); # old=<x><x><x>, new=<x><x ; old > new
+try( 0, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try( 0, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try( 0, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try( 0, 6530, 0); # old=<x , new=0 ; old > new
+try( 0, 8192, 0); # old=<x> , new=0 ; old > new
+try( 0, 14707, 0); # old=<x><x , new=0 ; old > new
+try( 0, 16384, 0); # old=<x><x> , new=0 ; old > new
+try( 0, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try( 0, 0, 0); # old=0 , new=0 ; old = new
+
+print "# EOF tests 1\n";
+# (134-169)
+# These tests all take place at the end of the file
+$FLEN = 40960; # Force the file to be exactly 40960 bytes long
+$oldfile = mkrand($FLEN);
+try(32768, 8192, 8192); # old=<x> , new=<x ; old = new
+try(32768, 8192, 4026); # old=<x> , new=<x ; old > new
+try(24576, 16384, 1917); # old=<x><x> , new=<x ; old > new
+try(16384, 24576, 3818); # old=<x><x><x>, new=<x ; old > new
+try(32768, 8192, 8192); # old=<x> , new=<x> ; old = new
+try(24576, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try(16384, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try(24576, 16384, 12221); # old=<x><x> , new=<x><x ; old > new
+try(16384, 24576, 15030); # old=<x><x><x>, new=<x><x ; old > new
+try(24576, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try(16384, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try(16384, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try(35973, 4987, 0); # old=x> , new=0 ; old > new
+try(32768, 8192, 0); # old=<x> , new=0 ; old > new
+try(29932, 11028, 0); # old=x><x> , new=0 ; old > new
+try(24576, 16384, 0); # old=<x><x> , new=0 ; old > new
+try(16384, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try(40960, 0, 0); # old=0 , new=0 ; old = new
+
+print "# EOF tests 2\n";
+# (170-203)
+# These tests all take place at the end of the file
+$FLEN = 42000; # Force the file to be exactly 42000 bytes long
+$oldfile = mkrand($FLEN);
+try(41683, 317, 317); # old=x , new=x ; old = new
+try(41225, 775, 405); # old=x , new=x ; old > new
+try(35709, 6291, 284); # old=x><x , new=x ; old > new
+try(40960, 1040, 1040); # old=<x , new=<x ; old = new
+try(40960, 1040, 378); # old=<x , new=<x ; old > new
+try(32768, 9232, 5604); # old=<x><x , new=<x ; old > new
+try(39994, 2006, 966); # old=x><x , new=x> ; old > new
+try(36725, 5275, 5275); # old=x><x , new=x><x ; old = new
+try(37990, 4010, 3199); # old=x><x , new=x><x ; old > new
+try(32768, 9232, 8192); # old=<x><x , new=<x> ; old > new
+try(32768, 9232, 9232); # old=<x><x , new=<x><x ; old = new
+try(32768, 9232, 8795); # old=<x><x , new=<x><x ; old > new
+try(41500, 500, 0); # old=x , new=0 ; old > new
+try(40960, 1040, 0); # old=<x , new=0 ; old > new
+try(35272, 6728, 0); # old=x><x , new=0 ; old > new
+try(32768, 9232, 0); # old=<x><x , new=0 ; old > new
+try(42000, 0, 0); # old=0 , new=0 ; old = new
+
+sub mkrand {
+ my $len = shift;
+ srand $len;
+ my @c = ('a' .. 'z', 'A' .. 'Z', 0..9, $:);
+ my $d = "";
+ $d .= $c[rand @c] until length($d) >= $len;
+ substr($d, $len) = ""; # chop it off to the proper length
+ $d;
+}
+
+sub try {
+ my ($s, $len, $newlen) = @_;
+ my $e = $s + $len;
+
+ open F, "> $file" or die "Couldn't open file $file: $!";
+ binmode F;
+
+ print F $oldfile;
+ close F;
+
+ die "wrong length!" unless -s $file == $FLEN;
+
+ my $newdata = "-" x $newlen;
+ my $expected = $oldfile;
+
+ my $expected_return = substr($expected, $e - $newlen, $newlen, "");
+ substr($expected, $s, 0, $newdata);
+
+ my $o = tie my @lines, 'Tie::File', $file or die $!;
+ my $actual_return = $o->_iwrite($newdata, $s, $e);
+ undef $o; untie @lines;
+
+ open F, "< $file" or die "Couldn't open file $file: $!";
+ binmode F;
+ my $actual;
+ { local $/;
+ $actual = <F>;
+ }
+ close F;
+
+ my ($alen, $xlen) = (length $actual, length $expected);
+ unless ($alen == $xlen) {
+ print "# try(@_) expected file length $xlen, actual $alen!\n";
+ }
+ print $actual eq $expected ? "ok $N\n" : "not ok $N\n";
+ $N++;
+
+ if (! defined $actual_return && ! defined $expected_return) {
+ print "ok $N\n";
+ } elsif (! defined $actual_return || ! defined $expected_return) {
+ print "not ok $N\n";
+ } else {
+ print $actual_return eq $expected_return ? "ok $N\n" : "not ok $N\n";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/28_mtwrite.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/28_mtwrite.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/28_mtwrite.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,295 @@
+#!/usr/bin/perl
+#
+# Unit tests of _mtwrite function
+#
+# _mtwrite($self, $d1, $s1, $l1, $d2, $s2, $l2, ...)
+#
+# 'm' here is for 'multiple'. This writes data $d1 at position $s1
+# over a block of space $l1, moving subsequent data up or down as necessary.
+
+my $file = "tf$$.txt";
+$| = 1;
+
+print "1..2252\n";
+
+my $N = 1;
+my $oldfile;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+$: = Tie::File::_default_recsep();
+
+# Only these are used for the triple-region tests
+ at BASE_TRIES = (
+ [10, 20, 30],
+ [10, 30, 20],
+ [100, 30, 20],
+ [100, 20, 30],
+ [100, 40, 20],
+ [100, 20, 40],
+ [200, 20, 30],
+ [200, 30, 20],
+ [200, 20, 60],
+ [200, 60, 20],
+ );
+
+ at TRIES = @BASE_TRIES;
+
+$FLEN = 40970; # Use files of this length
+$oldfile = mkrand($FLEN);
+print "# MOF tests\n";
+# These were generated by 'gentests.pl' to cover all possible cases
+# (I hope)
+# Legend:
+# x: data is entirely contained within one block
+# x>: data runs from the middle to the end of the block
+# <x: data runs from the start to the middle of the block
+# <x>: data occupies precisely one block
+# x><x: data overlaps one block boundary
+# <x><x: data runs from the start of one block into the middle of the next
+# x><x>: data runs from the middle of one block to the end of the next
+# <x><x>: data occupies two blocks exactly
+# <x><x><x>: data occupies three blocks exactly
+# 0: data is null
+#
+# For each possible alignment of the old and new data, we investigate
+# up to three situations: old data is shorter, old and new data are the
+# same length, and new data is shorter.
+#
+# try($pos, $old, $new) means to run a test where the area being
+# written into starts at position $pos, the area being written into
+# has length $old, and and the new data has length $new.
+try( 8605, 2394, 2394); # old=x , new=x ; old = new
+try( 9768, 1361, 664); # old=x , new=x ; old > new
+try( 9955, 6429, 6429); # old=x> , new=x ; old = new
+try(10550, 5834, 4123); # old=x> , new=x ; old > new
+try(14580, 6158, 851); # old=x><x , new=x ; old > new
+try(13442, 11134, 1572); # old=x><x> , new=x ; old > new
+try( 8192, 514, 514); # old=<x , new=<x ; old = new
+try( 8192, 2196, 858); # old=<x , new=<x ; old > new
+try( 8192, 8192, 8192); # old=<x> , new=<x ; old = new
+try( 8192, 8192, 1290); # old=<x> , new=<x ; old > new
+try( 8192, 10575, 6644); # old=<x><x , new=<x ; old > new
+try( 8192, 16384, 5616); # old=<x><x> , new=<x ; old > new
+try( 8192, 24576, 6253); # old=<x><x><x>, new=<x ; old > new
+try( 9965, 6419, 6419); # old=x> , new=x> ; old = new
+try(16059, 6102, 325); # old=x><x , new=x> ; old > new
+try( 9503, 15073, 6881); # old=x><x> , new=x> ; old > new
+try(16316, 1605, 1605); # old=x><x , new=x><x ; old = new
+try(16093, 4074, 993); # old=x><x , new=x><x ; old > new
+try(14739, 9837, 9837); # old=x><x> , new=x><x ; old = new
+try(14071, 10505, 7344); # old=x><x> , new=x><x ; old > new
+try( 8192, 8192, 8192); # old=<x> , new=<x> ; old = new
+try( 8192, 14817, 8192); # old=<x><x , new=<x> ; old > new
+try( 8192, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try( 8192, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try( 8192, 9001, 9001); # old=<x><x , new=<x><x ; old = new
+try( 8192, 11760, 10274); # old=<x><x , new=<x><x ; old > new
+try( 8192, 16384, 10781); # old=<x><x> , new=<x><x ; old > new
+try( 8192, 24576, 9284); # old=<x><x><x>, new=<x><x ; old > new
+try(14761, 9815, 9815); # old=x><x> , new=x><x> ; old = new
+try( 8192, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try( 8192, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try( 8192, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try( 8771, 776, 0); # old=x , new=0 ; old > new
+try( 8192, 2813, 0); # old=<x , new=0 ; old > new
+try(13945, 2439, 0); # old=x> , new=0 ; old > new
+try(14493, 6090, 0); # old=x><x , new=0 ; old > new
+try( 8192, 8192, 0); # old=<x> , new=0 ; old > new
+try( 8192, 10030, 0); # old=<x><x , new=0 ; old > new
+try(14983, 9593, 0); # old=x><x> , new=0 ; old > new
+try( 8192, 16384, 0); # old=<x><x> , new=0 ; old > new
+try( 8192, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try(10489, 0, 0); # old=0 , new=0 ; old = new
+
+print "# SOF tests\n";
+# These tests all take place at the start of the file
+try( 0, 4868, 4868); # old=<x , new=<x ; old = new
+try( 0, 147, 118); # old=<x , new=<x ; old > new
+try( 0, 8192, 8192); # old=<x> , new=<x ; old = new
+try( 0, 8192, 4574); # old=<x> , new=<x ; old > new
+try( 0, 11891, 1917); # old=<x><x , new=<x ; old > new
+try( 0, 16384, 5155); # old=<x><x> , new=<x ; old > new
+try( 0, 24576, 2953); # old=<x><x><x>, new=<x ; old > new
+try( 0, 8192, 8192); # old=<x> , new=<x> ; old = new
+try( 0, 11083, 8192); # old=<x><x , new=<x> ; old > new
+try( 0, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try( 0, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try( 0, 14126, 14126); # old=<x><x , new=<x><x ; old = new
+try( 0, 12002, 9034); # old=<x><x , new=<x><x ; old > new
+try( 0, 16384, 13258); # old=<x><x> , new=<x><x ; old > new
+try( 0, 24576, 14367); # old=<x><x><x>, new=<x><x ; old > new
+try( 0, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try( 0, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try( 0, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try( 0, 6530, 0); # old=<x , new=0 ; old > new
+try( 0, 8192, 0); # old=<x> , new=0 ; old > new
+try( 0, 14707, 0); # old=<x><x , new=0 ; old > new
+try( 0, 16384, 0); # old=<x><x> , new=0 ; old > new
+try( 0, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try( 0, 0, 0); # old=0 , new=0 ; old = new
+
+print "# EOF tests 1\n";
+# These tests all take place at the end of the file
+$FLEN = 40960; # Force the file to be exactly 40960 bytes long
+$oldfile = mkrand($FLEN);
+try(32768, 8192, 8192); # old=<x> , new=<x ; old = new
+try(32768, 8192, 4026); # old=<x> , new=<x ; old > new
+try(24576, 16384, 1917); # old=<x><x> , new=<x ; old > new
+try(16384, 24576, 3818); # old=<x><x><x>, new=<x ; old > new
+try(32768, 8192, 8192); # old=<x> , new=<x> ; old = new
+try(24576, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try(16384, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try(24576, 16384, 12221); # old=<x><x> , new=<x><x ; old > new
+try(16384, 24576, 15030); # old=<x><x><x>, new=<x><x ; old > new
+try(24576, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try(16384, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try(16384, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try(35973, 4987, 0); # old=x> , new=0 ; old > new
+try(32768, 8192, 0); # old=<x> , new=0 ; old > new
+try(29932, 11028, 0); # old=x><x> , new=0 ; old > new
+try(24576, 16384, 0); # old=<x><x> , new=0 ; old > new
+try(16384, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try(40960, 0, 0); # old=0 , new=0 ; old = new
+
+print "# EOF tests 2\n";
+# These tests all take place at the end of the file
+$FLEN = 42000; # Force the file to be exactly 42000 bytes long
+$oldfile = mkrand($FLEN);
+try(41683, 317, 317); # old=x , new=x ; old = new
+try(41225, 775, 405); # old=x , new=x ; old > new
+try(35709, 6291, 284); # old=x><x , new=x ; old > new
+try(40960, 1040, 1040); # old=<x , new=<x ; old = new
+try(40960, 1040, 378); # old=<x , new=<x ; old > new
+try(32768, 9232, 5604); # old=<x><x , new=<x ; old > new
+try(39994, 2006, 966); # old=x><x , new=x> ; old > new
+try(36725, 5275, 5275); # old=x><x , new=x><x ; old = new
+try(37990, 4010, 3199); # old=x><x , new=x><x ; old > new
+try(32768, 9232, 8192); # old=<x><x , new=<x> ; old > new
+try(32768, 9232, 9232); # old=<x><x , new=<x><x ; old = new
+try(32768, 9232, 8795); # old=<x><x , new=<x><x ; old > new
+try(41500, 500, 0); # old=x , new=0 ; old > new
+try(40960, 1040, 0); # old=<x , new=0 ; old > new
+try(35272, 6728, 0); # old=x><x , new=0 ; old > new
+try(32768, 9232, 0); # old=<x><x , new=0 ; old > new
+try(42000, 0, 0); # old=0 , new=0 ; old = new
+
+# Now the REAL tests
+# Make sure mtwrite can properly write sequences of several intervals
+# The intervals tested above were accumulated into @TRIES.
+# try_all_doubles() tries every possible sensible pair of those intervals.
+# try_all_triples() tries every possible sensible group of
+# tree intervals from the more restrictive set @BASE_TRIES.
+$FLEN = 40970;
+$oldfile = mkrand($FLEN);
+try_all_doubles();
+try_all_triples();
+
+sub mkrand {
+ my $len = shift;
+ srand $len;
+ my @c = ('a' .. 'z', 'A' .. 'Z', 0..9, $:);
+ my $d = "";
+ $d .= $c[rand @c] until length($d) >= $len;
+ substr($d, $len) = ""; # chop it off to the proper length
+ $d;
+}
+
+sub try {
+ push @TRIES, [@_] if @_ == 3;
+
+ open F, "> $file" or die "Couldn't open file $file: $!";
+ binmode F;
+ print F $oldfile;
+ close F;
+ die "wrong length!" unless -s $file == $FLEN;
+
+ my @mt_args;
+ my $expected = $oldfile;
+ { my @a = @_;
+ my $c = "a";
+ while (@a) {
+ my ($s, $len, $newlen) = splice @a, -3;
+ my $newdata = $c++ x $newlen;
+ substr($expected, $s, $len, $newdata);
+ unshift @mt_args, $newdata, $s, $len;
+ }
+ }
+
+ my $o = tie my @lines, 'Tie::File', $file or die $!;
+ my $actual_return = $o->_mtwrite(@mt_args);
+ undef $o; untie @lines;
+
+ open F, "< $file" or die "Couldn't open file $file: $!";
+ binmode F;
+ my $actual;
+ { local $/;
+ $actual = <F>;
+ }
+ close F;
+
+ my ($alen, $xlen) = (length $actual, length $expected);
+ unless ($alen == $xlen) {
+ print "# try(@_) expected file length $xlen, actual $alen!\n";
+ }
+ print $actual eq $expected ? "ok $N\n" : "not ok $N\n";
+ $N++;
+
+# if (! defined $actual_return && ! defined $expected_return) {
+# print "ok $N\n";
+# } elsif (! defined $actual_return || ! defined $expected_return) {
+# print "not ok $N\n";
+# } else {
+# print $actual_return eq $expected_return ? "ok $N\n" : "not ok $N\n";
+# }
+# $N++;
+}
+
+sub try_all_doubles {
+ print "# Trying double regions.\n";
+ for my $a (@TRIES) {
+ next if $a->[0] + $a->[1] >= $FLEN;
+ next if $a->[0] + $a->[2] >= $FLEN;
+ for my $b (@TRIES) {
+ next if $b->[0] + $b->[1] >= $FLEN;
+ next if $b->[0] + $b->[2] >= $FLEN;
+
+ next if $b->[0] < $a->[0] + $a->[1]; # Overlapping regions
+ try(@$a, @$b);
+ }
+ }
+}
+
+sub try_all_triples {
+ print "# Trying triple regions.\n";
+ for my $a (@BASE_TRIES) {
+ next if $a->[0] + $a->[1] >= $FLEN;
+ next if $a->[0] + $a->[2] >= $FLEN;
+ for my $b (@BASE_TRIES) {
+ next if $b->[0] + $b->[1] >= $FLEN;
+ next if $b->[0] + $b->[2] >= $FLEN;
+
+ next if $b->[0] < $a->[0] + $a->[1]; # Overlapping regions
+
+ for my $c (@BASE_TRIES) {
+ next if $c->[0] + $c->[1] >= $FLEN;
+ next if $c->[0] + $c->[2] >= $FLEN;
+
+ next if $c->[0] < $b->[0] + $b->[1]; # Overlapping regions
+ try(@$a, @$b, @$c);
+ }
+ }
+ }
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/29_downcopy.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/29_downcopy.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/29_downcopy.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,363 @@
+#!/usr/bin/perl
+#
+# Unit tests of _downcopy function
+#
+# _downcopy($self, $data, $pos, $len)
+# Write $data into a block of length $len at position $pos,
+# moving everything in the block forwards to make room.
+# Instead of writing the last length($data) bytes from the block
+# (because there isn't room for them any longer) return them.
+#
+#
+
+my $file = "tf$$.txt";
+
+print "1..718\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+$: = Tie::File::_default_recsep();
+
+my @subtests = qw(x <x x> x><x <x> <x><x x><x> <x><x> <x><x><x> 0);
+print "ok $N\n"; $N++;
+
+# (3-144) These were generated by 'gentests.pl' to cover all possible cases
+# (I hope)
+# Legend:
+# x: data is entirely contained within one block
+# x>: data runs from the middle to the end of the block
+# <x: data runs from the start to the middle of the block
+# <x>: data occupies precisely one block
+# x><x: data overlaps one block boundary
+# <x><x: data runs from the start of one block into the middle of the next
+# x><x>: data runs from the middle of one block to the end of the next
+# <x><x>: data occupies two blocks exactly
+# <x><x><x>: data occupies three blocks exactly
+# 0: data is null
+#
+# For each possible alignment of the old and new data, we investigate
+# up to three situations: old data is shorter, old and new data are the
+# same length, and new data is shorter.
+#
+# try($pos, $old, $new) means to run a test where the data starts at
+# position $pos, the old data has length $old,
+# and the new data has length $new.
+try( 9659, 6635, 6691); # old=x , new=x ; old < new
+try( 8605, 2394, 2394); # old=x , new=x ; old = new
+try( 9768, 1361, 664); # old=x , new=x ; old > new
+try( 9955, 6429, 6429); # old=x> , new=x ; old = new
+try(10550, 5834, 4123); # old=x> , new=x ; old > new
+try(14580, 6158, 851); # old=x><x , new=x ; old > new
+try(13442, 11134, 1572); # old=x><x> , new=x ; old > new
+try( 8394, 0, 5742); # old=0 , new=x ; old < new
+try( 8192, 2819, 6738); # old=<x , new=<x ; old < new
+try( 8192, 514, 514); # old=<x , new=<x ; old = new
+try( 8192, 2196, 858); # old=<x , new=<x ; old > new
+try( 8192, 8192, 8192); # old=<x> , new=<x ; old = new
+try( 8192, 8192, 1290); # old=<x> , new=<x ; old > new
+try( 8192, 10575, 6644); # old=<x><x , new=<x ; old > new
+try( 8192, 16384, 5616); # old=<x><x> , new=<x ; old > new
+try( 8192, 24576, 6253); # old=<x><x><x>, new=<x ; old > new
+try( 8192, 0, 6870); # old=0 , new=<x ; old < new
+try( 8478, 6259, 7906); # old=x , new=x> ; old < new
+try( 9965, 6419, 6419); # old=x> , new=x> ; old = new
+try(16059, 6102, 325); # old=x><x , new=x> ; old > new
+try( 9503, 15073, 6881); # old=x><x> , new=x> ; old > new
+try( 9759, 0, 6625); # old=0 , new=x> ; old < new
+try( 8525, 2081, 8534); # old=x , new=x><x ; old < new
+try(15550, 834, 1428); # old=x> , new=x><x ; old < new
+try(14966, 1668, 3479); # old=x><x , new=x><x ; old < new
+try(16316, 1605, 1605); # old=x><x , new=x><x ; old = new
+try(16093, 4074, 993); # old=x><x , new=x><x ; old > new
+try(14739, 9837, 9837); # old=x><x> , new=x><x ; old = new
+try(14071, 10505, 7344); # old=x><x> , new=x><x ; old > new
+try(12602, 0, 8354); # old=0 , new=x><x ; old < new
+try( 8192, 2767, 8192); # old=<x , new=<x> ; old < new
+try( 8192, 8192, 8192); # old=<x> , new=<x> ; old = new
+try( 8192, 14817, 8192); # old=<x><x , new=<x> ; old > new
+try( 8192, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try( 8192, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try( 8192, 0, 8192); # old=0 , new=<x> ; old < new
+try( 8192, 6532, 10882); # old=<x , new=<x><x ; old < new
+try( 8192, 8192, 16044); # old=<x> , new=<x><x ; old < new
+try( 8192, 9555, 11020); # old=<x><x , new=<x><x ; old < new
+try( 8192, 9001, 9001); # old=<x><x , new=<x><x ; old = new
+try( 8192, 11760, 10274); # old=<x><x , new=<x><x ; old > new
+try( 8192, 16384, 10781); # old=<x><x> , new=<x><x ; old > new
+try( 8192, 24576, 9284); # old=<x><x><x>, new=<x><x ; old > new
+try( 8192, 0, 12488); # old=0 , new=<x><x ; old < new
+try( 8222, 6385, 16354); # old=x , new=x><x> ; old < new
+try(13500, 2884, 11076); # old=x> , new=x><x> ; old < new
+try(14069, 4334, 10507); # old=x><x , new=x><x> ; old < new
+try(14761, 9815, 9815); # old=x><x> , new=x><x> ; old = new
+try(10469, 0, 14107); # old=0 , new=x><x> ; old < new
+try( 8192, 4181, 16384); # old=<x , new=<x><x> ; old < new
+try( 8192, 8192, 16384); # old=<x> , new=<x><x> ; old < new
+try( 8192, 12087, 16384); # old=<x><x , new=<x><x> ; old < new
+try( 8192, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try( 8192, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try( 8192, 0, 16384); # old=0 , new=<x><x> ; old < new
+try( 8192, 4968, 24576); # old=<x , new=<x><x><x>; old < new
+try( 8192, 8192, 24576); # old=<x> , new=<x><x><x>; old < new
+try( 8192, 14163, 24576); # old=<x><x , new=<x><x><x>; old < new
+try( 8192, 16384, 24576); # old=<x><x> , new=<x><x><x>; old < new
+try( 8192, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try( 8192, 0, 24576); # old=0 , new=<x><x><x>; old < new
+try( 8771, 776, 0); # old=x , new=0 ; old > new
+try( 8192, 2813, 0); # old=<x , new=0 ; old > new
+try(13945, 2439, 0); # old=x> , new=0 ; old > new
+try(14493, 6090, 0); # old=x><x , new=0 ; old > new
+try( 8192, 8192, 0); # old=<x> , new=0 ; old > new
+try( 8192, 10030, 0); # old=<x><x , new=0 ; old > new
+try(14983, 9593, 0); # old=x><x> , new=0 ; old > new
+try( 8192, 16384, 0); # old=<x><x> , new=0 ; old > new
+try( 8192, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try(10489, 0, 0); # old=0 , new=0 ; old = new
+
+# (142-223)
+# These tests all take place at the start of the file
+try( 0, 771, 1593); # old=<x , new=<x ; old < new
+try( 0, 4868, 4868); # old=<x , new=<x ; old = new
+try( 0, 147, 118); # old=<x , new=<x ; old > new
+try( 0, 8192, 8192); # old=<x> , new=<x ; old = new
+try( 0, 8192, 4574); # old=<x> , new=<x ; old > new
+try( 0, 11891, 1917); # old=<x><x , new=<x ; old > new
+try( 0, 16384, 5155); # old=<x><x> , new=<x ; old > new
+try( 0, 24576, 2953); # old=<x><x><x>, new=<x ; old > new
+try( 0, 0, 1317); # old=0 , new=<x ; old < new
+try( 0, 5609, 8192); # old=<x , new=<x> ; old < new
+try( 0, 8192, 8192); # old=<x> , new=<x> ; old = new
+try( 0, 11083, 8192); # old=<x><x , new=<x> ; old > new
+try( 0, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try( 0, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try( 0, 0, 8192); # old=0 , new=<x> ; old < new
+try( 0, 6265, 9991); # old=<x , new=<x><x ; old < new
+try( 0, 8192, 16119); # old=<x> , new=<x><x ; old < new
+try( 0, 10218, 11888); # old=<x><x , new=<x><x ; old < new
+try( 0, 14126, 14126); # old=<x><x , new=<x><x ; old = new
+try( 0, 12002, 9034); # old=<x><x , new=<x><x ; old > new
+try( 0, 16384, 13258); # old=<x><x> , new=<x><x ; old > new
+try( 0, 24576, 14367); # old=<x><x><x>, new=<x><x ; old > new
+try( 0, 0, 10881); # old=0 , new=<x><x ; old < new
+try( 0, 6448, 16384); # old=<x , new=<x><x> ; old < new
+try( 0, 8192, 16384); # old=<x> , new=<x><x> ; old < new
+try( 0, 15082, 16384); # old=<x><x , new=<x><x> ; old < new
+try( 0, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try( 0, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try( 0, 0, 16384); # old=0 , new=<x><x> ; old < new
+try( 0, 2421, 24576); # old=<x , new=<x><x><x>; old < new
+try( 0, 8192, 24576); # old=<x> , new=<x><x><x>; old < new
+try( 0, 11655, 24576); # old=<x><x , new=<x><x><x>; old < new
+try( 0, 16384, 24576); # old=<x><x> , new=<x><x><x>; old < new
+try( 0, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try( 0, 0, 24576); # old=0 , new=<x><x><x>; old < new
+try( 0, 6530, 0); # old=<x , new=0 ; old > new
+try( 0, 8192, 0); # old=<x> , new=0 ; old > new
+try( 0, 14707, 0); # old=<x><x , new=0 ; old > new
+try( 0, 16384, 0); # old=<x><x> , new=0 ; old > new
+try( 0, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try( 0, 0, 0); # old=0 , new=0 ; old = new
+
+# (224-277)
+# These tests all take place at the end of the file
+$FLEN = 40960; # Force the file to be exactly 40960 bytes long
+try(32768, 8192, 8192); # old=<x> , new=<x ; old = new
+try(32768, 8192, 4026); # old=<x> , new=<x ; old > new
+try(24576, 16384, 1917); # old=<x><x> , new=<x ; old > new
+try(16384, 24576, 3818); # old=<x><x><x>, new=<x ; old > new
+try(40960, 0, 2779); # old=0 , new=<x ; old < new
+try(32768, 8192, 8192); # old=<x> , new=<x> ; old = new
+try(24576, 16384, 8192); # old=<x><x> , new=<x> ; old > new
+try(16384, 24576, 8192); # old=<x><x><x>, new=<x> ; old > new
+try(40960, 0, 8192); # old=0 , new=<x> ; old < new
+try(32768, 8192, 10724); # old=<x> , new=<x><x ; old < new
+try(24576, 16384, 12221); # old=<x><x> , new=<x><x ; old > new
+try(16384, 24576, 15030); # old=<x><x><x>, new=<x><x ; old > new
+try(40960, 0, 11752); # old=0 , new=<x><x ; old < new
+try(32768, 8192, 16384); # old=<x> , new=<x><x> ; old < new
+try(24576, 16384, 16384); # old=<x><x> , new=<x><x> ; old = new
+try(16384, 24576, 16384); # old=<x><x><x>, new=<x><x> ; old > new
+try(40960, 0, 16384); # old=0 , new=<x><x> ; old < new
+try(32768, 8192, 24576); # old=<x> , new=<x><x><x>; old < new
+try(24576, 16384, 24576); # old=<x><x> , new=<x><x><x>; old < new
+try(16384, 24576, 24576); # old=<x><x><x>, new=<x><x><x>; old = new
+try(40960, 0, 24576); # old=0 , new=<x><x><x>; old < new
+try(35973, 4987, 0); # old=x> , new=0 ; old > new
+try(32768, 8192, 0); # old=<x> , new=0 ; old > new
+try(29932, 11028, 0); # old=x><x> , new=0 ; old > new
+try(24576, 16384, 0); # old=<x><x> , new=0 ; old > new
+try(16384, 24576, 0); # old=<x><x><x>, new=0 ; old > new
+try(40960, 0, 0); # old=0 , new=0 ; old = new
+
+# (278-357)
+# These tests all take place at the end of the file
+$FLEN = 42000; # Force the file to be exactly 42000 bytes long
+try(41275, 725, 4059); # old=x , new=x ; old < new
+try(41683, 317, 317); # old=x , new=x ; old = new
+try(41225, 775, 405); # old=x , new=x ; old > new
+try(35709, 6291, 284); # old=x><x , new=x ; old > new
+try(42000, 0, 2434); # old=0 , new=x ; old < new
+try(40960, 1040, 1608); # old=<x , new=<x ; old < new
+try(40960, 1040, 1040); # old=<x , new=<x ; old = new
+try(40960, 1040, 378); # old=<x , new=<x ; old > new
+try(32768, 9232, 5604); # old=<x><x , new=<x ; old > new
+try(42000, 0, 6637); # old=0 , new=<x ; old < new
+try(41022, 978, 8130); # old=x , new=x> ; old < new
+try(39994, 2006, 966); # old=x><x , new=x> ; old > new
+try(42000, 0, 7152); # old=0 , new=x> ; old < new
+try(41613, 387, 10601); # old=x , new=x><x ; old < new
+try(38460, 3540, 3938); # old=x><x , new=x><x ; old < new
+try(36725, 5275, 5275); # old=x><x , new=x><x ; old = new
+try(37990, 4010, 3199); # old=x><x , new=x><x ; old > new
+try(42000, 0, 9189); # old=0 , new=x><x ; old < new
+try(40960, 1040, 8192); # old=<x , new=<x> ; old < new
+try(32768, 9232, 8192); # old=<x><x , new=<x> ; old > new
+try(42000, 0, 8192); # old=0 , new=<x> ; old < new
+try(40960, 1040, 11778); # old=<x , new=<x><x ; old < new
+try(32768, 9232, 13792); # old=<x><x , new=<x><x ; old < new
+try(32768, 9232, 9232); # old=<x><x , new=<x><x ; old = new
+try(32768, 9232, 8795); # old=<x><x , new=<x><x ; old > new
+try(42000, 0, 8578); # old=0 , new=<x><x ; old < new
+try(41531, 469, 15813); # old=x , new=x><x> ; old < new
+try(39618, 2382, 9534); # old=x><x , new=x><x> ; old < new
+try(42000, 0, 15344); # old=0 , new=x><x> ; old < new
+try(40960, 1040, 16384); # old=<x , new=<x><x> ; old < new
+try(32768, 9232, 16384); # old=<x><x , new=<x><x> ; old < new
+try(42000, 0, 16384); # old=0 , new=<x><x> ; old < new
+try(40960, 1040, 24576); # old=<x , new=<x><x><x>; old < new
+try(32768, 9232, 24576); # old=<x><x , new=<x><x><x>; old < new
+try(42000, 0, 24576); # old=0 , new=<x><x><x>; old < new
+try(41500, 500, 0); # old=x , new=0 ; old > new
+try(40960, 1040, 0); # old=<x , new=0 ; old > new
+try(35272, 6728, 0); # old=x><x , new=0 ; old > new
+try(32768, 9232, 0); # old=<x><x , new=0 ; old > new
+try(42000, 0, 0); # old=0 , new=0 ; old = new
+
+sub try {
+ my ($pos, $len, $newlen) = @_;
+ open F, "> $file" or die "Couldn't open file $file: $!";
+ binmode F;
+
+ # The record has exactly 17 characters. This will help ensure that
+ # even if _downcoopy screws up, the data doesn't coincidentally
+ # look good because the remainder accidentally lines up.
+ my $d = substr("0123456789abcdef$:", -17);
+ my $recs = defined($FLEN) ?
+ int($FLEN/length($d))+1 : # enough to make up at least $FLEN
+ int(8192*5/length($d))+1; # at least 5 blocks' worth
+ my $oldfile = $d x $recs;
+ my $flen = defined($FLEN) ? $FLEN : $recs * 17;
+ substr($oldfile, $FLEN) = "" if defined $FLEN; # truncate
+ print F $oldfile;
+ close F;
+
+ die "wrong length!" unless -s $file == $flen;
+
+ my $newdata = "-" x $newlen;
+ my $expected = $oldfile;
+ my $old = defined $len ? substr($expected, $pos, $len)
+ : substr($expected, $pos);
+ $old = "$newdata$old";
+ my $x_retval;
+ if (defined $len) {
+ substr($expected, $pos, $len, substr($old, 0, $len, ""));
+ $x_retval = $old;
+ } else {
+ substr($expected, $pos) = $old;
+ $x_retval = "";
+ }
+
+ my $o = tie my @lines, 'Tie::File', $file or die $!;
+ local $SIG{ALRM} = sub { die "Alarm clock" };
+ my $a_retval = eval { alarm(5) unless $^P; $o->_downcopy($newdata, $pos, $len) };
+ my $err = $@;
+ undef $o; untie @lines; alarm(0);
+ if ($err) {
+ if ($err =~ /^Alarm clock/) {
+ print "# Timeout\n";
+ print "not ok $N\n"; $N++;
+ print "not ok $N\n"; $N++;
+ return;
+ } else {
+ $@ = $err;
+ die;
+ }
+ }
+
+ open F, "< $file" or die "Couldn't open file $file: $!";
+ binmode F;
+ my $actual;
+ { local $/;
+ $actual = <F>;
+ }
+ close F;
+
+ my ($alen, $xlen) = (length $actual, length $expected);
+ unless ($alen == $xlen) {
+ my @ARGS = @_;
+ for (@ARGS) { $_ = "UNDEF" unless defined }
+ print "# try(@ARGS) expected file length $xlen, actual $alen!\n";
+ }
+ print $actual eq $expected ? "ok $N\n" : "not ok $N\n";
+ $N++;
+ print $a_retval eq $x_retval ? "ok $N\n" : "not ok $N\n";
+ $N++;
+
+ if (defined $len) {
+ try($pos, undef, $newlen);
+ }
+}
+
+
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my @c = @_;
+ my $x = join $:, @c, '';
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+# my $open = open FH, "< $file";
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix($a, $x);
+ print "not ok $N\n# expected <$x>, got <$a>\n";
+ }
+ $N++;
+
+ # now check FETCH:
+ my $good = 1;
+ my $msg;
+ for (0.. $#c) {
+ my $aa = $a[$_];
+ unless ($aa eq "$c[$_]$:") {
+ $msg = "expected <$c[$_]$:>, got <$aa>";
+ ctrlfix($msg);
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N # $msg\n";
+ $N++;
+
+ print $o->_check_integrity($file, $ENV{INTEGRITY})
+ ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
Added: vendor/perl/dist/dist/Tie-File/t/29a_upcopy.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/29a_upcopy.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/29a_upcopy.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,211 @@
+#!/usr/bin/perl
+#
+# Unit tests of _upcopy function
+#
+# _upcopy($self, $source, $dest, $len)
+#
+# Take a block of data of leength $len at $source and copy it
+# to $dest, which must be <= $source but which need not be <= $source - $len
+# (That is, this will only copy a block to a position earlier in the file,
+# but the source and destination regions may overlap.)
+
+
+my $file = "tf$$.txt";
+
+print "1..55\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+$: = Tie::File::_default_recsep();
+
+my @subtests = qw(x <x x> x><x <x> <x><x x><x> <x><x> <x><x><x> 0);
+
+$FLEN = 40970; # 2410 records of 17 chars each
+
+# (2-7) Trivial non-moves at start of file
+try(0, 0, 0);
+try(0, 0, 10);
+try(0, 0, 100);
+try(0, 0, 1000);
+try(0, 0, 10000);
+try(0, 0, 20000);
+
+# (8-13) Trivial non-moves in middle of file
+try(100, 100, 0);
+try(100, 100, 10);
+try(100, 100, 100);
+try(100, 100, 1000);
+try(100, 100, 10000);
+try(100, 100, 20000);
+
+# (14) Trivial non-move at end of file
+try($FLEN, $FLEN, 0);
+
+# (15-17) Trivial non-move of tail of file
+try(0, 0, undef);
+try(100, 100, undef);
+try($FLEN, $FLEN, undef);
+
+# (18-24) Moves to start of file
+try(100, 0, 0);
+try(100, 0, 10);
+try(100, 0, 100);
+try(100, 0, 1000);
+try(100, 0, 10000);
+try(100, 0, 20000);
+try(100, 0, undef);
+
+# (25-31) Moves in middle of file
+try(200, 100, 0);
+try(200, 100, 10);
+try(200, 100, 100);
+try(200, 100, 1000);
+try(200, 100, 10000);
+try(200, 100, 20000);
+try(200, 100, undef);
+
+# (32-43) Moves from end of file
+try($FLEN, 10000, 0);
+try($FLEN-10, 10000, 10);
+try($FLEN-100, 10000, 100);
+try($FLEN-1000, 200, 1000);
+try($FLEN-10000, 200, 10000);
+try($FLEN-20000, 200, 20000);
+try($FLEN, 10000, undef);
+try($FLEN-10, 10000, undef);
+try($FLEN-100, 10000, undef);
+try($FLEN-1000, 200, undef);
+try($FLEN-10000, 200, undef);
+try($FLEN-20000, 200, undef);
+
+$FLEN = 40960;
+
+# (44-55) Moves from end of file when file ends on a block boundary
+try($FLEN, 10000, 0);
+try($FLEN-10, 10000, 10);
+try($FLEN-100, 10000, 100);
+try($FLEN-1000, 200, 1000);
+try($FLEN-10000, 200, 10000);
+try($FLEN-20000, 200, 20000);
+try($FLEN, 10000, undef);
+try($FLEN-10, 10000, undef);
+try($FLEN-100, 10000, undef);
+try($FLEN-1000, 200, undef);
+try($FLEN-10000, 200, undef);
+try($FLEN-20000, 200, undef);
+
+sub try {
+ my ($src, $dst, $len) = @_;
+ open F, "> $file" or die "Couldn't open file $file: $!";
+ binmode F;
+
+ # The record has exactly 17 characters. This will help ensure that
+ # even if _upcopy screws up, the data doesn't coincidentally
+ # look good because the remainder accidentally lines up.
+ my $d = substr("0123456789abcdef$:", -17);
+ my $recs = defined($FLEN) ?
+ int($FLEN/length($d))+1 : # enough to make up at least $FLEN
+ int(8192*5/length($d))+1; # at least 5 blocks' worth
+ my $oldfile = $d x $recs;
+ my $flen = defined($FLEN) ? $FLEN : $recs * 17;
+ substr($oldfile, $FLEN) = "" if defined $FLEN; # truncate
+ print F $oldfile;
+ close F;
+
+ die "wrong length!" unless -s $file == $flen;
+
+ # If len is specified, use that. If it's undef,
+ # then behave *as if* we had specified the whole rest of the file
+ my $expected = $oldfile;
+ if (defined $len) {
+ substr($expected, $dst, $len) = substr($expected, $src, $len);
+ } else {
+ substr($expected, $dst) = substr($expected, $src);
+ }
+
+ my $o = tie my @lines, 'Tie::File', $file or die $!;
+ local $SIG{ALRM} = sub { die "Alarm clock" };
+ my $a_retval = eval { alarm(5) unless $^P; $o->_upcopy($src, $dst, $len) };
+ my $err = $@;
+ undef $o; untie @lines; alarm(0);
+ if ($err) {
+ if ($err =~ /^Alarm clock/) {
+ print "# Timeout\n";
+ print "not ok $N\n"; $N++;
+ return;
+ } else {
+ $@ = $err;
+ die;
+ }
+ }
+
+ open F, "< $file" or die "Couldn't open file $file: $!";
+ binmode F;
+ my $actual;
+ { local $/;
+ $actual = <F>;
+ }
+ close F;
+
+ my ($alen, $xlen) = (length $actual, length $expected);
+ unless ($alen == $xlen) {
+ print "# try(@_) expected file length $xlen, actual $alen!\n";
+ }
+ print $actual eq $expected ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+
+
+use POSIX 'SEEK_SET';
+sub check_contents {
+ my @c = @_;
+ my $x = join $:, @c, '';
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+# my $open = open FH, "< $file";
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix($a, $x);
+ print "not ok $N\n# expected <$x>, got <$a>\n";
+ }
+ $N++;
+
+ # now check FETCH:
+ my $good = 1;
+ my $msg;
+ for (0.. $#c) {
+ my $aa = $a[$_];
+ unless ($aa eq "$c[$_]$:") {
+ $msg = "expected <$c[$_]$:>, got <$aa>";
+ ctrlfix($msg);
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N # $msg\n";
+ $N++;
+
+ print $o->_check_integrity($file, $ENV{INTEGRITY})
+ ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/30_defer.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/30_defer.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/30_defer.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,328 @@
+#!/usr/bin/perl
+#
+# Check ->defer and ->flush methods
+#
+# This is the old version, which you used in the past when
+# there was a defer buffer separate from the read cache.
+# There isn't any longer.
+#
+
+use POSIX 'SEEK_SET';
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = "rec0$:rec1$:rec2$:";
+my ($o, $n);
+
+print "1..79\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+$o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (3-6) Deferred storage
+$o->defer;
+$a[3] = "rec3";
+check_contents($data); # nothing written yet
+$a[4] = "rec4";
+check_contents($data); # nothing written yet
+
+# (7-8) Flush
+$o->flush;
+check_contents($data . "rec3$:rec4$:"); # now it's written
+
+# (9-12) Deferred writing disabled?
+$a[3] = "rec9";
+check_contents("${data}rec9$:rec4$:");
+$a[4] = "rec8";
+check_contents("${data}rec9$:rec8$:");
+
+# (13-18) Now let's try two batches of records
+$#a = 2;
+$o->defer;
+$a[0] = "record0";
+check_contents($data); # nothing written yet
+$a[2] = "record2";
+check_contents($data); # nothing written yet
+$o->flush;
+check_contents("record0$:rec1$:record2$:");
+
+# (19-22) Deferred writing past the end of the file
+$o->defer;
+$a[4] = "record4";
+check_contents("record0$:rec1$:record2$:");
+$o->flush;
+check_contents("record0$:rec1$:record2$:$:record4$:");
+
+
+# (23-26) Now two long batches
+$o->defer;
+for (0..2, 4..6) {
+ $a[$_] = "r$_";
+}
+check_contents("record0$:rec1$:record2$:$:record4$:");
+$o->flush;
+check_contents(join $:, "r0".."r2", "", "r4".."r6", "");
+
+# (27-30) Now let's make sure that discarded writes are really discarded
+# We have a 2Mib buffer here, so we can be sure that we aren't accidentally
+# filling it up
+$o->defer;
+for (0, 3, 7) {
+ $a[$_] = "discarded$_";
+}
+check_contents(join $:, "r0".."r2", "", "r4".."r6", "");
+$o->discard;
+check_contents(join $:, "r0".."r2", "", "r4".."r6", "");
+
+################################################################
+#
+# Now we're going to test the results of a small memory limit
+#
+#
+undef $o; untie @a;
+$data = join "$:", map("record$_", 0..7), ""; # records are 8 or 9 bytes long
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+
+# Limit cache+buffer size to 47 bytes
+my $MAX = 47;
+# -- that's enough space for 5 records, but not 6, on both \n and \r\n systems
+my $BUF = 20;
+# -- that's enough space for 2 records, but not 3, on both \n and \r\n systems
+$o = tie @a, 'Tie::File', $file, memory => $MAX, dw_size => $BUF;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (31-32) Fill up the read cache
+my @z;
+ at z = @a;
+# the cache now contains records 3,4,5,6,7.
+check_caches({map(($_ => "record$_$:"), 3..7)},
+ {});
+
+# (33-44) See if overloading the defer starts by flushing the read cache
+# and then flushes out the defer
+$o->defer;
+$a[0] = "recordA"; # That should flush record 3 from the cache
+check_caches({map(($_ => "record$_$:"), 4..7)},
+ {0 => "recordA$:"});
+check_contents($data);
+
+$a[1] = "recordB"; # That should flush record 4 from the cache
+check_caches({map(($_ => "record$_$:"), 5..7)},
+ {0 => "recordA$:",
+ 1 => "recordB$:"});
+check_contents($data);
+
+$a[2] = "recordC"; # That should flush the whole darn defer
+# This shouldn't change the cache contents
+check_caches({map(($_ => "record$_$:"), 5..7)},
+ {}); # URRRP
+check_contents(join("$:", qw(recordA recordB recordC
+ record3 record4 record5 record6 record7)) . "$:");
+
+$a[3] = "recordD"; # even though we flushed, deferring is STILL ENABLED
+check_caches({map(($_ => "record$_$:"), 5..7)},
+ {3 => "recordD$:"});
+check_contents(join("$:", qw(recordA recordB recordC
+ record3 record4 record5 record6 record7)) . "$:");
+
+# Check readcache-deferbuffer interactions
+
+# (45-47) This should remove outdated data from the read cache
+$a[5] = "recordE";
+check_caches({6 => "record6$:", 7 => "record7$:"},
+ {3 => "recordD$:", 5 => "recordE$:"});
+check_contents(join("$:", qw(recordA recordB recordC
+ record3 record4 record5 record6 record7)) . "$:");
+
+# (48-51) This should read back out of the defer buffer
+# without adding anything to the read cache
+my $z;
+$z = $a[5];
+print $z eq "recordE" ? "ok $N\n" : "not ok $N\n"; $N++;
+check_caches({6 => "record6$:", 7 => "record7$:"},
+ {3 => "recordD$:", 5 => "recordE$:"});
+check_contents(join("$:", qw(recordA recordB recordC
+ record3 record4 record5 record6 record7)) . "$:");
+
+# (52-55) This should repopulate the read cache with a new record
+$z = $a[0];
+print $z eq "recordA" ? "ok $N\n" : "not ok $N\n"; $N++;
+check_caches({0 => "recordA$:", 6 => "record6$:", 7 => "record7$:"},
+ {3 => "recordD$:", 5 => "recordE$:"});
+check_contents(join("$:", qw(recordA recordB recordC
+ record3 record4 record5 record6 record7)) . "$:");
+
+# (56-59) This should flush the LRU record from the read cache
+$z = $a[4];
+print $z eq "record4" ? "ok $N\n" : "not ok $N\n"; $N++;
+check_caches({7 => "record7$:", 0 => "recordA$:", 4 => "record4$:"},
+ {3 => "recordD$:", 5 => "recordE$:"});
+check_contents(join("$:", qw(recordA recordB recordC
+ record3 record4 record5 record6 record7)) . "$:");
+
+# (60-63) This should FLUSH the deferred buffer
+$z = splice @a, 3, 1, "recordZ";
+print $z eq "recordD" ? "ok $N\n" : "not ok $N\n"; $N++;
+check_caches({7 => "record7$:", 0 => "recordA$:", 4 => "record4$:", 3 => "recordZ$:"},
+ {});
+check_contents(join("$:", qw(recordA recordB recordC
+ recordZ record4 recordE record6 record7)) . "$:");
+
+# (64-66) We should STILL be in deferred writing mode
+$a[5] = "recordX";
+check_caches({7 => "record7$:", 0 => "recordA$:", 4 => "record4$:", 3 => "recordZ$:"},
+ {5 => "recordX$:"});
+check_contents(join("$:", qw(recordA recordB recordC
+ recordZ record4 recordE record6 record7)) . "$:");
+
+# Fill up the defer buffer again
+$a[4] = "recordP";
+# (67-69) This should OVERWRITE the existing deferred record
+# and NOT flush the buffer
+$a[5] = "recordQ";
+check_caches({7 => "record7$:", 0 => "recordA$:", 3 => "recordZ$:"},
+ {5 => "recordQ$:", 4 => "recordP$:"});
+check_contents(join("$:", qw(recordA recordB recordC
+ recordZ record4 recordE record6 record7)) . "$:");
+
+# (70-72) Discard should just dump the whole deferbuffer
+$o->discard;
+check_caches({7 => "record7$:", 0 => "recordA$:", 3 => "recordZ$:"},
+ {});
+check_contents(join("$:", qw(recordA recordB recordC
+ recordZ record4 recordE record6 record7)) . "$:");
+
+# (73-75) NOW we are out of deferred writing mode
+$a[0] = "recordF";
+check_caches({7 => "record7$:", 0 => "recordF$:", 3 => "recordZ$:"},
+ {});
+check_contents(join("$:", qw(recordF recordB recordC
+ recordZ record4 recordE record6 record7)) . "$:");
+
+# (76-79) Last call--untying the array should flush the deferbuffer
+$o->defer;
+$a[0] = "flushed";
+check_caches({7 => "record7$:", 3 => "recordZ$:"},
+ {0 => "flushed$:" });
+check_contents(join("$:", qw(recordF recordB recordC
+ recordZ record4 recordE record6 record7)) . "$:");
+undef $o;
+untie @a;
+# (79) We can't use check_contents any more, because the object is dead
+open F, "< $file" or die;
+binmode F;
+{ local $/ ; $z = <F> }
+close F;
+my $x = join("$:", qw(flushed recordB recordC
+ recordZ record4 recordE record6 record7)) . "$:";
+if ($z eq $x) {
+ print "ok $N\n";
+} else {
+ my $msg = ctrlfix("expected <$x>, got <$z>");
+ print "not ok $N \# $msg\n";
+}
+$N++;
+
+################################################################
+
+
+sub check_caches {
+ my ($xcache, $xdefer) = @_;
+
+# my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+# print $integrity ? "ok $N\n" : "not ok $N\n";
+# $N++;
+
+ my $good = 1;
+
+ # Copy the contents of the cache into a regular hash
+ my %cache;
+ for my $k ($o->{cache}->ckeys) {
+ $cache{$k} = $o->{cache}->_produce($k);
+ }
+
+ $good &&= hash_equal(\%cache, $xcache, "true cache", "expected cache");
+ $good &&= hash_equal($o->{deferred}, $xdefer, "true defer", "expected defer");
+ print $good ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub hash_equal {
+ my ($a, $b, $ha, $hb) = @_;
+ $ha = 'first hash' unless defined $ha;
+ $hb = 'second hash' unless defined $hb;
+
+ my $good = 1;
+ my %b_seen;
+
+ for my $k (keys %$a) {
+ if (! exists $b->{$k}) {
+ print ctrlfix("# Key $k is in $ha but not $hb"), "\n";
+ $good = 0;
+ } elsif ($b->{$k} ne $a->{$k}) {
+ print ctrlfix("# Key $k is <$a->{$k}> in $ha but <$b->{$k}> in $hb"), "\n";
+ $b_seen{$k} = 1;
+ $good = 0;
+ } else {
+ $b_seen{$k} = 1;
+ }
+ }
+
+ for my $k (keys %$b) {
+ unless ($b_seen{$k}) {
+ print ctrlfix("# Key $k is in $hb but not $ha"), "\n";
+ $good = 0;
+ }
+ }
+
+ $good;
+}
+
+
+sub check_contents {
+ my $x = shift;
+
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ my $msg = ctrlfix("# expected <$x>, got <$a>");
+ print "not ok $N\n$msg\n";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ local $_ = shift;
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ $_;
+}
+
+END {
+ undef $o;
+ untie @a if tied @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/31_autodefer.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/31_autodefer.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/31_autodefer.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,182 @@
+#!/usr/bin/perl
+#
+# Check behavior of 'autodefer' feature
+# Mostly this isn't implemented yet
+# This file is primarily here to make sure that the promised ->autodefer
+# method doesn't croak.
+#
+
+use POSIX 'SEEK_SET';
+
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = "rec0$:rec1$:rec2$:";
+my ($o, $n, @a);
+
+print "1..65\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+$o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# I am an undocumented feature
+$o->{autodefer_filelen_threshhold} = 0;
+# Normally autodeferring only works on large files. This disables that.
+
+# (3-22) Deferred storage
+$a[3] = "rec3";
+check_autodeferring('OFF');
+$a[4] = "rec4";
+check_autodeferring('OFF');
+$a[5] = "rec5";
+check_autodeferring('ON');
+check_contents($data . "rec3$:rec4$:"); # only the first two were written
+$a[6] = "rec6";
+check_autodeferring('ON');
+check_contents($data . "rec3$:rec4$:"); # still nothing written
+$a[7] = "rec7";
+check_autodeferring('ON');
+check_contents($data . "rec3$:rec4$:"); # still nothing written
+$a[0] = "recX";
+check_autodeferring('OFF');
+check_contents("recX$:rec1$:rec2$:rec3$:rec4$:rec5$:rec6$:rec7$:");
+$a[1] = "recY";
+check_autodeferring('OFF');
+check_contents("recX$:recY$:rec2$:rec3$:rec4$:rec5$:rec6$:rec7$:");
+$a[2] = "recZ"; # it kicks in here
+check_autodeferring('ON');
+check_contents("recX$:recY$:rec2$:rec3$:rec4$:rec5$:rec6$:rec7$:");
+
+# (23-26) Explicitly enabling deferred writing deactivates autodeferring
+$o->defer;
+check_autodeferring('OFF');
+check_contents("recX$:recY$:recZ$:rec3$:rec4$:rec5$:rec6$:rec7$:");
+$o->discard;
+check_autodeferring('OFF');
+
+# (27-32) Now let's try the CLEAR special case
+ at a = ("r0" .. "r4");
+check_autodeferring('ON');
+# The file was extended to the right length, but nothing was actually written.
+check_contents("$:$:$:$:$:");
+$a[2] = "fish";
+check_autodeferring('OFF');
+check_contents("r0$:r1$:fish$:r3$:r4$:");
+
+# (33-47) Now let's try the originally intended application: a 'for' loop.
+my $it = 0;
+for (@a) {
+ $_ = "##$_";
+ if ($it == 0) {
+ check_autodeferring('OFF');
+ check_contents("##r0$:r1$:fish$:r3$:r4$:");
+ } elsif ($it == 1) {
+ check_autodeferring('OFF');
+ check_contents("##r0$:##r1$:fish$:r3$:r4$:");
+ } else {
+ check_autodeferring('ON');
+ check_contents("##r0$:##r1$:fish$:r3$:r4$:");
+ }
+ $it++;
+}
+
+# (48-56) Autodeferring should not become active during explicit defer mode
+$o->defer(); # This should flush the pending autodeferred records
+ # and deactivate autodeferring
+check_autodeferring('OFF');
+check_contents("##r0$:##r1$:##fish$:##r3$:##r4$:");
+ at a = ("s0" .. "s4");
+check_autodeferring('OFF');
+check_contents("");
+$o->flush;
+check_autodeferring('OFF');
+check_contents("s0$:s1$:s2$:s3$:s4$:");
+
+undef $o; untie @a;
+
+# Limit cache+buffer size to 47 bytes
+my $MAX = 47;
+# -- that's enough space for 5 records, but not 6, on both \n and \r\n systems
+my $BUF = 20;
+# -- that's enough space for 2 records, but not 3, on both \n and \r\n systems
+# Re-tie the object for more tests
+$o = tie @a, 'Tie::File', $file, autodefer => 0;
+die $! unless $o;
+# I am an undocumented feature
+$o->{autodefer_filelen_threshhold} = 0;
+# Normally autodeferring only works on large files. This disables that.
+
+# (57-59) Did the autodefer => 0 option work?
+# (If it doesn't, a whole bunch of the other test files will fail.)
+ at a = (0..3);
+check_autodeferring('OFF');
+check_contents(join("$:", qw(0 1 2 3), ""));
+
+# (60-62) Does the ->autodefer method work?
+$o->autodefer(1);
+ at a = (10..13);
+check_autodeferring('ON');
+check_contents("$:$:$:$:"); # This might be unfortunate.
+
+# (63-65) Does the ->autodefer method work?
+$o->autodefer(0);
+check_autodeferring('OFF');
+check_contents(join("$:", qw(10 11 12 13), ""));
+
+
+sub check_autodeferring {
+ my ($x) = shift;
+ my $a = $o->{autodeferring} ? 'ON' : 'OFF';
+ if ($x eq $a) {
+ print "ok $N\n";
+ } else {
+ print "not ok $N \# Autodeferring was $a, expected it to be $x\n";
+ }
+ $N++;
+}
+
+
+sub check_contents {
+ my $x = shift;
+# for (values %{$o->{cache}}) {
+# print "# cache=$_";
+# }
+
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ ctrlfix(my $msg = "# expected <$x>, got <$a>");
+ print "not ok $N\n$msg\n";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ for (@_) {
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ }
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/32_defer_misc.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/32_defer_misc.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/32_defer_misc.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,232 @@
+#!/usr/bin/perl
+#
+# Check interactions of deferred writing
+# with miscellaneous methods like DELETE, EXISTS,
+# FETCHSIZE, STORESIZE, CLEAR, EXTEND
+#
+
+use POSIX 'SEEK_SET';
+my $file = "tf$$.txt";
+$: = Tie::File::_default_recsep();
+my $data = "rec0$:rec1$:rec2$:";
+my ($o, $n);
+
+print "1..53\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+$o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (3-6) EXISTS
+if ($] >= 5.006) {
+ eval << 'TESTS';
+$o->defer;
+expect(not exists $a[4]);
+$a[4] = "rec4";
+expect(exists $a[4]);
+check_contents($data); # nothing written yet
+$o->discard;
+TESTS
+} else {
+ for (3..6) {
+ print "ok $_ \# skipped (no exists for arrays)\n";
+ $N++;
+ }
+}
+
+# (7-10) FETCHSIZE
+$o->defer;
+expect($#a, 2);
+$a[4] = "rec4";
+expect($#a, 4);
+check_contents($data); # nothing written yet
+$o->discard;
+
+# (11-21) STORESIZE
+$o->defer;
+$#a = 4;
+check_contents($data); # nothing written yet
+expect($#a, 4);
+$o->flush;
+expect($#a, 4);
+check_contents("$data$:$:"); # two extra empty records
+
+$o->defer;
+$a[4] = "rec4";
+$#a = 2;
+expect($a[4], undef);
+check_contents($data); # written data was unwritten
+$o->flush;
+check_contents($data); # nothing left to write
+
+# (22-28) CLEAR
+$o->defer;
+$a[9] = "rec9";
+check_contents($data); # nothing written yet
+ at a = ();
+check_contents(""); # this happens right away
+expect($a[9], undef);
+$o->flush;
+check_contents(""); # nothing left to write
+
+# (29-34) EXTEND
+# Actually it's not real clear what these tests are for
+# since EXTEND has no defined semantics
+$o->defer;
+ at a = (0..3);
+check_contents(""); # nothing happened yet
+expect($a[3], "3");
+expect($a[4], undef);
+$o->flush;
+check_contents("0$:1$:2$:3$:"); # file now 4 records long
+
+# (35-53) DELETE
+if ($] >= 5.006) {
+ eval << 'TESTS';
+my $del;
+$o->defer;
+$del = delete $a[2];
+check_contents("0$:1$:2$:3$:"); # nothing happened yet
+expect($a[2], "");
+expect($del, "2");
+$del = delete $a[3]; # shortens file!
+check_contents("0$:1$:2$:"); # deferred writes NOT flushed
+expect($a[3], undef);
+expect($a[2], "");
+expect($del, "3");
+$a[2] = "cookies";
+$del = delete $a[2]; # shortens file!
+expect($a[2], undef);
+expect($del, 'cookies');
+check_contents("0$:1$:");
+$a[0] = "crackers";
+$del = delete $a[0]; # file unchanged
+expect($a[0], "");
+expect($del, 'crackers');
+check_contents("0$:1$:"); # no change yet
+$o->flush;
+check_contents("$:1$:"); # record 0 is NOT 'cookies';
+TESTS
+} else {
+ for (35..53) {
+ print "ok $_ \# skipped (no delete for arrays)\n";
+ $N++;
+ }
+}
+
+################################################################
+
+
+sub check_caches {
+ my ($xcache, $xdefer) = @_;
+
+# my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+# print $integrity ? "ok $N\n" : "not ok $N\n";
+# $N++;
+
+ my $good = 1;
+ $good &&= hash_equal($o->{cache}, $xcache, "true cache", "expected cache");
+ $good &&= hash_equal($o->{deferred}, $xdefer, "true defer", "expected defer");
+ print $good ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub hash_equal {
+ my ($a, $b, $ha, $hb) = @_;
+ $ha = 'first hash' unless defined $ha;
+ $hb = 'second hash' unless defined $hb;
+
+ my $good = 1;
+ my %b_seen;
+
+ for my $k (keys %$a) {
+ if (! exists $b->{$k}) {
+ print ctrlfix("# Key $k is in $ha but not $hb"), "\n";
+ $good = 0;
+ } elsif ($b->{$k} ne $a->{$k}) {
+ print ctrlfix("# Key $k is <$a->{$k}> in $ha but <$b->{$k}> in $hb"), "\n";
+ $b_seen{$k} = 1;
+ $good = 0;
+ } else {
+ $b_seen{$k} = 1;
+ }
+ }
+
+ for my $k (keys %$b) {
+ unless ($b_seen{$k}) {
+ print ctrlfix("# Key $k is in $hb but not $ha"), "\n";
+ $good = 0;
+ }
+ }
+
+ $good;
+}
+
+
+sub check_contents {
+ my $x = shift;
+
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ my $msg = ctrlfix("# expected <$x>, got <$a>");
+ print "not ok $N\n$msg\n";
+ }
+ $N++;
+}
+
+sub expect {
+ if (@_ == 1) {
+ print $_[0] ? "ok $N\n" : "not ok $N\n";
+ } elsif (@_ == 2) {
+ my ($a, $x) = @_;
+ if (! defined($a) && ! defined($x)) { print "ok $N\n" }
+ elsif ( defined($a) && ! defined($x)) {
+ ctrlfix(my $msg = "expected UNDEF, got <$a>");
+ print "not ok $N \# $msg\n";
+ }
+ elsif (! defined($a) && defined($x)) {
+ ctrlfix(my $msg = "expected <$x>, got UNDEF");
+ print "not ok $N \# $msg\n";
+ } elsif ($a eq $x) { print "ok $N\n" }
+ else {
+ ctrlfix(my $msg = "expected <$x>, got <$a>");
+ print "not ok $N \# $msg\n";
+ }
+ } else {
+ die "expect() got ", scalar(@_), " args, should have been 1 or 2";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ local $_ = shift;
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ $_;
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/33_defer_vs.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/33_defer_vs.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/33_defer_vs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,125 @@
+#!/usr/bin/perl
+#
+# Deferred caching of varying size records
+#
+# 30_defer.t always uses records that are 8 bytes long
+# (9 on \r\n machines.) We might miss some sort of
+# length-calculation bug as a result. This file will run some of the same
+# tests, but with with varying-length records.
+#
+
+use POSIX 'SEEK_SET';
+my $file = "tf$$.txt";
+# print "1..0\n"; exit;
+$: = Tie::File::_default_recsep();
+my $data = "$:1$:22$:";
+my ($o, $n);
+
+print "1..30\n";
+
+my $N = 1;
+use Tie::File;
+print "ok $N\n"; $N++;
+
+open F, "> $file" or die $!;
+binmode F;
+print F $data;
+close F;
+$o = tie @a, 'Tie::File', $file;
+print $o ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (3-6) Deferred storage
+$o->defer;
+$a[3] = "333";
+check_contents($data); # nothing written yet
+$a[4] = "4444";
+check_contents($data); # nothing written yet
+
+# (7-8) Flush
+$o->flush;
+check_contents($data . "333$:4444$:"); # now it's written
+
+# (9-12) Deferred writing disabled?
+$a[3] = "999999999";
+check_contents("${data}999999999$:4444$:");
+$a[4] = "88888888";
+check_contents("${data}999999999$:88888888$:");
+
+# (13-18) Now let's try two batches of records
+$#a = 2;
+$o->defer;
+$a[0] = "55555";
+check_contents($data); # nothing written yet
+$a[2] = "aaaaaaaaaa";
+check_contents($data); # nothing written yet
+$o->flush;
+check_contents("55555$:1$:aaaaaaaaaa$:");
+
+# (19-22) Deferred writing past the end of the file
+$o->defer;
+$a[4] = "7777777";
+check_contents("55555$:1$:aaaaaaaaaa$:");
+$o->flush;
+check_contents("55555$:1$:aaaaaaaaaa$:$:7777777$:");
+
+
+# (23-26) Now two long batches
+$o->defer;
+%l = qw(0 2 1 3 2 4 4 5 5 4 6 3);
+for (0..2, 4..6) {
+ $a[$_] = $_ x $l{$_};
+}
+check_contents("55555$:1$:aaaaaaaaaa$:$:7777777$:");
+$o->flush;
+check_contents(join $:, "00", "111", "2222", "", "44444", "5555", "666", "");
+
+# (27-30) Now let's make sure that discarded writes are really discarded
+# We have a 2Mib buffer here, so we can be sure that we aren't accidentally
+# filling it up
+$o->defer;
+for (0, 3, 7) {
+ $a[$_] = "discarded" . $_ x $_;
+}
+check_contents(join $:, "00", "111", "2222", "", "44444", "5555", "666", "");
+$o->discard;
+check_contents(join $:, "00", "111", "2222", "", "44444", "5555", "666", "");
+
+################################################################
+
+
+sub check_contents {
+ my $x = shift;
+
+ my $integrity = $o->_check_integrity($file, $ENV{INTEGRITY});
+ print $integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+
+ local *FH = $o->{fh};
+ seek FH, 0, SEEK_SET;
+
+ my $a;
+ { local $/; $a = <FH> }
+ $a = "" unless defined $a;
+ if ($a eq $x) {
+ print "ok $N\n";
+ } else {
+ my $msg = ctrlfix("# expected <$x>, got <$a>");
+ print "not ok $N\n$msg\n";
+ }
+ $N++;
+}
+
+sub ctrlfix {
+ local $_ = shift;
+ s/\n/\\n/g;
+ s/\r/\\r/g;
+ $_;
+}
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
+
Added: vendor/perl/dist/dist/Tie-File/t/40_abs_cache.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/40_abs_cache.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/40_abs_cache.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,281 @@
+#!/usr/bin/perl
+#
+# Unit tests for abstract cache implementation
+#
+# Test the following methods:
+# * new()
+# * is_empty()
+# * empty()
+# * lookup(key)
+# * remove(key)
+# * insert(key,val)
+# * update(key,val)
+# * rekey(okeys,nkeys)
+# * expire()
+# * keys()
+# * bytes()
+# DESTROY()
+#
+# 20020327 You somehow managed to miss:
+# * reduce_size_to(bytes)
+#
+
+# print "1..0\n"; exit;
+print "1..42\n";
+
+my ($N, @R, $Q, $ar) = (1);
+
+use Tie::File;
+print "ok $N\n";
+$N++;
+
+my $h = Tie::File::Cache->new(10000) or die;
+print "ok $N\n";
+$N++;
+
+# (3) Are all the methods there?
+{
+ my $good = 1;
+ for my $meth (qw(new is_empty empty lookup remove
+ insert update rekey expire ckeys bytes
+ set_limit adj_limit flush reduce_size_to
+ _produce _produce_lru )) {
+ unless ($h->can($meth)) {
+ print STDERR "# Method '$meth' is missing.\n";
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+# (4-5) Straight insert and removal FIFO test
+$ar = 'a0';
+for (1..10) {
+ $h->insert($_, $ar++);
+}
+1;
+for (1..10) {
+ push @R, $h->expire;
+}
+$iota = iota('a',9);
+print "@R" eq $iota
+ ? "ok $N\n" : "not ok $N \# expected ($iota), got (@R)\n";
+$N++;
+check($h);
+
+# (6-7) Remove from empty heap
+$n = $h->expire;
+print ! defined $n ? "ok $N\n" : "not ok $N \# expected UNDEF, got $n";
+$N++;
+check($h);
+
+# (8-9) Interleaved insert and removal
+$Q = 0;
+ at R = ();
+for my $i (1..4) {
+ for my $j (1..$i) {
+ $h->insert($Q, "b$Q");
+ $Q++;
+ }
+ for my $j (1..$i) {
+ push @R, $h->expire;
+ }
+}
+$iota = iota('b', 9);
+print "@R" eq $iota ? "ok $N\n" : "not ok $N \# expected ($iota), got (@R)\n";
+$N++;
+check($h);
+
+# (10) It should be empty now
+print $h->is_empty ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (11-12) Insert and delete
+$Q = 1;
+for (1..10) {
+ $h->insert($_, "c$Q");
+ $Q++;
+}
+for (2, 4, 6, 8, 10) {
+ $h->remove($_);
+}
+ at R = ();
+push @R, $n while defined ($n = $h->expire);
+print "@R" eq "c1 c3 c5 c7 c9" ?
+ "ok $N\n" : "not ok $N \# expected (c1 c3 c5 c7 c9), got (@R)\n";
+$N++;
+check($h);
+
+# (13-14) Interleaved insert and delete
+$Q = 1; my $QQ = 1;
+ at R = ();
+for my $i (1..4) {
+ for my $j (1..$i) {
+ $h->insert($Q, "d$Q");
+ $Q++;
+ }
+ for my $j (1..$i) {
+ $h->remove($QQ) if $QQ % 2 == 0;
+ $QQ++;
+ }
+}
+push @R, $n while defined ($n = $h->expire);
+print "@R" eq "d1 d3 d5 d7 d9" ?
+ "ok $N\n" : "not ok $N \# expected (d1 d3 d5 d7 d9), got (@R)\n";
+$N++;
+check($h);
+
+# (15-16) Promote
+$h->empty;
+$Q = 1;
+for (1..10) {
+ $h->insert($_, "e$Q");
+ unless ($h->_check_integrity) {
+ die "Integrity failed after inserting ($_, e$Q)\n";
+ }
+ $Q++;
+}
+1;
+for (2, 4, 6, 8, 10) {
+ $h->_promote($_);
+}
+ at R = ();
+push @R, $n while defined ($n = $h->expire);
+print "@R" eq "e1 e3 e5 e7 e9 e2 e4 e6 e8 e10" ?
+ "ok $N\n" :
+ "not ok $N \# expected (e1 e3 e5 e7 e9 e2 e4 e6 e8 e10), got (@R)\n";
+$N++;
+check($h);
+
+# (17-22) Lookup
+$Q = 1;
+for (1..10) {
+ $h->insert($_, "f$Q");
+ $Q++;
+}
+1;
+for (2, 4, 6, 4, 8) {
+ my $r = $h->lookup($_);
+ print $r eq "f$_" ? "ok $N\n" : "not ok $N \# expected f$_, got $r\n";
+ $N++;
+}
+check($h);
+
+# (23) It shouldn't be empty
+print ! $h->is_empty ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (24-25) Lookup should have promoted the looked-up records
+ at R = ();
+push @R, $n while defined ($n = $h->expire);
+print "@R" eq "f1 f3 f5 f7 f9 f10 f2 f6 f4 f8" ?
+ "ok $N\n" :
+ "not ok $N \# expected (f1 f3 f5 f7 f9 f10 f2 f6 f4 f8), got (@R)\n";
+$N++;
+check($h);
+
+# (26-29) Typical 'rekey' operation
+$Q = 1;
+for (1..10) {
+ $h->insert($_, "g$Q");
+ $Q++;
+}
+$h->rekey([6,7,8,9,10], [8,9,10,11,12]);
+my %x = qw(1 g1 2 g2 3 g3 4 g4 5 g5
+ 8 g6 9 g7 10 g8 11 g9 12 g10);
+{
+ my $good = 1;
+ for my $k (keys %x) {
+ my $v = $h->lookup($k);
+ $v = "UNDEF" unless defined $v;
+ unless ($v eq $x{$k}) {
+ print "# looked up $k, got $v, expected $x{$k}\n";
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+check($h);
+{
+ my $good = 1;
+ for my $k (6, 7) {
+ my $v = $h->lookup($k);
+ if (defined $v) {
+ print "# looked up $k, got $v, should have been undef\n";
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+check($h);
+
+# (30-31) ckeys
+ at R = sort { $a <=> $b } $h->ckeys;
+print "@R" eq "1 2 3 4 5 8 9 10 11 12" ?
+ "ok $N\n" :
+ "not ok $N \# expected (1 2 3 4 5 8 9 10 11 12) got (@R)\n";
+$N++;
+check($h);
+1;
+# (32-33) update
+for (1..5, 8..12) {
+ $h->update($_, "h$_");
+}
+ at R = ();
+for (sort { $a <=> $b } $h->ckeys) {
+ push @R, $h->lookup($_);
+}
+print "@R" eq "h1 h2 h3 h4 h5 h8 h9 h10 h11 h12" ?
+ "ok $N\n" :
+ "not ok $N \# expected (h1 h2 h3 h4 h5 h8 h9 h10 h11 h12) got (@R)\n";
+$N++;
+check($h);
+
+# (34-37) bytes
+my $B;
+$B = $h->bytes;
+print $B == 23 ? "ok $N\n" : "not ok $N \# expected 23, got $B\n";
+$N++;
+check($h);
+$h->update('12', "yobgorgle");
+$B = $h->bytes;
+print $B == 29 ? "ok $N\n" : "not ok $N \# expected 29, got $B\n";
+$N++;
+check($h);
+
+# (38-41) empty
+$h->empty;
+print $h->is_empty ? "ok $N\n" : "not ok $N\n";
+$N++;
+check($h);
+$n = $h->expire;
+print ! defined $n ? "ok $N\n" : "not ok $N \# expected UNDEF, got $n";
+$N++;
+check($h);
+
+# (42) very weak testing of DESTROY
+undef $h;
+# are we still alive?
+print "ok $N\n";
+$N++;
+
+sub check {
+ my $h = shift;
+ print $h->_check_integrity ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+sub iota {
+ my ($p, $n) = @_;
+ my $r;
+ my $i = 0;
+ while ($i <= $n) {
+ $r .= "$p$i ";
+ $i++;
+ }
+ chop $r;
+ $r;
+}
Added: vendor/perl/dist/dist/Tie-File/t/41_heap.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/41_heap.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/41_heap.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,259 @@
+#!/usr/bin/perl
+#
+# Unit tests for heap implementation
+#
+# Test the following methods:
+# new
+# is_empty
+# empty
+# insert
+# remove
+# popheap
+# promote
+# lookup
+# set_val
+# rekey
+# expire_order
+
+
+# Finish these later.
+
+# They're nonurgent because the important heap stuff is extensively
+# tested by tests 19, 20, 24, 30, 32, 33, and 40, as well as by pretty
+# much everything else.
+print "1..1\n";
+
+
+my ($N, @R, $Q, $ar) = (1);
+
+use Tie::File;
+print "ok $N\n";
+$N++;
+exit;
+
+__END__
+
+my @HEAP_MOVE;
+sub Fake::Cache::_heap_move { push @HEAP_MOVE, @_ }
+
+my $h = Tie::File::Heap->new(bless [] => 'Fake::Cache');
+print "ok $N\n";
+$N++;
+
+# (3) Are all the methods there?
+{
+ my $good = 1;
+ for my $meth (qw(new is_empty empty lookup insert remove popheap
+ promote set_val rekey expire_order)) {
+ unless ($h->can($meth)) {
+ print STDERR "# Method '$meth' is missing.\n";
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+# (4) Straight insert and removal FIFO test
+$ar = 'a0';
+for (1..10) {
+ $h->insert($_, $ar++);
+}
+for (1..10) {
+ push @R, $h->popheap;
+}
+$iota = iota('a',9);
+print "@R" eq $iota
+ ? "ok $N\n" : "not ok $N \# expected ($iota), got (@R)\n";
+$N++;
+
+# (5) Remove from empty heap
+$n = $h->popheap;
+print ! defined $n ? "ok $N\n" : "not ok $N \# expected UNDEF, got $n";
+$N++;
+
+# (6) Interleaved insert and removal
+$Q = 0;
+ at R = ();
+for my $i (1..4) {
+ for my $j (1..$i) {
+ $h->insert($Q, "b$Q");
+ $Q++;
+ }
+ for my $j (1..$i) {
+ push @R, $h->popheap;
+ }
+}
+$iota = iota('b', 9);
+print "@R" eq $iota ? "ok $N\n" : "not ok $N \# expected ($iota), got (@R)\n";
+$N++;
+
+# (7) It should be empty now
+print $h->is_empty ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (8) Insert and delete
+$Q = 1;
+for (1..10) {
+ $h->insert($_, "c$Q");
+ $Q++;
+}
+for (2, 4, 6, 8, 10) {
+ $h->remove($_);
+}
+ at R = ();
+push @R, $n while defined ($n = $h->popheap);
+print "@R" eq "c1 c3 c5 c7 c9" ?
+ "ok $N\n" : "not ok $N \# expected (c1 c3 c5 c7 c9), got (@R)\n";
+$N++;
+
+# (9) Interleaved insert and delete
+$Q = 1; my $QQ = 1;
+ at R = ();
+for my $i (1..4) {
+ for my $j (1..$i) {
+ $h->insert($Q, "d$Q");
+ $Q++;
+ }
+ for my $j (1..$i) {
+ $h->remove($QQ) if $QQ % 2 == 0;
+ $QQ++;
+ }
+}
+push @R, $n while defined ($n = $h->popheap);
+print "@R" eq "d1 d3 d5 d7 d9" ?
+ "ok $N\n" : "not ok $N \# expected (d1 d3 d5 d7 d9), got (@R)\n";
+$N++;
+
+# (10) Promote
+$Q = 1;
+for (1..10) {
+ $h->insert($_, "e$Q");
+ $Q++;
+}
+for (2, 4, 6, 8, 10) {
+ $h->promote($_);
+}
+ at R = ();
+push @R, $n while defined ($n = $h->popheap);
+print "@R" eq "e1 e3 e5 e7 e9 e2 e4 e6 e8 e10" ?
+ "ok $N\n" :
+ "not ok $N \# expected (e1 e3 e5 e7 e9 e2 e4 e6 e8 e10), got (@R)\n";
+$N++;
+
+# (11-15) Lookup
+$Q = 1;
+for (1..10) {
+ $h->insert($_, "f$Q");
+ $Q++;
+}
+for (2, 4, 6, 4, 8) {
+ my $r = $h->lookup($_);
+ print $r eq "f$_" ? "ok $N\n" : "not ok $N \# expected f$_, got $r\n";
+ $N++;
+}
+
+# (16) It shouldn't be empty
+print ! $h->is_empty ? "ok $N\n" : "not ok $N\n";
+$N++;
+
+# (17) Lookup should have promoted the looked-up records
+ at R = ();
+push @R, $n while defined ($n = $h->popheap);
+print "@R" eq "f1 f3 f5 f7 f9 f10 f2 f6 f4 f8" ?
+ "ok $N\n" :
+ "not ok $N \# expected (f1 f3 f5 f7 f9 f10 f2 f6 f4 f8), got (@R)\n";
+$N++;
+
+# (18-19) Typical 'rekey' operation
+$Q = 1;
+for (1..10) {
+ $h->insert($_, "g$Q");
+ $Q++;
+}
+
+$h->rekey([6,7,8,9,10], [8,9,10,11,12]);
+my %x = qw(1 g1 2 g2 3 g3 4 g4 5 g5
+ 8 g6 9 g7 10 g8 11 g9 12 g10);
+{
+ my $good = 1;
+ for my $k (keys %x) {
+ my $v = $h->lookup($k);
+ $v = "UNDEF" unless defined $v;
+ unless ($v eq $x{$k}) {
+ print "# looked up $k, got $v, expected $x{$k}\n";
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+{
+ my $good = 1;
+ for my $k (6, 7) {
+ my $v = $h->lookup($k);
+ if (defined $v) {
+ print "# looked up $k, got $v, should have been undef\n";
+ $good = 0;
+ }
+ }
+ print $good ? "ok $N\n" : "not ok $N\n";
+ $N++;
+}
+
+# (20) keys
+ at R = sort { $a <=> $b } $h->keys;
+print "@R" eq "1 2 3 4 5 8 9 10 11 12" ?
+ "ok $N\n" :
+ "not ok $N \# expected (1 2 3 4 5 8 9 10 11 12) got (@R)\n";
+$N++;
+
+# (21) update
+for (1..5, 8..12) {
+ $h->update($_, "h$_");
+}
+ at R = ();
+for (sort { $a <=> $b } $h->keys) {
+ push @R, $h->lookup($_);
+}
+print "@R" eq "h1 h2 h3 h4 h5 h8 h9 h10 h11 h12" ?
+ "ok $N\n" :
+ "not ok $N \# expected (h1 h2 h3 h4 h5 h8 h9 h10 h11 h12) got (@R)\n";
+$N++;
+
+# (22-23) bytes
+my $B;
+$B = $h->bytes;
+print $B == 23 ? "ok $N\n" : "not ok $N \# expected 23, got $B\n";
+$N++;
+$h->update('12', "yobgorgle");
+$B = $h->bytes;
+print $B == 29 ? "ok $N\n" : "not ok $N \# expected 29, got $B\n";
+$N++;
+
+# (24-25) empty
+$h->empty;
+print $h->is_empty ? "ok $N\n" : "not ok $N\n";
+$N++;
+$n = $h->popheap;
+print ! defined $n ? "ok $N\n" : "not ok $N \# expected UNDEF, got $n";
+$N++;
+
+# (26) very weak testing of DESTROY
+undef $h;
+# are we still alive?
+print "ok $N\n";
+$N++;
+
+
+sub iota {
+ my ($p, $n) = @_;
+ my $r;
+ my $i = 0;
+ while ($i <= $n) {
+ $r .= "$p$i ";
+ $i++;
+ }
+ chop $r;
+ $r;
+}
Added: vendor/perl/dist/dist/Tie-File/t/42_offset.t
===================================================================
--- vendor/perl/dist/dist/Tie-File/t/42_offset.t (rev 0)
+++ vendor/perl/dist/dist/Tie-File/t/42_offset.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+
+# 2003-04-09 Tels: test the offset method from 0.94
+
+use Test::More;
+use strict;
+use File::Spec;
+
+use POSIX 'SEEK_SET';
+my $file = "tf$$.txt";
+
+BEGIN
+ {
+ $| = 1;
+ unshift @INC, File::Spec->catdir(File::Spec->updir, 'lib');
+ chdir 't' if -d 't';
+ print "# INC = @INC\n";
+
+ plan tests => 24;
+
+ use_ok ('Tie::File');
+ }
+
+$/ = "#"; # avoid problems with \n\r vs. \n
+
+my @a;
+my $o = tie @a, 'Tie::File', $file, autodefer => 0;
+
+is (ref($o), 'Tie::File');
+
+is ($o->offset(0), 0, 'first one always there');
+is ($o->offset(1), undef, 'no offsets yet');
+
+$a[0] = 'Bourbon';
+is ($o->offset(0), 0, 'first is ok');
+is ($o->offset(1), 8, 'and second ok');
+is ($o->offset(2), undef, 'third undef');
+
+$a[1] = 'makes';
+is ($o->offset(0), 0, 'first is ok');
+is ($o->offset(1), 8, 'and second ok');
+is ($o->offset(2), 14, 'and third ok');
+is ($o->offset(3), undef, 'fourth undef');
+
+$a[2] = 'the baby';
+is ($o->offset(0), 0, 'first is ok');
+is ($o->offset(1), 8, 'and second ok');
+is ($o->offset(2), 14, 'and third ok');
+is ($o->offset(3), 23, 'and fourth ok');
+is ($o->offset(4), undef, 'fourth undef');
+
+$a[3] = 'grin';
+is ($o->offset(0), 0, 'first is ok');
+is ($o->offset(1), 8, 'and second ok');
+is ($o->offset(2), 14, 'and third ok');
+is ($o->offset(3), 23, 'and fourth ok');
+is ($o->offset(4), 28, 'and fifth ok');
+
+$a[4] = '!';
+is ($o->offset(5), 30, 'and fifth ok');
+$a[3] = 'water';
+is ($o->offset(4), 29, 'and fourth changed ok');
+is ($o->offset(5), 31, 'and fifth ok');
+
+END {
+ undef $o;
+ untie @a;
+ 1 while unlink $file;
+}
Added: vendor/perl/dist/dist/autouse/t/lib/MyTestModule2.pm
===================================================================
--- vendor/perl/dist/dist/autouse/t/lib/MyTestModule2.pm (rev 0)
+++ vendor/perl/dist/dist/autouse/t/lib/MyTestModule2.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,12 @@
+package MyTestModule2;
+use warnings;
+
+ at ISA = Exporter;
+require Exporter;
+ at EXPORT_OK = 'test_function2';
+
+sub test_function2 {
+ return 'works';
+}
+
+1;
Added: vendor/perl/dist/dist/bignum/t/overrides.t
===================================================================
--- vendor/perl/dist/dist/bignum/t/overrides.t (rev 0)
+++ vendor/perl/dist/dist/bignum/t/overrides.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,112 @@
+#!perl -w
+
+# Test behaviour of hex and oct overrides in detail, and also how the three
+# modules interact.
+
+use Test::More tests => 35;
+
+# For testing that existing CORE::GLOBAL overrides are not clobbered
+BEGIN
+ {
+ if ($] > 5.009004)
+ {
+ no warnings 'syntax';
+ *CORE::GLOBAL::hex = sub(_) { ++$hex_called; CORE::hex(@_?$_[0]:$_) };
+ *CORE::GLOBAL::oct = sub(_) { ++$oct_called; CORE::oct(@_?$_[0]:$_) };
+ }
+ else
+ {
+ *CORE::GLOBAL::hex = sub(;$) { ++$hex_called; CORE::hex(@_?$_[0]:$_) };
+ *CORE::GLOBAL::oct = sub(;$) { ++$oct_called; CORE::oct(@_?$_[0]:$_) };
+ }
+ }
+
+{
+ use bigint;
+ $_ = "20";
+ is hex, "32", 'bigint hex override without arguments infers $_';
+ is oct, "16", 'bigint oct override without arguments infers $_';
+ @_ = 1..20;
+ is hex(@_), "32", 'bigint hex override provides scalar context';
+ is oct(@_), "16", 'bigint oct override provides scalar context';
+ SKIP:
+ {
+ skip "no lexical hex/oct", 2 unless $] > do { no bigint; 5.009004};
+ is ref hex(1), 'Math::BigInt',
+ 'bigint hex() works when bignum and bigrat are loaded';
+ is ref oct(1), 'Math::BigInt',
+ 'bigint oct() works when bignum and bigrat are loaded';
+ }
+}
+{
+ use bignum;
+ $_ = "20";
+ is hex, "32", 'bignum hex override without arguments infers $_';
+ is oct, "16", 'bignum oct override without arguments infers $_';
+ @_ = 1..20;
+ is hex(@_), "32", 'bignum hex override provides scalar context';
+ is oct(@_), "16", 'bignum oct override provides scalar context';
+ SKIP:
+ {
+ skip "no lexical hex/oct", 2 unless $] > 5.009004;
+ is ref hex(1), 'Math::BigInt',
+ 'bignum hex() works when bigint and bigrat are loaded';
+ is ref oct(1), 'Math::BigInt',
+ 'bignum oct() works when bigint and bigrat are loaded';
+ }
+}
+{
+ use bigrat;
+ $_ = "20";
+ is hex, "32", 'bigrat hex override without arguments infers $_';
+ is oct, "16", 'bigrat oct override without arguments infers $_';
+ @_ = 1..20;
+ is hex(@_), "32", 'bigrat hex override provides scalar context';
+ is oct(@_), "16", 'bigrat oct override provides scalar context';
+ SKIP:
+ {
+ skip "no lexical hex/oct", 2 unless $] > 5.009004;
+ is ref hex(1), 'Math::BigInt',
+ 'bigrat hex() works when bignum and bigint are loaded';
+ is ref oct(1), 'Math::BigInt',
+ 'bigrat oct() works when bignum and bigint are loaded';
+ }
+}
+
+$hex_called = 0;
+() = hex 0;
+is $hex_called, 1, 'existing hex overrides are called';
+$oct_called = 0;
+() = oct 0;
+is $oct_called, 1, 'existing oct overrides are called';
+
+{
+ package _importer;
+ {
+ use bigint 'hex', 'oct';
+ ::is \&hex, \&bigint::hex, 'exported hex function';
+ ::is \&oct, \&bigint::oct, 'exported oct function';
+ }
+ ::ok ref hex(), 'exported hex function returns ref outside pragma scope';
+ ::ok ref oct(), 'exported oct function returns ref outside pragma scope';
+ ::is oct("20"), "16", 'exported oct function works with "decimal"';
+ # (used to return 20 because it thought it was decimal)
+}
+{
+ package _importer2;
+ use bignum 'hex', 'oct';
+ ::is \&hex, \&bignum::hex, 'bignum exports hex';
+ ::is \&oct, \&bignum::oct, 'bignum exports oct';
+ ::is \&hex, \&bigint::hex, 'bignum exports same hex as bigint';
+ ::is \&oct, \&bigint::oct, 'bignum exports same oct as bigint';
+}
+{
+ package _importer3;
+ use bigrat 'hex', 'oct';
+ ::is \&hex, \&bigrat::hex, 'bigrat exports hex';
+ ::is \&oct, \&bigrat::oct, 'bigrat exports oct';
+ ::is \&hex, \&bigint::hex, 'bigrat exports same hex as bigint';
+ ::is \&oct, \&bigint::oct, 'bigrat exports same oct as bigint';
+}
+is ref(hex 0), "", 'hex export is not global';
+is ref(oct 0), "", 'oct export is not global';
Added: vendor/perl/dist/dist/threads-shared/t/dualvar.t
===================================================================
--- vendor/perl/dist/dist/threads-shared/t/dualvar.t (rev 0)
+++ vendor/perl/dist/dist/threads-shared/t/dualvar.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,447 @@
+use strict;
+use warnings;
+
+BEGIN {
+ use Config;
+ if (! $Config{'useithreads'}) {
+ print("1..0 # SKIP Perl not compiled with 'useithreads'\n");
+ exit(0);
+ }
+}
+
+use ExtUtils::testlib;
+
+BEGIN {
+ $| = 1;
+ print("1..226\n"); ### Number of tests that will be run ###
+}
+
+use threads;
+use threads::shared;
+use Scalar::Util qw(dualvar);
+
+my $TEST = 1;
+
+sub ok {
+ my ($ok, $name) = @_;
+
+ # You have to do it this way or VMS will get confused.
+ if ($ok) {
+ print("ok $TEST - $name\n");
+ } else {
+ print("not ok $TEST - $name\n");
+ printf("# Failed test at line %d\n", (caller(1))[2]);
+ }
+
+ $TEST++;
+}
+
+sub ok_iv
+{
+ my ($var, $iv) = @_;
+ ok($var == $iv, 'IV number preserved');
+ ok($var eq $iv, 'String preserved');
+}
+
+sub ok_nv
+{
+ my ($var, $nv) = @_;
+ ok($var == $nv, 'NV number preserved');
+ ok($var eq $nv, 'String preserved');
+}
+
+sub ok_uv
+{
+ my ($var, $uv) = @_;
+ ok($var == $uv, 'UV number preserved');
+ ok($var > 0, 'UV number preserved');
+ ok($var eq $uv, 'String preserved');
+}
+
+### Start of Testing ###
+
+my $iv = dualvar(42, 'Fourty-Two');
+my $nv = dualvar(3.14, 'PI');
+my $bits = ($Config{'use64bitint'}) ? 63 : 31;
+my $uv = dualvar(1<<$bits, 'Large unsigned int');
+
+print("# Shared scalar assignment using shared_clone()\n");
+
+my $siv :shared = shared_clone($iv);
+my $snv :shared = shared_clone($nv);
+my $suv :shared = shared_clone($uv);
+
+ok_iv($siv, $iv);
+ok_nv($snv, $nv);
+ok_uv($suv, $uv);
+
+{
+ print("# Shared array initialization\n");
+
+ my @ary :shared = ($iv, $nv, $uv);
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+}
+
+{
+ print("# Shared array list assignment\n");
+
+ my @ary :shared;
+ @ary = ($iv, $nv, $uv);
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+}
+
+{
+ print("# Shared array element assignment\n");
+
+ my @ary :shared;
+ $ary[0] = $iv;
+ $ary[1] = $nv;
+ $ary[2] = $uv;
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+}
+
+{
+ print("# Shared array initialization - shared scalars\n");
+
+ my @ary :shared = ($siv, $snv, $suv);
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+}
+
+{
+ print("# Shared array list assignment - shared scalars\n");
+
+ my @ary :shared;
+ @ary = ($siv, $snv, $suv);
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+}
+
+{
+ print("# Shared array element assignment - shared scalars\n");
+
+ my @ary :shared;
+ $ary[0] = $siv;
+ $ary[1] = $snv;
+ $ary[2] = $suv;
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+}
+
+{
+ print("# Shared hash initialization\n");
+
+ my %hsh :shared = (
+ 'iv' => $iv,
+ 'nv' => $nv,
+ 'uv' => $uv,
+ );
+
+ ok_iv($hsh{'iv'}, $iv);
+ ok_nv($hsh{'nv'}, $nv);
+ ok_uv($hsh{'uv'}, $uv);
+}
+
+{
+ print("# Shared hash assignment\n");
+
+ my %hsh :shared;
+ %hsh = (
+ 'iv' => $iv,
+ 'nv' => $nv,
+ 'uv' => $uv,
+ );
+
+ ok_iv($hsh{'iv'}, $iv);
+ ok_nv($hsh{'nv'}, $nv);
+ ok_uv($hsh{'uv'}, $uv);
+}
+
+{
+ print("# Shared hash element assignment\n");
+
+ my %hsh :shared;
+ $hsh{'iv'} = $iv;
+ $hsh{'nv'} = $nv;
+ $hsh{'uv'} = $uv;
+
+ ok_iv($hsh{'iv'}, $iv);
+ ok_nv($hsh{'nv'}, $nv);
+ ok_uv($hsh{'uv'}, $uv);
+}
+
+{
+ print("# Shared hash initialization - shared scalars\n");
+
+ my %hsh :shared = (
+ 'iv' => $siv,
+ 'nv' => $snv,
+ 'uv' => $suv,
+ );
+
+ ok_iv($hsh{'iv'}, $iv);
+ ok_nv($hsh{'nv'}, $nv);
+ ok_uv($hsh{'uv'}, $uv);
+}
+
+{
+ print("# Shared hash assignment - shared scalars\n");
+
+ my %hsh :shared;
+ %hsh = (
+ 'iv' => $siv,
+ 'nv' => $snv,
+ 'uv' => $suv,
+ );
+
+ ok_iv($hsh{'iv'}, $iv);
+ ok_nv($hsh{'nv'}, $nv);
+ ok_uv($hsh{'uv'}, $uv);
+}
+
+{
+ print("# Shared hash element assignment - shared scalars\n");
+
+ my %hsh :shared;
+ $hsh{'iv'} = $siv;
+ $hsh{'nv'} = $snv;
+ $hsh{'uv'} = $suv;
+
+ ok_iv($hsh{'iv'}, $iv);
+ ok_nv($hsh{'nv'}, $nv);
+ ok_uv($hsh{'uv'}, $uv);
+}
+
+{
+ print("# Shared array push\n");
+
+ my @ary :shared;
+ push(@ary, $iv, $nv, $uv);
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+
+ print("# Shared array pop\n");
+
+ my $xuv = pop(@ary);
+ my $xnv = pop(@ary);
+ my $xiv = pop(@ary);
+
+ ok_iv($xiv, $iv);
+ ok_nv($xnv, $nv);
+ ok_uv($xuv, $uv);
+
+ print("# Shared array unshift\n");
+
+ unshift(@ary, $iv, $nv, $uv);
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+
+ print("# Shared array shift\n");
+
+ $xiv = shift(@ary);
+ $xnv = shift(@ary);
+ $xuv = shift(@ary);
+
+ ok_iv($xiv, $iv);
+ ok_nv($xnv, $nv);
+ ok_uv($xuv, $uv);
+}
+
+{
+ print("# Shared array push - shared scalars\n");
+
+ my @ary :shared;
+ push(@ary, $siv, $snv, $suv);
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+
+ print("# Shared array pop - shared scalars\n");
+
+ my $xuv = pop(@ary);
+ my $xnv = pop(@ary);
+ my $xiv = pop(@ary);
+
+ ok_iv($xiv, $iv);
+ ok_nv($xnv, $nv);
+ ok_uv($xuv, $uv);
+
+ print("# Shared array unshift - shared scalars\n");
+
+ unshift(@ary, $siv, $snv, $suv);
+
+ ok_iv($ary[0], $iv);
+ ok_nv($ary[1], $nv);
+ ok_uv($ary[2], $uv);
+
+ print("# Shared array shift - shared scalars\n");
+
+ $xiv = shift(@ary);
+ $xnv = shift(@ary);
+ $xuv = shift(@ary);
+
+ ok_iv($xiv, $iv);
+ ok_nv($xnv, $nv);
+ ok_uv($xuv, $uv);
+}
+
+{
+ print("# Shared hash delete\n");
+
+ my %hsh :shared = (
+ 'iv' => $iv,
+ 'nv' => $nv,
+ 'uv' => $uv,
+ );
+
+ ok_iv(delete($hsh{'iv'}), $iv);
+ ok_nv(delete($hsh{'nv'}), $nv);
+ ok_uv(delete($hsh{'uv'}), $uv);
+}
+
+{
+ print("# Shared hash delete - shared scalars\n");
+
+ my %hsh :shared = (
+ 'iv' => $siv,
+ 'nv' => $snv,
+ 'uv' => $suv,
+ );
+
+ ok_iv(delete($hsh{'iv'}), $iv);
+ ok_nv(delete($hsh{'nv'}), $nv);
+ ok_uv(delete($hsh{'uv'}), $uv);
+}
+
+{
+ print("# Shared array copy to non-shared array\n");
+
+ my @ary :shared = ($iv, $nv, $uv);
+ my @nsa = @ary;
+
+ ok_iv($nsa[0], $iv);
+ ok_nv($nsa[1], $nv);
+ ok_uv($nsa[2], $uv);
+
+ print("# Shared array copy using shared_clone()\n");
+
+ my $copy :shared = shared_clone(\@nsa);
+
+ ok_iv($$copy[0], $iv);
+ ok_nv($$copy[1], $nv);
+ ok_uv($$copy[2], $uv);
+}
+
+{
+ print("# Shared array copy to non-shared array - shared scalars\n");
+
+ my @ary :shared = ($siv, $snv, $suv);
+ my @nsa = @ary;
+
+ ok_iv($nsa[0], $iv);
+ ok_nv($nsa[1], $nv);
+ ok_uv($nsa[2], $uv);
+
+ print("# Shared array copy using shared_clone()\n");
+
+ my $copy :shared = shared_clone(\@nsa);
+
+ ok_iv($$copy[0], $iv);
+ ok_nv($$copy[1], $nv);
+ ok_uv($$copy[2], $uv);
+}
+
+{
+ print("# Shared hash copy to non-shared hash\n");
+
+ my %hsh :shared = (
+ 'iv' => $iv,
+ 'nv' => $nv,
+ 'uv' => $uv,
+ );
+ my %nsh = %hsh;
+
+ ok_iv($nsh{'iv'}, $iv);
+ ok_nv($nsh{'nv'}, $nv);
+ ok_uv($nsh{'uv'}, $uv);
+
+ print("# Shared hash copy using shared_clone()\n");
+
+ my $copy :shared = shared_clone(\%nsh);
+
+ ok_iv($$copy{'iv'}, $iv);
+ ok_nv($$copy{'nv'}, $nv);
+ ok_uv($$copy{'uv'}, $uv);
+}
+
+{
+ print("# Shared hash copy to non-shared hash - shared scalars\n");
+
+ my %hsh :shared = (
+ 'iv' => $siv,
+ 'nv' => $snv,
+ 'uv' => $suv,
+ );
+ my %nsh = %hsh;
+
+ ok_iv($nsh{'iv'}, $iv);
+ ok_nv($nsh{'nv'}, $nv);
+ ok_uv($nsh{'uv'}, $uv);
+
+ print("# Shared hash copy using shared_clone()\n");
+
+ my $copy :shared = shared_clone(\%nsh);
+
+ ok_iv($$copy{'iv'}, $iv);
+ ok_nv($$copy{'nv'}, $nv);
+ ok_uv($$copy{'uv'}, $uv);
+}
+
+print("# Mix it up with a thread\n");
+my @ary :shared;
+my %hsh :shared;
+
+threads->create(sub {
+ @ary = ($siv);
+ push(@ary, $snv);
+
+ %hsh = ( 'nv' => $ary[1] );
+ $hsh{'iv'} = $ary[0];
+ $hsh{'uv'} = $suv;
+
+ $ary[2] = $hsh{'uv'};
+ })->join();
+
+ok_iv($hsh{'iv'}, $ary[0]);
+ok_nv($hsh{'nv'}, $ary[1]);
+ok_uv($hsh{'uv'}, $ary[2]);
+
+# $! behaves like a dualvar, but is really implemented as a tied SV.
+# As a result sharing $! directly only propagates the string value.
+# However, we can create a dualvar from it.
+print("# Errno\n");
+$! = 1;
+my $ss :shared = dualvar($!,$!);
+ok_iv($ss, $!);
+
+exit(0);
Added: vendor/perl/dist/dist/threads-shared/t/object2.t
===================================================================
--- vendor/perl/dist/dist/threads-shared/t/object2.t (rev 0)
+++ vendor/perl/dist/dist/threads-shared/t/object2.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,409 @@
+use strict;
+use warnings;
+
+BEGIN {
+ use Config;
+ if (! $Config{'useithreads'}) {
+ print("1..0 # SKIP Perl not compiled with 'useithreads'\n");
+ exit(0);
+ }
+ if ($] < 5.010) {
+ print("1..0 # SKIP Needs Perl 5.10.0 or later\n");
+ exit(0);
+ }
+}
+
+use ExtUtils::testlib;
+
+BEGIN {
+ $| = 1;
+ print("1..122\n"); ### Number of tests that will be run ###
+};
+
+use threads;
+use threads::shared;
+
+my $TEST;
+BEGIN {
+ share($TEST);
+ $TEST = 1;
+}
+
+sub ok {
+ my ($ok, $name) = @_;
+
+ lock($TEST);
+ my $id = $TEST++;
+
+ # You have to do it this way or VMS will get confused.
+ if ($ok) {
+ print("ok $id - $name\n");
+ } else {
+ print("not ok $id - $name\n");
+ printf("# Failed test at line %d\n", (caller)[2]);
+ }
+
+ return ($ok);
+}
+
+ok(1, 'Loaded');
+
+### Start of Testing ###
+
+my $ID :shared = -1;
+my (@created, @destroyed);
+
+{ package HashObj;
+ sub new {
+ my $class = shift;
+ my $self = &threads::shared::share({});
+ $$self{'ID'} = ++$ID;
+ $created[$ID] = 1;
+ return bless($self, $class);
+ }
+
+ sub DESTROY {
+ my $self = shift;
+ $destroyed[$$self{'ID'}] = 1;
+ }
+}
+
+{ package AryObj;
+ sub new {
+ my $class = shift;
+ my $self = &threads::shared::share([]);
+ $$self[0] = ++$ID;
+ $created[$ID] = 1;
+ return bless($self, $class);
+ }
+
+ sub DESTROY {
+ my $self = shift;
+ $destroyed[$$self[0]] = 1;
+ }
+}
+
+{ package SclrObj;
+ sub new {
+ my $class = shift;
+ my $self = \do{ my $scalar = ++$ID; };
+ $created[$ID] = 1;
+ threads::shared::share($self);
+ return bless($self, $class);
+ }
+
+ sub DESTROY {
+ my $self = shift;
+ $destroyed[$$self] = 1;
+ }
+}
+
+# Testing with normal array
+my @normal_ary;
+
+# Testing with hash object
+$normal_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in normal array');
+delete($normal_ary[0]);
+ok($destroyed[$ID], 'Deleted hash object in normal array');
+
+$normal_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in normal array');
+$normal_ary[0] = undef;
+ok($destroyed[$ID], 'Undef hash object in normal array');
+
+$normal_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in normal array');
+$normal_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in normal array');
+ok($destroyed[$ID-1], 'Replaced hash object in normal array');
+ at normal_ary = ();
+ok($destroyed[$ID], 'Hash object removed from cleared normal array');
+
+$normal_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in normal array');
+undef(@normal_ary);
+ok($destroyed[$ID], 'Hash object removed from undef normal array');
+
+# Testing with array object
+$normal_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in normal array');
+delete($normal_ary[0]);
+ok($destroyed[$ID], 'Deleted array object in normal array');
+
+$normal_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in normal array');
+$normal_ary[0] = undef;
+ok($destroyed[$ID], 'Undef array object in normal array');
+
+$normal_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in normal array');
+$normal_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in normal array');
+ok($destroyed[$ID-1], 'Replaced array object in normal array');
+ at normal_ary = ();
+ok($destroyed[$ID], 'Array object removed from cleared normal array');
+
+$normal_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in normal array');
+undef(@normal_ary);
+ok($destroyed[$ID], 'Array object removed from undef normal array');
+
+# Testing with scalar object
+$normal_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal array');
+delete($normal_ary[0]);
+ok($destroyed[$ID], 'Deleted scalar object in normal array');
+
+$normal_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal array');
+$normal_ary[0] = undef;
+ok($destroyed[$ID], 'Undef scalar object in normal array');
+
+$normal_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal array');
+$normal_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal array');
+ok($destroyed[$ID-1], 'Replaced scalar object in normal array');
+ at normal_ary = ();
+ok($destroyed[$ID], 'Scalar object removed from cleared normal array');
+
+$normal_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal array');
+undef(@normal_ary);
+ok($destroyed[$ID], 'Scalar object removed from undef normal array');
+
+# Testing with normal hash
+my %normal_hash;
+
+# Testing with hash object
+$normal_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in normal hash');
+delete($normal_hash{'obj'});
+ok($destroyed[$ID], 'Deleted hash object in normal hash');
+
+$normal_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in normal hash');
+$normal_hash{'obj'} = undef;
+ok($destroyed[$ID], 'Undef hash object in normal hash');
+
+$normal_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in normal hash');
+$normal_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in normal hash');
+ok($destroyed[$ID-1], 'Replaced hash object in normal hash');
+%normal_hash = ();
+ok($destroyed[$ID], 'Hash object removed from cleared normal hash');
+
+$normal_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in normal hash');
+undef(%normal_hash);
+ok($destroyed[$ID], 'Hash object removed from undef normal hash');
+
+# Testing with array object
+$normal_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in normal hash');
+delete($normal_hash{'obj'});
+ok($destroyed[$ID], 'Deleted array object in normal hash');
+
+$normal_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in normal hash');
+$normal_hash{'obj'} = undef;
+ok($destroyed[$ID], 'Undef array object in normal hash');
+
+$normal_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in normal hash');
+$normal_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in normal hash');
+ok($destroyed[$ID-1], 'Replaced array object in normal hash');
+%normal_hash = ();
+ok($destroyed[$ID], 'Array object removed from cleared normal hash');
+
+$normal_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in normal hash');
+undef(%normal_hash);
+ok($destroyed[$ID], 'Array object removed from undef normal hash');
+
+# Testing with scalar object
+$normal_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal hash');
+delete($normal_hash{'obj'});
+ok($destroyed[$ID], 'Deleted scalar object in normal hash');
+
+$normal_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal hash');
+$normal_hash{'obj'} = undef;
+ok($destroyed[$ID], 'Undef scalar object in normal hash');
+
+$normal_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal hash');
+$normal_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal hash');
+ok($destroyed[$ID-1], 'Replaced scalar object in normal hash');
+%normal_hash = ();
+ok($destroyed[$ID], 'Scalar object removed from cleared normal hash');
+
+$normal_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in normal hash');
+undef(%normal_hash);
+ok($destroyed[$ID], 'Scalar object removed from undef normal hash');
+
+# Testing with shared array
+my @shared_ary :shared;
+
+# Testing with hash object
+$shared_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in shared array');
+delete($shared_ary[0]);
+ok($destroyed[$ID], 'Deleted hash object in shared array');
+
+$shared_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in shared array');
+$shared_ary[0] = undef;
+ok($destroyed[$ID], 'Undef hash object in shared array');
+
+$shared_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in shared array');
+$shared_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in shared array');
+ok($destroyed[$ID-1], 'Replaced hash object in shared array');
+ at shared_ary = ();
+ok($destroyed[$ID], 'Hash object removed from cleared shared array');
+
+$shared_ary[0] = HashObj->new();
+ok($created[$ID], 'Created hash object in shared array');
+undef(@shared_ary);
+ok($destroyed[$ID], 'Hash object removed from undef shared array');
+
+# Testing with array object
+$shared_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in shared array');
+delete($shared_ary[0]);
+ok($destroyed[$ID], 'Deleted array object in shared array');
+
+$shared_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in shared array');
+$shared_ary[0] = undef;
+ok($destroyed[$ID], 'Undef array object in shared array');
+
+$shared_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in shared array');
+$shared_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in shared array');
+ok($destroyed[$ID-1], 'Replaced array object in shared array');
+ at shared_ary = ();
+ok($destroyed[$ID], 'Array object removed from cleared shared array');
+
+$shared_ary[0] = AryObj->new();
+ok($created[$ID], 'Created array object in shared array');
+undef(@shared_ary);
+ok($destroyed[$ID], 'Array object removed from undef shared array');
+
+# Testing with scalar object
+$shared_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared array');
+delete($shared_ary[0]);
+ok($destroyed[$ID], 'Deleted scalar object in shared array');
+
+$shared_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared array');
+$shared_ary[0] = undef;
+ok($destroyed[$ID], 'Undef scalar object in shared array');
+
+$shared_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared array');
+$shared_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared array');
+ok($destroyed[$ID-1], 'Replaced scalar object in shared array');
+ at shared_ary = ();
+ok($destroyed[$ID], 'Scalar object removed from cleared shared array');
+
+$shared_ary[0] = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared array');
+undef(@shared_ary);
+ok($destroyed[$ID], 'Scalar object removed from undef shared array');
+
+# Testing with shared hash
+my %shared_hash :shared;
+
+# Testing with hash object
+$shared_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in shared hash');
+delete($shared_hash{'obj'});
+ok($destroyed[$ID], 'Deleted hash object in shared hash');
+
+$shared_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in shared hash');
+$shared_hash{'obj'} = undef;
+ok($destroyed[$ID], 'Undef hash object in shared hash');
+
+$shared_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in shared hash');
+$shared_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in shared hash');
+ok($destroyed[$ID-1], 'Replaced hash object in shared hash');
+%shared_hash = ();
+ok($destroyed[$ID], 'Hash object removed from cleared shared hash');
+
+$shared_hash{'obj'} = HashObj->new();
+ok($created[$ID], 'Created hash object in shared hash');
+undef(%shared_hash);
+ok($destroyed[$ID], 'Hash object removed from undef shared hash');
+
+# Testing with array object
+$shared_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in shared hash');
+delete($shared_hash{'obj'});
+ok($destroyed[$ID], 'Deleted array object in shared hash');
+
+$shared_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in shared hash');
+$shared_hash{'obj'} = undef;
+ok($destroyed[$ID], 'Undef array object in shared hash');
+
+$shared_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in shared hash');
+$shared_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in shared hash');
+ok($destroyed[$ID-1], 'Replaced array object in shared hash');
+%shared_hash = ();
+ok($destroyed[$ID], 'Array object removed from cleared shared hash');
+
+$shared_hash{'obj'} = AryObj->new();
+ok($created[$ID], 'Created array object in shared hash');
+undef(%shared_hash);
+ok($destroyed[$ID], 'Array object removed from undef shared hash');
+
+# Testing with scalar object
+$shared_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared hash');
+delete($shared_hash{'obj'});
+ok($destroyed[$ID], 'Deleted scalar object in shared hash');
+
+$shared_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared hash');
+$shared_hash{'obj'} = undef;
+ok($destroyed[$ID], 'Undef scalar object in shared hash');
+
+$shared_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared hash');
+$shared_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared hash');
+ok($destroyed[$ID-1], 'Replaced scalar object in shared hash');
+%shared_hash = ();
+ok($destroyed[$ID], 'Scalar object removed from cleared shared hash');
+
+$shared_hash{'obj'} = SclrObj->new();
+ok($created[$ID], 'Created scalar object in shared hash');
+undef(%shared_hash);
+ok($destroyed[$ID], 'Scalar object removed from undef shared hash');
+
+# Testing with shared scalar
+{
+ my $shared_scalar : shared;
+ # Use a separate thread to make sure we have no private SV
+ async { $shared_scalar = SclrObj->new(); }->join();
+}
+ok($destroyed[$ID], 'Scalar object removed from shared scalar');
+
+# EOF
Added: vendor/perl/dist/ext/File-DosGlob/DosGlob.xs
===================================================================
--- vendor/perl/dist/ext/File-DosGlob/DosGlob.xs (rev 0)
+++ vendor/perl/dist/ext/File-DosGlob/DosGlob.xs 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,52 @@
+#define PERL_NO_GET_CONTEXT
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#define MY_CXT_KEY "File::Glob::_guts" XS_VERSION
+
+typedef struct {
+ HV * x_DG_ENTRIES;
+ Perl_ophook_t x_DG_OLD_OPHOOK;
+} my_cxt_t;
+
+START_MY_CXT
+
+static void
+glob_ophook(pTHX_ OP *o)
+{
+ if (PL_dirty) return;
+ {
+ dMY_CXT;
+ if (!MY_CXT.x_DG_ENTRIES)
+ MY_CXT.x_DG_ENTRIES = get_hv("File::DosGlob::entries", 0);
+ if (MY_CXT.x_DG_ENTRIES)
+ hv_delete(MY_CXT.x_DG_ENTRIES, (char *)&o, sizeof(OP *),G_DISCARD);
+ if (MY_CXT.x_DG_OLD_OPHOOK) MY_CXT.x_DG_OLD_OPHOOK(aTHX_ o);
+ }
+}
+
+MODULE = File::DosGlob PACKAGE = File::DosGlob
+
+PROTOTYPES: DISABLE
+
+BOOT:
+{
+ MY_CXT_INIT;
+ {
+ dMY_CXT;
+ MY_CXT.x_DG_ENTRIES = NULL;
+ MY_CXT.x_DG_OLD_OPHOOK = PL_opfreehook;
+ PL_opfreehook = glob_ophook;
+ }
+}
+
+SV *
+_callsite(...)
+ CODE:
+ RETVAL = newSVpvn(
+ (char *)&cxstack[cxstack_ix].blk_sub.retop, sizeof(OP *)
+ );
+ OUTPUT:
+ RETVAL
Added: vendor/perl/dist/ext/File-DosGlob/lib/File/DosGlob.pm
===================================================================
--- vendor/perl/dist/ext/File-DosGlob/lib/File/DosGlob.pm (rev 0)
+++ vendor/perl/dist/ext/File-DosGlob/lib/File/DosGlob.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,304 @@
+#!perl -w
+
+#
+# Documentation at the __END__
+#
+
+package File::DosGlob;
+
+our $VERSION = '1.10';
+use strict;
+use warnings;
+
+require XSLoader;
+XSLoader::load();
+
+sub doglob {
+ my $cond = shift;
+ my @retval = ();
+ my $fix_drive_relative_paths;
+ OUTER:
+ for my $pat (@_) {
+ my @matched = ();
+ my @globdirs = ();
+ my $head = '.';
+ my $sepchr = '/';
+ my $tail;
+ next OUTER unless defined $pat and $pat ne '';
+ # if arg is within quotes strip em and do no globbing
+ if ($pat =~ /^"(.*)"\z/s) {
+ $pat = $1;
+ if ($cond eq 'd') { push(@retval, $pat) if -d $pat }
+ else { push(@retval, $pat) if -e $pat }
+ next OUTER;
+ }
+ # wildcards with a drive prefix such as h:*.pm must be changed
+ # to h:./*.pm to expand correctly
+ if ($pat =~ m|^([A-Za-z]:)[^/\\]|s) {
+ substr($pat,0,2) = $1 . "./";
+ $fix_drive_relative_paths = 1;
+ }
+ if ($pat =~ m|^(.*)([\\/])([^\\/]*)\z|s) {
+ ($head, $sepchr, $tail) = ($1,$2,$3);
+ push (@retval, $pat), next OUTER if $tail eq '';
+ if ($head =~ /[*?]/) {
+ @globdirs = doglob('d', $head);
+ push(@retval, doglob($cond, map {"$_$sepchr$tail"} @globdirs)),
+ next OUTER if @globdirs;
+ }
+ $head .= $sepchr if $head eq '' or $head =~ /^[A-Za-z]:\z/s;
+ $pat = $tail;
+ }
+ #
+ # If file component has no wildcards, we can avoid opendir
+ unless ($pat =~ /[*?]/) {
+ $head = '' if $head eq '.';
+ $head .= $sepchr unless $head eq '' or substr($head,-1) eq $sepchr;
+ $head .= $pat;
+ if ($cond eq 'd') { push(@retval,$head) if -d $head }
+ else { push(@retval,$head) if -e $head }
+ next OUTER;
+ }
+ opendir(D, $head) or next OUTER;
+ my @leaves = readdir D;
+ closedir D;
+
+ # VMS-format filespecs, especially if they contain extended characters,
+ # are unlikely to match patterns correctly, so Unixify them.
+ if ($^O eq 'VMS') {
+ require VMS::Filespec;
+ @leaves = map {$_ =~ s/\.$//; VMS::Filespec::unixify($_)} @leaves;
+ }
+ $head = '' if $head eq '.';
+ $head .= $sepchr unless $head eq '' or substr($head,-1) eq $sepchr;
+
+ # escape regex metachars but not glob chars
+ $pat =~ s:([].+^\-\${}()[|]):\\$1:g;
+ # and convert DOS-style wildcards to regex
+ $pat =~ s/\*/.*/g;
+ $pat =~ s/\?/.?/g;
+
+ my $matchsub = sub { $_[0] =~ m|^$pat\z|is };
+ INNER:
+ for my $e (@leaves) {
+ next INNER if $e eq '.' or $e eq '..';
+ next INNER if $cond eq 'd' and ! -d "$head$e";
+ push(@matched, "$head$e"), next INNER if &$matchsub($e);
+ #
+ # [DOS compatibility special case]
+ # Failed, add a trailing dot and try again, but only
+ # if name does not have a dot in it *and* pattern
+ # has a dot *and* name is shorter than 9 chars.
+ #
+ if (index($e,'.') == -1 and length($e) < 9
+ and index($pat,'\\.') != -1) {
+ push(@matched, "$head$e"), next INNER if &$matchsub("$e.");
+ }
+ }
+ push @retval, @matched if @matched;
+ }
+ if ($fix_drive_relative_paths) {
+ s|^([A-Za-z]:)\./|$1| for @retval;
+ }
+ return @retval;
+}
+
+#
+# this can be used to override CORE::glob in a specific
+# package by saying C<use File::DosGlob 'glob';> in that
+# namespace.
+#
+
+# context (keyed by second cxix arg provided by core)
+our %entries;
+
+sub glob {
+ my($pat,$cxix) = ($_[0], _callsite());
+ my @pat;
+
+ # glob without args defaults to $_
+ $pat = $_ unless defined $pat;
+
+ # if we're just beginning, do it all first
+ if (!$entries{$cxix}) {
+ # extract patterns
+ if ($pat =~ /\s/) {
+ require Text::ParseWords;
+ @pat = Text::ParseWords::parse_line('\s+',0,$pat);
+ }
+ else {
+ push @pat, $pat;
+ }
+
+ # Mike Mestnik: made to do abc{1,2,3} == abc1 abc2 abc3.
+ # abc3 will be the original {3} (and drop the {}).
+ # abc1 abc2 will be put in @appendpat.
+ # This was just the easiest way, not nearly the best.
+ REHASH: {
+ my @appendpat = ();
+ for (@pat) {
+ # There must be a "," I.E. abc{efg} is not what we want.
+ while ( /^(.*)(?<!\\)\{(.*?)(?<!\\)\,.*?(?<!\\)\}(.*)$/ ) {
+ my ($start, $match, $end) = ($1, $2, $3);
+ #print "Got: \n\t$start\n\t$match\n\t$end\n";
+ my $tmp = "$start$match$end";
+ while ( $tmp =~ s/^(.*?)(?<!\\)\{(?:.*(?<!\\)\,)?(.*\Q$match\E.*?)(?:(?<!\\)\,.*)?(?<!\\)\}(.*)$/$1$2$3/ ) {
+ # these expansions will be performed by the original,
+ # when we call REHASH.
+ }
+ push @appendpat, ("$tmp");
+ s/^\Q$start\E(?<!\\)\{\Q$match\E(?<!\\)\,/$start\{/;
+ if ( /^\Q$start\E(?<!\\)\{(?!.*?(?<!\\)\,.*?\Q$end\E$)(.*)(?<!\\)\}\Q$end\E$/ ) {
+ $match = $1;
+ #print "GOT: \n\t$start\n\t$match\n\t$end\n\n";
+ $_ = "$start$match$end";
+ }
+ }
+ #print "Sould have "GOT" vs "Got"!\n";
+ #FIXME: There should be checking for this.
+ # How or what should be done about failure is beond me.
+ }
+ if ( $#appendpat != -1
+ ) {
+ #FIXME: Max loop, no way! :")
+ for ( @appendpat ) {
+ push @pat, $_;
+ }
+ goto REHASH;
+ }
+ }
+ for ( @pat ) {
+ s/\\([{},])/$1/g;
+ }
+
+ $entries{$cxix} = [doglob(1, at pat)];
+ }
+
+ # chuck it all out, quick or slow
+ if (wantarray) {
+ return @{delete $entries{$cxix}};
+ }
+ else {
+ if (scalar @{$entries{$cxix}}) {
+ return shift @{$entries{$cxix}};
+ }
+ else {
+ # return undef for EOL
+ delete $entries{$cxix};
+ return undef;
+ }
+ }
+}
+
+{
+ no strict 'refs';
+
+ sub import {
+ my $pkg = shift;
+ return unless @_;
+ my $sym = shift;
+ my $callpkg = ($sym =~ s/^GLOBAL_//s ? 'CORE::GLOBAL' : caller(0));
+ *{$callpkg.'::'.$sym} = \&{$pkg.'::'.$sym} if $sym eq 'glob';
+ }
+}
+1;
+
+__END__
+
+=head1 NAME
+
+File::DosGlob - DOS like globbing and then some
+
+=head1 SYNOPSIS
+
+ require 5.004;
+
+ # override CORE::glob in current package
+ use File::DosGlob 'glob';
+
+ # override CORE::glob in ALL packages (use with extreme caution!)
+ use File::DosGlob 'GLOBAL_glob';
+
+ @perlfiles = glob "..\\pe?l/*.p?";
+ print <..\\pe?l/*.p?>;
+
+ # from the command line (overrides only in main::)
+ > perl -MFile::DosGlob=glob -e "print <../pe*/*p?>"
+
+=head1 DESCRIPTION
+
+A module that implements DOS-like globbing with a few enhancements.
+It is largely compatible with perlglob.exe (the M$ setargv.obj
+version) in all but one respect--it understands wildcards in
+directory components.
+
+For example, C<< <..\\l*b\\file/*glob.p?> >> will work as expected (in
+that it will find something like '..\lib\File/DosGlob.pm' alright).
+Note that all path components are case-insensitive, and that
+backslashes and forward slashes are both accepted, and preserved.
+You may have to double the backslashes if you are putting them in
+literally, due to double-quotish parsing of the pattern by perl.
+
+Spaces in the argument delimit distinct patterns, so
+C<glob('*.exe *.dll')> globs all filenames that end in C<.exe>
+or C<.dll>. If you want to put in literal spaces in the glob
+pattern, you can escape them with either double quotes, or backslashes.
+e.g. C<glob('c:/"Program Files"/*/*.dll')>, or
+C<glob('c:/Program\ Files/*/*.dll')>. The argument is tokenized using
+C<Text::ParseWords::parse_line()>, so see L<Text::ParseWords> for details
+of the quoting rules used.
+
+Extending it to csh patterns is left as an exercise to the reader.
+
+=head1 EXPORTS (by request only)
+
+glob()
+
+=head1 BUGS
+
+Should probably be built into the core, and needs to stop
+pandering to DOS habits. Needs a dose of optimizium too.
+
+=head1 AUTHOR
+
+Gurusamy Sarathy <gsar at activestate.com>
+
+=head1 HISTORY
+
+=over 4
+
+=item *
+
+Support for globally overriding glob() (GSAR 3-JUN-98)
+
+=item *
+
+Scalar context, independent iterator context fixes (GSAR 15-SEP-97)
+
+=item *
+
+A few dir-vs-file optimizations result in glob importation being
+10 times faster than using perlglob.exe, and using perlglob.bat is
+only twice as slow as perlglob.exe (GSAR 28-MAY-97)
+
+=item *
+
+Several cleanups prompted by lack of compatible perlglob.exe
+under Borland (GSAR 27-MAY-97)
+
+=item *
+
+Initial version (GSAR 20-FEB-97)
+
+=back
+
+=head1 SEE ALSO
+
+perl
+
+perlglob.bat
+
+Text::ParseWords
+
+=cut
+
Added: vendor/perl/dist/ext/File-DosGlob/t/DosGlob.t
===================================================================
--- vendor/perl/dist/ext/File-DosGlob/t/DosGlob.t (rev 0)
+++ vendor/perl/dist/ext/File-DosGlob/t/DosGlob.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,156 @@
+#!./perl
+
+#
+# test glob() in File::DosGlob
+#
+
+# Make sure it can load before other XS extensions
+use File::DosGlob;
+
+use FindBin;
+use File::Spec::Functions;
+BEGIN {
+ chdir catdir $FindBin::Bin, (updir)x3, 't';
+ @INC = '../lib';
+}
+
+use Test::More tests => 21;
+
+# override it in main::
+use File::DosGlob 'glob';
+
+require Cwd;
+
+my $expected;
+$expected = $_ = "op/a*.t";
+my @r = glob;
+is ($_, $expected, 'test if $_ takes as the default');
+cmp_ok(@r, '>=', 9) or diag("|@r|");
+
+ at r = <*/a*.t>;
+# atleast {argv,abbrev,anydbm,autoloader,append,arith,array,assignwarn,auto}.t
+cmp_ok(@r, '>=', 9, 'check <*/*>') or diag("|@r|");
+my $r = scalar @r;
+
+ at r = ();
+while (defined($_ = <*/a*.t>)) {
+ print "# $_\n";
+ push @r, $_;
+}
+is(scalar @r, $r, 'check scalar context');
+
+ at r = ();
+for (<*/a*.t>) {
+ print "# $_\n";
+ push @r, $_;
+}
+is(scalar @r, $r, 'check list context');
+
+ at r = ();
+while (<*/a*.t>) {
+ print "# $_\n";
+ push @r, $_;
+}
+is(scalar @r, $r, 'implicit assign to $_ in while()');
+
+my @s = ();
+my $pat = '*/a*.t';
+while (glob ($pat)) {
+ print "# $_\n";
+ push @s, $_;
+}
+is("@r", "@s", 'explicit glob() gets assign magic too');
+
+package Foo;
+use File::DosGlob 'glob';
+use Test::More;
+ at s = ();
+$pat = '*/a*.t';
+while (glob($pat)) {
+ print "# $_\n";
+ push @s, $_;
+}
+is("@r", "@s", 'in a different package');
+
+ at s = ();
+while (<*/a*.t>) {
+ my $i = 0;
+ print "# $_ <";
+ push @s, $_;
+ while (<*/b*.t>) {
+ print " $_";
+ $i++;
+ }
+ print " >\n";
+}
+is("@r", "@s", 'different glob ops maintain independent contexts');
+
+ at s = ();
+eval <<'EOT';
+use File::DosGlob 'GLOBAL_glob';
+package Bar;
+while (<*/a*.t>) {
+ my $i = 0;
+ print "# $_ <";
+ push @s, $_;
+ while (glob '*/b*.t') {
+ print " $_";
+ $i++;
+ }
+ print " >\n";
+}
+EOT
+is("@r", "@s", 'global override');
+
+# Test that a glob pattern containing ()'s works.
+# NB. The spaces in the glob patterns need to be backslash escaped.
+my $filename_containing_parens = "foo (123) bar";
+SKIP: {
+ skip("can't create '$filename_containing_parens': $!", 9)
+ unless open my $touch, ">", $filename_containing_parens;
+ close $touch;
+
+ foreach my $pattern ("foo\\ (*", "*)\\ bar", "foo\\ (1*3)\\ bar") {
+ @r = ();
+ eval { @r = File::DosGlob::glob($pattern) };
+ is($@, "", "eval for glob($pattern)");
+ is(scalar @r, 1);
+ is($r[0], $filename_containing_parens);
+ }
+
+ 1 while unlink $filename_containing_parens;
+}
+
+# Test the globbing of a drive relative pattern such as "c:*.pl".
+# NB. previous versions of DosGlob inserted "./ after the drive letter to
+# make the expansion process work correctly. However, while it is harmless,
+# there is no reason for it to be in the result.
+my $cwd = Cwd::cwd();
+if ($cwd =~ /^([a-zA-Z]:)/) {
+ my $drive = $1;
+ @r = ();
+ # This assumes we're in the "t" directory.
+ eval { @r = File::DosGlob::glob("${drive}io/*.t") };
+ ok(@r and !grep !m|^${drive}io/[^/]*\.t$|, @r);
+} else {
+ pass();
+}
+
+# Test that our internal data are freed when the caller’s op tree is freed,
+# even if iteration has not finished.
+# Using XS::APItest is the only simple way to test this. Since this is a
+# core-only module, this should be OK.
+SKIP: {
+ require Config;
+ skip "no XS::APItest"
+ unless eval { require XS::APItest; import XS::APItest "sv_count"; 1 };
+ # Use a random number of ops, so that the glob op does not reuse the
+ # same address each time, giving us false passes.
+ my($count,$count2);
+ eval '$x+'x(1+rand() * 100) . '<*>';
+ $count = sv_count();
+ eval '$x+'x(1+rand() * 100) . '<*>';
+ $count2 = sv_count();
+ cmp_ok $count2, '<=', $count,
+ 'no leak when partly iterated caller is freed';
+}
Added: vendor/perl/dist/ext/File-Glob/t/rt114984.t
===================================================================
--- vendor/perl/dist/ext/File-Glob/t/rt114984.t (rev 0)
+++ vendor/perl/dist/ext/File-Glob/t/rt114984.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+use v5.16.0;
+use File::Temp 'tempdir';
+use File::Spec::Functions;
+use Test::More;
+
+BEGIN {
+ plan skip_all => "Home-grown glob does not do character classes on $^O" if $^O eq 'VMS';
+}
+
+plan tests => 1;
+
+my @md = (1..305);
+my @mp = (1000..1205);
+
+my $path = tempdir uc cleanup => 1;
+
+foreach (@md) {
+ open(my $f, ">", catfile $path, "md_$_.dat");
+ close $f;
+}
+
+foreach (@mp) {
+ open(my $f, ">", catfile $path, "mp_$_.dat");
+ close $f;
+}
+my @b = glob(qq{$path/mp_[0123456789]*.dat
+ $path/md_[0123456789]*.dat});
+is scalar(@b), @md+ at mp,
+ 'File::Glob extends the stack when returning a long list';
Added: vendor/perl/dist/ext/GDBM_File/t/fatal.t
===================================================================
--- vendor/perl/dist/ext/GDBM_File/t/fatal.t (rev 0)
+++ vendor/perl/dist/ext/GDBM_File/t/fatal.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
+#!./perl -w
+use strict;
+
+use Test::More;
+use Config;
+
+BEGIN {
+ plan(skip_all => "GDBM_File was not built")
+ unless $Config{extensions} =~ /\bGDBM_File\b/;
+
+ plan(tests => 8);
+ use_ok('GDBM_File');
+}
+
+unlink <Op_dbmx*>;
+
+open my $fh, $^X or die "Can't open $^X: $!";
+my $fileno = fileno $fh;
+isnt($fileno, undef, "Can find next available file descriptor");
+close $fh or die $!;
+
+is((open $fh, "<&=$fileno"), undef,
+ "Check that we cannot open fileno $fileno. \$! is $!");
+
+umask(0);
+my %h;
+isa_ok(tie(%h, 'GDBM_File', 'Op_dbmx', GDBM_WRCREAT, 0640), 'GDBM_File');
+
+isnt((open $fh, "<&=$fileno"), undef, "dup fileno $fileno")
+ or diag("\$! = $!");
+isnt(close $fh, undef,
+ "close fileno $fileno, out from underneath the GDBM_File");
+is(eval {
+ $h{Perl} = 'Rules';
+ untie %h;
+ 1;
+}, undef, 'Trapped error when attempting to write to knobbled GDBM_File');
+
+# Observed "File write error" and "lseek error" from two different systems.
+# So there might be more variants. Important part was that we trapped the error
+# via croak.
+like($@, qr/ at .*\bfatal\.t line \d+\.\n\z/,
+ 'expected error message from GDBM_File');
+
+unlink <Op_dbmx*>;
Added: vendor/perl/dist/ext/IPC-Open3/lib/IPC/Open2.pm
===================================================================
--- vendor/perl/dist/ext/IPC-Open3/lib/IPC/Open2.pm (rev 0)
+++ vendor/perl/dist/ext/IPC-Open3/lib/IPC/Open2.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,120 @@
+package IPC::Open2;
+
+use strict;
+our ($VERSION, @ISA, @EXPORT);
+
+require 5.000;
+require Exporter;
+
+$VERSION = 1.04;
+ at ISA = qw(Exporter);
+ at EXPORT = qw(open2);
+
+=head1 NAME
+
+IPC::Open2 - open a process for both reading and writing using open2()
+
+=head1 SYNOPSIS
+
+ use IPC::Open2;
+
+ $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'some cmd and args');
+ # or without using the shell
+ $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'some', 'cmd', 'and', 'args');
+
+ # or with handle autovivification
+ my($chld_out, $chld_in);
+ $pid = open2($chld_out, $chld_in, 'some cmd and args');
+ # or without using the shell
+ $pid = open2($chld_out, $chld_in, 'some', 'cmd', 'and', 'args');
+
+ waitpid( $pid, 0 );
+ my $child_exit_status = $? >> 8;
+
+=head1 DESCRIPTION
+
+The open2() function runs the given $cmd and connects $chld_out for
+reading and $chld_in for writing. It's what you think should work
+when you try
+
+ $pid = open(HANDLE, "|cmd args|");
+
+The write filehandle will have autoflush turned on.
+
+If $chld_out is a string (that is, a bareword filehandle rather than a glob
+or a reference) and it begins with C<< >& >>, then the child will send output
+directly to that file handle. If $chld_in is a string that begins with
+C<< <& >>, then $chld_in will be closed in the parent, and the child will
+read from it directly. In both cases, there will be a dup(2) instead of a
+pipe(2) made.
+
+If either reader or writer is the null string, this will be replaced
+by an autogenerated filehandle. If so, you must pass a valid lvalue
+in the parameter slot so it can be overwritten in the caller, or
+an exception will be raised.
+
+open2() returns the process ID of the child process. It doesn't return on
+failure: it just raises an exception matching C</^open2:/>. However,
+C<exec> failures in the child are not detected. You'll have to
+trap SIGPIPE yourself.
+
+open2() does not wait for and reap the child process after it exits.
+Except for short programs where it's acceptable to let the operating system
+take care of this, you need to do this yourself. This is normally as
+simple as calling C<waitpid $pid, 0> when you're done with the process.
+Failing to do this can result in an accumulation of defunct or "zombie"
+processes. See L<perlfunc/waitpid> for more information.
+
+This whole affair is quite dangerous, as you may block forever. It
+assumes it's going to talk to something like B<bc>, both writing
+to it and reading from it. This is presumably safe because you
+"know" that commands like B<bc> will read a line at a time and
+output a line at a time. Programs like B<sort> that read their
+entire input stream first, however, are quite apt to cause deadlock.
+
+The big problem with this approach is that if you don't have control
+over source code being run in the child process, you can't control
+what it does with pipe buffering. Thus you can't just open a pipe to
+C<cat -v> and continually read and write a line from it.
+
+The IO::Pty and Expect modules from CPAN can help with this, as they
+provide a real tty (well, a pseudo-tty, actually), which gets you
+back to line buffering in the invoked command again.
+
+=head1 WARNING
+
+The order of arguments differs from that of open3().
+
+=head1 SEE ALSO
+
+See L<IPC::Open3> for an alternative that handles STDERR as well. This
+function is really just a wrapper around open3().
+
+=cut
+
+# &open2: tom christiansen, <tchrist at convex.com>
+#
+# usage: $pid = open2('rdr', 'wtr', 'some cmd and args');
+# or $pid = open2('rdr', 'wtr', 'some', 'cmd', 'and', 'args');
+#
+# spawn the given $cmd and connect $rdr for
+# reading and $wtr for writing. return pid
+# of child, or 0 on failure.
+#
+# WARNING: this is dangerous, as you may block forever
+# unless you are very careful.
+#
+# $wtr is left unbuffered.
+#
+# abort program if
+# rdr or wtr are null
+# a system call fails
+
+require IPC::Open3;
+
+sub open2 {
+ local $Carp::CarpLevel = $Carp::CarpLevel + 1;
+ return IPC::Open3::_open3('open2', $_[1], $_[0], '>&STDERR', @_[2 .. $#_]);
+}
+
+1
Added: vendor/perl/dist/ext/IPC-Open3/t/IPC-Open2.t
===================================================================
--- vendor/perl/dist/ext/IPC-Open3/t/IPC-Open2.t (rev 0)
+++ vendor/perl/dist/ext/IPC-Open3/t/IPC-Open2.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,61 @@
+#!./perl -w
+
+use Config;
+BEGIN {
+ require Test::More;
+ if (!$Config{'d_fork'}
+ # open2/3 supported on win32
+ && $^O ne 'MSWin32' && $^O ne 'NetWare')
+ {
+ Test::More->import(skip_all => 'open2/3 not available with MSWin32+Netware');
+ exit 0;
+ }
+ # make warnings fatal
+ $SIG{__WARN__} = sub { die @_ };
+}
+
+use strict;
+use IPC::Open2;
+use Test::More tests => 15;
+
+my $perl = $^X;
+
+sub cmd_line {
+ if ($^O eq 'MSWin32' || $^O eq 'NetWare') {
+ return qq/"$_[0]"/;
+ }
+ else {
+ return $_[0];
+ }
+}
+
+STDOUT->autoflush;
+STDERR->autoflush;
+
+my $pid = open2('READ', 'WRITE', $perl, '-e', cmd_line('print scalar <STDIN>'));
+cmp_ok($pid, '>', 1, 'got a sane process ID');
+ok(print WRITE "hi kid\n");
+like(<READ>, qr/^hi kid\r?\n$/);
+ok(close(WRITE), "closing WRITE: $!");
+ok(close(READ), "closing READ: $!");
+my $reaped_pid = waitpid $pid, 0;
+is($reaped_pid, $pid, "Reaped PID matches");
+is($?, 0, '$? should be zero');
+
+{
+ package SKREEEK;
+ my $pid = IPC::Open2::open2('KAZOP', 'WRITE', $perl, '-e',
+ main::cmd_line('print scalar <STDIN>'));
+ main::cmp_ok($pid, '>', 1, 'got a sane process ID');
+ main::ok(print WRITE "hi kid\n");
+ main::like(<KAZOP>, qr/^hi kid\r?\n$/);
+ main::ok(close(WRITE), "closing WRITE: $!");
+ main::ok(close(KAZOP), "closing READ: $!");
+ my $reaped_pid = waitpid $pid, 0;
+ main::is($reaped_pid, $pid, "Reaped PID matches");
+ main::is($?, 0, '$? should be zero');
+}
+
+$pid = eval { open2('READ', '', $perl, '-e', cmd_line('print scalar <STDIN>')) };
+like($@, qr/^open2: Modification of a read-only value attempted at /,
+ 'open2 faults read-only parameters correctly') or do {waitpid $pid, 0};
Added: vendor/perl/dist/ext/NDBM_File/hints/gnu.pl
===================================================================
--- vendor/perl/dist/ext/NDBM_File/hints/gnu.pl (rev 0)
+++ vendor/perl/dist/ext/NDBM_File/hints/gnu.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+do './hints/linux.pl' or die $@;
Added: vendor/perl/dist/ext/ODBM_File/hints/gnu.pl
===================================================================
--- vendor/perl/dist/ext/ODBM_File/hints/gnu.pl (rev 0)
+++ vendor/perl/dist/ext/ODBM_File/hints/gnu.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+do './hints/linux.pl' or die $@;
Added: vendor/perl/dist/ext/POSIX/t/export.t
===================================================================
--- vendor/perl/dist/ext/POSIX/t/export.t (rev 0)
+++ vendor/perl/dist/ext/POSIX/t/export.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,116 @@
+#!./perl -w
+
+use strict;
+use Test::More;
+use Config;
+
+plan(skip_all => "POSIX is unavailable")
+ unless $Config{extensions} =~ /\bPOSIX\b/;
+
+require POSIX;
+POSIX->import();
+
+# @POSIX::EXPORT and @POSIX::EXPORT_OK are generated. The intent of this test is
+# to catch *unintended* changes to them introduced by bugs in refactoring.
+
+my %expect = (
+ EXPORT => [qw(%SIGRT ARG_MAX B0 B110 B1200 B134 B150 B1800 B19200 B200
+ B2400 B300 B38400 B4800 B50 B600 B75 B9600 BRKINT BUFSIZ
+ CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX CLK_TCK CLOCAL
+ CLOCKS_PER_SEC CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB DBL_DIG
+ DBL_EPSILON DBL_MANT_DIG DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
+ DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP E2BIG EACCES EADDRINUSE
+ EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF EBUSY ECHILD
+ ECHO ECHOE ECHOK ECHONL ECONNABORTED ECONNREFUSED ECONNRESET
+ EDEADLK EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG
+ EHOSTDOWN EHOSTUNREACH EINPROGRESS EINTR EINVAL EIO EISCONN
+ EISDIR ELOOP EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENETDOWN
+ ENETRESET ENETUNREACH ENFILE ENOBUFS ENODEV ENOENT ENOEXEC
+ ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN
+ ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOF EOPNOTSUPP EPERM
+ EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE ERANGE
+ EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH
+ ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK
+ EXDEV EXIT_FAILURE EXIT_SUCCESS FD_CLOEXEC FILENAME_MAX
+ FLT_DIG FLT_EPSILON FLT_MANT_DIG FLT_MAX FLT_MAX_10_EXP
+ FLT_MAX_EXP FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP FLT_RADIX
+ FLT_ROUNDS F_DUPFD F_GETFD F_GETFL F_GETLK F_OK F_RDLCK
+ F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK HUGE_VAL
+ HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR INLCR INPCK
+ INT_MAX INT_MIN ISIG ISTRIP IXOFF IXON LC_ALL LC_COLLATE
+ LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LDBL_DIG
+ LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX LDBL_MAX_10_EXP
+ LDBL_MAX_EXP LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP LINK_MAX
+ LONG_MAX LONG_MIN L_ctermid L_cuserid L_tmpname MAX_CANON
+ MAX_INPUT MB_CUR_MAX MB_LEN_MAX NAME_MAX NCCS NDEBUG
+ NGROUPS_MAX NOFLSH NULL OPEN_MAX OPOST O_ACCMODE O_APPEND
+ O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC
+ O_WRONLY PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK
+ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK SA_RESETHAND
+ SA_RESTART SA_SIGINFO SCHAR_MAX SCHAR_MIN SEEK_CUR SEEK_END
+ SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM SIGBUS SIGCHLD
+ SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGPOLL
+ SIGPROF SIGQUIT SIGRTMAX SIGRTMIN SIGSEGV SIGSTOP SIGSYS
+ SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1
+ SIGUSR2 SIGVTALRM SIGXCPU SIGXFSZ SIG_BLOCK SIG_DFL SIG_ERR
+ SIG_IGN SIG_SETMASK SIG_UNBLOCK SSIZE_MAX STDERR_FILENO
+ STDIN_FILENO STDOUT_FILENO STREAM_MAX S_IRGRP S_IROTH S_IRUSR
+ S_IRWXG S_IRWXO S_IRWXU S_ISBLK S_ISCHR S_ISDIR S_ISFIFO
+ S_ISGID S_ISREG S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP
+ S_IXOTH S_IXUSR TCIFLUSH TCIOFF TCIOFLUSH TCION TCOFLUSH
+ TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW TMP_MAX TOSTOP
+ TZNAME_MAX UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX VEOF VEOL
+ VERASE VINTR VKILL VMIN VQUIT VSTART VSTOP VSUSP VTIME
+ WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED WNOHANG WSTOPSIG
+ WTERMSIG WUNTRACED W_OK X_OK _PC_CHOWN_RESTRICTED
+ _PC_LINK_MAX _PC_MAX_CANON _PC_MAX_INPUT _PC_NAME_MAX
+ _PC_NO_TRUNC _PC_PATH_MAX _PC_PIPE_BUF _PC_VDISABLE
+ _POSIX_ARG_MAX _POSIX_CHILD_MAX _POSIX_CHOWN_RESTRICTED
+ _POSIX_JOB_CONTROL _POSIX_LINK_MAX _POSIX_MAX_CANON
+ _POSIX_MAX_INPUT _POSIX_NAME_MAX _POSIX_NGROUPS_MAX
+ _POSIX_NO_TRUNC _POSIX_OPEN_MAX _POSIX_PATH_MAX
+ _POSIX_PIPE_BUF _POSIX_SAVED_IDS _POSIX_SSIZE_MAX
+ _POSIX_STREAM_MAX _POSIX_TZNAME_MAX _POSIX_VDISABLE
+ _POSIX_VERSION _SC_ARG_MAX _SC_CHILD_MAX _SC_CLK_TCK
+ _SC_JOB_CONTROL _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE
+ _SC_SAVED_IDS _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION _exit
+ abort access acos asctime asin assert atan atexit atof atoi
+ atol bsearch calloc ceil cfgetispeed cfgetospeed cfsetispeed
+ cfsetospeed clearerr clock cosh creat ctermid ctime cuserid
+ difftime div dup dup2 errno execl execle execlp execv execve
+ execvp fabs fclose fdopen feof ferror fflush fgetc fgetpos
+ fgets floor fmod fopen fpathconf fprintf fputc fputs fread
+ free freopen frexp fscanf fseek fsetpos fstat fsync ftell
+ fwrite getchar getcwd getegid getenv geteuid getgid getgroups
+ getpid gets getuid isalnum isalpha isatty iscntrl isdigit
+ isgraph islower isprint ispunct isspace isupper isxdigit labs
+ ldexp ldiv localeconv log10 longjmp lseek malloc mblen
+ mbstowcs mbtowc memchr memcmp memcpy memmove memset mkfifo
+ mktime modf offsetof pathconf pause perror pow putc putchar
+ puts qsort raise realloc remove rewind scanf setbuf setgid
+ setjmp setlocale setpgid setsid setuid setvbuf sigaction
+ siglongjmp signal sigpending sigprocmask sigsetjmp sigsuspend
+ sinh sscanf stderr stdin stdout strcat strchr strcmp strcoll
+ strcpy strcspn strerror strftime strlen strncat strncmp
+ strncpy strpbrk strrchr strspn strstr strtod strtok strtol
+ strtoul strxfrm sysconf tan tanh tcdrain tcflow tcflush
+ tcgetattr tcgetpgrp tcsendbreak tcsetattr tcsetpgrp tmpfile
+ tmpnam tolower toupper ttyname tzname tzset uname ungetc
+ vfprintf vprintf vsprintf wcstombs wctomb)],
+ EXPORT_OK => [qw(abs alarm atan2 chdir chmod chown close closedir cos exit
+ exp fcntl fileno fork getc getgrgid getgrnam getlogin
+ getpgrp getppid getpwnam getpwuid gmtime kill lchown link
+ localtime log mkdir nice open opendir pipe printf rand
+ read readdir rename rewinddir rmdir sin sleep sprintf sqrt
+ srand stat system time times umask unlink utime wait
+ waitpid write)],
+);
+
+plan (tests => 2 * keys %expect);
+
+while (my ($var, $expect) = each %expect) {
+ my $have = *{$POSIX::{$var}}{ARRAY};
+ cmp_ok(@$have, '==', @$expect,
+ "Correct number of entries for \@POSIX::$var");
+ is_deeply([sort @$have], $expect, "Correct entries for \@POSIX::$var");
+}
Added: vendor/perl/dist/ext/POSIX/t/sigset.t
===================================================================
--- vendor/perl/dist/ext/POSIX/t/sigset.t (rev 0)
+++ vendor/perl/dist/ext/POSIX/t/sigset.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,96 @@
+#!./perl -w
+
+use strict;
+use Test::More;
+use Config;
+
+plan(skip_all => "POSIX is unavailable")
+ unless $Config{extensions} =~ /\bPOSIX\b/;
+plan(skip_all => "sigemptyset is unavailable on $^O")
+ if $^O eq 'MSWin32' || $^O eq 'NetWare';
+
+require POSIX;
+POSIX->import();
+
+my @signo;
+my ($min, $max) = (~0, -1);
+
+sub expected_signals {
+ my $sigset = shift;
+ my $desc = shift;
+ my %expected;
+ ++$expected{$_} foreach @_;
+
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+ for my $sig ($min..$max) {
+ if ($expected{$sig}) {
+ cmp_ok($sigset->ismember($sig), '==', 1,
+ "$desc - sig $sig is a member");
+ } else {
+ cmp_ok($sigset->ismember($sig), '==', 0,
+ "$desc - sig $sig is not a member");
+ }
+ }
+}
+
+foreach (@POSIX::EXPORT) {
+ next unless /^SIG[A-Z0-9]+$/;
+ my $val = eval "POSIX::$_";
+ next unless defined $val;
+ $min = $val if $min > $val;
+ $max = $val if $max < $val;
+ push @signo, $val;
+}
+
+# Sanity check that we found something:
+cmp_ok(scalar @signo, '>=', 6,
+ 'found at least 6 signals (6 are named in the ANSI C spec)');
+
+my $sigset = POSIX::SigSet->new();
+isa_ok($sigset, 'POSIX::SigSet', 'checking the type of the object');
+expected_signals($sigset, 'new object');
+
+is($sigset->fillset(), '0 but true', 'fillset');
+# because on some systems, not all integers are valid signals...
+# so the only thing we can really be confident about is that all the signals
+# with names are going to be present:
+foreach (@signo) {
+ cmp_ok($sigset->ismember($_), '==', 1, "after fillset sig $_ is a member");
+}
+is($sigset->emptyset(), '0 but true', 'empyset');
+expected_signals($sigset, 'after emptyset');
+
+is($sigset->addset($signo[1]), '0 but true', 'addset');
+expected_signals($sigset, 'after addset', $signo[1]);
+is($sigset->addset($signo[2]), '0 but true', 'addset');
+expected_signals($sigset, 'after addset', $signo[1], $signo[2]);
+is($sigset->addset($signo[4]), '0 but true', 'addset');
+expected_signals($sigset, 'after addset', $signo[1], $signo[2], $signo[4]);
+is($sigset->addset($signo[2]), '0 but true', 'addset');
+expected_signals($sigset, 'after addset', $signo[1], $signo[2], $signo[4]);
+is($sigset->delset($signo[4]), '0 but true', 'delset');
+expected_signals($sigset, 'after addset', $signo[1], $signo[2]);
+is($sigset->addset($signo[0]), '0 but true', 'addset');
+expected_signals($sigset, 'after addset', $signo[0], $signo[1], $signo[2]);
+is($sigset->delset($signo[4]), '0 but true', 'delset');
+expected_signals($sigset, 'after delset', $signo[0], $signo[1], $signo[2]);
+is($sigset->delset($signo[1]), '0 but true', 'delset');
+expected_signals($sigset, 'after delset', $signo[0], $signo[2]);
+is($sigset->delset($signo[0]), '0 but true', 'delset');
+expected_signals($sigset, 'after addset', $signo[2]);
+is($sigset->delset($signo[2]), '0 but true', 'delset');
+expected_signals($sigset, 'empty again');
+
+foreach ([$signo[0]],
+ [$signo[2]],
+ [$signo[3]],
+ [@signo[2,3,6]],
+ ) {
+ $sigset = POSIX::SigSet->new(@$_);
+ isa_ok($sigset, 'POSIX::SigSet', 'checking the type of the object');
+ local $" = ', ';
+ expected_signals($sigset, "new(@$_)", @$_);
+}
+
+done_testing();
Added: vendor/perl/dist/ext/POSIX/t/unimplemented.t
===================================================================
--- vendor/perl/dist/ext/POSIX/t/unimplemented.t (rev 0)
+++ vendor/perl/dist/ext/POSIX/t/unimplemented.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,99 @@
+#!./perl -w
+
+use strict;
+use Test::More;
+use Config;
+
+plan(skip_all => "POSIX is unavailable")
+ unless $Config{extensions} =~ /\bPOSIX\b/;
+
+require POSIX;
+
+foreach ([atexit => 'C-specific: use END {} instead'],
+ [atof => 'C-specific, stopped'],
+ [atoi => 'C-specific, stopped'],
+ [atol => 'C-specific, stopped'],
+ [bsearch => 'not supplied'],
+ [calloc => 'C-specific, stopped'],
+ [clearerr => \'IO::Handle::clearerr'],
+ [div => 'C-specific: use /, % and int instead'],
+ [execl => 'C-specific, stopped'],
+ [execle => 'C-specific, stopped'],
+ [execlp => 'C-specific, stopped'],
+ [execv => 'C-specific, stopped'],
+ [execve => 'C-specific, stopped'],
+ [execvp => 'C-specific, stopped'],
+ [fclose => \'IO::Handle::close'],
+ [fdopen => \'IO::Handle::new_from_fd'],
+ [feof => \'IO::Handle::eof'],
+ [ferror => \'IO::Handle::error'],
+ [fflush => \'IO::Handle::flush'],
+ [fgetc => \'IO::Handle::getc'],
+ [fgetpos => \'IO::Seekable::getpos'],
+ [fgets => \'IO::Handle::gets'],
+ [fileno => \'IO::Handle::fileno'],
+ [fopen => \'IO::File::open'],
+ [fprintf => 'C-specific: use printf instead'],
+ [fputc => 'C-specific: use print instead'],
+ [fputs => 'C-specific: use print instead'],
+ [fread => 'C-specific: use read instead'],
+ [free => 'C-specific, stopped'],
+ [freopen => 'C-specific: use open instead'],
+ [fscanf => 'C-specific: use <> and regular expressions instead'],
+ [fseek => \'IO::Seekable::seek'],
+ [fsetpos => \'IO::Seekable::setpos'],
+ [fsync => \'IO::Handle::sync'],
+ [ftell => \'IO::Seekable::tell'],
+ [fwrite => 'C-specific: use print instead'],
+ [labs => 'C-specific: use abs instead'],
+ [ldiv => 'C-specific: use /, % and int instead'],
+ [longjmp => 'C-specific: use die instead'],
+ [malloc => 'C-specific, stopped'],
+ [memchr => 'C-specific: use index() instead'],
+ [memcmp => 'C-specific: use eq instead'],
+ [memcpy => 'C-specific: use = instead'],
+ [memmove => 'C-specific: use = instead'],
+ [memset => 'C-specific: use x instead'],
+ [offsetof => 'C-specific, stopped'],
+ [putc => 'C-specific: use print instead'],
+ [putchar => 'C-specific: use print instead'],
+ [puts => 'C-specific: use print instead'],
+ [qsort => 'C-specific: use sort instead'],
+ [rand => 'non-portable, use Perl\'s rand instead'],
+ [realloc => 'C-specific, stopped'],
+ [scanf => 'C-specific: use <> and regular expressions instead'],
+ [setbuf => \'IO::Handle::setbuf'],
+ [setjmp => 'C-specific: use eval {} instead'],
+ [setvbuf => \'IO::Handle::setvbuf'],
+ [siglongjmp => 'C-specific: use die instead'],
+ [sigsetjmp => 'C-specific: use eval {} instead'],
+ [srand => 'not supplied; refer to Perl\'s srand documentation'],
+ [sscanf => 'C-specific: use regular expressions instead'],
+ [strcat => 'C-specific: use .= instead'],
+ [strchr => 'C-specific: use index() instead'],
+ [strcmp => 'C-specific: use eq instead'],
+ [strcpy => 'C-specific: use = instead'],
+ [strcspn => 'C-specific: use regular expressions instead'],
+ [strlen => 'C-specific: use length instead'],
+ [strncat => 'C-specific: use .= instead'],
+ [strncmp => 'C-specific: use eq instead'],
+ [strncpy => 'C-specific: use = instead'],
+ [strpbrk => 'C-specific, stopped'],
+ [strrchr => 'C-specific: use rindex() instead'],
+ [strspn => 'C-specific, stopped'],
+ [strtok => 'C-specific, stopped'],
+ [tmpfile => \'IO::File::new_tmpfile'],
+ [ungetc => \'IO::Handle::ungetc'],
+ [vfprintf => 'C-specific, stopped'],
+ [vprintf => 'C-specific, stopped'],
+ [vsprintf => 'C-specific, stopped'],
+ ) {
+ my ($func, $action) = @$_;
+ my $expect = ref $action
+ ? qr/Use method $$action\(\) instead of POSIX::$func\(\) at \(eval/
+ : qr/Unimplemented: POSIX::$func\(\) is \Q$action\E at \(eval/;
+ is(eval "POSIX::$func(); 1", undef, "POSIX::$func fails as expected");
+ like($@, $expect, "POSIX::$func gives expected error message");
+}
+
+done_testing();
Added: vendor/perl/dist/ext/POSIX/t/usage.t
===================================================================
--- vendor/perl/dist/ext/POSIX/t/usage.t (rev 0)
+++ vendor/perl/dist/ext/POSIX/t/usage.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,48 @@
+#!./perl -w
+
+use strict;
+use Test::More;
+use Config;
+
+plan(skip_all => "POSIX is unavailable")
+ unless $Config{extensions} =~ /\bPOSIX\b/;
+
+require POSIX;
+
+my %valid;
+my @all;
+
+my $argc = 0;
+for my $list ([qw(errno fork getchar getegid geteuid getgid getgroups getlogin
+ getpgrp getpid getppid gets getuid time wait)],
+ [qw(abs alarm assert chdir closedir cos exit exp fabs fstat getc
+ getenv getgrgid getgrnam getpwnam getpwuid gmtime isatty
+ localtime log opendir raise readdir remove rewind rewinddir
+ rmdir sin sleep sqrt stat strerror system tolower toupper
+ umask unlink)],
+ [qw(atan2 chmod creat kill link mkdir pow rename strstr waitpid)],
+ [qw(chown fcntl utime)]) {
+ $valid{$_} = $argc foreach @$list;
+ push @all, @$list;
+ ++$argc;
+}
+
+my @try = 0 .. $argc - 1;
+foreach my $func (sort @all) {
+ my $arg_pat = join ', ', ('[a-z]+') x $valid{$func};
+ my $expect = qr/\AUsage: POSIX::$func\($arg_pat\) at \(eval/;
+ foreach my $try (@try) {
+ next if $valid{$func} == $try;
+ my $call = "POSIX::$func(" . join(', ', 1 .. $try) . ')';
+ is(eval "$call; 1", undef, "$call fails");
+ like($@, $expect, "POSIX::$func for $try arguments gives expected error")
+ }
+}
+
+foreach my $func (qw(printf sprintf)) {
+ is(eval "POSIX::$func(); 1", undef, "POSIX::$func() fails");
+ like($@, qr/\AUsage: POSIX::$func\(pattern, args\.\.\.\) at \(eval/,
+ "POSIX::$func for 0 arguments gives expected error");
+}
+
+done_testing();
Added: vendor/perl/dist/ext/POSIX/t/wrappers.t
===================================================================
--- vendor/perl/dist/ext/POSIX/t/wrappers.t (rev 0)
+++ vendor/perl/dist/ext/POSIX/t/wrappers.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,233 @@
+#!./perl -w
+
+use strict;
+use Test::More;
+use Config;
+
+plan(skip_all => "POSIX is unavailable")
+ unless $Config{extensions} =~ /\bPOSIX\b/;
+
+require POSIX;
+require Symbol;
+
+use constant NOT_HERE => 'this-file-should-not-exist';
+
+# localtime and gmtime in time.t.
+# exit, fork, waitpid, sleep in waitpid.t
+# errno in posix.t
+
+is(POSIX::abs(-42), 42, 'abs');
+is(POSIX::abs(-3.14), 3.14, 'abs');
+is(POSIX::abs(POSIX::exp(1)), CORE::exp(1), 'abs');
+is(POSIX::alarm(0), 0, 'alarm');
+is(eval {POSIX::assert(1); 1}, 1, 'assert(1)');
+is(eval {POSIX::assert(0); 1}, undef, 'assert(0)');
+like($@, qr/Assertion failed at/, 'assert throws an error');
+is(POSIX::atan2(0, 1), 0, 'atan2');
+is(POSIX::cos(0), 1, 'cos');
+is(POSIX::exp(0), 1, 'exp');
+is(POSIX::fabs(-42), 42, 'fabs');
+is(POSIX::fabs(-3.14), 3.14, 'fabs');
+
+is(do {local $^W;
+ POSIX::fcntl(Symbol::geniosym(), 0, 0);
+ 1;
+ }, 1, 'fcntl');
+
+SKIP: {
+ # Win32 doesn't like me trying to fstat STDIN. Bothersome thing.
+ skip("Can't open $^X: $!", 1) unless open my $fh, '<', $^X;
+
+ is_deeply([POSIX::fstat(fileno $fh)], [stat $fh], 'fstat');
+}
+
+is(POSIX::getegid(), 0 + $), 'getegid');
+is(POSIX::geteuid(), 0 + $>, 'geteuid');
+is(POSIX::getgid(), 0 + $(, 'getgid');
+is(POSIX::getenv('PATH'), $ENV{PATH}, 'getenv');
+
+SKIP: {
+ my $name = eval {getgrgid $(};
+ skip("getgrgid not available", 2) unless defined $name;
+ is_deeply([POSIX::getgrgid($()], [CORE::getgrgid($()], "getgrgid($()");
+ is_deeply([POSIX::getgrnam($name)], [CORE::getgrnam($name)],
+ "getgrnam('$name')");
+}
+
+cmp_ok((length join ' ', POSIX::getgroups()), '<=', length $), 'getgroups');
+is(POSIX::getlogin(), CORE::getlogin, 'getlogin');
+
+SKIP: {
+ skip('getpgrp not available', 1) unless $Config{d_getpgrp};
+ is(POSIX::getpgrp(), CORE::getpgrp(), 'getpgrp');
+}
+
+is(POSIX::getpid(), $$, 'getpid');
+
+SKIP: {
+ my $name = eval {getpwuid $<};
+ skip('getpwuid not available', 2) unless defined $name;
+ is_deeply([POSIX::getpwuid($<)], [CORE::getpwuid($<)], "getgrgid($<)");
+ is_deeply([POSIX::getpwnam($name)], [CORE::getpwnam($name)],
+ "getpwnam('$name')");
+}
+
+SKIP: {
+ skip('STDIN is not a tty', 1) unless -t STDIN;
+ is(POSIX::isatty(*STDIN), 1, 'isatty');
+}
+
+is(POSIX::getuid(), $<, 'getuid');
+is(POSIX::log(1), 0, 'log');
+is(POSIX::pow(2, 31), 0x80000000, 'pow');
+# usage "printf(pattern, args...)" if @_ < 1;
+
+{
+ my $buffer;
+ package Capture;
+ use parent 'Tie::StdHandle';
+
+ sub WRITE {
+ $buffer .= $_[1];
+ 42;
+ }
+
+ package main;
+ tie *STDOUT, 'Capture';
+ is(POSIX::printf('%s %s%c', 'Hello', 'World', ord "\n"), 42, 'printf');
+ is($buffer, "Hello World\n", 'captured print output');
+ untie *STDOUT;
+}
+
+is(do {local $^W;
+ POSIX::rewind(Symbol::geniosym());
+ 1;
+ }, 1, 'rewind');
+
+is(POSIX::sin(0), 0, 'sin');
+is(POSIX::sleep(0), 0, 'sleep');
+is(POSIX::sprintf('%o', 42), '52', 'sprintf');
+is(POSIX::sqrt(256), 16, 'sqrt');
+is_deeply([POSIX::stat($^X)], [stat $^X], 'stat');
+{
+ local $! = 2;
+ my $error = "$!";
+ is(POSIX::strerror(2), $error, 'strerror');
+}
+
+is(POSIX::strstr('BBFRPRAFPGHPP', 'FP'), 7, 'strstr');
+SKIP: {
+ my $true;
+ foreach (qw(/bin/true /usr/bin/true)) {
+ if (-x $_) {
+ $true = $_;
+ last;
+ }
+ }
+ skip("Can't find true", 1) unless $true;
+ is(POSIX::system($true), 0, 'system');
+}
+
+{
+ my $past = CORE::time;
+ my $present = POSIX::time();
+ my $future = CORE::time;
+ # Shakes fist at virtual machines
+ cmp_ok($past, '<=', $present, 'time');
+ cmp_ok($present, '<=', $future, 'time');
+}
+
+is(POSIX::tolower('Perl Rules'), 'perl rules', 'tolower');
+is(POSIX::toupper('oi!'), 'OI!', 'toupper');
+
+is(-e NOT_HERE, undef, NOT_HERE . ' does not exist');
+
+foreach ([undef, 0, 'chdir', NOT_HERE],
+ [undef, 0, 'chmod', 0, NOT_HERE],
+ ['d_chown', 0, 'chown', 0, 0, NOT_HERE],
+ [undef, undef, 'creat', NOT_HERE . '/crash', 0],
+ ['d_link', 0, 'link', NOT_HERE, 'ouch'],
+ [undef, 0, 'remove', NOT_HERE],
+ [undef, 0, 'rename', NOT_HERE, 'z_zwapp'],
+ [undef, 0, 'remove', NOT_HERE],
+ [undef, 0, 'unlink', NOT_HERE],
+ [undef, 0, 'utime', NOT_HERE, 0, 0],
+ ) {
+ my ($skip, $expect, $name, @args) = @$_;
+ my $func = do {no strict 'refs'; \&{"POSIX::$name"}};
+
+ SKIP: {
+ skip("$name() is not available", 2) if $skip && !$Config{$skip};
+ $! = 0;
+ is(&$func(@args), $expect, $name);
+ isnt($!, '', "$name reported an error");
+ }
+}
+
+{
+ my $dir = "./HiC_$$";
+ is(-e $dir, undef, "$dir does not exist");
+
+ is(POSIX::mkdir($dir, 0755), 1, 'mkdir');
+ is(-d $dir, 1, "$dir now exists");
+
+ my $dh = POSIX::opendir($dir);
+ isnt($dh, undef, 'opendir');
+
+ my @first = POSIX::readdir($dh);
+ is(POSIX::rewinddir($dh), 1, 'rewinddir');
+ my @second = POSIX::readdir($dh);
+
+ is_deeply(\@first, \@second, 'readdir,rewinddir,readdir');
+
+ is(POSIX::closedir($dh), 1, 'rewinddir');
+
+ is(POSIX::rmdir($dir), 1, 'rmdir');
+ is(-e $dir, undef, "$dir does not exist");
+}
+
+SKIP: {
+ skip("No \$SIG{USR1} on $^O", 4) unless exists $SIG{USR1};
+ my $gotit = 0;
+ $SIG{USR1} = sub { $gotit++ };
+ is(POSIX::kill($$, 'SIGUSR1'), 1, 'kill');
+ is($gotit, 1, 'got first signal');
+ is(POSIX::raise('SIGUSR1'), 1, 'raise');
+ is($gotit, 2, 'got second signal');
+}
+
+SKIP: {
+ foreach (qw(fork pipe)) {
+ skip("no $_", 8) unless $Config{"d_$_"};
+ }
+ # die with an uncaught SIGARLM if something goes wrong
+ is(CORE::alarm(60), 0, 'no alarm set previously');
+
+ is((pipe *STDIN, my $w), 1, 'pipe');
+ my $pid = POSIX::fork();
+ fail("fork failed: $!") unless defined $pid;
+
+ if ($pid) {
+ close $w;
+ is(POSIX::getc(*STDIN), '1', 'getc');
+ is(POSIX::getchar(), '2', 'getchar');
+ is(POSIX::gets(), "345\n", 'gets');
+ my $ppid = <STDIN>;
+ chomp $ppid;
+ is($ppid, $$, 'getppid');
+ is(POSIX::wait(), $pid, 'wait');
+ is(POSIX::WIFEXITED(${^CHILD_ERROR_NATIVE}), 1, 'child exited cleanly');
+ is(POSIX::WEXITSTATUS(${^CHILD_ERROR_NATIVE}), 1,
+ 'child exited with 1 (the retun value of its close call)');
+ } else {
+ # Child
+ close *STDIN;
+ print $w "12345\n", POSIX::getppid(), "\n";
+ POSIX::_exit(close $w);
+ }
+}
+
+my $umask = CORE::umask;
+is(POSIX::umask($umask), $umask, 'umask');
+
+done_testing();
Added: vendor/perl/dist/ext/PerlIO-mmap/mmap.pm
===================================================================
--- vendor/perl/dist/ext/PerlIO-mmap/mmap.pm (rev 0)
+++ vendor/perl/dist/ext/PerlIO-mmap/mmap.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,30 @@
+package PerlIO::mmap;
+use strict;
+use warnings;
+our $VERSION = '0.011';
+
+use XSLoader;
+XSLoader::load(__PACKAGE__, __PACKAGE__->VERSION);
+
+1;
+
+__END__
+
+=head1 NAME
+
+PerlIO::mmap - Memory mapped IO
+
+=head1 SYNOPSIS
+
+ open my $fh, '<:mmap', $filename;
+
+=head1 DESCRIPTION
+
+This layer does C<read> and C<write> operations by mmap()ing the file if possible, but falls back to the default behavior if not.
+
+=head1 IMPLEMENTATION NOTE
+
+C<PerlIO::mmap> only exists to use XSLoader to load C code that provides support for using memory mapped IO. One does not need to explicitly C<use PerlIO::mmap;>.
+
+=cut
+
Added: vendor/perl/dist/ext/PerlIO-mmap/mmap.xs
===================================================================
--- vendor/perl/dist/ext/PerlIO-mmap/mmap.xs (rev 0)
+++ vendor/perl/dist/ext/PerlIO-mmap/mmap.xs 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,320 @@
+/*
+ * Local variables:
+ * c-indentation-style: bsd
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * ex: set ts=8 sts=4 sw=4 et:
+ */
+
+#define PERL_NO_GET_CONTEXT
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#if defined(PERLIO_LAYERS) && defined(HAS_MMAP)
+
+#include "perliol.h"
+#include <sys/mman.h>
+
+/*
+ * mmap as "buffer" layer
+ */
+
+typedef struct {
+ PerlIOBuf base; /* PerlIOBuf stuff */
+ Mmap_t mptr; /* Mapped address */
+ Size_t len; /* mapped length */
+ STDCHAR *bbuf; /* malloced buffer if map fails */
+} PerlIOMmap;
+
+IV
+PerlIOMmap_map(pTHX_ PerlIO *f)
+{
+ dVAR;
+ PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
+ const IV flags = PerlIOBase(f)->flags;
+ IV code = 0;
+ if (m->len)
+ abort();
+ if (flags & PERLIO_F_CANREAD) {
+ PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf);
+ const int fd = PerlIO_fileno(f);
+ Stat_t st;
+ code = Fstat(fd, &st);
+ if (code == 0 && S_ISREG(st.st_mode)) {
+ SSize_t len = st.st_size - b->posn;
+ if (len > 0) {
+ Off_t posn;
+ if (PL_mmap_page_size <= 0)
+ Perl_croak(aTHX_ "panic: bad pagesize %" IVdf,
+ PL_mmap_page_size);
+ if (b->posn < 0) {
+ /*
+ * This is a hack - should never happen - open should
+ * have set it !
+ */
+ b->posn = PerlIO_tell(PerlIONext(f));
+ }
+ posn = (b->posn / PL_mmap_page_size) * PL_mmap_page_size;
+ len = st.st_size - posn;
+ m->mptr = (Mmap_t)mmap(NULL, len, PROT_READ, MAP_SHARED, fd, posn);
+ if (m->mptr && m->mptr != (Mmap_t) - 1) {
+#if 0 && defined(HAS_MADVISE) && defined(MADV_SEQUENTIAL)
+ madvise(m->mptr, len, MADV_SEQUENTIAL);
+#endif
+#if 0 && defined(HAS_MADVISE) && defined(MADV_WILLNEED)
+ madvise(m->mptr, len, MADV_WILLNEED);
+#endif
+ PerlIOBase(f)->flags =
+ (flags & ~PERLIO_F_EOF) | PERLIO_F_RDBUF;
+ b->end = ((STDCHAR *) m->mptr) + len;
+ b->buf = ((STDCHAR *) m->mptr) + (b->posn - posn);
+ b->ptr = b->buf;
+ m->len = len;
+ }
+ else {
+ b->buf = NULL;
+ }
+ }
+ else {
+ PerlIOBase(f)->flags =
+ flags | PERLIO_F_EOF | PERLIO_F_RDBUF;
+ b->buf = NULL;
+ b->ptr = b->end = b->ptr;
+ code = -1;
+ }
+ }
+ }
+ return code;
+}
+
+IV
+PerlIOMmap_unmap(pTHX_ PerlIO *f)
+{
+ PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
+ IV code = 0;
+ if (m->len) {
+ PerlIOBuf * const b = &m->base;
+ if (b->buf) {
+ /* The munmap address argument is tricky: depending on the
+ * standard it is either "void *" or "caddr_t" (which is
+ * usually "char *" (signed or unsigned). If we cast it
+ * to "void *", those that have it caddr_t and an uptight
+ * C++ compiler, will freak out. But casting it as char*
+ * should work. Maybe. (Using Mmap_t figured out by
+ * Configure doesn't always work, apparently.) */
+ code = munmap((char*)m->mptr, m->len);
+ b->buf = NULL;
+ m->len = 0;
+ m->mptr = NULL;
+ if (PerlIO_seek(PerlIONext(f), b->posn, SEEK_SET) != 0)
+ code = -1;
+ }
+ b->ptr = b->end = b->buf;
+ PerlIOBase(f)->flags &= ~(PERLIO_F_RDBUF | PERLIO_F_WRBUF);
+ }
+ return code;
+}
+
+STDCHAR *
+PerlIOMmap_get_base(pTHX_ PerlIO *f)
+{
+ PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
+ PerlIOBuf * const b = &m->base;
+ if (b->buf && (PerlIOBase(f)->flags & PERLIO_F_RDBUF)) {
+ /*
+ * Already have a readbuffer in progress
+ */
+ return b->buf;
+ }
+ if (b->buf) {
+ /*
+ * We have a write buffer or flushed PerlIOBuf read buffer
+ */
+ m->bbuf = b->buf; /* save it in case we need it again */
+ b->buf = NULL; /* Clear to trigger below */
+ }
+ if (!b->buf) {
+ PerlIOMmap_map(aTHX_ f); /* Try and map it */
+ if (!b->buf) {
+ /*
+ * Map did not work - recover PerlIOBuf buffer if we have one
+ */
+ b->buf = m->bbuf;
+ }
+ }
+ b->ptr = b->end = b->buf;
+ if (b->buf)
+ return b->buf;
+ return PerlIOBuf_get_base(aTHX_ f);
+}
+
+SSize_t
+PerlIOMmap_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
+{
+ PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
+ PerlIOBuf * const b = &m->base;
+ if (PerlIOBase(f)->flags & PERLIO_F_WRBUF)
+ PerlIO_flush(f);
+ if (b->ptr && (b->ptr - count) >= b->buf
+ && memEQ(b->ptr - count, vbuf, count)) {
+ b->ptr -= count;
+ PerlIOBase(f)->flags &= ~PERLIO_F_EOF;
+ return count;
+ }
+ if (m->len) {
+ /*
+ * Loose the unwritable mapped buffer
+ */
+ PerlIO_flush(f);
+ /*
+ * If flush took the "buffer" see if we have one from before
+ */
+ if (!b->buf && m->bbuf)
+ b->buf = m->bbuf;
+ if (!b->buf) {
+ PerlIOBuf_get_base(aTHX_ f);
+ m->bbuf = b->buf;
+ }
+ }
+ return PerlIOBuf_unread(aTHX_ f, vbuf, count);
+}
+
+SSize_t
+PerlIOMmap_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
+{
+ PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
+ PerlIOBuf * const b = &m->base;
+
+ if (!b->buf || !(PerlIOBase(f)->flags & PERLIO_F_WRBUF)) {
+ /*
+ * No, or wrong sort of, buffer
+ */
+ if (m->len) {
+ if (PerlIOMmap_unmap(aTHX_ f) != 0)
+ return 0;
+ }
+ /*
+ * If unmap took the "buffer" see if we have one from before
+ */
+ if (!b->buf && m->bbuf)
+ b->buf = m->bbuf;
+ if (!b->buf) {
+ PerlIOBuf_get_base(aTHX_ f);
+ m->bbuf = b->buf;
+ }
+ }
+ return PerlIOBuf_write(aTHX_ f, vbuf, count);
+}
+
+IV
+PerlIOMmap_flush(pTHX_ PerlIO *f)
+{
+ PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
+ PerlIOBuf * const b = &m->base;
+ IV code = PerlIOBuf_flush(aTHX_ f);
+ /*
+ * Now we are "synced" at PerlIOBuf level
+ */
+ if (b->buf) {
+ if (m->len) {
+ /*
+ * Unmap the buffer
+ */
+ if (PerlIOMmap_unmap(aTHX_ f) != 0)
+ code = -1;
+ }
+ else {
+ /*
+ * We seem to have a PerlIOBuf buffer which was not mapped
+ * remember it in case we need one later
+ */
+ m->bbuf = b->buf;
+ }
+ }
+ return code;
+}
+
+IV
+PerlIOMmap_fill(pTHX_ PerlIO *f)
+{
+ PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf);
+ IV code = PerlIO_flush(f);
+ if (code == 0 && !b->buf) {
+ code = PerlIOMmap_map(aTHX_ f);
+ }
+ if (code == 0 && !(PerlIOBase(f)->flags & PERLIO_F_RDBUF)) {
+ code = PerlIOBuf_fill(aTHX_ f);
+ }
+ return code;
+}
+
+IV
+PerlIOMmap_close(pTHX_ PerlIO *f)
+{
+ PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap);
+ PerlIOBuf * const b = &m->base;
+ IV code = PerlIO_flush(f);
+ if (m->bbuf) {
+ b->buf = m->bbuf;
+ m->bbuf = NULL;
+ b->ptr = b->end = b->buf;
+ }
+ if (PerlIOBuf_close(aTHX_ f) != 0)
+ code = -1;
+ return code;
+}
+
+PerlIO *
+PerlIOMmap_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags)
+{
+ return PerlIOBase_dup(aTHX_ f, o, param, flags);
+}
+
+
+PERLIO_FUNCS_DECL(PerlIO_mmap) = {
+ sizeof(PerlIO_funcs),
+ "mmap",
+ sizeof(PerlIOMmap),
+ PERLIO_K_BUFFERED|PERLIO_K_RAW,
+ PerlIOBuf_pushed,
+ PerlIOBuf_popped,
+ PerlIOBuf_open,
+ PerlIOBase_binmode, /* binmode */
+ NULL,
+ PerlIOBase_fileno,
+ PerlIOMmap_dup,
+ PerlIOBuf_read,
+ PerlIOMmap_unread,
+ PerlIOMmap_write,
+ PerlIOBuf_seek,
+ PerlIOBuf_tell,
+ PerlIOBuf_close,
+ PerlIOMmap_flush,
+ PerlIOMmap_fill,
+ PerlIOBase_eof,
+ PerlIOBase_error,
+ PerlIOBase_clearerr,
+ PerlIOBase_setlinebuf,
+ PerlIOMmap_get_base,
+ PerlIOBuf_bufsiz,
+ PerlIOBuf_get_ptr,
+ PerlIOBuf_get_cnt,
+ PerlIOBuf_set_ptrcnt,
+};
+
+#endif /* Layers available */
+
+MODULE = PerlIO::mmap PACKAGE = PerlIO::mmap
+
+PROTOTYPES: DISABLE
+
+BOOT:
+{
+#if defined(PERLIO_LAYERS) && defined(HAS_MMAP)
+ PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_mmap));
+#endif
+}
+
Added: vendor/perl/dist/ext/Pod-Functions/Functions_pm.PL
===================================================================
--- vendor/perl/dist/ext/Pod-Functions/Functions_pm.PL (rev 0)
+++ vendor/perl/dist/ext/Pod-Functions/Functions_pm.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,272 @@
+#!perl -w
+use strict;
+use Pod::Simple::SimpleTree;
+
+my ($tap, $test, %Missing);
+
+ at ARGV = grep { not($_ eq '--tap' and $tap = 1) } @ARGV;
+
+my (%Kinds, %Flavor, @Types);
+my %Omit;
+
+my $p = Pod::Simple::SimpleTree->new;
+$p->accept_targets('Pod::Functions');
+my $tree = $p->parse_file(shift)->root;
+
+foreach my $TL_node (@$tree[2 .. $#$tree]) {
+ next unless $TL_node->[0] eq 'over-text';
+ my $i = 2;
+ while ($i <= $#$TL_node) {
+ if ($TL_node->[$i][0] ne 'item-text') {
+ ++$i;
+ next;
+ }
+
+ my $item_text = $TL_node->[$i][2];
+ die "Confused by $item_text at line $TL_node->[$i][1]{start_line}"
+ if ref $item_text;
+ $item_text =~ s/\s+\z//s;
+
+ if ($TL_node->[$i+1][0] ne 'for'
+ || $TL_node->[$i+1][1]{target} ne 'Pod::Functions') {
+ ++$i;
+ ++$Missing{$item_text} unless $Omit{$item_text};
+ next;
+ }
+ my $data = $TL_node->[$i+1][2];
+ die "Confused by $data at line $TL_node->[$i+1][1]{start_line}"
+ unless ref $data eq 'ARRAY';
+ my $text = $data->[2];
+ die "Confused by $text at line $TL_node->[$i+1][1]{start_line}"
+ if ref $text;
+
+ $i += 2;
+
+ if ($text =~ s/^=//) {
+ # We are in "Perl Functions by Category"
+ die "Expected a paragraph after =item at $TL_node->[$i-2][1]{start_line}"
+ unless $TL_node->[$i][0] eq 'Para';
+ my $para = $TL_node->[$i];
+ # $text is the "type" of the built-in
+ # Anything starting ! is not for inclusion in Pod::Functions
+
+ foreach my $func (@$para[2 .. $#$para]) {
+ next unless ref $func eq 'ARRAY';
+ die "Expected only C<> blocks in paragraph after item at $TL_node->[$i-2][1]{start_line}"
+ unless $func->[0] eq 'C' && !ref $func->[2];
+ # Everything is plain text (ie $func->[2] is everything)
+ # except for C<-I<X>>. So untangle up to one level of nested <>
+ my $funcname = join '', map {
+ ref $_ ? $_->[2] : $_
+ } @$func[2..$#$func];
+ $funcname =~ s!(q.?)//!$1/STRING/!;
+ push @{$Kinds{$text}}, $funcname;
+ }
+ if ($text =~ /^!/) {
+ ++$Omit{$_} foreach @{$Kinds{$text}};
+ } else {
+ push @Types, [$text, $item_text];
+ }
+ } else {
+ $item_text =~ s/ .*//;
+ # For now, just remove any metadata about when it was added:
+ $text =~ s/^\+\S+ //;
+ $Flavor{$item_text} = $text;
+ ++$Omit{$item_text} if $text =~ /^!/;
+ }
+ }
+}
+
+# Take the lists of functions for each type group, and invert them to get the
+# type group (or groups) for each function:
+my %Type;
+while (my ($type, $funcs) = each %Kinds) {
+ push @{$Type{$_}}, $type foreach @$funcs;
+}
+
+# We sort __SUB__ after sub, but before substr, but __PACKAGE__ after package,
+# and __END__ after END.
+sub sort_funcs {
+ map { $_->[0] }
+ sort { uc $a->[1] cmp uc $b->[1] || $b->[1] cmp $a->[1] || $a->[0] cmp $b->[0] }
+ map { my $f = tr/_//dr; [ $_, $f ] }
+ @_;
+}
+
+if ($tap) {
+ foreach my $func (sort_funcs(keys %Flavor)) {
+ ++$test;
+ my $ok = $Type{$func} ? 'ok' : 'not ok';
+ print "$ok $test - $func is mentioned in at least one category group\n";
+ }
+ foreach (sort keys %Missing) {
+ # Ignore anything that looks like an alternative for a function we've
+ # already seen;
+ s!(?: [A-Z].*| \(\)|\( LIST \)| /PATTERN/.*)!!;
+ next if $Flavor{$_};
+ ++$test;
+ if (/^[_a-z]/) {
+ print "not ok $test - function '$_' has no summary for Pod::Functions\n";
+ } else {
+ print "not ok $test - section '$_' has no type for Pod::Functions\n";
+ }
+ }
+ foreach my $kind (sort keys %Kinds) {
+ my $funcs = $Kinds{$kind};
+ ++$test;
+ my $want = join ' ', sort_funcs(@$funcs);
+ if ("@$funcs" eq $want) {
+ print "ok $test - category $kind is correctly sorted\n";
+ } else {
+ print "not ok $test - category $kind is correctly sorted\n";
+ print STDERR "# Have @$funcs\n# Want $want\n";
+ }
+ }
+ print "1..$test\n";
+ exit;
+}
+
+# blead will run this with miniperl, hence we can't use autodie
+my $real = 'Functions.pm';
+my $temp = "Functions.$$";
+
+END {
+ return if !defined $temp || !-e $temp;
+ unlink $temp or warn "Can't unlink '$temp': $!";
+}
+
+foreach ($real, $temp) {
+ next if !-e $_;
+ unlink $_ or die "Can't unlink '$_': $!";
+}
+
+open my $fh, '>', $temp or die "Can't open '$temp' for writing: $!";
+print $fh <<'EOT';
+package Pod::Functions;
+use strict;
+
+=head1 NAME
+
+Pod::Functions - Group Perl's functions a la perlfunc.pod
+
+=head1 SYNOPSIS
+
+ use Pod::Functions;
+
+ my @misc_ops = @{ $Kinds{ 'Misc' } };
+ my $misc_dsc = $Type_Description{ 'Misc' };
+
+or
+
+ perl /path/to/lib/Pod/Functions.pm
+
+This will print a grouped list of Perl's functions, like the
+L<perlfunc/"Perl Functions by Category"> section.
+
+=head1 DESCRIPTION
+
+It exports the following variables:
+
+=over 4
+
+=item %Kinds
+
+This holds a hash-of-lists. Each list contains the functions in the category
+the key denotes.
+
+=item %Type
+
+In this hash each key represents a function and the value is the category.
+The category can be a comma separated list.
+
+=item %Flavor
+
+In this hash each key represents a function and the value is a short
+description of that function.
+
+=item %Type_Description
+
+In this hash each key represents a category of functions and the value is
+a short description of that category.
+
+=item @Type_Order
+
+This list of categories is used to produce the same order as the
+L<perlfunc/"Perl Functions by Category"> section.
+
+=back
+
+=cut
+
+our $VERSION = '1.06';
+
+require Exporter;
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(%Kinds %Type %Flavor %Type_Description @Type_Order);
+
+our(%Kinds, %Type, %Flavor, %Type_Description, @Type_Order);
+
+foreach (
+EOT
+
+foreach (@Types) {
+ my ($type, $desc) = @$_;
+ $type = "'$type'" if $type =~ /[^A-Za-z]/;
+ $desc =~ s!([\\'])!\\$1!g;
+ printf $fh " [%-9s => '%s'],\n", $type, $desc;
+}
+
+print $fh <<'EOT';
+ ) {
+ push @Type_Order, $_->[0];
+ $Type_Description{$_->[0]} = $_->[1];
+};
+
+while (<DATA>) {
+ chomp;
+ s/^#.*//;
+ next unless $_;
+ my($name, @data) = split "\t", $_;
+ $Flavor{$name} = pop @data;
+ $Type{$name} = join ',', @data;
+ for my $t (@data) {
+ push @{$Kinds{$t}}, $name;
+ }
+}
+
+close DATA;
+
+my( $typedesc, $list );
+unless (caller) {
+ foreach my $type ( @Type_Order ) {
+ $list = join(", ", sort @{$Kinds{$type}});
+ $typedesc = $Type_Description{$type} . ":";
+ write;
+ }
+}
+
+format =
+
+^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ $typedesc
+~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ $typedesc
+ ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ $list
+.
+
+1;
+
+__DATA__
+EOT
+
+foreach my $func (sort_funcs(keys %Flavor)) {
+ my $desc = $Flavor{$func};
+ die "No types listed for $func" unless $Type{$func};
+ next if $Omit{$func};
+ print $fh join("\t", $func, @{$Type{$func}}, $desc), "\n";
+}
+
+close $fh or die "Can't close '$temp': $!";
+rename $temp, $real or die "Can't rename '$temp' to '$real': $!";
Added: vendor/perl/dist/ext/Pod-Functions/Makefile.PL
===================================================================
--- vendor/perl/dist/ext/Pod-Functions/Makefile.PL (rev 0)
+++ vendor/perl/dist/ext/Pod-Functions/Makefile.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,34 @@
+#!perl -w
+
+use strict;
+use ExtUtils::MakeMaker;
+use File::Spec::Functions;
+
+WriteMakefile(NAME => 'Pod::Functions',
+ VERSION_FROM => 'Functions_pm.PL',
+ LICENSE => 'perl',
+ PREREQ_PM => {},
+ ABSTRACT_FROM => 'Functions_pm.PL',
+ AUTHOR => 'Perl 5 Porters <perlbug at perl.org>',
+ INSTALLDIRS => 'perl',
+ PL_FILES => {}, # Stop EU::MM defaulting this to run our PL
+ PM => {'Functions.pm' => '$(INST_LIBDIR)/Functions.pm'},
+ clean => {FILES => 'Functions.pm'},
+ );
+
+# There doesn't seem to be any way to get ExtUtils::MakeMaker to add a
+# dependency on another file (or target), and as it's using :: rules, not :
+# rules, then we can't simply add a one line dependency. So we need to provide
+# the entire thing. Fortunately, the same code in MM_Unix.pm is actually used
+# for all platforms, so this code below should also be portable:
+
+sub MY::postamble {
+ my $pf = catfile(updir, updir, 'pod', 'perlfunc.pod');
+ return <<"EOT";
+all :: Functions.pm
+ \$(NOECHO) \$(NOOP)
+
+Functions.pm :: Functions_pm.PL $pf
+ \$(PERLRUN) Functions_pm.PL $pf
+EOT
+}
Added: vendor/perl/dist/ext/Pod-Functions/t/Functions.t
===================================================================
--- vendor/perl/dist/ext/Pod-Functions/t/Functions.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Functions/t/Functions.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,160 @@
+#!perl -w
+
+use strict;
+
+use File::Basename;
+use File::Spec;
+
+use Test::More;
+
+BEGIN {
+ use_ok( 'Pod::Functions' );
+}
+
+# How do you test exported vars?
+my( $pkg_ref, $exp_ref ) = ( \%Pod::Functions::Kinds, \%Kinds );
+is( $pkg_ref, $exp_ref, '%Pod::Functions::Kinds exported' );
+
+( $pkg_ref, $exp_ref ) = ( \%Pod::Functions::Type, \%Type );
+is( $pkg_ref, $exp_ref, '%Pod::Functions::Type exported' );
+
+( $pkg_ref, $exp_ref ) = ( \%Pod::Functions::Flavor, \%Flavor );
+is( $pkg_ref, $exp_ref, '%Pod::Functions::Flavor exported' );
+
+( $pkg_ref, $exp_ref ) = ( \%Pod::Functions::Type_Description,
+ \%Type_Description );
+is( $pkg_ref, $exp_ref, '%Pod::Functions::Type_Description exported' );
+
+( $pkg_ref, $exp_ref ) = ( \@Pod::Functions::Type_Order, \@Type_Order );
+is( $pkg_ref, $exp_ref, '@Pod::Functions::Type_Order exported' );
+
+# Check @Type_Order
+my @catagories = qw(
+ String Regexp Math ARRAY LIST HASH I/O
+ Binary File Flow Namespace Misc Process
+ Modules Objects Socket SysV User Network Time
+);
+
+ok( eq_array( \@Type_Order, \@catagories ),
+ '@Type_Order' );
+
+my @cat_keys = grep exists $Type_Description{ $_ } => @Type_Order;
+
+ok( eq_array( \@cat_keys, \@catagories ),
+ 'keys() %Type_Description' );
+
+SKIP: {
+ my $test_out = do { local $/; <DATA> };
+
+ skip( "Can't fork '$^X': $!", 1)
+ unless open my $fh, qq[$^X "-I../../lib" Functions.pm |];
+ my $fake_out = do { local $/; <$fh> };
+ skip( "Pipe error: $!", 1)
+ unless close $fh;
+
+ is( $fake_out, $test_out, 'run as plain program' );
+}
+
+foreach my $func (sort keys %Flavor) {
+ my $desc = $Flavor{$func};
+ like($desc, qr/^(?:[a-z]|SysV)/,
+ "Description for $desc starts with a lowercase letter or SysV");
+}
+
+done_testing();
+
+=head1 NAME
+
+Functions.t - Test Pod::Functions
+
+=head1 AUTHOR
+
+20011229 Abe Timmerman <abe at ztreet.demon.nl>
+
+=cut
+
+__DATA__
+
+Functions for SCALARs or strings:
+ chomp, chop, chr, crypt, fc, hex, index, lc, lcfirst,
+ length, oct, ord, pack, q/STRING/, qq/STRING/, reverse,
+ rindex, sprintf, substr, tr///, uc, ucfirst, y///
+
+Regular expressions and pattern matching:
+ m//, pos, qr/STRING/, quotemeta, s///, split, study
+
+Numeric functions:
+ abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt,
+ srand
+
+Functions for real @ARRAYs:
+ each, keys, pop, push, shift, splice, unshift, values
+
+Functions for list data:
+ grep, join, map, qw/STRING/, reverse, sort, unpack
+
+Functions for real %HASHes:
+ delete, each, exists, keys, values
+
+Input and output functions:
+ binmode, close, closedir, dbmclose, dbmopen, die, eof,
+ fileno, flock, format, getc, print, printf, read, readdir,
+ readline, rewinddir, say, seek, seekdir, select, syscall,
+ sysread, sysseek, syswrite, tell, telldir, truncate, warn,
+ write
+
+Functions for fixed-length data or records:
+ pack, read, syscall, sysread, sysseek, syswrite, unpack,
+ vec
+
+Functions for filehandles, files, or directories:
+ -X, chdir, chmod, chown, chroot, fcntl, glob, ioctl, link,
+ lstat, mkdir, open, opendir, readlink, rename, rmdir,
+ stat, symlink, sysopen, umask, unlink, utime
+
+Keywords related to the control flow of your Perl program:
+ __FILE__, __LINE__, __PACKAGE__, __SUB__, break, caller,
+ continue, die, do, dump, eval, evalbytes, exit, goto,
+ last, next, redo, return, sub, wantarray
+
+Keywords related to scoping:
+ caller, import, local, my, our, package, state, use
+
+Miscellaneous functions:
+ defined, formline, lock, prototype, reset, scalar, undef
+
+Functions for processes and process groups:
+ alarm, exec, fork, getpgrp, getppid, getpriority, kill,
+ pipe, qx/STRING/, readpipe, setpgrp, setpriority, sleep,
+ system, times, wait, waitpid
+
+Keywords related to Perl modules:
+ do, import, no, package, require, use
+
+Keywords related to classes and object-orientation:
+ bless, dbmclose, dbmopen, package, ref, tie, tied, untie,
+ use
+
+Low-level socket functions:
+ accept, bind, connect, getpeername, getsockname,
+ getsockopt, listen, recv, send, setsockopt, shutdown,
+ socket, socketpair
+
+System V interprocess communication functions:
+ msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop,
+ shmctl, shmget, shmread, shmwrite
+
+Fetching user and group info:
+ endgrent, endhostent, endnetent, endpwent, getgrent,
+ getgrgid, getgrnam, getlogin, getpwent, getpwnam,
+ getpwuid, setgrent, setpwent
+
+Fetching network info:
+ endprotoent, endservent, gethostbyaddr, gethostbyname,
+ gethostent, getnetbyaddr, getnetbyname, getnetent,
+ getprotobyname, getprotobynumber, getprotoent,
+ getservbyname, getservbyport, getservent, sethostent,
+ setnetent, setprotoent, setservent
+
+Time-related functions:
+ gmtime, localtime, time, times
Added: vendor/perl/dist/ext/Pod-Html/bin/pod2html
===================================================================
--- vendor/perl/dist/ext/Pod-Html/bin/pod2html (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/bin/pod2html 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,123 @@
+=pod
+
+=head1 NAME
+
+pod2html - convert .pod files to .html files
+
+=head1 SYNOPSIS
+
+ pod2html --help --htmlroot=<name> --infile=<name> --outfile=<name>
+ --podpath=<name>:...:<name> --podroot=<name>
+ --recurse --norecurse --verbose
+ --index --noindex --title=<name>
+
+=head1 DESCRIPTION
+
+Converts files from pod format (see L<perlpod>) to HTML format.
+
+=head1 ARGUMENTS
+
+pod2html takes the following arguments:
+
+=over 4
+
+=item help
+
+ --help
+
+Displays the usage message.
+
+=item htmlroot
+
+ --htmlroot=name
+
+Sets the base URL for the HTML files. When cross-references are made,
+the HTML root is prepended to the URL.
+
+=item infile
+
+ --infile=name
+
+Specify the pod file to convert. Input is taken from STDIN if no
+infile is specified.
+
+=item outfile
+
+ --outfile=name
+
+Specify the HTML file to create. Output goes to STDOUT if no outfile
+is specified.
+
+=item podroot
+
+ --podroot=name
+
+Specify the base directory for finding library pods.
+
+=item podpath
+
+ --podpath=name:...:name
+
+Specify which subdirectories of the podroot contain pod files whose
+HTML converted forms can be linked-to in cross-references.
+
+=item index
+
+ --index
+
+Generate an index at the top of the HTML file (default behaviour).
+
+=item noindex
+
+ --noindex
+
+Do not generate an index at the top of the HTML file.
+
+
+=item recurse
+
+ --recurse
+
+Recurse into subdirectories specified in podpath (default behaviour).
+
+=item norecurse
+
+ --norecurse
+
+Do not recurse into subdirectories specified in podpath.
+
+=item title
+
+ --title=title
+
+Specify the title of the resulting HTML file.
+
+=item verbose
+
+ --verbose
+
+Display progress messages.
+
+=back
+
+=head1 AUTHOR
+
+Tom Christiansen, E<lt>tchrist at perl.comE<gt>.
+
+=head1 BUGS
+
+See L<Pod::Html> for a list of known bugs in the translator.
+
+=head1 SEE ALSO
+
+L<perlpod>, L<Pod::Html>
+
+=head1 COPYRIGHT
+
+This program is distributed under the Artistic License.
+
+=cut
+
+use Pod::Html;
+
+pod2html @ARGV;
Added: vendor/perl/dist/ext/Pod-Html/lib/Pod/Html.pm
===================================================================
--- vendor/perl/dist/ext/Pod-Html/lib/Pod/Html.pm (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/lib/Pod/Html.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,812 @@
+package Pod::Html;
+use strict;
+require Exporter;
+
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
+$VERSION = 1.18;
+ at ISA = qw(Exporter);
+ at EXPORT = qw(pod2html htmlify);
+ at EXPORT_OK = qw(anchorify);
+
+use Carp;
+use Config;
+use Cwd;
+use File::Basename;
+use File::Spec;
+use File::Spec::Unix;
+use Getopt::Long;
+use Pod::Simple::Search;
+BEGIN {
+ if($Config{d_setlocale}) {
+ require locale; import locale; # make \w work right in non-ASCII lands
+ }
+}
+
+=head1 NAME
+
+Pod::Html - module to convert pod files to HTML
+
+=head1 SYNOPSIS
+
+ use Pod::Html;
+ pod2html([options]);
+
+=head1 DESCRIPTION
+
+Converts files from pod format (see L<perlpod>) to HTML format. It
+can automatically generate indexes and cross-references, and it keeps
+a cache of things it knows how to cross-reference.
+
+=head1 FUNCTIONS
+
+=head2 pod2html
+
+ pod2html("pod2html",
+ "--podpath=lib:ext:pod:vms",
+ "--podroot=/usr/src/perl",
+ "--htmlroot=/perl/nmanual",
+ "--recurse",
+ "--infile=foo.pod",
+ "--outfile=/perl/nmanual/foo.html");
+
+pod2html takes the following arguments:
+
+=over 4
+
+=item backlink
+
+ --backlink
+
+Turns every C<head1> heading into a link back to the top of the page.
+By default, no backlinks are generated.
+
+=item cachedir
+
+ --cachedir=name
+
+Creates the directory cache in the given directory.
+
+=item css
+
+ --css=stylesheet
+
+Specify the URL of a cascading style sheet. Also disables all HTML/CSS
+C<style> attributes that are output by default (to avoid conflicts).
+
+=item flush
+
+ --flush
+
+Flushes the directory cache.
+
+=item header
+
+ --header
+ --noheader
+
+Creates header and footer blocks containing the text of the C<NAME>
+section. By default, no headers are generated.
+
+=item help
+
+ --help
+
+Displays the usage message.
+
+=item htmldir
+
+ --htmldir=name
+
+Sets the directory to which all cross references in the resulting
+html file will be relative. Not passing this causes all links to be
+absolute since this is the value that tells Pod::Html the root of the
+documentation tree.
+
+Do not use this and --htmlroot in the same call to pod2html; they are
+mutually exclusive.
+
+=item htmlroot
+
+ --htmlroot=name
+
+Sets the base URL for the HTML files. When cross-references are made,
+the HTML root is prepended to the URL.
+
+Do not use this if relative links are desired: use --htmldir instead.
+
+Do not pass both this and --htmldir to pod2html; they are mutually
+exclusive.
+
+=item index
+
+ --index
+ --noindex
+
+Generate an index at the top of the HTML file. This is the default
+behaviour.
+
+=item infile
+
+ --infile=name
+
+Specify the pod file to convert. Input is taken from STDIN if no
+infile is specified.
+
+=item outfile
+
+ --outfile=name
+
+Specify the HTML file to create. Output goes to STDOUT if no outfile
+is specified.
+
+=item poderrors
+
+ --poderrors
+ --nopoderrors
+
+Include a "POD ERRORS" section in the outfile if there were any POD
+errors in the infile. This section is included by default.
+
+=item podpath
+
+ --podpath=name:...:name
+
+Specify which subdirectories of the podroot contain pod files whose
+HTML converted forms can be linked to in cross references.
+
+=item podroot
+
+ --podroot=name
+
+Specify the base directory for finding library pods. Default is the
+current working directory.
+
+=item quiet
+
+ --quiet
+ --noquiet
+
+Don't display I<mostly harmless> warning messages. These messages
+will be displayed by default. But this is not the same as C<verbose>
+mode.
+
+=item recurse
+
+ --recurse
+ --norecurse
+
+Recurse into subdirectories specified in podpath (default behaviour).
+
+=item title
+
+ --title=title
+
+Specify the title of the resulting HTML file.
+
+=item verbose
+
+ --verbose
+ --noverbose
+
+Display progress messages. By default, they won't be displayed.
+
+=back
+
+=head2 htmlify
+
+ htmlify($heading);
+
+Converts a pod section specification to a suitable section specification
+for HTML. Note that we keep spaces and special characters except
+C<", ?> (Netscape problem) and the hyphen (writer's problem...).
+
+=head2 anchorify
+
+ anchorify(@heading);
+
+Similar to C<htmlify()>, but turns non-alphanumerics into underscores. Note
+that C<anchorify()> is not exported by default.
+
+=head1 ENVIRONMENT
+
+Uses C<$Config{pod2html}> to setup default options.
+
+=head1 AUTHOR
+
+Marc Green, E<lt>marcgreen at cpan.orgE<gt>.
+
+Original version by Tom Christiansen, E<lt>tchrist at perl.comE<gt>.
+
+=head1 SEE ALSO
+
+L<perlpod>
+
+=head1 COPYRIGHT
+
+This program is distributed under the Artistic License.
+
+=cut
+
+my $Cachedir;
+my $Dircache;
+my($Htmlroot, $Htmldir, $Htmlfile, $Htmlfileurl);
+my($Podfile, @Podpath, $Podroot);
+my $Poderrors;
+my $Css;
+
+my $Recurse;
+my $Quiet;
+my $Verbose;
+my $Doindex;
+
+my $Backlink;
+
+my($Title, $Header);
+
+my %Pages = (); # associative array used to find the location
+ # of pages referenced by L<> links.
+
+my $Curdir = File::Spec->curdir;
+
+init_globals();
+
+sub init_globals {
+ $Cachedir = "."; # The directory to which directory caches
+ # will be written.
+
+ $Dircache = "pod2htmd.tmp";
+
+ $Htmlroot = "/"; # http-server base directory from which all
+ # relative paths in $podpath stem.
+ $Htmldir = ""; # The directory to which the html pages
+ # will (eventually) be written.
+ $Htmlfile = ""; # write to stdout by default
+ $Htmlfileurl = ""; # The url that other files would use to
+ # refer to this file. This is only used
+ # to make relative urls that point to
+ # other files.
+
+ $Poderrors = 1;
+ $Podfile = ""; # read from stdin by default
+ @Podpath = (); # list of directories containing library pods.
+ $Podroot = $Curdir; # filesystem base directory from which all
+ # relative paths in $podpath stem.
+ $Css = ''; # Cascading style sheet
+ $Recurse = 1; # recurse on subdirectories in $podpath.
+ $Quiet = 0; # not quiet by default
+ $Verbose = 0; # not verbose by default
+ $Doindex = 1; # non-zero if we should generate an index
+ $Backlink = 0; # no backlinks added by default
+ $Header = 0; # produce block header/footer
+ $Title = ''; # title to give the pod(s)
+}
+
+sub pod2html {
+ local(@ARGV) = @_;
+ local $_;
+
+ init_globals();
+ parse_command_line();
+
+ # prevent '//' in urls
+ $Htmlroot = "" if $Htmlroot eq "/";
+ $Htmldir =~ s#/\z##;
+
+ if ( $Htmlroot eq ''
+ && defined( $Htmldir )
+ && $Htmldir ne ''
+ && substr( $Htmlfile, 0, length( $Htmldir ) ) eq $Htmldir
+ ) {
+ # Set the 'base' url for this file, so that we can use it
+ # as the location from which to calculate relative links
+ # to other files. If this is '', then absolute links will
+ # be used throughout.
+ #$Htmlfileurl = "$Htmldir/" . substr( $Htmlfile, length( $Htmldir ) + 1);
+ # Is the above not just "$Htmlfileurl = $Htmlfile"?
+ $Htmlfileurl = Pod::Html::_unixify($Htmlfile);
+
+ }
+
+ # load or generate/cache %Pages
+ unless (get_cache($Dircache, \@Podpath, $Podroot, $Recurse)) {
+ # generate %Pages
+ my $pwd = getcwd();
+ chdir($Podroot) ||
+ die "$0: error changing to directory $Podroot: $!\n";
+
+ # find all pod modules/pages in podpath, store in %Pages
+ # - callback used to remove Podroot and extension from each file
+ # - laborious to allow '.' in dirnames (e.g., /usr/share/perl/5.14.1)
+ Pod::Simple::Search->new->inc(0)->verbose($Verbose)->laborious(1)
+ ->callback(\&_save_page)->recurse($Recurse)->survey(@Podpath);
+
+ chdir($pwd) || die "$0: error changing to directory $pwd: $!\n";
+
+ # cache the directory list for later use
+ warn "caching directories for later use\n" if $Verbose;
+ open my $cache, '>', $Dircache
+ or die "$0: error open $Dircache for writing: $!\n";
+
+ print $cache join(":", @Podpath) . "\n$Podroot\n";
+ my $_updirs_only = ($Podroot =~ /\.\./) && !($Podroot =~ /[^\.\\\/]/);
+ foreach my $key (keys %Pages) {
+ if($_updirs_only) {
+ my $_dirlevel = $Podroot;
+ while($_dirlevel =~ /\.\./) {
+ $_dirlevel =~ s/\.\.//;
+ # Assume $Pages{$key} has '/' separators (html dir separators).
+ $Pages{$key} =~ s/^[\w\s\-\.]+\///;
+ }
+ }
+ print $cache "$key $Pages{$key}\n";
+ }
+
+ close $cache or die "error closing $Dircache: $!";
+ }
+
+ # set options for the parser
+ my $parser = Pod::Simple::XHTML::LocalPodLinks->new();
+ $parser->codes_in_verbatim(0);
+ $parser->anchor_items(1); # the old Pod::Html always did
+ $parser->backlink($Backlink); # linkify =head1 directives
+ $parser->htmldir($Htmldir);
+ $parser->htmlfileurl($Htmlfileurl);
+ $parser->htmlroot($Htmlroot);
+ $parser->index($Doindex);
+ $parser->no_errata_section(!$Poderrors); # note the inverse
+ $parser->output_string(\my $output); # written to file later
+ $parser->pages(\%Pages);
+ $parser->quiet($Quiet);
+ $parser->verbose($Verbose);
+
+ # XXX: implement default title generator in pod::simple::xhtml
+ # copy the way the old Pod::Html did it
+ $Title = html_escape($Title);
+
+ # We need to add this ourselves because we use our own header, not
+ # ::XHTML's header. We need to set $parser->backlink to linkify
+ # the =head1 directives
+ my $bodyid = $Backlink ? ' id="_podtop_"' : '';
+
+ my $csslink = '';
+ my $bodystyle = ' style="background-color: white"';
+ my $tdstyle = ' style="background-color: #cccccc"';
+
+ if ($Css) {
+ $csslink = qq(\n<link rel="stylesheet" href="$Css" type="text/css" />);
+ $csslink =~ s,\\,/,g;
+ $csslink =~ s,(/.):,$1|,;
+ $bodystyle = '';
+ $tdstyle= '';
+ }
+
+ # header/footer block
+ my $block = $Header ? <<END_OF_BLOCK : '';
+<table border="0" width="100%" cellspacing="0" cellpadding="3">
+<tr><td class="_podblock_"$tdstyle valign="middle">
+<big><strong><span class="_podblock_"> $Title</span></strong></big>
+</td></tr>
+</table>
+END_OF_BLOCK
+
+ # create own header/footer because of --header
+ $parser->html_header(<<"HTMLHEAD");
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>$Title</title>$csslink
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:$Config{perladmin}" />
+</head>
+
+<body$bodyid$bodystyle>
+$block
+HTMLHEAD
+
+ $parser->html_footer(<<"HTMLFOOT");
+$block
+</body>
+
+</html>
+HTMLFOOT
+
+ my $input;
+ unless (@ARGV && $ARGV[0]) {
+ if ($Podfile and $Podfile ne '-') {
+ $input = $Podfile;
+ } else {
+ $input = '-'; # XXX: make a test case for this
+ }
+ } else {
+ $Podfile = $ARGV[0];
+ $input = *ARGV;
+ }
+
+ warn "Converting input file $Podfile\n" if $Verbose;
+ $parser->parse_file($input);
+
+ # Write output to file
+ $Htmlfile = "-" unless $Htmlfile; # stdout
+ my $fhout;
+ if($Htmlfile and $Htmlfile ne '-') {
+ open $fhout, ">", $Htmlfile
+ or die "$0: cannot open $Htmlfile file for output: $!\n";
+ } else {
+ open $fhout, ">-";
+ }
+ binmode $fhout, ":utf8";
+ print $fhout $output;
+ close $fhout or die "Failed to close $Htmlfile: $!";
+ chmod 0644, $Htmlfile unless $Htmlfile eq '-';
+}
+
+##############################################################################
+
+sub usage {
+ my $podfile = shift;
+ warn "$0: $podfile: @_\n" if @_;
+ die <<END_OF_USAGE;
+Usage: $0 --help --htmlroot=<name> --infile=<name> --outfile=<name>
+ --podpath=<name>:...:<name> --podroot=<name> --cachedir=<name>
+ --recurse --verbose --index --norecurse --noindex
+
+ --[no]backlink - turn =head1 directives into links pointing to the top of
+ the page (off by default).
+ --cachedir - directory for the directory cache files.
+ --css - stylesheet URL
+ --flush - flushes the directory cache.
+ --[no]header - produce block header/footer (default is no headers).
+ --help - prints this message.
+ --htmldir - directory for resulting HTML files.
+ --htmlroot - http-server base directory from which all relative paths
+ in podpath stem (default is /).
+ --[no]index - generate an index at the top of the resulting html
+ (default behaviour).
+ --infile - filename for the pod to convert (input taken from stdin
+ by default).
+ --outfile - filename for the resulting html file (output sent to
+ stdout by default).
+ --[no]poderrors - include a POD ERRORS section in the output if there were
+ any POD errors in the input (default behavior).
+ --podpath - colon-separated list of directories containing library
+ pods (empty by default).
+ --podroot - filesystem base directory from which all relative paths
+ in podpath stem (default is .).
+ --[no]quiet - suppress some benign warning messages (default is off).
+ --[no]recurse - recurse on those subdirectories listed in podpath
+ (default behaviour).
+ --title - title that will appear in resulting html file.
+ --[no]verbose - self-explanatory (off by default).
+
+END_OF_USAGE
+
+}
+
+sub parse_command_line {
+ my ($opt_backlink,$opt_cachedir,$opt_css,$opt_flush,$opt_header,
+ $opt_help,$opt_htmldir,$opt_htmlroot,$opt_index,$opt_infile,
+ $opt_outfile,$opt_poderrors,$opt_podpath,$opt_podroot,
+ $opt_quiet,$opt_recurse,$opt_title,$opt_verbose,$opt_libpods);
+
+ unshift @ARGV, split ' ', $Config{pod2html} if $Config{pod2html};
+ my $result = GetOptions(
+ 'backlink!' => \$opt_backlink,
+ 'cachedir=s' => \$opt_cachedir,
+ 'css=s' => \$opt_css,
+ 'flush' => \$opt_flush,
+ 'help' => \$opt_help,
+ 'header!' => \$opt_header,
+ 'htmldir=s' => \$opt_htmldir,
+ 'htmlroot=s' => \$opt_htmlroot,
+ 'index!' => \$opt_index,
+ 'infile=s' => \$opt_infile,
+ 'libpods=s' => \$opt_libpods, # deprecated
+ 'outfile=s' => \$opt_outfile,
+ 'poderrors!' => \$opt_poderrors,
+ 'podpath=s' => \$opt_podpath,
+ 'podroot=s' => \$opt_podroot,
+ 'quiet!' => \$opt_quiet,
+ 'recurse!' => \$opt_recurse,
+ 'title=s' => \$opt_title,
+ 'verbose!' => \$opt_verbose,
+ );
+ usage("-", "invalid parameters") if not $result;
+
+ usage("-") if defined $opt_help; # see if the user asked for help
+ $opt_help = ""; # just to make -w shut-up.
+
+ @Podpath = split(":", $opt_podpath) if defined $opt_podpath;
+ warn "--libpods is no longer supported" if defined $opt_libpods;
+
+ $Backlink = $opt_backlink if defined $opt_backlink;
+ $Cachedir = _unixify($opt_cachedir) if defined $opt_cachedir;
+ $Css = $opt_css if defined $opt_css;
+ $Header = $opt_header if defined $opt_header;
+ $Htmldir = _unixify($opt_htmldir) if defined $opt_htmldir;
+ $Htmlroot = _unixify($opt_htmlroot) if defined $opt_htmlroot;
+ $Doindex = $opt_index if defined $opt_index;
+ $Podfile = _unixify($opt_infile) if defined $opt_infile;
+ $Htmlfile = _unixify($opt_outfile) if defined $opt_outfile;
+ $Poderrors = $opt_poderrors if defined $opt_poderrors;
+ $Podroot = _unixify($opt_podroot) if defined $opt_podroot;
+ $Quiet = $opt_quiet if defined $opt_quiet;
+ $Recurse = $opt_recurse if defined $opt_recurse;
+ $Title = $opt_title if defined $opt_title;
+ $Verbose = $opt_verbose if defined $opt_verbose;
+
+ warn "Flushing directory caches\n"
+ if $opt_verbose && defined $opt_flush;
+ $Dircache = "$Cachedir/pod2htmd.tmp";
+ if (defined $opt_flush) {
+ 1 while unlink($Dircache);
+ }
+}
+
+my $Saved_Cache_Key;
+
+sub get_cache {
+ my($dircache, $podpath, $podroot, $recurse) = @_;
+ my @cache_key_args = @_;
+
+ # A first-level cache:
+ # Don't bother reading the cache files if they still apply
+ # and haven't changed since we last read them.
+
+ my $this_cache_key = cache_key(@cache_key_args);
+ return 1 if $Saved_Cache_Key and $this_cache_key eq $Saved_Cache_Key;
+ $Saved_Cache_Key = $this_cache_key;
+
+ # load the cache of %Pages if possible. $tests will be
+ # non-zero if successful.
+ my $tests = 0;
+ if (-f $dircache) {
+ warn "scanning for directory cache\n" if $Verbose;
+ $tests = load_cache($dircache, $podpath, $podroot);
+ }
+
+ return $tests;
+}
+
+sub cache_key {
+ my($dircache, $podpath, $podroot, $recurse) = @_;
+ return join('!',$dircache,$recurse,@$podpath,$podroot,stat($dircache));
+}
+
+#
+# load_cache - tries to find if the cache stored in $dircache is a valid
+# cache of %Pages. if so, it loads them and returns a non-zero value.
+#
+sub load_cache {
+ my($dircache, $podpath, $podroot) = @_;
+ my $tests = 0;
+ local $_;
+
+ warn "scanning for directory cache\n" if $Verbose;
+ open(my $cachefh, '<', $dircache) ||
+ die "$0: error opening $dircache for reading: $!\n";
+ $/ = "\n";
+
+ # is it the same podpath?
+ $_ = <$cachefh>;
+ chomp($_);
+ $tests++ if (join(":", @$podpath) eq $_);
+
+ # is it the same podroot?
+ $_ = <$cachefh>;
+ chomp($_);
+ $tests++ if ($podroot eq $_);
+
+ # load the cache if its good
+ if ($tests != 2) {
+ close($cachefh);
+ return 0;
+ }
+
+ warn "loading directory cache\n" if $Verbose;
+ while (<$cachefh>) {
+ /(.*?) (.*)$/;
+ $Pages{$1} = $2;
+ }
+
+ close($cachefh);
+ return 1;
+}
+
+
+#
+# html_escape: make text safe for HTML
+#
+sub html_escape {
+ my $rest = $_[0];
+ $rest =~ s/&/&/g;
+ $rest =~ s/</</g;
+ $rest =~ s/>/>/g;
+ $rest =~ s/"/"/g;
+ # ' is only in XHTML, not HTML4. Be conservative
+ #$rest =~ s/'/'/g;
+ return $rest;
+}
+
+#
+# htmlify - converts a pod section specification to a suitable section
+# specification for HTML. Note that we keep spaces and special characters
+# except ", ? (Netscape problem) and the hyphen (writer's problem...).
+#
+sub htmlify {
+ my( $heading) = @_;
+ $heading =~ s/(\s+)/ /g;
+ $heading =~ s/\s+\Z//;
+ $heading =~ s/\A\s+//;
+ # The hyphen is a disgrace to the English language.
+ # $heading =~ s/[-"?]//g;
+ $heading =~ s/["?]//g;
+ $heading = lc( $heading );
+ return $heading;
+}
+
+#
+# similar to htmlify, but turns non-alphanumerics into underscores
+#
+sub anchorify {
+ my ($anchor) = @_;
+ $anchor = htmlify($anchor);
+ $anchor =~ s/\W/_/g;
+ return $anchor;
+}
+
+#
+# store POD files in %Pages
+#
+sub _save_page {
+ my ($modspec, $modname) = @_;
+
+ # Remove Podroot from path
+ $modspec = $Podroot eq File::Spec->curdir
+ ? File::Spec->abs2rel($modspec)
+ : File::Spec->abs2rel($modspec,
+ File::Spec->canonpath($Podroot));
+
+ # Convert path to unix style path
+ $modspec = Pod::Html::_unixify($modspec);
+
+ my ($file, $dir) = fileparse($modspec, qr/\.[^.]*/); # strip .ext
+ $Pages{$modname} = $dir.$file;
+}
+
+sub _unixify {
+ my $full_path = shift;
+ return '' unless $full_path;
+ return $full_path if $full_path eq '/';
+
+ my ($vol, $dirs, $file) = File::Spec->splitpath($full_path);
+ my @dirs = $dirs eq File::Spec->curdir()
+ ? (File::Spec::Unix->curdir())
+ : File::Spec->splitdir($dirs);
+ if (defined($vol) && $vol) {
+ $vol =~ s/:$// if $^O eq 'VMS';
+ $vol = uc $vol if $^O eq 'MSWin32';
+
+ if( $dirs[0] ) {
+ unshift @dirs, $vol;
+ }
+ else {
+ $dirs[0] = $vol;
+ }
+ }
+ unshift @dirs, '' if File::Spec->file_name_is_absolute($full_path);
+ return $file unless scalar(@dirs);
+ $full_path = File::Spec::Unix->catfile(File::Spec::Unix->catdir(@dirs),
+ $file);
+ $full_path =~ s|^\/|| if $^O eq 'MSWin32'; # C:/foo works, /C:/foo doesn't
+ $full_path =~ s/\^\././g if $^O eq 'VMS'; # unescape dots
+ return $full_path;
+}
+
+package Pod::Simple::XHTML::LocalPodLinks;
+use strict;
+use warnings;
+use base 'Pod::Simple::XHTML';
+
+use File::Spec;
+use File::Spec::Unix;
+
+__PACKAGE__->_accessorize(
+ 'htmldir',
+ 'htmlfileurl',
+ 'htmlroot',
+ 'pages', # Page name => relative/path/to/page from root POD dir
+ 'quiet',
+ 'verbose',
+);
+
+sub resolve_pod_page_link {
+ my ($self, $to, $section) = @_;
+
+ return undef unless defined $to || defined $section;
+ if (defined $section) {
+ $section = '#' . $self->idify($section, 1);
+ return $section unless defined $to;
+ } else {
+ $section = '';
+ }
+
+ my $path; # path to $to according to %Pages
+ unless (exists $self->pages->{$to}) {
+ # Try to find a POD that ends with $to and use that.
+ # e.g., given L<XHTML>, if there is no $Podpath/XHTML in %Pages,
+ # look for $Podpath/*/XHTML in %Pages, with * being any path,
+ # as a substitute (e.g., $Podpath/Pod/Simple/XHTML)
+ my @matches;
+ foreach my $modname (keys %{$self->pages}) {
+ push @matches, $modname if $modname =~ /::\Q$to\E\z/;
+ }
+
+ if ($#matches == -1) {
+ warn "Cannot find \"$to\" in podpath: " .
+ "cannot find suitable replacement path, cannot resolve link\n"
+ unless $self->quiet;
+ return '';
+ } elsif ($#matches == 0) {
+ warn "Cannot find \"$to\" in podpath: " .
+ "using $matches[0] as replacement path to $to\n"
+ unless $self->quiet;
+ $path = $self->pages->{$matches[0]};
+ } else {
+ warn "Cannot find \"$to\" in podpath: " .
+ "more than one possible replacement path to $to, " .
+ "using $matches[-1]\n" unless $self->quiet;
+ # Use [-1] so newer (higher numbered) perl PODs are used
+ $path = $self->pages->{$matches[-1]};
+ }
+ } else {
+ $path = $self->pages->{$to};
+ }
+
+ my $url = File::Spec::Unix->catfile(Pod::Html::_unixify($self->htmlroot),
+ $path);
+
+ if ($self->htmlfileurl ne '') {
+ # then $self->htmlroot eq '' (by definition of htmlfileurl) so
+ # $self->htmldir needs to be prepended to link to get the absolute path
+ # that will be relativized
+ $url = relativize_url(
+ File::Spec::Unix->catdir(Pod::Html::_unixify($self->htmldir), $url),
+ $self->htmlfileurl # already unixified
+ );
+ }
+
+ return $url . ".html$section";
+}
+
+#
+# relativize_url - convert an absolute URL to one relative to a base URL.
+# Assumes both end in a filename.
+#
+sub relativize_url {
+ my ($dest, $source) = @_;
+
+ # Remove each file from its path
+ my ($dest_volume, $dest_directory, $dest_file) =
+ File::Spec::Unix->splitpath( $dest );
+ $dest = File::Spec::Unix->catpath( $dest_volume, $dest_directory, '' );
+
+ my ($source_volume, $source_directory, $source_file) =
+ File::Spec::Unix->splitpath( $source );
+ $source = File::Spec::Unix->catpath( $source_volume, $source_directory, '' );
+
+ my $rel_path = '';
+ if ($dest ne '') {
+ $rel_path = File::Spec::Unix->abs2rel( $dest, $source );
+ }
+
+ if ($rel_path ne '' && substr( $rel_path, -1 ) ne '/') {
+ $rel_path .= "/$dest_file";
+ } else {
+ $rel_path .= "$dest_file";
+ }
+
+ return $rel_path;
+}
+
+1;
Added: vendor/perl/dist/ext/Pod-Html/t/cache.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/cache.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/cache.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+=head1 NAME
+
+the contents of this file doesn't matter
Added: vendor/perl/dist/ext/Pod-Html/t/cache.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/cache.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/cache.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,72 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ die "Run me from outside the t/ directory, please" unless -d 't';
+}
+
+# test the directory cache
+# XXX test --flush and %Pages being loaded/used for cross references
+
+use strict;
+use Cwd;
+use Pod::Html;
+use Data::Dumper;
+use Test::More tests => 10;
+
+my $cwd = Pod::Html::_unixify(Cwd::cwd());
+my $infile = "t/cache.pod";
+my $outfile = "cacheout.html";
+my $cachefile = "pod2htmd.tmp";
+my $tcachefile = "t/pod2htmd.tmp";
+
+unlink $cachefile, $tcachefile;
+is(-f $cachefile, undef, "No cache file to start");
+is(-f $tcachefile, undef, "No cache file to start");
+
+# test podpath and podroot
+Pod::Html::pod2html(
+ "--infile=$infile",
+ "--outfile=$outfile",
+ "--podpath=scooby:shaggy:fred:velma:daphne",
+ "--podroot=$cwd",
+ );
+is(-f $cachefile, 1, "Cache created");
+open(my $cache, '<', $cachefile) or die "Cannot open cache file: $!";
+chomp(my $podpath = <$cache>);
+chomp(my $podroot = <$cache>);
+close $cache;
+is($podpath, "scooby:shaggy:fred:velma:daphne", "podpath");
+is($podroot, "$cwd", "podroot");
+
+# test cache contents
+Pod::Html::pod2html(
+ "--infile=$infile",
+ "--outfile=$outfile",
+ "--cachedir=t",
+ "--podpath=t",
+ "--htmldir=$cwd",
+ );
+is(-f $tcachefile, 1, "Cache created");
+open($cache, '<', $tcachefile) or die "Cannot open cache file: $!";
+chomp($podpath = <$cache>);
+chomp($podroot = <$cache>);
+is($podpath, "t", "podpath");
+my %pages;
+while (<$cache>) {
+ /(.*?) (.*)$/;
+ $pages{$1} = $2;
+}
+chdir("t");
+my %expected_pages =
+ # chop off the .pod and set the path
+ map { my $f = substr($_, 0, -4); $f => "t/$f" }
+ <*.pod>;
+chdir($cwd);
+is_deeply(\%pages, \%expected_pages, "cache contents");
+close $cache;
+
+1 while unlink $outfile;
+1 while unlink $cachefile;
+1 while unlink $tcachefile;
+is(-f $cachefile, undef, "No cache file to end");
+is(-f $tcachefile, undef, "No cache file to end");
Added: vendor/perl/dist/ext/Pod-Html/t/crossref.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/crossref.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/crossref.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,41 @@
+=head1 NAME
+
+htmlcrossref - Test HTML cross reference links
+
+=head1 LINKS
+
+L</"section1">
+
+L<htmllink/section 2>
+
+L</"item1">
+
+L</"non existant section">
+
+L<var-copy>
+
+L<var-copy/$">
+
+C<var-copy>
+
+C<var-copy/$">
+
+L<podspec-copy/First:>
+
+C<podspec-copy/First:>
+
+L<notperldoc>
+
+=head1 TARGETS
+
+=head2 section1
+
+This is section one.
+
+=over 4
+
+=item item1 X<item> X<one>
+
+This is item one.
+
+=back
Added: vendor/perl/dist/ext/Pod-Html/t/crossref.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/crossref.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/crossref.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,106 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+END {
+ rem_test_dir();
+}
+
+use strict;
+use Cwd;
+use File::Spec::Functions;
+use Test::More tests => 1;
+
+SKIP: {
+ my $output = make_test_dir();
+ skip "$output", 1 if $output;
+
+ my ($v, $d) = splitpath(cwd(), 1);
+ my @dirs = splitdir($d);
+ shift @dirs if $dirs[0] eq '';
+ my $relcwd = join '/', @dirs;
+
+ convert_n_test("crossref", "cross references",
+ "--podpath=". File::Spec::Unix->catdir($relcwd, 't') . ":"
+ . File::Spec::Unix->catdir($relcwd, 'testdir/test.lib'),
+ "--podroot=". catpath($v, '/', ''),
+ "--quiet",
+ );
+}
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#LINKS">LINKS</a></li>
+ <li><a href="#TARGETS">TARGETS</a>
+ <ul>
+ <li><a href="#section1">section1</a></li>
+ </ul>
+ </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>htmlcrossref - Test HTML cross reference links</p>
+
+<h1 id="LINKS">LINKS</h1>
+
+<p><a href="#section1">"section1"</a></p>
+
+<p><a href="/[RELCURRENTWORKINGDIRECTORY]/t/htmllink.html#section-2">"section 2" in htmllink</a></p>
+
+<p><a href="#item1">"item1"</a></p>
+
+<p><a href="#non-existant-section">"non existant section"</a></p>
+
+<p><a href="/[RELCURRENTWORKINGDIRECTORY]/testdir/test.lib/var-copy.html">var-copy</a></p>
+
+<p><a href="/[RELCURRENTWORKINGDIRECTORY]/testdir/test.lib/var-copy.html#pod">"$"" in var-copy</a></p>
+
+<p><code>var-copy</code></p>
+
+<p><code>var-copy/$"</code></p>
+
+<p><a href="/[RELCURRENTWORKINGDIRECTORY]/testdir/test.lib/podspec-copy.html#First">"First:" in podspec-copy</a></p>
+
+<p><code>podspec-copy/First:</code></p>
+
+<p><a>notperldoc</a></p>
+
+<h1 id="TARGETS">TARGETS</h1>
+
+<h2 id="section1">section1</h2>
+
+<p>This is section one.</p>
+
+<dl>
+
+<dt id="item1">item1 </dt>
+<dd>
+
+<p>This is item one.</p>
+
+</dd>
+</dl>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/crossref2.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/crossref2.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/crossref2.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+END {
+ rem_test_dir();
+}
+
+use strict;
+use Cwd;
+use Test::More tests => 1;
+
+SKIP: {
+ my $output = make_test_dir();
+ skip "$output", 1 if $output;
+
+ my $cwd = Pod::Html::_unixify(cwd());
+
+ convert_n_test("crossref", "cross references",
+ "--podpath=t:testdir/test.lib",
+ "--podroot=$cwd",
+ "--htmldir=$cwd",
+ "--quiet",
+ );
+}
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#LINKS">LINKS</a></li>
+ <li><a href="#TARGETS">TARGETS</a>
+ <ul>
+ <li><a href="#section1">section1</a></li>
+ </ul>
+ </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>htmlcrossref - Test HTML cross reference links</p>
+
+<h1 id="LINKS">LINKS</h1>
+
+<p><a href="#section1">"section1"</a></p>
+
+<p><a href="./htmllink.html#section-2">"section 2" in htmllink</a></p>
+
+<p><a href="#item1">"item1"</a></p>
+
+<p><a href="#non-existant-section">"non existant section"</a></p>
+
+<p><a href="../testdir/test.lib/var-copy.html">var-copy</a></p>
+
+<p><a href="../testdir/test.lib/var-copy.html#pod">"$"" in var-copy</a></p>
+
+<p><code>var-copy</code></p>
+
+<p><code>var-copy/$"</code></p>
+
+<p><a href="../testdir/test.lib/podspec-copy.html#First">"First:" in podspec-copy</a></p>
+
+<p><code>podspec-copy/First:</code></p>
+
+<p><a>notperldoc</a></p>
+
+<h1 id="TARGETS">TARGETS</h1>
+
+<h2 id="section1">section1</h2>
+
+<p>This is section one.</p>
+
+<dl>
+
+<dt id="item1">item1 </dt>
+<dd>
+
+<p>This is item one.</p>
+
+</dd>
+</dl>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/crossref3.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/crossref3.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/crossref3.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+END {
+ rem_test_dir();
+}
+
+use strict;
+use Cwd;
+use Test::More tests => 1;
+
+SKIP: {
+ my $output = make_test_dir();
+ skip "$output", 1 if $output;
+
+ my $cwd = cwd();
+
+ convert_n_test("crossref", "cross references",
+ "--podpath=t:testdir/test.lib",
+ "--podroot=$cwd",
+ "--htmlroot=$cwd",
+ "--quiet",
+ );
+}
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#LINKS">LINKS</a></li>
+ <li><a href="#TARGETS">TARGETS</a>
+ <ul>
+ <li><a href="#section1">section1</a></li>
+ </ul>
+ </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>htmlcrossref - Test HTML cross reference links</p>
+
+<h1 id="LINKS">LINKS</h1>
+
+<p><a href="#section1">"section1"</a></p>
+
+<p><a href="[ABSCURRENTWORKINGDIRECTORY]/t/htmllink.html#section-2">"section 2" in htmllink</a></p>
+
+<p><a href="#item1">"item1"</a></p>
+
+<p><a href="#non-existant-section">"non existant section"</a></p>
+
+<p><a href="[ABSCURRENTWORKINGDIRECTORY]/testdir/test.lib/var-copy.html">var-copy</a></p>
+
+<p><a href="[ABSCURRENTWORKINGDIRECTORY]/testdir/test.lib/var-copy.html#pod">"$"" in var-copy</a></p>
+
+<p><code>var-copy</code></p>
+
+<p><code>var-copy/$"</code></p>
+
+<p><a href="[ABSCURRENTWORKINGDIRECTORY]/testdir/test.lib/podspec-copy.html#First">"First:" in podspec-copy</a></p>
+
+<p><code>podspec-copy/First:</code></p>
+
+<p><a>notperldoc</a></p>
+
+<h1 id="TARGETS">TARGETS</h1>
+
+<h2 id="section1">section1</h2>
+
+<p>This is section one.</p>
+
+<dl>
+
+<dt id="item1">item1 </dt>
+<dd>
+
+<p>This is item one.</p>
+
+</dd>
+</dl>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/eol.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/eol.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/eol.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,71 @@
+#!./perl -w
+
+use Test::More tests => 3;
+
+my $podfile = "$$.pod";
+my $infile = "$$.in";
+my @outfile = map { "$$.o$_" } 0..2;
+
+open my $pod, '>', $podfile or die "$podfile: $!";
+print $pod <<__EOF__;
+=pod
+
+=head1 NAME
+
+crlf
+
+=head1 DESCRIPTION
+
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+
+ crlf crlf crlf crlf
+ crlf crlf crlf crlf
+ crlf crlf crlf crlf
+
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
+
+=cut
+__EOF__
+close $pod or die $!;
+
+use Pod::Html;
+
+my $i = 0;
+foreach my $eol ("\r", "\n", "\r\n") {
+ open $pod, '<', $podfile or die "$podfile: $!";
+ open my $in, '>', $infile or die "$infile: $!";
+ while (<$pod>) {
+ s/[\r\n]+/$eol/g;
+ print $in $_;
+ }
+ close $pod or die $!;
+ close $in or die $!;
+
+ pod2html("--title=eol", "--infile=$infile", "--outfile=$outfile[$i]");
+ ++$i;
+}
+
+# --- now test ---
+
+my @cksum;
+
+foreach (0..2) {
+ local $/;
+ open my $in, '<', $outfile[$_] or die "$outfile[$_]: $!";
+ $cksum[$_] = unpack "%32C*", <$in>;
+ close $in or die $!;
+}
+
+is($cksum[0], $cksum[1], "CR vs LF");
+is($cksum[0], $cksum[2], "CR vs CRLF");
+is($cksum[1], $cksum[2], "LF vs CRLF");
+
+END {
+ 1 while unlink $podfile, $infile, @outfile, 'pod2htmd.tmp';
+}
Added: vendor/perl/dist/ext/Pod-Html/t/feature.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/feature.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/feature.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+=head1 Head 1
+
+A paragraph
+
+=for html some html
+
+=begin image
+
+|--|
+| |
+|--|
+
+=end image
+
+Another paragraph
+
+=head1 Another Head 1
+
+some text and a link L<crossref>
+
+=cut
Added: vendor/perl/dist/ext/Pod-Html/t/feature.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/feature.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/feature.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,70 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+use strict;
+use Cwd;
+use File::Spec::Functions;
+use Test::More tests => 1;
+
+my $cwd = cwd();
+
+convert_n_test("feature", "misc pod-html features",
+ "--backlink",
+ "--css=style.css",
+ "--header", # no styling b/c of --ccs
+ "--htmldir=". catdir($cwd, 't'),
+ "--noindex",
+ "--podpath=t",
+ "--podroot=$cwd",
+ "--title=a title",
+ "--quiet",
+ );
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>a title</title>
+<link rel="stylesheet" href="style.css" type="text/css" />
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body id="_podtop_">
+<table border="0" width="100%" cellspacing="0" cellpadding="3">
+<tr><td class="_podblock_" valign="middle">
+<big><strong><span class="_podblock_"> a title</span></strong></big>
+</td></tr>
+</table>
+
+
+
+<a href="#_podtop_"><h1 id="Head-1">Head 1</h1></a>
+
+<p>A paragraph</p>
+
+
+
+some html
+
+<p>Another paragraph</p>
+
+<a href="#_podtop_"><h1 id="Another-Head-1">Another Head 1</h1></a>
+
+<p>some text and a link <a href="t/crossref.html">crossref</a></p>
+
+<table border="0" width="100%" cellspacing="0" cellpadding="3">
+<tr><td class="_podblock_" valign="middle">
+<big><strong><span class="_podblock_"> a title</span></strong></big>
+</td></tr>
+</table>
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/feature2.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/feature2.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/feature2.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+=head1 Head 1
+
+A paragraph
+
+=for html some html
+
+=begin image
+
+|--|
+| |
+|--|
+
+=end image
+
+Another paragraph
+
+=head1 Another Head 1
+
+some text and a link L<crossref>
+
+=cut
Added: vendor/perl/dist/ext/Pod-Html/t/feature2.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/feature2.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/feature2.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,82 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+use strict;
+use Cwd;
+use Test::More tests => 2;
+
+my $cwd = cwd();
+
+my $warn;
+$SIG{__WARN__} = sub { $warn .= $_[0] };
+
+convert_n_test("feature2", "misc pod-html features 2",
+ "--backlink",
+ "--header",
+ "--podpath=.",
+ "--podroot=$cwd",
+ "--norecurse",
+ "--verbose",
+ "--quiet",
+ );
+
+like($warn,
+ qr(
+ \Acaching\ directories\ for\ later\ use\n
+ Converting\ input\ file\ \S+[/\\\]]feature2\.pod\n\z
+ )x,
+ "misc pod-html --verbose warnings");
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body id="_podtop_" style="background-color: white">
+<table border="0" width="100%" cellspacing="0" cellpadding="3">
+<tr><td class="_podblock_" style="background-color: #cccccc" valign="middle">
+<big><strong><span class="_podblock_"> </span></strong></big>
+</td></tr>
+</table>
+
+
+
+<ul id="index">
+ <li><a href="#Head-1">Head 1</a></li>
+ <li><a href="#Another-Head-1">Another Head 1</a></li>
+</ul>
+
+<a href="#_podtop_"><h1 id="Head-1">Head 1</h1></a>
+
+<p>A paragraph</p>
+
+
+
+some html
+
+<p>Another paragraph</p>
+
+<a href="#_podtop_"><h1 id="Another-Head-1">Another Head 1</h1></a>
+
+<p>some text and a link <a>crossref</a></p>
+
+<table border="0" width="100%" cellspacing="0" cellpadding="3">
+<tr><td class="_podblock_" style="background-color: #cccccc" valign="middle">
+<big><strong><span class="_podblock_"> </span></strong></big>
+</td></tr>
+</table>
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir1.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir1.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir1.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,17 @@
+=head1 NAME
+
+htmldir - Test --htmldir feature
+
+=head1 LINKS
+
+ Verbatim B<means> verbatim.
+
+Normal text, a L<link> to nowhere,
+
+a link to L<var-copy>,
+
+L<htmlescp>,
+
+L<feature/Another Head 1>,
+
+and another L<feature/"Another Head 1">.
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir1.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir1.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir1.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,92 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+END {
+ rem_test_dir();
+}
+
+use strict;
+use Cwd;
+use File::Spec::Functions;
+use Test::More tests => 2;
+
+# XXX Separate tests that rely on test.lib from the others so they are the only
+# ones skipped (instead of all of them). This applies to htmldir{1,3,5}.t, and
+# crossref.t (as of 10/29/11).
+SKIP: {
+ my $output = make_test_dir();
+ skip "$output", 2 if $output;
+
+ my ($v, $d) = splitpath(cwd(), 1);
+ my @dirs = splitdir($d);
+ shift @dirs if $dirs[0] eq '';
+ my $relcwd = join '/', @dirs;
+
+ my $data_pos = tell DATA; # to read <DATA> twice
+
+
+ convert_n_test("htmldir1", "test --htmldir and --htmlroot 1a",
+ "--podpath=". File::Spec::Unix->catdir($relcwd, 't') . ":"
+ . File::Spec::Unix->catdir($relcwd, 'testdir/test.lib'),
+ "--podroot=". catpath($v, '/', ''),
+ "--htmldir=t",
+ "--quiet",
+ );
+
+ seek DATA, $data_pos, 0; # to read <DATA> twice (expected output is the same)
+
+ convert_n_test("htmldir1", "test --htmldir and --htmlroot 1b",
+ "--podpath=$relcwd",
+ "--podroot=". catpath($v, '/', ''),
+ "--htmldir=". catdir($relcwd, 't'),
+ "--htmlroot=/",
+ "--quiet",
+ );
+}
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#LINKS">LINKS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>htmldir - Test --htmldir feature</p>
+
+<h1 id="LINKS">LINKS</h1>
+
+<pre><code> Verbatim B<means> verbatim.</code></pre>
+
+<p>Normal text, a <a>link</a> to nowhere,</p>
+
+<p>a link to <a href="/[RELCURRENTWORKINGDIRECTORY]/testdir/test.lib/var-copy.html">var-copy</a>,</p>
+
+<p><a href="/[RELCURRENTWORKINGDIRECTORY]/t/htmlescp.html">htmlescp</a>,</p>
+
+<p><a href="/[RELCURRENTWORKINGDIRECTORY]/t/feature.html#Another-Head-1">"Another Head 1" in feature</a>,</p>
+
+<p>and another <a href="/[RELCURRENTWORKINGDIRECTORY]/t/feature.html#Another-Head-1">"Another Head 1" in feature</a>.</p>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir2.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir2.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir2.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+=head1 NAME
+
+htmldir - Test --htmldir feature
+
+=head1 LINKS
+
+Normal text, a L<link> to nowhere,
+
+a link to L<perlvar-copy>,
+
+L<htmlescp>,
+
+L<feature/Another Head 1>,
+
+and another L<feature/"Another Head 1">.
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir2.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir2.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir2.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,77 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+use strict;
+use Cwd;
+use Test::More tests => 3;
+
+my $cwd = cwd();
+my $data_pos = tell DATA; # to read <DATA> twice
+
+convert_n_test("htmldir2", "test --htmldir and --htmlroot 2a",
+ "--podpath=t",
+ "--htmldir=t",
+ "--quiet",
+);
+
+seek DATA, $data_pos, 0; # to read <DATA> twice (expected output is the same)
+
+convert_n_test("htmldir2", "test --htmldir and --htmlroot 2b",
+ "--podpath=t",
+ "--quiet",
+);
+
+seek DATA, $data_pos, 0; # to read <DATA> thrice (expected output is the same)
+
+# this test makes sure paths are absolute unless --htmldir is specified
+convert_n_test("htmldir2", "test --htmldir and --htmlroot 2c",
+ "--podpath=t",
+ "--podroot=$cwd",
+ "--norecurse", # testing --norecurse, too
+ "--quiet",
+);
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#LINKS">LINKS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>htmldir - Test --htmldir feature</p>
+
+<h1 id="LINKS">LINKS</h1>
+
+<p>Normal text, a <a>link</a> to nowhere,</p>
+
+<p>a link to <a>perlvar-copy</a>,</p>
+
+<p><a href="/t/htmlescp.html">htmlescp</a>,</p>
+
+<p><a href="/t/feature.html#Another-Head-1">"Another Head 1" in feature</a>,</p>
+
+<p>and another <a href="/t/feature.html#Another-Head-1">"Another Head 1" in feature</a>.</p>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir3.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir3.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir3.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+=head1 NAME
+
+htmldir - Test --htmldir feature
+
+=head1 LINKS
+
+Normal text, a L<link> to nowhere,
+
+a link to L<var-copy>,
+
+L<htmlescp>,
+
+L<feature/Another Head 1>,
+
+and another L<feature/"Another Head 1">.
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir3.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir3.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir3.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,86 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+END {
+ rem_test_dir();
+}
+
+use strict;
+use Cwd;
+use File::Spec::Functions;
+use Test::More tests => 2;
+
+SKIP: {
+ my $output = make_test_dir();
+ skip "$output", 2 if $output;
+
+ my $cwd = cwd();
+ my ($v, $d) = splitpath($cwd, 1);
+ my @dirs = splitdir($d);
+ shift @dirs if $dirs[0] eq '';
+ my $relcwd = join '/', @dirs;
+
+ my $data_pos = tell DATA; # to read <DATA> twice
+
+ convert_n_test("htmldir3", "test --htmldir and --htmlroot 3a",
+ "--podpath=$relcwd",
+ "--podroot=". catpath($v, '/', ''),
+ "--htmldir=". catdir($cwd, 't', ''), # test removal trailing slash,
+ "--quiet",
+ );
+
+ seek DATA, $data_pos, 0; # to read <DATA> twice (expected output is the same)
+
+ convert_n_test("htmldir3", "test --htmldir and --htmlroot 3b",
+ "--podpath=". catdir($relcwd, 't'),
+ "--podroot=". catpath($v, '/', ''),
+ "--htmldir=t",
+ "--outfile=t/htmldir3.html",
+ "--quiet",
+ );
+}
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#LINKS">LINKS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>htmldir - Test --htmldir feature</p>
+
+<h1 id="LINKS">LINKS</h1>
+
+<p>Normal text, a <a>link</a> to nowhere,</p>
+
+<p>a link to <a href="[RELCURRENTWORKINGDIRECTORY]/testdir/test.lib/var-copy.html">var-copy</a>,</p>
+
+<p><a href="[RELCURRENTWORKINGDIRECTORY]/t/htmlescp.html">htmlescp</a>,</p>
+
+<p><a href="[RELCURRENTWORKINGDIRECTORY]/t/feature.html#Another-Head-1">"Another Head 1" in feature</a>,</p>
+
+<p>and another <a href="[RELCURRENTWORKINGDIRECTORY]/t/feature.html#Another-Head-1">"Another Head 1" in feature</a>.</p>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir4.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir4.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir4.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+=head1 NAME
+
+htmldir - Test --htmldir feature
+
+=head1 LINKS
+
+Normal text, a L<link> to nowhere,
+
+a link to L<perlvar-copy>,
+
+L<htmlescp>,
+
+L<feature/Another Head 1>,
+
+and another L<feature/"Another Head 1">.
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir4.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir4.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir4.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,72 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+use strict;
+use Cwd;
+use File::Spec::Functions ':ALL';
+use Test::More tests => 2;
+
+my $cwd = cwd();
+my $data_pos = tell DATA; # to read <DATA> twice
+
+convert_n_test("htmldir4", "test --htmldir and --htmlroot 4a",
+ "--podpath=t",
+ "--htmldir=t",
+ "--outfile=". catfile('t', 'htmldir4.html'),
+ "--quiet",
+);
+
+seek DATA, $data_pos, 0; # to read <DATA> twice (expected output is the same)
+
+convert_n_test("htmldir4", "test --htmldir and --htmlroot 4b",
+ "--podpath=t",
+ "--podroot=$cwd",
+ "--htmldir=". catdir($cwd, 't'),
+ "--norecurse",
+ "--quiet",
+);
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#LINKS">LINKS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>htmldir - Test --htmldir feature</p>
+
+<h1 id="LINKS">LINKS</h1>
+
+<p>Normal text, a <a>link</a> to nowhere,</p>
+
+<p>a link to <a>perlvar-copy</a>,</p>
+
+<p><a href="t/htmlescp.html">htmlescp</a>,</p>
+
+<p><a href="t/feature.html#Another-Head-1">"Another Head 1" in feature</a>,</p>
+
+<p>and another <a href="t/feature.html#Another-Head-1">"Another Head 1" in feature</a>.</p>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir5.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir5.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir5.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+=head1 NAME
+
+htmldir - Test --htmldir feature
+
+=head1 LINKS
+
+Normal text, a L<link> to nowhere,
+
+a link to L<var-copy>,
+
+L<htmlescp>,
+
+L<feature/Another Head 1>,
+
+and another L<feature/"Another Head 1">.
Added: vendor/perl/dist/ext/Pod-Html/t/htmldir5.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/htmldir5.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/htmldir5.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,75 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+END {
+ rem_test_dir();
+}
+
+use strict;
+use Cwd;
+use File::Spec::Functions;
+use Test::More tests => 1;
+
+SKIP: {
+ my $output = make_test_dir();
+ skip "$output", 1 if $output;
+
+
+ my $cwd = catdir cwd(); # catdir converts path separators to that of the OS
+ # running the test
+ # XXX but why don't the other tests complain about
+ # this?
+
+ convert_n_test("htmldir5", "test --htmldir and --htmlroot 5",
+ "--podpath=t:testdir/test.lib",
+ "--podroot=$cwd",
+ "--htmldir=$cwd",
+ "--htmlroot=/",
+ "--quiet",
+ );
+}
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#LINKS">LINKS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>htmldir - Test --htmldir feature</p>
+
+<h1 id="LINKS">LINKS</h1>
+
+<p>Normal text, a <a>link</a> to nowhere,</p>
+
+<p>a link to <a href="../testdir/test.lib/var-copy.html">var-copy</a>,</p>
+
+<p><a href="./htmlescp.html">htmlescp</a>,</p>
+
+<p><a href="./feature.html#Another-Head-1">"Another Head 1" in feature</a>,</p>
+
+<p>and another <a href="./feature.html#Another-Head-1">"Another Head 1" in feature</a>.</p>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/poderr.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/poderr.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/poderr.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,19 @@
+=head1 NAME
+
+Test POD ERROR section
+
+=over 4
+
+This text is not allowed
+
+=item *
+
+The wiz item.
+
+=item *
+
+The waz item.
+
+=back
+
+=cut
Added: vendor/perl/dist/ext/Pod-Html/t/poderr.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/poderr.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/poderr.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,68 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+use strict;
+use Test::More tests => 1;
+
+convert_n_test("poderr", "pod error section");
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+ <li><a href="#POD-ERRORS">POD ERRORS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Test POD ERROR section</p>
+
+<ul>
+
+<p>This text is not allowed</p>
+
+<p>*</p>
+
+<p>The wiz item.</p>
+
+<p>*</p>
+
+<p>The waz item.</p>
+
+</ul>
+
+<h1 id="POD-ERRORS">POD ERRORS</h1>
+
+<p>Hey! <b>The above document had some coding errors, which are explained below:</b></p>
+
+<dl>
+
+<dt id="Around-line-5">Around line 5:</dt>
+<dd>
+
+<p>You can't have =items (as at line 9) unless the first thing after the =over is an =item</p>
+
+</dd>
+</dl>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/t/podnoerr.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/podnoerr.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/podnoerr.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,19 @@
+=head1 NAME
+
+Test POD ERROR section
+
+=over 4
+
+This text is not allowed
+
+=item *
+
+The wiz item.
+
+=item *
+
+The waz item.
+
+=back
+
+=cut
Added: vendor/perl/dist/ext/Pod-Html/t/podnoerr.t
===================================================================
--- vendor/perl/dist/ext/Pod-Html/t/podnoerr.t (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/t/podnoerr.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,55 @@
+#!/usr/bin/perl -w # -*- perl -*-
+
+BEGIN {
+ require "t/pod2html-lib.pl";
+}
+
+use strict;
+use Test::More tests => 1;
+
+convert_n_test("podnoerr", "pod error section",
+ "--nopoderrors",
+);
+
+__DATA__
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:[PERLADMIN]" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+ <li><a href="#NAME">NAME</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Test POD ERROR section</p>
+
+<ul>
+
+<p>This text is not allowed</p>
+
+<p>*</p>
+
+<p>The wiz item.</p>
+
+<p>*</p>
+
+<p>The waz item.</p>
+
+</ul>
+
+
+</body>
+
+</html>
+
+
Added: vendor/perl/dist/ext/Pod-Html/testdir/perlpodspec-copy.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/testdir/perlpodspec-copy.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/testdir/perlpodspec-copy.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1899 @@
+
+=head1 NAME
+
+perlpodspeccopy - Plain Old Documentation: format specification and notes
+
+=head1 DESCRIPTION
+
+This document is detailed notes on the Pod markup language. Most
+people will only have to read L<perlpod|perlpod> to know how to write
+in Pod, but this document may answer some incidental questions to do
+with parsing and rendering Pod.
+
+In this document, "must" / "must not", "should" /
+"should not", and "may" have their conventional (cf. RFC 2119)
+meanings: "X must do Y" means that if X doesn't do Y, it's against
+this specification, and should really be fixed. "X should do Y"
+means that it's recommended, but X may fail to do Y, if there's a
+good reason. "X may do Y" is merely a note that X can do Y at
+will (although it is up to the reader to detect any connotation of
+"and I think it would be I<nice> if X did Y" versus "it wouldn't
+really I<bother> me if X did Y").
+
+Notably, when I say "the parser should do Y", the
+parser may fail to do Y, if the calling application explicitly
+requests that the parser I<not> do Y. I often phrase this as
+"the parser should, by default, do Y." This doesn't I<require>
+the parser to provide an option for turning off whatever
+feature Y is (like expanding tabs in verbatim paragraphs), although
+it implicates that such an option I<may> be provided.
+
+=head1 Pod Definitions
+
+Pod is embedded in files, typically Perl source files -- although you
+can write a file that's nothing but Pod.
+
+A B<line> in a file consists of zero or more non-newline characters,
+terminated by either a newline or the end of the file.
+
+A B<newline sequence> is usually a platform-dependent concept, but
+Pod parsers should understand it to mean any of CR (ASCII 13), LF
+(ASCII 10), or a CRLF (ASCII 13 followed immediately by ASCII 10), in
+addition to any other system-specific meaning. The first CR/CRLF/LF
+sequence in the file may be used as the basis for identifying the
+newline sequence for parsing the rest of the file.
+
+A B<blank line> is a line consisting entirely of zero or more spaces
+(ASCII 32) or tabs (ASCII 9), and terminated by a newline or end-of-file.
+A B<non-blank line> is a line containing one or more characters other
+than space or tab (and terminated by a newline or end-of-file).
+
+(I<Note:> Many older Pod parsers did not accept a line consisting of
+spaces/tabs and then a newline as a blank line -- the only lines they
+considered blank were lines consisting of I<no characters at all>,
+terminated by a newline.)
+
+B<Whitespace> is used in this document as a blanket term for spaces,
+tabs, and newline sequences. (By itself, this term usually refers
+to literal whitespace. That is, sequences of whitespace characters
+in Pod source, as opposed to "EE<lt>32>", which is a formatting
+code that I<denotes> a whitespace character.)
+
+A B<Pod parser> is a module meant for parsing Pod (regardless of
+whether this involves calling callbacks or building a parse tree or
+directly formatting it). A B<Pod formatter> (or B<Pod translator>)
+is a module or program that converts Pod to some other format (HTML,
+plaintext, TeX, PostScript, RTF). A B<Pod processor> might be a
+formatter or translator, or might be a program that does something
+else with the Pod (like counting words, scanning for index points,
+etc.).
+
+Pod content is contained in B<Pod blocks>. A Pod block starts with a
+line that matches <m/\A=[a-zA-Z]/>, and continues up to the next line
+that matches C<m/\A=cut/> -- or up to the end of the file, if there is
+no C<m/\A=cut/> line.
+
+=for comment
+ The current perlsyn says:
+ [beginquote]
+ Note that pod translators should look at only paragraphs beginning
+ with a pod directive (it makes parsing easier), whereas the compiler
+ actually knows to look for pod escapes even in the middle of a
+ paragraph. This means that the following secret stuff will be ignored
+ by both the compiler and the translators.
+ $a=3;
+ =secret stuff
+ warn "Neither POD nor CODE!?"
+ =cut back
+ print "got $a\n";
+ You probably shouldn't rely upon the warn() being podded out forever.
+ Not all pod translators are well-behaved in this regard, and perhaps
+ the compiler will become pickier.
+ [endquote]
+ I think that those paragraphs should just be removed; paragraph-based
+ parsing seems to have been largely abandoned, because of the hassle
+ with non-empty blank lines messing up what people meant by "paragraph".
+ Even if the "it makes parsing easier" bit were especially true,
+ it wouldn't be worth the confusion of having perl and pod2whatever
+ actually disagree on what can constitute a Pod block.
+
+Within a Pod block, there are B<Pod paragraphs>. A Pod paragraph
+consists of non-blank lines of text, separated by one or more blank
+lines.
+
+For purposes of Pod processing, there are four types of paragraphs in
+a Pod block:
+
+=over
+
+=item *
+
+A command paragraph (also called a "directive"). The first line of
+this paragraph must match C<m/\A=[a-zA-Z]/>. Command paragraphs are
+typically one line, as in:
+
+ =head1 NOTES
+
+ =item *
+
+But they may span several (non-blank) lines:
+
+ =for comment
+ Hm, I wonder what it would look like if
+ you tried to write a BNF for Pod from this.
+
+ =head3 Dr. Strangelove, or: How I Learned to
+ Stop Worrying and Love the Bomb
+
+I<Some> command paragraphs allow formatting codes in their content
+(i.e., after the part that matches C<m/\A=[a-zA-Z]\S*\s*/>), as in:
+
+ =head1 Did You Remember to C<use strict;>?
+
+In other words, the Pod processing handler for "head1" will apply the
+same processing to "Did You Remember to CE<lt>use strict;>?" that it
+would to an ordinary paragraph -- i.e., formatting codes (like
+"CE<lt>...>") are parsed and presumably formatted appropriately, and
+whitespace in the form of literal spaces and/or tabs is not
+significant.
+
+=item *
+
+A B<verbatim paragraph>. The first line of this paragraph must be a
+literal space or tab, and this paragraph must not be inside a "=begin
+I<identifier>", ... "=end I<identifier>" sequence unless
+"I<identifier>" begins with a colon (":"). That is, if a paragraph
+starts with a literal space or tab, but I<is> inside a
+"=begin I<identifier>", ... "=end I<identifier>" region, then it's
+a data paragraph, unless "I<identifier>" begins with a colon.
+
+Whitespace I<is> significant in verbatim paragraphs (although, in
+processing, tabs are probably expanded).
+
+=item *
+
+An B<ordinary paragraph>. A paragraph is an ordinary paragraph
+if its first line matches neither C<m/\A=[a-zA-Z]/> nor
+C<m/\A[ \t]/>, I<and> if it's not inside a "=begin I<identifier>",
+... "=end I<identifier>" sequence unless "I<identifier>" begins with
+a colon (":").
+
+=item *
+
+A B<data paragraph>. This is a paragraph that I<is> inside a "=begin
+I<identifier>" ... "=end I<identifier>" sequence where
+"I<identifier>" does I<not> begin with a literal colon (":"). In
+some sense, a data paragraph is not part of Pod at all (i.e.,
+effectively it's "out-of-band"), since it's not subject to most kinds
+of Pod parsing; but it is specified here, since Pod
+parsers need to be able to call an event for it, or store it in some
+form in a parse tree, or at least just parse I<around> it.
+
+=back
+
+For example: consider the following paragraphs:
+
+ # <- that's the 0th column
+
+ =head1 Foo
+
+ Stuff
+
+ $foo->bar
+
+ =cut
+
+Here, "=head1 Foo" and "=cut" are command paragraphs because the first
+line of each matches C<m/\A=[a-zA-Z]/>. "I<[space][space]>$foo->bar"
+is a verbatim paragraph, because its first line starts with a literal
+whitespace character (and there's no "=begin"..."=end" region around).
+
+The "=begin I<identifier>" ... "=end I<identifier>" commands stop
+paragraphs that they surround from being parsed as ordinary or verbatim
+paragraphs, if I<identifier> doesn't begin with a colon. This
+is discussed in detail in the section
+L</About Data Paragraphs and "=beginE<sol>=end" Regions>.
+
+=head1 Pod Commands
+
+This section is intended to supplement and clarify the discussion in
+L<perlpod/"Command Paragraph">. These are the currently recognized
+Pod commands:
+
+=over
+
+=item "=head1", "=head2", "=head3", "=head4"
+
+This command indicates that the text in the remainder of the paragraph
+is a heading. That text may contain formatting codes. Examples:
+
+ =head1 Object Attributes
+
+ =head3 What B<Not> to Do!
+
+=item "=pod"
+
+This command indicates that this paragraph begins a Pod block. (If we
+are already in the middle of a Pod block, this command has no effect at
+all.) If there is any text in this command paragraph after "=pod",
+it must be ignored. Examples:
+
+ =pod
+
+ This is a plain Pod paragraph.
+
+ =pod This text is ignored.
+
+=item "=cut"
+
+This command indicates that this line is the end of this previously
+started Pod block. If there is any text after "=cut" on the line, it must be
+ignored. Examples:
+
+ =cut
+
+ =cut The documentation ends here.
+
+ =cut
+ # This is the first line of program text.
+ sub foo { # This is the second.
+
+It is an error to try to I<start> a Pod block with a "=cut" command. In
+that case, the Pod processor must halt parsing of the input file, and
+must by default emit a warning.
+
+=item "=over"
+
+This command indicates that this is the start of a list/indent
+region. If there is any text following the "=over", it must consist
+of only a nonzero positive numeral. The semantics of this numeral is
+explained in the L</"About =over...=back Regions"> section, further
+below. Formatting codes are not expanded. Examples:
+
+ =over 3
+
+ =over 3.5
+
+ =over
+
+=item "=item"
+
+This command indicates that an item in a list begins here. Formatting
+codes are processed. The semantics of the (optional) text in the
+remainder of this paragraph are
+explained in the L</"About =over...=back Regions"> section, further
+below. Examples:
+
+ =item
+
+ =item *
+
+ =item *
+
+ =item 14
+
+ =item 3.
+
+ =item C<< $thing->stuff(I<dodad>) >>
+
+ =item For transporting us beyond seas to be tried for pretended
+ offenses
+
+ =item He is at this time transporting large armies of foreign
+ mercenaries to complete the works of death, desolation and
+ tyranny, already begun with circumstances of cruelty and perfidy
+ scarcely paralleled in the most barbarous ages, and totally
+ unworthy the head of a civilized nation.
+
+=item "=back"
+
+This command indicates that this is the end of the region begun
+by the most recent "=over" command. It permits no text after the
+"=back" command.
+
+=item "=begin formatname"
+
+This marks the following paragraphs (until the matching "=end
+formatname") as being for some special kind of processing. Unless
+"formatname" begins with a colon, the contained non-command
+paragraphs are data paragraphs. But if "formatname" I<does> begin
+with a colon, then non-command paragraphs are ordinary paragraphs
+or data paragraphs. This is discussed in detail in the section
+L</About Data Paragraphs and "=beginE<sol>=end" Regions>.
+
+It is advised that formatnames match the regexp
+C<m/\A:?[-a-zA-Z0-9_]+\z/>. Implementors should anticipate future
+expansion in the semantics and syntax of the first parameter
+to "=begin"/"=end"/"=for".
+
+=item "=end formatname"
+
+This marks the end of the region opened by the matching
+"=begin formatname" region. If "formatname" is not the formatname
+of the most recent open "=begin formatname" region, then this
+is an error, and must generate an error message. This
+is discussed in detail in the section
+L</About Data Paragraphs and "=beginE<sol>=end" Regions>.
+
+=item "=for formatname text..."
+
+This is synonymous with:
+
+ =begin formatname
+
+ text...
+
+ =end formatname
+
+That is, it creates a region consisting of a single paragraph; that
+paragraph is to be treated as a normal paragraph if "formatname"
+begins with a ":"; if "formatname" I<doesn't> begin with a colon,
+then "text..." will constitute a data paragraph. There is no way
+to use "=for formatname text..." to express "text..." as a verbatim
+paragraph.
+
+=item "=encoding encodingname"
+
+This command, which should occur early in the document (at least
+before any non-US-ASCII data!), declares that this document is
+encoded in the encoding I<encodingname>, which must be
+an encoding name that L<Encode> recognizes. (Encode's list
+of supported encodings, in L<Encode::Supported>, is useful here.)
+If the Pod parser cannot decode the declared encoding, it
+should emit a warning and may abort parsing the document
+altogether.
+
+A document having more than one "=encoding" line should be
+considered an error. Pod processors may silently tolerate this if
+the not-first "=encoding" lines are just duplicates of the
+first one (e.g., if there's a "=encoding utf8" line, and later on
+another "=encoding utf8" line). But Pod processors should complain if
+there are contradictory "=encoding" lines in the same document
+(e.g., if there is a "=encoding utf8" early in the document and
+"=encoding big5" later). Pod processors that recognize BOMs
+may also complain if they see an "=encoding" line
+that contradicts the BOM (e.g., if a document with a UTF-16LE
+BOM has an "=encoding shiftjis" line).
+
+=back
+
+If a Pod processor sees any command other than the ones listed
+above (like "=head", or "=haed1", or "=stuff", or "=cuttlefish",
+or "=w123"), that processor must by default treat this as an
+error. It must not process the paragraph beginning with that
+command, must by default warn of this as an error, and may
+abort the parse. A Pod parser may allow a way for particular
+applications to add to the above list of known commands, and to
+stipulate, for each additional command, whether formatting
+codes should be processed.
+
+Future versions of this specification may add additional
+commands.
+
+
+
+=head1 Pod Formatting Codes
+
+(Note that in previous drafts of this document and of perlpod,
+formatting codes were referred to as "interior sequences", and
+this term may still be found in the documentation for Pod parsers,
+and in error messages from Pod processors.)
+
+There are two syntaxes for formatting codes:
+
+=over
+
+=item *
+
+A formatting code starts with a capital letter (just US-ASCII [A-Z])
+followed by a "<", any number of characters, and ending with the first
+matching ">". Examples:
+
+ That's what I<you> think!
+
+ What's C<dump()> for?
+
+ X<C<chmod> and C<unlink()> Under Different Operating Systems>
+
+=item *
+
+A formatting code starts with a capital letter (just US-ASCII [A-Z])
+followed by two or more "<"'s, one or more whitespace characters,
+any number of characters, one or more whitespace characters,
+and ending with the first matching sequence of two or more ">"'s, where
+the number of ">"'s equals the number of "<"'s in the opening of this
+formatting code. Examples:
+
+ That's what I<< you >> think!
+
+ C<<< open(X, ">>thing.dat") || die $! >>>
+
+ B<< $foo->bar(); >>
+
+With this syntax, the whitespace character(s) after the "CE<lt><<"
+and before the ">>" (or whatever letter) are I<not> renderable -- they
+do not signify whitespace, are merely part of the formatting codes
+themselves. That is, these are all synonymous:
+
+ C<thing>
+ C<< thing >>
+ C<< thing >>
+ C<<< thing >>>
+ C<<<<
+ thing
+ >>>>
+
+and so on.
+
+=back
+
+In parsing Pod, a notably tricky part is the correct parsing of
+(potentially nested!) formatting codes. Implementors should
+consult the code in the C<parse_text> routine in Pod::Parser as an
+example of a correct implementation.
+
+=over
+
+=item C<IE<lt>textE<gt>> -- italic text
+
+See the brief discussion in L<perlpod/"Formatting Codes">.
+
+=item C<BE<lt>textE<gt>> -- bold text
+
+See the brief discussion in L<perlpod/"Formatting Codes">.
+
+=item C<CE<lt>codeE<gt>> -- code text
+
+See the brief discussion in L<perlpod/"Formatting Codes">.
+
+=item C<FE<lt>filenameE<gt>> -- style for filenames
+
+See the brief discussion in L<perlpod/"Formatting Codes">.
+
+=item C<XE<lt>topic nameE<gt>> -- an index entry
+
+See the brief discussion in L<perlpod/"Formatting Codes">.
+
+This code is unusual in that most formatters completely discard
+this code and its content. Other formatters will render it with
+invisible codes that can be used in building an index of
+the current document.
+
+=item C<ZE<lt>E<gt>> -- a null (zero-effect) formatting code
+
+Discussed briefly in L<perlpod/"Formatting Codes">.
+
+This code is unusual is that it should have no content. That is,
+a processor may complain if it sees C<ZE<lt>potatoesE<gt>>. Whether
+or not it complains, the I<potatoes> text should ignored.
+
+=item C<LE<lt>nameE<gt>> -- a hyperlink
+
+The complicated syntaxes of this code are discussed at length in
+L<perlpod/"Formatting Codes">, and implementation details are
+discussed below, in L</"About LE<lt>...E<gt> Codes">. Parsing the
+contents of LE<lt>content> is tricky. Notably, the content has to be
+checked for whether it looks like a URL, or whether it has to be split
+on literal "|" and/or "/" (in the right order!), and so on,
+I<before> EE<lt>...> codes are resolved.
+
+=item C<EE<lt>escapeE<gt>> -- a character escape
+
+See L<perlpod/"Formatting Codes">, and several points in
+L</Notes on Implementing Pod Processors>.
+
+=item C<SE<lt>textE<gt>> -- text contains non-breaking spaces
+
+This formatting code is syntactically simple, but semantically
+complex. What it means is that each space in the printable
+content of this code signifies a non-breaking space.
+
+Consider:
+
+ C<$x ? $y : $z>
+
+ S<C<$x ? $y : $z>>
+
+Both signify the monospace (c[ode] style) text consisting of
+"$x", one space, "?", one space, ":", one space, "$z". The
+difference is that in the latter, with the S code, those spaces
+are not "normal" spaces, but instead are non-breaking spaces.
+
+=back
+
+
+If a Pod processor sees any formatting code other than the ones
+listed above (as in "NE<lt>...>", or "QE<lt>...>", etc.), that
+processor must by default treat this as an error.
+A Pod parser may allow a way for particular
+applications to add to the above list of known formatting codes;
+a Pod parser might even allow a way to stipulate, for each additional
+command, whether it requires some form of special processing, as
+LE<lt>...> does.
+
+Future versions of this specification may add additional
+formatting codes.
+
+Historical note: A few older Pod processors would not see a ">" as
+closing a "CE<lt>" code, if the ">" was immediately preceded by
+a "-". This was so that this:
+
+ C<$foo->bar>
+
+would parse as equivalent to this:
+
+ C<$foo-E<gt>bar>
+
+instead of as equivalent to a "C" formatting code containing
+only "$foo-", and then a "bar>" outside the "C" formatting code. This
+problem has since been solved by the addition of syntaxes like this:
+
+ C<< $foo->bar >>
+
+Compliant parsers must not treat "->" as special.
+
+Formatting codes absolutely cannot span paragraphs. If a code is
+opened in one paragraph, and no closing code is found by the end of
+that paragraph, the Pod parser must close that formatting code,
+and should complain (as in "Unterminated I code in the paragraph
+starting at line 123: 'Time objects are not...'"). So these
+two paragraphs:
+
+ I<I told you not to do this!
+
+ Don't make me say it again!>
+
+...must I<not> be parsed as two paragraphs in italics (with the I
+code starting in one paragraph and starting in another.) Instead,
+the first paragraph should generate a warning, but that aside, the
+above code must parse as if it were:
+
+ I<I told you not to do this!>
+
+ Don't make me say it again!E<gt>
+
+(In SGMLish jargon, all Pod commands are like block-level
+elements, whereas all Pod formatting codes are like inline-level
+elements.)
+
+
+
+=head1 Notes on Implementing Pod Processors
+
+The following is a long section of miscellaneous requirements
+and suggestions to do with Pod processing.
+
+=over
+
+=item *
+
+Pod formatters should tolerate lines in verbatim blocks that are of
+any length, even if that means having to break them (possibly several
+times, for very long lines) to avoid text running off the side of the
+page. Pod formatters may warn of such line-breaking. Such warnings
+are particularly appropriate for lines are over 100 characters long, which
+are usually not intentional.
+
+=item *
+
+Pod parsers must recognize I<all> of the three well-known newline
+formats: CR, LF, and CRLF. See L<perlport|perlport>.
+
+=item *
+
+Pod parsers should accept input lines that are of any length.
+
+=item *
+
+Since Perl recognizes a Unicode Byte Order Mark at the start of files
+as signaling that the file is Unicode encoded as in UTF-16 (whether
+big-endian or little-endian) or UTF-8, Pod parsers should do the
+same. Otherwise, the character encoding should be understood as
+being UTF-8 if the first highbit byte sequence in the file seems
+valid as a UTF-8 sequence, or otherwise as Latin-1.
+
+Future versions of this specification may specify
+how Pod can accept other encodings. Presumably treatment of other
+encodings in Pod parsing would be as in XML parsing: whatever the
+encoding declared by a particular Pod file, content is to be
+stored in memory as Unicode characters.
+
+=item *
+
+The well known Unicode Byte Order Marks are as follows: if the
+file begins with the two literal byte values 0xFE 0xFF, this is
+the BOM for big-endian UTF-16. If the file begins with the two
+literal byte value 0xFF 0xFE, this is the BOM for little-endian
+UTF-16. If the file begins with the three literal byte values
+0xEF 0xBB 0xBF, this is the BOM for UTF-8.
+
+=for comment
+ use bytes; print map sprintf(" 0x%02X", ord $_), split '', "\x{feff}";
+ 0xEF 0xBB 0xBF
+
+=for comment
+ If toke.c is modified to support UTF-32, add mention of those here.
+
+=item *
+
+A naive but sufficient heuristic for testing the first highbit
+byte-sequence in a BOM-less file (whether in code or in Pod!), to see
+whether that sequence is valid as UTF-8 (RFC 2279) is to check whether
+that the first byte in the sequence is in the range 0xC0 - 0xFD
+I<and> whether the next byte is in the range
+0x80 - 0xBF. If so, the parser may conclude that this file is in
+UTF-8, and all highbit sequences in the file should be assumed to
+be UTF-8. Otherwise the parser should treat the file as being
+in Latin-1. In the unlikely circumstance that the first highbit
+sequence in a truly non-UTF-8 file happens to appear to be UTF-8, one
+can cater to our heuristic (as well as any more intelligent heuristic)
+by prefacing that line with a comment line containing a highbit
+sequence that is clearly I<not> valid as UTF-8. A line consisting
+of simply "#", an e-acute, and any non-highbit byte,
+is sufficient to establish this file's encoding.
+
+=for comment
+ If/WHEN some brave soul makes these heuristics into a generic
+ text-file class (or PerlIO layer?), we can presumably delete
+ mention of these icky details from this file, and can instead
+ tell people to just use appropriate class/layer.
+ Auto-recognition of newline sequences would be another desirable
+ feature of such a class/layer.
+ HINT HINT HINT.
+
+=for comment
+ "The probability that a string of characters
+ in any other encoding appears as valid UTF-8 is low" - RFC2279
+
+=item *
+
+This document's requirements and suggestions about encodings
+do not apply to Pod processors running on non-ASCII platforms,
+notably EBCDIC platforms.
+
+=item *
+
+Pod processors must treat a "=for [label] [content...]" paragraph as
+meaning the same thing as a "=begin [label]" paragraph, content, and
+an "=end [label]" paragraph. (The parser may conflate these two
+constructs, or may leave them distinct, in the expectation that the
+formatter will nevertheless treat them the same.)
+
+=item *
+
+When rendering Pod to a format that allows comments (i.e., to nearly
+any format other than plaintext), a Pod formatter must insert comment
+text identifying its name and version number, and the name and
+version numbers of any modules it might be using to process the Pod.
+Minimal examples:
+
+ %% POD::Pod2PS v3.14159, using POD::Parser v1.92
+
+ <!-- Pod::HTML v3.14159, using POD::Parser v1.92 -->
+
+ {\doccomm generated by Pod::Tree::RTF 3.14159 using Pod::Tree 1.08}
+
+ .\" Pod::Man version 3.14159, using POD::Parser version 1.92
+
+Formatters may also insert additional comments, including: the
+release date of the Pod formatter program, the contact address for
+the author(s) of the formatter, the current time, the name of input
+file, the formatting options in effect, version of Perl used, etc.
+
+Formatters may also choose to note errors/warnings as comments,
+besides or instead of emitting them otherwise (as in messages to
+STDERR, or C<die>ing).
+
+=item *
+
+Pod parsers I<may> emit warnings or error messages ("Unknown E code
+EE<lt>zslig>!") to STDERR (whether through printing to STDERR, or
+C<warn>ing/C<carp>ing, or C<die>ing/C<croak>ing), but I<must> allow
+suppressing all such STDERR output, and instead allow an option for
+reporting errors/warnings
+in some other way, whether by triggering a callback, or noting errors
+in some attribute of the document object, or some similarly unobtrusive
+mechanism -- or even by appending a "Pod Errors" section to the end of
+the parsed form of the document.
+
+=item *
+
+In cases of exceptionally aberrant documents, Pod parsers may abort the
+parse. Even then, using C<die>ing/C<croak>ing is to be avoided; where
+possible, the parser library may simply close the input file
+and add text like "*** Formatting Aborted ***" to the end of the
+(partial) in-memory document.
+
+=item *
+
+In paragraphs where formatting codes (like EE<lt>...>, BE<lt>...>)
+are understood (i.e., I<not> verbatim paragraphs, but I<including>
+ordinary paragraphs, and command paragraphs that produce renderable
+text, like "=head1"), literal whitespace should generally be considered
+"insignificant", in that one literal space has the same meaning as any
+(nonzero) number of literal spaces, literal newlines, and literal tabs
+(as long as this produces no blank lines, since those would terminate
+the paragraph). Pod parsers should compact literal whitespace in each
+processed paragraph, but may provide an option for overriding this
+(since some processing tasks do not require it), or may follow
+additional special rules (for example, specially treating
+period-space-space or period-newline sequences).
+
+=item *
+
+Pod parsers should not, by default, try to coerce apostrophe (') and
+quote (") into smart quotes (little 9's, 66's, 99's, etc), nor try to
+turn backtick (`) into anything else but a single backtick character
+(distinct from an open quote character!), nor "--" into anything but
+two minus signs. They I<must never> do any of those things to text
+in CE<lt>...> formatting codes, and never I<ever> to text in verbatim
+paragraphs.
+
+=item *
+
+When rendering Pod to a format that has two kinds of hyphens (-), one
+that's a non-breaking hyphen, and another that's a breakable hyphen
+(as in "object-oriented", which can be split across lines as
+"object-", newline, "oriented"), formatters are encouraged to
+generally translate "-" to non-breaking hyphen, but may apply
+heuristics to convert some of these to breaking hyphens.
+
+=item *
+
+Pod formatters should make reasonable efforts to keep words of Perl
+code from being broken across lines. For example, "Foo::Bar" in some
+formatting systems is seen as eligible for being broken across lines
+as "Foo::" newline "Bar" or even "Foo::-" newline "Bar". This should
+be avoided where possible, either by disabling all line-breaking in
+mid-word, or by wrapping particular words with internal punctuation
+in "don't break this across lines" codes (which in some formats may
+not be a single code, but might be a matter of inserting non-breaking
+zero-width spaces between every pair of characters in a word.)
+
+=item *
+
+Pod parsers should, by default, expand tabs in verbatim paragraphs as
+they are processed, before passing them to the formatter or other
+processor. Parsers may also allow an option for overriding this.
+
+=item *
+
+Pod parsers should, by default, remove newlines from the end of
+ordinary and verbatim paragraphs before passing them to the
+formatter. For example, while the paragraph you're reading now
+could be considered, in Pod source, to end with (and contain)
+the newline(s) that end it, it should be processed as ending with
+(and containing) the period character that ends this sentence.
+
+=item *
+
+Pod parsers, when reporting errors, should make some effort to report
+an approximate line number ("Nested EE<lt>>'s in Paragraph #52, near
+line 633 of Thing/Foo.pm!"), instead of merely noting the paragraph
+number ("Nested EE<lt>>'s in Paragraph #52 of Thing/Foo.pm!"). Where
+this is problematic, the paragraph number should at least be
+accompanied by an excerpt from the paragraph ("Nested EE<lt>>'s in
+Paragraph #52 of Thing/Foo.pm, which begins 'Read/write accessor for
+the CE<lt>interest rate> attribute...'").
+
+=item *
+
+Pod parsers, when processing a series of verbatim paragraphs one
+after another, should consider them to be one large verbatim
+paragraph that happens to contain blank lines. I.e., these two
+lines, which have a blank line between them:
+
+ use Foo;
+
+ print Foo->VERSION
+
+should be unified into one paragraph ("\tuse Foo;\n\n\tprint
+Foo->VERSION") before being passed to the formatter or other
+processor. Parsers may also allow an option for overriding this.
+
+While this might be too cumbersome to implement in event-based Pod
+parsers, it is straightforward for parsers that return parse trees.
+
+=item *
+
+Pod formatters, where feasible, are advised to avoid splitting short
+verbatim paragraphs (under twelve lines, say) across pages.
+
+=item *
+
+Pod parsers must treat a line with only spaces and/or tabs on it as a
+"blank line" such as separates paragraphs. (Some older parsers
+recognized only two adjacent newlines as a "blank line" but would not
+recognize a newline, a space, and a newline, as a blank line. This
+is noncompliant behavior.)
+
+=item *
+
+Authors of Pod formatters/processors should make every effort to
+avoid writing their own Pod parser. There are already several in
+CPAN, with a wide range of interface styles -- and one of them,
+Pod::Parser, comes with modern versions of Perl.
+
+=item *
+
+Characters in Pod documents may be conveyed either as literals, or by
+number in EE<lt>n> codes, or by an equivalent mnemonic, as in
+EE<lt>eacute> which is exactly equivalent to EE<lt>233>.
+
+Characters in the range 32-126 refer to those well known US-ASCII
+characters (also defined there by Unicode, with the same meaning),
+which all Pod formatters must render faithfully. Characters
+in the ranges 0-31 and 127-159 should not be used (neither as
+literals, nor as EE<lt>number> codes), except for the
+literal byte-sequences for newline (13, 13 10, or 10), and tab (9).
+
+Characters in the range 160-255 refer to Latin-1 characters (also
+defined there by Unicode, with the same meaning). Characters above
+255 should be understood to refer to Unicode characters.
+
+=item *
+
+Be warned
+that some formatters cannot reliably render characters outside 32-126;
+and many are able to handle 32-126 and 160-255, but nothing above
+255.
+
+=item *
+
+Besides the well-known "EE<lt>lt>" and "EE<lt>gt>" codes for
+less-than and greater-than, Pod parsers must understand "EE<lt>sol>"
+for "/" (solidus, slash), and "EE<lt>verbar>" for "|" (vertical bar,
+pipe). Pod parsers should also understand "EE<lt>lchevron>" and
+"EE<lt>rchevron>" as legacy codes for characters 171 and 187, i.e.,
+"left-pointing double angle quotation mark" = "left pointing
+guillemet" and "right-pointing double angle quotation mark" = "right
+pointing guillemet". (These look like little "<<" and ">>", and they
+are now preferably expressed with the HTML/XHTML codes "EE<lt>laquo>"
+and "EE<lt>raquo>".)
+
+=item *
+
+Pod parsers should understand all "EE<lt>html>" codes as defined
+in the entity declarations in the most recent XHTML specification at
+C<www.W3.org>. Pod parsers must understand at least the entities
+that define characters in the range 160-255 (Latin-1). Pod parsers,
+when faced with some unknown "EE<lt>I<identifier>>" code,
+shouldn't simply replace it with nullstring (by default, at least),
+but may pass it through as a string consisting of the literal characters
+E, less-than, I<identifier>, greater-than. Or Pod parsers may offer the
+alternative option of processing such unknown
+"EE<lt>I<identifier>>" codes by firing an event especially
+for such codes, or by adding a special node-type to the in-memory
+document tree. Such "EE<lt>I<identifier>>" may have special meaning
+to some processors, or some processors may choose to add them to
+a special error report.
+
+=item *
+
+Pod parsers must also support the XHTML codes "EE<lt>quot>" for
+character 34 (doublequote, "), "EE<lt>amp>" for character 38
+(ampersand, &), and "EE<lt>apos>" for character 39 (apostrophe, ').
+
+=item *
+
+Note that in all cases of "EE<lt>whatever>", I<whatever> (whether
+an htmlname, or a number in any base) must consist only of
+alphanumeric characters -- that is, I<whatever> must watch
+C<m/\A\w+\z/>. So "EE<lt> 0 1 2 3 >" is invalid, because
+it contains spaces, which aren't alphanumeric characters. This
+presumably does not I<need> special treatment by a Pod processor;
+" 0 1 2 3 " doesn't look like a number in any base, so it would
+presumably be looked up in the table of HTML-like names. Since
+there isn't (and cannot be) an HTML-like entity called " 0 1 2 3 ",
+this will be treated as an error. However, Pod processors may
+treat "EE<lt> 0 1 2 3 >" or "EE<lt>e-acute>" as I<syntactically>
+invalid, potentially earning a different error message than the
+error message (or warning, or event) generated by a merely unknown
+(but theoretically valid) htmlname, as in "EE<lt>qacute>"
+[sic]. However, Pod parsers are not required to make this
+distinction.
+
+=item *
+
+Note that EE<lt>number> I<must not> be interpreted as simply
+"codepoint I<number> in the current/native character set". It always
+means only "the character represented by codepoint I<number> in
+Unicode." (This is identical to the semantics of &#I<number>; in XML.)
+
+This will likely require many formatters to have tables mapping from
+treatable Unicode codepoints (such as the "\xE9" for the e-acute
+character) to the escape sequences or codes necessary for conveying
+such sequences in the target output format. A converter to *roff
+would, for example know that "\xE9" (whether conveyed literally, or via
+a EE<lt>...> sequence) is to be conveyed as "e\\*'".
+Similarly, a program rendering Pod in a Mac OS application window, would
+presumably need to know that "\xE9" maps to codepoint 142 in MacRoman
+encoding that (at time of writing) is native for Mac OS. Such
+Unicode2whatever mappings are presumably already widely available for
+common output formats. (Such mappings may be incomplete! Implementers
+are not expected to bend over backwards in an attempt to render
+Cherokee syllabics, Etruscan runes, Byzantine musical symbols, or any
+of the other weird things that Unicode can encode.) And
+if a Pod document uses a character not found in such a mapping, the
+formatter should consider it an unrenderable character.
+
+=item *
+
+If, surprisingly, the implementor of a Pod formatter can't find a
+satisfactory pre-existing table mapping from Unicode characters to
+escapes in the target format (e.g., a decent table of Unicode
+characters to *roff escapes), it will be necessary to build such a
+table. If you are in this circumstance, you should begin with the
+characters in the range 0x00A0 - 0x00FF, which is mostly the heavily
+used accented characters. Then proceed (as patience permits and
+fastidiousness compels) through the characters that the (X)HTML
+standards groups judged important enough to merit mnemonics
+for. These are declared in the (X)HTML specifications at the
+www.W3.org site. At time of writing (September 2001), the most recent
+entity declaration files are:
+
+ http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
+ http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent
+ http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent
+
+Then you can progress through any remaining notable Unicode characters
+in the range 0x2000-0x204D (consult the character tables at
+www.unicode.org), and whatever else strikes your fancy. For example,
+in F<xhtml-symbol.ent>, there is the entry:
+
+ <!ENTITY infin "∞"> <!-- infinity, U+221E ISOtech -->
+
+While the mapping "infin" to the character "\x{221E}" will (hopefully)
+have been already handled by the Pod parser, the presence of the
+character in this file means that it's reasonably important enough to
+include in a formatter's table that maps from notable Unicode characters
+to the codes necessary for rendering them. So for a Unicode-to-*roff
+mapping, for example, this would merit the entry:
+
+ "\x{221E}" => '\(in',
+
+It is eagerly hoped that in the future, increasing numbers of formats
+(and formatters) will support Unicode characters directly (as (X)HTML
+does with C<∞>, C<∞>, or C<∞>), reducing the need
+for idiosyncratic mappings of Unicode-to-I<my_escapes>.
+
+=item *
+
+It is up to individual Pod formatter to display good judgement when
+confronted with an unrenderable character (which is distinct from an
+unknown EE<lt>thing> sequence that the parser couldn't resolve to
+anything, renderable or not). It is good practice to map Latin letters
+with diacritics (like "EE<lt>eacute>"/"EE<lt>233>") to the corresponding
+unaccented US-ASCII letters (like a simple character 101, "e"), but
+clearly this is often not feasible, and an unrenderable character may
+be represented as "?", or the like. In attempting a sane fallback
+(as from EE<lt>233> to "e"), Pod formatters may use the
+%Latin1Code_to_fallback table in L<Pod::Escapes|Pod::Escapes>, or
+L<Text::Unidecode|Text::Unidecode>, if available.
+
+For example, this Pod text:
+
+ magic is enabled if you set C<$Currency> to 'E<euro>'.
+
+may be rendered as:
+"magic is enabled if you set C<$Currency> to 'I<?>'" or as
+"magic is enabled if you set C<$Currency> to 'B<[euro]>'", or as
+"magic is enabled if you set C<$Currency> to '[x20AC]', etc.
+
+A Pod formatter may also note, in a comment or warning, a list of what
+unrenderable characters were encountered.
+
+=item *
+
+EE<lt>...> may freely appear in any formatting code (other than
+in another EE<lt>...> or in an ZE<lt>>). That is, "XE<lt>The
+EE<lt>euro>1,000,000 Solution>" is valid, as is "LE<lt>The
+EE<lt>euro>1,000,000 Solution|Million::Euros>".
+
+=item *
+
+Some Pod formatters output to formats that implement non-breaking
+spaces as an individual character (which I'll call "NBSP"), and
+others output to formats that implement non-breaking spaces just as
+spaces wrapped in a "don't break this across lines" code. Note that
+at the level of Pod, both sorts of codes can occur: Pod can contain a
+NBSP character (whether as a literal, or as a "EE<lt>160>" or
+"EE<lt>nbsp>" code); and Pod can contain "SE<lt>foo
+IE<lt>barE<gt> baz>" codes, where "mere spaces" (character 32) in
+such codes are taken to represent non-breaking spaces. Pod
+parsers should consider supporting the optional parsing of "SE<lt>foo
+IE<lt>barE<gt> baz>" as if it were
+"fooI<NBSP>IE<lt>barE<gt>I<NBSP>baz", and, going the other way, the
+optional parsing of groups of words joined by NBSP's as if each group
+were in a SE<lt>...> code, so that formatters may use the
+representation that maps best to what the output format demands.
+
+=item *
+
+Some processors may find that the C<SE<lt>...E<gt>> code is easiest to
+implement by replacing each space in the parse tree under the content
+of the S, with an NBSP. But note: the replacement should apply I<not> to
+spaces in I<all> text, but I<only> to spaces in I<printable> text. (This
+distinction may or may not be evident in the particular tree/event
+model implemented by the Pod parser.) For example, consider this
+unusual case:
+
+ S<L</Autoloaded Functions>>
+
+This means that the space in the middle of the visible link text must
+not be broken across lines. In other words, it's the same as this:
+
+ L<"AutoloadedE<160>Functions"/Autoloaded Functions>
+
+However, a misapplied space-to-NBSP replacement could (wrongly)
+produce something equivalent to this:
+
+ L<"AutoloadedE<160>Functions"/AutoloadedE<160>Functions>
+
+...which is almost definitely not going to work as a hyperlink (assuming
+this formatter outputs a format supporting hypertext).
+
+Formatters may choose to just not support the S format code,
+especially in cases where the output format simply has no NBSP
+character/code and no code for "don't break this stuff across lines".
+
+=item *
+
+Besides the NBSP character discussed above, implementors are reminded
+of the existence of the other "special" character in Latin-1, the
+"soft hyphen" character, also known as "discretionary hyphen",
+i.e. C<EE<lt>173E<gt>> = C<EE<lt>0xADE<gt>> =
+C<EE<lt>shyE<gt>>). This character expresses an optional hyphenation
+point. That is, it normally renders as nothing, but may render as a
+"-" if a formatter breaks the word at that point. Pod formatters
+should, as appropriate, do one of the following: 1) render this with
+a code with the same meaning (e.g., "\-" in RTF), 2) pass it through
+in the expectation that the formatter understands this character as
+such, or 3) delete it.
+
+For example:
+
+ sigE<shy>action
+ manuE<shy>script
+ JarkE<shy>ko HieE<shy>taE<shy>nieE<shy>mi
+
+These signal to a formatter that if it is to hyphenate "sigaction"
+or "manuscript", then it should be done as
+"sig-I<[linebreak]>action" or "manu-I<[linebreak]>script"
+(and if it doesn't hyphenate it, then the C<EE<lt>shyE<gt>> doesn't
+show up at all). And if it is
+to hyphenate "Jarkko" and/or "Hietaniemi", it can do
+so only at the points where there is a C<EE<lt>shyE<gt>> code.
+
+In practice, it is anticipated that this character will not be used
+often, but formatters should either support it, or delete it.
+
+=item *
+
+If you think that you want to add a new command to Pod (like, say, a
+"=biblio" command), consider whether you could get the same
+effect with a for or begin/end sequence: "=for biblio ..." or "=begin
+biblio" ... "=end biblio". Pod processors that don't understand
+"=for biblio", etc, will simply ignore it, whereas they may complain
+loudly if they see "=biblio".
+
+=item *
+
+Throughout this document, "Pod" has been the preferred spelling for
+the name of the documentation format. One may also use "POD" or
+"pod". For the documentation that is (typically) in the Pod
+format, you may use "pod", or "Pod", or "POD". Understanding these
+distinctions is useful; but obsessing over how to spell them, usually
+is not.
+
+=back
+
+
+
+
+
+=head1 About LE<lt>...E<gt> Codes
+
+As you can tell from a glance at L<perlpod|perlpod>, the LE<lt>...>
+code is the most complex of the Pod formatting codes. The points below
+will hopefully clarify what it means and how processors should deal
+with it.
+
+=over
+
+=item *
+
+In parsing an LE<lt>...> code, Pod parsers must distinguish at least
+four attributes:
+
+=over
+
+=item First:
+
+The link-text. If there is none, this must be undef. (E.g., in
+"LE<lt>Perl Functions|perlfunc>", the link-text is "Perl Functions".
+In "LE<lt>Time::HiRes>" and even "LE<lt>|Time::HiRes>", there is no
+link text. Note that link text may contain formatting.)
+
+=item Second:
+
+The possibly inferred link-text -- i.e., if there was no real link
+text, then this is the text that we'll infer in its place. (E.g., for
+"LE<lt>Getopt::Std>", the inferred link text is "Getopt::Std".)
+
+=item Third:
+
+The name or URL, or undef if none. (E.g., in "LE<lt>Perl
+Functions|perlfunc>", the name -- also sometimes called the page --
+is "perlfunc". In "LE<lt>/CAVEATS>", the name is undef.)
+
+=item Fourth:
+
+The section (AKA "item" in older perlpods), or undef if none. E.g.,
+in "LE<lt>Getopt::Std/DESCRIPTIONE<gt>", "DESCRIPTION" is the section. (Note
+that this is not the same as a manpage section like the "5" in "man 5
+crontab". "Section Foo" in the Pod sense means the part of the text
+that's introduced by the heading or item whose text is "Foo".)
+
+=back
+
+Pod parsers may also note additional attributes including:
+
+=over
+
+=item Fifth:
+
+A flag for whether item 3 (if present) is a URL (like
+"http://lists.perl.org" is), in which case there should be no section
+attribute; a Pod name (like "perldoc" and "Getopt::Std" are); or
+possibly a man page name (like "crontab(5)" is).
+
+=item Sixth:
+
+The raw original LE<lt>...> content, before text is split on
+"|", "/", etc, and before EE<lt>...> codes are expanded.
+
+=back
+
+(The above were numbered only for concise reference below. It is not
+a requirement that these be passed as an actual list or array.)
+
+For example:
+
+ L<Foo::Bar>
+ => undef, # link text
+ "Foo::Bar", # possibly inferred link text
+ "Foo::Bar", # name
+ undef, # section
+ 'pod', # what sort of link
+ "Foo::Bar" # original content
+
+ L<Perlport's section on NL's|perlport/Newlines>
+ => "Perlport's section on NL's", # link text
+ "Perlport's section on NL's", # possibly inferred link text
+ "perlport", # name
+ "Newlines", # section
+ 'pod', # what sort of link
+ "Perlport's section on NL's|perlport/Newlines" # orig. content
+
+ L<perlport/Newlines>
+ => undef, # link text
+ '"Newlines" in perlport', # possibly inferred link text
+ "perlport", # name
+ "Newlines", # section
+ 'pod', # what sort of link
+ "perlport/Newlines" # original content
+
+ L<crontab(5)/"DESCRIPTION">
+ => undef, # link text
+ '"DESCRIPTION" in crontab(5)', # possibly inferred link text
+ "crontab(5)", # name
+ "DESCRIPTION", # section
+ 'man', # what sort of link
+ 'crontab(5)/"DESCRIPTION"' # original content
+
+ L</Object Attributes>
+ => undef, # link text
+ '"Object Attributes"', # possibly inferred link text
+ undef, # name
+ "Object Attributes", # section
+ 'pod', # what sort of link
+ "/Object Attributes" # original content
+
+ L<http://www.perl.org/>
+ => undef, # link text
+ "http://www.perl.org/", # possibly inferred link text
+ "http://www.perl.org/", # name
+ undef, # section
+ 'url', # what sort of link
+ "http://www.perl.org/" # original content
+
+Note that you can distinguish URL-links from anything else by the
+fact that they match C<m/\A\w+:[^:\s]\S*\z/>. So
+C<LE<lt>http://www.perl.comE<gt>> is a URL, but
+C<LE<lt>HTTP::ResponseE<gt>> isn't.
+
+=item *
+
+In case of LE<lt>...> codes with no "text|" part in them,
+older formatters have exhibited great variation in actually displaying
+the link or cross reference. For example, LE<lt>crontab(5)> would render
+as "the C<crontab(5)> manpage", or "in the C<crontab(5)> manpage"
+or just "C<crontab(5)>".
+
+Pod processors must now treat "text|"-less links as follows:
+
+ L<name> => L<name|name>
+ L</section> => L<"section"|/section>
+ L<name/section> => L<"section" in name|name/section>
+
+=item *
+
+Note that section names might contain markup. I.e., if a section
+starts with:
+
+ =head2 About the C<-M> Operator
+
+or with:
+
+ =item About the C<-M> Operator
+
+then a link to it would look like this:
+
+ L<somedoc/About the C<-M> Operator>
+
+Formatters may choose to ignore the markup for purposes of resolving
+the link and use only the renderable characters in the section name,
+as in:
+
+ <h1><a name="About_the_-M_Operator">About the <code>-M</code>
+ Operator</h1>
+
+ ...
+
+ <a href="somedoc#About_the_-M_Operator">About the <code>-M</code>
+ Operator" in somedoc</a>
+
+=item *
+
+Previous versions of perlpod distinguished C<LE<lt>name/"section"E<gt>>
+links from C<LE<lt>name/itemE<gt>> links (and their targets). These
+have been merged syntactically and semantically in the current
+specification, and I<section> can refer either to a "=headI<n> Heading
+Content" command or to a "=item Item Content" command. This
+specification does not specify what behavior should be in the case
+of a given document having several things all seeming to produce the
+same I<section> identifier (e.g., in HTML, several things all producing
+the same I<anchorname> in <a name="I<anchorname>">...</a>
+elements). Where Pod processors can control this behavior, they should
+use the first such anchor. That is, C<LE<lt>Foo/BarE<gt>> refers to the
+I<first> "Bar" section in Foo.
+
+But for some processors/formats this cannot be easily controlled; as
+with the HTML example, the behavior of multiple ambiguous
+<a name="I<anchorname>">...</a> is most easily just left up to
+browsers to decide.
+
+=item *
+
+Authors wanting to link to a particular (absolute) URL, must do so
+only with "LE<lt>scheme:...>" codes (like
+LE<lt>http://www.perl.org>), and must not attempt "LE<lt>Some Site
+Name|scheme:...>" codes. This restriction avoids many problems
+in parsing and rendering LE<lt>...> codes.
+
+=item *
+
+In a C<LE<lt>text|...E<gt>> code, text may contain formatting codes
+for formatting or for EE<lt>...> escapes, as in:
+
+ L<B<ummE<234>stuff>|...>
+
+For C<LE<lt>...E<gt>> codes without a "name|" part, only
+C<EE<lt>...E<gt>> and C<ZE<lt>E<gt>> codes may occur -- no
+other formatting codes. That is, authors should not use
+"C<LE<lt>BE<lt>Foo::BarE<gt>E<gt>>".
+
+Note, however, that formatting codes and ZE<lt>>'s can occur in any
+and all parts of an LE<lt>...> (i.e., in I<name>, I<section>, I<text>,
+and I<url>).
+
+Authors must not nest LE<lt>...> codes. For example, "LE<lt>The
+LE<lt>Foo::Bar> man page>" should be treated as an error.
+
+=item *
+
+Note that Pod authors may use formatting codes inside the "text"
+part of "LE<lt>text|name>" (and so on for LE<lt>text|/"sec">).
+
+In other words, this is valid:
+
+ Go read L<the docs on C<$.>|perlvar-copy/"$.">
+
+Some output formats that do allow rendering "LE<lt>...>" codes as
+hypertext, might not allow the link-text to be formatted; in
+that case, formatters will have to just ignore that formatting.
+
+=item *
+
+At time of writing, C<LE<lt>nameE<gt>> values are of two types:
+either the name of a Pod page like C<LE<lt>Foo::BarE<gt>> (which
+might be a real Perl module or program in an @INC / PATH
+directory, or a .pod file in those places); or the name of a UNIX
+man page, like C<LE<lt>crontab(5)E<gt>>. In theory, C<LE<lt>chmodE<gt>>
+in ambiguous between a Pod page called "chmod", or the Unix man page
+"chmod" (in whatever man-section). However, the presence of a string
+in parens, as in "crontab(5)", is sufficient to signal that what
+is being discussed is not a Pod page, and so is presumably a
+UNIX man page. The distinction is of no importance to many
+Pod processors, but some processors that render to hypertext formats
+may need to distinguish them in order to know how to render a
+given C<LE<lt>fooE<gt>> code.
+
+=item *
+
+Previous versions of perlpod allowed for a C<LE<lt>sectionE<gt>> syntax
+(as in C<LE<lt>Object AttributesE<gt>>), which was not easily distinguishable
+from C<LE<lt>nameE<gt>> syntax. This syntax is no longer in the
+specification, and has been replaced by the C<LE<lt>"section"E<gt>> syntax
+(where the quotes were formerly optional). Pod parsers should tolerate
+the C<LE<lt>sectionE<gt>> syntax, for a while at least. The suggested
+heuristic for distinguishing C<LE<lt>sectionE<gt>> from C<LE<lt>nameE<gt>>
+is that if it contains any whitespace, it's a I<section>. Pod processors
+may warn about this being deprecated syntax.
+
+=back
+
+=head1 About =over...=back Regions
+
+"=over"..."=back" regions are used for various kinds of list-like
+structures. (I use the term "region" here simply as a collective
+term for everything from the "=over" to the matching "=back".)
+
+=over
+
+=item *
+
+The non-zero numeric I<indentlevel> in "=over I<indentlevel>" ...
+"=back" is used for giving the formatter a clue as to how many
+"spaces" (ems, or roughly equivalent units) it should tab over,
+although many formatters will have to convert this to an absolute
+measurement that may not exactly match with the size of spaces (or M's)
+in the document's base font. Other formatters may have to completely
+ignore the number. The lack of any explicit I<indentlevel> parameter is
+equivalent to an I<indentlevel> value of 4. Pod processors may
+complain if I<indentlevel> is present but is not a positive number
+matching C<m/\A(\d*\.)?\d+\z/>.
+
+=item *
+
+Authors of Pod formatters are reminded that "=over" ... "=back" may
+map to several different constructs in your output format. For
+example, in converting Pod to (X)HTML, it can map to any of
+<ul>...</ul>, <ol>...</ol>, <dl>...</dl>, or
+<blockquote>...</blockquote>. Similarly, "=item" can map to <li> or
+<dt>.
+
+=item *
+
+Each "=over" ... "=back" region should be one of the following:
+
+=over
+
+=item *
+
+An "=over" ... "=back" region containing only "=item *" commands,
+each followed by some number of ordinary/verbatim paragraphs, other
+nested "=over" ... "=back" regions, "=for..." paragraphs, and
+"=begin"..."=end" regions.
+
+(Pod processors must tolerate a bare "=item" as if it were "=item
+*".) Whether "*" is rendered as a literal asterisk, an "o", or as
+some kind of real bullet character, is left up to the Pod formatter,
+and may depend on the level of nesting.
+
+=item *
+
+An "=over" ... "=back" region containing only
+C<m/\A=item\s+\d+\.?\s*\z/> paragraphs, each one (or each group of them)
+followed by some number of ordinary/verbatim paragraphs, other nested
+"=over" ... "=back" regions, "=for..." paragraphs, and/or
+"=begin"..."=end" codes. Note that the numbers must start at 1
+in each section, and must proceed in order and without skipping
+numbers.
+
+(Pod processors must tolerate lines like "=item 1" as if they were
+"=item 1.", with the period.)
+
+=item *
+
+An "=over" ... "=back" region containing only "=item [text]"
+commands, each one (or each group of them) followed by some number of
+ordinary/verbatim paragraphs, other nested "=over" ... "=back"
+regions, or "=for..." paragraphs, and "=begin"..."=end" regions.
+
+The "=item [text]" paragraph should not match
+C<m/\A=item\s+\d+\.?\s*\z/> or C<m/\A=item\s+\*\s*\z/>, nor should it
+match just C<m/\A=item\s*\z/>.
+
+=item *
+
+An "=over" ... "=back" region containing no "=item" paragraphs at
+all, and containing only some number of
+ordinary/verbatim paragraphs, and possibly also some nested "=over"
+... "=back" regions, "=for..." paragraphs, and "=begin"..."=end"
+regions. Such an itemless "=over" ... "=back" region in Pod is
+equivalent in meaning to a "<blockquote>...</blockquote>" element in
+HTML.
+
+=back
+
+Note that with all the above cases, you can determine which type of
+"=over" ... "=back" you have, by examining the first (non-"=cut",
+non-"=pod") Pod paragraph after the "=over" command.
+
+=item *
+
+Pod formatters I<must> tolerate arbitrarily large amounts of text
+in the "=item I<text...>" paragraph. In practice, most such
+paragraphs are short, as in:
+
+ =item For cutting off our trade with all parts of the world
+
+But they may be arbitrarily long:
+
+ =item For transporting us beyond seas to be tried for pretended
+ offenses
+
+ =item He is at this time transporting large armies of foreign
+ mercenaries to complete the works of death, desolation and
+ tyranny, already begun with circumstances of cruelty and perfidy
+ scarcely paralleled in the most barbarous ages, and totally
+ unworthy the head of a civilized nation.
+
+=item *
+
+Pod processors should tolerate "=item *" / "=item I<number>" commands
+with no accompanying paragraph. The middle item is an example:
+
+ =over
+
+ =item 1
+
+ Pick up dry cleaning.
+
+ =item 2
+
+ =item 3
+
+ Stop by the store. Get Abba Zabas, Stoli, and cheap lawn chairs.
+
+ =back
+
+=item *
+
+No "=over" ... "=back" region can contain headings. Processors may
+treat such a heading as an error.
+
+=item *
+
+Note that an "=over" ... "=back" region should have some
+content. That is, authors should not have an empty region like this:
+
+ =over
+
+ =back
+
+Pod processors seeing such a contentless "=over" ... "=back" region,
+may ignore it, or may report it as an error.
+
+=item *
+
+Processors must tolerate an "=over" list that goes off the end of the
+document (i.e., which has no matching "=back"), but they may warn
+about such a list.
+
+=item *
+
+Authors of Pod formatters should note that this construct:
+
+ =item Neque
+
+ =item Porro
+
+ =item Quisquam Est
+
+ Qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
+ velit, sed quia non numquam eius modi tempora incidunt ut
+ labore et dolore magnam aliquam quaerat voluptatem.
+
+ =item Ut Enim
+
+is semantically ambiguous, in a way that makes formatting decisions
+a bit difficult. On the one hand, it could be mention of an item
+"Neque", mention of another item "Porro", and mention of another
+item "Quisquam Est", with just the last one requiring the explanatory
+paragraph "Qui dolorem ipsum quia dolor..."; and then an item
+"Ut Enim". In that case, you'd want to format it like so:
+
+ Neque
+
+ Porro
+
+ Quisquam Est
+ Qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
+ velit, sed quia non numquam eius modi tempora incidunt ut
+ labore et dolore magnam aliquam quaerat voluptatem.
+
+ Ut Enim
+
+But it could equally well be a discussion of three (related or equivalent)
+items, "Neque", "Porro", and "Quisquam Est", followed by a paragraph
+explaining them all, and then a new item "Ut Enim". In that case, you'd
+probably want to format it like so:
+
+ Neque
+ Porro
+ Quisquam Est
+ Qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
+ velit, sed quia non numquam eius modi tempora incidunt ut
+ labore et dolore magnam aliquam quaerat voluptatem.
+
+ Ut Enim
+
+But (for the foreseeable future), Pod does not provide any way for Pod
+authors to distinguish which grouping is meant by the above
+"=item"-cluster structure. So formatters should format it like so:
+
+ Neque
+
+ Porro
+
+ Quisquam Est
+
+ Qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
+ velit, sed quia non numquam eius modi tempora incidunt ut
+ labore et dolore magnam aliquam quaerat voluptatem.
+
+ Ut Enim
+
+That is, there should be (at least roughly) equal spacing between
+items as between paragraphs (although that spacing may well be less
+than the full height of a line of text). This leaves it to the reader
+to use (con)textual cues to figure out whether the "Qui dolorem
+ipsum..." paragraph applies to the "Quisquam Est" item or to all three
+items "Neque", "Porro", and "Quisquam Est". While not an ideal
+situation, this is preferable to providing formatting cues that may
+be actually contrary to the author's intent.
+
+=back
+
+
+
+=head1 About Data Paragraphs and "=begin/=end" Regions
+
+Data paragraphs are typically used for inlining non-Pod data that is
+to be used (typically passed through) when rendering the document to
+a specific format:
+
+ =begin rtf
+
+ \par{\pard\qr\sa4500{\i Printed\~\chdate\~\chtime}\par}
+
+ =end rtf
+
+The exact same effect could, incidentally, be achieved with a single
+"=for" paragraph:
+
+ =for rtf \par{\pard\qr\sa4500{\i Printed\~\chdate\~\chtime}\par}
+
+(Although that is not formally a data paragraph, it has the same
+meaning as one, and Pod parsers may parse it as one.)
+
+Another example of a data paragraph:
+
+ =begin html
+
+ I like <em>PIE</em>!
+
+ <hr>Especially pecan pie!
+
+ =end html
+
+If these were ordinary paragraphs, the Pod parser would try to
+expand the "EE<lt>/em>" (in the first paragraph) as a formatting
+code, just like "EE<lt>lt>" or "EE<lt>eacute>". But since this
+is in a "=begin I<identifier>"..."=end I<identifier>" region I<and>
+the identifier "html" doesn't begin have a ":" prefix, the contents
+of this region are stored as data paragraphs, instead of being
+processed as ordinary paragraphs (or if they began with a spaces
+and/or tabs, as verbatim paragraphs).
+
+As a further example: At time of writing, no "biblio" identifier is
+supported, but suppose some processor were written to recognize it as
+a way of (say) denoting a bibliographic reference (necessarily
+containing formatting codes in ordinary paragraphs). The fact that
+"biblio" paragraphs were meant for ordinary processing would be
+indicated by prefacing each "biblio" identifier with a colon:
+
+ =begin :biblio
+
+ Wirth, Niklaus. 1976. I<Algorithms + Data Structures =
+ Programs.> Prentice-Hall, Englewood Cliffs, NJ.
+
+ =end :biblio
+
+This would signal to the parser that paragraphs in this begin...end
+region are subject to normal handling as ordinary/verbatim paragraphs
+(while still tagged as meant only for processors that understand the
+"biblio" identifier). The same effect could be had with:
+
+ =for :biblio
+ Wirth, Niklaus. 1976. I<Algorithms + Data Structures =
+ Programs.> Prentice-Hall, Englewood Cliffs, NJ.
+
+The ":" on these identifiers means simply "process this stuff
+normally, even though the result will be for some special target".
+I suggest that parser APIs report "biblio" as the target identifier,
+but also report that it had a ":" prefix. (And similarly, with the
+above "html", report "html" as the target identifier, and note the
+I<lack> of a ":" prefix.)
+
+Note that a "=begin I<identifier>"..."=end I<identifier>" region where
+I<identifier> begins with a colon, I<can> contain commands. For example:
+
+ =begin :biblio
+
+ Wirth's classic is available in several editions, including:
+
+ =for comment
+ hm, check abebooks.com for how much used copies cost.
+
+ =over
+
+ =item
+
+ Wirth, Niklaus. 1975. I<Algorithmen und Datenstrukturen.>
+ Teubner, Stuttgart. [Yes, it's in German.]
+
+ =item
+
+ Wirth, Niklaus. 1976. I<Algorithms + Data Structures =
+ Programs.> Prentice-Hall, Englewood Cliffs, NJ.
+
+ =back
+
+ =end :biblio
+
+Note, however, a "=begin I<identifier>"..."=end I<identifier>"
+region where I<identifier> does I<not> begin with a colon, should not
+directly contain "=head1" ... "=head4" commands, nor "=over", nor "=back",
+nor "=item". For example, this may be considered invalid:
+
+ =begin somedata
+
+ This is a data paragraph.
+
+ =head1 Don't do this!
+
+ This is a data paragraph too.
+
+ =end somedata
+
+A Pod processor may signal that the above (specifically the "=head1"
+paragraph) is an error. Note, however, that the following should
+I<not> be treated as an error:
+
+ =begin somedata
+
+ This is a data paragraph.
+
+ =cut
+
+ # Yup, this isn't Pod anymore.
+ sub excl { (rand() > .5) ? "hoo!" : "hah!" }
+
+ =pod
+
+ This is a data paragraph too.
+
+ =end somedata
+
+And this too is valid:
+
+ =begin someformat
+
+ This is a data paragraph.
+
+ And this is a data paragraph.
+
+ =begin someotherformat
+
+ This is a data paragraph too.
+
+ And this is a data paragraph too.
+
+ =begin :yetanotherformat
+
+ =head2 This is a command paragraph!
+
+ This is an ordinary paragraph!
+
+ And this is a verbatim paragraph!
+
+ =end :yetanotherformat
+
+ =end someotherformat
+
+ Another data paragraph!
+
+ =end someformat
+
+The contents of the above "=begin :yetanotherformat" ...
+"=end :yetanotherformat" region I<aren't> data paragraphs, because
+the immediately containing region's identifier (":yetanotherformat")
+begins with a colon. In practice, most regions that contain
+data paragraphs will contain I<only> data paragraphs; however,
+the above nesting is syntactically valid as Pod, even if it is
+rare. However, the handlers for some formats, like "html",
+will accept only data paragraphs, not nested regions; and they may
+complain if they see (targeted for them) nested regions, or commands,
+other than "=end", "=pod", and "=cut".
+
+Also consider this valid structure:
+
+ =begin :biblio
+
+ Wirth's classic is available in several editions, including:
+
+ =over
+
+ =item
+
+ Wirth, Niklaus. 1975. I<Algorithmen und Datenstrukturen.>
+ Teubner, Stuttgart. [Yes, it's in German.]
+
+ =item
+
+ Wirth, Niklaus. 1976. I<Algorithms + Data Structures =
+ Programs.> Prentice-Hall, Englewood Cliffs, NJ.
+
+ =back
+
+ Buy buy buy!
+
+ =begin html
+
+ <img src='wirth_spokesmodeling_book.png'>
+
+ <hr>
+
+ =end html
+
+ Now now now!
+
+ =end :biblio
+
+There, the "=begin html"..."=end html" region is nested inside
+the larger "=begin :biblio"..."=end :biblio" region. Note that the
+content of the "=begin html"..."=end html" region is data
+paragraph(s), because the immediately containing region's identifier
+("html") I<doesn't> begin with a colon.
+
+Pod parsers, when processing a series of data paragraphs one
+after another (within a single region), should consider them to
+be one large data paragraph that happens to contain blank lines. So
+the content of the above "=begin html"..."=end html" I<may> be stored
+as two data paragraphs (one consisting of
+"<img src='wirth_spokesmodeling_book.png'>\n"
+and another consisting of "<hr>\n"), but I<should> be stored as
+a single data paragraph (consisting of
+"<img src='wirth_spokesmodeling_book.png'>\n\n<hr>\n").
+
+Pod processors should tolerate empty
+"=begin I<something>"..."=end I<something>" regions,
+empty "=begin :I<something>"..."=end :I<something>" regions, and
+contentless "=for I<something>" and "=for :I<something>"
+paragraphs. I.e., these should be tolerated:
+
+ =for html
+
+ =begin html
+
+ =end html
+
+ =begin :biblio
+
+ =end :biblio
+
+Incidentally, note that there's no easy way to express a data
+paragraph starting with something that looks like a command. Consider:
+
+ =begin stuff
+
+ =shazbot
+
+ =end stuff
+
+There, "=shazbot" will be parsed as a Pod command "shazbot", not as a data
+paragraph "=shazbot\n". However, you can express a data paragraph consisting
+of "=shazbot\n" using this code:
+
+ =for stuff =shazbot
+
+The situation where this is necessary, is presumably quite rare.
+
+Note that =end commands must match the currently open =begin command. That
+is, they must properly nest. For example, this is valid:
+
+ =begin outer
+
+ X
+
+ =begin inner
+
+ Y
+
+ =end inner
+
+ Z
+
+ =end outer
+
+while this is invalid:
+
+ =begin outer
+
+ X
+
+ =begin inner
+
+ Y
+
+ =end outer
+
+ Z
+
+ =end inner
+
+This latter is improper because when the "=end outer" command is seen, the
+currently open region has the formatname "inner", not "outer". (It just
+happens that "outer" is the format name of a higher-up region.) This is
+an error. Processors must by default report this as an error, and may halt
+processing the document containing that error. A corollary of this is that
+regions cannot "overlap" -- i.e., the latter block above does not represent
+a region called "outer" which contains X and Y, overlapping a region called
+"inner" which contains Y and Z. But because it is invalid (as all
+apparently overlapping regions would be), it doesn't represent that, or
+anything at all.
+
+Similarly, this is invalid:
+
+ =begin thing
+
+ =end hting
+
+This is an error because the region is opened by "thing", and the "=end"
+tries to close "hting" [sic].
+
+This is also invalid:
+
+ =begin thing
+
+ =end
+
+This is invalid because every "=end" command must have a formatname
+parameter.
+
+=head1 SEE ALSO
+
+L<perlpod>, L<perlsyn/"PODs: Embedded Documentation">,
+L<podchecker>
+
+=head1 AUTHOR
+
+Sean M. Burke
+
+=cut
+
+
Added: vendor/perl/dist/ext/Pod-Html/testdir/perlvar-copy.pod
===================================================================
--- vendor/perl/dist/ext/Pod-Html/testdir/perlvar-copy.pod (rev 0)
+++ vendor/perl/dist/ext/Pod-Html/testdir/perlvar-copy.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1737 @@
+=head1 NAME
+
+perlvarcopy - Perl predefined variables
+
+=head1 DESCRIPTION
+
+=head2 Predefined Names
+
+The following names have special meaning to Perl. Most
+punctuation names have reasonable mnemonics, or analogs in the
+shells. Nevertheless, if you wish to use long variable names,
+you need only say
+
+ use English;
+
+at the top of your program. This aliases all the short names to the long
+names in the current package. Some even have medium names, generally
+borrowed from B<awk>. In general, it's best to use the
+
+ use English '-no_match_vars';
+
+invocation if you don't need $PREMATCH, $MATCH, or $POSTMATCH, as it avoids
+a certain performance hit with the use of regular expressions. See
+L<English>.
+
+Variables that depend on the currently selected filehandle may be set by
+calling an appropriate object method on the IO::Handle object, although
+this is less efficient than using the regular built-in variables. (Summary
+lines below for this contain the word HANDLE.) First you must say
+
+ use IO::Handle;
+
+after which you may use either
+
+ method HANDLE EXPR
+
+or more safely,
+
+ HANDLE->method(EXPR)
+
+Each method returns the old value of the IO::Handle attribute.
+The methods each take an optional EXPR, which, if supplied, specifies the
+new value for the IO::Handle attribute in question. If not supplied,
+most methods do nothing to the current value--except for
+autoflush(), which will assume a 1 for you, just to be different.
+
+Because loading in the IO::Handle class is an expensive operation, you should
+learn how to use the regular built-in variables.
+
+A few of these variables are considered "read-only". This means that if
+you try to assign to this variable, either directly or indirectly through
+a reference, you'll raise a run-time exception.
+
+You should be very careful when modifying the default values of most
+special variables described in this document. In most cases you want
+to localize these variables before changing them, since if you don't,
+the change may affect other modules which rely on the default values
+of the special variables that you have changed. This is one of the
+correct ways to read the whole file at once:
+
+ open my $fh, "<", "foo" or die $!;
+ local $/; # enable localized slurp mode
+ my $content = <$fh>;
+ close $fh;
+
+But the following code is quite bad:
+
+ open my $fh, "<", "foo" or die $!;
+ undef $/; # enable slurp mode
+ my $content = <$fh>;
+ close $fh;
+
+since some other module, may want to read data from some file in the
+default "line mode", so if the code we have just presented has been
+executed, the global value of C<$/> is now changed for any other code
+running inside the same Perl interpreter.
+
+Usually when a variable is localized you want to make sure that this
+change affects the shortest scope possible. So unless you are already
+inside some short C<{}> block, you should create one yourself. For
+example:
+
+ my $content = '';
+ open my $fh, "<", "foo" or die $!;
+ {
+ local $/;
+ $content = <$fh>;
+ }
+ close $fh;
+
+Here is an example of how your own code can go broken:
+
+ for (1..5){
+ nasty_break();
+ print "$_ ";
+ }
+ sub nasty_break {
+ $_ = 5;
+ # do something with $_
+ }
+
+You probably expect this code to print:
+
+ 1 2 3 4 5
+
+but instead you get:
+
+ 5 5 5 5 5
+
+Why? Because nasty_break() modifies C<$_> without localizing it
+first. The fix is to add local():
+
+ local $_ = 5;
+
+It's easy to notice the problem in such a short example, but in more
+complicated code you are looking for trouble if you don't localize
+changes to the special variables.
+
+The following list is ordered by scalar variables first, then the
+arrays, then the hashes.
+
+=over 8
+
+=item $ARG
+
+=item $_
+X<$_> X<$ARG>
+
+The default input and pattern-searching space. The following pairs are
+equivalent:
+
+ while (<>) {...} # equivalent only in while!
+ while (defined($_ = <>)) {...}
+
+ /^Subject:/
+ $_ =~ /^Subject:/
+
+ tr/a-z/A-Z/
+ $_ =~ tr/a-z/A-Z/
+
+ chomp
+ chomp($_)
+
+Here are the places where Perl will assume $_ even if you
+don't use it:
+
+=over 3
+
+=item *
+
+The following functions:
+
+abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, exp, glob,
+hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print,
+quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only),
+rmdir, sin, split (on its second argument), sqrt, stat, study, uc, ucfirst,
+unlink, unpack.
+
+=item *
+
+All file tests (C<-f>, C<-d>) except for C<-t>, which defaults to STDIN.
+See L<perlfunc/-X>
+
+
+=item *
+
+The pattern matching operations C<m//>, C<s///> and C<tr///> (aka C<y///>)
+when used without an C<=~> operator.
+
+=item *
+
+The default iterator variable in a C<foreach> loop if no other
+variable is supplied.
+
+=item *
+
+The implicit iterator variable in the grep() and map() functions.
+
+=item *
+
+The implicit variable of given().
+
+=item *
+
+The default place to put an input record when a C<< <FH> >>
+operation's result is tested by itself as the sole criterion of a C<while>
+test. Outside a C<while> test, this will not happen.
+
+=back
+
+As C<$_> is a global variable, this may lead in some cases to unwanted
+side-effects. As of perl 5.9.1, you can now use a lexical version of
+C<$_> by declaring it in a file or in a block with C<my>. Moreover,
+declaring C<our $_> restores the global C<$_> in the current scope.
+
+(Mnemonic: underline is understood in certain operations.)
+
+=back
+
+=over 8
+
+=item $a
+
+=item $b
+X<$a> X<$b>
+
+Special package variables when using sort(), see L<perlfunc/sort>.
+Because of this specialness $a and $b don't need to be declared
+(using use vars, or our()) even when using the C<strict 'vars'> pragma.
+Don't lexicalize them with C<my $a> or C<my $b> if you want to be
+able to use them in the sort() comparison block or function.
+
+=back
+
+=over 8
+
+=item $<I<digits>>
+X<$1> X<$2> X<$3>
+
+Contains the subpattern from the corresponding set of capturing
+parentheses from the last pattern match, not counting patterns
+matched in nested blocks that have been exited already. (Mnemonic:
+like \digits.) These variables are all read-only and dynamically
+scoped to the current BLOCK.
+
+=item $MATCH
+
+=item $&
+X<$&> X<$MATCH>
+
+The string matched by the last successful pattern match (not counting
+any matches hidden within a BLOCK or eval() enclosed by the current
+BLOCK). (Mnemonic: like & in some editors.) This variable is read-only
+and dynamically scoped to the current BLOCK.
+
+The use of this variable anywhere in a program imposes a considerable
+performance penalty on all regular expression matches. See L</BUGS>.
+
+See L</@-> for a replacement.
+
+=item ${^MATCH}
+X<${^MATCH}>
+
+This is similar to C<$&> (C<$MATCH>) except that it does not incur the
+performance penalty associated with that variable, and is only guaranteed
+to return a defined value when the pattern was compiled or executed with
+the C</p> modifier.
+
+=item $PREMATCH
+
+=item $`
+X<$`> X<$PREMATCH>
+
+The string preceding whatever was matched by the last successful
+pattern match (not counting any matches hidden within a BLOCK or eval
+enclosed by the current BLOCK). (Mnemonic: C<`> often precedes a quoted
+string.) This variable is read-only.
+
+The use of this variable anywhere in a program imposes a considerable
+performance penalty on all regular expression matches. See L</BUGS>.
+
+See L</@-> for a replacement.
+
+=item ${^PREMATCH}
+X<${^PREMATCH}>
+
+This is similar to C<$`> ($PREMATCH) except that it does not incur the
+performance penalty associated with that variable, and is only guaranteed
+to return a defined value when the pattern was compiled or executed with
+the C</p> modifier.
+
+=item $POSTMATCH
+
+=item $'
+X<$'> X<$POSTMATCH>
+
+The string following whatever was matched by the last successful
+pattern match (not counting any matches hidden within a BLOCK or eval()
+enclosed by the current BLOCK). (Mnemonic: C<'> often follows a quoted
+string.) Example:
+
+ local $_ = 'abcdefghi';
+ /def/;
+ print "$`:$&:$'\n"; # prints abc:def:ghi
+
+This variable is read-only and dynamically scoped to the current BLOCK.
+
+The use of this variable anywhere in a program imposes a considerable
+performance penalty on all regular expression matches. See L</BUGS>.
+
+See L</@-> for a replacement.
+
+=item ${^POSTMATCH}
+X<${^POSTMATCH}>
+
+This is similar to C<$'> (C<$POSTMATCH>) except that it does not incur the
+performance penalty associated with that variable, and is only guaranteed
+to return a defined value when the pattern was compiled or executed with
+the C</p> modifier.
+
+=item $LAST_PAREN_MATCH
+
+=item $+
+X<$+> X<$LAST_PAREN_MATCH>
+
+The text matched by the last bracket of the last successful search pattern.
+This is useful if you don't know which one of a set of alternative patterns
+matched. For example:
+
+ /Version: (.*)|Revision: (.*)/ && ($rev = $+);
+
+(Mnemonic: be positive and forward looking.)
+This variable is read-only and dynamically scoped to the current BLOCK.
+
+=item $LAST_SUBMATCH_RESULT
+
+=item $^N
+X<$^N>
+
+The text matched by the used group most-recently closed (i.e. the group
+with the rightmost closing parenthesis) of the last successful search
+pattern. (Mnemonic: the (possibly) Nested parenthesis that most
+recently closed.)
+
+This is primarily used inside C<(?{...})> blocks for examining text
+recently matched. For example, to effectively capture text to a variable
+(in addition to C<$1>, C<$2>, etc.), replace C<(...)> with
+
+ (?:(...)(?{ $var = $^N }))
+
+By setting and then using C<$var> in this way relieves you from having to
+worry about exactly which numbered set of parentheses they are.
+
+This variable is dynamically scoped to the current BLOCK.
+
+=item @LAST_MATCH_END
+
+=item @+
+X<@+> X<@LAST_MATCH_END>
+
+This array holds the offsets of the ends of the last successful
+submatches in the currently active dynamic scope. C<$+[0]> is
+the offset into the string of the end of the entire match. This
+is the same value as what the C<pos> function returns when called
+on the variable that was matched against. The I<n>th element
+of this array holds the offset of the I<n>th submatch, so
+C<$+[1]> is the offset past where $1 ends, C<$+[2]> the offset
+past where $2 ends, and so on. You can use C<$#+> to determine
+how many subgroups were in the last successful match. See the
+examples given for the C<@-> variable.
+
+=item %LAST_PAREN_MATCH
+
+=item %+
+X<%+>
+
+Similar to C<@+>, the C<%+> hash allows access to the named capture
+buffers, should they exist, in the last successful match in the
+currently active dynamic scope.
+
+For example, C<$+{foo}> is equivalent to C<$1> after the following match:
+
+ 'foo' =~ /(?<foo>foo)/;
+
+The keys of the C<%+> hash list only the names of buffers that have
+captured (and that are thus associated to defined values).
+
+The underlying behaviour of C<%+> is provided by the
+L<Tie::Hash::NamedCapture> module.
+
+B<Note:> C<%-> and C<%+> are tied views into a common internal hash
+associated with the last successful regular expression. Therefore mixing
+iterative access to them via C<each> may have unpredictable results.
+Likewise, if the last successful match changes, then the results may be
+surprising.
+
+=item HANDLE->input_line_number(EXPR)
+
+=item $INPUT_LINE_NUMBER
+
+=item $NR
+
+=item $.
+X<$.> X<$NR> X<$INPUT_LINE_NUMBER> X<line number>
+
+Current line number for the last filehandle accessed.
+
+Each filehandle in Perl counts the number of lines that have been read
+from it. (Depending on the value of C<$/>, Perl's idea of what
+constitutes a line may not match yours.) When a line is read from a
+filehandle (via readline() or C<< <> >>), or when tell() or seek() is
+called on it, C<$.> becomes an alias to the line counter for that
+filehandle.
+
+You can adjust the counter by assigning to C<$.>, but this will not
+actually move the seek pointer. I<Localizing C<$.> will not localize
+the filehandle's line count>. Instead, it will localize perl's notion
+of which filehandle C<$.> is currently aliased to.
+
+C<$.> is reset when the filehandle is closed, but B<not> when an open
+filehandle is reopened without an intervening close(). For more
+details, see L<perlop/"IE<sol>O Operators">. Because C<< <> >> never does
+an explicit close, line numbers increase across ARGV files (but see
+examples in L<perlfunc/eof>).
+
+You can also use C<< HANDLE->input_line_number(EXPR) >> to access the
+line counter for a given filehandle without having to worry about
+which handle you last accessed.
+
+(Mnemonic: many programs use "." to mean the current line number.)
+
+=item IO::Handle->input_record_separator(EXPR)
+
+=item $INPUT_RECORD_SEPARATOR
+
+=item $RS
+
+=item $/
+X<$/> X<$RS> X<$INPUT_RECORD_SEPARATOR>
+
+The input record separator, newline by default. This
+influences Perl's idea of what a "line" is. Works like B<awk>'s RS
+variable, including treating empty lines as a terminator if set to
+the null string. (An empty line cannot contain any spaces
+or tabs.) You may set it to a multi-character string to match a
+multi-character terminator, or to C<undef> to read through the end
+of file. Setting it to C<"\n\n"> means something slightly
+different than setting to C<"">, if the file contains consecutive
+empty lines. Setting to C<""> will treat two or more consecutive
+empty lines as a single empty line. Setting to C<"\n\n"> will
+blindly assume that the next input character belongs to the next
+paragraph, even if it's a newline. (Mnemonic: / delimits
+line boundaries when quoting poetry.)
+
+ local $/; # enable "slurp" mode
+ local $_ = <FH>; # whole file now here
+ s/\n[ \t]+/ /g;
+
+Remember: the value of C<$/> is a string, not a regex. B<awk> has to be
+better for something. :-)
+
+Setting C<$/> to a reference to an integer, scalar containing an integer, or
+scalar that's convertible to an integer will attempt to read records
+instead of lines, with the maximum record size being the referenced
+integer. So this:
+
+ local $/ = \32768; # or \"32768", or \$var_containing_32768
+ open my $fh, "<", $myfile or die $!;
+ local $_ = <$fh>;
+
+will read a record of no more than 32768 bytes from FILE. If you're
+not reading from a record-oriented file (or your OS doesn't have
+record-oriented files), then you'll likely get a full chunk of data
+with every read. If a record is larger than the record size you've
+set, you'll get the record back in pieces. Trying to set the record
+size to zero or less will cause reading in the (rest of the) whole file.
+
+On VMS, record reads are done with the equivalent of C<sysread>,
+so it's best not to mix record and non-record reads on the same
+file. (This is unlikely to be a problem, because any file you'd
+want to read in record mode is probably unusable in line mode.)
+Non-VMS systems do normal I/O, so it's safe to mix record and
+non-record reads of a file.
+
+See also L<perlport/"Newlines">. Also see C<$.>.
+
+=item HANDLE->autoflush(EXPR)
+
+=item $OUTPUT_AUTOFLUSH
+
+=item $|
+X<$|> X<autoflush> X<flush> X<$OUTPUT_AUTOFLUSH>
+
+If set to nonzero, forces a flush right away and after every write
+or print on the currently selected output channel. Default is 0
+(regardless of whether the channel is really buffered by the
+system or not; C<$|> tells you only whether you've asked Perl
+explicitly to flush after each write). STDOUT will
+typically be line buffered if output is to the terminal and block
+buffered otherwise. Setting this variable is useful primarily when
+you are outputting to a pipe or socket, such as when you are running
+a Perl program under B<rsh> and want to see the output as it's
+happening. This has no effect on input buffering. See L<perlfunc/getc>
+for that. See L<perlfunc/select> on how to select the output channel.
+See also L<IO::Handle>. (Mnemonic: when you want your pipes to be piping hot.)
+
+=item IO::Handle->output_field_separator EXPR
+
+=item $OUTPUT_FIELD_SEPARATOR
+
+=item $OFS
+
+=item $,
+X<$,> X<$OFS> X<$OUTPUT_FIELD_SEPARATOR>
+
+The output field separator for the print operator. If defined, this
+value is printed between each of print's arguments. Default is C<undef>.
+(Mnemonic: what is printed when there is a "," in your print statement.)
+
+=item IO::Handle->output_record_separator EXPR
+
+=item $OUTPUT_RECORD_SEPARATOR
+
+=item $ORS
+
+=item $\
+X<$\> X<$ORS> X<$OUTPUT_RECORD_SEPARATOR>
+
+The output record separator for the print operator. If defined, this
+value is printed after the last of print's arguments. Default is C<undef>.
+(Mnemonic: you set C<$\> instead of adding "\n" at the end of the print.
+Also, it's just like C<$/>, but it's what you get "back" from Perl.)
+
+=item $LIST_SEPARATOR
+
+=item $"
+X<$"> X<$LIST_SEPARATOR>
+
+This is like C<$,> except that it applies to array and slice values
+interpolated into a double-quoted string (or similar interpreted
+string). Default is a space. (Mnemonic: obvious, I think.)
+
+=item $SUBSCRIPT_SEPARATOR
+
+=item $SUBSEP
+
+=item $;
+X<$;> X<$SUBSEP> X<SUBSCRIPT_SEPARATOR>
+
+The subscript separator for multidimensional array emulation. If you
+refer to a hash element as
+
+ $foo{$a,$b,$c}
+
+it really means
+
+ $foo{join($;, $a, $b, $c)}
+
+But don't put
+
+ @foo{$a,$b,$c} # a slice--note the @
+
+which means
+
+ ($foo{$a},$foo{$b},$foo{$c})
+
+Default is "\034", the same as SUBSEP in B<awk>. If your
+keys contain binary data there might not be any safe value for C<$;>.
+(Mnemonic: comma (the syntactic subscript separator) is a
+semi-semicolon. Yeah, I know, it's pretty lame, but C<$,> is already
+taken for something more important.)
+
+Consider using "real" multidimensional arrays as described
+in L<perllol>.
+
+=item HANDLE->format_page_number(EXPR)
+
+=item $FORMAT_PAGE_NUMBER
+
+=item $%
+X<$%> X<$FORMAT_PAGE_NUMBER>
+
+The current page number of the currently selected output channel.
+Used with formats.
+(Mnemonic: % is page number in B<nroff>.)
+
+=item HANDLE->format_lines_per_page(EXPR)
+
+=item $FORMAT_LINES_PER_PAGE
+
+=item $=
+X<$=> X<$FORMAT_LINES_PER_PAGE>
+
+The current page length (printable lines) of the currently selected
+output channel. Default is 60.
+Used with formats.
+(Mnemonic: = has horizontal lines.)
+
+=item HANDLE->format_lines_left(EXPR)
+
+=item $FORMAT_LINES_LEFT
+
+=item $-
+X<$-> X<$FORMAT_LINES_LEFT>
+
+The number of lines left on the page of the currently selected output
+channel.
+Used with formats.
+(Mnemonic: lines_on_page - lines_printed.)
+
+=item @LAST_MATCH_START
+
+=item @-
+X<@-> X<@LAST_MATCH_START>
+
+$-[0] is the offset of the start of the last successful match.
+C<$-[>I<n>C<]> is the offset of the start of the substring matched by
+I<n>-th subpattern, or undef if the subpattern did not match.
+
+Thus after a match against $_, $& coincides with C<substr $_, $-[0],
+$+[0] - $-[0]>. Similarly, $I<n> coincides with C<substr $_, $-[n],
+$+[n] - $-[n]> if C<$-[n]> is defined, and $+ coincides with
+C<substr $_, $-[$#-], $+[$#-] - $-[$#-]>. One can use C<$#-> to find the last
+matched subgroup in the last successful match. Contrast with
+C<$#+>, the number of subgroups in the regular expression. Compare
+with C<@+>.
+
+This array holds the offsets of the beginnings of the last
+successful submatches in the currently active dynamic scope.
+C<$-[0]> is the offset into the string of the beginning of the
+entire match. The I<n>th element of this array holds the offset
+of the I<n>th submatch, so C<$-[1]> is the offset where $1
+begins, C<$-[2]> the offset where $2 begins, and so on.
+
+After a match against some variable $var:
+
+=over 5
+
+=item C<$`> is the same as C<substr($var, 0, $-[0])>
+
+=item C<$&> is the same as C<substr($var, $-[0], $+[0] - $-[0])>
+
+=item C<$'> is the same as C<substr($var, $+[0])>
+
+=item C<$1> is the same as C<substr($var, $-[1], $+[1] - $-[1])>
+
+=item C<$2> is the same as C<substr($var, $-[2], $+[2] - $-[2])>
+
+=item C<$3> is the same as C<substr($var, $-[3], $+[3] - $-[3])>
+
+=back
+
+=item %-
+X<%->
+
+Similar to C<%+>, this variable allows access to the named capture buffers
+in the last successful match in the currently active dynamic scope. To
+each capture buffer name found in the regular expression, it associates a
+reference to an array containing the list of values captured by all
+buffers with that name (should there be several of them), in the order
+where they appear.
+
+Here's an example:
+
+ if ('1234' =~ /(?<A>1)(?<B>2)(?<A>3)(?<B>4)/) {
+ foreach my $bufname (sort keys %-) {
+ my $ary = $-{$bufname};
+ foreach my $idx (0..$#$ary) {
+ print "\$-{$bufname}[$idx] : ",
+ (defined($ary->[$idx]) ? "'$ary->[$idx]'" : "undef"),
+ "\n";
+ }
+ }
+ }
+
+would print out:
+
+ $-{A}[0] : '1'
+ $-{A}[1] : '3'
+ $-{B}[0] : '2'
+ $-{B}[1] : '4'
+
+The keys of the C<%-> hash correspond to all buffer names found in
+the regular expression.
+
+The behaviour of C<%-> is implemented via the
+L<Tie::Hash::NamedCapture> module.
+
+B<Note:> C<%-> and C<%+> are tied views into a common internal hash
+associated with the last successful regular expression. Therefore mixing
+iterative access to them via C<each> may have unpredictable results.
+Likewise, if the last successful match changes, then the results may be
+surprising.
+
+=item HANDLE->format_name(EXPR)
+
+=item $FORMAT_NAME
+
+=item $~
+X<$~> X<$FORMAT_NAME>
+
+The name of the current report format for the currently selected output
+channel. Default is the name of the filehandle. (Mnemonic: brother to
+C<$^>.)
+
+=item HANDLE->format_top_name(EXPR)
+
+=item $FORMAT_TOP_NAME
+
+=item $^
+X<$^> X<$FORMAT_TOP_NAME>
+
+The name of the current top-of-page format for the currently selected
+output channel. Default is the name of the filehandle with _TOP
+appended. (Mnemonic: points to top of page.)
+
+=item IO::Handle->format_line_break_characters EXPR
+
+=item $FORMAT_LINE_BREAK_CHARACTERS
+
+=item $:
+X<$:> X<FORMAT_LINE_BREAK_CHARACTERS>
+
+The current set of characters after which a string may be broken to
+fill continuation fields (starting with ^) in a format. Default is
+S<" \n-">, to break on whitespace or hyphens. (Mnemonic: a "colon" in
+poetry is a part of a line.)
+
+=item IO::Handle->format_formfeed EXPR
+
+=item $FORMAT_FORMFEED
+
+=item $^L
+X<$^L> X<$FORMAT_FORMFEED>
+
+What formats output as a form feed. Default is \f.
+
+=item $ACCUMULATOR
+
+=item $^A
+X<$^A> X<$ACCUMULATOR>
+
+The current value of the write() accumulator for format() lines. A format
+contains formline() calls that put their result into C<$^A>. After
+calling its format, write() prints out the contents of C<$^A> and empties.
+So you never really see the contents of C<$^A> unless you call
+formline() yourself and then look at it. See L<perlform> and
+L<formline|perlfunc/formline PICTURE,LIST>.
+
+=item $CHILD_ERROR
+
+=item $?
+X<$?> X<$CHILD_ERROR>
+
+The status returned by the last pipe close, backtick (C<``>) command,
+successful call to wait() or waitpid(), or from the system()
+operator. This is just the 16-bit status word returned by the
+traditional Unix wait() system call (or else is made up to look like it). Thus, the
+exit value of the subprocess is really (C<<< $? >> 8 >>>), and
+C<$? & 127> gives which signal, if any, the process died from, and
+C<$? & 128> reports whether there was a core dump. (Mnemonic:
+similar to B<sh> and B<ksh>.)
+
+Additionally, if the C<h_errno> variable is supported in C, its value
+is returned via $? if any C<gethost*()> function fails.
+
+If you have installed a signal handler for C<SIGCHLD>, the
+value of C<$?> will usually be wrong outside that handler.
+
+Inside an C<END> subroutine C<$?> contains the value that is going to be
+given to C<exit()>. You can modify C<$?> in an C<END> subroutine to
+change the exit status of your program. For example:
+
+ END {
+ $? = 1 if $? == 255; # die would make it 255
+ }
+
+Under VMS, the pragma C<use vmsish 'status'> makes C<$?> reflect the
+actual VMS exit status, instead of the default emulation of POSIX
+status; see L<perlvms/$?> for details.
+
+Also see L<Error Indicators>.
+
+=item ${^CHILD_ERROR_NATIVE}
+X<$^CHILD_ERROR_NATIVE>
+
+The native status returned by the last pipe close, backtick (C<``>)
+command, successful call to wait() or waitpid(), or from the system()
+operator. On POSIX-like systems this value can be decoded with the
+WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED, WSTOPSIG
+and WIFCONTINUED functions provided by the L<POSIX> module.
+
+Under VMS this reflects the actual VMS exit status; i.e. it is the same
+as $? when the pragma C<use vmsish 'status'> is in effect.
+
+=item ${^ENCODING}
+X<$^ENCODING>
+
+The I<object reference> to the Encode object that is used to convert
+the source code to Unicode. Thanks to this variable your perl script
+does not have to be written in UTF-8. Default is I<undef>. The direct
+manipulation of this variable is highly discouraged.
+
+=item $OS_ERROR
+
+=item $ERRNO
+
+=item $!
+X<$!> X<$ERRNO> X<$OS_ERROR>
+
+If used numerically, yields the current value of the C C<errno>
+variable, or in other words, if a system or library call fails, it
+sets this variable. This means that the value of C<$!> is meaningful
+only I<immediately> after a B<failure>:
+
+ if (open my $fh, "<", $filename) {
+ # Here $! is meaningless.
+ ...
+ } else {
+ # ONLY here is $! meaningful.
+ ...
+ # Already here $! might be meaningless.
+ }
+ # Since here we might have either success or failure,
+ # here $! is meaningless.
+
+In the above I<meaningless> stands for anything: zero, non-zero,
+C<undef>. A successful system or library call does B<not> set
+the variable to zero.
+
+If used as a string, yields the corresponding system error string.
+You can assign a number to C<$!> to set I<errno> if, for instance,
+you want C<"$!"> to return the string for error I<n>, or you want
+to set the exit value for the die() operator. (Mnemonic: What just
+went bang?)
+
+Also see L<Error Indicators>.
+
+=item %OS_ERROR
+
+=item %ERRNO
+
+=item %!
+X<%!>
+
+Each element of C<%!> has a true value only if C<$!> is set to that
+value. For example, C<$!{ENOENT}> is true if and only if the current
+value of C<$!> is C<ENOENT>; that is, if the most recent error was
+"No such file or directory" (or its moral equivalent: not all operating
+systems give that exact error, and certainly not all languages).
+To check if a particular key is meaningful on your system, use
+C<exists $!{the_key}>; for a list of legal keys, use C<keys %!>.
+See L<Errno> for more information, and also see above for the
+validity of C<$!>.
+
+=item $EXTENDED_OS_ERROR
+
+=item $^E
+X<$^E> X<$EXTENDED_OS_ERROR>
+
+Error information specific to the current operating system. At
+the moment, this differs from C<$!> under only VMS, OS/2, and Win32
+(and for MacPerl). On all other platforms, C<$^E> is always just
+the same as C<$!>.
+
+Under VMS, C<$^E> provides the VMS status value from the last
+system error. This is more specific information about the last
+system error than that provided by C<$!>. This is particularly
+important when C<$!> is set to B<EVMSERR>.
+
+Under OS/2, C<$^E> is set to the error code of the last call to
+OS/2 API either via CRT, or directly from perl.
+
+Under Win32, C<$^E> always returns the last error information
+reported by the Win32 call C<GetLastError()> which describes
+the last error from within the Win32 API. Most Win32-specific
+code will report errors via C<$^E>. ANSI C and Unix-like calls
+set C<errno> and so most portable Perl code will report errors
+via C<$!>.
+
+Caveats mentioned in the description of C<$!> generally apply to
+C<$^E>, also. (Mnemonic: Extra error explanation.)
+
+Also see L<Error Indicators>.
+
+=item $EVAL_ERROR
+
+=item $@
+X<$@> X<$EVAL_ERROR>
+
+The Perl syntax error message from the last eval() operator.
+If $@ is the null string, the last eval() parsed and executed
+correctly (although the operations you invoked may have failed in the
+normal fashion). (Mnemonic: Where was the syntax error "at"?)
+
+Warning messages are not collected in this variable. You can,
+however, set up a routine to process warnings by setting C<$SIG{__WARN__}>
+as described below.
+
+Also see L<Error Indicators>.
+
+=item $PROCESS_ID
+
+=item $PID
+
+=item $$
+X<$$> X<$PID> X<$PROCESS_ID>
+
+The process number of the Perl running this script. You should
+consider this variable read-only, although it will be altered
+across fork() calls. (Mnemonic: same as shells.)
+
+Note for Linux users: on Linux, the C functions C<getpid()> and
+C<getppid()> return different values from different threads. In order to
+be portable, this behavior is not reflected by C<$$>, whose value remains
+consistent across threads. If you want to call the underlying C<getpid()>,
+you may use the CPAN module C<Linux::Pid>.
+
+=item $REAL_USER_ID
+
+=item $UID
+
+=item $<
+X<< $< >> X<$UID> X<$REAL_USER_ID>
+
+The real uid of this process. (Mnemonic: it's the uid you came I<from>,
+if you're running setuid.) You can change both the real uid and
+the effective uid at the same time by using POSIX::setuid(). Since
+changes to $< require a system call, check $! after a change attempt to
+detect any possible errors.
+
+=item $EFFECTIVE_USER_ID
+
+=item $EUID
+
+=item $>
+X<< $> >> X<$EUID> X<$EFFECTIVE_USER_ID>
+
+The effective uid of this process. Example:
+
+ $< = $>; # set real to effective uid
+ ($<,$>) = ($>,$<); # swap real and effective uid
+
+You can change both the effective uid and the real uid at the same
+time by using POSIX::setuid(). Changes to $> require a check to $!
+to detect any possible errors after an attempted change.
+
+(Mnemonic: it's the uid you went I<to>, if you're running setuid.)
+C<< $< >> and C<< $> >> can be swapped only on machines
+supporting setreuid().
+
+=item $REAL_GROUP_ID
+
+=item $GID
+
+=item $(
+X<$(> X<$GID> X<$REAL_GROUP_ID>
+
+The real gid of this process. If you are on a machine that supports
+membership in multiple groups simultaneously, gives a space separated
+list of groups you are in. The first number is the one returned by
+getgid(), and the subsequent ones by getgroups(), one of which may be
+the same as the first number.
+
+However, a value assigned to C<$(> must be a single number used to
+set the real gid. So the value given by C<$(> should I<not> be assigned
+back to C<$(> without being forced numeric, such as by adding zero. Note
+that this is different to the effective gid (C<$)>) which does take a
+list.
+
+You can change both the real gid and the effective gid at the same
+time by using POSIX::setgid(). Changes to $( require a check to $!
+to detect any possible errors after an attempted change.
+
+(Mnemonic: parentheses are used to I<group> things. The real gid is the
+group you I<left>, if you're running setgid.)
+
+=item $EFFECTIVE_GROUP_ID
+
+=item $EGID
+
+=item $)
+X<$)> X<$EGID> X<$EFFECTIVE_GROUP_ID>
+
+The effective gid of this process. If you are on a machine that
+supports membership in multiple groups simultaneously, gives a space
+separated list of groups you are in. The first number is the one
+returned by getegid(), and the subsequent ones by getgroups(), one of
+which may be the same as the first number.
+
+Similarly, a value assigned to C<$)> must also be a space-separated
+list of numbers. The first number sets the effective gid, and
+the rest (if any) are passed to setgroups(). To get the effect of an
+empty list for setgroups(), just repeat the new effective gid; that is,
+to force an effective gid of 5 and an effectively empty setgroups()
+list, say C< $) = "5 5" >.
+
+You can change both the effective gid and the real gid at the same
+time by using POSIX::setgid() (use only a single numeric argument).
+Changes to $) require a check to $! to detect any possible errors
+after an attempted change.
+
+(Mnemonic: parentheses are used to I<group> things. The effective gid
+is the group that's I<right> for you, if you're running setgid.)
+
+C<< $< >>, C<< $> >>, C<$(> and C<$)> can be set only on
+machines that support the corresponding I<set[re][ug]id()> routine. C<$(>
+and C<$)> can be swapped only on machines supporting setregid().
+
+=item $PROGRAM_NAME
+
+=item $0
+X<$0> X<$PROGRAM_NAME>
+
+Contains the name of the program being executed.
+
+On some (read: not all) operating systems assigning to C<$0> modifies
+the argument area that the C<ps> program sees. On some platforms you
+may have to use special C<ps> options or a different C<ps> to see the
+changes. Modifying the $0 is more useful as a way of indicating the
+current program state than it is for hiding the program you're
+running. (Mnemonic: same as B<sh> and B<ksh>.)
+
+Note that there are platform specific limitations on the maximum
+length of C<$0>. In the most extreme case it may be limited to the
+space occupied by the original C<$0>.
+
+In some platforms there may be arbitrary amount of padding, for
+example space characters, after the modified name as shown by C<ps>.
+In some platforms this padding may extend all the way to the original
+length of the argument area, no matter what you do (this is the case
+for example with Linux 2.2).
+
+Note for BSD users: setting C<$0> does not completely remove "perl"
+from the ps(1) output. For example, setting C<$0> to C<"foobar"> may
+result in C<"perl: foobar (perl)"> (whether both the C<"perl: "> prefix
+and the " (perl)" suffix are shown depends on your exact BSD variant
+and version). This is an operating system feature, Perl cannot help it.
+
+In multithreaded scripts Perl coordinates the threads so that any
+thread may modify its copy of the C<$0> and the change becomes visible
+to ps(1) (assuming the operating system plays along). Note that
+the view of C<$0> the other threads have will not change since they
+have their own copies of it.
+
+If the program has been given to perl via the switches C<-e> or C<-E>,
+C<$0> will contain the string C<"-e">.
+
+=item $[
+X<$[>
+
+The index of the first element in an array, and of the first character
+in a substring. Default is 0, but you could theoretically set it
+to 1 to make Perl behave more like B<awk> (or Fortran) when
+subscripting and when evaluating the index() and substr() functions.
+(Mnemonic: [ begins subscripts.)
+
+As of release 5 of Perl, assignment to C<$[> is treated as a compiler
+directive, and cannot influence the behavior of any other file.
+(That's why you can only assign compile-time constants to it.)
+Its use is highly discouraged.
+
+Note that, unlike other compile-time directives (such as L<strict>),
+assignment to C<$[> can be seen from outer lexical scopes in the same file.
+However, you can use local() on it to strictly bind its value to a
+lexical block.
+
+=item $]
+X<$]>
+
+The version + patchlevel / 1000 of the Perl interpreter. This variable
+can be used to determine whether the Perl interpreter executing a
+script is in the right range of versions. (Mnemonic: Is this version
+of perl in the right bracket?) Example:
+
+ warn "No checksumming!\n" if $] < 3.019;
+
+See also the documentation of C<use VERSION> and C<require VERSION>
+for a convenient way to fail if the running Perl interpreter is too old.
+
+The floating point representation can sometimes lead to inaccurate
+numeric comparisons. See C<$^V> for a more modern representation of
+the Perl version that allows accurate string comparisons.
+
+=item $COMPILING
+
+=item $^C
+X<$^C> X<$COMPILING>
+
+The current value of the flag associated with the B<-c> switch.
+Mainly of use with B<-MO=...> to allow code to alter its behavior
+when being compiled, such as for example to AUTOLOAD at compile
+time rather than normal, deferred loading. Setting
+C<$^C = 1> is similar to calling C<B::minus_c>.
+
+=item $DEBUGGING
+
+=item $^D
+X<$^D> X<$DEBUGGING>
+
+The current value of the debugging flags. (Mnemonic: value of B<-D>
+switch.) May be read or set. Like its command-line equivalent, you can use
+numeric or symbolic values, eg C<$^D = 10> or C<$^D = "st">.
+
+=item ${^RE_DEBUG_FLAGS}
+
+The current value of the regex debugging flags. Set to 0 for no debug output
+even when the re 'debug' module is loaded. See L<re> for details.
+
+=item ${^RE_TRIE_MAXBUF}
+
+Controls how certain regex optimisations are applied and how much memory they
+utilize. This value by default is 65536 which corresponds to a 512kB temporary
+cache. Set this to a higher value to trade memory for speed when matching
+large alternations. Set it to a lower value if you want the optimisations to
+be as conservative of memory as possible but still occur, and set it to a
+negative value to prevent the optimisation and conserve the most memory.
+Under normal situations this variable should be of no interest to you.
+
+=item $SYSTEM_FD_MAX
+
+=item $^F
+X<$^F> X<$SYSTEM_FD_MAX>
+
+The maximum system file descriptor, ordinarily 2. System file
+descriptors are passed to exec()ed processes, while higher file
+descriptors are not. Also, during an open(), system file descriptors are
+preserved even if the open() fails. (Ordinary file descriptors are
+closed before the open() is attempted.) The close-on-exec
+status of a file descriptor will be decided according to the value of
+C<$^F> when the corresponding file, pipe, or socket was opened, not the
+time of the exec().
+
+=item $^H
+
+WARNING: This variable is strictly for internal use only. Its availability,
+behavior, and contents are subject to change without notice.
+
+This variable contains compile-time hints for the Perl interpreter. At the
+end of compilation of a BLOCK the value of this variable is restored to the
+value when the interpreter started to compile the BLOCK.
+
+When perl begins to parse any block construct that provides a lexical scope
+(e.g., eval body, required file, subroutine body, loop body, or conditional
+block), the existing value of $^H is saved, but its value is left unchanged.
+When the compilation of the block is completed, it regains the saved value.
+Between the points where its value is saved and restored, code that
+executes within BEGIN blocks is free to change the value of $^H.
+
+This behavior provides the semantic of lexical scoping, and is used in,
+for instance, the C<use strict> pragma.
+
+The contents should be an integer; different bits of it are used for
+different pragmatic flags. Here's an example:
+
+ sub add_100 { $^H |= 0x100 }
+
+ sub foo {
+ BEGIN { add_100() }
+ bar->baz($boon);
+ }
+
+Consider what happens during execution of the BEGIN block. At this point
+the BEGIN block has already been compiled, but the body of foo() is still
+being compiled. The new value of $^H will therefore be visible only while
+the body of foo() is being compiled.
+
+Substitution of the above BEGIN block with:
+
+ BEGIN { require strict; strict->import('vars') }
+
+demonstrates how C<use strict 'vars'> is implemented. Here's a conditional
+version of the same lexical pragma:
+
+ BEGIN { require strict; strict->import('vars') if $condition }
+
+=item %^H
+
+The %^H hash provides the same scoping semantic as $^H. This makes it
+useful for implementation of lexically scoped pragmas. See L<perlpragma>.
+
+=item $INPLACE_EDIT
+
+=item $^I
+X<$^I> X<$INPLACE_EDIT>
+
+The current value of the inplace-edit extension. Use C<undef> to disable
+inplace editing. (Mnemonic: value of B<-i> switch.)
+
+=item $^M
+X<$^M>
+
+By default, running out of memory is an untrappable, fatal error.
+However, if suitably built, Perl can use the contents of C<$^M>
+as an emergency memory pool after die()ing. Suppose that your Perl
+were compiled with C<-DPERL_EMERGENCY_SBRK> and used Perl's malloc.
+Then
+
+ $^M = 'a' x (1 << 16);
+
+would allocate a 64K buffer for use in an emergency. See the
+F<INSTALL> file in the Perl distribution for information on how to
+add custom C compilation flags when compiling perl. To discourage casual
+use of this advanced feature, there is no L<English|English> long name for
+this variable.
+
+=item $OSNAME
+
+=item $^O
+X<$^O> X<$OSNAME>
+
+The name of the operating system under which this copy of Perl was
+built, as determined during the configuration process. The value
+is identical to C<$Config{'osname'}>. See also L<Config> and the
+B<-V> command-line switch documented in L<perlrun>.
+
+In Windows platforms, $^O is not very helpful: since it is always
+C<MSWin32>, it doesn't tell the difference between
+95/98/ME/NT/2000/XP/CE/.NET. Use Win32::GetOSName() or
+Win32::GetOSVersion() (see L<Win32> and L<perlport>) to distinguish
+between the variants.
+
+=item ${^OPEN}
+
+An internal variable used by PerlIO. A string in two parts, separated
+by a C<\0> byte, the first part describes the input layers, the second
+part describes the output layers.
+
+=item $PERLDB
+
+=item $^P
+X<$^P> X<$PERLDB>
+
+The internal variable for debugging support. The meanings of the
+various bits are subject to change, but currently indicate:
+
+=over 6
+
+=item 0x01
+
+Debug subroutine enter/exit.
+
+=item 0x02
+
+Line-by-line debugging. Causes DB::DB() subroutine to be called for each
+statement executed. Also causes saving source code lines (like 0x400).
+
+=item 0x04
+
+Switch off optimizations.
+
+=item 0x08
+
+Preserve more data for future interactive inspections.
+
+=item 0x10
+
+Keep info about source lines on which a subroutine is defined.
+
+=item 0x20
+
+Start with single-step on.
+
+=item 0x40
+
+Use subroutine address instead of name when reporting.
+
+=item 0x80
+
+Report C<goto &subroutine> as well.
+
+=item 0x100
+
+Provide informative "file" names for evals based on the place they were compiled.
+
+=item 0x200
+
+Provide informative names to anonymous subroutines based on the place they
+were compiled.
+
+=item 0x400
+
+Save source code lines into C<@{"_<$filename"}>.
+
+=back
+
+Some bits may be relevant at compile-time only, some at
+run-time only. This is a new mechanism and the details may change.
+See also L<perldebguts>.
+
+=item $LAST_REGEXP_CODE_RESULT
+
+=item $^R
+X<$^R> X<$LAST_REGEXP_CODE_RESULT>
+
+The result of evaluation of the last successful C<(?{ code })>
+regular expression assertion (see L<perlre>). May be written to.
+
+=item $EXCEPTIONS_BEING_CAUGHT
+
+=item $^S
+X<$^S> X<$EXCEPTIONS_BEING_CAUGHT>
+
+Current state of the interpreter.
+
+ $^S State
+ --------- -------------------
+ undef Parsing module/eval
+ true (1) Executing an eval
+ false (0) Otherwise
+
+The first state may happen in $SIG{__DIE__} and $SIG{__WARN__} handlers.
+
+=item $BASETIME
+
+=item $^T
+X<$^T> X<$BASETIME>
+
+The time at which the program began running, in seconds since the
+epoch (beginning of 1970). The values returned by the B<-M>, B<-A>,
+and B<-C> filetests are based on this value.
+
+=item ${^TAINT}
+
+Reflects if taint mode is on or off. 1 for on (the program was run with
+B<-T>), 0 for off, -1 when only taint warnings are enabled (i.e. with
+B<-t> or B<-TU>). This variable is read-only.
+
+=item ${^UNICODE}
+
+Reflects certain Unicode settings of Perl. See L<perlrun>
+documentation for the C<-C> switch for more information about
+the possible values. This variable is set during Perl startup
+and is thereafter read-only.
+
+=item ${^UTF8CACHE}
+
+This variable controls the state of the internal UTF-8 offset caching code.
+1 for on (the default), 0 for off, -1 to debug the caching code by checking
+all its results against linear scans, and panicking on any discrepancy.
+
+=item ${^UTF8LOCALE}
+
+This variable indicates whether an UTF-8 locale was detected by perl at
+startup. This information is used by perl when it's in
+adjust-utf8ness-to-locale mode (as when run with the C<-CL> command-line
+switch); see L<perlrun> for more info on this.
+
+=item $PERL_VERSION
+
+=item $^V
+X<$^V> X<$PERL_VERSION>
+
+The revision, version, and subversion of the Perl interpreter, represented
+as a C<version> object.
+
+This variable first appeared in perl 5.6.0; earlier versions of perl will
+see an undefined value. Before perl 5.10.0 $^V was represented as a v-string.
+
+$^V can be used to determine whether the Perl interpreter executing a
+script is in the right range of versions. (Mnemonic: use ^V for Version
+Control.) Example:
+
+ warn "Hashes not randomized!\n" if !$^V or $^V lt v5.8.1
+
+To convert C<$^V> into its string representation use sprintf()'s
+C<"%vd"> conversion:
+
+ printf "version is v%vd\n", $^V; # Perl's version
+
+See the documentation of C<use VERSION> and C<require VERSION>
+for a convenient way to fail if the running Perl interpreter is too old.
+
+See also C<$]> for an older representation of the Perl version.
+
+=item $WARNING
+
+=item $^W
+X<$^W> X<$WARNING>
+
+The current value of the warning switch, initially true if B<-w>
+was used, false otherwise, but directly modifiable. (Mnemonic:
+related to the B<-w> switch.) See also L<warnings>.
+
+=item ${^WARNING_BITS}
+
+The current set of warning checks enabled by the C<use warnings> pragma.
+See the documentation of C<warnings> for more details.
+
+=item ${^WIN32_SLOPPY_STAT}
+
+If this variable is set to a true value, then stat() on Windows will
+not try to open the file. This means that the link count cannot be
+determined and file attributes may be out of date if additional
+hardlinks to the file exist. On the other hand, not opening the file
+is considerably faster, especially for files on network drives.
+
+This variable could be set in the F<sitecustomize.pl> file to
+configure the local Perl installation to use "sloppy" stat() by
+default. See L<perlrun> for more information about site
+customization.
+
+=item $EXECUTABLE_NAME
+
+=item $^X
+X<$^X> X<$EXECUTABLE_NAME>
+
+The name used to execute the current copy of Perl, from C's
+C<argv[0]> or (where supported) F</proc/self/exe>.
+
+Depending on the host operating system, the value of $^X may be
+a relative or absolute pathname of the perl program file, or may
+be the string used to invoke perl but not the pathname of the
+perl program file. Also, most operating systems permit invoking
+programs that are not in the PATH environment variable, so there
+is no guarantee that the value of $^X is in PATH. For VMS, the
+value may or may not include a version number.
+
+You usually can use the value of $^X to re-invoke an independent
+copy of the same perl that is currently running, e.g.,
+
+ @first_run = `$^X -le "print int rand 100 for 1..100"`;
+
+But recall that not all operating systems support forking or
+capturing of the output of commands, so this complex statement
+may not be portable.
+
+It is not safe to use the value of $^X as a path name of a file,
+as some operating systems that have a mandatory suffix on
+executable files do not require use of the suffix when invoking
+a command. To convert the value of $^X to a path name, use the
+following statements:
+
+ # Build up a set of file names (not command names).
+ use Config;
+ $this_perl = $^X;
+ if ($^O ne 'VMS')
+ {$this_perl .= $Config{_exe}
+ unless $this_perl =~ m/$Config{_exe}$/i;}
+
+Because many operating systems permit anyone with read access to
+the Perl program file to make a copy of it, patch the copy, and
+then execute the copy, the security-conscious Perl programmer
+should take care to invoke the installed copy of perl, not the
+copy referenced by $^X. The following statements accomplish
+this goal, and produce a pathname that can be invoked as a
+command or referenced as a file.
+
+ use Config;
+ $secure_perl_path = $Config{perlpath};
+ if ($^O ne 'VMS')
+ {$secure_perl_path .= $Config{_exe}
+ unless $secure_perl_path =~ m/$Config{_exe}$/i;}
+
+=item ARGV
+X<ARGV>
+
+The special filehandle that iterates over command-line filenames in
+C<@ARGV>. Usually written as the null filehandle in the angle operator
+C<< <> >>. Note that currently C<ARGV> only has its magical effect
+within the C<< <> >> operator; elsewhere it is just a plain filehandle
+corresponding to the last file opened by C<< <> >>. In particular,
+passing C<\*ARGV> as a parameter to a function that expects a filehandle
+may not cause your function to automatically read the contents of all the
+files in C<@ARGV>.
+
+=item $ARGV
+X<$ARGV>
+
+contains the name of the current file when reading from <>.
+
+=item @ARGV
+X<@ARGV>
+
+The array @ARGV contains the command-line arguments intended for
+the script. C<$#ARGV> is generally the number of arguments minus
+one, because C<$ARGV[0]> is the first argument, I<not> the program's
+command name itself. See C<$0> for the command name.
+
+=item ARGVOUT
+X<ARGVOUT>
+
+The special filehandle that points to the currently open output file
+when doing edit-in-place processing with B<-i>. Useful when you have
+to do a lot of inserting and don't want to keep modifying $_. See
+L<perlrun> for the B<-i> switch.
+
+=item @F
+X<@F>
+
+The array @F contains the fields of each line read in when autosplit
+mode is turned on. See L<perlrun> for the B<-a> switch. This array
+is package-specific, and must be declared or given a full package name
+if not in package main when running under C<strict 'vars'>.
+
+=item @INC
+X<@INC>
+
+The array @INC contains the list of places that the C<do EXPR>,
+C<require>, or C<use> constructs look for their library files. It
+initially consists of the arguments to any B<-I> command-line
+switches, followed by the default Perl library, probably
+F</usr/local/lib/perl>, followed by ".", to represent the current
+directory. ("." will not be appended if taint checks are enabled, either by
+C<-T> or by C<-t>.) If you need to modify this at runtime, you should use
+the C<use lib> pragma to get the machine-dependent library properly
+loaded also:
+
+ use lib '/mypath/libdir/';
+ use SomeMod;
+
+You can also insert hooks into the file inclusion system by putting Perl
+code directly into @INC. Those hooks may be subroutine references, array
+references or blessed objects. See L<perlfunc/require> for details.
+
+=item @ARG
+
+=item @_
+X<@_> X<@ARG>
+
+Within a subroutine the array @_ contains the parameters passed to that
+subroutine. See L<perlsub>.
+
+=item %INC
+X<%INC>
+
+The hash %INC contains entries for each filename included via the
+C<do>, C<require>, or C<use> operators. The key is the filename
+you specified (with module names converted to pathnames), and the
+value is the location of the file found. The C<require>
+operator uses this hash to determine whether a particular file has
+already been included.
+
+If the file was loaded via a hook (e.g. a subroutine reference, see
+L<perlfunc/require> for a description of these hooks), this hook is
+by default inserted into %INC in place of a filename. Note, however,
+that the hook may have set the %INC entry by itself to provide some more
+specific info.
+
+=item %ENV
+
+=item $ENV{expr}
+X<%ENV>
+
+The hash %ENV contains your current environment. Setting a
+value in C<ENV> changes the environment for any child processes
+you subsequently fork() off.
+
+=item %SIG
+
+=item $SIG{expr}
+X<%SIG>
+
+The hash C<%SIG> contains signal handlers for signals. For example:
+
+ sub handler { # 1st argument is signal name
+ my($sig) = @_;
+ print "Caught a SIG$sig--shutting down\n";
+ close(LOG);
+ exit(0);
+ }
+
+ $SIG{'INT'} = \&handler;
+ $SIG{'QUIT'} = \&handler;
+ ...
+ $SIG{'INT'} = 'DEFAULT'; # restore default action
+ $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT
+
+Using a value of C<'IGNORE'> usually has the effect of ignoring the
+signal, except for the C<CHLD> signal. See L<perlipc> for more about
+this special case.
+
+Here are some other examples:
+
+ $SIG{"PIPE"} = "Plumber"; # assumes main::Plumber (not recommended)
+ $SIG{"PIPE"} = \&Plumber; # just fine; assume current Plumber
+ $SIG{"PIPE"} = *Plumber; # somewhat esoteric
+ $SIG{"PIPE"} = Plumber(); # oops, what did Plumber() return??
+
+Be sure not to use a bareword as the name of a signal handler,
+lest you inadvertently call it.
+
+If your system has the sigaction() function then signal handlers are
+installed using it. This means you get reliable signal handling.
+
+The default delivery policy of signals changed in Perl 5.8.0 from
+immediate (also known as "unsafe") to deferred, also known as
+"safe signals". See L<perlipc> for more information.
+
+Certain internal hooks can be also set using the %SIG hash. The
+routine indicated by C<$SIG{__WARN__}> is called when a warning message is
+about to be printed. The warning message is passed as the first
+argument. The presence of a C<__WARN__> hook causes the ordinary printing
+of warnings to C<STDERR> to be suppressed. You can use this to save warnings
+in a variable, or turn warnings into fatal errors, like this:
+
+ local $SIG{__WARN__} = sub { die $_[0] };
+ eval $proggie;
+
+As the C<'IGNORE'> hook is not supported by C<__WARN__>, you can
+disable warnings using the empty subroutine:
+
+ local $SIG{__WARN__} = sub {};
+
+The routine indicated by C<$SIG{__DIE__}> is called when a fatal exception
+is about to be thrown. The error message is passed as the first
+argument. When a C<__DIE__> hook routine returns, the exception
+processing continues as it would have in the absence of the hook,
+unless the hook routine itself exits via a C<goto>, a loop exit, or a C<die()>.
+The C<__DIE__> handler is explicitly disabled during the call, so that you
+can die from a C<__DIE__> handler. Similarly for C<__WARN__>.
+
+Due to an implementation glitch, the C<$SIG{__DIE__}> hook is called
+even inside an eval(). Do not use this to rewrite a pending exception
+in C<$@>, or as a bizarre substitute for overriding C<CORE::GLOBAL::die()>.
+This strange action at a distance may be fixed in a future release
+so that C<$SIG{__DIE__}> is only called if your program is about
+to exit, as was the original intent. Any other use is deprecated.
+
+C<__DIE__>/C<__WARN__> handlers are very special in one respect:
+they may be called to report (probable) errors found by the parser.
+In such a case the parser may be in inconsistent state, so any
+attempt to evaluate Perl code from such a handler will probably
+result in a segfault. This means that warnings or errors that
+result from parsing Perl should be used with extreme caution, like
+this:
+
+ require Carp if defined $^S;
+ Carp::confess("Something wrong") if defined &Carp::confess;
+ die "Something wrong, but could not load Carp to give backtrace...
+ To see backtrace try starting Perl with -MCarp switch";
+
+Here the first line will load Carp I<unless> it is the parser who
+called the handler. The second line will print backtrace and die if
+Carp was available. The third line will be executed only if Carp was
+not available.
+
+See L<perlfunc/die>, L<perlfunc/warn>, L<perlfunc/eval>, and
+L<warnings> for additional information.
+
+=back
+
+=head2 Error Indicators
+X<error> X<exception>
+
+The variables C<$@>, C<$!>, C<$^E>, and C<$?> contain information
+about different types of error conditions that may appear during
+execution of a Perl program. The variables are shown ordered by
+the "distance" between the subsystem which reported the error and
+the Perl process. They correspond to errors detected by the Perl
+interpreter, C library, operating system, or an external program,
+respectively.
+
+To illustrate the differences between these variables, consider the
+following Perl expression, which uses a single-quoted string:
+
+ eval q{
+ open my $pipe, "/cdrom/install |" or die $!;
+ my @res = <$pipe>;
+ close $pipe or die "bad pipe: $?, $!";
+ };
+
+After execution of this statement all 4 variables may have been set.
+
+C<$@> is set if the string to be C<eval>-ed did not compile (this
+may happen if C<open> or C<close> were imported with bad prototypes),
+or if Perl code executed during evaluation die()d . In these cases
+the value of $@ is the compile error, or the argument to C<die>
+(which will interpolate C<$!> and C<$?>). (See also L<Fatal>,
+though.)
+
+When the eval() expression above is executed, open(), C<< <PIPE> >>,
+and C<close> are translated to calls in the C run-time library and
+thence to the operating system kernel. C<$!> is set to the C library's
+C<errno> if one of these calls fails.
+
+Under a few operating systems, C<$^E> may contain a more verbose
+error indicator, such as in this case, "CDROM tray not closed."
+Systems that do not support extended error messages leave C<$^E>
+the same as C<$!>.
+
+Finally, C<$?> may be set to non-0 value if the external program
+F</cdrom/install> fails. The upper eight bits reflect specific
+error conditions encountered by the program (the program's exit()
+value). The lower eight bits reflect mode of failure, like signal
+death and core dump information See wait(2) for details. In
+contrast to C<$!> and C<$^E>, which are set only if error condition
+is detected, the variable C<$?> is set on each C<wait> or pipe
+C<close>, overwriting the old value. This is more like C<$@>, which
+on every eval() is always set on failure and cleared on success.
+
+For more details, see the individual descriptions at C<$@>, C<$!>, C<$^E>,
+and C<$?>.
+
+=head2 Technical Note on the Syntax of Variable Names
+
+Variable names in Perl can have several formats. Usually, they
+must begin with a letter or underscore, in which case they can be
+arbitrarily long (up to an internal limit of 251 characters) and
+may contain letters, digits, underscores, or the special sequence
+C<::> or C<'>. In this case, the part before the last C<::> or
+C<'> is taken to be a I<package qualifier>; see L<perlmod>.
+
+Perl variable names may also be a sequence of digits or a single
+punctuation or control character. These names are all reserved for
+special uses by Perl; for example, the all-digits names are used
+to hold data captured by backreferences after a regular expression
+match. Perl has a special syntax for the single-control-character
+names: It understands C<^X> (caret C<X>) to mean the control-C<X>
+character. For example, the notation C<$^W> (dollar-sign caret
+C<W>) is the scalar variable whose name is the single character
+control-C<W>. This is better than typing a literal control-C<W>
+into your program.
+
+Finally, new in Perl 5.6, Perl variable names may be alphanumeric
+strings that begin with control characters (or better yet, a caret).
+These variables must be written in the form C<${^Foo}>; the braces
+are not optional. C<${^Foo}> denotes the scalar variable whose
+name is a control-C<F> followed by two C<o>'s. These variables are
+reserved for future special uses by Perl, except for the ones that
+begin with C<^_> (control-underscore or caret-underscore). No
+control-character name that begins with C<^_> will acquire a special
+meaning in any future version of Perl; such names may therefore be
+used safely in programs. C<$^_> itself, however, I<is> reserved.
+
+Perl identifiers that begin with digits, control characters, or
+punctuation characters are exempt from the effects of the C<package>
+declaration and are always forced to be in package C<main>; they are
+also exempt from C<strict 'vars'> errors. A few other names are also
+exempt in these ways:
+
+ ENV STDIN
+ INC STDOUT
+ ARGV STDERR
+ ARGVOUT _
+ SIG
+
+In particular, the new special C<${^_XYZ}> variables are always taken
+to be in package C<main>, regardless of any C<package> declarations
+presently in scope.
+
+=head1 BUGS
+
+Due to an unfortunate accident of Perl's implementation, C<use
+English> imposes a considerable performance penalty on all regular
+expression matches in a program, regardless of whether they occur
+in the scope of C<use English>. For that reason, saying C<use
+English> in libraries is strongly discouraged. See the
+Devel::SawAmpersand module documentation from CPAN
+( http://www.cpan.org/modules/by-module/Devel/ )
+for more information. Writing C<use English '-no_match_vars';>
+avoids the performance penalty.
+
+Having to even think about the C<$^S> variable in your exception
+handlers is simply wrong. C<$SIG{__DIE__}> as currently implemented
+invites grievous and difficult to track down errors. Avoid it
+and use an C<END{}> or CORE::GLOBAL::die override instead.
Added: vendor/perl/dist/ext/XS-APItest/t/addissub.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/addissub.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/addissub.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,19 @@
+use warnings;
+use strict;
+
+use Test::More tests => 9;
+use XS::APItest ();
+
+alarm 10; # likely failure mode is an infinite loop
+
+ok 1;
+is eval q{ 3 + 1 }, 4;
+is eval q{ BEGIN { $^H{"XS::APItest/addissub"} = 1; } 3 + 1 }, 4;
+XS::APItest::setup_addissub(); ok 1;
+is eval q{ 3 + 1 }, 4;
+is eval q{ BEGIN { $^H{"XS::APItest/addissub"} = 1; } 3 + 1 }, 2;
+XS::APItest::setup_addissub(); ok 1;
+is eval q{ 3 + 1 }, 4;
+is eval q{ BEGIN { $^H{"XS::APItest/addissub"} = 1; } 3 + 1 }, 2;
+
+1;
Added: vendor/perl/dist/ext/XS-APItest/t/autoload.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/autoload.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/autoload.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,132 @@
+#!perl
+
+# This script tests not only the interface for XS AUTOLOAD routines to find
+# out the sub name, but also that that interface does not interfere with
+# prototypes, the way it did before 5.15.4.
+
+use strict;
+use warnings;
+
+use Test::More tests => 26;
+
+use XS::APItest;
+
+is XS::APItest::AutoLoader::frob(), 'frob', 'name passed to XS AUTOLOAD';
+is "XS::APItest::AutoLoader::fr\0b"->(), "fr\0b",
+ 'name with embedded null passed to XS AUTOLOAD';
+is "XS::APItest::AutoLoader::fr\x{1ed9}b"->(), "fr\x{1ed9}b",
+ 'Unicode name passed to XS AUTOLOAD';
+
+*AUTOLOAD = *XS::APItest::AutoLoader::AUTOLOADp;
+
+is frob(), 'frob', 'name passed to XS AUTOLOAD with proto';
+is prototype \&AUTOLOAD, '*$', 'prototype is unchanged';
+is "fr\0b"->(), "fr\0b",
+ 'name with embedded null passed to XS AUTOLOAD with proto';
+is prototype \&AUTOLOAD, '*$', 'proto unchanged after embedded-null call';
+is "fr\x{1ed9}b"->(), "fr\x{1ed9}b",
+ 'Unicode name passed to XS AUTOLOAD with proto';
+is prototype \&AUTOLOAD, '*$', 'prototype is unchanged after Unicode call';
+
+# Test that the prototype was preserved from the parser’s point of view
+
+ok !eval "sub { ::AUTOLOAD(1) }",
+ 'parse failure due to AUTOLOAD prototype';
+ok eval "sub { ::AUTOLOAD(1,2) }", 'successful parse respecting prototype'
+ or diag $@;
+
+package fribble { sub a { return 7 } }
+no warnings 'once';
+*a = \&AUTOLOAD;
+'$'->();
+# &a('fribble') will return '$'
+# But if intuit_method does not see the (*...) proto, this compiles as
+# fribble->a
+no strict;
+is eval 'a fribble, 3', '$', 'intuit_method sees * in AUTOLOAD proto'
+ or diag $@;
+
+# precedence check
+# *$ should parse as a list operator, but right now the AUTOLOAD
+# sub name is $
+is join(" ", eval 'a "b", "c"'), '$',
+ 'precedence determination respects prototype of AUTOLOAD sub';
+
+{
+ my $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ eval 'sub a($){}';
+ like $w, qr/^Prototype mismatch: sub main::a \(\*\$\) vs \(\$\)/m,
+ 'proto warnings respect AUTOLOAD prototypes';
+ undef $w;
+ *a = \&AUTOLOAD;
+ like $w, qr/^Prototype mismatch: sub main::a \(\$\) vs \(\*\$\)/m,
+ 'GV assignment proto warnings respect AUTOLOAD prototypes';
+}
+
+
+#
+# This is a test for AUTOLOAD implemented as an XSUB.
+# It tests that $AUTOLOAD is set correctly, including the
+# case of inheritance.
+#
+# Rationale: Due to change ed850460, $AUTOLOAD is not currently set
+# for XSUB AUTOLOADs at all. Instead, as of adb5a9ae the PV of the
+# AUTOLOAD XSUB is set to the name of the method. We cruelly test it
+# regardless.
+#
+
+# First, make sure we have the XS AUTOLOAD available for testing
+ok(XS::APItest::AUTOLOADtest->can('AUTOLOAD'), 'Test class ->can AUTOLOAD');
+
+# Used to communicate from the XS AUTOLOAD to Perl land
+use vars '$the_method';
+
+# First, set up the Perl equivalent to what we're testing in
+# XS so we have a comparison
+package PerlBase;
+use vars '$AUTOLOAD';
+sub AUTOLOAD {
+ Test::More::ok(defined $AUTOLOAD);
+ return 1 if not defined $AUTOLOAD;
+ $main::the_method = $AUTOLOAD;
+ return 0;
+}
+
+package PerlDerived;
+use vars '@ISA';
+ at ISA = qw(PerlBase);
+
+package Derived;
+use vars '@ISA';
+ at ISA = qw(XS::APItest::AUTOLOADtest);
+
+package main;
+
+# Test Perl AUTOLOAD in base class directly
+$the_method = undef;
+is(PerlBase->Blah(), 0,
+ "Perl AUTOLOAD gets called and returns success");
+is($the_method, 'PerlBase::Blah',
+ 'Scalar set to correct class/method name');
+
+# Test Perl AUTOLOAD in derived class
+$the_method = undef;
+is(PerlDerived->Boo(), 0,
+ 'Perl AUTOLOAD on derived class gets called and returns success');
+is($the_method, 'PerlDerived::Boo',
+ 'Scalar set to correct class/method name');
+
+# Test XS AUTOLOAD in base class directly
+$the_method = undef;
+is(XS::APItest::AUTOLOADtest->Blah(), 0,
+ 'XS AUTOLOAD gets called and returns success');
+is($the_method, 'XS::APItest::AUTOLOADtest::Blah',
+ 'Scalar set to correct class/method name');
+
+# Test XS AUTOLOAD in derived class directly
+$the_method = undef;
+is(Derived->Foo(), 0,
+ 'XS AUTOLOAD gets called and returns success');
+is($the_method, 'Derived::Foo',
+ 'Scalar set to correct class/method name');
Added: vendor/perl/dist/ext/XS-APItest/t/callregexec.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/callregexec.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/callregexec.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,66 @@
+#!perl
+
+# test CALLREGEXEC()
+# (currently it just checks that it handles non-\0 terminated strings;
+# full tests haven't been added yet)
+
+use warnings;
+use strict;
+
+use XS::APItest;
+*callregexec = *XS::APItest::callregexec;
+
+use Test::More tests => 50;
+
+# Test that the regex engine can handle strings without terminating \0
+# XXX This is by no means comprehensive; it doesn't test all ops, nor all
+# code paths within those ops (especially not utf8).
+
+
+# this sub takes a string that has an extraneous char at the end.
+# First see if the string (less the last char) matches the regex;
+# then see if that string (including the last char) matches when
+# calling callregexec(), but with the length arg set to 1 char less than
+# the length of the string.
+# In theory the result should be the same for both matches, since
+# they should both not 'see' the final char.
+
+sub try {
+ my ($str, $re, $exp, $desc) = @_;
+
+ my $str1 = substr($str, 0, -1);
+ ok !!$exp == !!($str1 =~ $re), "$desc str =~ qr";
+
+ my $bytes = do { use bytes; length $str1 };
+ ok !!$exp == !!callregexec($re, 0, $bytes, 0, $str, 0),
+ "$desc callregexec";
+}
+
+
+{
+ try "\nx", qr/\n^/m, 0, 'MBOL';
+ try "ax", qr/a$/m, 1, 'MEOL';
+ try "ax", qr/a$/s, 1, 'SEOL';
+ try "abx", qr/^(ab|X)./s, 0, 'SANY';
+ try "abx", qr/^(ab|X)\C/, 0, 'CANY';
+ try "abx", qr/^(ab|X)./, 0, 'REG_ANY';
+ try "abx", qr/^ab(c|d|e|x)/, 0, 'TRIE/TRIEC';
+ try "abx", qr/^abx/, 0, 'EXACT';
+ try "abx", qr/^ABX/i, 0, 'EXACTF';
+ try "abx", qr/^ab\b/, 1, 'BOUND';
+ try "ab-", qr/^ab\B/, 0, 'NBOUND';
+ try "aas", qr/a[st]/, 0, 'ANYOF';
+ try "aas", qr/a[s\xDF]/i, 0, 'ANYOFV';
+ try "ab1", qr/ab\d/, 0, 'DIGIT';
+ try "ab\n", qr/ab[[:ascii:]]/, 0, 'POSIX';
+ try "aP\x{307}", qr/^a\X/, 1, 'CLUMP 1';
+ try "aP\x{307}x", qr/^a\X/, 1, 'CLUMP 2';
+ try "\x{100}\r\n", qr/^\x{100}\X/, 1, 'CLUMP 3';
+ try "abb", qr/^a(b)\1/, 0, 'REF';
+ try "ab\n", qr/^.+\R/, 0, 'LNBREAK';
+ try "ab\n", qr/^.+\v/, 0, 'VERTWS';
+ try "abx", qr/^.+\V/, 1, 'NVERTWS';
+ try "ab\t", qr/^.+\h/, 0, 'HORIZWS';
+ try "abx", qr/^.+\H/, 1, 'NHORIZWS';
+ try "abx", qr/a.*x/, 0, 'CURLY';
+}
Added: vendor/perl/dist/ext/XS-APItest/t/check_warnings.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/check_warnings.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/check_warnings.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+#!perl
+
+# This test checks to make sure that a BEGIN block created from an XS call
+# does not implicitly change the current warning scope, causing a CHECK
+# or INIT block created after the corresponding phase to warn when it
+# shouldn’t.
+
+use Test::More tests => 1;
+
+$SIG{__WARN__} = sub { $w .= shift };
+
+use warnings;
+eval q|
+ BEGIN{
+ no warnings;
+ package XS::APItest; require XSLoader; XSLoader::load()
+ }
+|;
+
+is $w, undef, 'No warnings about CHECK and INIT in warningless scope';
Added: vendor/perl/dist/ext/XS-APItest/t/clone-with-stack.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/clone-with-stack.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/clone-with-stack.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,67 @@
+#!perl
+
+use strict;
+use warnings;
+
+require "../../t/test.pl";
+
+use XS::APItest;
+
+# clone_with_stack creates a clone of the perl interpreter including
+# the stack, then destroys the original interpreter and runs the
+# remaining code using the new one.
+# This is like doing a psuedo-fork and exiting the parent.
+
+use Config;
+if (not $Config{'useithreads'}) {
+ skip_all("clone_with_stack requires threads");
+}
+
+plan(4);
+
+fresh_perl_is( <<'----', <<'====', undef, "minimal clone_with_stack" );
+use XS::APItest;
+clone_with_stack();
+print "ok\n";
+----
+ok
+====
+
+fresh_perl_is( <<'----', <<'====', undef, "inside a subroutine" );
+use XS::APItest;
+sub f {
+ clone_with_stack();
+}
+f();
+print "ok\n";
+----
+ok
+====
+
+{
+ local our $TODO = "clone_with_stack inside a begin block";
+ fresh_perl_is( <<'----', <<'====', undef, "inside a BEGIN block" );
+use XS::APItest;
+BEGIN {
+ clone_with_stack();
+}
+print "ok\n";
+----
+ok
+====
+
+}
+
+{
+ fresh_perl_is( <<'----', <<'====', undef, "clone stack" );
+use XS::APItest;
+sub f {
+ clone_with_stack();
+ 0..4;
+}
+print 'X-', 'Y-', join(':', f()), "-Z\n";
+----
+X-Y-0:1:2:3:4-Z
+====
+
+}
Added: vendor/perl/dist/ext/XS-APItest/t/coplabel.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/coplabel.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/coplabel.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
+use warnings;
+use strict;
+use Test::More tests => 1;
+
+use XS::APItest;
+
+XS::APItest::test_coplabel();
+ok 1;
+
+1;
Added: vendor/perl/dist/ext/XS-APItest/t/copstash.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/copstash.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/copstash.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,9 @@
+use Config;
+use Test::More;
+BEGIN { plan skip_all => 'no threads' unless $Config{useithreads} }
+
+plan tests => 1;
+
+use XS::APItest;
+
+ok test_alloccopstash;
Added: vendor/perl/dist/ext/XS-APItest/t/fetch_pad_names.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/fetch_pad_names.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/fetch_pad_names.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,322 @@
+use strict;
+use warnings;
+use Encode ();
+
+use Test::More tests => 77;
+
+use XS::APItest qw( fetch_pad_names pad_scalar );
+
+local $SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /Wide character in print at/ };
+
+ok defined &fetch_pad_names, "sub imported";
+ok defined &pad_scalar;
+
+my $cv = sub {
+ my $test;
+};
+
+ok fetch_pad_names($cv), "Fetch working.";
+is ref fetch_pad_names($cv), ref [], 'Fetch returns an arrayref';
+is @{fetch_pad_names($cv)}, 1, 'Sub has one lexical.';
+is fetch_pad_names($cv)->[0], '$test', "Fetching a simple scalar works.";
+
+$cv = sub {
+ use utf8;
+
+ my $zest = 'invariant';
+ my $zèst = 'latin-1';
+
+ return [pad_scalar(1, "zèst"), pad_scalar(1, "z\350st"), pad_scalar(1, "z\303\250st")];
+};
+
+my $names_av = fetch_pad_names($cv);
+my $flagged = my $unflagged = "\$z\x{c3}\x{a8}st";
+Encode::_utf8_on($flagged);
+
+general_tests( $cv->(), $names_av, {
+ results => [
+ { cmp => 'latin-1', msg => 'Fetches through UTF-8.' },
+ { cmp => 'latin-1', msg => 'Fetches through Latin-1.' },
+ { cmp => 'NOT_IN_PAD', msg => "Doesn't fetch using octets." },
+ ],
+ pad_size => {
+ total => { cmp => 2, msg => 'Sub has two lexicals.' },
+ utf8 => { cmp => 0, msg => 'Sub has no UTF-8 encoded vars.' },
+ invariant => { cmp => 2, msg => 'Sub has two invariant vars.' },
+ },
+ vars => [
+ { name => '$zest', msg => 'Sub has [\$zest].', type => 'ok' },
+ { name => "\$z\x{e8}st", msg => "Sub has [\$t\x{e8}st].", type => 'ok' },
+ { name => $unflagged, msg => "Sub doesn't have [$unflagged].", type => 'not ok' },
+ { name => $flagged, msg => "But does have it when flagged.", type => 'ok' },
+ ],
+});
+
+$cv = do {
+ my $ascii = 'Defined';
+ sub {
+ use utf8;
+ my $партнеры = $ascii;
+ return [$партнеры, pad_scalar(1, "партнеры"), pad_scalar(1, "\320\277\320\260\321\200\321\202\320\275\320\265\321\200\321\213")];
+ };
+};
+
+$names_av = fetch_pad_names($cv);
+my $hex_var = "\$\x{43f}\x{430}\x{440}\x{442}\x{43d}\x{435}\x{440}\x{44b}";
+$flagged = $unflagged = "\$\320\277\320\260\321\200\321\202\320\275\320\265\321\200\321\213";
+Encode::_utf8_on($flagged);
+
+my $russian_var = do {
+ use utf8;
+ '$партнеры';
+};
+
+general_tests( $cv->(), $names_av, {
+ results => [
+ { cmp => 'Defined', msg => 'UTF-8 fetching works.' },
+ { cmp => 'Defined', msg => 'pad_scalar fetch.' },
+ { cmp => 'NOT_IN_PAD', msg => "Doesn't fetch using octets." },
+ ],
+ pad_size => {
+ total => { cmp => 2, msg => 'Sub has two lexicals, including those it closed over.' },
+ utf8 => { cmp => 1, msg => 'UTF-8 in the pad.' },
+ invariant => { cmp => 1, msg => '' },
+ },
+ vars => [
+ { name => '$ascii', msg => 'Sub has [$ascii].', type => 'ok' },
+ { name => $russian_var, msg => "Sub has [$russian_var].", type => 'ok' },
+ { name => $hex_var, msg => "Sub has [$hex_var].", type => 'ok' },
+ { name => $unflagged, msg => "Sub doesn't have [$unflagged]", type => 'not ok' },
+ { name => $flagged, msg => "But does have it when flagged.", type => 'ok' },
+ ],
+});
+
+my $leon1 = "\$L\x{e9}on";
+my $leon2 = my $leon3 = "\$L\x{c3}\x{a9}on";
+Encode::_utf8_on($leon2);
+
+local $@;
+$cv = eval <<"END";
+ sub {
+ use utf8;
+ my \$Leon = 'Invariant';
+ my $leon1 = 'Latin-1';
+ return [ \$Leon, $leon1, $leon2, pad_scalar(1, "L\x{e9}on"), pad_scalar(1, "L\x{c3}\x{a9}on")];
+ };
+END
+
+my $err = $@;
+ok !$err, $@;
+
+$names_av = fetch_pad_names($cv);
+
+general_tests( $cv->(), $names_av, {
+ results => [
+ { cmp => 'Invariant', msg => '' },
+ { cmp => 'Latin-1', msg => "Fetched through [$leon1]" },
+ { cmp => 'Latin-1', msg => "Fetched through [$leon2]" },
+ { cmp => 'Latin-1', msg => 'pad_scalar fetch.' },
+ { cmp => 'NOT_IN_PAD', msg => "Doesn't fetch using octets." },
+ ],
+ pad_size => {
+ total => { cmp => 2, msg => 'Sub has two lexicals' },
+ utf8 => { cmp => 0, msg => 'Latin-1 not upgraded to UTF-8.' },
+ invariant => { cmp => 2, msg => '' },
+ },
+ vars => [
+ { name => '$Leon', msg => 'Sub has [$Leon].', type => 'ok' },
+ { name => $leon1, msg => "Sub has [$leon1].", type => 'ok' },
+ { name => $leon2, msg => "Sub has [$leon2].", type => 'ok' },
+ { name => $leon3, msg => "Sub doesn't have [$leon3]", type => 'not ok' },
+ ],
+});
+
+
+{
+ use utf8;
+ my $Cèon = 4;
+ my $str1 = "\$C\x{e8}on";
+ my $str2 = my $str3 = "\$C\x{c3}\x{a8}on";
+ Encode::_utf8_on($str2);
+
+ local $@;
+ $cv = eval <<"END_EVAL";
+ sub { [ \$Cèon, $str1, $str2 ] };
+END_EVAL
+
+ $err = $@;
+ ok !$err;
+
+ $names_av = fetch_pad_names($cv);
+
+ general_tests( $cv->(), $names_av, {
+ results => [ ({ SKIP => 1 }) x 3 ],
+ pad_size => {
+ total => { cmp => 1, msg => 'Sub has one lexical, which it closed over.' },
+ utf8 => { cmp => 0, msg => '' },
+ invariant => { cmp => 1, msg => '' },
+ },
+ vars => [
+ { name => '$Ceon', msg => "Sub doesn't have [\$Ceon].", type => 'not ok' },
+ map({ { name => $_, msg => "Sub has [$_].", type => 'ok' } } $str1, $str2 ),
+ { name => $str3, msg => "Sub doesn't have [$str3]", type => 'not ok' },
+ ],
+ });
+
+}
+
+$cv = sub {
+ use utf8;
+ our $戦国 = 10;
+ {
+ no strict 'refs';
+ my ($symref, $encoded_sym) = (__PACKAGE__ . "::戦国") x 2;
+ utf8::encode($encoded_sym);
+ return [ $戦国, ${$symref}, ${$encoded_sym} ];
+ }
+};
+
+my $flagged_our = my $unflagged_our = "\$\346\210\246\345\233\275";
+Encode::_utf8_on($flagged_our);
+
+$names_av = fetch_pad_names($cv);
+
+general_tests( $cv->(), $names_av, {
+ results => [
+ { cmp => '10', msg => 'Fetched UTF-8 our var.' },
+ { cmp => '10', msg => "Symref fetch of an our works." },
+ { cmp => undef, msg => "..and using the encoded form yields undef." },
+ ],
+ pad_size => {
+ total => { cmp => 3, msg => 'Sub has three lexicals.' },
+ utf8 => { cmp => 1, msg => 'Japanese stored as UTF-8.' },
+ invariant => { cmp => 2, msg => '' },
+ },
+ vars => [
+ { name => "\$\x{6226}\x{56fd}", msg => "Sub has [\$\x{6226}\x{56fd}].", type => 'ok' },
+ { name => $flagged_our, msg => "Sub has [$flagged_our].", type => 'ok' },
+ { name => $unflagged_our, msg => "Sub doesn't have [$unflagged_our]", type => 'not ok' },
+ ],
+});
+
+
+{
+
+use utf8;
+{
+ my $test;
+ BEGIN {
+ $test = "t\x{c3}\x{a8}st";
+ Encode::_utf8_on($test);
+ }
+ use constant test => $test;
+}
+
+$cv = sub {
+ my $tèst = 'Good';
+
+ return [
+ $tèst,
+ pad_scalar(1, "tèst"), #"UTF-8"
+ pad_scalar(1, "t\350st"), #"Latin-1"
+ pad_scalar(1, "t\x{c3}\x{a8}st"), #"Octal"
+ pad_scalar(1, test()), #'UTF-8 enc'
+ ];
+};
+
+$names_av = fetch_pad_names($cv);
+
+general_tests( $cv->(), $names_av, {
+ results => [
+ { cmp => 'Good', msg => 'Fetched through Perl.' },
+ { cmp => 'Good', msg => "pad_scalar: UTF-8 works." },
+ { cmp => 'Good', msg => "pad_scalar: Latin-1 works." },
+ { cmp => 'NOT_IN_PAD', msg => "pad_scalar: Doesn't fetch through octets." },
+ { cmp => 'Good', msg => "pad_scalar: UTF-8-through-encoding works." },
+ ],
+ pad_size => {
+ total => { cmp => 1, msg => 'Sub has one lexical.' },
+ utf8 => { cmp => 0, msg => '' },
+ invariant => { cmp => 1, msg => '' },
+ },
+ vars => [],
+});
+
+}
+
+$cv = do {
+ use utf8;
+ sub {
+ my $ニコニコ = 'katakana';
+ my $にこにこ = 'hiragana';
+
+ return [
+ $ニコニコ,
+ $にこにこ,
+ pad_scalar(1, "にこにこ"),
+ pad_scalar(1, "\x{306b}\x{3053}\x{306b}\x{3053}"),
+ pad_scalar(1, "\343\201\253\343\201\223\343\201\253\343\201\223"),
+ pad_scalar(1, "ニコニコ"),
+ pad_scalar(1, "\x{30cb}\x{30b3}\x{30cb}\x{30b3}"),
+ pad_scalar(1, "\343\203\213\343\202\263\343\203\213\343\202\263"),
+ ];
+ }
+};
+
+$names_av = fetch_pad_names($cv);
+
+general_tests( $cv->(), $names_av, {
+ results => [
+ { cmp => 'katakana', msg => '' },
+ { cmp => 'hiragana', msg => '' },
+ { cmp => 'hiragana', msg => '' },
+ { cmp => 'hiragana', msg => '' },
+ { cmp => 'NOT_IN_PAD', msg => '' },
+ { cmp => 'katakana', msg => '' },
+ { cmp => 'katakana', msg => '' },
+ { cmp => 'NOT_IN_PAD', msg => '' },
+ ],
+ pad_size => {
+ total => { cmp => 2, msg => 'Sub has two lexicals.' },
+ utf8 => { cmp => 2, msg => '' },
+ invariant => { cmp => 0, msg => '' },
+ },
+ vars => [],
+});
+
+{
+ {
+ my $utf8_e;
+ BEGIN {
+ $utf8_e = "e";
+ Encode::_utf8_on($utf8_e);
+ }
+ use constant utf8_e => $utf8_e;
+ }
+ my $e = 'Invariant';
+ is pad_scalar(1, "e"), pad_scalar(1, utf8_e), 'Fetches the same thing, even if invariant but with differing utf8ness.';
+}
+
+
+sub general_tests {
+ my ($results, $names_av, $tests) = @_;
+
+ for my $i (0..$#$results) {
+ next if $tests->{results}[$i]{SKIP};
+ is $results->[$i], $tests->{results}[$i]{cmp}, $tests->{results}[$i]{msg};
+ }
+
+ is @$names_av, $tests->{pad_size}{total}{cmp}, $tests->{pad_size}{total}{msg};
+ is grep( Encode::is_utf8($_), @$names_av), $tests->{pad_size}{utf8}{cmp};
+ is grep( !Encode::is_utf8($_), @$names_av), $tests->{pad_size}{invariant}{cmp};
+
+ for my $var (@{$tests->{vars}}) {
+ no warnings 'experimental::smartmatch';
+ if ($var->{type} eq 'ok') {
+ ok $var->{name} ~~ $names_av, $var->{msg};
+ } else {
+ ok !($var->{name} ~~ $names_av), $var->{msg};
+ }
+ }
+
+}
Added: vendor/perl/dist/ext/XS-APItest/t/gotosub.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/gotosub.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/gotosub.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,17 @@
+#!perl -w
+
+# Test that goto &xsub provides the right lexical environment.
+
+use strict;
+
+use Test::More tests => 1;
+use XS::APItest;
+
+# This sub must remain outside the ‘use warnings’ scope.
+sub no_warnings { goto &stringify }
+
+use warnings;
+
+$SIG{__WARN__} = sub { like shift, qr\^Use of uninitialized\ };
+
+no_warnings(my $x) # undefined variable
Added: vendor/perl/dist/ext/XS-APItest/t/gv_autoload4.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/gv_autoload4.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/gv_autoload4.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,62 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 31;
+
+use_ok('XS::APItest');
+
+my $method = 0;
+my @types = map { 'gv_autoload' . $_ } qw( 4 _sv _pv _pvn );
+
+sub AUTOLOAD {
+ our $AUTOLOAD;
+ my ($subname, $message) = @_;
+ is $subname, $AUTOLOAD, $message;
+}
+
+my $sub = "nothing";
+
+ok my $glob = XS::APItest::gv_autoload_type(\%::, $sub, 1, $method);
+*{$glob}{CODE}->( __PACKAGE__ . "::" . $sub, '$AUTOLOAD set correctly' );
+
+$sub = "some_sub";
+for my $type ( 0..3 ) {
+ is $glob = XS::APItest::gv_autoload_type(\%::, $sub, $type, $method), "*main::AUTOLOAD", "*main::AUTOLOAD if autoload is true in $types[$type].";
+ *{$glob}{CODE}->( __PACKAGE__ . "::" . $sub, '$AUTOLOAD set correctly' );
+}
+
+$sub = "method\0not quite!";
+
+ok $glob = XS::APItest::gv_autoload_type(\%::, $sub, 0, $method);
+*{$glob}{CODE}->( __PACKAGE__ . "::" . $sub, "gv_autoload4() is nul-clean");
+
+ok $glob = XS::APItest::gv_autoload_type(\%::, $sub, 1, $method);
+*{$glob}{CODE}->( __PACKAGE__ . "::" . $sub, "gv_autoload_sv() is nul-clean");
+
+ok $glob = XS::APItest::gv_autoload_type(\%::, $sub, 2, $method);
+*{$glob}{CODE}->( __PACKAGE__ . "::" . ($sub =~ s/\0.*//r), "gv_autoload_pv() is not nul-clean");
+
+ok $glob = XS::APItest::gv_autoload_type(\%::, $sub, 3, $method);
+*{$glob}{CODE}->( __PACKAGE__ . "::" . $sub, "gv_autoload_pvn() is nul-clean");
+
+{
+ use utf8;
+ use open qw( :utf8 :std );
+
+ package main;
+
+ sub AUTOLOAD {
+ our $AUTOLOAD;
+ my ($subname, $message) = @_;
+ ::is $subname, $AUTOLOAD, $message;
+ }
+
+ for my $type ( 1..3 ) {
+ ::ok $glob = XS::APItest::gv_autoload_type(\%main::, $sub = "method", $type, $method);
+ *{$glob}{CODE}->( "main::" . $sub, "$types[$type]() is UTF8-clean when both the stash and the sub are in UTF-8");
+ ::ok $glob = XS::APItest::gv_autoload_type(\%main::, $sub = "method", $type, $method);
+ *{$glob}{CODE}->( "main::" . $sub, "$types[$type]() is UTF8-clean when only the stash is in UTF-8");
+ }
+}
Added: vendor/perl/dist/ext/XS-APItest/t/gv_fetchmeth.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/gv_fetchmeth.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/gv_fetchmeth.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,67 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 40;
+
+use_ok('XS::APItest');
+
+my $level = -1;
+my @types = map { 'gv_fetchmeth' . $_ } '', qw( _sv _pv _pvn );
+
+sub test { "Sanity check" }
+
+for my $type ( 0..3 ) {
+ is *{
+ XS::APItest::gv_fetchmeth_type(\%::, "test", $type, $level, 0)
+ }{CODE}->(), "Sanity check";
+}
+
+for my $type ( 0..3 ) {
+ my $meth = "gen$type";
+ ok !XS::APItest::gv_fetchmeth_type(\%::, $meth, $type, -1, 0), "With level = -1, $types[$type] returns false.";
+ ok !$::{$meth}, "...and doesn't vivify the glob.";
+
+ ok !XS::APItest::gv_fetchmeth_type(\%::, $meth, $type, 0, 0), "With level = 0, $types[$type] still returns false.";
+ ok $::{$meth}, "...but does vivify the glob.";
+}
+
+{
+ no warnings 'once';
+ *method = sub { 1 };
+}
+
+ok !XS::APItest::gv_fetchmeth_type(\%::, "method\0not quite!", 0, $level, 0), "gv_fetchmeth() is nul-clean";
+ok !XS::APItest::gv_fetchmeth_type(\%::, "method\0not quite!", 1, $level, 0), "gv_fetchmeth_sv() is nul-clean";
+is XS::APItest::gv_fetchmeth_type(\%::, "method\0not quite!", 2, $level, 0), "*main::method", "gv_fetchmeth_pv() is not nul-clean";
+ok !XS::APItest::gv_fetchmeth_type(\%::, "method\0not quite!", 3, $level, 0), "gv_fetchmeth_pvn() is nul-clean";
+
+{
+ use utf8;
+ use open qw( :utf8 :std );
+
+ package main;
+
+ sub method { 1 }
+
+ my $meth_as_octets =
+ "\357\275\215\357\275\205\357\275\224\357\275\210\357\275\217\357\275\204";
+
+ $level = 1;
+ for my $type ( 1..3 ) {
+ ::is XS::APItest::gv_fetchmeth_type(\%main::, "method", $type, $level, 0), "*main::method", "$types[$type] is UTF-8 clean";
+ ::ok !XS::APItest::gv_fetchmeth_type(\%main::, $meth_as_octets, $type, $level, 0);
+ ::ok !XS::APItest::gv_fetchmeth_type(\%main::, "method", $type, $level, 0);
+
+ {
+ no strict 'refs';
+ ::ok !XS::APItest::gv_fetchmeth_type(
+ \%{"\357\275\215\357\275\201\357\275\211\357\275\216::"},
+ "method", $type, $level, 0);
+ ::ok !XS::APItest::gv_fetchmeth_type(
+ \%{"\357\275\215\357\275\201\357\275\211\357\275\216::"},
+ "method", $type, $level, 0);
+ }
+ }
+}
Added: vendor/perl/dist/ext/XS-APItest/t/gv_fetchmeth_autoload.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/gv_fetchmeth_autoload.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/gv_fetchmeth_autoload.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,83 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 53;
+
+use_ok('XS::APItest');
+
+my $level = -1;
+my @types = map { 'gv_fetchmeth' . $_ . "_autoload" } '', qw( _sv _pv _pvn );
+
+sub test { "Sanity check" }
+
+for my $type ( 0..3 ) {
+ is *{XS::APItest::gv_fetchmeth_autoload_type(
+ \%::, "test", $type, $level, 0
+ )}{CODE}->(), "Sanity check";
+}
+
+{
+ ok !XS::APItest::gv_fetchmeth_autoload_type(\%::, "etc", 1, $level, 0), "fails when the glob doesn't exist and AUTOLOAD is undefined,";
+ local *AUTOLOAD = sub { 1 };
+ is XS::APItest::gv_fetchmeth_autoload_type(\%::, "etc", 1, $level, 0), "*main::etc", "..but defining AUTOLOAD makes it succeed.";
+}
+
+for my $type ( 0..3 ) {
+ my $meth = "gen$type";
+ ok !XS::APItest::gv_fetchmeth_autoload_type(\%::, $meth, $type, -1, 0), "With level = -1, $types[$type] returns false.";
+ ok !$::{$meth}, "...and doesn't vivify the glob.";
+
+ ok !XS::APItest::gv_fetchmeth_autoload_type(\%::, $meth, $type, 0, 0), "With level = 0, $types[$type] still returns false.";
+ ok $::{$meth}, "...but does vivify the glob.";
+
+ ok !XS::APItest::gv_fetchmeth_autoload_type(\%::, $meth . $type, $type, $level, 0), "$types[$type] fails when the glob doesn't exist and AUTOLOAD is undefined,";
+ local *AUTOLOAD = sub { 1 };
+ is XS::APItest::gv_fetchmeth_autoload_type(\%::, $meth . $type, $type, $level, 0), "*main::$meth$type", "..but defining AUTOLOAD makes it succeed.";
+}
+
+{
+ no warnings 'once';
+ *method = sub { 1 };
+}
+
+ok !XS::APItest::gv_fetchmeth_autoload_type(\%::, "method\0not quite!", 0, $level, 0), "gv_fetchmeth() is nul-clean";
+ok !XS::APItest::gv_fetchmeth_autoload_type(\%::, "method\0not quite!", 1, $level, 0), "gv_fetchmeth_autoload_sv() is nul-clean";
+is XS::APItest::gv_fetchmeth_autoload_type(\%::, "method\0not quite!", 2, $level, 0), "*main::method", "gv_fetchmeth_autoload_pv() is not nul-clean";
+ok !XS::APItest::gv_fetchmeth_autoload_type(\%::, "method\0not quite!", 3, $level, 0), "gv_fetchmeth_autoload_pvn() is nul-clean";
+
+{
+ use utf8;
+ use open qw( :utf8 :std );
+
+ package main;
+
+ sub method { 1 }
+
+ my $meth_as_octets =
+ "\357\275\215\357\275\205\357\275\224\357\275\210\357\275\217\357\275\204";
+
+ $level = -1;
+ for my $type ( 1..3 ) {
+ ::is XS::APItest::gv_fetchmeth_autoload_type(\%main::, "method", $type, $level, 0), "*main::method", "$types[$type] is UTF-8 clean";
+ ::ok !XS::APItest::gv_fetchmeth_autoload_type(\%main::, $meth_as_octets, $type, $level, 0);
+ ::ok !XS::APItest::gv_fetchmeth_autoload_type(\%main::, "method", $type, $level, 0);
+
+ {
+ no warnings 'once';
+ local *AUTOLOAD = sub { 1 };
+ ::is XS::APItest::gv_fetchmeth_autoload_type(\%main::, "method$type", $type, $level, 0), "*main::method$type", "Autoloading UTF-8 subs works";
+ }
+
+ {
+ no strict 'refs';
+ ::ok !XS::APItest::gv_fetchmeth_autoload_type(
+ \%{"\357\275\215\357\275\201\357\275\211\357\275\216::"},
+ "method", $type, $level, 0);
+ ::ok !XS::APItest::gv_fetchmeth_autoload_type(
+ \%{"\357\275\215\357\275\201\357\275\211\357\275\216::"},
+ "method", $type, $level, 0);
+ }
+ }
+}
Added: vendor/perl/dist/ext/XS-APItest/t/gv_fetchmethod_flags.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/gv_fetchmethod_flags.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/gv_fetchmethod_flags.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,51 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 24;
+
+use_ok('XS::APItest');
+
+sub method { 1 }
+
+ok !XS::APItest::gv_fetchmethod_flags_type(\%::, "nothing", 1, 0);
+
+for my $type ( 1..3 ) {
+ is XS::APItest::gv_fetchmethod_flags_type(\%::, "method", $type, 0), "*main::method", "Sanity check";
+}
+
+ok !XS::APItest::gv_fetchmethod_flags_type(\%::, "method\0not quite!", 1, 0), "gv_fetchmethod_flags_sv() is nul-clean";
+ok !XS::APItest::gv_fetchmethod_flags_type(\%::, "method\0not quite!", 3, 0), "gv_fetchmethod_flags_pvn() is nul-clean";
+
+ok XS::APItest::gv_fetchmethod_flags_type(\%::, "method\0not quite!", 0, 0), "gv_fetchmethod_flags() is not nul-clean";
+is XS::APItest::gv_fetchmethod_flags_type(\%::, "method\0not quite!", 2, 0), "*main::method", "gv_fetchmethod_flags_pv() is not nul-clean";
+
+{
+ use utf8;
+ use open qw( :utf8 :std );
+
+ package main;
+
+ sub method { 1 }
+ sub method { 1 }
+
+ my $meth_as_octets =
+ "\357\275\215\357\275\205\357\275\224\357\275\210\357\275\217\357\275\204";
+
+ for my $type ( 1..3 ) {
+ ::is XS::APItest::gv_fetchmethod_flags_type(\%main::, "method", $type, 0), "*main::method";
+ ::ok !XS::APItest::gv_fetchmethod_flags_type(\%main::, $meth_as_octets, $type, 0);
+ ::is XS::APItest::gv_fetchmethod_flags_type(\%main::, "method", $type, 0), "*main::method";
+
+ {
+ no strict 'refs';
+ ::ok !XS::APItest::gv_fetchmethod_flags_type(
+ \%{"\357\275\215\357\275\201\357\275\211\357\275\216::"},
+ "method", $type, 0);
+ ::ok !XS::APItest::gv_fetchmethod_flags_type(
+ \%{"\357\275\215\357\275\201\357\275\211\357\275\216::"},
+ "method", $type, 0);
+ }
+ }
+}
Added: vendor/perl/dist/ext/XS-APItest/t/gv_init.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/gv_init.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/gv_init.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+#!perl
+
+use strict;
+use warnings;
+use Test::More tests => 12;
+
+use XS::APItest;
+
+is XS::APItest::gv_init_type("sanity_check", 0, 0, 0), "*main::sanity_check";
+ok $::{sanity_check};
+
+for my $type (0..3) {
+ is XS::APItest::gv_init_type("test$type", 0, 0, $type), "*main::test$type";
+ ok $::{"test$type"};
+}
+
+my $latin_1 = "è";
+my $utf8 = "\x{30cb}";
+
+is XS::APItest::gv_init_type($latin_1, 0, 0, 1), "*main::$latin_1";
+is XS::APItest::gv_init_type($utf8, 0, 0, 1), "*main::$utf8";
Added: vendor/perl/dist/ext/XS-APItest/t/handy.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/handy.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/handy.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,212 @@
+#!perl -w
+
+use strict;
+use Test::More;
+use Config;
+
+use XS::APItest;
+
+use Unicode::UCD qw(prop_invlist);
+
+sub truth($) { # Converts values so is() works
+ return (shift) ? 1 : 0;
+}
+
+my $locale;
+if($Config{d_setlocale}) {
+ require POSIX;
+ $locale = POSIX::setlocale( &POSIX::LC_ALL, "C");
+ if (defined $locale && $locale eq 'C') {
+ BEGIN {
+ if($Config{d_setlocale}) {
+ require locale; import locale; # make \w work right in non-ASCII lands
+ }
+ }
+
+ # Some locale implementations don't have the 128-255 characters all
+ # mean nothing. Skip the locale tests in that situation
+ for my $i (128 .. 255) {
+ if (chr($i) =~ /[[:print:]]/) {
+ undef $locale;
+ last;
+ }
+ }
+ }
+}
+
+my %properties = (
+ # name => Lookup-property name
+ alnum => 'Word',
+ wordchar => 'Word',
+ alphanumeric => 'Alnum',
+ alpha => 'Alpha',
+ ascii => 'ASCII',
+ blank => 'Blank',
+ cntrl => 'Control',
+ digit => 'Digit',
+ graph => 'Graph',
+ idfirst => '_Perl_IDStart',
+ idcont => '_Perl_IDCont',
+ lower => 'Lower',
+ print => 'Print',
+ psxspc => 'XPosixSpace',
+ punct => 'XPosixPunct',
+ quotemeta => '_Perl_Quotemeta',
+ space => 'XPerlSpace',
+ vertws => 'VertSpace',
+ upper => 'Upper',
+ xdigit => 'XDigit',
+ );
+
+my @warnings;
+local $SIG{__WARN__} = sub { push @warnings, @_ };
+
+use charnames ();
+foreach my $name (sort keys %properties) {
+ my $property = $properties{$name};
+ my @invlist = prop_invlist($property, '_perl_core_internal_ok');
+ if (! @invlist) {
+ fail("No inversion list found for $property");
+ next;
+ }
+
+ # Include all the Latin1 code points, plus 0x100.
+ my @code_points = (0 .. 256);
+
+ # Then include the next few boundaries above those from this property
+ my $above_latins = 0;
+ foreach my $range_start (@invlist) {
+ next if $range_start < 257;
+ push @code_points, $range_start - 1, $range_start;
+ $above_latins++;
+ last if $above_latins > 5;
+ }
+
+ # This makes sure we are using the Perl definition of idfirst and idcont,
+ # and not the Unicode. There are a few differences.
+ push @code_points, ord "\N{ESTIMATED SYMBOL}" if $name =~ /^id(first|cont)/;
+ if ($name eq "idcont") { # And some that are continuation but not start
+ push @code_points, ord("\N{GREEK ANO TELEIA}"),
+ ord("\N{COMBINING GRAVE ACCENT}");
+ }
+
+ # And finally one non-Unicode code point.
+ push @code_points, 0x110000; # Above Unicode, no prop should match
+ no warnings 'non_unicode';
+
+ for my $i (@code_points) {
+ my $function = uc($name);
+
+ my $matches = Unicode::UCD::_search_invlist(\@invlist, $i);
+ if (! defined $matches) {
+ $matches = 0;
+ }
+ else {
+ $matches = truth(! ($matches % 2));
+ }
+
+ my $ret;
+ my $char_name = charnames::viacode($i) // "No name";
+ my $display_name = sprintf "\\N{U+%02X, %s}", $i, $char_name;
+
+ if ($name eq 'quotemeta') { # There is only one macro for this, and is
+ # defined only for Latin1 range
+ $ret = truth eval "test_is${function}($i)";
+ if ($@) {
+ fail $@;
+ }
+ else {
+ my $truth = truth($matches && $i < 256);
+ is ($ret, $truth, "is${function}( $display_name ) == $truth");
+ }
+ next;
+ }
+
+ # vertws is always all of Unicode; ALNUM_A and ALNUM_L1 are not
+ # defined as they were added later, after WORDCHAR was created to be a
+ # clearer synonym for ALNUM
+ if ($name ne 'vertws') {
+ if ($name ne 'alnum') {
+ $ret = truth eval "test_is${function}_A($i)";
+ if ($@) {
+ fail($@);
+ }
+ else {
+ my $truth = truth($matches && $i < 128);
+ is ($ret, $truth, "is${function}_A( $display_name ) == $truth");
+ }
+ $ret = truth eval "test_is${function}_L1($i)";
+ if ($@) {
+ fail($@);
+ }
+ else {
+ my $truth = truth($matches && $i < 256);
+ is ($ret, $truth, "is${function}_L1( $display_name ) == $truth");
+ }
+ }
+
+ if (defined $locale) {
+ require locale; import locale;
+
+ $ret = truth eval "test_is${function}_LC($i)";
+ if ($@) {
+ fail($@);
+ }
+ else {
+ my $truth = truth($matches && $i < 128);
+ is ($ret, $truth, "is${function}_LC( $display_name ) == $truth");
+ }
+ }
+ }
+
+ $ret = truth eval "test_is${function}_uni($i)";
+ if ($@) {
+ fail($@);
+ }
+ else {
+ is ($ret, $matches, "is${function}_uni( $display_name ) == $matches");
+ }
+
+ if (defined $locale && $name ne 'vertws') {
+ require locale; import locale;
+
+ $ret = truth eval "test_is${function}_LC_uvchr('$i')";
+ if ($@) {
+ fail($@);
+ }
+ else {
+ my $truth = truth($matches && ($i < 128 || $i > 255));
+ is ($ret, $truth, "is${function}_LC_uvchr( $display_name ) == $truth");
+ }
+ }
+
+ my $char = chr($i);
+ utf8::upgrade($char);
+ $char = quotemeta $char if $char eq '\\' || $char eq "'";
+ $ret = truth eval "test_is${function}_utf8('$char')";
+ if ($@) {
+ fail($@);
+ }
+ else {
+ is ($ret, $matches, "is${function}_utf8( $display_name ) == $matches");
+ }
+
+ if ($name ne 'vertws' && defined $locale) {
+ require locale; import locale;
+
+ $ret = truth eval "test_is${function}_LC_utf8('$char')";
+ if ($@) {
+ fail($@);
+ }
+ else {
+ my $truth = truth($matches && ($i < 128 || $i > 255));
+ is ($ret, $truth, "is${function}_LC_utf8( $display_name ) == $truth");
+ }
+ }
+ }
+}
+
+# This is primarily to make sure that no non-Unicode warnings get generated
+is(scalar @warnings, 0, "No warnings were generated " . join ", ", @warnings);
+
+done_testing;
Added: vendor/perl/dist/ext/XS-APItest/t/labelconst_utf8.aux
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/labelconst_utf8.aux (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/labelconst_utf8.aux 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,13 @@
+use utf8;
+use open qw( :utf8 :std );
+
+use XS::APItest qw(labelconst);
+my $z = "";
+$z .= labelconst FǑǑ:;
+$z .= labelconst BÀR:
+ ;
+$z .= labelconst ᛒÀZ
+ :;
+$z .= labelconst
+ QÙÙX:;
+$z;
Added: vendor/perl/dist/ext/XS-APItest/t/lexsub.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/lexsub.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/lexsub.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,19 @@
+use Test::More tests => 4;
+use XS::APItest;
+
+
+sub fribbler { 2*shift }
+{
+ BEGIN { lexical_import fribbler => sub { 3*shift } }
+ is fribbler(15), 45, 'lexical subs via pad_add_name';
+}
+is fribbler(15), 30, 'XS-allocated lexical subs falling out of scope';
+
+{
+ BEGIN { lexical_import fribbler => sub { 3*shift } }
+ is fribbler(15), 45, 'lexical subs via pad_add_name';
+ no warnings;
+ use feature 'lexical_subs';
+ our sub fribbler;
+ is fribbler(15), 30, 'our sub overrides XS-registered lexical sub';
+}
Added: vendor/perl/dist/ext/XS-APItest/t/lvalue.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/lvalue.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/lvalue.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,32 @@
+# Miscellaneous tests for XS lvalue functions
+
+use warnings;
+use strict;
+
+use Test::More tests => 4;
+
+use XS::APItest 'lv_temp_object';
+
+
+{
+ my $w;
+ local $SIG{__WARN__} = sub { $w = shift };
+
+ # [perl #31946]
+ lv_temp_object() = 75;
+ like $w, qr/Useless assignment to a temporary at/,
+ 'warning when assigning to temp returned from XS lv sub';
+ undef $w;
+ (lv_temp_object()) = 75;
+ like $w, qr/Useless assignment to a temporary at/,
+ 'warning when list-assigning to temp returned from XS lv sub';
+
+ $w = undef;
+ {
+ package XS::APItest::TempObj;
+ use overload '.=' => sub { $::assigned = $_[1] };
+ }
+ lv_temp_object() .= 63;
+ is $::assigned, 63, 'overloaded .= on temp obj returned from lv sub';
+ is $w, undef, 'no warning from overloaded .= on temp obj';
+}
Added: vendor/perl/dist/ext/XS-APItest/t/mro.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/mro.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/mro.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,16 @@
+#!perl
+
+use XS::APItest;
+use Test::More;
+
+plan tests => 1;
+
+use mro;
+mro::set_mro(AA => 'justisa');
+
+ at AA::ISA = qw "BB CC";
+
+sub BB::fromp { "bb" }
+sub CC::fromp { "cc" }
+
+is fromp AA, 'bb', 'first elem of linearisation is not ignored';
Added: vendor/perl/dist/ext/XS-APItest/t/newCONSTSUB.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/newCONSTSUB.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/newCONSTSUB.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,102 @@
+#!perl
+
+use strict;
+use utf8;
+use open qw( :utf8 :std );
+use Test::More tests => 22;
+
+use XS::APItest;
+
+# This test must happen outside of any warnings scope
+{
+ local $^W;
+ my $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ sub frimple() { 78 }
+ newCONSTSUB_flags(\%::, "frimple", 0, undef);
+ like $w, qr/Constant subroutine frimple redefined at /,
+ 'newCONSTSUB constant redefinition warning is unaffected by $^W=0';
+ undef $w;
+ newCONSTSUB_flags(\%::, "frimple", 0, undef);
+ is $w, undef, '...unless the const SVs are the same';
+ eval 'sub frimple() { 78 }';
+ undef $w;
+ newCONSTSUB_flags(\%::, "frimple", 0, "78");
+ is $w, undef, '...or the const SVs have the same value';
+}
+
+use warnings;
+
+my ($const, $glob) =
+ XS::APItest::newCONSTSUB(\%::, "sanity_check", 0, undef);
+
+ok $const;
+ok *{$glob}{CODE};
+
+($const, $glob) =
+ XS::APItest::newCONSTSUB(\%::, "\x{30cb}", 0, undef);
+ok $const, "newCONSTSUB generates the constant,";
+ok *{$glob}{CODE}, "..and the glob,";
+ok !$::{"\x{30cb}"}, "...but not the right one";
+
+($const, $glob) =
+ XS::APItest::newCONSTSUB_flags(\%::, "\x{30cd}", 0, undef);
+ok $const, "newCONSTSUB_flags generates the constant,";
+ok *{$glob}{CODE}, "..and the glob,";
+ok $::{"\x{30cd}"}, "...the right one!";
+
+eval q{
+ BEGIN {
+ no warnings;
+ my $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ *foo = sub(){123};
+ newCONSTSUB_flags(\%::, "foo", 0, undef);
+ is $w, undef, 'newCONSTSUB uses calling scope for redefinition warnings';
+ }
+};
+
+{
+ no strict 'refs';
+ *{"foo::\x{100}"} = sub(){return 123};
+ my $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ newCONSTSUB_flags(\%foo::, "\x{100}", 0, undef);
+ like $w, qr/Subroutine \x{100} redefined at /,
+ 'newCONSTSUB redefinition warning + utf8';
+ undef $w;
+ newCONSTSUB_flags(\%foo::, "\x{100}", 0, 54);
+ like $w, qr/Constant subroutine \x{100} redefined at /,
+ 'newCONSTSUB constant redefinition warning + utf8';
+}
+
+# XS::APItest was not handling references correctly here
+
+package Counter {
+ our $count = 0;
+
+ sub new {
+ ++$count;
+ my $o = bless [];
+ return $o;
+ }
+
+ sub DESTROY {
+ --$count;
+ }
+};
+
+foreach (['newCONSTSUB', 'ZZIP'],
+ ['newCONSTSUB_flags', 'BRRRAPP']) {
+ my ($using, $name) = @$_;
+ is($Counter::count, 0, 'No objects exist before we start');
+ my $sub = XS::APItest->can($using);
+ ($const, $glob) = $sub->(\%::, $name, 0, Counter->new());
+ is($const, 1, "subroutine generated by $using is CvCONST");
+ is($Counter::count, 1, '1 object now exists');
+ {
+ no warnings 'redefine';
+ *$glob = sub () {};
+ }
+ is($Counter::count, 0, 'no objects remain');
+}
Added: vendor/perl/dist/ext/XS-APItest/t/pad_scalar.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/pad_scalar.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/pad_scalar.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,75 @@
+use warnings;
+use strict;
+
+use Test::More tests => 76;
+
+use XS::APItest qw(pad_scalar);
+
+is pad_scalar(1, "foo"), "NOT_IN_PAD";
+is pad_scalar(2, "foo"), "NOT_IN_PAD";
+is pad_scalar(3, "foo"), "NOT_IN_PAD";
+is pad_scalar(4, "foo"), "NOT_IN_PAD";
+is pad_scalar(1, "bar"), "NOT_IN_PAD";
+is pad_scalar(2, "bar"), "NOT_IN_PAD";
+is pad_scalar(3, "bar"), "NOT_IN_PAD";
+
+our $foo = "wibble";
+my $bar = "wobble";
+is pad_scalar(1, "foo"), "NOT_MY";
+is pad_scalar(2, "foo"), "NOT_MY";
+is pad_scalar(3, "foo"), "NOT_MY";
+is pad_scalar(4, "foo"), "NOT_MY";
+is pad_scalar(1, "bar"), "wobble";
+is pad_scalar(2, "bar"), "wobble";
+is pad_scalar(3, "bar"), "wobble";
+
+sub aa($);
+sub aa($) {
+ my $xyz;
+ ok \pad_scalar(1, "xyz") == \$xyz;
+ ok \pad_scalar(2, "xyz") == \$xyz;
+ ok \pad_scalar(3, "xyz") == \$xyz;
+ aa(0) if $_[0];
+ ok \pad_scalar(1, "xyz") == \$xyz;
+ ok \pad_scalar(2, "xyz") == \$xyz;
+ ok \pad_scalar(3, "xyz") == \$xyz;
+ is pad_scalar(1, "bar"), "wobble";
+ is pad_scalar(2, "bar"), "wobble";
+ is pad_scalar(3, "bar"), "wobble";
+}
+aa(1);
+
+sub bb() {
+ my $counter = 0;
+ my $foo = \$counter;
+ return sub {
+ ok pad_scalar(1, "foo") == \pad_scalar(1, "counter");
+ ok pad_scalar(2, "foo") == \pad_scalar(1, "counter");
+ ok pad_scalar(3, "foo") == \pad_scalar(1, "counter");
+ ok pad_scalar(4, "foo") == \pad_scalar(1, "counter");
+ if(pad_scalar(1, "counter") % 3 == 0) {
+ return pad_scalar(1, "counter")++;
+ } elsif(pad_scalar(1, "counter") % 3 == 0) {
+ return pad_scalar(2, "counter")++;
+ } else {
+ return pad_scalar(3, "counter")++;
+ }
+ };
+}
+my $a = bb();
+my $b = bb();
+is $a->(), 0;
+is $a->(), 1;
+is $a->(), 2;
+is $a->(), 3;
+is $b->(), 0;
+is $b->(), 1;
+is $a->(), 4;
+is $b->(), 2;
+
+is pad_scalar(1, "foo"), "NOT_MY";
+is pad_scalar(2, "foo"), "NOT_MY";
+is pad_scalar(3, "foo"), "NOT_MY";
+is pad_scalar(4, "foo"), "NOT_MY";
+
+1;
Added: vendor/perl/dist/ext/XS-APItest/t/sort.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/sort.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/sort.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,17 @@
+#!perl -w
+
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+use XS::APItest;
+
+is join("", sort xs_cmp split//, '1415926535'), '1135559246',
+ 'sort treats XS cmp routines as having implicit ($$)';
+{
+ my $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ () = sort xs_cmp_undef 1,2;
+ like $w, qr/^Use of uninitialized value in sort at /,
+ 'warning about undef retval from cmp routine mentions sort';
+}
Added: vendor/perl/dist/ext/XS-APItest/t/sviscow.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/sviscow.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/sviscow.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,13 @@
+use strict;
+use warnings; no warnings 'once';
+
+use Test::More tests => 1;
+
+use XS::APItest;
+use Hash::Util 'lock_value';
+
+my %h;
+$h{g} = *foo;
+lock_value %h, 'g';
+
+ok(!SvIsCOW($h{g}), 'SvIsCOW is honest when it comes to globs');
Added: vendor/perl/dist/ext/XS-APItest/t/svpv.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/svpv.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/svpv.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,25 @@
+#!perl -w
+
+use Test::More tests => 18;
+
+use XS::APItest;
+
+for my $func ('SvPVbyte', 'SvPVutf8') {
+ $g = *glob;
+ $r = \1;
+ is &$func($g), '*main::glob', "$func(\$glob_copy)";
+ is ref\$g, 'GLOB', "$func(\$glob_copy) does not flatten the glob";
+ is &$func($r), "$r", "$func(\$ref)";
+ is ref\$r, 'REF', "$func(\$ref) does not flatten the ref";
+
+ is &$func(*glob), '*main::glob', "$func(*glob)";
+ is ref\$::{glob}, 'GLOB', "$func(*glob) does not flatten the glob";
+ is &$func($^V), "$^V", "$func(\$ro_ref)";
+ is ref\$^V, 'REF', "$func(\$ro_ref) does not flatten the ref";
+}
+
+eval 'SvPVbyte(*{chr 256})';
+like $@, qr/^Wide character/, 'SvPVbyte fails on Unicode glob';
+package r { use overload '""' => sub { substr "\x{100}\xff", -1 } }
+is SvPVbyte(bless [], r::), "\xff",
+ 'SvPVbyte on ref returning downgradable utf8 string';
Added: vendor/perl/dist/ext/XS-APItest/t/sym-hook.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/sym-hook.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/sym-hook.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,32 @@
+
+# Test that PL_check hooks for RV2*V can override symbol lookups.
+
+# So far we only test RV2CV.
+
+use XS::APItest;
+use Test::More tests => 4;
+
+BEGIN {
+ setup_rv2cv_addunderbar;
+ $^H{'XS::APItest/addunder'} = 1; # make foo() actually call foo_()
+}
+
+sub foo_ { @_ ? shift . "___" : "phew" }
+
+is(foo(), "phew");
+
+# Make sure subs looked up via rv2cv check hooks are not treated as second-
+# class subs.
+
+BEGIN { # If there is a foo symbol, this test will not be testing anything.
+ delete $::{foo};
+ delete $::{goo};
+}
+is((foo bar), 'bar___');
+$bar = "baz";
+is((foo $bar), 'baz___');
+
+# Proto should cause goo() to override Foo->goo interpretation.
+{package Foom}
+sub goo_ (*) { shift . "===" }
+is((goo Foom), "Foom===");
Added: vendor/perl/dist/ext/XS-APItest/t/underscore_length.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/underscore_length.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/underscore_length.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+use warnings; no warnings 'experimental::lexical_topic';
+use strict;
+
+use Test::More tests => 4;
+
+use XS::APItest qw(underscore_length);
+
+$_ = "foo";
+is underscore_length(), 3;
+
+$_ = "snowman \x{2603}";
+is underscore_length(), 9;
+
+my $_ = "xyzzy";
+is underscore_length(), 5;
+
+$_ = "pile of poo \x{1f4a9}";
+is underscore_length(), 13;
+
+1;
Added: vendor/perl/dist/ext/XS-APItest/t/whichsig.t
===================================================================
--- vendor/perl/dist/ext/XS-APItest/t/whichsig.t (rev 0)
+++ vendor/perl/dist/ext/XS-APItest/t/whichsig.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,26 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 9;
+
+use_ok('XS::APItest');
+
+my @types = map { 'whichsig' . $_ } '', qw( _sv _pv _pvn );
+
+sub test { "Sanity check" }
+
+{
+ for my $type ( 0..3 ) {
+ is XS::APItest::whichsig_type("KILL", $type), 9, "Sanity check, $types[$type] works";
+ }
+}
+
+is XS::APItest::whichsig_type("KILL\0whoops", 0), 9, "whichsig() is not nul-clean";
+
+is XS::APItest::whichsig_type("KILL\0whoops", 1), -1, "whichsig_sv() is nul-clean";
+
+is XS::APItest::whichsig_type("KILL\0whoops", 2), 9, "whichsig_pv() is not nul-clean";
+
+is XS::APItest::whichsig_type("KILL\0whoops", 3), -1, "whichsig_pvn() is nul-clean";
Added: vendor/perl/dist/ext/arybase/arybase.pm
===================================================================
--- vendor/perl/dist/ext/arybase/arybase.pm (rev 0)
+++ vendor/perl/dist/ext/arybase/arybase.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,98 @@
+package arybase;
+
+our $VERSION = "0.06";
+
+require XSLoader;
+XSLoader::load(); # This returns true, which makes require happy.
+
+__END__
+
+=head1 NAME
+
+arybase - Set indexing base via $[
+
+=head1 SYNOPSIS
+
+ $[ = 1;
+
+ @a = qw(Sun Mon Tue Wed Thu Fri Sat);
+ print $a[3], "\n"; # prints Tue
+
+=head1 DESCRIPTION
+
+This module implements Perl's C<$[> variable. You should not use it
+directly.
+
+Assigning to C<$[> has the I<compile-time> effect of making the assigned
+value, converted to an integer, the index of the first element in an array
+and the first character in a substring, within the enclosing lexical scope.
+
+It can be written with or without C<local>:
+
+ $[ = 1;
+ local $[ = 1;
+
+It only works if the assignment can be detected at compile time and the
+value assigned is constant.
+
+It affects the following operations:
+
+ $array[$element]
+ @array[@slice]
+ $#array
+ (list())[$slice]
+ splice @array, $index, ...
+ each @array
+ keys @array
+
+ index $string, $substring # return value is affected
+ pos $string
+ substr $string, $offset, ...
+
+As with the default base of 0, negative bases count from the end of the
+array or string, starting with -1. If C<$[> is a positive integer, indices
+from C<$[-1> to 0 also count from the end. If C<$[> is negative (why would
+you do that, though?), indices from C<$[> to 0 count from the beginning of
+the string, but indices below C<$[> count from the end of the string as
+though the base were 0.
+
+Prior to Perl 5.16, indices from 0 to C<$[-1> inclusive, for positive
+values of C<$[>, behaved differently for different operations; negative
+indices equal to or greater than a negative C<$[> likewise behaved
+inconsistently.
+
+=head1 HISTORY
+
+Before Perl 5, C<$[> was a global variable that affected all array indices
+and string offsets.
+
+Starting with Perl 5, it became a file-scoped compile-time directive, which
+could be made lexically-scoped with C<local>. "File-scoped" means that the
+C<$[> assignment could leak out of the block in which occurred:
+
+ {
+ $[ = 1;
+ # ... array base is 1 here ...
+ }
+ # ... still 1, but not in other files ...
+
+In Perl 5.10, it became strictly lexical. The file-scoped behaviour was
+removed (perhaps inadvertently, but what's done is done).
+
+In Perl 5.16, the implementation was moved into this module, and out of the
+Perl core. The erratic behaviour that occurred with indices between -1 and
+C<$[> was made consistent between operations, and, for negative bases,
+indices from C<$[> to -1 inclusive were made consistent between operations.
+
+=head1 BUGS
+
+Error messages that mention array indices use the 0-based index.
+
+C<keys $arrayref> and C<each $arrayref> do not respect the current value of
+C<$[>.
+
+=head1 SEE ALSO
+
+L<perlvar/"$[">, L<Array::Base> and L<String::Base>.
+
+=cut
Added: vendor/perl/dist/ext/arybase/arybase.xs
===================================================================
--- vendor/perl/dist/ext/arybase/arybase.xs (rev 0)
+++ vendor/perl/dist/ext/arybase/arybase.xs 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,485 @@
+#define PERL_NO_GET_CONTEXT /* we want efficiency */
+#define PERL_EXT
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+#include "feature.h"
+
+/* ... op => info map ................................................. */
+
+typedef struct {
+ OP *(*old_pp)(pTHX);
+ IV base;
+} ab_op_info;
+
+#define PTABLE_NAME ptable_map
+#define PTABLE_VAL_FREE(V) PerlMemShared_free(V)
+#include "ptable.h"
+#define ptable_map_store(T, K, V) ptable_map_store(aPTBLMS_ (T), (K), (V))
+
+STATIC ptable *ab_op_map = NULL;
+
+#ifdef USE_ITHREADS
+STATIC perl_mutex ab_op_map_mutex;
+#endif
+
+STATIC const ab_op_info *ab_map_fetch(const OP *o, ab_op_info *oi) {
+ const ab_op_info *val;
+
+#ifdef USE_ITHREADS
+ MUTEX_LOCK(&ab_op_map_mutex);
+#endif
+
+ val = (ab_op_info *)ptable_fetch(ab_op_map, o);
+ if (val) {
+ *oi = *val;
+ val = oi;
+ }
+
+#ifdef USE_ITHREADS
+ MUTEX_UNLOCK(&ab_op_map_mutex);
+#endif
+
+ return val;
+}
+
+STATIC const ab_op_info *ab_map_store_locked(
+ pPTBLMS_ const OP *o, OP *(*old_pp)(pTHX), IV base
+) {
+#define ab_map_store_locked(O, PP, B) \
+ ab_map_store_locked(aPTBLMS_ (O), (PP), (B))
+ ab_op_info *oi;
+
+ if (!(oi = (ab_op_info *)ptable_fetch(ab_op_map, o))) {
+ oi = (ab_op_info *)PerlMemShared_malloc(sizeof *oi);
+ ptable_map_store(ab_op_map, o, oi);
+ }
+
+ oi->old_pp = old_pp;
+ oi->base = base;
+ return oi;
+}
+
+STATIC void ab_map_store(
+ pPTBLMS_ const OP *o, OP *(*old_pp)(pTHX), IV base)
+{
+#define ab_map_store(O, PP, B) ab_map_store(aPTBLMS_ (O),(PP),(B))
+
+#ifdef USE_ITHREADS
+ MUTEX_LOCK(&ab_op_map_mutex);
+#endif
+
+ ab_map_store_locked(o, old_pp, base);
+
+#ifdef USE_ITHREADS
+ MUTEX_UNLOCK(&ab_op_map_mutex);
+#endif
+}
+
+STATIC void ab_map_delete(pTHX_ const OP *o) {
+#define ab_map_delete(O) ab_map_delete(aTHX_ (O))
+#ifdef USE_ITHREADS
+ MUTEX_LOCK(&ab_op_map_mutex);
+#endif
+
+ ptable_map_store(ab_op_map, o, NULL);
+
+#ifdef USE_ITHREADS
+ MUTEX_UNLOCK(&ab_op_map_mutex);
+#endif
+}
+
+/* ... $[ Implementation .............................................. */
+
+#define hintkey "$["
+#define hintkey_len (sizeof(hintkey)-1)
+
+STATIC SV * ab_hint(pTHX_ const bool create) {
+#define ab_hint(c) ab_hint(aTHX_ c)
+ dVAR;
+ SV **val
+ = hv_fetch(GvHV(PL_hintgv), hintkey, hintkey_len, create);
+ if (!val)
+ return 0;
+ return *val;
+}
+
+/* current base at compile time */
+STATIC IV current_base(pTHX) {
+#define current_base() current_base(aTHX)
+ SV *hsv = ab_hint(0);
+ assert(FEATURE_ARYBASE_IS_ENABLED);
+ if (!hsv || !SvOK(hsv)) return 0;
+ return SvIV(hsv);
+}
+
+STATIC void set_arybase_to(pTHX_ IV base) {
+#define set_arybase_to(base) set_arybase_to(aTHX_ (base))
+ dVAR;
+ SV *hsv = ab_hint(1);
+ sv_setiv_mg(hsv, base);
+}
+
+#define old_ck(opname) STATIC OP *(*ab_old_ck_##opname)(pTHX_ OP *) = 0
+old_ck(sassign);
+old_ck(aassign);
+old_ck(aelem);
+old_ck(aslice);
+old_ck(lslice);
+old_ck(av2arylen);
+old_ck(splice);
+old_ck(keys);
+old_ck(each);
+old_ck(substr);
+old_ck(rindex);
+old_ck(index);
+old_ck(pos);
+
+STATIC bool ab_op_is_dollar_bracket(pTHX_ OP *o) {
+#define ab_op_is_dollar_bracket(o) ab_op_is_dollar_bracket(aTHX_ (o))
+ OP *c;
+ return o->op_type == OP_RV2SV && (o->op_flags & OPf_KIDS)
+ && (c = cUNOPx(o)->op_first)
+ && c->op_type == OP_GV
+ && GvSTASH(cGVOPx_gv(c)) == PL_defstash
+ && strEQ(GvNAME(cGVOPx_gv(c)), "[");
+}
+
+STATIC void ab_neuter_dollar_bracket(pTHX_ OP *o) {
+#define ab_neuter_dollar_bracket(o) ab_neuter_dollar_bracket(aTHX_ (o))
+ OP *oldc, *newc;
+ /*
+ * Must replace the core's $[ with something that can accept assignment
+ * of non-zero value and can be local()ised. Simplest thing is a
+ * different global variable.
+ */
+ oldc = cUNOPx(o)->op_first;
+ newc = newGVOP(OP_GV, 0,
+ gv_fetchpvs("arybase::leftbrack", GV_ADDMULTI, SVt_PVGV));
+ cUNOPx(o)->op_first = newc;
+ op_free(oldc);
+}
+
+STATIC void ab_process_assignment(pTHX_ OP *left, OP *right) {
+#define ab_process_assignment(l, r) \
+ ab_process_assignment(aTHX_ (l), (r))
+ if (ab_op_is_dollar_bracket(left) && right->op_type == OP_CONST) {
+ set_arybase_to(SvIV(cSVOPx_sv(right)));
+ ab_neuter_dollar_bracket(left);
+ Perl_ck_warner_d(aTHX_
+ packWARN(WARN_DEPRECATED), "Use of assignment to $[ is deprecated"
+ );
+ }
+}
+
+STATIC OP *ab_ck_sassign(pTHX_ OP *o) {
+ o = (*ab_old_ck_sassign)(aTHX_ o);
+ if (o->op_type == OP_SASSIGN && FEATURE_ARYBASE_IS_ENABLED) {
+ OP *right = cBINOPx(o)->op_first;
+ OP *left = right->op_sibling;
+ if (left) ab_process_assignment(left, right);
+ }
+ return o;
+}
+
+STATIC OP *ab_ck_aassign(pTHX_ OP *o) {
+ o = (*ab_old_ck_aassign)(aTHX_ o);
+ if (o->op_type == OP_AASSIGN && FEATURE_ARYBASE_IS_ENABLED) {
+ OP *right = cBINOPx(o)->op_first;
+ OP *left = cBINOPx(right->op_sibling)->op_first->op_sibling;
+ right = cBINOPx(right)->op_first->op_sibling;
+ ab_process_assignment(left, right);
+ }
+ return o;
+}
+
+void
+tie(pTHX_ SV * const sv, SV * const obj, HV *const stash)
+{
+ SV *rv = newSV_type(SVt_RV);
+
+ SvRV_set(rv, obj ? SvREFCNT_inc_simple_NN(obj) : newSV(0));
+ SvROK_on(rv);
+ sv_bless(rv, stash);
+
+ sv_unmagic((SV *)sv, PERL_MAGIC_tiedscalar);
+ sv_magic((SV *)sv, rv, PERL_MAGIC_tiedscalar, NULL, 0);
+ SvREFCNT_dec(rv); /* As sv_magic increased it by one. */
+}
+
+/* This function converts from base-based to 0-based an index to be passed
+ as an argument. */
+static IV
+adjust_index(IV index, IV base)
+{
+ if (index >= base || index > -1) return index-base;
+ return index;
+}
+/* This function converts from 0-based to base-based an index to
+ be returned. */
+static IV
+adjust_index_r(IV index, IV base)
+{
+ return index + base;
+}
+
+#define replace_sv(sv,base) \
+ ((sv) = sv_2mortal(newSViv(adjust_index(SvIV(sv),base))))
+#define replace_sv_r(sv,base) \
+ ((sv) = sv_2mortal(newSViv(adjust_index_r(SvIV(sv),base))))
+
+static OP *ab_pp_basearg(pTHX) {
+ dVAR; dSP;
+ SV **firstp = NULL;
+ SV **svp;
+ UV count = 1;
+ ab_op_info oi;
+ ab_map_fetch(PL_op, &oi);
+
+ switch (PL_op->op_type) {
+ case OP_AELEM:
+ firstp = SP;
+ break;
+ case OP_ASLICE:
+ firstp = PL_stack_base + TOPMARK + 1;
+ count = SP-firstp;
+ break;
+ case OP_LSLICE:
+ firstp = PL_stack_base + *(PL_markstack_ptr-1)+1;
+ count = TOPMARK - *(PL_markstack_ptr-1);
+ if (GIMME != G_ARRAY) {
+ firstp += count-1;
+ count = 1;
+ }
+ break;
+ case OP_SPLICE:
+ if (SP - PL_stack_base - TOPMARK >= 2)
+ firstp = PL_stack_base + TOPMARK + 2;
+ else count = 0;
+ break;
+ case OP_SUBSTR:
+ firstp = SP-(PL_op->op_private & 7)+2;
+ break;
+ default:
+ DIE(aTHX_
+ "panic: invalid op type for arybase.xs:ab_pp_basearg: %d",
+ PL_op->op_type);
+ }
+ svp = firstp;
+ while (count--) replace_sv(*svp,oi.base), svp++;
+ return (*oi.old_pp)(aTHX);
+}
+
+static OP *ab_pp_av2arylen(pTHX) {
+ dSP; dVAR;
+ SV *sv;
+ ab_op_info oi;
+ OP *ret;
+ ab_map_fetch(PL_op, &oi);
+ ret = (*oi.old_pp)(aTHX);
+ if (PL_op->op_flags & OPf_MOD || LVRET) {
+ sv = newSV(0);
+ tie(aTHX_ sv, TOPs, gv_stashpv("arybase::mg",1));
+ SETs(sv);
+ }
+ else {
+ SvGETMAGIC(TOPs);
+ if (SvOK(TOPs)) replace_sv_r(TOPs, oi.base);
+ }
+ return ret;
+}
+
+static OP *ab_pp_keys(pTHX) {
+ dVAR; dSP;
+ ab_op_info oi;
+ OP *retval;
+ const I32 offset = SP - PL_stack_base;
+ SV **svp;
+ ab_map_fetch(PL_op, &oi);
+ retval = (*oi.old_pp)(aTHX);
+ if (GIMME_V == G_SCALAR) return retval;
+ SPAGAIN;
+ svp = PL_stack_base + offset;
+ while (svp <= SP) replace_sv_r(*svp,oi.base), ++svp;
+ return retval;
+}
+
+static OP *ab_pp_each(pTHX) {
+ dVAR; dSP;
+ ab_op_info oi;
+ OP *retval;
+ const I32 offset = SP - PL_stack_base;
+ ab_map_fetch(PL_op, &oi);
+ retval = (*oi.old_pp)(aTHX);
+ SPAGAIN;
+ if (GIMME_V == G_SCALAR) {
+ if (SvOK(TOPs)) replace_sv_r(TOPs,oi.base);
+ }
+ else if (offset < SP - PL_stack_base) replace_sv_r(TOPm1s,oi.base);
+ return retval;
+}
+
+static OP *ab_pp_index(pTHX) {
+ dVAR; dSP;
+ ab_op_info oi;
+ OP *retval;
+ ab_map_fetch(PL_op, &oi);
+ if (MAXARG == 3 && TOPs) replace_sv(TOPs,oi.base);
+ retval = (*oi.old_pp)(aTHX);
+ SPAGAIN;
+ replace_sv_r(TOPs,oi.base);
+ return retval;
+}
+
+static OP *ab_ck_base(pTHX_ OP *o)
+{
+ OP * (*old_ck)(pTHX_ OP *o) = 0;
+ OP * (*new_pp)(pTHX) = ab_pp_basearg;
+ switch (o->op_type) {
+ case OP_AELEM : old_ck = ab_old_ck_aelem ; break;
+ case OP_ASLICE : old_ck = ab_old_ck_aslice ; break;
+ case OP_LSLICE : old_ck = ab_old_ck_lslice ; break;
+ case OP_AV2ARYLEN: old_ck = ab_old_ck_av2arylen; break;
+ case OP_SPLICE : old_ck = ab_old_ck_splice ; break;
+ case OP_KEYS : old_ck = ab_old_ck_keys ; break;
+ case OP_EACH : old_ck = ab_old_ck_each ; break;
+ case OP_SUBSTR : old_ck = ab_old_ck_substr ; break;
+ case OP_RINDEX : old_ck = ab_old_ck_rindex ; break;
+ case OP_INDEX : old_ck = ab_old_ck_index ; break;
+ case OP_POS : old_ck = ab_old_ck_pos ; break;
+ default:
+ DIE(aTHX_
+ "panic: invalid op type for arybase.xs:ab_ck_base: %d",
+ PL_op->op_type);
+ }
+ o = (*old_ck)(aTHX_ o);
+ if (!FEATURE_ARYBASE_IS_ENABLED) return o;
+ /* We need two switch blocks, as the type may have changed. */
+ switch (o->op_type) {
+ case OP_AELEM :
+ case OP_ASLICE :
+ case OP_LSLICE :
+ case OP_SPLICE :
+ case OP_SUBSTR : break;
+ case OP_POS :
+ case OP_AV2ARYLEN: new_pp = ab_pp_av2arylen ; break;
+ case OP_AKEYS : new_pp = ab_pp_keys ; break;
+ case OP_AEACH : new_pp = ab_pp_each ; break;
+ case OP_RINDEX :
+ case OP_INDEX : new_pp = ab_pp_index ; break;
+ default: return o;
+ }
+ {
+ IV const base = current_base();
+ if (base) {
+ ab_map_store(o, o->op_ppaddr, base);
+ o->op_ppaddr = new_pp;
+ /* Break the aelemfast optimisation */
+ if (o->op_type == OP_AELEM &&
+ cBINOPo->op_first->op_sibling->op_type == OP_CONST) {
+ cBINOPo->op_first->op_sibling
+ = newUNOP(OP_NULL,0,cBINOPo->op_first->op_sibling);
+ }
+ }
+ else ab_map_delete(o);
+ }
+ return o;
+}
+
+
+STATIC U32 ab_initialized = 0;
+
+/* --- XS ------------------------------------------------------------- */
+
+MODULE = arybase PACKAGE = arybase
+PROTOTYPES: DISABLE
+
+BOOT:
+{
+ GV *const gv = gv_fetchpvn("[", 1, GV_ADDMULTI|GV_NOTQUAL, SVt_PV);
+ sv_unmagic(GvSV(gv), PERL_MAGIC_sv); /* This is *our* scalar now! */
+ tie(aTHX_ GvSV(gv), NULL, GvSTASH(CvGV(cv)));
+
+ if (!ab_initialized++) {
+ ab_op_map = ptable_new();
+#ifdef USE_ITHREADS
+ MUTEX_INIT(&ab_op_map_mutex);
+#endif
+#define check(uc,lc,ck) \
+ wrap_op_checker(OP_##uc, ab_ck_##ck, &ab_old_ck_##lc)
+ check(SASSIGN, sassign, sassign);
+ check(AASSIGN, aassign, aassign);
+ check(AELEM, aelem, base);
+ check(ASLICE, aslice, base);
+ check(LSLICE, lslice, base);
+ check(AV2ARYLEN,av2arylen,base);
+ check(SPLICE, splice, base);
+ check(KEYS, keys, base);
+ check(EACH, each, base);
+ check(SUBSTR, substr, base);
+ check(RINDEX, rindex, base);
+ check(INDEX, index, base);
+ check(POS, pos, base);
+ }
+}
+
+void
+FETCH(...)
+ PREINIT:
+ SV *ret = FEATURE_ARYBASE_IS_ENABLED
+ ? cop_hints_fetch_pvs(PL_curcop, "$[", 0)
+ : 0;
+ PPCODE:
+ if (!ret || !SvOK(ret)) mXPUSHi(0);
+ else XPUSHs(ret);
+
+void
+STORE(SV *sv, IV newbase)
+ CODE:
+ if (FEATURE_ARYBASE_IS_ENABLED) {
+ SV *base = cop_hints_fetch_pvs(PL_curcop, "$[", 0);
+ if (SvOK(base) ? SvIV(base) == newbase : !newbase) XSRETURN_EMPTY;
+ Perl_croak(aTHX_ "That use of $[ is unsupported");
+ }
+ else if (newbase)
+ Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
+
+
+MODULE = arybase PACKAGE = arybase::mg
+PROTOTYPES: DISABLE
+
+void
+FETCH(SV *sv)
+ PPCODE:
+ if (!SvROK(sv) || SvTYPE(SvRV(sv)) >= SVt_PVAV)
+ Perl_croak(aTHX_ "Not a SCALAR reference");
+ {
+ SV *base = FEATURE_ARYBASE_IS_ENABLED
+ ? cop_hints_fetch_pvs(PL_curcop, "$[", 0)
+ : 0;
+ SvGETMAGIC(SvRV(sv));
+ if (!SvOK(SvRV(sv))) XSRETURN_UNDEF;
+ mXPUSHi(adjust_index_r(
+ SvIV_nomg(SvRV(sv)), base&&SvOK(base)?SvIV(base):0
+ ));
+ }
+
+void
+STORE(SV *sv, SV *newbase)
+ CODE:
+ if (!SvROK(sv) || SvTYPE(SvRV(sv)) >= SVt_PVAV)
+ Perl_croak(aTHX_ "Not a SCALAR reference");
+ {
+ SV *base = FEATURE_ARYBASE_IS_ENABLED
+ ? cop_hints_fetch_pvs(PL_curcop, "$[", 0)
+ : 0;
+ SvGETMAGIC(newbase);
+ if (!SvOK(newbase)) SvSetMagicSV(SvRV(sv),&PL_sv_undef);
+ else
+ sv_setiv_mg(
+ SvRV(sv),
+ adjust_index(
+ SvIV_nomg(newbase), base&&SvOK(base)?SvIV(base):0
+ )
+ );
+ }
Added: vendor/perl/dist/ext/arybase/ptable.h
===================================================================
--- vendor/perl/dist/ext/arybase/ptable.h (rev 0)
+++ vendor/perl/dist/ext/arybase/ptable.h 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,217 @@
+/* This is a pointer table implementation essentially copied from the ptr_table
+ * implementation in perl's sv.c, except that it has been modified to use memory
+ * shared across threads. */
+
+/* This header is designed to be included several times with different
+ * definitions for PTABLE_NAME and PTABLE_VAL_FREE(). */
+
+#undef pPTBLMS
+#undef pPTBLMS_
+#undef aPTBLMS
+#undef aPTBLMS_
+
+/* Context for PerlMemShared_* functions */
+
+#ifdef PERL_IMPLICIT_SYS
+# define pPTBLMS pTHX
+# define pPTBLMS_ pTHX_
+# define aPTBLMS aTHX
+# define aPTBLMS_ aTHX_
+#else
+# define pPTBLMS
+# define pPTBLMS_
+# define aPTBLMS
+# define aPTBLMS_
+#endif
+
+#ifndef pPTBL
+# define pPTBL pPTBLMS
+#endif
+#ifndef pPTBL_
+# define pPTBL_ pPTBLMS_
+#endif
+#ifndef aPTBL
+# define aPTBL aPTBLMS
+#endif
+#ifndef aPTBL_
+# define aPTBL_ aPTBLMS_
+#endif
+
+#ifndef PTABLE_NAME
+# define PTABLE_NAME ptable
+#endif
+
+#ifndef PTABLE_VAL_FREE
+# define PTABLE_VAL_FREE(V)
+#endif
+
+#ifndef PTABLE_JOIN
+# define PTABLE_PASTE(A, B) A ## B
+# define PTABLE_JOIN(A, B) PTABLE_PASTE(A, B)
+#endif
+
+#ifndef PTABLE_PREFIX
+# define PTABLE_PREFIX(X) PTABLE_JOIN(PTABLE_NAME, X)
+#endif
+
+#ifndef ptable_ent
+typedef struct ptable_ent {
+ struct ptable_ent *next;
+ const void * key;
+ void * val;
+} ptable_ent;
+#define ptable_ent ptable_ent
+#endif /* !ptable_ent */
+
+#ifndef ptable
+typedef struct ptable {
+ ptable_ent **ary;
+ UV max;
+ UV items;
+} ptable;
+#define ptable ptable
+#endif /* !ptable */
+
+#ifndef ptable_new
+STATIC ptable *ptable_new(pPTBLMS) {
+#define ptable_new() ptable_new(aPTBLMS)
+ ptable *t = (ptable *)PerlMemShared_malloc(sizeof *t);
+ t->max = 63;
+ t->items = 0;
+ t->ary = (ptable_ent **)PerlMemShared_calloc(t->max + 1, sizeof *t->ary);
+ return t;
+}
+#endif /* !ptable_new */
+
+#ifndef PTABLE_HASH
+# define PTABLE_HASH(ptr) \
+ ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
+#endif
+
+#ifndef ptable_find
+STATIC ptable_ent *ptable_find(const ptable * const t, const void * const key) {
+#define ptable_find ptable_find
+ ptable_ent *ent;
+ const UV hash = PTABLE_HASH(key);
+
+ ent = t->ary[hash & t->max];
+ for (; ent; ent = ent->next) {
+ if (ent->key == key)
+ return ent;
+ }
+
+ return NULL;
+}
+#endif /* !ptable_find */
+
+#ifndef ptable_fetch
+STATIC void *ptable_fetch(const ptable * const t, const void * const key) {
+#define ptable_fetch ptable_fetch
+ const ptable_ent *const ent = ptable_find(t, key);
+
+ return ent ? ent->val : NULL;
+}
+#endif /* !ptable_fetch */
+
+#ifndef ptable_split
+STATIC void ptable_split(pPTBLMS_ ptable * const t) {
+#define ptable_split(T) ptable_split(aPTBLMS_ (T))
+ ptable_ent **ary = t->ary;
+ const UV oldsize = t->max + 1;
+ UV newsize = oldsize * 2;
+ UV i;
+
+ ary = (ptable_ent **)PerlMemShared_realloc(ary, newsize * sizeof(*ary));
+ Zero(&ary[oldsize], newsize - oldsize, sizeof(*ary));
+ t->max = --newsize;
+ t->ary = ary;
+
+ for (i = 0; i < oldsize; i++, ary++) {
+ ptable_ent **curentp, **entp, *ent;
+ if (!*ary)
+ continue;
+ curentp = ary + oldsize;
+ for (entp = ary, ent = *ary; ent; ent = *entp) {
+ if ((newsize & PTABLE_HASH(ent->key)) != i) {
+ *entp = ent->next;
+ ent->next = *curentp;
+ *curentp = ent;
+ continue;
+ } else
+ entp = &ent->next;
+ }
+ }
+}
+#endif /* !ptable_split */
+
+STATIC void PTABLE_PREFIX(_store)(pPTBL_ ptable * const t, const void * const key, void * const val) {
+ ptable_ent *ent = ptable_find(t, key);
+
+ if (ent) {
+ void *oldval = ent->val;
+ PTABLE_VAL_FREE(oldval);
+ ent->val = val;
+ } else if (val) {
+ const UV i = PTABLE_HASH(key) & t->max;
+ ent = (ptable_ent *)PerlMemShared_malloc(sizeof *ent);
+ ent->key = key;
+ ent->val = val;
+ ent->next = t->ary[i];
+ t->ary[i] = ent;
+ t->items++;
+ if (ent->next && t->items > t->max)
+ ptable_split(t);
+ }
+}
+
+#ifndef ptable_walk
+STATIC void ptable_walk(pTHX_ ptable * const t, void (*cb)(pTHX_ ptable_ent *ent, void *userdata), void *userdata) {
+#define ptable_walk(T, CB, UD) ptable_walk(aTHX_ (T), (CB), (UD))
+ if (t && t->items) {
+ ptable_ent ** const array = t->ary;
+ UV i = t->max;
+ do {
+ ptable_ent *entry;
+ for (entry = array[i]; entry; entry = entry->next)
+ cb(aTHX_ entry, userdata);
+ } while (i--);
+ }
+}
+#endif /* !ptable_walk */
+
+STATIC void PTABLE_PREFIX(_clear)(pPTBL_ ptable * const t) {
+ if (t && t->items) {
+ ptable_ent ** const array = t->ary;
+ UV i = t->max;
+
+ do {
+ ptable_ent *entry = array[i];
+ while (entry) {
+ ptable_ent * const oentry = entry;
+ void *val = oentry->val;
+ entry = entry->next;
+ PTABLE_VAL_FREE(val);
+ PerlMemShared_free(oentry);
+ }
+ array[i] = NULL;
+ } while (i--);
+
+ t->items = 0;
+ }
+}
+
+STATIC void PTABLE_PREFIX(_free)(pPTBL_ ptable * const t) {
+ if (!t)
+ return;
+ PTABLE_PREFIX(_clear)(aPTBL_ t);
+ PerlMemShared_free(t->ary);
+ PerlMemShared_free(t);
+}
+
+#undef pPTBL
+#undef pPTBL_
+#undef aPTBL
+#undef aPTBL_
+
+#undef PTABLE_NAME
+#undef PTABLE_VAL_FREE
Added: vendor/perl/dist/ext/arybase/t/aeach.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/aeach.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/aeach.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
+use warnings; no warnings 'deprecated';
+use strict;
+
+BEGIN {
+ if("$]" < 5.011) {
+ require Test::More;
+ Test::More::plan(skip_all => "no array each on this Perl");
+ }
+}
+
+use Test::More tests => 2;
+
+our @activity;
+
+$[ = 3;
+
+our @t0 = qw(a b c);
+ at activity = ();
+foreach(0..5) {
+ push @activity, [ each(@t0) ];
+}
+is_deeply \@activity, [
+ [ 3, "a" ],
+ [ 4, "b" ],
+ [ 5, "c" ],
+ [],
+ [ 3, "a" ],
+ [ 4, "b" ],
+];
+
+our @t1 = qw(a b c);
+ at activity = ();
+foreach(0..5) {
+ push @activity, [ scalar each(@t1) ];
+}
+is_deeply \@activity, [
+ [ 3 ],
+ [ 4 ],
+ [ 5 ],
+ [ undef ],
+ [ 3 ],
+ [ 4 ],
+];
+
+1;
Added: vendor/perl/dist/ext/arybase/t/aelem.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/aelem.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/aelem.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,56 @@
+use warnings; no warnings 'deprecated';
+use strict;
+
+use Test::More tests => 33;
+
+our @t = qw(a b c d e f);
+our $r = \@t;
+our($i3, $i4, $i8, $i9) = (3, 4, 8, 9);
+our @i4 = (3, 3, 3, 3);
+
+$[ = 3;
+
+is $t[3], "a";
+is $t[4], "b";
+is $t[8], "f";
+is $t[9], undef;
+is_deeply [ scalar $t[4] ], [ "b" ];
+is_deeply [ $t[4] ], [ "b" ];
+
+is $t[2], 'f';
+is $t[-1], 'f';
+is $t[1], 'e';
+is $t[-2], 'e';
+
+{
+ $[ = -3;
+ is $t[-3], 'a';
+}
+
+is $r->[3], "a";
+is $r->[4], "b";
+is $r->[8], "f";
+is $r->[9], undef;
+is_deeply [ scalar $r->[4] ], [ "b" ];
+is_deeply [ $r->[4] ], [ "b" ];
+
+is $t[$i3], "a";
+is $t[$i4], "b";
+is $t[$i8], "f";
+is $t[$i9], undef;
+is_deeply [ scalar $t[$i4] ], [ "b" ];
+is_deeply [ $t[$i4] ], [ "b" ];
+is_deeply [ scalar $t[@i4] ], [ "b" ];
+is_deeply [ $t[@i4] ], [ "b" ];
+
+is $r->[$i3], "a";
+is $r->[$i4], "b";
+is $r->[$i8], "f";
+is $r->[$i9], undef;
+is_deeply [ scalar $r->[$i4] ], [ "b" ];
+is_deeply [ $r->[$i4] ], [ "b" ];
+is_deeply [ scalar $r->[@i4] ], [ "b" ];
+is_deeply [ $r->[@i4] ], [ "b" ];
+
+
+1;
Added: vendor/perl/dist/ext/arybase/t/akeys.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/akeys.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/akeys.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,40 @@
+use warnings; no warnings 'deprecated', 'experimental::lexical_topic';
+use strict;
+
+BEGIN {
+ if("$]" < 5.011) {
+ require Test::More;
+ Test::More::plan(skip_all => "no array keys on this Perl");
+ }
+}
+
+use Test::More tests => 8;
+
+our @t;
+
+$[ = 3;
+
+ at t = ();
+is_deeply [ scalar keys @t ], [ 0 ];
+is_deeply [ keys @t ], [];
+
+ at t = qw(a b c d e f);
+is_deeply [ scalar keys @t ], [ 6 ];
+is_deeply [ keys @t ], [ 3, 4, 5, 6, 7, 8 ];
+
+SKIP: {
+ skip "no lexical \$_", 4 unless eval q{my $_; 1};
+ eval q{
+ my $_;
+
+ @t = ();
+ is_deeply [ scalar keys @t ], [ 0 ];
+ is_deeply [ keys @t ], [];
+
+ @t = qw(a b c d e f);
+ is_deeply [ scalar keys @t ], [ 6 ];
+ is_deeply [ keys @t ], [ 3, 4, 5, 6, 7, 8 ];
+ };
+}
+
+1;
Added: vendor/perl/dist/ext/arybase/t/arybase.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/arybase.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/arybase.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,37 @@
+#!perl
+
+# Basic tests for $[ as a variable
+# plus miscellaneous bug fix tests
+
+no warnings 'deprecated';
+use Test::More tests => 7;
+
+sub outside_base_scope { return "${'['}" }
+
+$[ = 3;
+my $base = \$[;
+is "$$base", 3, 'retval of $[';
+is outside_base_scope, 0, 'retval of $[ outside its scope';
+
+${'['} = 3;
+pass('run-time $[ = 3 assignment (in $[ = 3 scope)');
+{
+ $[ = 0;
+ ${'['} = 0;
+ pass('run-time $[ = 0 assignment (in $[ = 3 scope)');
+}
+
+eval { ${'['} = 1 }; my $f = __FILE__; my $l = __LINE__;
+is $@, "That use of \$[ is unsupported at $f line $l.\n",
+ "error when setting $[ to integer other than current base at run-time";
+
+$[ = 6.7;
+is "$[", 6, '$[ is an integer';
+
+eval { my $x = 45; $[ = \$x }; $l = __LINE__;
+is $@, "That use of \$[ is unsupported at $f line $l.\n",
+ 'error when setting $[ to ref';
+
+sub foo { my $x; $x = wait } # compilation of this routine used to crash
+
+1;
Added: vendor/perl/dist/ext/arybase/t/aslice.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/aslice.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/aslice.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,42 @@
+use warnings; no warnings 'deprecated', 'experimental::lexical_topic';
+use strict;
+
+use Test::More tests => 18;
+
+our @t = qw(a b c d e f);
+our $r = \@t;
+our @i4 = (3, 5, 3, 5);
+
+$[ = 3;
+
+is_deeply [ scalar @t[3,4] ], [ qw(b) ];
+is_deeply [ @t[3,4,8,9] ], [ qw(a b f), undef ];
+is_deeply [ scalar @t[@i4] ], [ qw(c) ];
+is_deeply [ @t[@i4] ], [ qw(a c a c) ];
+is_deeply [ scalar @{$r}[3,4] ], [ qw(b) ];
+is_deeply [ @{$r}[3,4,8,9] ], [ qw(a b f), undef ];
+is_deeply [ scalar @{$r}[@i4] ], [ qw(c) ];
+is_deeply [ @{$r}[@i4] ], [ qw(a c a c) ];
+
+is_deeply [ @t[2,-1,1,-2] ], [ qw(f f e e) ];
+{
+ $[ = -3;
+ is_deeply [@t[-3,()]], ['a'];
+}
+
+SKIP: {
+ skip "no lexical \$_", 8 unless eval q{my $_; 1};
+ eval q{
+ my $_;
+ is_deeply [ scalar @t[3,4] ], [ qw(b) ];
+ is_deeply [ @t[3,4,8,9] ], [ qw(a b f), undef ];
+ is_deeply [ scalar @t[@i4] ], [ qw(c) ];
+ is_deeply [ @t[@i4] ], [ qw(a c a c) ];
+ is_deeply [ scalar @{$r}[3,4] ], [ qw(b) ];
+ is_deeply [ @{$r}[3,4,8,9] ], [ qw(a b f), undef ];
+ is_deeply [ scalar @{$r}[@i4] ], [ qw(c) ];
+ is_deeply [ @{$r}[@i4] ], [ qw(a c a c) ];
+ };
+}
+
+1;
Added: vendor/perl/dist/ext/arybase/t/av2arylen.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/av2arylen.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/av2arylen.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,26 @@
+use warnings; no warnings 'deprecated';
+use strict;
+
+use Test::More tests => 8;
+
+our @t = qw(a b c d e f);
+our $r = \@t;
+
+$[ = 3;
+
+is_deeply [ scalar $#t ], [ 8 ];
+is_deeply [ $#t ], [ 8 ];
+is_deeply [ scalar $#$r ], [ 8 ];
+is_deeply [ $#$r ], [ 8 ];
+
+my $arylen=\$#t;
+push @t, 'g';
+is 0+$$arylen, 9;
+$[ = 4;
+is 0+$$arylen, 10;
+--$$arylen;
+$[ = 3;
+is 0+$$arylen, 8;
+is 0+$#t, 8;
+
+1;
Added: vendor/perl/dist/ext/arybase/t/index.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/index.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/index.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,23 @@
+use warnings; no warnings 'deprecated';
+use strict;
+
+use Test::More tests => 12;
+
+our $t = "abcdefghijkl";
+
+$[ = 3;
+
+is index($t, "cdef"), 5;
+is index($t, "cdef", 3), 5;
+is index($t, "cdef", 4), 5;
+is index($t, "cdef", 5), 5;
+is index($t, "cdef", 6), 2;
+is index($t, "cdef", 7), 2;
+is rindex($t, "cdef"), 5;
+is rindex($t, "cdef", 7), 5;
+is rindex($t, "cdef", 6), 5;
+is rindex($t, "cdef", 5), 5;
+is rindex($t, "cdef", 4), 2;
+is rindex($t, "cdef", 3), 2;
+
+1;
Added: vendor/perl/dist/ext/arybase/t/lslice.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/lslice.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/lslice.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,34 @@
+use warnings; no warnings 'deprecated', 'experimental::lexical_topic';
+use strict;
+
+use Test::More tests => 12;
+
+our @i4 = (3, 5, 3, 5);
+
+$[ = 3;
+
+is_deeply [ scalar qw(a b c d e f)[3,4] ], [ qw(b) ];
+is_deeply [ qw(a b c d e f)[3,4,8,9] ], [ qw(a b f), undef ];
+is_deeply [ scalar qw(a b c d e f)[@i4] ], [ qw(c) ];
+is_deeply [ qw(a b c d e f)[@i4] ], [ qw(a c a c) ];
+is_deeply [ 3, 4, qw(a b c d e f)[@i4] ], [ 3, 4, qw(a c a c) ];
+
+is_deeply [ qw(a b c d e f)[-1,-2] ], [ qw(f e) ];
+is_deeply [ qw(a b c d e f)[2,1] ], [ qw(f e) ];
+{
+ $[ = -3;
+ is_deeply [qw(a b c d e f)[-3]], ['a'];
+}
+
+SKIP: {
+ skip "no lexical \$_", 4 unless eval q{my $_; 1};
+ eval q{
+ my $_;
+ is_deeply [ scalar qw(a b c d e f)[3,4] ], [ qw(b) ];
+ is_deeply [ qw(a b c d e f)[3,4,8,9] ], [ qw(a b f), undef ];
+ is_deeply [ scalar qw(a b c d e f)[@i4] ], [ qw(c) ];
+ is_deeply [ qw(a b c d e f)[@i4] ], [ qw(a c a c) ];
+ };
+}
+
+1;
Added: vendor/perl/dist/ext/arybase/t/pos.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/pos.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/pos.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,35 @@
+use warnings; no warnings 'deprecated';
+use strict;
+
+use Test::More tests => 12;
+
+our $t = "abcdefghi";
+scalar($t =~ /abcde/g);
+our $r = \$t;
+
+$[ = 3;
+
+is_deeply [ scalar pos($t) ], [ 8 ];
+is_deeply [ pos($t) ], [ 8 ];
+is_deeply [ scalar pos($$r) ], [ 8 ];
+is_deeply [ pos($$r) ], [ 8 ];
+
+scalar($t =~ /x/g);
+
+is_deeply [ scalar pos($t) ], [ undef ];
+is_deeply [ pos($t) ], [ undef ];
+is_deeply [ scalar pos($$r) ], [ undef ];
+is_deeply [ pos($$r) ], [ undef ];
+
+is pos($t), undef;
+pos($t) = 5;
+is 0+pos($t), 5;
+is pos($t), 2;
+my $posr =\ pos($t);
+$$posr = 4;
+{
+ $[ = 0;
+ is 0+$$posr, 1;
+}
+
+1;
Added: vendor/perl/dist/ext/arybase/t/scope.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/scope.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/scope.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,43 @@
+use warnings; no warnings 'deprecated';
+use strict;
+
+use Test::More tests => 14;
+
+our @t = qw(a b c d e f);
+
+is $t[3], "d";
+$[ = 3;
+is $t[3], "a";
+{
+ is $t[3], "a";
+ $[ = -1;
+ is $t[3], "e";
+ $[ = +0;
+ is $t[3], "d";
+ $[ = +1;
+ is $t[3], "c";
+ $[ = 0;
+ is $t[3], "d";
+}
+is $t[3], "a";
+{
+ local $[ = -1;
+ is $t[3], "e";
+}
+is $t[3], "a";
+{
+ ($[) = -1;
+ is $t[3], "e";
+}
+is $t[3], "a";
+use t::scope_0;
+is scope0_test(), "d";
+
+
+is eval(q{
+ $[ = 3;
+ BEGIN { my $x = "foo\x{666}"; $x =~ /foo\p{Alnum}/; }
+ $t[3];
+}), "a";
+
+1;
Added: vendor/perl/dist/ext/arybase/t/scope_0.pm
===================================================================
--- vendor/perl/dist/ext/arybase/t/scope_0.pm (rev 0)
+++ vendor/perl/dist/ext/arybase/t/scope_0.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+use warnings;
+use strict;
+
+sub main::scope0_test { $main::t[3] }
+
+1;
Added: vendor/perl/dist/ext/arybase/t/splice.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/splice.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/splice.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,65 @@
+use warnings; no warnings 'deprecated';
+use strict;
+
+use Test::More tests => 23;
+
+our @t;
+our @i5 = (3, 3, 3, 3, 3);
+
+$[ = 3;
+
+ at t = qw(a b c d e f);
+is_deeply [ scalar splice @t ], [qw(f)];
+is_deeply \@t, [];
+
+ at t = qw(a b c d e f);
+is_deeply [ splice @t ], [qw(a b c d e f)];
+is_deeply \@t, [];
+
+ at t = qw(a b c d e f);
+is_deeply [ scalar splice @t, 5 ], [qw(f)];
+is_deeply \@t, [qw(a b)];
+
+ at t = qw(a b c d e f);
+is_deeply [ splice @t, 5 ], [qw(c d e f)];
+is_deeply \@t, [qw(a b)];
+
+ at t = qw(a b c d e f);
+is_deeply [ scalar splice @t, @i5 ], [qw(f)];
+is_deeply \@t, [qw(a b)];
+
+ at t = qw(a b c d e f);
+is_deeply [ splice @t, @i5 ], [qw(c d e f)];
+is_deeply \@t, [qw(a b)];
+
+ at t = qw(a b c d e f);
+is_deeply [ scalar splice @t, 5, 2 ], [qw(d)];
+is_deeply \@t, [qw(a b e f)];
+
+ at t = qw(a b c d e f);
+is_deeply [ splice @t, 5, 2 ], [qw(c d)];
+is_deeply \@t, [qw(a b e f)];
+
+ at t = qw(a b c d e f);
+is_deeply [ scalar splice @t, 5, 2, qw(x y z) ], [qw(d)];
+is_deeply \@t, [qw(a b x y z e f)];
+
+ at t = qw(a b c d e f);
+is_deeply [ splice @t, 5, 2, qw(x y z) ], [qw(c d)];
+is_deeply \@t, [qw(a b x y z e f)];
+
+ at t = qw(a b c d e f);
+splice @t, -4, 1;
+is_deeply \@t, [qw(a b d e f)];
+
+ at t = qw(a b c d e f);
+splice @t, 1, 1;
+is_deeply \@t, [qw(a b c d f)];
+
+$[ = -3;
+
+ at t = qw(a b c d e f);
+splice @t, -3, 1;
+is_deeply \@t, [qw(b c d e f)];
+
+1;
Added: vendor/perl/dist/ext/arybase/t/substr.t
===================================================================
--- vendor/perl/dist/ext/arybase/t/substr.t (rev 0)
+++ vendor/perl/dist/ext/arybase/t/substr.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+use warnings; no warnings 'deprecated';
+use strict;
+
+use Test::More tests => 6;
+
+our $t;
+
+$[ = 3;
+
+$t = "abcdef";
+is substr($t, 5), "cdef";
+is $t, "abcdef";
+
+$t = "abcdef";
+is substr($t, 5, 2), "cd";
+is $t, "abcdef";
+
+$t = "abcdef";
+is substr($t, 5, 2, "xyz"), "cd";
+is $t, "abxyzef";
+
+1;
Added: vendor/perl/dist/lib/File/stat-7896.t
===================================================================
--- vendor/perl/dist/lib/File/stat-7896.t (rev 0)
+++ vendor/perl/dist/lib/File/stat-7896.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,28 @@
+#!./perl -w
+use strict;
+
+use Test::More;
+use File::stat;
+
+# This is possibly a bit black-box, but for now it works.
+# If (either) File::stat stops lazy loading Symbol, or Test::More starts, it
+# should be revisited
+is($INC{'Symbol.pm'}, undef, "Symbol isn't loaded yet");
+
+# ID 20011110.104 (RT #7896)
+$! = 0;
+is($!, '', '$! is empty');
+is(File::stat::stat('/notafile'), undef, 'invalid file should fail');
+isnt($!, '', 'should populate $!, given invalid file');
+my $e = $!;
+
+isnt($INC{'Symbol.pm'}, undef, "Symbol has been loaded");
+
+# Repeat twice
+is(File::stat::stat('/notafile'), undef, 'invalid file should fail again');
+is($!, $e, '$! should be consistent for an invalid file');
+$e = $!;
+is(File::stat::stat('/notafile'), undef, 'invalid file should fail again');
+is($!, $e, '$! should be consistent for an invalid file');
+
+done_testing();
Added: vendor/perl/dist/lib/_charnames.pm
===================================================================
--- vendor/perl/dist/lib/_charnames.pm (rev 0)
+++ vendor/perl/dist/lib/_charnames.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,793 @@
+# !!!!!!! INTERNAL PERL USE ONLY !!!!!!!
+# This helper module is for internal use by core Perl only. This module is
+# subject to change or removal at any time without notice. Don't use it
+# directly. Use the public <charnames> module instead.
+
+package _charnames;
+use strict;
+use warnings;
+use File::Spec;
+our $VERSION = '1.36';
+use unicore::Name; # mktables-generated algorithmically-defined names
+
+use bytes (); # for $bytes::hint_bits
+use re "/aa"; # Everything in here should be ASCII
+
+$Carp::Internal{ (__PACKAGE__) } = 1;
+
+# Translate between Unicode character names and their code points. This is a
+# submodule of package <charnames>, used to allow \N{...} to be autoloaded,
+# but it was decided not to autoload the various functions in charnames; the
+# splitting allows this behavior.
+#
+# The official names with their code points are stored in a table in
+# lib/unicore/Name.pl which is read in as a large string (almost 3/4 Mb in
+# Unicode 6.0). Each code point/name combination is separated by a \n in the
+# string. (Some of the CJK and the Hangul syllable names are determined
+# instead algorithmically via subroutines stored instead in
+# lib/unicore/Name.pm). Because of the large size of this table, it isn't
+# converted into hashes for faster lookup.
+#
+# But, user defined aliases are stored in their own hashes, as are Perl
+# extensions to the official names. These are checked first before looking at
+# the official table.
+#
+# Basically, the table is grepped for the input code point (viacode()) or
+# name (the other functions), and the corresponding value on the same line is
+# returned. The grepping is done by turning the input into a regular
+# expression. Thus, the same table does double duty, used by both name and
+# code point lookup. (If we were to have hashes, we would need two, one for
+# each lookup direction.)
+#
+# For loose name matching, the logical thing would be to have a table
+# with all the ignorable characters squeezed out, and then grep it with the
+# similiarly-squeezed input name. (And this is in fact how the lookups are
+# done with the small Perl extension hashes.) But since we need to be able to
+# go from code point to official name, the original table would still need to
+# exist. Due to the large size of the table, it was decided to not read
+# another very large string into memory for a second table. Instead, the
+# regular expression of the input name is modified to have optional spaces and
+# dashes between characters. For example, in strict matching, the regular
+# expression would be:
+# qr/\tDIGIT ONE$/m
+# Under loose matching, the blank would be squeezed out, and the re would be:
+# qr/\tD[- ]?I[- ]?G[- ]?I[- ]?T[- ]?O[- ]?N[- ]?E$/m
+# which matches a blank or dash between any characters in the official table.
+#
+# This is also how script lookup is done. Basically the re looks like
+# qr/ (?:LATIN|GREEK|CYRILLIC) (?:SMALL )?LETTER $name/
+# where $name is the loose or strict regex for the remainder of the name.
+
+# The hashes are stored as utf8 strings. This makes it easier to deal with
+# sequences. I (khw) also tried making Name.pl utf8, but it slowed things
+# down by a factor of 7. I then tried making Name.pl store the ut8
+# equivalents but not calling them utf8. That led to similar speed as leaving
+# it alone, but since that is harder for a human to parse, I left it as-is.
+
+my %system_aliases = (
+
+ 'SINGLE-SHIFT 2' => pack("U", 0x8E),
+ 'SINGLE-SHIFT 3' => pack("U", 0x8F),
+ 'PRIVATE USE 1' => pack("U", 0x91),
+ 'PRIVATE USE 2' => pack("U", 0x92),
+);
+
+# These are the aliases above that differ under :loose and :full matching
+# because the :full versions have blanks or hyphens in them.
+#my %loose_system_aliases = (
+#);
+
+#my %deprecated_aliases;
+#$deprecated_aliases{'BELL'} = pack("U", 0x07) if $^V lt v5.17.0;
+
+#my %loose_deprecated_aliases = (
+#);
+
+# These are special cased in :loose matching, differing only in a medial
+# hyphen
+my $HANGUL_JUNGSEONG_O_E_utf8 = pack("U", 0x1180);
+my $HANGUL_JUNGSEONG_OE_utf8 = pack("U", 0x116C);
+
+
+my $txt; # The table of official character names
+
+my %full_names_cache; # Holds already-looked-up names, so don't have to
+# re-look them up again. The previous versions of charnames had scoping
+# bugs. For example if we use script A in one scope and find and cache
+# what Z resolves to, we can't use that cache in a different scope that
+# uses script B instead of A, as Z might be an entirely different letter
+# there; or there might be different aliases in effect in different
+# scopes, or :short may be in effect or not effect in different scopes,
+# or various combinations thereof. This was solved in this version
+# mostly by moving things to %^H. But some things couldn't be moved
+# there. One of them was the cache of runtime looked-up names, in part
+# because %^H is read-only at runtime. I (khw) don't know why the cache
+# was run-time only in the previous versions: perhaps oversight; perhaps
+# that compile time looking doesn't happen in a loop so didn't think it
+# was worthwhile; perhaps not wanting to make the cache too large. But
+# I decided to make it compile time as well; this could easily be
+# changed.
+# Anyway, this hash is not scoped, and is added to at runtime. It
+# doesn't have scoping problems because the data in it is restricted to
+# official names, which are always invariant, and we only set it and
+# look at it at during :full lookups, so is unaffected by any other
+# scoped options. I put this in to maintain parity with the older
+# version. If desired, a %short_names cache could also be made, as well
+# as one for each script, say in %script_names_cache, with each key
+# being a hash for a script named in a 'use charnames' statement. I
+# decided not to do that for now, just because it's added complication,
+# and because I'm just trying to maintain parity, not extend it.
+
+# Like %full_names_cache, but for use when :loose is in effect. There needs
+# to be two caches because :loose may not be in effect for a scope, and a
+# loose name could inappropriately be returned when only exact matching is
+# called for.
+my %loose_names_cache;
+
+# Designed so that test decimal first, and then hex. Leading zeros
+# imply non-decimal, as do non-[0-9]
+my $decimal_qr = qr/^[1-9]\d*$/;
+
+# Returns the hex number in $1.
+my $hex_qr = qr/^(?:[Uu]\+|0[xX])?([[:xdigit:]]+)$/;
+
+sub croak
+{
+ require Carp; goto &Carp::croak;
+} # croak
+
+sub carp
+{
+ require Carp; goto &Carp::carp;
+} # carp
+
+sub alias (@) # Set up a single alias
+{
+ my @errors;
+
+ my $alias = ref $_[0] ? $_[0] : { @_ };
+ foreach my $name (sort keys %$alias) { # Sort only because it helps having
+ # deterministic output for
+ # t/lib/charnames/alias
+ my $value = $alias->{$name};
+ next unless defined $value; # Omit if screwed up.
+
+ # Is slightly slower to just after this statement see if it is
+ # decimal, since we already know it is after having converted from
+ # hex, but makes the code easier to maintain, and is called
+ # infrequently, only at compile-time
+ if ($value !~ $decimal_qr && $value =~ $hex_qr) {
+ $value = CORE::hex $1;
+ }
+ if ($value =~ $decimal_qr) {
+ no warnings qw(non_unicode surrogate nonchar); # Allow any of these
+ $^H{charnames_ord_aliases}{$name} = pack("U", $value);
+
+ # Use a canonical form.
+ $^H{charnames_inverse_ords}{sprintf("%05X", $value)} = $name;
+ }
+ else {
+ # This regex needs to be sync'd with the code in toke.c that checks
+ # for the same thing
+ if ($name !~ / ^
+ \p{_Perl_Charname_Begin}
+ \p{_Perl_Charname_Continue}*
+ $ /x) {
+
+ push @errors, $name;
+ }
+ else {
+ $^H{charnames_name_aliases}{$name} = $value;
+
+ if (warnings::enabled('deprecated')) {
+ if ($name =~ / ( .* \s ) ( \s* ) $ /x) {
+ carp "Trailing white-space in a charnames alias definition is deprecated; marked by <-- HERE in '$1 <-- HERE " . $2 . "'";
+ }
+
+ # Use '+' instead of '*' in this regex, because any trailing
+ # blanks have already been warned about.
+ if ($name =~ / ( .*? \s{2} ) ( .+ ) /x) {
+ carp "A sequence of multiple spaces in a charnames alias definition is deprecated; marked by <-- HERE in '$1 <-- HERE " . $2 . "'";
+ }
+ }
+ }
+ }
+ }
+
+ # We find and output all errors from this :alias definition, rather than
+ # failing on the first one, so fewer runs are needed to get it to compile
+ if (@errors) {
+ foreach my $name (@errors) {
+ my $ok = "";
+ $ok = $1 if $name =~ / ^ ( \p{Alpha} [-\p{XPosixWord} ():\xa0]* ) /x;
+ my $first_bad = substr($name, length($ok), 1);
+ $name = "Invalid character in charnames alias definition; marked by <-- HERE in '$ok$first_bad<-- HERE " . substr($name, length($ok) + 1) . "'";
+ }
+ croak join "\n", @errors;
+ }
+
+ return;
+} # alias
+
+sub not_legal_use_bytes_msg {
+ my ($name, $utf8) = @_;
+ my $return;
+
+ if (length($utf8) == 1) {
+ $return = sprintf("Character 0x%04x with name '%s' is", ord $utf8, $name);
+ } else {
+ $return = sprintf("String with name '%s' (and ordinals %s) contains character(s)", $name, join(" ", map { sprintf "0x%04X", ord $_ } split(//, $utf8)));
+ }
+ return $return . " above 0xFF with 'use bytes' in effect";
+}
+
+sub alias_file ($) # Reads a file containing alias definitions
+{
+ my ($arg, $file) = @_;
+ if (-f $arg && File::Spec->file_name_is_absolute ($arg)) {
+ $file = $arg;
+ }
+ elsif ($arg =~ m/ ^ \p{_Perl_IDStart} \p{_Perl_IDCont}* $/x) {
+ $file = "unicore/${arg}_alias.pl";
+ }
+ else {
+ croak "Charnames alias file names can only have identifier characters";
+ }
+ if (my @alias = do $file) {
+ @alias == 1 && !defined $alias[0] and
+ croak "$file cannot be used as alias file for charnames";
+ @alias % 2 and
+ croak "$file did not return a (valid) list of alias pairs";
+ alias (@alias);
+ return (1);
+ }
+ 0;
+} # alias_file
+
+# For use when don't import anything. This structure must be kept in
+# sync with the one that import() fills up.
+my %dummy_H = (
+ charnames_stringified_names => "",
+ charnames_stringified_ords => "",
+ charnames_scripts => "",
+ charnames_full => 1,
+ charnames_loose => 0,
+ charnames_short => 0,
+ );
+
+
+sub lookup_name ($$$) {
+ my ($name, $wants_ord, $runtime) = @_;
+
+ # Lookup the name or sequence $name in the tables. If $wants_ord is false,
+ # returns the string equivalent of $name; if true, returns the ordinal value
+ # instead, but in this case $name must not be a sequence; otherwise undef is
+ # returned and a warning raised. $runtime is 0 if compiletime, otherwise
+ # gives the number of stack frames to go back to get the application caller
+ # info.
+ # If $name is not found, returns undef in runtime with no warning; and in
+ # compiletime, the Unicode replacement character, with a warning.
+
+ # It looks first in the aliases, then in the large table of official Unicode
+ # names.
+
+ my $utf8; # The string result
+ my $save_input;
+
+ if ($runtime) {
+
+ my $hints_ref = (caller($runtime))[10];
+
+ # If we didn't import anything (which happens with 'use charnames ()',
+ # substitute a dummy structure.
+ $hints_ref = \%dummy_H if ! defined $hints_ref
+ || (! defined $hints_ref->{charnames_full}
+ && ! defined $hints_ref->{charnames_loose});
+
+ # At runtime, but currently not at compile time, $^H gets
+ # stringified, so un-stringify back to the original data structures.
+ # These get thrown away by perl before the next invocation
+ # Also fill in the hash with the non-stringified data.
+ # N.B. New fields must be also added to %dummy_H
+
+ %{$^H{charnames_name_aliases}} = split ',',
+ $hints_ref->{charnames_stringified_names};
+ %{$^H{charnames_ord_aliases}} = split ',',
+ $hints_ref->{charnames_stringified_ords};
+ $^H{charnames_scripts} = $hints_ref->{charnames_scripts};
+ $^H{charnames_full} = $hints_ref->{charnames_full};
+ $^H{charnames_loose} = $hints_ref->{charnames_loose};
+ $^H{charnames_short} = $hints_ref->{charnames_short};
+ }
+
+ my $loose = $^H{charnames_loose};
+ my $lookup_name; # Input name suitably modified for grepping for in the
+ # table
+
+ # User alias should be checked first or else can't override ours, and if we
+ # were to add any, could conflict with theirs.
+ if (exists $^H{charnames_ord_aliases}{$name}) {
+ $utf8 = $^H{charnames_ord_aliases}{$name};
+ }
+ elsif (exists $^H{charnames_name_aliases}{$name}) {
+ $name = $^H{charnames_name_aliases}{$name};
+ $save_input = $lookup_name = $name; # Cache the result for any error
+ # message
+ # The aliases are documented to not match loosely, so change loose match
+ # into full.
+ if ($loose) {
+ $loose = 0;
+ $^H{charnames_full} = 1;
+ }
+ }
+ else {
+
+ # Here, not a user alias. That means that loose matching may be in
+ # effect; will have to modify the input name.
+ $lookup_name = $name;
+ if ($loose) {
+ $lookup_name = uc $lookup_name;
+
+ # Squeeze out all underscores
+ $lookup_name =~ s/_//g;
+
+ # Remove all medial hyphens
+ $lookup_name =~ s/ (?<= \S ) - (?= \S )//gx;
+
+ # Squeeze out all spaces
+ $lookup_name =~ s/\s//g;
+ }
+
+ # Here, $lookup_name has been modified as necessary for looking in the
+ # hashes. Check the system alias files next. Most of these aliases are
+ # the same for both strict and loose matching. To save space, the ones
+ # which differ are in their own separate hash, which is checked if loose
+ # matching is selected and the regular match fails. To save time, the
+ # loose hashes could be expanded to include all aliases, and there would
+ # only have to be one check. But if someone specifies :loose, they are
+ # interested in convenience over speed, and the time for this second check
+ # is miniscule compared to the rest of the routine.
+ if (exists $system_aliases{$lookup_name}) {
+ $utf8 = $system_aliases{$lookup_name};
+ }
+ # There are currently no entries in this hash, so don't waste time looking
+ # for them. But the code is retained for the unlikely possibility that
+ # some will be added in the future.
+# elsif ($loose && exists $loose_system_aliases{$lookup_name}) {
+# $utf8 = $loose_system_aliases{$lookup_name};
+# }
+# if (exists $deprecated_aliases{$lookup_name}) {
+# require warnings;
+# warnings::warnif('deprecated',
+# "Unicode character name \"$name\" is deprecated, use \""
+# . viacode(ord $deprecated_aliases{$lookup_name})
+# . "\" instead");
+# $utf8 = $deprecated_aliases{$lookup_name};
+# }
+ # There are currently no entries in this hash, so don't waste time looking
+ # for them. But the code is retained for the unlikely possibility that
+ # some will be added in the future.
+# elsif ($loose && exists $loose_deprecated_aliases{$lookup_name}) {
+# require warnings;
+# warnings::warnif('deprecated',
+# "Unicode character name \"$name\" is deprecated, use \""
+# . viacode(ord $loose_deprecated_aliases{$lookup_name})
+# . "\" instead");
+# $utf8 = $loose_deprecated_aliases{$lookup_name};
+# }
+ }
+
+ my @off; # Offsets into table of pattern match begin and end
+
+ # If haven't found it yet...
+ if (! defined $utf8) {
+
+ # See if has looked this input up earlier.
+ if (! $loose && $^H{charnames_full} && exists $full_names_cache{$name}) {
+ $utf8 = $full_names_cache{$name};
+ }
+ elsif ($loose && exists $loose_names_cache{$name}) {
+ $utf8 = $loose_names_cache{$name};
+ }
+ else { # Here, must do a look-up
+
+ # If full or loose matching succeeded, points to where to cache the
+ # result
+ my $cache_ref;
+
+ ## Suck in the code/name list as a big string.
+ ## Lines look like:
+ ## "00052\tLATIN CAPITAL LETTER R\n"
+ # or
+ # "0052 0303\tLATIN CAPITAL LETTER R WITH TILDE\n"
+ $txt = do "unicore/Name.pl" unless $txt;
+
+ ## @off will hold the index into the code/name string of the start and
+ ## end of the name as we find it.
+
+ ## If :loose, look for a loose match; if :full, look for the name
+ ## exactly
+ # First, see if the name is one which is algorithmically determinable.
+ # The subroutine is included in Name.pl. The table contained in
+ # $txt doesn't contain these. Experiments show that checking
+ # for these before checking for the regular names has no
+ # noticeable impact on performance for the regular names, but
+ # the other way around slows down finding these immensely.
+ # Algorithmically determinables are not placed in the cache because
+ # that uses up memory, and finding these again is fast.
+ if (($loose || $^H{charnames_full})
+ && (defined (my $ord = charnames::name_to_code_point_special($lookup_name, $loose))))
+ {
+ $utf8 = pack("U", $ord);
+ }
+ else {
+
+ # Not algorithmically determinable; look up in the table. The name
+ # will be turned into a regex, so quote any meta characters.
+ $lookup_name = quotemeta $lookup_name;
+
+ if ($loose) {
+
+ # For loose matches, $lookup_name has already squeezed out the
+ # non-essential characters. We have to add in code to make the
+ # squeezed version match the non-squeezed equivalent in the table.
+ # The only remaining hyphens are ones that start or end a word in
+ # the original. They have been quoted in $lookup_name so they look
+ # like "\-". Change all other characters except the backslash
+ # quotes for any metacharacters, and the final character, so that
+ # e.g., COLON gets transformed into: /C[- ]?O[- ]?L[- ]?O[- ]?N/
+ $lookup_name =~ s/ (?! \\ -) # Don't do this to the \- sequence
+ ( [^-\\] ) # Nor the "-" within that sequence,
+ # nor the "\" that quotes metachars,
+ # but otherwise put the char into $1
+ (?=.) # And don't do it for the final char
+ /$1\[- \]?/gx; # And add an optional blank or
+ # '-' after each $1 char
+
+ # Those remaining hyphens were originally at the beginning or end of
+ # a word, so they can match either a blank before or after, but not
+ # both. (Keep in mind that they have been quoted, so are a '\-'
+ # sequence)
+ $lookup_name =~ s/\\ -/(?:- | -)/xg;
+ }
+
+ # Do the lookup in the full table if asked for, and if succeeds
+ # save the offsets and set where to cache the result.
+ if (($loose || $^H{charnames_full}) && $txt =~ /\t$lookup_name$/m) {
+ @off = ($-[0] + 1, $+[0]); # The 1 is for the tab
+ $cache_ref = ($loose) ? \%loose_names_cache : \%full_names_cache;
+ }
+ else {
+
+ # Here, didn't look for, or didn't find the name.
+ # If :short is allowed, see if input is like "greek:Sigma".
+ # Keep in mind that $lookup_name has had the metas quoted.
+ my $scripts_trie = "";
+ my $name_has_uppercase;
+ if (($^H{charnames_short})
+ && $lookup_name =~ /^ (?: \\ \s)* # Quoted space
+ (.+?) # $1 = the script
+ (?: \\ \s)*
+ \\ : # Quoted colon
+ (?: \\ \s)*
+ (.+?) # $2 = the name
+ (?: \\ \s)* $
+ /xs)
+ {
+ # Even in non-loose matching, the script traditionally has been
+ # case insensitve
+ $scripts_trie = "\U$1";
+ $lookup_name = $2;
+
+ # Use original name to find its input casing, but ignore the
+ # script part of that to make the determination.
+ $save_input = $name if ! defined $save_input;
+ $name =~ s/.*?://;
+ $name_has_uppercase = $name =~ /[[:upper:]]/;
+ }
+ else { # Otherwise look in allowed scripts
+ $scripts_trie = $^H{charnames_scripts};
+
+ # Use original name to find its input casing
+ $name_has_uppercase = $name =~ /[[:upper:]]/;
+ }
+
+ my $case = $name_has_uppercase ? "CAPITAL" : "SMALL";
+ return if (! $scripts_trie || $txt !~
+ /\t (?: $scripts_trie ) \ (?:$case\ )? LETTER \ \U$lookup_name $/xm);
+
+ # Here have found the input name in the table.
+ @off = ($-[0] + 1, $+[0]); # The 1 is for the tab
+ }
+
+ # Here, the input name has been found; we haven't set up the output,
+ # but we know where in the string
+ # the name starts. The string is set up so that for single characters
+ # (and not named sequences), the name is preceded immediately by a
+ # tab and 5 hex digits for its code, with a \n before those. Named
+ # sequences won't have the 7th preceding character be a \n.
+ # (Actually, for the very first entry in the table this isn't strictly
+ # true: subtracting 7 will yield -1, and the substr below will
+ # therefore yield the very last character in the table, which should
+ # also be a \n, so the statement works anyway.)
+ if (substr($txt, $off[0] - 7, 1) eq "\n") {
+ $utf8 = pack("U", CORE::hex substr($txt, $off[0] - 6, 5));
+
+ # Handle the single loose matching special case, in which two names
+ # differ only by a single medial hyphen. If the original had a
+ # hyphen (or more) in the right place, then it is that one.
+ $utf8 = $HANGUL_JUNGSEONG_O_E_utf8
+ if $loose
+ && $utf8 eq $HANGUL_JUNGSEONG_OE_utf8
+ && $name =~ m/O \s* - [-\s]* E/ix;
+ # Note that this wouldn't work if there were a 2nd
+ # OE in the name
+ }
+ else {
+
+ # Here, is a named sequence. Need to go looking for the beginning,
+ # which is just after the \n from the previous entry in the table.
+ # The +1 skips past that newline, or, if the rindex() fails, to put
+ # us to an offset of zero.
+ my $charstart = rindex($txt, "\n", $off[0] - 7) + 1;
+ $utf8 = pack("U*", map { CORE::hex }
+ split " ", substr($txt, $charstart, $off[0] - $charstart - 1));
+ }
+ }
+
+ # Cache the input so as to not have to search the large table
+ # again, but only if it came from the one search that we cache.
+ # (Haven't bothered with the pain of sorting out scoping issues for the
+ # scripts searches.)
+ $cache_ref->{$name} = $utf8 if defined $cache_ref;
+ }
+ }
+
+
+ # Here, have the utf8. If the return is to be an ord, must be any single
+ # character.
+ if ($wants_ord) {
+ return ord($utf8) if length $utf8 == 1;
+ }
+ else {
+
+ # Here, wants string output. If utf8 is acceptable, just return what
+ # we've got; otherwise attempt to convert it to non-utf8 and return that.
+ my $in_bytes = ($runtime)
+ ? (caller $runtime)[8] & $bytes::hint_bits
+ : $^H & $bytes::hint_bits;
+ return $utf8 if (! $in_bytes || utf8::downgrade($utf8, 1)) # The 1 arg
+ # means don't die on failure
+ }
+
+ # Here, there is an error: either there are too many characters, or the
+ # result string needs to be non-utf8, and at least one character requires
+ # utf8. Prefer any official name over the input one for the error message.
+ if (@off) {
+ $name = substr($txt, $off[0], $off[1] - $off[0]) if @off;
+ }
+ else {
+ $name = (defined $save_input) ? $save_input : $_[0];
+ }
+
+ if ($wants_ord) {
+ # Only way to get here in this case is if result too long. Message
+ # assumes that our only caller that requires single char result is
+ # vianame.
+ carp "charnames::vianame() doesn't handle named sequences ($name). Use charnames::string_vianame() instead";
+ return;
+ }
+
+ # Only other possible failure here is from use bytes.
+ if ($runtime) {
+ carp not_legal_use_bytes_msg($name, $utf8);
+ return;
+ } else {
+ croak not_legal_use_bytes_msg($name, $utf8);
+ }
+
+} # lookup_name
+
+sub charnames {
+
+ # For \N{...}. Looks up the character name and returns the string
+ # representation of it.
+
+ # The first 0 arg means wants a string returned; the second that we are in
+ # compile time
+ return lookup_name($_[0], 0, 0);
+}
+
+sub import
+{
+ shift; ## ignore class name
+
+ if (not @_) {
+ carp("'use charnames' needs explicit imports list");
+ }
+ $^H{charnames} = \&charnames ;
+ $^H{charnames_ord_aliases} = {};
+ $^H{charnames_name_aliases} = {};
+ $^H{charnames_inverse_ords} = {};
+ # New fields must be added to %dummy_H, and the code in lookup_name()
+ # that copies fields from the runtime structure
+
+ ##
+ ## fill %h keys with our @_ args.
+ ##
+ my ($promote, %h, @args) = (0);
+ while (my $arg = shift) {
+ if ($arg eq ":alias") {
+ @_ or
+ croak ":alias needs an argument in charnames";
+ my $alias = shift;
+ if (ref $alias) {
+ ref $alias eq "HASH" or
+ croak "Only HASH reference supported as argument to :alias";
+ alias ($alias);
+ $promote = 1;
+ next;
+ }
+ if ($alias =~ m{:(\w+)$}) {
+ $1 eq "full" || $1 eq "loose" || $1 eq "short" and
+ croak ":alias cannot use existing pragma :$1 (reversed order?)";
+ alias_file ($1) and $promote = 1;
+ next;
+ }
+ alias_file ($alias) and $promote = 1;
+ next;
+ }
+ if (substr($arg, 0, 1) eq ':'
+ and ! ($arg eq ":full" || $arg eq ":short" || $arg eq ":loose"))
+ {
+ warn "unsupported special '$arg' in charnames";
+ next;
+ }
+ push @args, $arg;
+ }
+
+ @args == 0 && $promote and @args = (":full");
+ @h{@args} = (1) x @args;
+
+ # Don't leave these undefined as are tested for in lookup_names
+ $^H{charnames_full} = delete $h{':full'} || 0;
+ $^H{charnames_loose} = delete $h{':loose'} || 0;
+ $^H{charnames_short} = delete $h{':short'} || 0;
+ my @scripts = map { uc quotemeta } keys %h;
+
+ ##
+ ## If utf8? warnings are enabled, and some scripts were given,
+ ## see if at least we can find one letter from each script.
+ ##
+ if (warnings::enabled('utf8') && @scripts) {
+ $txt = do "unicore/Name.pl" unless $txt;
+
+ for my $script (@scripts) {
+ if (not $txt =~ m/\t$script (?:CAPITAL |SMALL )?LETTER /) {
+ warnings::warn('utf8', "No such script: '$script'");
+ $script = quotemeta $script; # Escape it, for use in the re.
+ }
+ }
+ }
+
+ # %^H gets stringified, so serialize it ourselves so can extract the
+ # real data back later.
+ $^H{charnames_stringified_ords} = join ",", %{$^H{charnames_ord_aliases}};
+ $^H{charnames_stringified_names} = join ",", %{$^H{charnames_name_aliases}};
+ $^H{charnames_stringified_inverse_ords} = join ",", %{$^H{charnames_inverse_ords}};
+
+ # Modify the input script names for loose name matching if that is also
+ # specified, similar to the way the base character name is prepared. They
+ # don't (currently, and hopefully never will) have dashes. These go into a
+ # regex, and have already been uppercased and quotemeta'd. Squeeze out all
+ # input underscores, blanks, and dashes. Then convert so will match a blank
+ # between any characters.
+ if ($^H{charnames_loose}) {
+ for (my $i = 0; $i < @scripts; $i++) {
+ $scripts[$i] =~ s/[_ -]//g;
+ $scripts[$i] =~ s/ ( [^\\] ) (?= . ) /$1\\ ?/gx;
+ }
+ }
+
+ $^H{charnames_scripts} = join "|", @scripts; # Stringifiy them as a trie
+} # import
+
+# Cache of already looked-up values. This is set to only contain
+# official values, and user aliases can't override them, so scoping is
+# not an issue.
+my %viacode;
+
+sub viacode {
+
+ # Returns the name of the code point argument
+
+ if (@_ != 1) {
+ carp "charnames::viacode() expects one argument";
+ return;
+ }
+
+ my $arg = shift;
+
+ # This is derived from Unicode::UCD, where it is nearly the same as the
+ # function _getcode(), but here it makes sure that even a hex argument
+ # has the proper number of leading zeros, which is critical in
+ # matching against $txt below
+ # Must check if decimal first; see comments at that definition
+ my $hex;
+ if ($arg =~ $decimal_qr) {
+ $hex = sprintf "%05X", $arg;
+ } elsif ($arg =~ $hex_qr) {
+ # Below is the line that differs from the _getcode() source
+ $hex = sprintf "%05X", hex $1;
+ } else {
+ carp("unexpected arg \"$arg\" to charnames::viacode()");
+ return;
+ }
+
+ return $viacode{$hex} if exists $viacode{$hex};
+
+ my $return;
+
+ # If the code point is above the max in the table, there's no point
+ # looking through it. Checking the length first is slightly faster
+ if (length($hex) <= 5 || CORE::hex($hex) <= 0x10FFFF) {
+ $txt = do "unicore/Name.pl" unless $txt;
+
+ # See if the name is algorithmically determinable.
+ my $algorithmic = charnames::code_point_to_name_special(CORE::hex $hex);
+ if (defined $algorithmic) {
+ $viacode{$hex} = $algorithmic;
+ return $algorithmic;
+ }
+
+ # Return the official name, if exists. It's unclear to me (khw) at
+ # this juncture if it is better to return a user-defined override, so
+ # leaving it as is for now.
+ if ($txt =~ m/^$hex\t/m) {
+
+ # The name starts with the next character and goes up to the
+ # next new-line. Using capturing parentheses above instead of
+ # @+ more than doubles the execution time in Perl 5.13
+ $return = substr($txt, $+[0], index($txt, "\n", $+[0]) - $+[0]);
+
+ # If not one of these 4 code points, return what we've found.
+ if ($hex !~ / ^ 000 (?: 8[014] | 99 ) $ /x) {
+ $viacode{$hex} = $return;
+ return $return;
+ }
+
+ # For backwards compatibility, we don't return the official name of
+ # the 4 code points if there are user-defined aliases for them -- so
+ # continue looking.
+ }
+ }
+
+ # See if there is a user name for it, before giving up completely.
+ # First get the scoped aliases, give up if have none.
+ my $H_ref = (caller(1))[10];
+ return if ! defined $return
+ && (! defined $H_ref
+ || ! exists $H_ref->{charnames_stringified_inverse_ords});
+
+ my %code_point_aliases;
+ if (defined $H_ref->{charnames_stringified_inverse_ords}) {
+ %code_point_aliases = split ',',
+ $H_ref->{charnames_stringified_inverse_ords};
+ return $code_point_aliases{$hex} if exists $code_point_aliases{$hex};
+ }
+
+ # Here there is no user-defined alias, return any official one.
+ return $return if defined $return;
+
+ if (CORE::hex($hex) > 0x10FFFF
+ && warnings::enabled('non_unicode'))
+ {
+ carp "Unicode characters only allocated up to U+10FFFF (you asked for U+$hex)";
+ }
+ return;
+
+} # _viacode
+
+1;
+
+# ex: set ts=8 sts=2 sw=2 et:
Added: vendor/perl/dist/lib/perl5db/t/EnableModule.pm
===================================================================
--- vendor/perl/dist/lib/perl5db/t/EnableModule.pm (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/EnableModule.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,18 @@
+package EnableModule;
+
+use strict;
+use warnings;
+
+sub set_x
+{
+ my $x_ref = shift;
+
+ ${$x_ref} .= "TwoHundred";
+
+ my $x = ${$x_ref};
+
+ my $t = $x;
+ $t .= "Foo";
+}
+
+1;
Added: vendor/perl/dist/lib/perl5db/t/MyModule.pm
===================================================================
--- vendor/perl/dist/lib/perl5db/t/MyModule.pm (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/MyModule.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+package MyModule;
+
+use strict;
+use warnings;
+
+use vars qw($var);
+
+$var = "Bar";
+
+sub function
+{
+ print "In MyModule.\n";
+}
+
+1;
Added: vendor/perl/dist/lib/perl5db/t/break-on-dot
===================================================================
--- vendor/perl/dist/lib/perl5db/t/break-on-dot (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/break-on-dot 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $exp = 1;
+for my $i (1 .. 20)
+{
+ $exp *= 2;
+}
Added: vendor/perl/dist/lib/perl5db/t/breakpoint-bug
===================================================================
--- vendor/perl/dist/lib/perl5db/t/breakpoint-bug (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/breakpoint-bug 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,8 @@
+#!/usr/bin/perl
+my $x = "One";
+
+$x = "Two";
+
+my $y = "Lambda";
+
+$x = "Four";
Added: vendor/perl/dist/lib/perl5db/t/disable-breakpoints-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/disable-breakpoints-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/disable-breakpoints-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,19 @@
+#!/usr/bin/perl
+my $x = "One";
+my $dummy = 0;
+
+$x = "FirstVal";
+
+$dummy++;
+
+$x = "SecondVal";
+
+$dummy++;
+
+$x = "ThirdVal";
+
+$dummy++;
+
+$x = "FourthVal";
+
+$dummy++;
Added: vendor/perl/dist/lib/perl5db/t/disable-breakpoints-2
===================================================================
--- vendor/perl/dist/lib/perl5db/t/disable-breakpoints-2 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/disable-breakpoints-2 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+my $x = "One";
+
+$x = "FirstVal";
+
+set_x();
+
+$x = "SecondVal";
+
+set_x();
+
+$x = "ThirdVal";
+
+set_x();
+
+$x = "FourthVal";
+
+set_x();
+
+sub set_x
+{
+ $x .= "OneHundred";
+
+ my $t = $x;
+ $t .= "Foo";
+}
Added: vendor/perl/dist/lib/perl5db/t/disable-breakpoints-3
===================================================================
--- vendor/perl/dist/lib/perl5db/t/disable-breakpoints-3 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/disable-breakpoints-3 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+
+use EnableModule;
+my $x = "One";
+
+$x = "FirstVal";
+
+EnableModule::set_x(\$x);
+
+$x = "SecondVal";
+
+EnableModule::set_x(\$x);
+
+$x = "ThirdVal";
+
+EnableModule::set_x(\$x);
+
+$x = "FourthVal";
+
+EnableModule::set_x(\$x);
+
Added: vendor/perl/dist/lib/perl5db/t/fact
===================================================================
--- vendor/perl/dist/lib/perl5db/t/fact (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/fact 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+sub fact {
+ my $n = shift;
+ if ($n > 1) {
+ return $n * fact($n - 1);
+ } else {
+ return 1;
+ }
+}
+fact(5);
Added: vendor/perl/dist/lib/perl5db/t/filename-line-breakpoint
===================================================================
--- vendor/perl/dist/lib/perl5db/t/filename-line-breakpoint (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/filename-line-breakpoint 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,14 @@
+#!/perl
+
+use strict;
+use warnings;
+
+use MyModule;
+
+my $x = "Foo";
+
+MyModule::function();
+
+print "In Main File.\n";
+
+1;
Added: vendor/perl/dist/lib/perl5db/t/load-modules
===================================================================
--- vendor/perl/dist/lib/perl5db/t/load-modules (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/load-modules 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Scalar::Util;
Added: vendor/perl/dist/lib/perl5db/t/rt-104168
===================================================================
--- vendor/perl/dist/lib/perl5db/t/rt-104168 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/rt-104168 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+#
+# This code is used by lib/perl5db.t !!!
+#
+
+foo();
+
+sub foo {
+ bar();
+}
+
+
+sub bar {
+ baz();
+}
+
+sub baz {
+ 1;
+}
+
+1;
Added: vendor/perl/dist/lib/perl5db/t/source-cmd-test-no-q.perldb
===================================================================
--- vendor/perl/dist/lib/perl5db/t/source-cmd-test-no-q.perldb (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/source-cmd-test-no-q.perldb 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+l 3-10
Added: vendor/perl/dist/lib/perl5db/t/source-cmd-test.perldb
===================================================================
--- vendor/perl/dist/lib/perl5db/t/source-cmd-test.perldb (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/source-cmd-test.perldb 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+l 3-10
+q
Added: vendor/perl/dist/lib/perl5db/t/test-PrintRet-option-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-PrintRet-option-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-PrintRet-option-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my ($x, $y);
+
+sub return_scalar
+{
+ $y++;
+
+ return "20024";
+}
+
+sub return_list
+{
+ $y++;
+
+ return ("Foo", "Bar", "Baz");
+}
+
+sub return_void
+{
+ $y++;
+
+ return;
+}
+
+$y++;
+
+# Choose one based on $x
+#
+if ($x eq "s")
+{
+ my $s = return_scalar();
+}
+elsif ($x eq "l")
+{
+ my @l = return_list();
+}
+else
+{
+ return_void();
+ $y++;
+}
+
Added: vendor/perl/dist/lib/perl5db/t/test-a-statement-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-a-statement-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-a-statement-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+while (my $l = <DATA>) {
+ chomp $l;
+ print "$l\n";
+}
+
+__DATA__
+123456789012 This is a test
+3456789012345This is another test
+6789012345678This is yet another test
+9012345678901Is this yet another test?
+234567890123 Yes, this is another test.
+4567890123456I think this is a test.
+7890123456789Now is the time.
+0123456789012For all good men.
+3456789012345To come to the aid party.
+678901234678 This is the tenth line.
+
Added: vendor/perl/dist/lib/perl5db/t/test-dieLevel-option-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-dieLevel-option-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-dieLevel-option-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+use strict;
+use warnings;
+
+sub foo
+{
+ print "In foo\n";
+ bar();
+}
+
+sub bar
+{
+ print "In baz\n";
+ baz();
+}
+
+sub baz
+{
+ die "This program dies.";
+}
+
+foo();
+
Added: vendor/perl/dist/lib/perl5db/t/test-frame-option-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-frame-option-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-frame-option-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+sub my_func
+{
+ my ($num1, $num2) = @_;
+
+ print $num1+$num2, "\n";
+
+ my_other_func ($num1*3, $num2*24);
+
+ return $num1*$num2;
+}
+
+sub my_other_func
+{
+ my ($num1, $num2) = @_;
+
+ print "my_other_func: n1=<$num1> n2=<$num2>\n";
+
+ return $num1 * $num2;
+}
+
+my_func(1, 50);
Added: vendor/perl/dist/lib/perl5db/t/test-l-statement-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-l-statement-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-l-statement-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+$x = 1;
+print "1\n";
+
+$x = 2;
+print "2\n";
+
+$x = 3;
+print "3\n";
+
+$x = 4;
+print "4\n";
+
+$x = 5;
+print "5\n";
+
+$x = 6;
+print "6\n";
+
+$x = 7;
+print "7\n";
Added: vendor/perl/dist/lib/perl5db/t/test-l-statement-2
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-l-statement-2 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-l-statement-2 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+sub fact {
+ my $n = shift;
+ if ($n > 1) {
+ return $n * fact($n - 1);
+ } else {
+ return 1;
+ }
+}
+
+sub bar {
+ print "One\n";
+ print "Two\n";
+ print "Three\n";
+
+ return;
+}
+
+fact(5);
+bar();
Added: vendor/perl/dist/lib/perl5db/t/test-m-statement-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-m-statement-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-m-statement-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,43 @@
+use strict;
+use warnings;
+
+package MyClass;
+
+sub new
+{
+ my $class = shift;
+
+ my $self = bless {}, $class;
+
+ $self->_init(@_);
+
+ return $self;
+}
+
+sub _init
+{
+ my $self = shift;
+
+ $self->{foo} = 'bar';
+
+ return;
+}
+
+sub greet
+{
+ my ($self, $msg) = @_;
+
+ print "$msg - $self->{foo}\n";
+
+ return;
+}
+
+1;
+
+package main;
+
+my $obj = MyClass->new;
+
+$obj->greet("Hello");
+
+1;
Added: vendor/perl/dist/lib/perl5db/t/test-passing-at-underscore-to-x-etc
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-passing-at-underscore-to-x-etc (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-passing-at-underscore-to-x-etc 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+print "One\n";
+
+sub my_pass_args_to
+{
+ print "Two\n";
+}
+
+my_pass_args_to ("Arg1", "Capsula", "GreekHumor", "Socrates");
+
+print "Three\n";
Added: vendor/perl/dist/lib/perl5db/t/test-r-statement
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-r-statement (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-r-statement 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $var = "Test";
+
+sub mysub
+{
+ my $flag = 1;
+
+ $flag = 0;
+
+ print "Foo\n";
+
+ if ($flag)
+ {
+ print "Bar\n";
+ }
+
+ return;
+}
+
+mysub();
+
+$var .= "More";
+
Added: vendor/perl/dist/lib/perl5db/t/test-w-statement-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-w-statement-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-w-statement-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use vars qw($foo);
+
+$foo = 1;
+
+print "Hello\n";
+
+for my $idx (map { $_ * 10 } 1 .. 10)
+{
+ if ($idx > 17)
+ {
+ $foo = 2;
+ print "Baz\n";
+ }
+}
+
Added: vendor/perl/dist/lib/perl5db/t/test-warnLevel-option-1
===================================================================
--- vendor/perl/dist/lib/perl5db/t/test-warnLevel-option-1 (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/test-warnLevel-option-1 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,29 @@
+use strict;
+use warnings;
+
+sub foo
+{
+ print "In foo\n";
+ bar();
+}
+
+sub bar
+{
+ print "In baz\n";
+ baz();
+}
+
+sub baz
+{
+ warn "This is not a warning.";
+
+ return;
+}
+
+sub myfunc
+{
+ bar();
+}
+
+myfunc();
+
Added: vendor/perl/dist/lib/perl5db/t/uncalled-subroutine
===================================================================
--- vendor/perl/dist/lib/perl5db/t/uncalled-subroutine (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/uncalled-subroutine 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,11 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+exit(0);
+
+sub uncalled_subroutine
+{
+ print '<', join(',', 1 .. 5), ">\n";
+}
Added: vendor/perl/dist/lib/perl5db/t/with-subroutine
===================================================================
--- vendor/perl/dist/lib/perl5db/t/with-subroutine (rev 0)
+++ vendor/perl/dist/lib/perl5db/t/with-subroutine 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,17 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $x = 'hello world';
+
+print "$x\n";
+
+back();
+
+exit;
+
+sub back {
+ print "hello back\n";
+}
+
Added: vendor/perl/dist/lib/version/t/01base.t
===================================================================
--- vendor/perl/dist/lib/version/t/01base.t (rev 0)
+++ vendor/perl/dist/lib/version/t/01base.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,46 @@
+#! /usr/local/perl -w
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+use Test::More qw/no_plan/;
+
+BEGIN {
+ (my $coretests = $0) =~ s'[^/]+\.t'coretests.pm';
+ require $coretests;
+ use_ok('version', 0.9902);
+}
+
+diag "Tests with base class" unless $ENV{PERL_CORE};
+
+BaseTests("version","new","qv");
+BaseTests("version","new","declare");
+BaseTests("version","parse", "qv");
+BaseTests("version","parse", "declare");
+
+# dummy up a redundant call to satify David Wheeler
+local $SIG{__WARN__} = sub { die $_[0] };
+eval 'use version;';
+unlike ($@, qr/^Subroutine main::declare redefined/,
+ "Only export declare once per package (to prevent redefined warnings).");
+
+# https://rt.cpan.org/Ticket/Display.html?id=47980
+my $v = eval {
+ require IO::Handle;
+ $@ = qq(Can't locate some/completely/fictitious/module.pm);
+ return IO::Handle->VERSION;
+};
+ok defined($v), 'Fix for RT #47980';
+
+{ # https://rt.cpan.org/Ticket/Display.html?id=81085
+ eval { version::new() };
+ like $@, qr'Usage: version::new\(class, version\)',
+ 'No bus err when called as function';
+ eval { $x = 1; print version::new };
+ like $@, qr'Usage: version::new\(class, version\)',
+ 'No implicit object creation when called as function';
+ eval { $x = "version"; print version::new };
+ like $@, qr'Usage: version::new\(class, version\)',
+ 'No implicit object creation when called as function';
+}
Added: vendor/perl/dist/lib/version/t/02derived.t
===================================================================
--- vendor/perl/dist/lib/version/t/02derived.t (rev 0)
+++ vendor/perl/dist/lib/version/t/02derived.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,106 @@
+#! /usr/local/perl -w
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+use Test::More qw/no_plan/;
+use File::Temp qw/tempfile/;
+
+BEGIN {
+ (my $coretests = $0) =~ s'[^/]+\.t'coretests.pm';
+ require $coretests;
+ use_ok("version", 0.9902);
+ # If we made it this far, we are ok.
+}
+
+use lib qw/./;
+
+package version::Bad;
+use base 'version';
+sub new { my($self,$n)=@_; bless \$n, $self }
+
+# Bad subclass for SemVer failures seen with pure Perl version.pm only
+package version::Bad2;
+use base 'version';
+sub new {
+ my ($class, $val) = @_;
+ die 'Invalid version string format' unless version::is_strict($val);
+ my $self = $class->SUPER::new($val);
+ return $self;
+}
+sub declare {
+ my ($class, $val) = @_;
+ my $self = $class->SUPER::declare($val);
+ return $self;
+}
+
+package main;
+
+my $warning;
+local $SIG{__WARN__} = sub { $warning = $_[0] };
+# dummy up a legal module for testing RT#19017
+my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+(my $package = basename($filename)) =~ s/\.pm$//;
+print $fh <<"EOF";
+# This is an empty subclass
+package $package;
+use base 'version';
+use vars '\$VERSION';
+\$VERSION=0.001;
+EOF
+close $fh;
+
+sub main_reset {
+ delete $main::INC{'$package'};
+ undef &qv; undef *::qv; # avoid 'used once' warning
+ undef &declare; undef *::declare; # avoid 'used once' warning
+}
+
+diag "Tests with empty derived class" unless $ENV{PERL_CORE};
+
+use_ok($package, 0.001);
+my $testobj = $package->new(1.002_003);
+isa_ok( $testobj, $package );
+ok( $testobj->numify == 1.002003, "Numified correctly" );
+ok( $testobj->stringify eq "1.002003", "Stringified correctly" );
+ok( $testobj->normal eq "v1.2.3", "Normalified correctly" );
+
+my $verobj = version::->new("1.2.4");
+ok( $verobj > $testobj, "Comparison vs parent class" );
+
+BaseTests($package, "new", "qv");
+main_reset;
+use_ok($package, 0.001, "declare");
+BaseTests($package, "new", "declare");
+main_reset;
+use_ok($package, 0.001);
+BaseTests($package, "parse", "qv");
+main_reset;
+use_ok($package, 0.001, "declare");
+BaseTests($package, "parse", "declare");
+
+diag "tests with bad subclass" unless $ENV{PERL_CORE};
+$testobj = version::Bad->new(1.002_003);
+isa_ok( $testobj, "version::Bad" );
+eval { my $string = $testobj->numify };
+like($@, qr/Invalid version object/,
+ "Bad subclass numify");
+eval { my $string = $testobj->normal };
+like($@, qr/Invalid version object/,
+ "Bad subclass normal");
+eval { my $string = $testobj->stringify };
+like($@, qr/Invalid version object/,
+ "Bad subclass stringify");
+eval { my $test = ($testobj > 1.0) };
+like($@, qr/Invalid version object/,
+ "Bad subclass vcmp");
+
+# Bad subclassing for SemVer with pure Perl version.pm only
+eval { my $test = version::Bad2->new("01.1.2") };
+like($@, qr/Invalid version string format/,
+ "Correctly found invalid version");
+
+eval { my $test = version::Bad2->declare("01.1.2") };
+unlike($@, qr/Invalid version string format/,
+ "Correctly ignored invalid version");
Added: vendor/perl/dist/lib/version/t/03require.t
===================================================================
--- vendor/perl/dist/lib/version/t/03require.t (rev 0)
+++ vendor/perl/dist/lib/version/t/03require.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,25 @@
+#! /usr/local/perl -w
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+use Test::More qw/no_plan/;
+
+BEGIN {
+ (my $coretests = $0) =~ s'[^/]+\.t'coretests.pm';
+ require $coretests;
+}
+
+# Don't want to use, because we need to make sure that the import doesn't
+# fire just yet (some code does this to avoid importing qv() and delare()).
+require_ok("version");
+is $version::VERSION, 0.9902, "Make sure we have the correct class";
+ok(!"main"->can("qv"), "We don't have the imported qv()");
+ok(!"main"->can("declare"), "We don't have the imported declare()");
+
+
+diag "Tests with base class" unless $ENV{PERL_CORE};
+
+BaseTests("version","new",undef);
+BaseTests("version","parse",undef);
Added: vendor/perl/dist/lib/version/t/04strict_lax.t
===================================================================
--- vendor/perl/dist/lib/version/t/04strict_lax.t (rev 0)
+++ vendor/perl/dist/lib/version/t/04strict_lax.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,75 @@
+#! /usr/local/perl -w
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+use Test::More qw/no_plan/;
+
+# do strict lax tests in a sub to isolate a package to test importing
+SKIP: {
+ skip 'No extended regexes Perl < 5.006', 172
+ if $] < 5.006_000;
+ strict_lax_tests();
+}
+
+sub strict_lax_tests {
+ package temp12345;
+ # copied from perl core test t/op/packagev.t
+ # format: STRING STRICT_OK LAX_OK
+ my $strict_lax_data = << 'CASE_DATA';
+1.00 pass pass
+1.00001 pass pass
+0.123 pass pass
+12.345 pass pass
+42 pass pass
+0 pass pass
+0.0 pass pass
+v1.2.3 pass pass
+v1.2.3.4 pass pass
+v0.1.2 pass pass
+v0.0.0 pass pass
+01 fail pass
+01.0203 fail pass
+v01 fail pass
+v01.02.03 fail pass
+.1 fail pass
+.1.2 fail pass
+1. fail pass
+1.a fail fail
+1._ fail fail
+1.02_03 fail pass
+v1.2_3 fail pass
+v1.02_03 fail pass
+v1.2_3_4 fail fail
+v1.2_3.4 fail fail
+1.2_3.4 fail fail
+0_ fail fail
+1_ fail fail
+1_. fail fail
+1.1_ fail fail
+1.02_03_04 fail fail
+1.2.3 fail pass
+v1.2 fail pass
+v0 fail pass
+v1 fail pass
+v.1.2.3 fail fail
+v fail fail
+v1.2345.6 fail pass
+undef fail pass
+1a fail fail
+1.2a3 fail fail
+bar fail fail
+_ fail fail
+CASE_DATA
+
+ require version;
+ version->import( qw/is_strict is_lax/ );
+ for my $case ( split qr/\n/, $strict_lax_data ) {
+ my ($v, $strict, $lax) = split qr/\t+/, $case;
+ main::ok( $strict eq 'pass' ? is_strict($v) : ! is_strict($v), "is_strict($v) [$strict]" );
+ main::ok( $strict eq 'pass' ? version::is_strict($v) : ! version::is_strict($v), "version::is_strict($v) [$strict]" );
+ main::ok( $lax eq 'pass' ? is_lax($v) : ! is_lax($v), "is_lax($v) [$lax]" );
+ main::ok( $lax eq 'pass' ? version::is_lax($v) : ! version::is_lax($v), "version::is_lax($v) [$lax]" );
+ }
+}
Added: vendor/perl/dist/lib/version/t/05sigdie.t
===================================================================
--- vendor/perl/dist/lib/version/t/05sigdie.t (rev 0)
+++ vendor/perl/dist/lib/version/t/05sigdie.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+#! /usr/local/perl -w
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+use Test::More tests => 1;
+
+BEGIN {
+ $SIG{__DIE__} = sub {
+ warn @_;
+ BAIL_OUT( q[Couldn't use module; can't continue.] );
+ };
+}
+
+
+BEGIN {
+ use version 0.9902;
+}
+
+pass "Didn't get caught by the wrong DIE handler, which is a good thing";
Added: vendor/perl/dist/lib/version/t/06noop.t
===================================================================
--- vendor/perl/dist/lib/version/t/06noop.t (rev 0)
+++ vendor/perl/dist/lib/version/t/06noop.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,32 @@
+#! /usr/local/perl -w
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+use Test::More qw/no_plan/;
+
+BEGIN {
+ use_ok('version', 0.9902);
+}
+
+my $v1 = version->new('1.2');
+eval {$v1 = $v1 + 1};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
+eval {$v1 = $v1 - 1};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
+eval {$v1 = $v1 / 1};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
+eval {$v1 = $v1 * 1};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
+eval {$v1 = abs($v1)};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
+
+eval {$v1 += 1};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
+eval {$v1 -= 1};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
+eval {$v1 /= 1};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
+eval {$v1 *= 1};
+like $@, qr/operation not supported with version object/, 'No math ops with version objects';
Added: vendor/perl/dist/lib/version/t/07locale.t
===================================================================
--- vendor/perl/dist/lib/version/t/07locale.t (rev 0)
+++ vendor/perl/dist/lib/version/t/07locale.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,239 @@
+#! /usr/local/perl -w
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+use File::Basename;
+use File::Temp qw/tempfile/;
+use POSIX qw/locale_h/;
+use Test::More tests => 7;
+use Config;
+
+BEGIN {
+ use_ok('version', 0.9902);
+}
+
+SKIP: {
+ skip 'No locale testing for Perl < 5.6.0', 6 if $] < 5.006;
+ skip 'No locale testing without d_setlocale', 6 if(!$Config{d_setlocale});
+ # test locale handling
+ my $warning;
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+
+ my $ver = 1.23; # has to be floating point number
+ my $loc;
+ my $orig_loc = setlocale(LC_NUMERIC);
+ is ($ver, '1.23', 'Not using locale yet');
+ while (<DATA>) {
+ chomp;
+ $loc = setlocale( LC_ALL, $_);
+ last if localeconv()->{decimal_point} eq ',';
+ }
+ skip 'Cannot test locale handling without a comma locale', 5
+ unless $loc and localeconv()->{decimal_point} eq ',';
+
+ diag ("Testing locale handling with $loc") unless $ENV{PERL_CORE};
+
+ setlocale(LC_NUMERIC, $loc);
+ is ($ver, '1,23', "Using locale: $loc");
+ $v = version->new($ver);
+ unlike($warning, qr/Version string '1,23' contains invalid data/,
+ "Process locale-dependent floating point");
+ is ($v, "1.23", "Locale doesn't apply to version objects");
+ ok ($v == $ver, "Comparison to locale floating point");
+
+ setlocale( LC_ALL, $orig_loc); # reset this before possible skip
+ skip 'Cannot test RT#46921 with Perl < 5.008', 1
+ if ($] < 5.008);
+ skip 'Cannot test RT#46921 with pure Perl module', 1
+ if exists $INC{'version/vpp.pm'};
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh <<"EOF";
+package $package;
+use POSIX qw(locale_h);
+\$^W = 1;
+use version;
+setlocale (LC_ALL, '$loc');
+use version ;
+eval "use Socket 1.7";
+setlocale( LC_ALL, '$orig_loc');
+1;
+EOF
+ close $fh;
+
+ eval "use lib '.'; use $package;";
+ unlike($warning, qr"Version string '1,7' contains invalid data",
+ 'Handle locale action-at-a-distance');
+ }
+
+__DATA__
+af_ZA
+af_ZA.utf8
+an_ES
+an_ES.utf8
+az_AZ.utf8
+be_BY
+be_BY.utf8
+bg_BG
+bg_BG.utf8
+br_FR
+br_FR at euro
+br_FR.utf8
+bs_BA
+bs_BA.utf8
+ca_ES
+ca_ES at euro
+ca_ES.utf8
+cs_CZ
+cs_CZ.utf8
+da_DK
+da_DK.utf8
+de_AT
+de_AT at euro
+de_AT.utf8
+de_BE
+de_BE at euro
+de_BE.utf8
+de_DE
+de_DE at euro
+de_DE.utf8
+de_LU
+de_LU at euro
+de_LU.utf8
+el_GR
+el_GR.utf8
+en_DK
+en_DK.utf8
+es_AR
+es_AR.utf8
+es_BO
+es_BO.utf8
+es_CL
+es_CL.utf8
+es_CO
+es_CO.utf8
+es_EC
+es_EC.utf8
+es_ES
+es_ES at euro
+es_ES.utf8
+es_PY
+es_PY.utf8
+es_UY
+es_UY.utf8
+es_VE
+es_VE.utf8
+et_EE
+et_EE.iso885915
+et_EE.utf8
+eu_ES
+eu_ES at euro
+eu_ES.utf8
+fi_FI
+fi_FI at euro
+fi_FI.utf8
+fo_FO
+fo_FO.utf8
+fr_BE
+fr_BE at euro
+fr_BE.utf8
+fr_CA
+fr_CA.utf8
+fr_CH
+fr_CH.utf8
+fr_FR
+fr_FR at euro
+fr_FR.utf8
+fr_LU
+fr_LU at euro
+fr_LU.utf8
+gl_ES
+gl_ES at euro
+gl_ES.utf8
+hr_HR
+hr_HR.utf8
+hu_HU
+hu_HU.utf8
+id_ID
+id_ID.utf8
+is_IS
+is_IS.utf8
+it_CH
+it_CH.utf8
+it_IT
+it_IT at euro
+it_IT.utf8
+ka_GE
+ka_GE.utf8
+kk_KZ
+kk_KZ.utf8
+kl_GL
+kl_GL.utf8
+lt_LT
+lt_LT.utf8
+lv_LV
+lv_LV.utf8
+mk_MK
+mk_MK.utf8
+mn_MN
+mn_MN.utf8
+nb_NO
+nb_NO.utf8
+nl_BE
+nl_BE at euro
+nl_BE.utf8
+nl_NL
+nl_NL at euro
+nl_NL.utf8
+nn_NO
+nn_NO.utf8
+no_NO
+no_NO.utf8
+oc_FR
+oc_FR.utf8
+pl_PL
+pl_PL.utf8
+pt_BR
+pt_BR.utf8
+pt_PT
+pt_PT at euro
+pt_PT.utf8
+ro_RO
+ro_RO.utf8
+ru_RU
+ru_RU.koi8r
+ru_RU.utf8
+ru_UA
+ru_UA.utf8
+se_NO
+se_NO.utf8
+sh_YU
+sh_YU.utf8
+sk_SK
+sk_SK.utf8
+sl_SI
+sl_SI.utf8
+sq_AL
+sq_AL.utf8
+sr_CS
+sr_CS.utf8
+sv_FI
+sv_FI at euro
+sv_FI.utf8
+sv_SE
+sv_SE.iso885915
+sv_SE.utf8
+tg_TJ
+tg_TJ.utf8
+tr_TR
+tr_TR.utf8
+tt_RU.utf8
+uk_UA
+uk_UA.utf8
+vi_VN
+vi_VN.tcvn
+wa_BE
+wa_BE at euro
+wa_BE.utf8
Added: vendor/perl/dist/lib/version/t/coretests.pm
===================================================================
--- vendor/perl/dist/lib/version/t/coretests.pm (rev 0)
+++ vendor/perl/dist/lib/version/t/coretests.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,608 @@
+#! /usr/local/perl -w
+package main;
+require Test::Harness;
+*Verbose = \$Test::Harness::Verbose;
+use Data::Dumper;
+use File::Temp qw/tempfile/;
+use File::Basename;
+
+if ($Test::More::VERSION < 0.48) { # Fix for RT#48268
+ local $^W;
+ *main::use_ok = sub ($;@) {
+ my ($pkg, $req, @args) = @_;
+ eval "use $pkg $req ".join(' ', at args);
+ is ${"$pkg\::VERSION"}, $req, 'Had to manually use version';
+ # If we made it this far, we are ok.
+ };
+}
+
+sub BaseTests {
+
+ my ($CLASS, $method, $qv_declare) = @_;
+ my $warning;
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+
+ # Insert your test code below, the Test module is use()ed here so read
+ # its man page ( perldoc Test ) for help writing this test script.
+
+ # Test bare number processing
+ diag "tests with bare numbers" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method(5.005_03);
+ is ( "$version" , "5.00503" , '5.005_03 eq 5.00503' );
+ $version = $CLASS->$method(1.23);
+ is ( "$version" , "1.23" , '1.23 eq "1.23"' );
+
+ # Test quoted number processing
+ diag "tests with quoted numbers" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method("5.005_03");
+ is ( "$version" , "5.005_03" , '"5.005_03" eq "5.005_03"' );
+ $version = $CLASS->$method("v1.23");
+ is ( "$version" , "v1.23" , '"v1.23" eq "v1.23"' );
+
+ # Test stringify operator
+ diag "tests with stringify" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method("5.005");
+ is ( "$version" , "5.005" , '5.005 eq "5.005"' );
+ $version = $CLASS->$method("5.006.001");
+ is ( "$version" , "5.006.001" , '5.006.001 eq v5.6.1' );
+ unlike ($warning, qr/v-string without leading 'v' deprecated/, 'No leading v');
+ $version = $CLASS->$method("v1.2.3_4");
+ is ( "$version" , "v1.2.3_4" , 'alpha version 1.2.3_4 eq v1.2.3_4' );
+
+ # test illegal formats
+ diag "test illegal formats" unless $ENV{PERL_CORE};
+ eval {my $version = $CLASS->$method("1.2_3_4")};
+ like($@, qr/multiple underscores/,
+ "Invalid version format (multiple underscores)");
+
+ eval {my $version = $CLASS->$method("1.2_3.4")};
+ like($@, qr/underscores before decimal/,
+ "Invalid version format (underscores before decimal)");
+
+ eval {my $version = $CLASS->$method("1_2")};
+ like($@, qr/alpha without decimal/,
+ "Invalid version format (alpha without decimal)");
+
+ eval { $version = $CLASS->$method("1.2b3")};
+ like($@, qr/non-numeric data/,
+ "Invalid version format (non-numeric data)");
+
+ eval { $version = $CLASS->$method("-1.23")};
+ like($@, qr/negative version number/,
+ "Invalid version format (negative version number)");
+
+ # from here on out capture the warning and test independently
+ {
+ eval{$version = $CLASS->$method("99 and 44/100 pure")};
+
+ like($@, qr/non-numeric data/,
+ "Invalid version format (non-numeric data)");
+
+ eval{$version = $CLASS->$method("something")};
+ like($@, qr/non-numeric data/,
+ "Invalid version format (non-numeric data)");
+
+ # reset the test object to something reasonable
+ $version = $CLASS->$method("1.2.3");
+
+ # Test boolean operator
+ ok ($version, 'boolean');
+
+ # Test class membership
+ isa_ok ( $version, $CLASS );
+
+ # Test comparison operators with self
+ diag "tests with self" unless $ENV{PERL_CORE};
+ is ( $version <=> $version, 0, '$version <=> $version == 0' );
+ ok ( $version == $version, '$version == $version' );
+
+ # Test Numeric Comparison operators
+ # test first with non-object
+ $version = $CLASS->$method("5.006.001");
+ $new_version = "5.8.0";
+ diag "numeric tests with non-objects" unless $ENV{PERL_CORE};
+ ok ( $version == $version, '$version == $version' );
+ ok ( $version < $new_version, '$version < $new_version' );
+ ok ( $new_version > $version, '$new_version > $version' );
+ ok ( $version != $new_version, '$version != $new_version' );
+
+ # now test with existing object
+ $new_version = $CLASS->$method($new_version);
+ diag "numeric tests with objects" unless $ENV{PERL_CORE};
+ ok ( $version < $new_version, '$version < $new_version' );
+ ok ( $new_version > $version, '$new_version > $version' );
+ ok ( $version != $new_version, '$version != $new_version' );
+
+ # now test with actual numbers
+ diag "numeric tests with numbers" unless $ENV{PERL_CORE};
+ ok ( $version->numify() == 5.006001, '$version->numify() == 5.006001' );
+ ok ( $version->numify() <= 5.006001, '$version->numify() <= 5.006001' );
+ ok ( $version->numify() < 5.008, '$version->numify() < 5.008' );
+ #ok ( $version->numify() > v5.005_02, '$version->numify() > 5.005_02' );
+
+ # test with long decimals
+ diag "Tests with extended decimal versions" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method(1.002003);
+ ok ( $version == "1.2.3", '$version == "1.2.3"');
+ ok ( $version->numify == 1.002003, '$version->numify == 1.002003');
+ $version = $CLASS->$method("2002.09.30.1");
+ ok ( $version == "2002.9.30.1",'$version == 2002.9.30.1');
+ ok ( $version->numify == 2002.009030001,
+ '$version->numify == 2002.009030001');
+
+ # now test with alpha version form with string
+ $version = $CLASS->$method("1.2.3");
+ $new_version = "1.2.3_4";
+ diag "numeric tests with alpha-style non-objects" unless $ENV{PERL_CORE};
+ ok ( $version < $new_version, '$version < $new_version' );
+ ok ( $new_version > $version, '$new_version > $version' );
+ ok ( $version != $new_version, '$version != $new_version' );
+
+ $version = $CLASS->$method("1.2.4");
+ diag "numeric tests with alpha-style non-objects"
+ unless $ENV{PERL_CORE};
+ ok ( $version > $new_version, '$version > $new_version' );
+ ok ( $new_version < $version, '$new_version < $version' );
+ ok ( $version != $new_version, '$version != $new_version' );
+
+ # now test with alpha version form with object
+ $version = $CLASS->$method("1.2.3");
+ $new_version = $CLASS->$method("1.2.3_4");
+ diag "tests with alpha-style objects" unless $ENV{PERL_CORE};
+ ok ( $version < $new_version, '$version < $new_version' );
+ ok ( $new_version > $version, '$new_version > $version' );
+ ok ( $version != $new_version, '$version != $new_version' );
+ ok ( !$version->is_alpha, '!$version->is_alpha');
+ ok ( $new_version->is_alpha, '$new_version->is_alpha');
+
+ $version = $CLASS->$method("1.2.4");
+ diag "tests with alpha-style objects" unless $ENV{PERL_CORE};
+ ok ( $version > $new_version, '$version > $new_version' );
+ ok ( $new_version < $version, '$new_version < $version' );
+ ok ( $version != $new_version, '$version != $new_version' );
+
+ $version = $CLASS->$method("1.2.3.4");
+ $new_version = $CLASS->$method("1.2.3_4");
+ diag "tests with alpha-style objects with same subversion"
+ unless $ENV{PERL_CORE};
+ ok ( $version > $new_version, '$version > $new_version' );
+ ok ( $new_version < $version, '$new_version < $version' );
+ ok ( $version != $new_version, '$version != $new_version' );
+
+ diag "test implicit [in]equality" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method("v1.2.3");
+ $new_version = $CLASS->$method("1.2.3.0");
+ ok ( $version == $new_version, '$version == $new_version' );
+ $new_version = $CLASS->$method("1.2.3_0");
+ ok ( $version == $new_version, '$version == $new_version' );
+ $new_version = $CLASS->$method("1.2.3.1");
+ ok ( $version < $new_version, '$version < $new_version' );
+ $new_version = $CLASS->$method("1.2.3_1");
+ ok ( $version < $new_version, '$version < $new_version' );
+ $new_version = $CLASS->$method("1.1.999");
+ ok ( $version > $new_version, '$version > $new_version' );
+
+ diag "test with version class names" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method("v1.2.3");
+ eval { () = $version < 'version' };
+ like $@, qr/^Invalid version format/, "error with $version < 'version'";
+
+ # that which is not expressly permitted is forbidden
+ diag "forbidden operations" unless $ENV{PERL_CORE};
+ ok ( !eval { ++$version }, "noop ++" );
+ ok ( !eval { --$version }, "noop --" );
+ ok ( !eval { $version/1 }, "noop /" );
+ ok ( !eval { $version*3 }, "noop *" );
+ ok ( !eval { abs($version) }, "noop abs" );
+
+SKIP: {
+ skip "version require'd instead of use'd, cannot test $qv_declare", 3
+ unless defined $qv_declare;
+ # test the $qv_declare() sub
+ diag "testing $qv_declare" unless $ENV{PERL_CORE};
+ $version = $CLASS->$qv_declare("1.2");
+ is ( "$version", "v1.2", $qv_declare.'("1.2") == "1.2.0"' );
+ $version = $CLASS->$qv_declare(1.2);
+ is ( "$version", "v1.2", $qv_declare.'(1.2) == "1.2.0"' );
+ isa_ok( $CLASS->$qv_declare('5.008'), $CLASS );
+}
+
+ # test creation from existing version object
+ diag "create new from existing version" unless $ENV{PERL_CORE};
+ ok (eval {$new_version = $CLASS->$method($version)},
+ "new from existing object");
+ ok ($new_version == $version, "class->$method($version) identical");
+ $new_version = $version->$method(0);
+ isa_ok ($new_version, $CLASS );
+ is ($new_version, "0", "version->$method() doesn't clone");
+ $new_version = $version->$method("1.2.3");
+ is ($new_version, "1.2.3" , '$version->$method("1.2.3") works too');
+
+ # test the CVS revision mode
+ diag "testing CVS Revision" unless $ENV{PERL_CORE};
+ $version = new $CLASS qw$Revision: 1.2$;
+ ok ( $version == "1.2.0", 'qw$Revision: 1.2$ == 1.2.0' );
+ $version = new $CLASS qw$Revision: 1.2.3.4$;
+ ok ( $version == "1.2.3.4", 'qw$Revision: 1.2.3.4$ == 1.2.3.4' );
+
+ # test the CPAN style reduced significant digit form
+ diag "testing CPAN-style versions" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method("1.23_01");
+ is ( "$version" , "1.23_01", "CPAN-style alpha version" );
+ ok ( $version > 1.23, "1.23_01 > 1.23");
+ ok ( $version < 1.24, "1.23_01 < 1.24");
+
+ # test reformed UNIVERSAL::VERSION
+ diag "Replacement UNIVERSAL::VERSION tests" unless $ENV{PERL_CORE};
+
+ my $error_regex = $] < 5.006
+ ? 'version \d required'
+ : 'does not define \$t.{7}::VERSION';
+
+ {
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh "package $package;\n\$$package\::VERSION=0.58;\n1;\n";
+ close $fh;
+
+ $version = 0.58;
+ eval "use lib '.'; use $package $version";
+ unlike($@, qr/$package version $version/,
+ 'Replacement eval works with exact version');
+
+ # test as class method
+ $new_version = $package->VERSION;
+ cmp_ok($new_version,'==',$version, "Called as class method");
+
+ eval "print Completely::Unknown::Module->VERSION";
+ if ( $] < 5.008 ) {
+ unlike($@, qr/$error_regex/,
+ "Don't freak if the module doesn't even exist");
+ }
+ else {
+ unlike($@, qr/defines neither package nor VERSION/,
+ "Don't freak if the module doesn't even exist");
+ }
+
+ # this should fail even with old UNIVERSAL::VERSION
+ $version += 0.01;
+ eval "use lib '.'; use $package $version";
+ like($@, qr/$package version $version/,
+ 'Replacement eval works with incremented version');
+
+ $version =~ s/0+$//; #convert to string and remove trailing 0's
+ chop($version); # shorten by 1 digit, should still succeed
+ eval "use lib '.'; use $package $version";
+ unlike($@, qr/$package version $version/,
+ 'Replacement eval works with single digit');
+
+ # this would fail with old UNIVERSAL::VERSION
+ $version += 0.1;
+ eval "use lib '.'; use $package $version";
+ like($@, qr/$package version $version/,
+ 'Replacement eval works with incremented digit');
+ unlink $filename;
+ }
+
+ { # dummy up some variously broken modules for testing
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh "1;\n";
+ close $fh;
+
+ eval "use lib '.'; use $package 3;";
+ if ( $] < 5.008 ) {
+ like($@, qr/$error_regex/,
+ 'Replacement handles modules without package or VERSION');
+ }
+ else {
+ like($@, qr/defines neither package nor VERSION/,
+ 'Replacement handles modules without package or VERSION');
+ }
+ eval "use lib '.'; use $package; \$version = $package->VERSION";
+ unlike ($@, qr/$error_regex/,
+ 'Replacement handles modules without package or VERSION');
+ ok (!defined($version), "Called as class method");
+ unlink $filename;
+ }
+
+ { # dummy up some variously broken modules for testing
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh "package $package;\n#look ma no VERSION\n1;\n";
+ close $fh;
+ eval "use lib '.'; use $package 3;";
+ like ($@, qr/$error_regex/,
+ 'Replacement handles modules without VERSION');
+ eval "use lib '.'; use $package; print $package->VERSION";
+ unlike ($@, qr/$error_regex/,
+ 'Replacement handles modules without VERSION');
+ unlink $filename;
+ }
+
+ { # dummy up some variously broken modules for testing
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh "package $package;\n\@VERSION = ();\n1;\n";
+ close $fh;
+ eval "use lib '.'; use $package 3;";
+ like ($@, qr/$error_regex/,
+ 'Replacement handles modules without VERSION');
+ eval "use lib '.'; use $package; print $package->VERSION";
+ unlike ($@, qr/$error_regex/,
+ 'Replacement handles modules without VERSION');
+ unlink $filename;
+ }
+SKIP: { # https://rt.perl.org/rt3/Ticket/Display.html?id=95544
+ skip "version require'd instead of use'd, cannot test UNIVERSAL::VERSION", 2
+ unless defined $qv_declare;
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh "package $package;\n\$VERSION = '3alpha';\n1;\n";
+ close $fh;
+ eval "use lib '.'; use $package; print $package->VERSION";
+ like ($@, qr/Invalid version format \(non-numeric data\)/,
+ 'Warn about bad \$VERSION');
+ eval "use lib '.'; use $package 1;";
+ like ($@, qr/Invalid version format \(non-numeric data\)/,
+ 'Warn about bad $VERSION');
+ }
+
+SKIP: {
+ skip 'Cannot test bare v-strings with Perl < 5.6.0', 4
+ if $] < 5.006_000;
+ diag "Tests with v-strings" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method(1.2.3);
+ ok("$version" eq "v1.2.3", '"$version" eq 1.2.3');
+ $version = $CLASS->$method(1.0.0);
+ $new_version = $CLASS->$method(1);
+ ok($version == $new_version, '$version == $new_version');
+ skip "version require'd instead of use'd, cannot test declare", 1
+ unless defined $qv_declare;
+ $version = &$qv_declare(1.2.3);
+ ok("$version" eq "v1.2.3", 'v-string initialized $qv_declare()');
+ }
+
+SKIP: {
+ skip 'Cannot test bare alpha v-strings with Perl < 5.8.1', 2
+ if $] lt 5.008_001;
+ diag "Tests with bare alpha v-strings" unless $ENV{PERL_CORE};
+ $version = $CLASS->$method(v1.2.3_4);
+ is($version, "v1.2.3_4", '"$version" eq "v1.2.3_4"');
+ $version = $CLASS->$method(eval "v1.2.3_4");
+ is($version, "v1.2.3_4", '"$version" eq "v1.2.3_4" (from eval)');
+ }
+
+ diag "Tests with real-world (malformed) data" unless $ENV{PERL_CORE};
+
+ # trailing zero testing (reported by Andreas Koenig).
+ $version = $CLASS->$method("1");
+ ok($version->numify eq "1.000", "trailing zeros preserved");
+ $version = $CLASS->$method("1.0");
+ ok($version->numify eq "1.000", "trailing zeros preserved");
+ $version = $CLASS->$method("1.0.0");
+ ok($version->numify eq "1.000000", "trailing zeros preserved");
+ $version = $CLASS->$method("1.0.0.0");
+ ok($version->numify eq "1.000000000", "trailing zeros preserved");
+
+ # leading zero testing (reported by Andreas Koenig).
+ $version = $CLASS->$method(".7");
+ ok($version->numify eq "0.700", "leading zero inferred");
+
+ # leading space testing (reported by Andreas Koenig).
+ $version = $CLASS->$method(" 1.7");
+ ok($version->numify eq "1.700", "leading space ignored");
+
+ # RT 19517 - deal with undef and 'undef' initialization
+ ok("$version" ne 'undef', "Undef version comparison #1");
+ ok("$version" ne undef, "Undef version comparison #2");
+ $version = $CLASS->$method('undef');
+ unlike($warning, qr/^Version string 'undef' contains invalid data/,
+ "Version string 'undef'");
+
+ $version = $CLASS->$method(undef);
+ like($warning, qr/^Use of uninitialized value/,
+ "Version string 'undef'");
+ ok($version == 'undef', "Undef version comparison #3");
+ ok($version == undef, "Undef version comparison #4");
+ eval "\$version = \$CLASS->$method()"; # no parameter at all
+ unlike($@, qr/^Bizarre copy of CODE/, "No initializer at all");
+ ok($version == 'undef', "Undef version comparison #5");
+ ok($version == undef, "Undef version comparison #6");
+
+ $version = $CLASS->$method(0.000001);
+ unlike($warning, qr/^Version string '1e-06' contains invalid data/,
+ "Very small version objects");
+ }
+
+SKIP: {
+ my $warning;
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+ # dummy up a legal module for testing RT#19017
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh <<"EOF";
+package $package;
+use $CLASS; \$VERSION = ${CLASS}->new('0.0.4');
+1;
+EOF
+ close $fh;
+
+ eval "use lib '.'; use $package 0.000008;";
+ like ($@, qr/^$package version 0.000008 required/,
+ "Make sure very small versions don't freak");
+ eval "use lib '.'; use $package 1;";
+ like ($@, qr/^$package version 1 required/,
+ "Comparing vs. version with no decimal");
+ eval "use lib '.'; use $package 1.;";
+ like ($@, qr/^$package version 1 required/,
+ "Comparing vs. version with decimal only");
+ if ( $] < 5.006_000 ) {
+ skip 'Cannot "use" extended versions with Perl < 5.6.0', 3;
+ }
+ eval "use lib '.'; use $package v0.0.8;";
+ my $regex = "^$package version v0.0.8 required";
+ like ($@, qr/$regex/, "Make sure very small versions don't freak");
+
+ $regex =~ s/8/4/; # set for second test
+ eval "use lib '.'; use $package v0.0.4;";
+ unlike($@, qr/$regex/, 'Succeed - required == VERSION');
+ cmp_ok ( $package->VERSION, 'eq', '0.0.4', 'No undef warnings' );
+ unlink $filename;
+ }
+
+SKIP: {
+ skip 'Cannot test "use base qw(version)" when require is used', 3
+ unless defined $qv_declare;
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh <<"EOF";
+package $package;
+use base qw(version);
+1;
+EOF
+ close $fh;
+ # need to eliminate any other $qv_declare()'s
+ undef *{"main\::$qv_declare"};
+ ok(!defined(&{"main\::$qv_declare"}), "make sure we cleared $qv_declare() properly");
+ eval "use lib '.'; use $package qw/declare qv/;";
+ ok(defined(&{"main\::$qv_declare"}), "make sure we exported $qv_declare() properly");
+ isa_ok( &$qv_declare(1.2), $package);
+ unlink $filename;
+}
+
+SKIP: {
+ if ( $] < 5.006_000 ) {
+ skip 'Cannot "use" extended versions with Perl < 5.6.0', 3;
+ }
+ my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
+ (my $package = basename($filename)) =~ s/\.pm$//;
+ print $fh <<"EOF";
+package $package;
+\$VERSION = 1.0;
+1;
+EOF
+ close $fh;
+ eval "use lib '.'; use $package 1.001;";
+ like ($@, qr/^$package version 1.001 required/,
+ "User typed numeric so we error with numeric");
+ eval "use lib '.'; use $package v1.1.0;";
+ like ($@, qr/^$package version v1.1.0 required/,
+ "User typed extended so we error with extended");
+ unlink $filename;
+ }
+
+ eval 'my $v = $CLASS->$method("1._1");';
+ unlike($@, qr/^Invalid version format \(alpha with zero width\)/,
+ "Invalid version format 1._1");
+
+ {
+ my $warning;
+ local $SIG{__WARN__} = sub { $warning = $_[0] };
+ eval 'my $v = $CLASS->$method(~0);';
+ unlike($@, qr/Integer overflow in version/, "Too large version");
+ like($warning, qr/Integer overflow in version/, "Too large version");
+ }
+
+ {
+ local $Data::Dumper::Sortkeys= 1;
+ # http://rt.cpan.org/Public/Bug/Display.html?id=30004
+ my $v1 = $CLASS->$method("v0.1_1");
+ (my $alpha1 = Dumper($v1)) =~ s/.+'alpha' => ([^,]+),.+/$1/ms;
+ my $v2 = $CLASS->$method($v1);
+ (my $alpha2 = Dumper($v2)) =~ s/.+'alpha' => ([^,]+),.+/$1/ms;
+ is $alpha2, $alpha1, "Don't fall for Data::Dumper's tricks";
+ }
+
+ {
+ # http://rt.perl.org/rt3/Ticket/Display.html?id=56606
+ my $badv = bless { version => [1,2,3] }, "version";
+ is $badv, '1.002003', "Deal with badly serialized versions from YAML";
+ my $badv2 = bless { qv => 1, version => [1,2,3] }, "version";
+ is $badv2, 'v1.2.3', "Deal with badly serialized versions from YAML ";
+ }
+
+ {
+ # https://rt.cpan.org/Public/Bug/Display.html?id=70950
+ # test indirect usage of version objects
+ my $sum = 0;
+ eval '$sum += $CLASS->$method("v2.0.0")';
+ like $@, qr/operation not supported with version object/,
+ 'No math operations with version objects';
+ # test direct usage of version objects
+ my $v = $CLASS->$method("v2.0.0");
+ eval '$v += 1';
+ like $@, qr/operation not supported with version object/,
+ 'No math operations with version objects';
+ }
+
+ {
+ # https://rt.cpan.org/Ticket/Display.html?id=72365
+ # https://rt.perl.org/rt3/Ticket/Display.html?id=102586
+ # https://rt.cpan.org/Ticket/Display.html?id=78328
+ eval 'my $v = $CLASS->$method("version")';
+ like $@, qr/Invalid version format/,
+ "The string 'version' is not a version for $method";
+ eval 'my $v = $CLASS->$method("ver510n")';
+ like $@, qr/Invalid version format/,
+ 'All strings starting with "v" are not versions';
+ }
+
+SKIP: {
+ if ( $] < 5.006_000 ) {
+ skip 'No v-string support at all < 5.6.0', 2;
+ }
+ # https://rt.cpan.org/Ticket/Display.html?id=49348
+ my $v = $CLASS->$method("420");
+ is "$v", "420", 'Correctly guesses this is not a v-string';
+ $v = $CLASS->$method(4.2.0);
+ is "$v", 'v4.2.0', 'Correctly guess that this is a v-string';
+ }
+SKIP: {
+ if ( $] < 5.006_000 ) {
+ skip 'No v-string support at all < 5.6.0', 4;
+ }
+ # https://rt.cpan.org/Ticket/Display.html?id=50347
+ # Check that the qv() implementation does not change
+
+ ok $CLASS->$method(1.2.3) < $CLASS->$method(1.2.3.1), 'Compare 3 and 4 digit v-strings' ;
+ ok $CLASS->$method(v1.2.3) < $CLASS->$method(v1.2.3.1), 'Compare 3 and 4 digit v-strings, leaving v';
+ ok $CLASS->$method("1.2.3") < $CLASS->$method("1.2.3.1"), 'Compare 3 and 4 digit v-strings, quoted';
+ ok $CLASS->$method("v1.2.3") < $CLASS->$method("v1.2.3.1"), 'Compare 3 and 4 digit v-strings, quoted leading v';
+ }
+
+ {
+ eval '$CLASS->$method("version")';
+ pass("no crash with ${CLASS}->${method}('version')");
+ {
+ package _102586;
+ sub TIESCALAR { bless [] }
+ sub FETCH { "version" }
+ sub STORE { }
+ my $v;
+ tie $v, __PACKAGE__;
+ $v = $CLASS->$method(1);
+ eval '$CLASS->$method($v)';
+ }
+ pass('no crash with version->new($tied) where $tied returns "version"');
+ }
+
+ { # [perl #112478]
+ $_112478::VERSION = 9e99;
+ ok eval { _112478->VERSION(9e99); 1 }, '->VERSION(9e99) succeeds'
+ or diag $@;
+ $_112478::VERSION = 1;
+ eval { _112478->VERSION(9e99) };
+ unlike $@, qr/panic/, '->VERSION(9e99) does not panic';
+ }
+
+ { # https://rt.cpan.org/Ticket/Display.html?id=79259
+ my $v = $CLASS->new("0.52_0");
+ ok $v->is_alpha, 'Just checking';
+ is $v->numify, '0.520', 'Correctly nummified';
+ }
+
+}
+
+1;
+
Added: vendor/perl/dist/pod/perl5124delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5124delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5124delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,108 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5124delta - what is new for perl v5.12.4
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.12.3 release and
+the 5.12.4 release.
+
+If you are upgrading from an earlier release such as 5.12.2, first read
+L<perl5123delta>, which describes differences between 5.12.2
+and 5.12.3. The major changes made in 5.12.0 are described in L<perl5120delta>.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.12.3. If any
+exist, they are bugs and reports are welcome.
+
+=head1 Selected Bug Fixes
+
+When strict "refs" mode is off, C<%{...}> in rvalue context returns
+C<undef> if its argument is undefined. An optimisation introduced in Perl
+5.12.0 to make C<keys %{...}> faster when used as a boolean did not take
+this into account, causing C<keys %{+undef}> (and C<keys %$foo> when
+C<$foo> is undefined) to be an error, which it should be so in strict
+mode only [perl #81750].
+
+C<lc>, C<uc>, C<lcfirst>, and C<ucfirst> no longer return untainted strings
+when the argument is tainted. This has been broken since perl 5.8.9
+[perl #87336].
+
+Fixed a case where it was possible that a freed buffer may have been read
+from when parsing a here document.
+
+=head1 Modules and Pragmata
+
+L<Module::CoreList> has been upgraded from version 2.43 to 2.50.
+
+=head1 Testing
+
+The F<cpan/CGI/t/http.t> test script has been fixed to work when the
+environment has HTTPS_* environment variables, such as HTTPS_PROXY.
+
+=head1 Documentation
+
+Updated the documentation for rand() in L<perlfunc> to note that it is not
+cryptographically secure.
+
+=head1 Platform Specific Notes
+
+=over 4
+
+=item Linux
+
+Support Ubuntu 11.04's new multi-arch library layout.
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.12.4 represents approximately 5 months of development since
+Perl 5.12.3 and contains approximately 200 lines of changes across
+11 files from 8 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.12.4:
+
+Andy Dougherty, David Golden, David Leadbeater, Father Chrysostomos,
+Florian Ragwitz, Jesse Vincent, Leon Brocard, Zsbán Ambrus.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://rt.perl.org/perlbug/ . There may also be
+information at http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the B<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please send
+it to perl5-security-report at perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who be able
+to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently
+distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5125delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5125delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5125delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,241 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5125delta - what is new for perl v5.12.5
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.12.4 release and
+the 5.12.5 release.
+
+If you are upgrading from an earlier release such as 5.12.3, first read
+L<perl5124delta>, which describes differences between 5.12.3 and
+5.12.4.
+
+=head1 Security
+
+=head2 C<Encode> decode_xs n-byte heap-overflow (CVE-2011-2939)
+
+A bug in C<Encode> could, on certain inputs, cause the heap to overflow.
+This problem has been corrected. Bug reported by Robert Zacek.
+
+=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728).
+
+Calling C<File::Glob::bsd_glob> with the unsupported flag GLOB_ALTDIRFUNC would
+cause an access violation / segfault. A Perl program that accepts a flags value from
+an external source could expose itself to denial of service or arbitrary code
+execution attacks. There are no known exploits in the wild. The problem has been
+corrected by explicitly disabling all unsupported flags and setting unused function
+pointers to null. Bug reported by Clément Lecigne.
+
+=head2 Heap buffer overrun in 'x' string repeat operator (CVE-2012-5195)
+
+Poorly written perl code that allows an attacker to specify the count to
+perl's 'x' string repeat operator can already cause a memory exhaustion
+denial-of-service attack. A flaw in versions of perl before 5.15.5 can
+escalate that into a heap buffer overrun; coupled with versions of glibc
+before 2.16, it possibly allows the execution of arbitrary code.
+
+This problem has been fixed.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.12.4. If any
+exist, they are bugs and reports are welcome.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules
+
+=head3 L<B::Concise>
+
+L<B::Concise> no longer produces mangled output with the B<-tree> option
+[perl #80632].
+
+=head3 L<charnames>
+
+A regression introduced in Perl 5.8.8 has been fixed, that caused
+C<charnames::viacode(0)> to return C<undef> instead of the string "NULL"
+[perl #72624].
+
+=head3 L<Encode> has been upgraded from version 2.39 to version 2.39_01.
+
+See L</Security>.
+
+=head3 L<File::Glob> has been upgraded from version 1.07 to version 1.07_01.
+
+See L</Security>.
+
+=head3 L<Unicode::UCD>
+
+The documentation for the C<upper> function now actually says "upper", not
+"lower".
+
+=head3 L<Module::CoreList>
+
+L<Module::CoreList> has been updated to version 2.50_02 to add data for
+this release.
+
+=head1 Changes to Existing Documentation
+
+=head2 L<perlebcdic>
+
+The L<perlebcdic> document contains a helpful table to use in C<tr///> to
+convert between EBCDIC and Latin1/ASCII. Unfortunately, the table was the
+inverse of the one it describes. This has been corrected.
+
+=head2 L<perlunicode>
+
+The section on
+L<User-Defined Case Mappings|perlunicode/User-Defined Case Mappings> had
+some bad markup and unclear sentences, making parts of it unreadable. This
+has been rectified.
+
+=head2 L<perluniprops>
+
+This document has been corrected to take non-ASCII platforms into account.
+
+=head1 Installation and Configuration Improvements
+
+=head2 Platform Specific Changes
+
+=over 4
+
+=item Mac OS X
+
+There have been configuration and test fixes to make Perl build cleanly on
+Lion and Mountain Lion.
+
+=item NetBSD
+
+The NetBSD hints file was corrected to be compatible with NetBSD 6.*
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+C<chop> now correctly handles characters above "\x{7fffffff}"
+[perl #73246].
+
+=item *
+
+C<< ($<,$>) = (...) >> stopped working properly in 5.12.0. It is supposed
+to make a single C<setreuid()> call, rather than calling C<setruid()> and
+C<seteuid()> separately. Consequently it did not work properly. This has
+been fixed [perl #75212].
+
+=item *
+
+Fixed a regression of kill() when a match variable is used for the
+process ID to kill [perl #75812].
+
+=item *
+
+C<UNIVERSAL::VERSION> no longer leaks memory. It started leaking in Perl
+5.10.0.
+
+=item *
+
+The C-level C<my_strftime> functions no longer leaks memory. This fixes a
+memory leak in C<POSIX::strftime> [perl #73520].
+
+=item *
+
+C<caller> no longer leaks memory when called from the DB package if
+C<@DB::args> was assigned to after the first call to C<caller>. L<Carp>
+was triggering this bug [perl #97010].
+
+=item *
+
+Passing to C<index> an offset beyond the end of the string when the string
+is encoded internally in UTF8 no longer causes panics [perl #75898].
+
+=item *
+
+Syntax errors in C<< (?{...}) >> blocks in regular expressions no longer
+cause panic messages [perl #2353].
+
+=item *
+
+Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of
+a pack template equivalent to "U0" if the input string was empty. This has
+been fixed [perl #90160].
+
+=back
+
+=head1 Errata
+
+=head2 split() and C<@_>
+
+split() no longer modifies C<@_> when called in scalar or void context.
+In void context it now produces a "Useless use of split" warning.
+This is actually a change introduced in perl 5.12.0, but it was missed from
+that release's L<perl5120delta>.
+
+=head1 Acknowledgements
+
+Perl 5.12.5 represents approximately 17 months of development since Perl 5.12.4
+and contains approximately 1,900 lines of changes across 64 files from 18
+authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.12.5:
+
+Andy Dougherty, Chris 'BinGOs' Williams, Craig A. Berry, David Mitchell,
+Dominic Hargreaves, Father Chrysostomos, Florian Ragwitz, George Greer, Goro
+Fuji, Jesse Vincent, Karl Williamson, Leon Brocard, Nicholas Clark, Rafael
+Garcia-Suarez, Reini Urban, Ricardo Signes, Steve Hay, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://rt.perl.org/perlbug/ . There may also be
+information at http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the B<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please send
+it to perl5-security-report at perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who be able
+to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently
+distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5142delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5142delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5142delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,242 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5142delta - what is new for perl v5.14.2
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.14.1 release and
+the 5.14.2 release.
+
+If you are upgrading from an earlier release such as 5.14.0, first read
+L<perl5141delta>, which describes differences between 5.14.0 and
+5.14.1.
+
+=head1 Core Enhancements
+
+No changes since 5.14.0.
+
+=head1 Security
+
+=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728).
+
+Calling C<File::Glob::bsd_glob> with the unsupported flag GLOB_ALTDIRFUNC would
+cause an access violation / segfault. A Perl program that accepts a flags value from
+an external source could expose itself to denial of service or arbitrary code
+execution attacks. There are no known exploits in the wild. The problem has been
+corrected by explicitly disabling all unsupported flags and setting unused function
+pointers to null. Bug reported by Clément Lecigne.
+
+=head2 C<Encode> decode_xs n-byte heap-overflow (CVE-2011-2939)
+
+A bug in C<Encode> could, on certain inputs, cause the heap to overflow.
+This problem has been corrected. Bug reported by Robert Zacek.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.14.0. If any
+exist, they are bugs and reports are welcome.
+
+=head1 Deprecations
+
+There have been no deprecations since 5.14.0.
+
+=head1 Modules and Pragmata
+
+=head2 New Modules and Pragmata
+
+None
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<CPAN> has been upgraded from version 1.9600 to version 1.9600_01.
+
+L<CPAN::Distribution> has been upgraded from version 1.9602 to 1.9602_01.
+
+Backported bugfixes from CPAN version 1.9800. Ensures proper
+detection of C<configure_requires> prerequisites from CPAN Meta files
+in the case where C<dynamic_config> is true. [rt.cpan.org #68835]
+
+Also ensures that C<configure_requires> is only checked in META files,
+not MYMETA files, so protect against MYMETA generation that drops
+C<configure_requires>.
+
+=item *
+
+L<Encode> has been upgraded from version 2.42 to 2.42_01.
+
+See L</Security>.
+
+=item *
+
+L<File::Glob> has been upgraded from version 1.12 to version 1.13.
+
+See L</Security>.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded from version 0.11 to 0.11_01.
+
+It fixes a problem with C<< open my $fh, ">", \$scalar >> not working if
+C<$scalar> is a copy-on-write scalar.
+
+=back
+
+=head2 Removed Modules and Pragmata
+
+None
+
+=head1 Platform Support
+
+=head2 New Platforms
+
+None
+
+=head2 Discontinued Platforms
+
+None
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item HP-UX PA-RISC/64 now supports gcc-4.x
+
+A fix to correct the socketsize now makes the test suite pass on HP-UX
+PA-RISC for 64bitall builds.
+
+=item Building on OS X 10.7 Lion and Xcode 4 works again
+
+The build system has been updated to work with the build tools under Mac OS X
+10.7.
+
+=back
+
+=head1 Bug Fixes
+
+=over 4
+
+=item *
+
+In @INC filters (subroutines returned by subroutines in @INC), $_ used to
+misbehave: If returned from a subroutine, it would not be copied, but the
+variable itself would be returned; and freeing $_ (e.g., with C<undef *_>)
+would cause perl to crash. This has been fixed [perl #91880].
+
+=item *
+
+Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of
+a pack template equivalent to "U0" if the input string was empty. This has
+been fixed [perl #90160].
+
+=item *
+
+C<caller> no longer leaks memory when called from the DB package if
+C<@DB::args> was assigned to after the first call to C<caller>. L<Carp>
+was triggering this bug [perl #97010].
+
+=item *
+
+C<utf8::decode> had a nasty bug that would modify copy-on-write scalars'
+string buffers in place (i.e., skipping the copy). This could result in
+hashes having two elements with the same key [perl #91834].
+
+=item *
+
+Localising a tied variable used to make it read-only if it contained a
+copy-on-write string.
+
+=item *
+
+Elements of restricted hashes (see the L<fields> pragma) containing
+copy-on-write values couldn't be deleted, nor could such hashes be cleared
+(C<%hash = ()>).
+
+=item *
+
+Locking a hash element that is a glob copy no longer causes subsequent
+assignment to it to corrupt the glob.
+
+=item *
+
+A panic involving the combination of the regular expression modifiers
+C</aa> introduced in 5.14.0 and the C<\b> escape sequence has been
+fixed [perl #95964].
+
+=back
+
+=head1 Known Problems
+
+This is a list of some significant unfixed bugs, which are regressions
+from 5.12.0.
+
+=over 4
+
+=item *
+
+C<PERL_GLOBAL_STRUCT> is broken.
+
+Since perl 5.14.0, building with C<-DPERL_GLOBAL_STRUCT> hasn't been
+possible. This means that perl currently doesn't work on any platforms that
+require it to be built this way, including Symbian.
+
+While C<PERL_GLOBAL_STRUCT> now works again on recent development versions of
+perl, it actually working on Symbian again hasn't been verified.
+
+We'd be very interested in hearing from anyone working with Perl on Symbian.
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.14.2 represents approximately three months of development since
+Perl 5.14.1 and contains approximately 1200 lines of changes
+across 61 files from 9 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.14.2:
+
+Craig A. Berry, David Golden, Father Chrysostomos, Florian Ragwitz, H.Merijn
+Brand, Karl Williamson, Nicholas Clark, Pau Amma and Ricardo Signes.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://rt.perl.org/perlbug/ . There may also be
+information at http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please send
+it to perl5-security-report at perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who be able
+to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently
+distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5143delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5143delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5143delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,291 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5143delta - what is new for perl v5.14.3
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.14.2 release and
+the 5.14.3 release.
+
+If you are upgrading from an earlier release such as 5.12.0, first read
+L<perl5140delta>, which describes differences between 5.12.0 and
+5.14.0.
+
+=head1 Core Enhancements
+
+No changes since 5.14.0.
+
+=head1 Security
+
+=head2 C<Digest> unsafe use of eval (CVE-2011-3597)
+
+The C<Digest-E<gt>new()> function did not properly sanitize input before
+using it in an eval() call, which could lead to the injection of arbitrary
+Perl code.
+
+In order to exploit this flaw, the attacker would need to be able to set
+the algorithm name used, or be able to execute arbitrary Perl code already.
+
+This problem has been fixed.
+
+=head2 Heap buffer overrun in 'x' string repeat operator (CVE-2012-5195)
+
+Poorly written perl code that allows an attacker to specify the count to
+perl's 'x' string repeat operator can already cause a memory exhaustion
+denial-of-service attack. A flaw in versions of perl before 5.15.5 can
+escalate that into a heap buffer overrun; coupled with versions of glibc
+before 2.16, it possibly allows the execution of arbitrary code.
+
+This problem has been fixed.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.14.0. If any
+exist, they are bugs and reports are welcome.
+
+=head1 Deprecations
+
+There have been no deprecations since 5.14.0.
+
+=head1 Modules and Pragmata
+
+=head2 New Modules and Pragmata
+
+None
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<PerlIO::scalar> was updated to fix a bug in which opening a filehandle to
+a glob copy caused assertion failures (under debugging) or hangs or other
+erratic behaviour without debugging.
+
+=item *
+
+L<ODBM_File> and L<NDBM_File> were updated to allow building on GNU/Hurd.
+
+=item *
+
+L<IPC::Open3> has been updated to fix a regression introduced in perl
+5.12, which broke C<IPC::Open3::open3($in, $out, $err, '-')>.
+[perl #95748]
+
+=item *
+
+L<Digest> has been upgraded from version 1.16 to 1.16_01.
+
+See L</Security>.
+
+=item *
+
+L<Module::CoreList> has been updated to version 2.49_04 to add data for
+this release.
+
+=back
+
+=head2 Removed Modules and Pragmata
+
+None
+
+=head1 Documentation
+
+=head2 New Documentation
+
+None
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perlcheat>
+
+=over 4
+
+=item *
+
+L<perlcheat> was updated to 5.14.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+h2ph was updated to search correctly gcc include directories on platforms
+such as Debian with multi-architecture support.
+
+=item *
+
+In Configure, the test for procselfexe was refactored into a loop.
+
+=back
+
+=head1 Platform Support
+
+=head2 New Platforms
+
+None
+
+=head2 Discontinued Platforms
+
+None
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item FreeBSD
+
+The FreeBSD hints file was corrected to be compatible with FreeBSD 10.0.
+
+=item Solaris and NetBSD
+
+Configure was updated for "procselfexe" support on Solaris and NetBSD.
+
+=item HP-UX
+
+README.hpux was updated to note the existence of a broken header in
+HP-UX 11.00.
+
+=item Linux
+
+libutil is no longer used when compiling on Linux platforms, which avoids
+warnings being emitted.
+
+The system gcc (rather than any other gcc which might be in the compiling
+user's path) is now used when searching for libraries such as C<-lm>.
+
+=item Mac OS X
+
+The locale tests were updated to reflect the behaviour of locales in
+Mountain Lion.
+
+=item GNU/Hurd
+
+Various build and test fixes were included for GNU/Hurd.
+
+LFS support was enabled in GNU/Hurd.
+
+=item NetBSD
+
+The NetBSD hints file was corrected to be compatible with NetBSD 6.*
+
+=back
+
+=head1 Bug Fixes
+
+=over 4
+
+=item *
+
+A regression has been fixed that was introduced in 5.14, in C</i>
+regular expression matching, in which a match improperly fails if the
+pattern is in UTF-8, the target string is not, and a Latin-1 character
+precedes a character in the string that should match the pattern. [perl
+#101710]
+
+=item *
+
+In case-insensitive regular expression pattern matching, no longer on
+UTF-8 encoded strings does the scan for the start of match only look at
+the first possible position. This caused matches such as
+C<"f\x{FB00}" =~ /ff/i> to fail.
+
+=item *
+
+The sitecustomize support was made relocatableinc aware, so that
+-Dusesitecustomize and -Duserelocatableinc may be used together.
+
+=item *
+
+The smartmatch operator (C<~~>) was changed so that the right-hand side
+takes precedence during C<Any ~~ Object> operations.
+
+=item *
+
+A bug has been fixed in the tainting support, in which an C<index()>
+operation on a tainted constant would cause all other constants to become
+tainted. [perl #64804]
+
+=item *
+
+A regression has been fixed that was introduced in perl 5.12, whereby
+tainting errors were not correctly propagated through C<die()>.
+[perl #111654]
+
+=item *
+
+A regression has been fixed that was introduced in perl 5.14, in which
+C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the opposite case.
+[perl #101970]
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.14.3 represents approximately 12 months of development since Perl 5.14.2
+and contains approximately 2,300 lines of changes across 64 files from 22
+authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.14.3:
+
+Abigail, Andy Dougherty, Carl Hayter, Chris 'BinGOs' Williams, Dave Rolsky,
+David Mitchell, Dominic Hargreaves, Father Chrysostomos, Florian Ragwitz,
+H.Merijn Brand, Jilles Tjoelker, Karl Williamson, Leon Timmermans, Michael G
+Schwern, Nicholas Clark, Niko Tyni, Pino Toscano, Ricardo Signes, Salvador
+Fandiño, Samuel Thibault, Steve Hay, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://rt.perl.org/perlbug/ . There may also be
+information at http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please send
+it to perl5-security-report at perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who be able
+to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently
+distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5144delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5144delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5144delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,240 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5144delta - what is new for perl v5.14.4
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.14.3 release and
+the 5.14.4 release.
+
+If you are upgrading from an earlier release such as 5.12.0, first read
+L<perl5140delta>, which describes differences between 5.12.0 and
+5.14.0.
+
+=head1 Core Enhancements
+
+No changes since 5.14.0.
+
+=head1 Security
+
+This release contains one major, and medium, and a number of minor
+security fixes. The latter are included mainly to allow the test suite to
+pass cleanly with the clang compiler's address sanitizer facility.
+
+=head2 CVE-2013-1667: memory exhaustion with arbitrary hash keys
+
+With a carefully crafted set of hash keys (for example arguments on a
+URL), it is possible to cause a hash to consume a large amount of memory
+and CPU, and thus possibly to achieve a Denial-of-Service.
+
+This problem has been fixed.
+
+=head2 memory leak in Encode
+
+The UTF-8 encoding implementation in Encode.xs had a memory leak which has been
+fixed.
+
+=head2 [perl #111594] Socket::unpack_sockaddr_un heap-buffer-overflow
+
+A read buffer overflow could occur when copying C<sockaddr> buffers.
+Fairly harmless.
+
+This problem has been fixed.
+
+=head2 [perl #111586] SDBM_File: fix off-by-one access to global ".dir"
+
+An extra byte was being copied for some string literals. Fairly harmless.
+
+This problem has been fixed.
+
+=head2 off-by-two error in List::Util
+
+A string literal was being used that included two bytes beyond the
+end of the string. Fairly harmless.
+
+This problem has been fixed.
+
+=head2 [perl #115994] fix segv in regcomp.c:S_join_exact()
+
+Under debugging builds, while marking optimised-out regex nodes as type
+C<OPTIMIZED>, it could treat blocks of exact text as if they were nodes,
+and thus SEGV. Fairly harmless.
+
+This problem has been fixed.
+
+=head2 [perl #115992] PL_eval_start use-after-free
+
+The statement C<local $[;>, when preceded by an C<eval>, and when not part
+of an assignment, could crash. Fairly harmless.
+
+This problem has been fixed.
+
+=head2 wrap-around with IO on long strings
+
+Reading or writing strings greater than 2**31 bytes in size could segfault
+due to integer wraparound.
+
+This problem has been fixed.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.14.0. If any
+exist, they are bugs and reports are welcome.
+
+=head1 Deprecations
+
+There have been no deprecations since 5.14.0.
+
+=head1 Modules and Pragmata
+
+=head2 New Modules and Pragmata
+
+None
+
+=head2 Updated Modules and Pragmata
+
+The following modules have just the minor code fixes as listed above in
+L</Security> (version numbers have not changed):
+
+=over 4
+
+=item Socket
+
+=item SDBM_File
+
+=item List::Util
+
+=back
+
+L<Encode> has been upgraded from version 2.42_01 to version 2.42_02.
+
+L<Module::CoreList> has been updated to version 2.49_06 to add data for
+this release.
+
+=head2 Removed Modules and Pragmata
+
+None.
+
+=head1 Documentation
+
+=head2 New Documentation
+
+None.
+
+=head2 Changes to Existing Documentation
+
+None.
+
+=head1 Diagnostics
+
+No new or changed diagnostics.
+
+=head1 Utility Changes
+
+None
+
+=head1 Configuration and Compilation
+
+No changes.
+
+=head1 Platform Support
+
+=head2 New Platforms
+
+None.
+
+=head2 Discontinued Platforms
+
+None.
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item VMS
+
+5.14.3 failed to compile on VMS due to incomplete application of a patch
+series that allowed C<userelocatableinc> and C<usesitecustomize> to be
+used simultaneously. Other platforms were not affected and the problem
+has now been corrected.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+In Perl 5.14.0, C<$tainted ~~ @array> stopped working properly. Sometimes
+it would erroneously fail (when C<$tainted> contained a string that occurs
+in the array I<after> the first element) or erroneously succeed (when
+C<undef> occurred after the first element) [perl #93590].
+
+=back
+
+=head1 Known Problems
+
+None.
+
+=head1 Acknowledgements
+
+Perl 5.14.4 represents approximately 5 months of development since Perl 5.14.3
+and contains approximately 1,700 lines of changes across 49 files from 12
+authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.14.4:
+
+Andy Dougherty, Chris 'BinGOs' Williams, Christian Hansen, Craig A. Berry,
+Dave Rolsky, David Mitchell, Dominic Hargreaves, Father Chrysostomos,
+Florian Ragwitz, Reini Urban, Ricardo Signes, Yves Orton.
+
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://rt.perl.org/perlbug/ . There may also be
+information at http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please send
+it to perl5-security-report at perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who be able
+to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently
+distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5160delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5160delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5160delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,4314 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5160delta - what is new for perl v5.16.0
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.14.0 release and
+the 5.16.0 release.
+
+If you are upgrading from an earlier release such as 5.12.0, first read
+L<perl5140delta>, which describes differences between 5.12.0 and
+5.14.0.
+
+Some bug fixes in this release have been backported to later
+releases of 5.14.x. Those are indicated with the 5.14.x version in
+parentheses.
+
+=head1 Notice
+
+With the release of Perl 5.16.0, the 5.12.x series of releases is now out of
+its support period. There may be future 5.12.x releases, but only in the
+event of a critical security issue. Users of Perl 5.12 or earlier should
+consider upgrading to a more recent release of Perl.
+
+This policy is described in greater detail in
+L<perlpolicy|perlpolicy/MAINTENANCE AND SUPPORT>.
+
+=head1 Core Enhancements
+
+=head2 C<use I<VERSION>>
+
+As of this release, version declarations like C<use v5.16> now disable
+all features before enabling the new feature bundle. This means that
+the following holds true:
+
+ use 5.016;
+ # only 5.16 features enabled here
+ use 5.014;
+ # only 5.14 features enabled here (not 5.16)
+
+C<use v5.12> and higher continue to enable strict, but explicit C<use
+strict> and C<no strict> now override the version declaration, even
+when they come first:
+
+ no strict;
+ use 5.012;
+ # no strict here
+
+There is a new ":default" feature bundle that represents the set of
+features enabled before any version declaration or C<use feature> has
+been seen. Version declarations below 5.10 now enable the ":default"
+feature set. This does not actually change the behavior of C<use
+v5.8>, because features added to the ":default" set are those that were
+traditionally enabled by default, before they could be turned off.
+
+C<< no feature >> now resets to the default feature set. To disable all
+features (which is likely to be a pretty special-purpose request, since
+it presumably won't match any named set of semantics) you can now
+write C<< no feature ':all' >>.
+
+C<$[> is now disabled under C<use v5.16>. It is part of the default
+feature set and can be turned on or off explicitly with C<use feature
+'array_base'>.
+
+=head2 C<__SUB__>
+
+The new C<__SUB__> token, available under the C<current_sub> feature
+(see L<feature>) or C<use v5.16>, returns a reference to the current
+subroutine, making it easier to write recursive closures.
+
+=head2 New and Improved Built-ins
+
+=head3 More consistent C<eval>
+
+The C<eval> operator sometimes treats a string argument as a sequence of
+characters and sometimes as a sequence of bytes, depending on the
+internal encoding. The internal encoding is not supposed to make any
+difference, but there is code that relies on this inconsistency.
+
+The new C<unicode_eval> and C<evalbytes> features (enabled under C<use
+5.16.0>) resolve this. The C<unicode_eval> feature causes C<eval
+$string> to treat the string always as Unicode. The C<evalbytes>
+features provides a function, itself called C<evalbytes>, which
+evaluates its argument always as a string of bytes.
+
+These features also fix oddities with source filters leaking to outer
+dynamic scopes.
+
+See L<feature> for more detail.
+
+=head3 C<substr> lvalue revamp
+
+=for comment Does this belong here, or under Incompatible Changes?
+
+When C<substr> is called in lvalue or potential lvalue context with two
+or three arguments, a special lvalue scalar is returned that modifies
+the original string (the first argument) when assigned to.
+
+Previously, the offsets (the second and third arguments) passed to
+C<substr> would be converted immediately to match the string, negative
+offsets being translated to positive and offsets beyond the end of the
+string being truncated.
+
+Now, the offsets are recorded without modification in the special
+lvalue scalar that is returned, and the original string is not even
+looked at by C<substr> itself, but only when the returned lvalue is
+read or modified.
+
+These changes result in an incompatible change:
+
+If the original string changes length after the call to C<substr> but
+before assignment to its return value, negative offsets will remember
+their position from the end of the string, affecting code like this:
+
+ my $string = "string";
+ my $lvalue = \substr $string, -4, 2;
+ print $$lvalue, "\n"; # prints "ri"
+ $string = "bailing twine";
+ print $$lvalue, "\n"; # prints "wi"; used to print "il"
+
+The same thing happens with an omitted third argument. The returned
+lvalue will always extend to the end of the string, even if the string
+becomes longer.
+
+Since this change also allowed many bugs to be fixed (see
+L</The C<substr> operator>), and since the behavior
+of negative offsets has never been specified, the
+change was deemed acceptable.
+
+=head3 Return value of C<tied>
+
+The value returned by C<tied> on a tied variable is now the actual
+scalar that holds the object to which the variable is tied. This
+lets ties be weakened with C<Scalar::Util::weaken(tied
+$tied_variable)>.
+
+=head2 Unicode Support
+
+=head3 Supports (I<almost>) Unicode 6.1
+
+Besides the addition of whole new scripts, and new characters in
+existing scripts, this new version of Unicode, as always, makes some
+changes to existing characters. One change that may trip up some
+applications is that the General Category of two characters in the
+Latin-1 range, PILCROW SIGN and SECTION SIGN, has been changed from
+Other_Symbol to Other_Punctuation. The same change has been made for
+a character in each of Tibetan, Ethiopic, and Aegean.
+The code points U+3248..U+324F (CIRCLED NUMBER TEN ON BLACK SQUARE
+through CIRCLED NUMBER EIGHTY ON BLACK SQUARE) have had their General
+Category changed from Other_Symbol to Other_Numeric. The Line Break
+property has changes for Hebrew and Japanese; and because of
+other changes in 6.1, the Perl regular expression construct C<\X> now
+works differently for some characters in Thai and Lao.
+
+New aliases (synonyms) have been defined for many property values;
+these, along with the previously existing ones, are all cross-indexed in
+L<perluniprops>.
+
+The return value of C<charnames::viacode()> is affected by other
+changes:
+
+ Code point Old Name New Name
+ U+000A LINE FEED (LF) LINE FEED
+ U+000C FORM FEED (FF) FORM FEED
+ U+000D CARRIAGE RETURN (CR) CARRIAGE RETURN
+ U+0085 NEXT LINE (NEL) NEXT LINE
+ U+008E SINGLE-SHIFT 2 SINGLE-SHIFT-2
+ U+008F SINGLE-SHIFT 3 SINGLE-SHIFT-3
+ U+0091 PRIVATE USE 1 PRIVATE USE-1
+ U+0092 PRIVATE USE 2 PRIVATE USE-2
+ U+2118 SCRIPT CAPITAL P WEIERSTRASS ELLIPTIC FUNCTION
+
+Perl will accept any of these names as input, but
+C<charnames::viacode()> now returns the new name of each pair. The
+change for U+2118 is considered by Unicode to be a correction, that is
+the original name was a mistake (but again, it will remain forever valid
+to use it to refer to U+2118). But most of these changes are the
+fallout of the mistake Unicode 6.0 made in naming a character used in
+Japanese cell phones to be "BELL", which conflicts with the longstanding
+industry use of (and Unicode's recommendation to use) that name
+to mean the ASCII control character at U+0007. Therefore, that name
+has been deprecated in Perl since v5.14, and any use of it will raise a
+warning message (unless turned off). The name "ALERT" is now the
+preferred name for this code point, with "BEL" an acceptable short
+form. The name for the new cell phone character, at code point U+1F514,
+remains undefined in this version of Perl (hence we don't
+implement quite all of Unicode 6.1), but starting in v5.18, BELL will mean
+this character, and not U+0007.
+
+Unicode has taken steps to make sure that this sort of mistake does not
+happen again. The Standard now includes all generally accepted
+names and abbreviations for control characters, whereas previously it
+didn't (though there were recommended names for most of them, which Perl
+used). This means that most of those recommended names are now
+officially in the Standard. Unicode did not recommend names for the
+four code points listed above between U+008E and U+008F, and in
+standardizing them Unicode subtly changed the names that Perl had
+previously given them, by replacing the final blank in each name by a
+hyphen. Unicode also officially accepts names that Perl had deprecated,
+such as FILE SEPARATOR. Now the only deprecated name is BELL.
+Finally, Perl now uses the new official names instead of the old
+(now considered obsolete) names for the first four code points in the
+list above (the ones which have the parentheses in them).
+
+Now that the names have been placed in the Unicode standard, these kinds
+of changes should not happen again, though corrections, such as to
+U+2118, are still possible.
+
+Unicode also added some name abbreviations, which Perl now accepts:
+SP for SPACE;
+TAB for CHARACTER TABULATION;
+NEW LINE, END OF LINE, NL, and EOL for LINE FEED;
+LOCKING-SHIFT ONE for SHIFT OUT;
+LOCKING-SHIFT ZERO for SHIFT IN;
+and ZWNBSP for ZERO WIDTH NO-BREAK SPACE.
+
+More details on this version of Unicode are provided in
+L<http://www.unicode.org/versions/Unicode6.1.0/>.
+
+=head3 C<use charnames> is no longer needed for C<\N{I<name>}>
+
+When C<\N{I<name>}> is encountered, the C<charnames> module is now
+automatically loaded when needed as if the C<:full> and C<:short>
+options had been specified. See L<charnames> for more information.
+
+=head3 C<\N{...}> can now have Unicode loose name matching
+
+This is described in the C<charnames> item in
+L</Updated Modules and Pragmata> below.
+
+=head3 Unicode Symbol Names
+
+Perl now has proper support for Unicode in symbol names. It used to be
+that C<*{$foo}> would ignore the internal UTF8 flag and use the bytes of
+the underlying representation to look up the symbol. That meant that
+C<*{"\x{100}"}> and C<*{"\xc4\x80"}> would return the same thing. All
+these parts of Perl have been fixed to account for Unicode:
+
+=over
+
+=item *
+
+Method names (including those passed to C<use overload>)
+
+=item *
+
+Typeglob names (including names of variables, subroutines, and filehandles)
+
+=item *
+
+Package names
+
+=item *
+
+C<goto>
+
+=item *
+
+Symbolic dereferencing
+
+=item *
+
+Second argument to C<bless()> and C<tie()>
+
+=item *
+
+Return value of C<ref()>
+
+=item *
+
+Subroutine prototypes
+
+=item *
+
+Attributes
+
+=item *
+
+Various warnings and error messages that mention variable names or values,
+methods, etc.
+
+=back
+
+In addition, a parsing bug has been fixed that prevented C<*{é}> from
+implicitly quoting the name, but instead interpreted it as C<*{+é}>, which
+would cause a strict violation.
+
+C<*{"*a::b"}> automatically strips off the * if it is followed by an ASCII
+letter. That has been extended to all Unicode identifier characters.
+
+One-character non-ASCII non-punctuation variables (like C<$é>) are now
+subject to "Used only once" warnings. They used to be exempt, as they
+were treated as punctuation variables.
+
+Also, single-character Unicode punctuation variables (like C<$‰>) are now
+supported [perl #69032].
+
+=head3 Improved ability to mix locales and Unicode, including UTF-8 locales
+
+An optional parameter has been added to C<use locale>
+
+ use locale ':not_characters';
+
+which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE>
+portions of the current locale. Instead, the character set is assumed
+to be Unicode. This lets locales and Unicode be seamlessly mixed,
+including the increasingly frequent UTF-8 locales. When using this
+hybrid form of locales, the C<:locale> layer to the L<open> pragma can
+be used to interface with the file system, and there are CPAN modules
+available for ARGV and environment variable conversions.
+
+Full details are in L<perllocale>.
+
+=head3 New function C<fc> and corresponding escape sequence C<\F> for Unicode foldcase
+
+Unicode foldcase is an extension to lowercase that gives better results
+when comparing two strings case-insensitively. It has long been used
+internally in regular expression C</i> matching. Now it is available
+explicitly through the new C<fc> function call (enabled by
+S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via
+C<CORE::fc>) or through the new C<\F> sequence in double-quotish
+strings.
+
+Full details are in L<perlfunc/fc>.
+
+=head3 The Unicode C<Script_Extensions> property is now supported.
+
+New in Unicode 6.0, this is an improved C<Script> property. Details
+are in L<perlunicode/Scripts>.
+
+=head2 XS Changes
+
+=head3 Improved typemaps for Some Builtin Types
+
+Most XS authors will know there is a longstanding bug in the
+OUTPUT typemap for T_AVREF (C<AV*>), T_HVREF (C<HV*>), T_CVREF (C<CV*>),
+and T_SVREF (C<SVREF> or C<\$foo>) that requires manually decrementing
+the reference count of the return value instead of the typemap taking
+care of this. For backwards-compatibility, this cannot be changed in the
+default typemaps. But we now provide additional typemaps
+C<T_AVREF_REFCOUNT_FIXED>, etc. that do not exhibit this bug. Using
+them in your extension is as simple as having one line in your
+C<TYPEMAP> section:
+
+ HV* T_HVREF_REFCOUNT_FIXED
+
+=head3 C<is_utf8_char()>
+
+The XS-callable function C<is_utf8_char()>, when presented with
+malformed UTF-8 input, can read up to 12 bytes beyond the end of the
+string. This cannot be fixed without changing its API, and so its
+use is now deprecated. Use C<is_utf8_char_buf()> (described just below)
+instead.
+
+=head3 Added C<is_utf8_char_buf()>
+
+This function is designed to replace the deprecated L</is_utf8_char()>
+function. It includes an extra parameter to make sure it doesn't read
+past the end of the input buffer.
+
+=head3 Other C<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, etc.
+
+Most other XS-callable functions that take UTF-8 encoded input
+implicitly assume that the UTF-8 is valid (not malformed) with respect to
+buffer length. Do not do things such as change a character's case or
+see if it is alphanumeric without first being sure that it is valid
+UTF-8. This can be safely done for a whole string by using one of the
+functions C<is_utf8_string()>, C<is_utf8_string_loc()>, and
+C<is_utf8_string_loclen()>.
+
+=head3 New Pad API
+
+Many new functions have been added to the API for manipulating lexical
+pads. See L<perlapi/Pad Data Structures> for more information.
+
+=head2 Changes to Special Variables
+
+=head3 C<$$> can be assigned to
+
+C<$$> was made read-only in Perl 5.8.0. But only sometimes: C<local $$>
+would make it writable again. Some CPAN modules were using C<local $$> or
+XS code to bypass the read-only check, so there is no reason to keep C<$$>
+read-only. (This change also allowed a bug to be fixed while maintaining
+backward compatibility.)
+
+=head3 C<$^X> converted to an absolute path on FreeBSD, OS X and Solaris
+
+C<$^X> is now converted to an absolute path on OS X, FreeBSD (without
+needing F</proc> mounted) and Solaris 10 and 11. This augments the
+previous approach of using F</proc> on Linux, FreeBSD, and NetBSD
+(in all cases, where mounted).
+
+This makes relocatable perl installations more useful on these platforms.
+(See "Relocatable @INC" in F<INSTALL>)
+
+=head2 Debugger Changes
+
+=head3 Features inside the debugger
+
+The current Perl's L<feature> bundle is now enabled for commands entered
+in the interactive debugger.
+
+=head3 New option for the debugger's B<t> command
+
+The B<t> command in the debugger, which toggles tracing mode, now
+accepts a numeric argument that determines how many levels of subroutine
+calls to trace.
+
+=head3 C<enable> and C<disable>
+
+The debugger now has C<disable> and C<enable> commands for disabling
+existing breakpoints and re-enabling them. See L<perldebug>.
+
+=head3 Breakpoints with file names
+
+The debugger's "b" command for setting breakpoints now lets a line
+number be prefixed with a file name. See
+L<perldebug/"b [file]:[line] [condition]">.
+
+=head2 The C<CORE> Namespace
+
+=head3 The C<CORE::> prefix
+
+The C<CORE::> prefix can now be used on keywords enabled by
+L<feature.pm|feature>, even outside the scope of C<use feature>.
+
+=head3 Subroutines in the C<CORE> namespace
+
+Many Perl keywords are now available as subroutines in the CORE namespace.
+This lets them be aliased:
+
+ BEGIN { *entangle = \&CORE::tie }
+ entangle $variable, $package, @args;
+
+And for prototypes to be bypassed:
+
+ sub mytie(\[%$*@]$@) {
+ my ($ref, $pack, @args) = @_;
+ ... do something ...
+ goto &CORE::tie;
+ }
+
+Some of these cannot be called through references or via C<&foo> syntax,
+but must be called as barewords.
+
+See L<CORE> for details.
+
+=head2 Other Changes
+
+=head3 Anonymous handles
+
+Automatically generated file handles are now named __ANONIO__ when the
+variable name cannot be determined, rather than $__ANONIO__.
+
+=head3 Autoloaded sort Subroutines
+
+Custom sort subroutines can now be autoloaded [perl #30661]:
+
+ sub AUTOLOAD { ... }
+ @sorted = sort foo @list; # uses AUTOLOAD
+
+=head3 C<continue> no longer requires the "switch" feature
+
+The C<continue> keyword has two meanings. It can introduce a C<continue>
+block after a loop, or it can exit the current C<when> block. Up to now,
+the latter meaning was valid only with the "switch" feature enabled, and
+was a syntax error otherwise. Since the main purpose of feature.pm is to
+avoid conflicts with user-defined subroutines, there is no reason for
+C<continue> to depend on it.
+
+=head3 DTrace probes for interpreter phase change
+
+The C<phase-change> probes will fire when the interpreter's phase
+changes, which tracks the C<${^GLOBAL_PHASE}> variable. C<arg0> is
+the new phase name; C<arg1> is the old one. This is useful
+for limiting your instrumentation to one or more of: compile time,
+run time, or destruct time.
+
+=head3 C<__FILE__()> Syntax
+
+The C<__FILE__>, C<__LINE__> and C<__PACKAGE__> tokens can now be written
+with an empty pair of parentheses after them. This makes them parse the
+same way as C<time>, C<fork> and other built-in functions.
+
+=head3 The C<\$> prototype accepts any scalar lvalue
+
+The C<\$> and C<\[$]> subroutine prototypes now accept any scalar lvalue
+argument. Previously they accepted only scalars beginning with C<$> and
+hash and array elements. This change makes them consistent with the way
+the built-in C<read> and C<recv> functions (among others) parse their
+arguments. This means that one can override the built-in functions with
+custom subroutines that parse their arguments the same way.
+
+=head3 C<_> in subroutine prototypes
+
+The C<_> character in subroutine prototypes is now allowed before C<@> or
+C<%>.
+
+=head1 Security
+
+=head2 Use C<is_utf8_char_buf()> and not C<is_utf8_char()>
+
+The latter function is now deprecated because its API is insufficient to
+guarantee that it doesn't read (up to 12 bytes in the worst case) beyond
+the end of its input string. See
+L<is_utf8_char_buf()|/Added is_utf8_char_buf()>.
+
+=head2 Malformed UTF-8 input could cause attempts to read beyond the end of the buffer
+
+Two new XS-accessible functions, C<utf8_to_uvchr_buf()> and
+C<utf8_to_uvuni_buf()> are now available to prevent this, and the Perl
+core has been converted to use them.
+See L</Internal Changes>.
+
+=head2 C<File::Glob::bsd_glob()> memory error with GLOB_ALTDIRFUNC (CVE-2011-2728).
+
+Calling C<File::Glob::bsd_glob> with the unsupported flag
+GLOB_ALTDIRFUNC would cause an access violation / segfault. A Perl
+program that accepts a flags value from an external source could expose
+itself to denial of service or arbitrary code execution attacks. There
+are no known exploits in the wild. The problem has been corrected by
+explicitly disabling all unsupported flags and setting unused function
+pointers to null. Bug reported by Clément Lecigne. (5.14.2)
+
+=head2 Privileges are now set correctly when assigning to C<$(>
+
+A hypothetical bug (probably unexploitable in practice) because the
+incorrect setting of the effective group ID while setting C<$(> has been
+fixed. The bug would have affected only systems that have C<setresgid()>
+but not C<setregid()>, but no such systems are known to exist.
+
+=head1 Deprecations
+
+=head2 Don't read the Unicode data base files in F<lib/unicore>
+
+It is now deprecated to directly read the Unicode data base files.
+These are stored in the F<lib/unicore> directory. Instead, you should
+use the new functions in L<Unicode::UCD>. These provide a stable API,
+and give complete information.
+
+Perl may at some point in the future change or remove these files. The
+file which applications were most likely to have used is
+F<lib/unicore/ToDigit.pl>. L<Unicode::UCD/prop_invmap()> can be used to
+get at its data instead.
+
+=head2 XS functions C<is_utf8_char()>, C<utf8_to_uvchr()> and
+C<utf8_to_uvuni()>
+
+This function is deprecated because it could read beyond the end of the
+input string. Use the new L<is_utf8_char_buf()|/Added is_utf8_char_buf()>,
+C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> instead.
+
+=head1 Future Deprecations
+
+This section serves as a notice of features that are I<likely> to be
+removed or L<deprecated|perlpolicy/deprecated> in the next release of
+perl (5.18.0). If your code depends on these features, you should
+contact the Perl 5 Porters via the L<mailing
+list|http://lists.perl.org/list/perl5-porters.html> or L<perlbug> to
+explain your use case and inform the deprecation process.
+
+=head2 Core Modules
+
+These modules may be marked as deprecated I<from the core>. This only
+means that they will no longer be installed by default with the core
+distribution, but will remain available on the CPAN.
+
+=over
+
+=item *
+
+CPANPLUS
+
+=item *
+
+Filter::Simple
+
+=item *
+
+PerlIO::mmap
+
+=item *
+
+Pod::LaTeX
+
+=item *
+
+Pod::Parser
+
+=item *
+
+SelfLoader
+
+=item *
+
+Text::Soundex
+
+=item *
+
+Thread.pm
+
+=back
+
+=head2 Platforms with no supporting programmers
+
+These platforms will probably have their
+special build support removed during the
+5.17.0 development series.
+
+=over
+
+=item *
+
+BeOS
+
+=item *
+
+djgpp
+
+=item *
+
+dgux
+
+=item *
+
+EPOC
+
+=item *
+
+MPE/iX
+
+=item *
+
+Rhapsody
+
+=item *
+
+UTS
+
+=item *
+
+VM/ESA
+
+=back
+
+=head2 Other Future Deprecations
+
+=over
+
+=item *
+
+Swapping of $< and $>
+
+For more information about this future deprecation, see L<the relevant RT
+ticket|https://rt.perl.org/rt3/Ticket/Display.html?id=96212>.
+
+=item *
+
+sfio, stdio
+
+Perl supports being built without PerlIO proper, using a stdio or sfio
+wrapper instead. A perl build like this will not support IO layers and
+thus Unicode IO, making it rather handicapped.
+
+PerlIO supports a C<stdio> layer if stdio use is desired, and similarly a
+sfio layer could be produced.
+
+=item *
+
+Unescaped literal C<< "{" >> in regular expressions.
+
+Starting with v5.20, it is planned to require a literal C<"{"> to be
+escaped, for example by preceding it with a backslash. In v5.18, a
+deprecated warning message will be emitted for all such uses.
+This affects only patterns that are to match a literal C<"{">. Other
+uses of this character, such as part of a quantifier or sequence as in
+those below, are completely unaffected:
+
+ /foo{3,5}/
+ /\p{Alphabetic}/
+ /\N{DIGIT ZERO}
+
+Removing this will permit extensions to Perl's pattern syntax and better
+error checking for existing syntax. See L<perlre/Quantifiers> for an
+example.
+
+=item *
+
+Revamping C<< "\Q" >> semantics in double-quotish strings when combined with other escapes.
+
+There are several bugs and inconsistencies involving combinations
+of C<\Q> and escapes like C<\x>, C<\L>, etc., within a C<\Q...\E> pair.
+These need to be fixed, and doing so will necessarily change current
+behavior. The changes have not yet been settled.
+
+=back
+
+=head1 Incompatible Changes
+
+=head2 Special blocks called in void context
+
+Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now
+called in void context. This avoids wasteful copying of the result of the
+last statement [perl #108794].
+
+=head2 The C<overloading> pragma and regexp objects
+
+With C<no overloading>, regular expression objects returned by C<qr//> are
+now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular
+expression itself [perl #108780].
+
+=head2 Two XS typemap Entries removed
+
+Two presumably unused XS typemap entries have been removed from the
+core typemap: T_DATAUNIT and T_CALLBACK. If you are, against all odds,
+a user of these, please see the instructions on how to restore them
+in L<perlxstypemap>.
+
+=head2 Unicode 6.1 has incompatibilities with Unicode 6.0
+
+These are detailed in L</Supports (almost) Unicode 6.1> above.
+You can compile this version of Perl to use Unicode 6.0. See
+L<perlunicode/Hacking Perl to work on earlier Unicode versions (for very serious hackers only)>.
+
+=head2 Borland compiler
+
+All support for the Borland compiler has been dropped. The code had not
+worked for a long time anyway.
+
+=head2 Certain deprecated Unicode properties are no longer supported by default
+
+Perl should never have exposed certain Unicode properties that are used
+by Unicode internally and not meant to be publicly available. Use of
+these has generated deprecated warning messages since Perl 5.12. The
+removed properties are Other_Alphabetic,
+Other_Default_Ignorable_Code_Point, Other_Grapheme_Extend,
+Other_ID_Continue, Other_ID_Start, Other_Lowercase, Other_Math, and
+Other_Uppercase.
+
+Perl may be recompiled to include any or all of them; instructions are
+given in
+L<perluniprops/Unicode character properties that are NOT accepted by Perl>.
+
+=head2 Dereferencing IO thingies as typeglobs
+
+The C<*{...}> operator, when passed a reference to an IO thingy (as in
+C<*{*STDIN{IO}}>), creates a new typeglob containing just that IO object.
+Previously, it would stringify as an empty string, but some operators would
+treat it as undefined, producing an "uninitialized" warning.
+Now it stringifies as __ANONIO__ [perl #96326].
+
+=head2 User-defined case-changing operations
+
+This feature was deprecated in Perl 5.14, and has now been removed.
+The CPAN module L<Unicode::Casing> provides better functionality without
+the drawbacks that this feature had, as are detailed in the 5.14
+documentation:
+L<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29>
+
+=head2 XSUBs are now 'static'
+
+XSUB C functions are now 'static', that is, they are not visible from
+outside the compilation unit. Users can use the new C<XS_EXTERNAL(name)>
+and C<XS_INTERNAL(name)> macros to pick the desired linking behavior.
+The ordinary C<XS(name)> declaration for XSUBs will continue to declare
+non-'static' XSUBs for compatibility, but the XS compiler,
+L<ExtUtils::ParseXS> (C<xsubpp>) will emit 'static' XSUBs by default.
+L<ExtUtils::ParseXS>'s behavior can be reconfigured from XS using the
+C<EXPORT_XSUB_SYMBOLS> keyword. See L<perlxs> for details.
+
+=head2 Weakening read-only references
+
+Weakening read-only references is no longer permitted. It should never
+have worked anyway, and could sometimes result in crashes.
+
+=head2 Tying scalars that hold typeglobs
+
+Attempting to tie a scalar after a typeglob was assigned to it would
+instead tie the handle in the typeglob's IO slot. This meant that it was
+impossible to tie the scalar itself. Similar problems affected C<tied> and
+C<untie>: C<tied $scalar> would return false on a tied scalar if the last
+thing returned was a typeglob, and C<untie $scalar> on such a tied scalar
+would do nothing.
+
+We fixed this problem before Perl 5.14.0, but it caused problems with some
+CPAN modules, so we put in a deprecation cycle instead.
+
+Now the deprecation has been removed and this bug has been fixed. So
+C<tie $scalar> will always tie the scalar, not the handle it holds. To tie
+the handle, use C<tie *$scalar> (with an explicit asterisk). The same
+applies to C<tied *$scalar> and C<untie *$scalar>.
+
+=head2 IPC::Open3 no longer provides C<xfork()>, C<xclose_on_exec()>
+and C<xpipe_anon()>
+
+All three functions were private, undocumented, and unexported. They do
+not appear to be used by any code on CPAN. Two have been inlined and one
+deleted entirely.
+
+=head2 C<$$> no longer caches PID
+
+Previously, if one called fork(3) from C, Perl's
+notion of C<$$> could go out of sync with what getpid() returns. By always
+fetching the value of C<$$> via getpid(), this potential bug is eliminated.
+Code that depends on the caching behavior will break. As described in
+L<Core Enhancements|/C<$$> can be assigned to>,
+C<$$> is now writable, but it will be reset during a
+fork.
+
+=head2 C<$$> and C<getppid()> no longer emulate POSIX semantics under LinuxThreads
+
+The POSIX emulation of C<$$> and C<getppid()> under the obsolete
+LinuxThreads implementation has been removed.
+This only impacts users of Linux 2.4 and
+users of Debian GNU/kFreeBSD up to and including 6.0, not the vast
+majority of Linux installations that use NPTL threads.
+
+This means that C<getppid()>, like C<$$>, is now always guaranteed to
+return the OS's idea of the current state of the process, not perl's
+cached version of it.
+
+See the documentation for L<$$|perlvar/$$> for details.
+
+=head2 C<< $< >>, C<< $> >>, C<$(> and C<$)> are no longer cached
+
+Similarly to the changes to C<$$> and C<getppid()>, the internal
+caching of C<< $< >>, C<< $> >>, C<$(> and C<$)> has been removed.
+
+When we cached these values our idea of what they were would drift out
+of sync with reality if someone (e.g., someone embedding perl) called
+C<sete?[ug]id()> without updating C<PL_e?[ug]id>. Having to deal with
+this complexity wasn't worth it given how cheap the C<gete?[ug]id()>
+system call is.
+
+This change will break a handful of CPAN modules that use the XS-level
+C<PL_uid>, C<PL_gid>, C<PL_euid> or C<PL_egid> variables.
+
+The fix for those breakages is to use C<PerlProc_gete?[ug]id()> to
+retrieve them (e.g., C<PerlProc_getuid()>), and not to assign to
+C<PL_e?[ug]id> if you change the UID/GID/EUID/EGID. There is no longer
+any need to do so since perl will always retrieve the up-to-date
+version of those values from the OS.
+
+=head2 Which Non-ASCII characters get quoted by C<quotemeta> and C<\Q> has changed
+
+This is unlikely to result in a real problem, as Perl does not attach
+special meaning to any non-ASCII character, so it is currently
+irrelevant which are quoted or not. This change fixes bug [perl #77654] and
+brings Perl's behavior more into line with Unicode's recommendations.
+See L<perlfunc/quotemeta>.
+
+=head1 Performance Enhancements
+
+=over
+
+=item *
+
+Improved performance for Unicode properties in regular expressions
+
+=for comment Can this be compacted some? -- rjbs, 2012-02-20
+
+Matching a code point against a Unicode property is now done via a
+binary search instead of linear. This means for example that the worst
+case for a 1000 item property is 10 probes instead of 1000. This
+inefficiency has been compensated for in the past by permanently storing
+in a hash the results of a given probe plus the results for the adjacent
+64 code points, under the theory that near-by code points are likely to
+be searched for. A separate hash was used for each mention of a Unicode
+property in each regular expression. Thus, C<qr/\p{foo}abc\p{foo}/>
+would generate two hashes. Any probes in one instance would be unknown
+to the other, and the hashes could expand separately to be quite large
+if the regular expression were used on many different widely-separated
+code points.
+Now, however, there is just one hash shared by all instances of a given
+property. This means that if C<\p{foo}> is matched against "A" in one
+regular expression in a thread, the result will be known immediately to
+all regular expressions, and the relentless march of using up memory is
+slowed considerably.
+
+=item *
+
+Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now
+faster, as they enable features without loading F<feature.pm>.
+
+=item *
+
+C<local $_> is faster now, as it no longer iterates through magic that it
+is not going to copy anyway.
+
+=item *
+
+Perl 5.12.0 sped up the destruction of objects whose classes define
+empty C<DESTROY> methods (to prevent autoloading), by simply not
+calling such empty methods. This release takes this optimization a
+step further, by not calling any C<DESTROY> method that begins with a
+C<return> statement. This can be useful for destructors that are only
+used for debugging:
+
+ use constant DEBUG => 1;
+ sub DESTROY { return unless DEBUG; ... }
+
+Constant-folding will reduce the first statement to C<return;> if DEBUG
+is set to 0, triggering this optimization.
+
+=item *
+
+Assigning to a variable that holds a typeglob or copy-on-write scalar
+is now much faster. Previously the typeglob would be stringified or
+the copy-on-write scalar would be copied before being clobbered.
+
+=item *
+
+Assignment to C<substr> in void context is now more than twice its
+previous speed. Instead of creating and returning a special lvalue
+scalar that is then assigned to, C<substr> modifies the original string
+itself.
+
+=item *
+
+C<substr> no longer calculates a value to return when called in void
+context.
+
+=item *
+
+Due to changes in L<File::Glob>, Perl's C<glob> function and its C<<
+<...> >> equivalent are now much faster. The splitting of the pattern
+into words has been rewritten in C, resulting in speed-ups of 20% for
+some cases.
+
+This does not affect C<glob> on VMS, as it does not use File::Glob.
+
+=item *
+
+The short-circuiting operators C<&&>, C<||>, and C<//>, when chained
+(such as C<$a || $b || $c>), are now considerably faster to short-circuit,
+due to reduced optree traversal.
+
+=item *
+
+The implementation of C<s///r> makes one fewer copy of the scalar's value.
+
+=item *
+
+Recursive calls to lvalue subroutines in lvalue scalar context use less
+memory.
+
+=back
+
+=head1 Modules and Pragmata
+
+=head2 Deprecated Modules
+
+=over
+
+=item L<Version::Requirements>
+
+Version::Requirements is now DEPRECATED, use L<CPAN::Meta::Requirements>,
+which is a drop-in replacement. It will be deleted from perl.git blead
+in v5.17.0.
+
+=back
+
+=head2 New Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<arybase> -- this new module implements the C<$[> variable.
+
+=item *
+
+L<PerlIO::mmap> 0.010 has been added to the Perl core.
+
+The C<mmap> PerlIO layer is no longer implemented by perl itself, but has
+been moved out into the new L<PerlIO::mmap> module.
+
+=back
+
+=head2 Updated Modules and Pragmata
+
+This is only an overview of selected module updates. For a complete list of
+updates, run:
+
+ $ corelist --diff 5.14.0 5.16.0
+
+You can substitute your favorite version in place of 5.14.0, too.
+
+=over 4
+
+=item *
+
+L<Archive::Extract> has been upgraded from version 0.48 to 0.58.
+
+Includes a fix for FreeBSD to only use C<unzip> if it is located in
+C</usr/local/bin>, as FreeBSD 9.0 will ship with a limited C<unzip> in
+C</usr/bin>.
+
+=item *
+
+L<Archive::Tar> has been upgraded from version 1.76 to 1.82.
+
+Adjustments to handle files >8gb (>0777777777777 octal) and a feature
+to return the MD5SUM of files in the archive.
+
+=item *
+
+L<base> has been upgraded from version 2.16 to 2.18.
+
+C<base> no longer sets a module's C<$VERSION> to "-1" when a module it
+loads does not define a C<$VERSION>. This change has been made because
+"-1" is not a valid version number under the new "lax" criteria used
+internally by C<UNIVERSAL::VERSION>. (See L<version> for more on "lax"
+version criteria.)
+
+C<base> no longer internally skips loading modules it has already loaded
+and instead relies on C<require> to inspect C<%INC>. This fixes a bug
+when C<base> is used with code that clear C<%INC> to force a module to
+be reloaded.
+
+=item *
+
+L<Carp> has been upgraded from version 1.20 to 1.26.
+
+It now includes last read filehandle info and puts a dot after the file
+and line number, just like errors from C<die> [perl #106538].
+
+=item *
+
+L<charnames> has been updated from version 1.18 to 1.30.
+
+C<charnames> can now be invoked with a new option, C<:loose>,
+which is like the existing C<:full> option, but enables Unicode loose
+name matching. Details are in L<charnames/LOOSE MATCHES>.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.03 to 1.14. This fixes
+numerous deparsing bugs.
+
+=item *
+
+L<CGI> has been upgraded from version 3.52 to 3.59.
+
+It uses the public and documented FCGI.pm API in CGI::Fast. CGI::Fast was
+using an FCGI API that was deprecated and removed from documentation
+more than ten years ago. Usage of this deprecated API with FCGI E<gt>=
+0.70 or FCGI E<lt>= 0.73 introduces a security issue.
+L<https://rt.cpan.org/Public/Bug/Display.html?id=68380>
+L<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2766>
+
+Things that may break your code:
+
+C<url()> was fixed to return C<PATH_INFO> when it is explicitly requested
+with either the C<path=E<gt>1> or C<path_info=E<gt>1> flag.
+
+If your code is running under mod_rewrite (or compatible) and you are
+calling C<self_url()> or you are calling C<url()> and passing
+C<path_info=E<gt>1>, these methods will actually be returning
+C<PATH_INFO> now, as you have explicitly requested or C<self_url()>
+has requested on your behalf.
+
+The C<PATH_INFO> has been omitted in such URLs since the issue was
+introduced in the 3.12 release in December, 2005.
+
+This bug is so old your application may have come to depend on it or
+workaround it. Check for application before upgrading to this release.
+
+Examples of affected method calls:
+
+ $q->url(-absolute => 1, -query => 1, -path_info => 1);
+ $q->url(-path=>1);
+ $q->url(-full=>1,-path=>1);
+ $q->url(-rewrite=>1,-path=>1);
+ $q->self_url();
+
+We no longer read from STDIN when the Content-Length is not set,
+preventing requests with no Content-Length from sometimes freezing.
+This is consistent with the CGI RFC 3875, and is also consistent with
+CGI::Simple. However, the old behavior may have been expected by some
+command-line uses of CGI.pm.
+
+In addition, the DELETE HTTP verb is now supported.
+
+=item *
+
+L<Compress::Zlib> has been upgraded from version 2.035 to 2.048.
+
+IO::Compress::Zip and IO::Uncompress::Unzip now have support for LZMA
+(method 14). There is a fix for a CRC issue in IO::Compress::Unzip and
+it supports Streamed Stored context now. And fixed a Zip64 issue in
+IO::Compress::Zip when the content size was exactly 0xFFFFFFFF.
+
+=item *
+
+L<Digest::SHA> has been upgraded from version 5.61 to 5.71.
+
+Added BITS mode to the addfile method and shasum. This makes
+partial-byte inputs possible via files/STDIN and lets shasum check
+all 8074 NIST Msg vectors, where previously special programming was
+required to do this.
+
+=item *
+
+L<Encode> has been upgraded from version 2.42 to 2.44.
+
+Missing aliases added, a deep recursion error fixed and various
+documentation updates.
+
+Addressed 'decode_xs n-byte heap-overflow' security bug in Unicode.xs
+(CVE-2011-2939). (5.14.2)
+
+=item *
+
+L<ExtUtils::CBuilder> updated from version 0.280203 to 0.280206.
+
+The new version appends CFLAGS and LDFLAGS to their Config.pm
+counterparts.
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded from version 2.2210 to 3.16.
+
+Much of L<ExtUtils::ParseXS>, the module behind the XS compiler C<xsubpp>,
+was rewritten and cleaned up. It has been made somewhat more extensible
+and now finally uses strictures.
+
+The typemap logic has been moved into a separate module,
+L<ExtUtils::Typemaps>. See L</New Modules and Pragmata>, above.
+
+For a complete set of changes, please see the ExtUtils::ParseXS
+changelog, available on the CPAN.
+
+=item *
+
+L<File::Glob> has been upgraded from version 1.12 to 1.17.
+
+On Windows, tilde (~) expansion now checks the C<USERPROFILE> environment
+variable, after checking C<HOME>.
+
+It has a new C<:bsd_glob> export tag, intended to replace C<:glob>. Like
+C<:glob> it overrides C<glob> with a function that does not split the glob
+pattern into words, but, unlike C<:glob>, it iterates properly in scalar
+context, instead of returning the last file.
+
+There are other changes affecting Perl's own C<glob> operator (which uses
+File::Glob internally, except on VMS). See L</Performance Enhancements>
+and L</Selected Bug Fixes>.
+
+=item *
+
+L<FindBin> updated from version 1.50 to 1.51.
+
+It no longer returns a wrong result if a script of the same name as the
+current one exists in the path and is executable.
+
+=item *
+
+L<HTTP::Tiny> has been upgraded from version 0.012 to 0.017.
+
+Added support for using C<$ENV{http_proxy}> to set the default proxy host.
+
+Adds additional shorthand methods for all common HTTP verbs,
+a C<post_form()> method for POST-ing x-www-form-urlencoded data and
+a C<www_form_urlencode()> utility method.
+
+=item *
+
+L<IO> has been upgraded from version 1.25_04 to 1.25_06, and L<IO::Handle>
+from version 1.31 to 1.33.
+
+Together, these upgrades fix a problem with IO::Handle's C<getline> and
+C<getlines> methods. When these methods are called on the special ARGV
+handle, the next file is automatically opened, as happens with the built-in
+C<E<lt>E<gt>> and C<readline> functions. But, unlike the built-ins, these
+methods were not respecting the caller's use of the L<open> pragma and
+applying the appropriate I/O layers to the newly-opened file
+[rt.cpan.org #66474].
+
+=item *
+
+L<IPC::Cmd> has been upgraded from version 0.70 to 0.76.
+
+Capturing of command output (both C<STDOUT> and C<STDERR>) is now supported
+using L<IPC::Open3> on MSWin32 without requiring L<IPC::Run>.
+
+=item *
+
+L<IPC::Open3> has been upgraded from version 1.09 to 1.12.
+
+Fixes a bug which prevented use of C<open3> on Windows when C<*STDIN>,
+C<*STDOUT> or C<*STDERR> had been localized.
+
+Fixes a bug which prevented duplicating numeric file descriptors on Windows.
+
+C<open3> with "-" for the program name works once more. This was broken in
+version 1.06 (and hence in Perl 5.14.0) [perl #95748].
+
+=item *
+
+L<Locale::Codes> has been upgraded from version 3.16 to 3.21.
+
+Added Language Extension codes (langext) and Language Variation codes (langvar)
+as defined in the IANA language registry.
+
+Added language codes from ISO 639-5
+
+Added language/script codes from the IANA language subtag registry
+
+Fixed an uninitialized value warning [rt.cpan.org #67438].
+
+Fixed the return value for the all_XXX_codes and all_XXX_names functions
+[rt.cpan.org #69100].
+
+Reorganized modules to move Locale::MODULE to Locale::Codes::MODULE to allow
+for cleaner future additions. The original four modules (Locale::Language,
+Locale::Currency, Locale::Country, Locale::Script) will continue to work, but
+all new sets of codes will be added in the Locale::Codes namespace.
+
+The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now
+support retired codes. All codesets may be specified by a constant or
+by their name now. Previously, they were specified only by a constant.
+
+The alias_code function exists for backward compatibility. It has been
+replaced by rename_country_code. The alias_code function will be
+removed some time after September, 2013.
+
+All work is now done in the central module (Locale::Codes). Previously,
+some was still done in the wrapper modules (Locale::Codes::*). Added
+Language Family codes (langfam) as defined in ISO 639-5.
+
+=item *
+
+L<Math::BigFloat> has been upgraded from version 1.993 to 1.997.
+
+The C<numify> method has been corrected to return a normalized Perl number
+(the result of C<0 + $thing>), instead of a string [rt.cpan.org #66732].
+
+=item *
+
+L<Math::BigInt> has been upgraded from version 1.994 to 1.998.
+
+It provides a new C<bsgn> method that complements the C<babs> method.
+
+It fixes the internal C<objectify> function's handling of "foreign objects"
+so they are converted to the appropriate class (Math::BigInt or
+Math::BigFloat).
+
+=item *
+
+L<Math::BigRat> has been upgraded from version 0.2602 to 0.2603.
+
+C<int()> on a Math::BigRat object containing -1/2 now creates a
+Math::BigInt containing 0, rather than -0. L<Math::BigInt> does not even
+support negative zero, so the resulting object was actually malformed
+[perl #95530].
+
+=item *
+
+L<Math::Complex> has been upgraded from version 1.56 to 1.59
+and L<Math::Trig> from version 1.2 to 1.22.
+
+Fixes include: correct copy constructor usage; fix polarwise formatting with
+numeric format specifier; and more stable C<great_circle_direction> algorithm.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 2.51 to 2.66.
+
+The C<corelist> utility now understands the C<-r> option for displaying
+Perl release dates and the C<--diff> option to print the set of modlib
+changes between two perl distributions.
+
+=item *
+
+L<Module::Metadata> has been upgraded from version 1.000004 to 1.000009.
+
+Adds C<provides> method to generate a CPAN META provides data structure
+correctly; use of C<package_versions_from_directory> is discouraged.
+
+=item *
+
+L<ODBM_File> has been upgraded from version 1.10 to 1.12.
+
+The XS code is now compiled with C<PERL_NO_GET_CONTEXT>, which will aid
+performance under ithreads.
+
+=item *
+
+L<open> has been upgraded from version 1.08 to 1.10.
+
+It no longer turns off layers on standard handles when invoked without the
+":std" directive. Similarly, when invoked I<with> the ":std" directive, it
+now clears layers on STDERR before applying the new ones, and not just on
+STDIN and STDOUT [perl #92728].
+
+=item *
+
+L<overload> has been upgraded from version 1.13 to 1.18.
+
+C<overload::Overloaded> no longer calls C<can> on the class, but uses
+another means to determine whether the object has overloading. It was
+never correct for it to call C<can>, as overloading does not respect
+AUTOLOAD. So classes that autoload methods and implement C<can> no longer
+have to account for overloading [perl #40333].
+
+A warning is now produced for invalid arguments. See L</New Diagnostics>.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded from version 0.11 to 0.14.
+
+(This is the module that implements C<< open $fh, '>', \$scalar >>.)
+
+It fixes a problem with C<< open my $fh, ">", \$scalar >> not working if
+C<$scalar> is a copy-on-write scalar. (5.14.2)
+
+It also fixes a hang that occurs with C<readline> or C<< <$fh> >> if a
+typeglob has been assigned to $scalar [perl #92258].
+
+It no longer assumes during C<seek> that $scalar is a string internally.
+If it didn't crash, it was close to doing so [perl #92706]. Also, the
+internal print routine no longer assumes that the position set by C<seek>
+is valid, but extends the string to that position, filling the intervening
+bytes (between the old length and the seek position) with nulls
+[perl #78980].
+
+Printing to an in-memory handle now works if the $scalar holds a reference,
+stringifying the reference before modifying it. References used to be
+treated as empty strings.
+
+Printing to an in-memory handle no longer crashes if the $scalar happens to
+hold a number internally, but no string buffer.
+
+Printing to an in-memory handle no longer creates scalars that confuse
+the regular expression engine [perl #108398].
+
+=item *
+
+L<Pod::Functions> has been upgraded from version 1.04 to 1.05.
+
+F<Functions.pm> is now generated at perl build time from annotations in
+F<perlfunc.pod>. This will ensure that L<Pod::Functions> and L<perlfunc>
+remain in synchronisation.
+
+=item *
+
+L<Pod::Html> has been upgraded from version 1.11 to 1.1502.
+
+This is an extensive rewrite of Pod::Html to use L<Pod::Simple> under
+the hood. The output has changed significantly.
+
+=item *
+
+L<Pod::Perldoc> has been upgraded from version 3.15_03 to 3.17.
+
+It corrects the search paths on VMS [perl #90640]. (5.14.1)
+
+The B<-v> option now fetches the right section for C<$0>.
+
+This upgrade has numerous significant fixes. Consult its changelog on
+the CPAN for more information.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.24 to 1.30.
+
+L<POSIX> no longer uses L<AutoLoader>. Any code which was relying on this
+implementation detail was buggy, and may fail because of this change.
+The module's Perl code has been considerably simplified, roughly halving
+the number of lines, with no change in functionality. The XS code has
+been refactored to reduce the size of the shared object by about 12%,
+with no change in functionality. More POSIX functions now have tests.
+
+C<sigsuspend> and C<pause> now run signal handlers before returning, as the
+whole point of these two functions is to wait until a signal has
+arrived, and then return I<after> it has been triggered. Delayed, or
+"safe", signals were preventing that from happening, possibly resulting in
+race conditions [perl #107216].
+
+C<POSIX::sleep> is now a direct call into the underlying OS C<sleep>
+function, instead of being a Perl wrapper on C<CORE::sleep>.
+C<POSIX::dup2> now returns the correct value on Win32 (I<i.e.>, the file
+descriptor). C<POSIX::SigSet> C<sigsuspend> and C<sigpending> and
+C<POSIX::pause> now dispatch safe signals immediately before returning to
+their caller.
+
+C<POSIX::Termios::setattr> now defaults the third argument to C<TCSANOW>,
+instead of 0. On most platforms C<TCSANOW> is defined to be 0, but on some
+0 is not a valid parameter, which caused a call with defaults to fail.
+
+=item *
+
+L<Socket> has been upgraded from version 1.94 to 2.001.
+
+It has new functions and constants for handling IPv6 sockets:
+
+ pack_ipv6_mreq
+ unpack_ipv6_mreq
+ IPV6_ADD_MEMBERSHIP
+ IPV6_DROP_MEMBERSHIP
+ IPV6_MTU
+ IPV6_MTU_DISCOVER
+ IPV6_MULTICAST_HOPS
+ IPV6_MULTICAST_IF
+ IPV6_MULTICAST_LOOP
+ IPV6_UNICAST_HOPS
+ IPV6_V6ONLY
+
+=item *
+
+L<Storable> has been upgraded from version 2.27 to 2.34.
+
+It no longer turns copy-on-write scalars into read-only scalars when
+freezing and thawing.
+
+=item *
+
+L<Sys::Syslog> has been upgraded from version 0.27 to 0.29.
+
+This upgrade closes many outstanding bugs.
+
+=item *
+
+L<Term::ANSIColor> has been upgraded from version 3.00 to 3.01.
+
+Only interpret an initial array reference as a list of colors, not any initial
+reference, allowing the colored function to work properly on objects with
+stringification defined.
+
+=item *
+
+L<Term::ReadLine> has been upgraded from version 1.07 to 1.09.
+
+Term::ReadLine now supports any event loop, including unpublished ones and
+simple L<IO::Select>, loops without the need to rewrite existing code for
+any particular framework [perl #108470].
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.37 to 1.40.
+
+Destructors on shared objects used to be ignored sometimes if the objects
+were referenced only by shared data structures. This has been mostly
+fixed, but destructors may still be ignored if the objects still exist at
+global destruction time [perl #98204].
+
+=item *
+
+L<Unicode::Collate> has been upgraded from version 0.73 to 0.89.
+
+Updated to CLDR 1.9.1
+
+Locales updated to CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk,
+zh__pinyin, zh__stroke
+
+Newly supported locales: bn, fa, ml, mr, or, pa, sa, si, si__dictionary,
+sr_Latn, sv__reformed, ta, te, th, ur, wae.
+
+Tailored compatibility ideographs as well as unified ideographs for the
+locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
+
+Locale/*.pl files are now searched for in @INC.
+
+=item *
+
+L<Unicode::Normalize> has been upgraded from version 1.10 to 1.14.
+
+Fixes for the removal of F<unicore/CompositionExclusions.txt> from core.
+
+=item *
+
+L<Unicode::UCD> has been upgraded from version 0.32 to 0.43.
+
+This adds four new functions: C<prop_aliases()> and
+C<prop_value_aliases()>, which are used to find all Unicode-approved
+synonyms for property names, or to convert from one name to another;
+C<prop_invlist> which returns all code points matching a given
+Unicode binary property; and C<prop_invmap> which returns the complete
+specification of a given Unicode property.
+
+=item *
+
+L<Win32API::File> has been upgraded from version 0.1101 to 0.1200.
+
+Added SetStdHandle and GetStdHandle functions
+
+=back
+
+=head2 Removed Modules and Pragmata
+
+As promised in Perl 5.14.0's release notes, the following modules have
+been removed from the core distribution, and if needed should be installed
+from CPAN instead.
+
+=over
+
+=item *
+
+L<Devel::DProf> has been removed from the Perl core. Prior version was
+20110228.00.
+
+=item *
+
+L<Shell> has been removed from the Perl core. Prior version was 0.72_01.
+
+=item *
+
+Several old perl4-style libraries which have been deprecated with 5.14
+are now removed:
+
+ abbrev.pl assert.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl
+ complete.pl ctime.pl dotsh.pl exceptions.pl fastcwd.pl flush.pl
+ getcwd.pl getopt.pl getopts.pl hostname.pl importenv.pl
+ lib/find{,depth}.pl look.pl newgetopt.pl open2.pl open3.pl
+ pwd.pl shellwords.pl stat.pl tainted.pl termcap.pl timelocal.pl
+
+They can be found on CPAN as L<Perl4::CoreLibs>.
+
+=back
+
+=head1 Documentation
+
+=head2 New Documentation
+
+=head3 L<perldtrace>
+
+L<perldtrace> describes Perl's DTrace support, listing the provided probes
+and gives examples of their use.
+
+=head3 L<perlexperiment>
+
+This document is intended to provide a list of experimental features in
+Perl. It is still a work in progress.
+
+=head3 L<perlootut>
+
+This a new OO tutorial. It focuses on basic OO concepts, and then recommends
+that readers choose an OO framework from CPAN.
+
+=head3 L<perlxstypemap>
+
+The new manual describes the XS typemapping mechanism in unprecedented
+detail and combines new documentation with information extracted from
+L<perlxs> and the previously unofficial list of all core typemaps.
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perlapi>
+
+=over 4
+
+=item *
+
+The HV API has long accepted negative lengths to show that the key is
+in UTF8. This is now documented.
+
+=item *
+
+The C<boolSV()> macro is now documented.
+
+=back
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item *
+
+C<dbmopen> treats a 0 mode as a special case, that prevents a nonexistent
+file from being created. This has been the case since Perl 5.000, but was
+never documented anywhere. Now the perlfunc entry mentions it
+[perl #90064].
+
+=item *
+
+As an accident of history, C<open $fh, '<:', ...> applies the default
+layers for the platform (C<:raw> on Unix, C<:crlf> on Windows), ignoring
+whatever is declared by L<open.pm|open>. This seems such a useful feature
+it has been documented in L<perlfunc|perlfunc/open> and L<open>.
+
+=item *
+
+The entry for C<split> has been rewritten. It is now far clearer than
+before.
+
+=back
+
+=head3 L<perlguts>
+
+=over 4
+
+=item *
+
+A new section, L<Autoloading with XSUBs|perlguts/Autoloading with XSUBs>,
+has been added, which explains the two APIs for accessing the name of the
+autoloaded sub.
+
+=item *
+
+Some function descriptions in L<perlguts> were confusing, as it was
+not clear whether they referred to the function above or below the
+description. This has been clarified [perl #91790].
+
+=back
+
+=head3 L<perlobj>
+
+=over 4
+
+=item *
+
+This document has been rewritten from scratch, and its coverage of various OO
+concepts has been expanded.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+Documentation of the smartmatch operator has been reworked and moved from
+perlsyn to perlop where it belongs.
+
+It has also been corrected for the case of C<undef> on the left-hand
+side. The list of different smart match behaviors had an item in the
+wrong place.
+
+=item *
+
+Documentation of the ellipsis statement (C<...>) has been reworked and
+moved from perlop to perlsyn.
+
+=item *
+
+The explanation of bitwise operators has been expanded to explain how they
+work on Unicode strings (5.14.1).
+
+=item *
+
+More examples for C<m//g> have been added (5.14.1).
+
+=item *
+
+The C<<< <<\FOO >>> here-doc syntax has been documented (5.14.1).
+
+=back
+
+=head3 L<perlpragma>
+
+=over 4
+
+=item *
+
+There is now a standard convention for naming keys in the C<%^H>,
+documented under L<Key naming|perlpragma/Key naming>.
+
+=back
+
+=head3 L<perlsec/Laundering and Detecting Tainted Data>
+
+=over 4
+
+=item *
+
+The example function for checking for taintedness contained a subtle
+error. C<$@> needs to be localized to prevent its changing this
+global's value outside the function. The preferred method to check for
+this remains L<Scalar::Util/tainted>.
+
+=back
+
+=head3 L<perllol>
+
+=over
+
+=item *
+
+L<perllol> has been expanded with examples using the new C<push $scalar>
+syntax introduced in Perl 5.14.0 (5.14.1).
+
+=back
+
+=head3 L<perlmod>
+
+=over
+
+=item *
+
+L<perlmod> now states explicitly that some types of explicit symbol table
+manipulation are not supported. This codifies what was effectively already
+the case [perl #78074].
+
+=back
+
+=head3 L<perlpodstyle>
+
+=over 4
+
+=item *
+
+The tips on which formatting codes to use have been corrected and greatly
+expanded.
+
+=item *
+
+There are now a couple of example one-liners for previewing POD files after
+they have been edited.
+
+=back
+
+=head3 L<perlre>
+
+=over
+
+=item *
+
+The C<(*COMMIT)> directive is now listed in the right section
+(L<Verbs without an argument|perlre/Verbs without an argument>).
+
+=back
+
+=head3 L<perlrun>
+
+=over
+
+=item *
+
+L<perlrun> has undergone a significant clean-up. Most notably, the
+B<-0x...> form of the B<-0> flag has been clarified, and the final section
+on environment variables has been corrected and expanded (5.14.1).
+
+=back
+
+=head3 L<perlsub>
+
+=over
+
+=item *
+
+The ($;) prototype syntax, which has existed for rather a long time, is now
+documented in L<perlsub>. It lets a unary function have the same
+precedence as a list operator.
+
+=back
+
+=head3 L<perltie>
+
+=over
+
+=item *
+
+The required syntax for tying handles has been documented.
+
+=back
+
+=head3 L<perlvar>
+
+=over
+
+=item *
+
+The documentation for L<$!|perlvar/$!> has been corrected and clarified.
+It used to state that $! could be C<undef>, which is not the case. It was
+also unclear whether system calls set C's C<errno> or Perl's C<$!>
+[perl #91614].
+
+=item *
+
+Documentation for L<$$|perlvar/$$> has been amended with additional
+cautions regarding changing the process ID.
+
+=back
+
+=head3 Other Changes
+
+=over 4
+
+=item *
+
+L<perlxs> was extended with documentation on inline typemaps.
+
+=item *
+
+L<perlref> has a new L<Circular References|perlref/Circular References>
+section explaining how circularities may not be freed and how to solve that
+with weak references.
+
+=item *
+
+Parts of L<perlapi> were clarified, and Perl equivalents of some C
+functions have been added as an additional mode of exposition.
+
+=item *
+
+A few parts of L<perlre> and L<perlrecharclass> were clarified.
+
+=back
+
+=head2 Removed Documentation
+
+=head3 Old OO Documentation
+
+The old OO tutorials, perltoot, perltooc, and perlboot, have been
+removed. The perlbot (bag of object tricks) document has been removed
+as well.
+
+=head3 Development Deltas
+
+The perldelta files for development releases are no longer packaged with
+perl. These can still be found in the perl source code repository.
+
+=head1 Diagnostics
+
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages. For the complete list of
+diagnostic messages, see L<perldiag>.
+
+=head2 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<Cannot set tied @DB::args|perldiag/"Cannot set tied @DB::args">
+
+This error occurs when C<caller> tries to set C<@DB::args> but finds it
+tied. Before this error was added, it used to crash instead.
+
+=item *
+
+L<Cannot tie unreifiable array|perldiag/"Cannot tie unreifiable array">
+
+This error is part of a safety check that the C<tie> operator does before
+tying a special array like C<@_>. You should never see this message.
+
+=item *
+
+L<&CORE::%s cannot be called directly|perldiag/"&CORE::%s cannot be called directly">
+
+This occurs when a subroutine in the C<CORE::> namespace is called
+with C<&foo> syntax or through a reference. Some subroutines
+in this package cannot yet be called that way, but must be
+called as barewords. See L</Subroutines in the C<CORE> namespace>, above.
+
+=item *
+
+L<Source filters apply only to byte streams|perldiag/"Source filters apply only to byte streams">
+
+This new error occurs when you try to activate a source filter (usually by
+loading a source filter module) within a string passed to C<eval> under the
+C<unicode_eval> feature.
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated">
+
+The long-deprecated C<defined(@array)> now also warns for package variables.
+Previously it issued a warning for lexical variables only.
+
+=item *
+
+L<length() used on %s|perldiag/length() used on %s>
+
+This new warning occurs when C<length> is used on an array or hash, instead
+of C<scalar(@array)> or C<scalar(keys %hash)>.
+
+=item *
+
+L<lvalue attribute %s already-defined subroutine|perldiag/"lvalue attribute %s already-defined subroutine">
+
+L<attributes.pm|attributes> now emits this warning when the :lvalue
+attribute is applied to a Perl subroutine that has already been defined, as
+doing so can have unexpected side-effects.
+
+=item *
+
+L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid">
+
+This warning, in the "overload" category, is produced when the overload
+pragma is given an argument it doesn't recognize, presumably a mistyped
+operator.
+
+=item *
+
+L<$[ used in %s (did you mean $] ?)|perldiag/"$[ used in %s (did you mean $] ?)">
+
+This new warning exists to catch the mistaken use of C<$[> in version
+checks. C<$]>, not C<$[>, contains the version number.
+
+=item *
+
+L<Useless assignment to a temporary|perldiag/"Useless assignment to a temporary">
+
+Assigning to a temporary scalar returned
+from an lvalue subroutine now produces this
+warning [perl #31946].
+
+=item *
+
+L<Useless use of \E|perldiag/"Useless use of \E">
+
+C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>.
+
+=back
+
+=head2 Removed Errors
+
+=over
+
+=item *
+
+"sort is now a reserved word"
+
+This error used to occur when C<sort> was called without arguments,
+followed by C<;> or C<)>. (E.g., C<sort;> would die, but C<{sort}> was
+OK.) This error message was added in Perl 3 to catch code like
+C<close(sort)> which would no longer work. More than two decades later,
+this message is no longer appropriate. Now C<sort> without arguments is
+always allowed, and returns an empty list, as it did in those cases
+where it was already allowed [perl #90030].
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+The "Applying pattern match..." or similar warning produced when an
+array or hash is on the left-hand side of the C<=~> operator now
+mentions the name of the variable.
+
+=item *
+
+The "Attempt to free non-existent shared string" has had the spelling
+of "non-existent" corrected to "nonexistent". It was already listed
+with the correct spelling in L<perldiag>.
+
+=item *
+
+The error messages for using C<default> and C<when> outside a
+topicalizer have been standardized to match the messages for C<continue>
+and loop controls. They now read 'Can't "default" outside a
+topicalizer' and 'Can't "when" outside a topicalizer'. They both used
+to be 'Can't use when() outside a topicalizer' [perl #91514].
+
+=item *
+
+The message, "Code point 0x%X is not Unicode, no properties match it;
+all inverse properties do" has been changed to "Code point 0x%X is not
+Unicode, all \p{} matches fail; all \P{} matches succeed".
+
+=item *
+
+Redefinition warnings for constant subroutines used to be mandatory,
+even occurring under C<no warnings>. Now they respect the L<warnings>
+pragma.
+
+=item *
+
+The "glob failed" warning message is now suppressible via C<no warnings>
+[perl #111656].
+
+=item *
+
+The L<Invalid version format|perldiag/"Invalid version format (%s)">
+error message now says "negative version number" within the parentheses,
+rather than "non-numeric data", for negative numbers.
+
+=item *
+
+The two warnings
+L<Possible attempt to put comments in qw() list|perldiag/"Possible attempt to put comments in qw() list">
+and
+L<Possible attempt to separate words with commas|perldiag/"Possible attempt to separate words with commas">
+are no longer mutually exclusive: the same C<qw> construct may produce
+both.
+
+=item *
+
+The uninitialized warning for C<y///r> when C<$_> is implicit and
+undefined now mentions the variable name, just like the non-/r variation
+of the operator.
+
+=item *
+
+The 'Use of "foo" without parentheses is ambiguous' warning has been
+extended to apply also to user-defined subroutines with a (;$)
+prototype, and not just to built-in functions.
+
+=item *
+
+Warnings that mention the names of lexical (C<my>) variables with
+Unicode characters in them now respect the presence or absence of the
+C<:utf8> layer on the output handle, instead of outputting UTF8
+regardless. Also, the correct names are included in the strings passed
+to C<$SIG{__WARN__}> handlers, rather than the raw UTF8 bytes.
+
+=back
+
+=head1 Utility Changes
+
+=head3 L<h2ph>
+
+=over 4
+
+=item *
+
+L<h2ph> used to generate code of the form
+
+ unless(defined(&FOO)) {
+ sub FOO () {42;}
+ }
+
+But the subroutine is a compile-time declaration, and is hence unaffected
+by the condition. It has now been corrected to emit a string C<eval>
+around the subroutine [perl #99368].
+
+=back
+
+=head3 L<splain>
+
+=over 4
+
+=item *
+
+F<splain> no longer emits backtraces with the first line number repeated.
+
+This:
+
+ Uncaught exception from user code:
+ Cannot fwiddle the fwuddle at -e line 1.
+ at -e line 1
+ main::baz() called at -e line 1
+ main::bar() called at -e line 1
+ main::foo() called at -e line 1
+
+has become this:
+
+ Uncaught exception from user code:
+ Cannot fwiddle the fwuddle at -e line 1.
+ main::baz() called at -e line 1
+ main::bar() called at -e line 1
+ main::foo() called at -e line 1
+
+=item *
+
+Some error messages consist of multiple lines that are listed as separate
+entries in L<perldiag>. splain has been taught to find the separate
+entries in these cases, instead of simply failing to find the message.
+
+=back
+
+=head3 L<zipdetails>
+
+=over 4
+
+=item *
+
+This is a new utility, included as part of an
+L<IO::Compress::Base> upgrade.
+
+L<zipdetails> displays information about the internal record structure
+of the zip file. It is not concerned with displaying any details of
+the compressed data stored in the zip file.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+F<regexp.h> has been modified for compatibility with GCC's B<-Werror>
+option, as used by some projects that include perl's header files (5.14.1).
+
+=item *
+
+C<USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}> have been added the output of perl -V
+as they have affect the behavior of the interpreter binary (albeit
+in only a small area).
+
+=item *
+
+The code and tests for L<IPC::Open2> have been moved from F<ext/IPC-Open2>
+into F<ext/IPC-Open3>, as C<IPC::Open2::open2()> is implemented as a thin
+wrapper around C<IPC::Open3::_open3()>, and hence is very tightly coupled to
+it.
+
+=item *
+
+The magic types and magic vtables are now generated from data in a new script
+F<regen/mg_vtable.pl>, instead of being maintained by hand. As different
+EBCDIC variants can't agree on the code point for '~', the character to code
+point conversion is done at build time by F<generate_uudmap> to a new generated
+header F<mg_data.h>. C<PL_vtbl_bm> and C<PL_vtbl_fm> are now defined by the
+pre-processor as C<PL_vtbl_regexp>, instead of being distinct C variables.
+C<PL_vtbl_sig> has been removed.
+
+=item *
+
+Building with C<-DPERL_GLOBAL_STRUCT> works again. This configuration is not
+generally used.
+
+=item *
+
+Perl configured with I<MAD> now correctly frees C<MADPROP> structures when
+OPs are freed. C<MADPROP>s are now allocated with C<PerlMemShared_malloc()>
+
+=item *
+
+F<makedef.pl> has been refactored. This should have no noticeable affect on
+any of the platforms that use it as part of their build (AIX, VMS, Win32).
+
+=item *
+
+C<useperlio> can no longer be disabled.
+
+=item *
+
+The file F<global.sym> is no longer needed, and has been removed. It
+contained a list of all exported functions, one of the files generated by
+F<regen/embed.pl> from data in F<embed.fnc> and F<regen/opcodes>. The code
+has been refactored so that the only user of F<global.sym>, F<makedef.pl>,
+now reads F<embed.fnc> and F<regen/opcodes> directly, removing the need to
+store the list of exported functions in an intermediate file.
+
+As F<global.sym> was never installed, this change should not be visible
+outside the build process.
+
+=item *
+
+F<pod/buildtoc>, used by the build process to build L<perltoc>, has been
+refactored and simplified. It now contains only code to build L<perltoc>;
+the code to regenerate Makefiles has been moved to F<Porting/pod_rules.pl>.
+It's a bug if this change has any material effect on the build process.
+
+=item *
+
+F<pod/roffitall> is now built by F<pod/buildtoc>, instead of being
+shipped with the distribution. Its list of manpages is now generated
+(and therefore current). See also RT #103202 for an unresolved related
+issue.
+
+=item *
+
+The man page for C<XS::Typemap> is no longer installed. C<XS::Typemap>
+is a test module which is not installed, hence installing its
+documentation makes no sense.
+
+=item *
+
+The -Dusesitecustomize and -Duserelocatableinc options now work
+together properly.
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=head3 Cygwin
+
+=over 4
+
+=item *
+
+Since version 1.7, Cygwin supports native UTF-8 paths. If Perl is built
+under that environment, directory and filenames will be UTF-8 encoded.
+
+=item *
+
+Cygwin does not initialize all original Win32 environment variables. See
+F<README.cygwin> for a discussion of the newly-added
+C<Cygwin::sync_winenv()> function [perl #110190] and for
+further links.
+
+=back
+
+=head3 HP-UX
+
+=over 4
+
+=item *
+
+HP-UX PA-RISC/64 now supports gcc-4.x
+
+A fix to correct the socketsize now makes the test suite pass on HP-UX
+PA-RISC for 64bitall builds. (5.14.2)
+
+=back
+
+=head3 VMS
+
+=over 4
+
+=item *
+
+Remove unnecessary includes, fix miscellaneous compiler warnings and
+close some unclosed comments on F<vms/vms.c>.
+
+=item *
+
+Remove sockadapt layer from the VMS build.
+
+=item *
+
+Explicit support for VMS versions before v7.0 and DEC C versions
+before v6.0 has been removed.
+
+=item *
+
+Since Perl 5.10.1, the home-grown C<stat> wrapper has been unable to
+distinguish between a directory name containing an underscore and an
+otherwise-identical filename containing a dot in the same position
+(e.g., t/test_pl as a directory and t/test.pl as a file). This problem
+has been corrected.
+
+=item *
+
+The build on VMS now permits names of the resulting symbols in C code for
+Perl longer than 31 characters. Symbols like
+C<Perl__it_was_the_best_of_times_it_was_the_worst_of_times> can now be
+created freely without causing the VMS linker to seize up.
+
+=back
+
+=head3 GNU/Hurd
+
+=over 4
+
+=item *
+
+Numerous build and test failures on GNU/Hurd have been resolved with hints
+for building DBM modules, detection of the library search path, and enabling
+of large file support.
+
+=back
+
+=head3 OpenVOS
+
+=over 4
+
+=item *
+
+Perl is now built with dynamic linking on OpenVOS, the minimum supported
+version of which is now Release 17.1.0.
+
+=back
+
+=head3 SunOS
+
+The CC workshop C++ compiler is now detected and used on systems that ship
+without cc.
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+The compiled representation of formats is now stored via the C<mg_ptr> of
+their C<PERL_MAGIC_fm>. Previously it was stored in the string buffer,
+beyond C<SvLEN()>, the regular end of the string. C<SvCOMPILED()> and
+C<SvCOMPILED_{on,off}()> now exist solely for compatibility for XS code.
+The first is always 0, the other two now no-ops. (5.14.1)
+
+=item *
+
+Some global variables have been marked C<const>, members in the interpreter
+structure have been re-ordered, and the opcodes have been re-ordered. The
+op C<OP_AELEMFAST> has been split into C<OP_AELEMFAST> and C<OP_AELEMFAST_LEX>.
+
+=item *
+
+When empting a hash of its elements (e.g., via undef(%h), or %h=()), HvARRAY
+field is no longer temporarily zeroed. Any destructors called on the freed
+elements see the remaining elements. Thus, %h=() becomes more like
+C<delete $h{$_} for keys %h>.
+
+=item *
+
+Boyer-Moore compiled scalars are now PVMGs, and the Boyer-Moore tables are now
+stored via the mg_ptr of their C<PERL_MAGIC_bm>.
+Previously they were PVGVs, with the tables stored in
+the string buffer, beyond C<SvLEN()>. This eliminates
+the last place where the core stores data beyond C<SvLEN()>.
+
+=item *
+
+Simplified logic in C<Perl_sv_magic()> introduces a small change of
+behavior for error cases involving unknown magic types. Previously, if
+C<Perl_sv_magic()> was passed a magic type unknown to it, it would
+
+=over
+
+=item 1.
+
+Croak "Modification of a read-only value attempted" if read only
+
+=item 2.
+
+Return without error if the SV happened to already have this magic
+
+=item 3.
+
+otherwise croak "Don't know how to handle magic of type \\%o"
+
+=back
+
+Now it will always croak "Don't know how to handle magic of type \\%o", even
+on read-only values, or SVs which already have the unknown magic type.
+
+=item *
+
+The experimental C<fetch_cop_label> function has been renamed to
+C<cop_fetch_label>.
+
+=item *
+
+The C<cop_store_label> function has been added to the API, but is
+experimental.
+
+=item *
+
+F<embedvar.h> has been simplified, and one level of macro indirection for
+PL_* variables has been removed for the default (non-multiplicity)
+configuration. PERLVAR*() macros now directly expand their arguments to
+tokens such as C<PL_defgv>, instead of expanding to C<PL_Idefgv>, with
+F<embedvar.h> defining a macro to map C<PL_Idefgv> to C<PL_defgv>. XS code
+which has unwarranted chumminess with the implementation may need updating.
+
+=item *
+
+An API has been added to explicitly choose whether to export XSUB
+symbols. More detail can be found in the comments for commit e64345f8.
+
+=item *
+
+The C<is_gv_magical_sv> function has been eliminated and merged with
+C<gv_fetchpvn_flags>. It used to be called to determine whether a GV
+should be autovivified in rvalue context. Now it has been replaced with a
+new C<GV_ADDMG> flag (not part of the API).
+
+=item *
+
+The returned code point from the function C<utf8n_to_uvuni()>
+when the input is malformed UTF-8, malformations are allowed, and
+C<utf8> warnings are off is now the Unicode REPLACEMENT CHARACTER
+whenever the malformation is such that no well-defined code point can be
+computed. Previously the returned value was essentially garbage. The
+only malformations that have well-defined values are a zero-length
+string (0 is the return), and overlong UTF-8 sequences.
+
+=item *
+
+Padlists are now marked C<AvREAL>; i.e., reference-counted. They have
+always been reference-counted, but were not marked real, because F<pad.c>
+did its own clean-up, instead of using the usual clean-up code in F<sv.c>.
+That caused problems in thread cloning, so now the C<AvREAL> flag is on,
+but is turned off in F<pad.c> right before the padlist is freed (after
+F<pad.c> has done its custom freeing of the pads).
+
+=item *
+
+All C files that make up the Perl core have been converted to UTF-8.
+
+=item *
+
+These new functions have been added as part of the work on Unicode symbols:
+
+ HvNAMELEN
+ HvNAMEUTF8
+ HvENAMELEN
+ HvENAMEUTF8
+ gv_init_pv
+ gv_init_pvn
+ gv_init_pvsv
+ gv_fetchmeth_pv
+ gv_fetchmeth_pvn
+ gv_fetchmeth_sv
+ gv_fetchmeth_pv_autoload
+ gv_fetchmeth_pvn_autoload
+ gv_fetchmeth_sv_autoload
+ gv_fetchmethod_pv_flags
+ gv_fetchmethod_pvn_flags
+ gv_fetchmethod_sv_flags
+ gv_autoload_pv
+ gv_autoload_pvn
+ gv_autoload_sv
+ newGVgen_flags
+ sv_derived_from_pv
+ sv_derived_from_pvn
+ sv_derived_from_sv
+ sv_does_pv
+ sv_does_pvn
+ sv_does_sv
+ whichsig_pv
+ whichsig_pvn
+ whichsig_sv
+ newCONSTSUB_flags
+
+The gv_fetchmethod_*_flags functions, like gv_fetchmethod_flags, are
+experimental and may change in a future release.
+
+=item *
+
+The following functions were added. These are I<not> part of the API:
+
+ GvNAMEUTF8
+ GvENAMELEN
+ GvENAME_HEK
+ CopSTASH_flags
+ CopSTASH_flags_set
+ PmopSTASH_flags
+ PmopSTASH_flags_set
+ sv_sethek
+ HEKfARG
+
+There is also a C<HEKf> macro corresponding to C<SVf>, for
+interpolating HEKs in formatted strings.
+
+=item *
+
+C<sv_catpvn_flags> takes a couple of new internal-only flags,
+C<SV_CATBYTES> and C<SV_CATUTF8>, which tell it whether the char array to
+be concatenated is UTF8. This allows for more efficient concatenation than
+creating temporary SVs to pass to C<sv_catsv>.
+
+=item *
+
+For XS AUTOLOAD subs, $AUTOLOAD is set once more, as it was in 5.6.0. This
+is in addition to setting C<SvPVX(cv)>, for compatibility with 5.8 to 5.14.
+See L<perlguts/Autoloading with XSUBs>.
+
+=item *
+
+Perl now checks whether the array (the linearized isa) returned by a MRO
+plugin begins with the name of the class itself, for which the array was
+created, instead of assuming that it does. This prevents the first element
+from being skipped during method lookup. It also means that
+C<mro::get_linear_isa> may return an array with one more element than the
+MRO plugin provided [perl #94306].
+
+=item *
+
+C<PL_curstash> is now reference-counted.
+
+=item *
+
+There are now feature bundle hints in C<PL_hints> (C<$^H>) that version
+declarations use, to avoid having to load F<feature.pm>. One setting of
+the hint bits indicates a "custom" feature bundle, which means that the
+entries in C<%^H> still apply. F<feature.pm> uses that.
+
+The C<HINT_FEATURE_MASK> macro is defined in F<perl.h> along with other
+hints. Other macros for setting and testing features and bundles are in
+the new F<feature.h>. C<FEATURE_IS_ENABLED> (which has moved to
+F<feature.h>) is no longer used throughout the codebase, but more specific
+macros, e.g., C<FEATURE_SAY_IS_ENABLED>, that are defined in F<feature.h>.
+
+=item *
+
+F<lib/feature.pm> is now a generated file, created by the new
+F<regen/feature.pl> script, which also generates F<feature.h>.
+
+=item *
+
+Tied arrays are now always C<AvREAL>. If C<@_> or C<DB::args> is tied, it
+is reified first, to make sure this is always the case.
+
+=item *
+
+Two new functions C<utf8_to_uvchr_buf()> and C<utf8_to_uvuni_buf()> have
+been added. These are the same as C<utf8_to_uvchr> and
+C<utf8_to_uvuni> (which are now deprecated), but take an extra parameter
+that is used to guard against reading beyond the end of the input
+string.
+See L<perlapi/utf8_to_uvchr_buf> and L<perlapi/utf8_to_uvuni_buf>.
+
+=item *
+
+The regular expression engine now does TRIE case insensitive matches
+under Unicode. This may change the output of C<< use re 'debug'; >>,
+and will speed up various things.
+
+=item *
+
+There is a new C<wrap_op_checker()> function, which provides a thread-safe
+alternative to writing to C<PL_check> directly.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=head2 Array and hash
+
+=over
+
+=item *
+
+A bug has been fixed that would cause a "Use of freed value in iteration"
+error if the next two hash elements that would be iterated over are
+deleted [perl #85026]. (5.14.1)
+
+=item *
+
+Deleting the current hash iterator (the hash element that would be returned
+by the next call to C<each>) in void context used not to free it
+[perl #85026].
+
+=item *
+
+Deletion of methods via C<delete $Class::{method}> syntax used to update
+method caches if called in void context, but not scalar or list context.
+
+=item *
+
+When hash elements are deleted in void context, the internal hash entry is
+now freed before the value is freed, to prevent destructors called by that
+latter freeing from seeing the hash in an inconsistent state. It was
+possible to cause double-frees if the destructor freed the hash itself
+[perl #100340].
+
+=item *
+
+A C<keys> optimization in Perl 5.12.0 to make it faster on empty hashes
+caused C<each> not to reset the iterator if called after the last element
+was deleted.
+
+=item *
+
+Freeing deeply nested hashes no longer crashes [perl #44225].
+
+=item *
+
+It is possible from XS code to create hashes with elements that have no
+values. The hash element and slice operators used to crash
+when handling these in lvalue context. They now
+produce a "Modification of non-creatable hash value attempted" error
+message.
+
+=item *
+
+If list assignment to a hash or array triggered destructors that freed the
+hash or array itself, a crash would ensue. This is no longer the case
+[perl #107440].
+
+=item *
+
+It used to be possible to free the typeglob of a localized array or hash
+(e.g., C<local @{"x"}; delete $::{x}>), resulting in a crash on scope exit.
+
+=item *
+
+Some core bugs affecting L<Hash::Util> have been fixed: locking a hash
+element that is a glob copy no longer causes the next assignment to it to
+corrupt the glob (5.14.2), and unlocking a hash element that holds a
+copy-on-write scalar no longer causes modifications to that scalar to
+modify other scalars that were sharing the same string buffer.
+
+=back
+
+=head2 C API fixes
+
+=over
+
+=item *
+
+The C<newHVhv> XS function now works on tied hashes, instead of crashing or
+returning an empty hash.
+
+=item *
+
+The C<SvIsCOW> C macro now returns false for read-only copies of typeglobs,
+such as those created by:
+
+ $hash{elem} = *foo;
+ Hash::Util::lock_value %hash, 'elem';
+
+It used to return true.
+
+=item *
+
+The C<SvPVutf8> C function no longer tries to modify its argument,
+resulting in errors [perl #108994].
+
+=item *
+
+C<SvPVutf8> now works properly with magical variables.
+
+=item *
+
+C<SvPVbyte> now works properly non-PVs.
+
+=item *
+
+When presented with malformed UTF-8 input, the XS-callable functions
+C<is_utf8_string()>, C<is_utf8_string_loc()>, and
+C<is_utf8_string_loclen()> could read beyond the end of the input
+string by up to 12 bytes. This no longer happens. [perl #32080].
+However, currently, C<is_utf8_char()> still has this defect, see
+L</is_utf8_char()> above.
+
+=item *
+
+The C-level C<pregcomp> function could become confused about whether the
+pattern was in UTF8 if the pattern was an overloaded, tied, or otherwise
+magical scalar [perl #101940].
+
+=back
+
+=head2 Compile-time hints
+
+=over
+
+=item *
+
+Tying C<%^H> no longer causes perl to crash or ignore the contents of
+C<%^H> when entering a compilation scope [perl #106282].
+
+=item *
+
+C<eval $string> and C<require> used not to
+localize C<%^H> during compilation if it
+was empty at the time the C<eval> call itself was compiled. This could
+lead to scary side effects, like C<use re "/m"> enabling other flags that
+the surrounding code was trying to enable for its caller [perl #68750].
+
+=item *
+
+C<eval $string> and C<require> no longer localize hints (C<$^H> and C<%^H>)
+at run time, but only during compilation of the $string or required file.
+This makes C<BEGIN { $^H{foo}=7 }> equivalent to
+C<BEGIN { eval '$^H{foo}=7' }> [perl #70151].
+
+=item *
+
+Creating a BEGIN block from XS code (via C<newXS> or C<newATTRSUB>) would,
+on completion, make the hints of the current compiling code the current
+hints. This could cause warnings to occur in a non-warning scope.
+
+=back
+
+=head2 Copy-on-write scalars
+
+Copy-on-write or shared hash key scalars
+were introduced in 5.8.0, but most Perl code
+did not encounter them (they were used mostly internally). Perl
+5.10.0 extended them, such that assigning C<__PACKAGE__> or a
+hash key to a scalar would make it copy-on-write. Several parts
+of Perl were not updated to account for them, but have now been fixed.
+
+=over
+
+=item *
+
+C<utf8::decode> had a nasty bug that would modify copy-on-write scalars'
+string buffers in place (i.e., skipping the copy). This could result in
+hashes having two elements with the same key [perl #91834]. (5.14.2)
+
+=item *
+
+Lvalue subroutines were not allowing COW scalars to be returned. This was
+fixed for lvalue scalar context in Perl 5.12.3 and 5.14.0, but list context
+was not fixed until this release.
+
+=item *
+
+Elements of restricted hashes (see the L<fields> pragma) containing
+copy-on-write values couldn't be deleted, nor could such hashes be cleared
+(C<%hash = ()>). (5.14.2)
+
+=item *
+
+Localizing a tied variable used to make it read-only if it contained a
+copy-on-write string. (5.14.2)
+
+=item *
+
+Assigning a copy-on-write string to a stash
+element no longer causes a double free. Regardless of this change, the
+results of such assignments are still undefined.
+
+=item *
+
+Assigning a copy-on-write string to a tied variable no longer stops that
+variable from being tied if it happens to be a PVMG or PVLV internally.
+
+=item *
+
+Doing a substitution on a tied variable returning a copy-on-write
+scalar used to cause an assertion failure or an "Attempt to free
+nonexistent shared string" warning.
+
+=item *
+
+This one is a regression from 5.12: In 5.14.0, the bitwise assignment
+operators C<|=>, C<^=> and C<&=> started leaving the left-hand side
+undefined if it happened to be a copy-on-write string [perl #108480].
+
+=item *
+
+L<Storable>, L<Devel::Peek> and L<PerlIO::scalar> had similar problems.
+See L</Updated Modules and Pragmata>, above.
+
+=back
+
+=head2 The debugger
+
+=over
+
+=item *
+
+F<dumpvar.pl>, and therefore the C<x> command in the debugger, have been
+fixed to handle objects blessed into classes whose names contain "=". The
+contents of such objects used not to be dumped [perl #101814].
+
+=item *
+
+The "R" command for restarting a debugger session has been fixed to work on
+Windows, or any other system lacking a C<POSIX::_SC_OPEN_MAX> constant
+[perl #87740].
+
+=item *
+
+The C<#line 42 foo> directive used not to update the arrays of lines used
+by the debugger if it occurred in a string eval. This was partially fixed
+in 5.14, but it worked only for a single C<#line 42 foo> in each eval. Now
+it works for multiple.
+
+=item *
+
+When subroutine calls are intercepted by the debugger, the name of the
+subroutine or a reference to it is stored in C<$DB::sub>, for the debugger
+to access. Sometimes (such as C<$foo = *bar; undef *bar; &$foo>)
+C<$DB::sub> would be set to a name that could not be used to find the
+subroutine, and so the debugger's attempt to call it would fail. Now the
+check to see whether a reference is needed is more robust, so those
+problems should not happen anymore [rt.cpan.org #69862].
+
+=item *
+
+Every subroutine has a filename associated with it that the debugger uses.
+The one associated with constant subroutines used to be misallocated when
+cloned under threads. Consequently, debugging threaded applications could
+result in memory corruption [perl #96126].
+
+=back
+
+=head2 Dereferencing operators
+
+=over
+
+=item *
+
+C<defined(${"..."})>, C<defined(*{"..."})>, etc., used to
+return true for most, but not all built-in variables, if
+they had not been used yet. This bug affected C<${^GLOBAL_PHASE}> and
+C<${^UTF8CACHE}>, among others. It also used to return false if the
+package name was given as well (C<${"::!"}>) [perl #97978, #97492].
+
+=item *
+
+Perl 5.10.0 introduced a similar bug: C<defined(*{"foo"})> where "foo"
+represents the name of a built-in global variable used to return false if
+the variable had never been used before, but only on the I<first> call.
+This, too, has been fixed.
+
+=item *
+
+Since 5.6.0, C<*{ ... }> has been inconsistent in how it treats undefined
+values. It would die in strict mode or lvalue context for most undefined
+values, but would be treated as the empty string (with a warning) for the
+specific scalar return by C<undef()> (C<&PL_sv_undef> internally). This
+has been corrected. C<undef()> is now treated like other undefined
+scalars, as in Perl 5.005.
+
+=back
+
+=head2 Filehandle, last-accessed
+
+Perl has an internal variable that stores the last filehandle to be
+accessed. It is used by C<$.> and by C<tell> and C<eof> without
+arguments.
+
+=over
+
+=item *
+
+It used to be possible to set this internal variable to a glob copy and
+then modify that glob copy to be something other than a glob, and still
+have the last-accessed filehandle associated with the variable after
+assigning a glob to it again:
+
+ my $foo = *STDOUT; # $foo is a glob copy
+ <$foo>; # $foo is now the last-accessed handle
+ $foo = 3; # no longer a glob
+ $foo = *STDERR; # still the last-accessed handle
+
+Now the C<$foo = 3> assignment unsets that internal variable, so there
+is no last-accessed filehandle, just as if C<< <$foo> >> had never
+happened.
+
+This also prevents some unrelated handle from becoming the last-accessed
+handle if $foo falls out of scope and the same internal SV gets used for
+another handle [perl #97988].
+
+=item *
+
+A regression in 5.14 caused these statements not to set that internal
+variable:
+
+ my $fh = *STDOUT;
+ tell $fh;
+ eof $fh;
+ seek $fh, 0,0;
+ tell *$fh;
+ eof *$fh;
+ seek *$fh, 0,0;
+ readline *$fh;
+
+This is now fixed, but C<tell *{ *$fh }> still has the problem, and it
+is not clear how to fix it [perl #106536].
+
+=back
+
+=head2 Filetests and C<stat>
+
+The term "filetests" refers to the operators that consist of a hyphen
+followed by a single letter: C<-r>, C<-x>, C<-M>, etc. The term "stacked"
+when applied to filetests means followed by another filetest operator
+sharing the same operand, as in C<-r -x -w $fooo>.
+
+=over
+
+=item *
+
+C<stat> produces more consistent warnings. It no longer warns for "_"
+[perl #71002] and no longer skips the warning at times for other unopened
+handles. It no longer warns about an unopened handle when the operating
+system's C<fstat> function fails.
+
+=item *
+
+C<stat> would sometimes return negative numbers for large inode numbers,
+because it was using the wrong internal C type. [perl #84590]
+
+=item *
+
+C<lstat> is documented to fall back to C<stat> (with a warning) when given
+a filehandle. When passed an IO reference, it was actually doing the
+equivalent of S<C<stat _>> and ignoring the handle.
+
+=item *
+
+C<-T _> with no preceding C<stat> used to produce a
+confusing "uninitialized" warning, even though there
+is no visible uninitialized value to speak of.
+
+=item *
+
+C<-T>, C<-B>, C<-l> and C<-t> now work
+when stacked with other filetest operators
+[perl #77388].
+
+=item *
+
+In 5.14.0, filetest ops (C<-r>, C<-x>, etc.) started calling FETCH on a
+tied argument belonging to the previous argument to a list operator, if
+called with a bareword argument or no argument at all. This has been
+fixed, so C<push @foo, $tied, -r> no longer calls FETCH on C<$tied>.
+
+=item *
+
+In Perl 5.6, C<-l> followed by anything other than a bareword would treat
+its argument as a file name. That was changed in 5.8 for glob references
+(C<\*foo>), but not for globs themselves (C<*foo>). C<-l> started
+returning C<undef> for glob references without setting the last
+stat buffer that the "_" handle uses, but only if warnings
+were turned on. With warnings off, it was the same as 5.6.
+In other words, it was simply buggy and inconsistent. Now the 5.6
+behavior has been restored.
+
+=item *
+
+C<-l> followed by a bareword no longer "eats" the previous argument to
+the list operator in whose argument list it resides. Hence,
+C<print "bar", -l foo> now actually prints "bar", because C<-l>
+on longer eats it.
+
+=item *
+
+Perl keeps several internal variables to keep track of the last stat
+buffer, from which file(handle) it originated, what type it was, and
+whether the last stat succeeded.
+
+There were various cases where these could get out of synch, resulting in
+inconsistent or erratic behavior in edge cases (every mention of C<-T>
+applies to C<-B> as well):
+
+=over
+
+=item *
+
+C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last
+stat type, so an C<lstat _> following it would merrily return the wrong
+results. Also, it was not setting the success status.
+
+=item *
+
+Freeing the handle last used by C<stat> or a filetest could result in
+S<C<-T _>> using an unrelated handle.
+
+=item *
+
+C<stat> with an IO reference would not reset the stat type or record the
+filehandle for S<C<-T _>> to use.
+
+=item *
+
+Fatal warnings could cause the stat buffer not to be reset
+for a filetest operator on an unopened filehandle or C<-l> on any handle.
+Fatal warnings also stopped C<-T> from setting C<$!>.
+
+=item *
+
+When the last stat was on an unreadable file, C<-T _> is supposed to
+return C<undef>, leaving the last stat buffer unchanged. But it was
+setting the stat type, causing C<lstat _> to stop working.
+
+=item *
+
+C<-T I<FILENAME>> was not resetting the internal stat buffers for
+unreadable files.
+
+=back
+
+These have all been fixed.
+
+=back
+
+=head2 Formats
+
+=over
+
+=item *
+
+Several edge cases have been fixed with formats and C<formline>;
+in particular, where the format itself is potentially variable (such as
+with ties and overloading), and where the format and data differ in their
+encoding. In both these cases, it used to possible for the output to be
+corrupted [perl #91032].
+
+=item *
+
+C<formline> no longer converts its argument into a string in-place. So
+passing a reference to C<formline> no longer destroys the reference
+[perl #79532].
+
+=item *
+
+Assignment to C<$^A> (the format output accumulator) now recalculates
+the number of lines output.
+
+=back
+
+=head2 C<given> and C<when>
+
+=over
+
+=item *
+
+C<given> was not scoping its implicit $_ properly, resulting in memory
+leaks or "Variable is not available" warnings [perl #94682].
+
+=item *
+
+C<given> was not calling set-magic on the implicit lexical C<$_> that it
+uses. This meant, for example, that C<pos> would be remembered from one
+execution of the same C<given> block to the next, even if the input were a
+different variable [perl #84526].
+
+=item *
+
+C<when> blocks are now capable of returning variables declared inside the
+enclosing C<given> block [perl #93548].
+
+=back
+
+=head2 The C<glob> operator
+
+=over
+
+=item *
+
+On OSes other than VMS, Perl's C<glob> operator (and the C<< <...> >> form)
+use L<File::Glob> underneath. L<File::Glob> splits the pattern into words,
+before feeding each word to its C<bsd_glob> function.
+
+There were several inconsistencies in the way the split was done. Now
+quotation marks (' and ") are always treated as shell-style word delimiters
+(that allow whitespace as part of a word) and backslashes are always
+preserved, unless they exist to escape quotation marks. Before, those
+would only sometimes be the case, depending on whether the pattern
+contained whitespace. Also, escaped whitespace at the end of the pattern
+is no longer stripped [perl #40470].
+
+=item *
+
+C<CORE::glob> now works as a way to call the default globbing function. It
+used to respect overrides, despite the C<CORE::> prefix.
+
+=item *
+
+Under miniperl (used to configure modules when perl itself is built),
+C<glob> now clears %ENV before calling csh, since the latter croaks on some
+systems if it does not like the contents of the LS_COLORS environment
+variable [perl #98662].
+
+=back
+
+=head2 Lvalue subroutines
+
+=over
+
+=item *
+
+Explicit return now returns the actual argument passed to return, instead
+of copying it [perl #72724, #72706].
+
+=item *
+
+Lvalue subroutines used to enforce lvalue syntax (i.e., whatever can go on
+the left-hand side of C<=>) for the last statement and the arguments to
+return. Since lvalue subroutines are not always called in lvalue context,
+this restriction has been lifted.
+
+=item *
+
+Lvalue subroutines are less restrictive about what values can be returned.
+It used to croak on values returned by C<shift> and C<delete> and from
+other subroutines, but no longer does so [perl #71172].
+
+=item *
+
+Empty lvalue subroutines (C<sub :lvalue {}>) used to return C<@_> in list
+context. All subroutines used to do this, but regular subs were fixed in
+Perl 5.8.2. Now lvalue subroutines have been likewise fixed.
+
+=item *
+
+Autovivification now works on values returned from lvalue subroutines
+[perl #7946], as does returning C<keys> in lvalue context.
+
+=item *
+
+Lvalue subroutines used to copy their return values in rvalue context. Not
+only was this a waste of CPU cycles, but it also caused bugs. A C<($)>
+prototype would cause an lvalue sub to copy its return value [perl #51408],
+and C<while(lvalue_sub() =~ m/.../g) { ... }> would loop endlessly
+[perl #78680].
+
+=item *
+
+When called in potential lvalue context
+(e.g., subroutine arguments or a list
+passed to C<for>), lvalue subroutines used to copy
+any read-only value that was returned. E.g., C< sub :lvalue { $] } >
+would not return C<$]>, but a copy of it.
+
+=item *
+
+When called in potential lvalue context, an lvalue subroutine returning
+arrays or hashes used to bind the arrays or hashes to scalar variables,
+resulting in bugs. This was fixed in 5.14.0 if an array were the first
+thing returned from the subroutine (but not for C<$scalar, @array> or
+hashes being returned). Now a more general fix has been applied
+[perl #23790].
+
+=item *
+
+Method calls whose arguments were all surrounded with C<my()> or C<our()>
+(as in C<< $object->method(my($a,$b)) >>) used to force lvalue context on
+the subroutine. This would prevent lvalue methods from returning certain
+values.
+
+=item *
+
+Lvalue sub calls that are not determined to be such at compile time
+(C<&$name> or &{"name"}) are no longer exempt from strict refs if they
+occur in the last statement of an lvalue subroutine [perl #102486].
+
+=item *
+
+Sub calls whose subs are not visible at compile time, if
+they occurred in the last statement of an lvalue subroutine,
+would reject non-lvalue subroutines and die with "Can't modify non-lvalue
+subroutine call" [perl #102486].
+
+Non-lvalue sub calls whose subs I<are> visible at compile time exhibited
+the opposite bug. If the call occurred in the last statement of an lvalue
+subroutine, there would be no error when the lvalue sub was called in
+lvalue context. Perl would blindly assign to the temporary value returned
+by the non-lvalue subroutine.
+
+=item *
+
+C<AUTOLOAD> routines used to take precedence over the actual sub being
+called (i.e., when autoloading wasn't needed), for sub calls in lvalue or
+potential lvalue context, if the subroutine was not visible at compile
+time.
+
+=item *
+
+Applying the C<:lvalue> attribute to an XSUB or to an aliased subroutine
+stub with C<< sub foo :lvalue; >> syntax stopped working in Perl 5.12.
+This has been fixed.
+
+=item *
+
+Applying the :lvalue attribute to subroutine that is already defined does
+not work properly, as the attribute changes the way the sub is compiled.
+Hence, Perl 5.12 began warning when an attempt is made to apply the
+attribute to an already defined sub. In such cases, the attribute is
+discarded.
+
+But the change in 5.12 missed the case where custom attributes are also
+present: that case still silently and ineffectively applied the attribute.
+That omission has now been corrected. C<sub foo :lvalue :Whatever> (when
+C<foo> is already defined) now warns about the :lvalue attribute, and does
+not apply it.
+
+=item *
+
+A bug affecting lvalue context propagation through nested lvalue subroutine
+calls has been fixed. Previously, returning a value in nested rvalue
+context would be treated as lvalue context by the inner subroutine call,
+resulting in some values (such as read-only values) being rejected.
+
+=back
+
+=head2 Overloading
+
+=over
+
+=item *
+
+Arithmetic assignment (C<$left += $right>) involving overloaded objects
+that rely on the 'nomethod' override no longer segfault when the left
+operand is not overloaded.
+
+=item *
+
+Errors that occur when methods cannot be found during overloading now
+mention the correct package name, as they did in 5.8.x, instead of
+erroneously mentioning the "overload" package, as they have since 5.10.0.
+
+=item *
+
+Undefining C<%overload::> no longer causes a crash.
+
+=back
+
+=head2 Prototypes of built-in keywords
+
+=over
+
+=item *
+
+The C<prototype> function no longer dies for the C<__FILE__>, C<__LINE__>
+and C<__PACKAGE__> directives. It now returns an empty-string prototype
+for them, because they are syntactically indistinguishable from nullary
+functions like C<time>.
+
+=item *
+
+C<prototype> now returns C<undef> for all overridable infix operators,
+such as C<eq>, which are not callable in any way resembling functions.
+It used to return incorrect prototypes for some and die for others
+[perl #94984].
+
+=item *
+
+The prototypes of several built-in functions--C<getprotobynumber>, C<lock>,
+C<not> and C<select>--have been corrected, or at least are now closer to
+reality than before.
+
+=back
+
+=head2 Regular expressions
+
+=for comment Is it possible to merge some of these items?
+
+=over 4
+
+=item *
+
+C</[[:ascii:]]/> and C</[[:blank:]]/> now use locale rules under
+C<use locale> when the platform supports that. Previously, they used
+the platform's native character set.
+
+=item *
+
+C<m/[[:ascii:]]/i> and C</\p{ASCII}/i> now match identically (when not
+under a differing locale). This fixes a regression introduced in 5.14
+in which the first expression could match characters outside of ASCII,
+such as the KELVIN SIGN.
+
+=item *
+
+C</.*/g> would sometimes refuse to match at the end of a string that ends
+with "\n". This has been fixed [perl #109206].
+
+=item *
+
+Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up
+after assigning C<${ qr// }> to a hash element and locking it with
+L<Hash::Util>. This could result in double frees, crashes, or erratic
+behavior.
+
+=item *
+
+The new (in 5.14.0) regular expression modifier C</a> when repeated like
+C</aa> forbids the characters outside the ASCII range that match
+characters inside that range from matching under C</i>. This did not
+work under some circumstances, all involving alternation, such as:
+
+ "\N{KELVIN SIGN}" =~ /k|foo/iaa;
+
+succeeded inappropriately. This is now fixed.
+
+=item *
+
+5.14.0 introduced some memory leaks in regular expression character
+classes such as C<[\w\s]>, which have now been fixed. (5.14.1)
+
+=item *
+
+An edge case in regular expression matching could potentially loop.
+This happened only under C</i> in bracketed character classes that have
+characters with multi-character folds, and the target string to match
+against includes the first portion of the fold, followed by another
+character that has a multi-character fold that begins with the remaining
+portion of the fold, plus some more.
+
+ "s\N{U+DF}" =~ /[\x{DF}foo]/i
+
+is one such case. C<\xDF> folds to C<"ss">. (5.14.1)
+
+=item *
+
+A few characters in regular expression pattern matches did not
+match correctly in some circumstances, all involving C</i>. The
+affected characters are:
+COMBINING GREEK YPOGEGRAMMENI,
+GREEK CAPITAL LETTER IOTA,
+GREEK CAPITAL LETTER UPSILON,
+GREEK PROSGEGRAMMENI,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS,
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA,
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,
+LATIN SMALL LETTER LONG S,
+LATIN SMALL LIGATURE LONG S T,
+and
+LATIN SMALL LIGATURE ST.
+
+=item *
+
+A memory leak regression in regular expression compilation
+under threading has been fixed.
+
+=item *
+
+A regression introduced in 5.14.0 has
+been fixed. This involved an inverted
+bracketed character class in a regular expression that consisted solely
+of a Unicode property. That property wasn't getting inverted outside the
+Latin1 range.
+
+=item *
+
+Three problematic Unicode characters now work better in regex pattern matching under C</i>.
+
+In the past, three Unicode characters:
+LATIN SMALL LETTER SHARP S,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS,
+and
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,
+along with the sequences that they fold to
+(including "ss" for LATIN SMALL LETTER SHARP S),
+did not properly match under C</i>. 5.14.0 fixed some of these cases,
+but introduced others, including a panic when one of the characters or
+sequences was used in the C<(?(DEFINE)> regular expression predicate.
+The known bugs that were introduced in 5.14 have now been fixed; as well
+as some other edge cases that have never worked until now. These all
+involve using the characters and sequences outside bracketed character
+classes under C</i>. This closes [perl #98546].
+
+There remain known problems when using certain characters with
+multi-character folds inside bracketed character classes, including such
+constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>. These
+remaining bugs are addressed in [perl #89774].
+
+=item *
+
+RT #78266: The regex engine has been leaking memory when accessing
+named captures that weren't matched as part of a regex ever since 5.10
+when they were introduced; e.g., this would consume over a hundred MB of
+memory:
+
+ for (1..10_000_000) {
+ if ("foo" =~ /(foo|(?<capture>bar))?/) {
+ my $capture = $+{capture}
+ }
+ }
+ system "ps -o rss $$"'
+
+=item *
+
+In 5.14, C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the
+opposite case. This has been fixed [perl #101970].
+
+=item *
+
+A regular expression match with an overloaded object on the right-hand side
+would sometimes stringify the object too many times.
+
+=item *
+
+A regression has been fixed that was introduced in 5.14, in C</i>
+regular expression matching, in which a match improperly fails if the
+pattern is in UTF-8, the target string is not, and a Latin-1 character
+precedes a character in the string that should match the pattern.
+[perl #101710]
+
+=item *
+
+In case-insensitive regular expression pattern matching, no longer on
+UTF-8 encoded strings does the scan for the start of match look only at
+the first possible position. This caused matches such as
+C<"f\x{FB00}" =~ /ff/i> to fail.
+
+=item *
+
+The regexp optimizer no longer crashes on debugging builds when merging
+fixed-string nodes with inconvenient contents.
+
+=item *
+
+A panic involving the combination of the regular expression modifiers
+C</aa> and the C<\b> escape sequence introduced in 5.14.0 has been
+fixed [perl #95964]. (5.14.2)
+
+=item *
+
+The combination of the regular expression modifiers C</aa> and the C<\b>
+and C<\B> escape sequences did not work properly on UTF-8 encoded
+strings. All non-ASCII characters under C</aa> should be treated as
+non-word characters, but what was happening was that Unicode rules were
+used to determine wordness/non-wordness for non-ASCII characters. This
+is now fixed [perl #95968].
+
+=item *
+
+C<< (?foo: ...) >> no longer loses passed in character set.
+
+=item *
+
+The trie optimization used to have problems with alternations containing
+an empty C<(?:)>, causing C<< "x" =~ /\A(?>(?:(?:)A|B|C?x))\z/ >> not to
+match, whereas it should [perl #111842].
+
+=item *
+
+Use of lexical (C<my>) variables in code blocks embedded in regular
+expressions will no longer result in memory corruption or crashes.
+
+Nevertheless, these code blocks are still experimental, as there are still
+problems with the wrong variables being closed over (in loops for instance)
+and with abnormal exiting (e.g., C<die>) causing memory corruption.
+
+=item *
+
+The C<\h>, C<\H>, C<\v> and C<\V> regular expression metacharacters used to
+cause a panic error message when trying to match at the end of the
+string [perl #96354].
+
+=item *
+
+The abbreviations for four C1 control characters C<MW> C<PM>, C<RI>, and
+C<ST> were previously unrecognized by C<\N{}>, vianame(), and
+string_vianame().
+
+=item *
+
+Mentioning a variable named "&" other than C<$&> (i.e., C<@&> or C<%&>) no
+longer stops C<$&> from working. The same applies to variables named "'"
+and "`" [perl #24237].
+
+=item *
+
+Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
+C<%!> from working some of the time [perl #105024].
+
+=back
+
+=head2 Smartmatching
+
+=over
+
+=item *
+
+C<~~> now correctly handles the precedence of Any~~Object, and is not tricked
+by an overloaded object on the left-hand side.
+
+=item *
+
+In Perl 5.14.0, C<$tainted ~~ @array> stopped working properly. Sometimes
+it would erroneously fail (when C<$tainted> contained a string that occurs
+in the array I<after> the first element) or erroneously succeed (when
+C<undef> occurred after the first element) [perl #93590].
+
+=back
+
+=head2 The C<sort> operator
+
+=over
+
+=item *
+
+C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when
+such a sub was provided as the comparison routine. It used to croak on
+C<sub {()}>.
+
+=item *
+
+C<sort> now works once more with custom sort routines that are XSUBs. It
+stopped working in 5.10.0.
+
+=item *
+
+C<sort> with a constant for a custom sort routine, although it produces
+unsorted results, no longer crashes. It started crashing in 5.10.0.
+
+=item *
+
+Warnings emitted by C<sort> when a custom comparison routine returns a
+non-numeric value now contain "in sort" and show the line number of the
+C<sort> operator, rather than the last line of the comparison routine. The
+warnings also now occur only if warnings are enabled in the scope where
+C<sort> occurs. Previously the warnings would occur if enabled in the
+comparison routine's scope.
+
+=item *
+
+C<< sort { $a <=> $b } >>, which is optimized internally, now produces
+"uninitialized" warnings for NaNs (not-a-number values), since C<< <=> >>
+returns C<undef> for those. This brings it in line with
+S<C<< sort { 1; $a <=> $b } >>> and other more complex cases, which are not
+optimized [perl #94390].
+
+=back
+
+=head2 The C<substr> operator
+
+=over
+
+=item *
+
+Tied (and otherwise magical) variables are no longer exempt from the
+"Attempt to use reference as lvalue in substr" warning.
+
+=item *
+
+That warning now occurs when the returned lvalue is assigned to, not
+when C<substr> itself is called. This makes a difference only if the
+return value of C<substr> is referenced and later assigned to.
+
+=item *
+
+Passing a substring of a read-only value or a typeglob to a function
+(potential lvalue context) no longer causes an immediate "Can't coerce"
+or "Modification of a read-only value" error. That error occurs only
+if the passed value is assigned to.
+
+The same thing happens with the "substr outside of string" error. If
+the lvalue is only read from, not written to, it is now just a warning, as
+with rvalue C<substr>.
+
+=item *
+
+C<substr> assignments no longer call FETCH twice if the first argument
+is a tied variable, just once.
+
+=back
+
+=head2 Support for embedded nulls
+
+Some parts of Perl did not work correctly with nulls (C<chr 0>) embedded in
+strings. That meant that, for instance, C<< $m = "a\0b"; foo->$m >> would
+call the "a" method, instead of the actual method name contained in $m.
+These parts of perl have been fixed to support nulls:
+
+=over
+
+=item *
+
+Method names
+
+=item *
+
+Typeglob names (including filehandle and subroutine names)
+
+=item *
+
+Package names, including the return value of C<ref()>
+
+=item *
+
+Typeglob elements (C<*foo{"THING\0stuff"}>)
+
+=item *
+
+Signal names
+
+=item *
+
+Various warnings and error messages that mention variable names or values,
+methods, etc.
+
+=back
+
+One side effect of these changes is that blessing into "\0" no longer
+causes C<ref()> to return false.
+
+=head2 Threading bugs
+
+=over
+
+=item *
+
+Typeglobs returned from threads are no longer cloned if the parent thread
+already has a glob with the same name. This means that returned
+subroutines will now assign to the right package variables [perl #107366].
+
+=item *
+
+Some cases of threads crashing due to memory allocation during cloning have
+been fixed [perl #90006].
+
+=item *
+
+Thread joining would sometimes emit "Attempt to free unreferenced scalar"
+warnings if C<caller> had been used from the C<DB> package before thread
+creation [perl #98092].
+
+=item *
+
+Locking a subroutine (via C<lock &sub>) is no longer a compile-time error
+for regular subs. For lvalue subroutines, it no longer tries to return the
+sub as a scalar, resulting in strange side effects like C<ref \$_>
+returning "CODE" in some instances.
+
+C<lock &sub> is now a run-time error if L<threads::shared> is loaded (a
+no-op otherwise), but that may be rectified in a future version.
+
+=back
+
+=head2 Tied variables
+
+=over
+
+=item *
+
+Various cases in which FETCH was being ignored or called too many times
+have been fixed:
+
+=over
+
+=item *
+
+C<PerlIO::get_layers> [perl #97956]
+
+=item *
+
+C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> when $tied holds a
+reference.
+
+=item *
+
+When calling C<local $_> [perl #105912]
+
+=item *
+
+Four-argument C<select>
+
+=item *
+
+A tied buffer passed to C<sysread>
+
+=item *
+
+C<< $tied .= <> >>
+
+=item *
+
+Three-argument C<open>, the third being a tied file handle
+(as in C<< open $fh, ">&", $tied >>)
+
+=item *
+
+C<sort> with a reference to a tied glob for the comparison routine.
+
+=item *
+
+C<..> and C<...> in list context [perl #53554].
+
+=item *
+
+C<${$tied}>, C<@{$tied}>, C<%{$tied}> and C<*{$tied}> where the tied
+variable returns a string (C<&{}> was unaffected)
+
+=item *
+
+C<defined ${ $tied_variable }>
+
+=item *
+
+Various functions that take a filehandle argument in rvalue context
+(C<close>, C<readline>, etc.) [perl #97482]
+
+=item *
+
+Some cases of dereferencing a complex expression, such as
+C<${ (), $tied } = 1>, used to call C<FETCH> multiple times, but now call
+it once.
+
+=item *
+
+C<$tied-E<gt>method> where $tied returns a package name--even resulting in
+a failure to call the method, due to memory corruption
+
+=item *
+
+Assignments like C<*$tied = \&{"..."}> and C<*glob = $tied>
+
+=item *
+
+C<chdir>, C<chmod>, C<chown>, C<utime>, C<truncate>, C<stat>, C<lstat> and
+the filetest ops (C<-r>, C<-x>, etc.)
+
+=back
+
+=item *
+
+C<caller> sets C<@DB::args> to the subroutine arguments when called from
+the DB package. It used to crash when doing so if C<@DB::args> happened to
+be tied. Now it croaks instead.
+
+=item *
+
+Tying an element of %ENV or C<%^H> and then deleting that element would
+result in a call to the tie object's DELETE method, even though tying the
+element itself is supposed to be equivalent to tying a scalar (the element
+is, of course, a scalar) [perl #67490].
+
+=item *
+
+When Perl autovivifies an element of a tied array or hash (which entails
+calling STORE with a new reference), it now calls FETCH immediately after
+the STORE, instead of assuming that FETCH would have returned the same
+reference. This can make it easier to implement tied objects [perl #35865, #43011].
+
+=item *
+
+Four-argument C<select> no longer produces its "Non-string passed as
+bitmask" warning on tied or tainted variables that are strings.
+
+=item *
+
+Localizing a tied scalar that returns a typeglob no longer stops it from
+being tied till the end of the scope.
+
+=item *
+
+Attempting to C<goto> out of a tied handle method used to cause memory
+corruption or crashes. Now it produces an error message instead
+[perl #8611].
+
+=item *
+
+A bug has been fixed that occurs when a tied variable is used as a
+subroutine reference: if the last thing assigned to or returned from the
+variable was a reference or typeglob, the C<\&$tied> could either crash or
+return the wrong subroutine. The reference case is a regression introduced
+in Perl 5.10.0. For typeglobs, it has probably never worked till now.
+
+=back
+
+=head2 Version objects and vstrings
+
+=over
+
+=item *
+
+The bitwise complement operator (and possibly other operators, too) when
+passed a vstring would leave vstring magic attached to the return value,
+even though the string had changed. This meant that
+C<< version->new(~v1.2.3) >> would create a version looking like "v1.2.3"
+even though the string passed to C<< version->new >> was actually
+"\376\375\374". This also caused L<B::Deparse> to deparse C<~v1.2.3>
+incorrectly, without the C<~> [perl #29070].
+
+=item *
+
+Assigning a vstring to a magic (e.g., tied, C<$!>) variable and then
+assigning something else used to blow away all magic. This meant that
+tied variables would come undone, C<$!> would stop getting updated on
+failed system calls, C<$|> would stop setting autoflush, and other
+mischief would take place. This has been fixed.
+
+=item *
+
+C<< version->new("version") >> and C<printf "%vd", "version"> no longer
+crash [perl #102586].
+
+=item *
+
+Version comparisons, such as those that happen implicitly with C<use
+v5.43>, no longer cause locale settings to change [perl #105784].
+
+=item *
+
+Version objects no longer cause memory leaks in boolean context
+[perl #109762].
+
+=back
+
+=head2 Warnings, redefinition
+
+=over
+
+=item *
+
+Subroutines from the C<autouse> namespace are once more exempt from
+redefinition warnings. This used to work in 5.005, but was broken in
+5.6 for most subroutines. For subs created via XS that redefine
+subroutines from the C<autouse> package, this stopped working in 5.10.
+
+=item *
+
+New XSUBs now produce redefinition warnings if they overwrite existing
+subs, as they did in 5.8.x. (The C<autouse> logic was reversed in
+5.10-14. Only subroutines from the C<autouse> namespace would warn
+when clobbered.)
+
+=item *
+
+C<newCONSTSUB> used to use compile-time warning hints, instead of
+run-time hints. The following code should never produce a redefinition
+warning, but it used to, if C<newCONSTSUB> redefined an existing
+subroutine:
+
+ use warnings;
+ BEGIN {
+ no warnings;
+ some_XS_function_that_calls_new_CONSTSUB();
+ }
+
+=item *
+
+Redefinition warnings for constant subroutines are on by default (what
+are known as severe warnings in L<perldiag>). This occurred only
+when it was a glob assignment or declaration of a Perl subroutine that
+caused the warning. If the creation of XSUBs triggered the warning, it
+was not a default warning. This has been corrected.
+
+=item *
+
+The internal check to see whether a redefinition warning should occur
+used to emit "uninitialized" warnings in cases like this:
+
+ use warnings "uninitialized";
+ use constant {u => undef, v => undef};
+ sub foo(){u}
+ sub foo(){v}
+
+=back
+
+=head2 Warnings, "Uninitialized"
+
+=over
+
+=item *
+
+Various functions that take a filehandle argument in rvalue context
+(C<close>, C<readline>, etc.) used to warn twice for an undefined handle
+[perl #97482].
+
+=item *
+
+C<dbmopen> now only warns once, rather than three times, if the mode
+argument is C<undef> [perl #90064].
+
+=item *
+
+The C<+=> operator does not usually warn when the left-hand side is
+C<undef>, but it was doing so for tied variables. This has been fixed
+[perl #44895].
+
+=item *
+
+A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
+warnings to report the wrong variable if the operator in question had
+two operands and one was C<%{...}> or C<@{...}>. This has been fixed
+[perl #103766].
+
+=item *
+
+C<..> and C<...> in list context now mention the name of the variable in
+"uninitialized" warnings for string (as opposed to numeric) ranges.
+
+=back
+
+=head2 Weak references
+
+=over
+
+=item *
+
+Weakening the first argument to an automatically-invoked C<DESTROY> method
+could result in erroneous "DESTROY created new reference" errors or
+crashes. Now it is an error to weaken a read-only reference.
+
+=item *
+
+Weak references to lexical hashes going out of scope were not going stale
+(becoming undefined), but continued to point to the hash.
+
+=item *
+
+Weak references to lexical variables going out of scope are now broken
+before any magical methods (e.g., DESTROY on a tie object) are called.
+This prevents such methods from modifying the variable that will be seen
+the next time the scope is entered.
+
+=item *
+
+Creating a weak reference to an @ISA array or accessing the array index
+(C<$#ISA>) could result in confused internal bookkeeping for elements
+later added to the @ISA array. For instance, creating a weak
+reference to the element itself could push that weak reference on to @ISA;
+and elements added after use of C<$#ISA> would be ignored by method lookup
+[perl #85670].
+
+=back
+
+=head2 Other notable fixes
+
+=over
+
+=item *
+
+C<quotemeta> now quotes consistently the same non-ASCII characters under
+C<use feature 'unicode_strings'>, regardless of whether the string is
+encoded in UTF-8 or not, hence fixing the last vestiges (we hope) of the
+notorious L<perlunicode/The "Unicode Bug">. [perl #77654].
+
+Which of these code points is quoted has changed, based on Unicode's
+recommendations. See L<perlfunc/quotemeta> for details.
+
+=item *
+
+C<study> is now a no-op, presumably fixing all outstanding bugs related to
+study causing regex matches to behave incorrectly!
+
+=item *
+
+When one writes C<open foo || die>, which used to work in Perl 4, a
+"Precedence problem" warning is produced. This warning used erroneously to
+apply to fully-qualified bareword handle names not followed by C<||>. This
+has been corrected.
+
+=item *
+
+After package aliasing (C<*foo:: = *bar::>), C<select> with 0 or 1 argument
+would sometimes return a name that could not be used to refer to the
+filehandle, or sometimes it would return C<undef> even when a filehandle
+was selected. Now it returns a typeglob reference in such cases.
+
+=item *
+
+C<PerlIO::get_layers> no longer ignores some arguments that it thinks are
+numeric, while treating others as filehandle names. It is now consistent
+for flat scalars (i.e., not references).
+
+=item *
+
+Unrecognized switches on C<#!> line
+
+If a switch, such as B<-x>, that cannot occur on the C<#!> line is used
+there, perl dies with "Can't emulate...".
+
+It used to produce the same message for switches that perl did not
+recognize at all, whether on the command line or the C<#!> line.
+
+Now it produces the "Unrecognized switch" error message [perl #104288].
+
+=item *
+
+C<system> now temporarily blocks the SIGCHLD signal handler, to prevent the
+signal handler from stealing the exit status [perl #105700].
+
+=item *
+
+The %n formatting code for C<printf> and C<sprintf>, which causes the number
+of characters to be assigned to the next argument, now actually
+assigns the number of characters, instead of the number of bytes.
+
+It also works now with special lvalue functions like C<substr> and with
+nonexistent hash and array elements [perl #3471, #103492].
+
+=item *
+
+Perl skips copying values returned from a subroutine, for the sake of
+speed, if doing so would make no observable difference. Because of faulty
+logic, this would happen with the
+result of C<delete>, C<shift> or C<splice>, even if the result was
+referenced elsewhere. It also did so with tied variables about to be freed
+[perl #91844, #95548].
+
+=item *
+
+C<utf8::decode> now refuses to modify read-only scalars [perl #91850].
+
+=item *
+
+Freeing $_ inside a C<grep> or C<map> block, a code block embedded in a
+regular expression, or an @INC filter (a subroutine returned by a
+subroutine in @INC) used to result in double frees or crashes
+[perl #91880, #92254, #92256].
+
+=item *
+
+C<eval> returns C<undef> in scalar context or an empty list in list
+context when there is a run-time error. When C<eval> was passed a
+string in list context and a syntax error occurred, it used to return a
+list containing a single undefined element. Now it returns an empty
+list in list context for all errors [perl #80630].
+
+=item *
+
+C<goto &func> no longer crashes, but produces an error message, when
+the unwinding of the current subroutine's scope fires a destructor that
+undefines the subroutine being "goneto" [perl #99850].
+
+=item *
+
+Perl now holds an extra reference count on the package that code is
+currently compiling in. This means that the following code no longer
+crashes [perl #101486]:
+
+ package Foo;
+ BEGIN {*Foo:: = *Bar::}
+ sub foo;
+
+=item *
+
+The C<x> repetition operator no longer crashes on 64-bit builds with large
+repeat counts [perl #94560].
+
+=item *
+
+Calling C<require> on an implicit C<$_> when C<*CORE::GLOBAL::require> has
+been overridden does not segfault anymore, and C<$_> is now passed to the
+overriding subroutine [perl #78260].
+
+=item *
+
+C<use> and C<require> are no longer affected by the I/O layers active in
+the caller's scope (enabled by L<open.pm|open>) [perl #96008].
+
+=item *
+
+C<our $::é; $é> (which is invalid) no longer produces the "Compilation
+error at lib/utf8_heavy.pl..." error message, which it started emitting in
+5.10.0 [perl #99984].
+
+=item *
+
+On 64-bit systems, C<read()> now understands large string offsets beyond
+the 32-bit range.
+
+=item *
+
+Errors that occur when processing subroutine attributes no longer cause the
+subroutine's op tree to leak.
+
+=item *
+
+Passing the same constant subroutine to both C<index> and C<formline> no
+longer causes one or the other to fail [perl #89218]. (5.14.1)
+
+=item *
+
+List assignment to lexical variables declared with attributes in the same
+statement (C<my ($x, at y) : blimp = (72,94)>) stopped working in Perl 5.8.0.
+It has now been fixed.
+
+=item *
+
+Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of
+a pack template equivalent to "U0" if the input string was empty. This has
+been fixed [perl #90160]. (5.14.2)
+
+=item *
+
+Destructors on objects were not called during global destruction on objects
+that were not referenced by any scalars. This could happen if an array
+element were blessed (e.g., C<bless \$a[0]>) or if a closure referenced a
+blessed variable (C<bless \my @a; sub foo { @a }>).
+
+Now there is an extra pass during global destruction to fire destructors on
+any objects that might be left after the usual passes that check for
+objects referenced by scalars [perl #36347].
+
+=item *
+
+Fixed a case where it was possible that a freed buffer may have been read
+from when parsing a here document [perl #90128]. (5.14.1)
+
+=item *
+
+C<each(I<ARRAY>)> is now wrapped in C<defined(...)>, like C<each(I<HASH>)>,
+inside a C<while> condition [perl #90888].
+
+=item *
+
+A problem with context propagation when a C<do> block is an argument to
+C<return> has been fixed. It used to cause C<undef> to be returned in
+certain cases of a C<return> inside an C<if> block which itself is followed by
+another C<return>.
+
+=item *
+
+Calling C<index> with a tainted constant no longer causes constants in
+subsequently compiled code to become tainted [perl #64804].
+
+=item *
+
+Infinite loops like C<1 while 1> used to stop C<strict 'subs'> mode from
+working for the rest of the block.
+
+=item *
+
+For list assignments like C<($a,$b) = ($b,$a)>, Perl has to make a copy of
+the items on the right-hand side before assignment them to the left. For
+efficiency's sake, it assigns the values on the right straight to the items
+on the left if no one variable is mentioned on both sides, as in C<($a,$b) =
+($c,$d)>. The logic for determining when it can cheat was faulty, in that
+C<&&> and C<||> on the right-hand side could fool it. So C<($a,$b) =
+$some_true_value && ($b,$a)> would end up assigning the value of C<$b> to
+both scalars.
+
+=item *
+
+Perl no longer tries to apply lvalue context to the string in
+C<("string", $variable) ||= 1> (which used to be an error). Since the
+left-hand side of C<||=> is evaluated in scalar context, that's a scalar
+comma operator, which gives all but the last item void context. There is
+no such thing as void lvalue context, so it was a mistake for Perl to try
+to force it [perl #96942].
+
+=item *
+
+C<caller> no longer leaks memory when called from the DB package if
+C<@DB::args> was assigned to after the first call to C<caller>. L<Carp>
+was triggering this bug [perl #97010]. (5.14.2)
+
+=item *
+
+C<close> and similar filehandle functions, when called on built-in global
+variables (like C<$+>), used to die if the variable happened to hold the
+undefined value, instead of producing the usual "Use of uninitialized
+value" warning.
+
+=item *
+
+When autovivified file handles were introduced in Perl 5.6.0, C<readline>
+was inadvertently made to autovivify when called as C<readline($foo)> (but
+not as C<E<lt>$fooE<gt>>). It has now been fixed never to autovivify.
+
+=item *
+
+Calling an undefined anonymous subroutine (e.g., what $x holds after
+C<undef &{$x = sub{}}>) used to cause a "Not a CODE reference" error, which
+has been corrected to "Undefined subroutine called" [perl #71154].
+
+=item *
+
+Causing C<@DB::args> to be freed between uses of C<caller> no longer
+results in a crash [perl #93320].
+
+=item *
+
+C<setpgrp($foo)> used to be equivalent to C<($foo, setpgrp)>, because
+C<setpgrp> was ignoring its argument if there was just one. Now it is
+equivalent to C<setpgrp($foo,0)>.
+
+=item *
+
+C<shmread> was not setting the scalar flags correctly when reading from
+shared memory, causing the existing cached numeric representation in the
+scalar to persist [perl #98480].
+
+=item *
+
+C<++> and C<--> now work on copies of globs, instead of dying.
+
+=item *
+
+C<splice()> doesn't warn when truncating
+
+You can now limit the size of an array using C<splice(@a,MAX_LEN)> without
+worrying about warnings.
+
+=item *
+
+C<< $$ >> is no longer tainted. Since this value comes directly from
+C<< getpid() >>, it is always safe.
+
+=item *
+
+The parser no longer leaks a filehandle if STDIN was closed before parsing
+started [perl #37033].
+
+=item *
+
+C<< die; >> with a non-reference, non-string, or magical (e.g., tainted)
+value in $@ now properly propagates that value [perl #111654].
+
+=back
+
+=head1 Known Problems
+
+=over 4
+
+=item *
+
+On Solaris, we have two kinds of failure.
+
+If F<make> is Sun's F<make>, we get an error about a badly formed macro
+assignment in the F<Makefile>. That happens when F<./Configure> tries to
+make depends. F<Configure> then exits 0, but further F<make>-ing fails.
+
+If F<make> is F<gmake>, F<Configure> completes, then we get errors related
+to F</usr/include/stdbool.h>
+
+=item *
+
+On Win32, a number of tests hang unless STDERR is redirected. The cause of
+this is still under investigation.
+
+=item *
+
+When building as root with a umask that prevents files from being
+other-readable, F<t/op/filetest.t> will fail. This is a test bug, not a
+bug in perl's behavior.
+
+=item *
+
+Configuring with a recent gcc and link-time-optimization, such as
+C<Configure -Doptimize='-O2 -flto'> fails
+because the optimizer optimizes away some of Configure's tests. A
+workaround is to omit the C<-flto> flag when running Configure, but add
+it back in while actually building, something like
+
+ sh Configure -Doptimize=-O2
+ make OPTIMIZE='-O2 -flto'
+
+=item *
+
+The following CPAN modules have test failures with perl 5.16. Patches have
+been submitted for all of these, so hopefully there will be new releases
+soon:
+
+=over
+
+=item *
+
+L<Date::Pcalc> version 6.1
+
+=item *
+
+L<Module::CPANTS::Analyse> version 0.85
+
+This fails due to problems in L<Module::Find> 0.10 and L<File::MMagic>
+1.27.
+
+=item *
+
+L<PerlIO::Util> version 0.72
+
+=back
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.16.0 represents approximately 12 months of development since Perl
+5.14.0 and contains approximately 590,000 lines of changes across 2,500
+files from 139 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.16.0:
+
+Aaron Crane, Abhijit Menon-Sen, Abigail, Alan Haggai Alavi, Alberto
+Simões, Alexandr Ciornii, Andreas König, Andy Dougherty, Aristotle
+Pagaltzis, Bo Johansson, Bo Lindbergh, Breno G. de Oliveira, brian d
+foy, Brian Fraser, Brian Greenfield, Carl Hayter, Chas. Owens,
+Chia-liang Kao, Chip Salzenberg, Chris 'BinGOs' Williams, Christian
+Hansen, Christopher J. Madsen, chromatic, Claes Jacobsson, Claudio
+Ramirez, Craig A. Berry, Damian Conway, Daniel Kahn Gillmor, Darin
+McBride, Dave Rolsky, David Cantrell, David Golden, David Leadbeater,
+David Mitchell, Dee Newcum, Dennis Kaarsemaker, Dominic Hargreaves,
+Douglas Christopher Wilson, Eric Brine, Father Chrysostomos, Florian
+Ragwitz, Frederic Briere, George Greer, Gerard Goossen, Gisle Aas,
+H.Merijn Brand, Hojung Youn, Ian Goodacre, James E Keenan, Jan Dubois,
+Jerry D. Hedden, Jesse Luehrs, Jesse Vincent, Jilles Tjoelker, Jim
+Cromie, Jim Meyering, Joel Berger, Johan Vromans, Johannes Plunien, John
+Hawkinson, John P. Linderman, John Peacock, Joshua ben Jore, Juerd
+Waalboer, Karl Williamson, Karthik Rajagopalan, Keith Thompson, Kevin J.
+Woolley, Kevin Ryde, Laurent Dami, Leo Lapworth, Leon Brocard, Leon
+Timmermans, Louis Strous, Lukas Mai, Marc Green, Marcel Grünauer, Mark
+A. Stratman, Mark Dootson, Mark Jason Dominus, Martin Hasch, Matthew
+Horsfall, Max Maischein, Michael G Schwern, Michael Witten, Mike
+Sheldrake, Moritz Lenz, Nicholas Clark, Niko Tyni, Nuno Carvalho, Pau
+Amma, Paul Evans, Paul Green, Paul Johnson, Perlover, Peter John Acklam,
+Peter Martini, Peter Scott, Phil Monsen, Pino Toscano, Rafael
+Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes, Robin Barker,
+Rodolfo Carvalho, Salvador Fandiño, Sam Kimbrel, Samuel Thibault, Shawn
+M Moore, Shigeya Suzuki, Shirakata Kentaro, Shlomi Fish, Sisyphus,
+Slaven Rezic, Spiros Denaxas, Steffen Müller, Steffen Schwigon, Stephen
+Bennett, Stephen Oberholtzer, Stevan Little, Steve Hay, Steve Peters,
+Thomas Sibley, Thorsten Glaser, Timothe Litt, Todd Rinaldo, Tom
+Christiansen, Tom Hukins, Tony Cook, Vadim Konovalov, Vincent Pit,
+Vladimir Timofeev, Walt Mankowski, Yves Orton, Zefram, Zsbán Ambrus,
+Ævar Arnfjörð Bjarmason.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
+
+Many of the changes included in this version originated in the CPAN
+modules included in Perl's core. We're grateful to the entire CPAN
+community for helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors,
+please see the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at L<http://rt.perl.org/perlbug/>. There may also be
+information at L<http://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please
+send it to perl5-security-report at perl.org. This points to a closed
+subscription unarchived mailing list, which includes all core
+committers, who will be able to help assess the impact of issues, figure
+out a resolution, and help co-ordinate the release of patches to
+mitigate or fix the problem across all platforms on which Perl is
+supported. Please use this address only for security issues in the Perl
+core, not for modules independently distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5161delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5161delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5161delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,198 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5161delta - what is new for perl v5.16.1
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.16.0 release and
+the 5.16.1 release.
+
+If you are upgrading from an earlier release such as 5.14.0, first read
+L<perl5160delta>, which describes differences between 5.14.0 and
+5.16.0.
+
+=head1 Security
+
+=head2 an off-by-two error in Scalar-List-Util has been fixed
+
+The bugfix was in Scalar-List-Util 1.23_04, and perl 5.16.1 includes
+Scalar-List-Util 1.25.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.16.0 If any
+exist, they are bugs, and we request that you submit a report. See
+L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Scalar::Util> and L<List::Util> have been upgraded from version 1.23 to
+version 1.25.
+
+=item *
+
+L<B::Deparse> has been updated from version 1.14 to 1.14_01. An
+"uninitialized" warning emitted by B::Deparse has been squashed
+[perl #113464].
+
+=back
+
+=head1 Configuration and Compilation
+
+=over
+
+=item *
+
+Building perl with some Windows compilers used to fail due to a problem
+with miniperl's C<glob> operator (which uses the C<perlglob> program)
+deleting the PATH environment variable [perl #113798].
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item VMS
+
+All C header files from the top-level directory of the distribution are now
+installed on VMS, providing consistency with a long-standing practice on other
+platforms. Previously only a subset were installed, which broke non-core extension
+builds for extensions that depended on the missing include files.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+A regression introduced in Perl v5.16.0 involving
+C<tr/I<SEARCHLIST>/I<REPLACEMENTLIST>/> has been fixed. Only the first
+instance is supposed to be meaningful if a character appears more than
+once in C<I<SEARCHLIST>>. Under some circumstances, the final instance
+was overriding all earlier ones. [perl #113584]
+
+=item *
+
+C<B::COP::stashlen> has been added. This provides access to an internal
+field added in perl 5.16 under threaded builds. It was broken at the last
+minute before 5.16 was released [perl #113034].
+
+=item *
+
+The L<re> pragma will no longer clobber C<$_>. [perl #113750]
+
+=item *
+
+Unicode 6.1 published an incorrect alias for one of the
+Canonical_Combining_Class property's values (which range between 0 and
+254). The alias C<CCC133> should have been C<CCC132>. Perl now
+overrides the data file furnished by Unicode to give the correct value.
+
+=item *
+
+Duplicating scalar filehandles works again. [perl #113764]
+
+=item *
+
+Under threaded perls, a runtime code block in a regular expression could
+corrupt the package name stored in the op tree, resulting in bad reads
+in C<caller>, and possibly crashes [perl #113060].
+
+=item *
+
+For efficiency's sake, many operators and built-in functions return the
+same scalar each time. Lvalue subroutines and subroutines in the CORE::
+namespace were allowing this implementation detail to leak through.
+C<print &CORE::uc("a"), &CORE::uc("b")> used to print "BB". The same thing
+would happen with an lvalue subroutine returning the return value of C<uc>.
+Now the value is copied in such cases [perl #113044].
+
+=item *
+
+C<__SUB__> now works in special blocks (C<BEGIN>, C<END>, etc.).
+
+=item *
+
+Formats that reference lexical variables from outside no longer result
+in crashes.
+
+=back
+
+=head1 Known Problems
+
+There are no new known problems, but consult L<perl5160delta/Known
+Problems> to see those identified in the 5.16.0 release.
+
+=head1 Acknowledgements
+
+Perl 5.16.1 represents approximately 2 months of development since Perl
+5.16.0 and contains approximately 14,000 lines of changes across 96
+files from 8 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.16.1:
+
+Chris 'BinGOs' Williams, Craig A. Berry, Father Chrysostomos, Karl
+Williamson, Paul Johnson, Reini Urban, Ricardo Signes, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
+
+Many of the changes included in this version originated in the CPAN
+modules included in Perl's core. We're grateful to the entire CPAN
+community for helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors,
+please see the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://rt.perl.org/perlbug/ . There may also be
+information at http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please
+send it to perl5-security-report at perl.org. This points to a closed
+subscription unarchived mailing list, which includes all the core
+committers, who will be able to help assess the impact of issues, figure
+out a resolution, and help co-ordinate the release of patches to
+mitigate or fix the problem across all platforms on which Perl is
+supported. Please only use this address for security issues in the Perl
+core, not for modules independently distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5162delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5162delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5162delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,125 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5162delta - what is new for perl v5.16.2
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.16.1 release and
+the 5.16.2 release.
+
+If you are upgrading from an earlier release such as 5.16.0, first read
+L<perl5161delta>, which describes differences between 5.16.0 and
+5.16.1.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.16.0
+If any exist, they are bugs, and we request that you submit a
+report. See L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 2.70 to version 2.76.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item * configuration should no longer be confused by ls colorization
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item AIX
+
+Configure now always adds -qlanglvl=extc99 to the CC flags on AIX when
+using xlC. This will make it easier to compile a number of XS-based modules
+that assume C99 [perl #113778].
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item * fix /\h/ equivalence with /[\h]/
+
+see [perl #114220]
+
+=back
+
+=head1 Known Problems
+
+There are no new known problems.
+
+=head1 Acknowledgements
+
+Perl 5.16.2 represents approximately 2 months of development since Perl
+5.16.1 and contains approximately 740 lines of changes across 20 files
+from 9 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl 5.16.2:
+
+Andy Dougherty, Craig A. Berry, Darin McBride, Dominic Hargreaves, Karen
+Etheridge, Karl Williamson, Peter Martini, Ricardo Signes, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
+
+For a more complete list of all of Perl's historical contributors,
+please see the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://rt.perl.org/perlbug/ . There may also be
+information at http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please
+send it to perl5-security-report at perl.org. This points to a closed
+subscription unarchived mailing list, which includes all the core
+committers, who will be able to help assess the impact of issues, figure
+out a resolution, and help co-ordinate the release of patches to
+mitigate or fix the problem across all platforms on which Perl is
+supported. Please only use this address for security issues in the Perl
+core, not for modules independently distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5163delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5163delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5163delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,133 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5163delta - what is new for perl v5.16.3
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.16.2 release and
+the 5.16.3 release.
+
+If you are upgrading from an earlier release such as 5.16.1, first read
+L<perl5162delta>, which describes differences between 5.16.1 and
+5.16.2.
+
+=head1 Core Enhancements
+
+No changes since 5.16.0.
+
+=head1 Security
+
+This release contains one major and a number of minor security fixes.
+These latter are included mainly to allow the test suite to pass cleanly
+with the clang compiler's address sanitizer facility.
+
+=head2 CVE-2013-1667: memory exhaustion with arbitrary hash keys
+
+With a carefully crafted set of hash keys (for example arguments on a
+URL), it is possible to cause a hash to consume a large amount of memory
+and CPU, and thus possibly to achieve a Denial-of-Service.
+
+This problem has been fixed.
+
+=head2 wrap-around with IO on long strings
+
+Reading or writing strings greater than 2**31 bytes in size could segfault
+due to integer wraparound.
+
+This problem has been fixed.
+
+=head2 memory leak in Encode
+
+The UTF-8 encoding implementation in Encode.xs had a memory leak which has been
+fixed.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.16.0. If any
+exist, they are bugs and reports are welcome.
+
+=head1 Deprecations
+
+There have been no deprecations since 5.16.0.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Encode> has been upgraded from version 2.44 to version 2.44_01.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 2.76 to version 2.76_02.
+
+=item *
+
+L<XS::APItest> has been upgraded from version 0.38 to version 0.39.
+
+=back
+
+=head1 Known Problems
+
+None.
+
+=head1 Acknowledgements
+
+Perl 5.16.3 represents approximately 4 months of development since Perl 5.16.2
+and contains approximately 870 lines of changes across 39 files from 7 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.16.3:
+
+Andy Dougherty, Chris 'BinGOs' Williams, Dave Rolsky, David Mitchell, Michael
+Schroeder, Ricardo Signes, Yves Orton.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at http://rt.perl.org/perlbug/ . There may also be
+information at http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug>
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of C<perl -V>, will be sent off to perlbug at perl.org to be
+analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please
+send it to perl5-security-report at perl.org. This points to a closed
+subscription unarchived mailing list, which includes all the core
+committers, who will be able to help assess the impact of issues, figure
+out a resolution, and help co-ordinate the release of patches to
+mitigate or fix the problem across all platforms on which Perl is
+supported. Please only use this address for security issues in the Perl
+core, not for modules independently distributed on CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details
+on what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perl5180delta.pod
===================================================================
--- vendor/perl/dist/pod/perl5180delta.pod (rev 0)
+++ vendor/perl/dist/pod/perl5180delta.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3781 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5180delta - what is new for perl v5.18.0
+
+=head1 DESCRIPTION
+
+This document describes differences between the v5.16.0 release and the v5.18.0
+release.
+
+If you are upgrading from an earlier release such as v5.14.0, first read
+L<perl5160delta>, which describes differences between v5.14.0 and v5.16.0.
+
+=head1 Core Enhancements
+
+=head2 New mechanism for experimental features
+
+Newly-added experimental features will now require this incantation:
+
+ no warnings "experimental::feature_name";
+ use feature "feature_name"; # would warn without the prev line
+
+There is a new warnings category, called "experimental", containing
+warnings that the L<feature> pragma emits when enabling experimental
+features.
+
+Newly-added experimental features will also be given special warning IDs,
+which consist of "experimental::" followed by the name of the feature. (The
+plan is to extend this mechanism eventually to all warnings, to allow them
+to be enabled or disabled individually, and not just by category.)
+
+By saying
+
+ no warnings "experimental::feature_name";
+
+you are taking responsibility for any breakage that future changes to, or
+removal of, the feature may cause.
+
+Since some features (like C<~~> or C<my $_>) now emit experimental warnings,
+and you may want to disable them in code that is also run on perls that do not
+recognize these warning categories, consider using the C<if> pragma like this:
+
+ no if $] >= 5.018, warnings => "experimental::feature_name";
+
+Existing experimental features may begin emitting these warnings, too. Please
+consult L<perlexperiment> for information on which features are considered
+experimental.
+
+=head2 Hash overhaul
+
+Changes to the implementation of hashes in perl v5.18.0 will be one of the most
+visible changes to the behavior of existing code.
+
+By default, two distinct hash variables with identical keys and values may now
+provide their contents in a different order where it was previously identical.
+
+When encountering these changes, the key to cleaning up from them is to accept
+that B<hashes are unordered collections> and to act accordingly.
+
+=head3 Hash randomization
+
+The seed used by Perl's hash function is now random. This means that the
+order which keys/values will be returned from functions like C<keys()>,
+C<values()>, and C<each()> will differ from run to run.
+
+This change was introduced to make Perl's hashes more robust to algorithmic
+complexity attacks, and also because we discovered that it exposes hash
+ordering dependency bugs and makes them easier to track down.
+
+Toolchain maintainers might want to invest in additional infrastructure to
+test for things like this. Running tests several times in a row and then
+comparing results will make it easier to spot hash order dependencies in
+code. Authors are strongly encouraged not to expose the key order of
+Perl's hashes to insecure audiences.
+
+Further, every hash has its own iteration order, which should make it much
+more difficult to determine what the current hash seed is.
+
+=head3 New hash functions
+
+Perl v5.18 includes support for multiple hash functions, and changed
+the default (to ONE_AT_A_TIME_HARD), you can choose a different
+algorithm by defining a symbol at compile time. For a current list,
+consult the F<INSTALL> document. Note that as of Perl v5.18 we can
+only recommend use of the default or SIPHASH. All the others are
+known to have security issues and are for research purposes only.
+
+=head3 PERL_HASH_SEED environment variable now takes a hex value
+
+C<PERL_HASH_SEED> no longer accepts an integer as a parameter;
+instead the value is expected to be a binary value encoded in a hex
+string, such as "0xf5867c55039dc724". This is to make the
+infrastructure support hash seeds of arbitrary lengths, which might
+exceed that of an integer. (SipHash uses a 16 byte seed.)
+
+=head3 PERL_PERTURB_KEYS environment variable added
+
+The C<PERL_PERTURB_KEYS> environment variable allows one to control the level of
+randomization applied to C<keys> and friends.
+
+When C<PERL_PERTURB_KEYS> is 0, perl will not randomize the key order at all. The
+chance that C<keys> changes due to an insert will be the same as in previous
+perls, basically only when the bucket size is changed.
+
+When C<PERL_PERTURB_KEYS> is 1, perl will randomize keys in a non-repeatable
+way. The chance that C<keys> changes due to an insert will be very high. This
+is the most secure and default mode.
+
+When C<PERL_PERTURB_KEYS> is 2, perl will randomize keys in a repeatable way.
+Repeated runs of the same program should produce the same output every time.
+
+C<PERL_HASH_SEED> implies a non-default C<PERL_PERTURB_KEYS> setting. Setting
+C<PERL_HASH_SEED=0> (exactly one 0) implies C<PERL_PERTURB_KEYS=0> (hash key
+randomization disabled); settng C<PERL_HASH_SEED> to any other value implies
+C<PERL_PERTURB_KEYS=2> (deterministic and repeatable hash key randomization).
+Specifying C<PERL_PERTURB_KEYS> explicitly to a different level overrides this
+behavior.
+
+=head3 Hash::Util::hash_seed() now returns a string
+
+Hash::Util::hash_seed() now returns a string instead of an integer. This
+is to make the infrastructure support hash seeds of arbitrary lengths
+which might exceed that of an integer. (SipHash uses a 16 byte seed.)
+
+=head3 Output of PERL_HASH_SEED_DEBUG has been changed
+
+The environment variable PERL_HASH_SEED_DEBUG now makes perl show both the
+hash function perl was built with, I<and> the seed, in hex, in use for that
+process. Code parsing this output, should it exist, must change to accommodate
+the new format. Example of the new format:
+
+ $ PERL_HASH_SEED_DEBUG=1 ./perl -e1
+ HASH_FUNCTION = MURMUR3 HASH_SEED = 0x1476bb9f
+
+=head2 Upgrade to Unicode 6.2
+
+Perl now supports Unicode 6.2. A list of changes from Unicode
+6.1 is at L<http://www.unicode.org/versions/Unicode6.2.0>.
+
+=head2 Character name aliases may now include non-Latin1-range characters
+
+It is possible to define your own names for characters for use in
+C<\N{...}>, C<charnames::vianame()>, etc. These names can now be
+comprised of characters from the whole Unicode range. This allows for
+names to be in your native language, and not just English. Certain
+restrictions apply to the characters that may be used (you can't define
+a name that has punctuation in it, for example). See L<charnames/CUSTOM
+ALIASES>.
+
+=head2 New DTrace probes
+
+The following new DTrace probes have been added:
+
+=over 4
+
+=item *
+
+C<op-entry>
+
+=item *
+
+C<loading-file>
+
+=item *
+
+C<loaded-file>
+
+=back
+
+=head2 C<${^LAST_FH}>
+
+This new variable provides access to the filehandle that was last read.
+This is the handle used by C<$.> and by C<tell> and C<eof> without
+arguments.
+
+=head2 Regular Expression Set Operations
+
+This is an B<experimental> feature to allow matching against the union,
+intersection, etc., of sets of code points, similar to
+L<Unicode::Regex::Set>. It can also be used to extend C</x> processing
+to [bracketed] character classes, and as a replacement of user-defined
+properties, allowing more complex expressions than they do. See
+L<perlrecharclass/Extended Bracketed Character Classes>.
+
+=head2 Lexical subroutines
+
+This new feature is still considered B<experimental>. To enable it:
+
+ use 5.018;
+ no warnings "experimental::lexical_subs";
+ use feature "lexical_subs";
+
+You can now declare subroutines with C<state sub foo>, C<my sub foo>, and
+C<our sub foo>. (C<state sub> requires that the "state" feature be
+enabled, unless you write it as C<CORE::state sub foo>.)
+
+C<state sub> creates a subroutine visible within the lexical scope in which
+it is declared. The subroutine is shared between calls to the outer sub.
+
+C<my sub> declares a lexical subroutine that is created each time the
+enclosing block is entered. C<state sub> is generally slightly faster than
+C<my sub>.
+
+C<our sub> declares a lexical alias to the package subroutine of the same
+name.
+
+For more information, see L<perlsub/Lexical Subroutines>.
+
+=head2 Computed Labels
+
+The loop controls C<next>, C<last> and C<redo>, and the special C<dump>
+operator, now allow arbitrary expressions to be used to compute labels at run
+time. Previously, any argument that was not a constant was treated as the
+empty string.
+
+=head2 More CORE:: subs
+
+Several more built-in functions have been added as subroutines to the
+CORE:: namespace - namely, those non-overridable keywords that can be
+implemented without custom parsers: C<defined>, C<delete>, C<exists>,
+C<glob>, C<pos>, C<protoytpe>, C<scalar>, C<split>, C<study>, and C<undef>.
+
+As some of these have prototypes, C<prototype('CORE::...')> has been
+changed to not make a distinction between overridable and non-overridable
+keywords. This is to make C<prototype('CORE::pos')> consistent with
+C<prototype(&CORE::pos)>.
+
+=head2 C<kill> with negative signal names
+
+C<kill> has always allowed a negative signal number, which kills the
+process group instead of a single process. It has also allowed signal
+names. But it did not behave consistently, because negative signal names
+were treated as 0. Now negative signals names like C<-INT> are supported
+and treated the same way as -2 [perl #112990].
+
+=head1 Security
+
+=head2 See also: hash overhaul
+
+Some of the changes in the L<hash overhaul|/"Hash overhaul"> were made to
+enhance security. Please read that section.
+
+=head2 C<Storable> security warning in documentation
+
+The documentation for C<Storable> now includes a section which warns readers
+of the danger of accepting Storable documents from untrusted sources. The
+short version is that deserializing certain types of data can lead to loading
+modules and other code execution. This is documented behavior and wanted
+behavior, but this opens an attack vector for malicious entities.
+
+=head2 C<Locale::Maketext> allowed code injection via a malicious template
+
+If users could provide a translation string to Locale::Maketext, this could be
+used to invoke arbitrary Perl subroutines available in the current process.
+
+This has been fixed, but it is still possible to invoke any method provided by
+C<Locale::Maketext> itself or a subclass that you are using. One of these
+methods in turn will invoke the Perl core's C<sprintf> subroutine.
+
+In summary, allowing users to provide translation strings without auditing
+them is a bad idea.
+
+This vulnerability is documented in CVE-2012-6329.
+
+=head2 Avoid calling memset with a negative count
+
+Poorly written perl code that allows an attacker to specify the count to perl's
+C<x> string repeat operator can already cause a memory exhaustion
+denial-of-service attack. A flaw in versions of perl before v5.15.5 can escalate
+that into a heap buffer overrun; coupled with versions of glibc before 2.16, it
+possibly allows the execution of arbitrary code.
+
+The flaw addressed to this commit has been assigned identifier CVE-2012-5195
+and was researched by Tim Brown.
+
+=head1 Incompatible Changes
+
+=head2 See also: hash overhaul
+
+Some of the changes in the L<hash overhaul|/"Hash overhaul"> are not fully
+compatible with previous versions of perl. Please read that section.
+
+=head2 An unknown character name in C<\N{...}> is now a syntax error
+
+Previously, it warned, and the Unicode REPLACEMENT CHARACTER was
+substituted. Unicode now recommends that this situation be a syntax
+error. Also, the previous behavior led to some confusing warnings and
+behaviors, and since the REPLACEMENT CHARACTER has no use other than as
+a stand-in for some unknown character, any code that has this problem is
+buggy.
+
+=head2 Formerly deprecated characters in C<\N{}> character name aliases are now errors.
+
+Since v5.12.0, it has been deprecated to use certain characters in
+user-defined C<\N{...}> character names. These now cause a syntax
+error. For example, it is now an error to begin a name with a digit,
+such as in
+
+ my $undraftable = "\N{4F}"; # Syntax error!
+
+or to have commas anywhere in the name. See L<charnames/CUSTOM ALIASES>.
+
+=head2 C<\N{BELL}> now refers to U+1F514 instead of U+0007
+
+Unicode 6.0 reused the name "BELL" for a different code point than it
+traditionally had meant. Since Perl v5.14, use of this name still
+referred to U+0007, but would raise a deprecation warning. Now, "BELL"
+refers to U+1F514, and the name for U+0007 is "ALERT". All the
+functions in L<charnames> have been correspondingly updated.
+
+=head2 New Restrictions in Multi-Character Case-Insensitive Matching in Regular Expression Bracketed Character Classes
+
+Unicode has now withdrawn their previous recommendation for regular
+expressions to automatically handle cases where a single character can
+match multiple characters case-insensitively, for example, the letter
+LATIN SMALL LETTER SHARP S and the sequence C<ss>. This is because
+it turns out to be impracticable to do this correctly in all
+circumstances. Because Perl has tried to do this as best it can, it
+will continue to do so. (We are considering an option to turn it off.)
+However, a new restriction is being added on such matches when they
+occur in [bracketed] character classes. People were specifying
+things such as C</[\0-\xff]/i>, and being surprised that it matches the
+two character sequence C<ss> (since LATIN SMALL LETTER SHARP S occurs in
+this range). This behavior is also inconsistent with using a
+property instead of a range: C<\p{Block=Latin1}> also includes LATIN
+SMALL LETTER SHARP S, but C</[\p{Block=Latin1}]/i> does not match C<ss>.
+The new rule is that for there to be a multi-character case-insensitive
+match within a bracketed character class, the character must be
+explicitly listed, and not as an end point of a range. This more
+closely obeys the Principle of Least Astonishment. See
+L<perlrecharclass/Bracketed Character Classes>. Note that a bug [perl
+#89774], now fixed as part of this change, prevented the previous
+behavior from working fully.
+
+=head2 Explicit rules for variable names and identifiers
+
+Due to an oversight, single character variable names in v5.16 were
+completely unrestricted. This opened the door to several kinds of
+insanity. As of v5.18, these now follow the rules of other identifiers,
+in addition to accepting characters that match the C<\p{POSIX_Punct}>
+property.
+
+There is no longer any difference in the parsing of identifiers
+specified by using braces versus without braces. For instance, perl
+used to allow C<${foo:bar}> (with a single colon) but not C<$foo:bar>.
+Now that both are handled by a single code path, they are both treated
+the same way: both are forbidden. Note that this change is about the
+range of permissible literal identifiers, not other expressions.
+
+=head2 Vertical tabs are now whitespace
+
+No one could recall why C<\s> didn't match C<\cK>, the vertical tab.
+Now it does. Given the extreme rarity of that character, very little
+breakage is expected. That said, here's what it means:
+
+C<\s> in a regex now matches a vertical tab in all circumstances.
+
+Literal vertical tabs in a regex literal are ignored when the C</x>
+modifier is used.
+
+Leading vertical tabs, alone or mixed with other whitespace, are now
+ignored when interpreting a string as a number. For example:
+
+ $dec = " \cK \t 123";
+ $hex = " \cK \t 0xF";
+
+ say 0 + $dec; # was 0 with warning, now 123
+ say int $dec; # was 0, now 123
+ say oct $hex; # was 0, now 15
+
+=head2 C</(?{})/> and C</(??{})/> have been heavily reworked
+
+The implementation of this feature has been almost completely rewritten.
+Although its main intent is to fix bugs, some behaviors, especially
+related to the scope of lexical variables, will have changed. This is
+described more fully in the L</Selected Bug Fixes> section.
+
+=head2 Stricter parsing of substitution replacement
+
+It is no longer possible to abuse the way the parser parses C<s///e> like
+this:
+
+ %_=(_,"Just another ");
+ $_="Perl hacker,\n";
+ s//_}->{_/e;print
+
+=head2 C<given> now aliases the global C<$_>
+
+Instead of assigning to an implicit lexical C<$_>, C<given> now makes the
+global C<$_> an alias for its argument, just like C<foreach>. However, it
+still uses lexical C<$_> if there is lexical C<$_> in scope (again, just like
+C<foreach>) [perl #114020].
+
+=head2 The smartmatch family of features are now experimental
+
+Smart match, added in v5.10.0 and significantly revised in v5.10.1, has been
+a regular point of complaint. Although there are a number of ways in which
+it is useful, it has also proven problematic and confusing for both users and
+implementors of Perl. There have been a number of proposals on how to best
+address the problem. It is clear that smartmatch is almost certainly either
+going to change or go away in the future. Relying on its current behavior
+is not recommended.
+
+Warnings will now be issued when the parser sees C<~~>, C<given>, or C<when>.
+To disable these warnings, you can add this line to the appropriate scope:
+
+ no if $] >= 5.018, warnings => "experimental::smartmatch";
+
+Consider, though, replacing the use of these features, as they may change
+behavior again before becoming stable.
+
+=head2 Lexical C<$_> is now experimental
+
+Since it was introduced in Perl v5.10, it has caused much confusion with no
+obvious solution:
+
+=over
+
+=item *
+
+Various modules (e.g., List::Util) expect callback routines to use the
+global C<$_>. C<use List::Util 'first'; my $_; first { $_ == 1 } @list>
+does not work as one would expect.
+
+=item *
+
+A C<my $_> declaration earlier in the same file can cause confusing closure
+warnings.
+
+=item *
+
+The "_" subroutine prototype character allows called subroutines to access
+your lexical C<$_>, so it is not really private after all.
+
+=item *
+
+Nevertheless, subroutines with a "(@)" prototype and methods cannot access
+the caller's lexical C<$_>, unless they are written in XS.
+
+=item *
+
+But even XS routines cannot access a lexical C<$_> declared, not in the
+calling subroutine, but in an outer scope, iff that subroutine happened not
+to mention C<$_> or use any operators that default to C<$_>.
+
+=back
+
+It is our hope that lexical C<$_> can be rehabilitated, but this may
+cause changes in its behavior. Please use it with caution until it
+becomes stable.
+
+=head2 readline() with C<$/ = \N> now reads N characters, not N bytes
+
+Previously, when reading from a stream with I/O layers such as
+C<encoding>, the readline() function, otherwise known as the C<< <> >>
+operator, would read I<N> bytes from the top-most layer. [perl #79960]
+
+Now, I<N> characters are read instead.
+
+There is no change in behaviour when reading from streams with no
+extra layers, since bytes map exactly to characters.
+
+=head2 Overridden C<glob> is now passed one argument
+
+C<glob> overrides used to be passed a magical undocumented second argument
+that identified the caller. Nothing on CPAN was using this, and it got in
+the way of a bug fix, so it was removed. If you really need to identify
+the caller, see L<Devel::Callsite> on CPAN.
+
+=head2 Here doc parsing
+
+The body of a here document inside a quote-like operator now always begins
+on the line after the "<<foo" marker. Previously, it was documented to
+begin on the line following the containing quote-like operator, but that
+was only sometimes the case [perl #114040].
+
+=head2 Alphanumeric operators must now be separated from the closing
+delimiter of regular expressions
+
+You may no longer write something like:
+
+ m/a/and 1
+
+Instead you must write
+
+ m/a/ and 1
+
+with whitespace separating the operator from the closing delimiter of
+the regular expression. Not having whitespace has resulted in a
+deprecation warning since Perl v5.14.0.
+
+=head2 qw(...) can no longer be used as parentheses
+
+C<qw> lists used to fool the parser into thinking they were always
+surrounded by parentheses. This permitted some surprising constructions
+such as C<foreach $x qw(a b c) {...}>, which should really be written
+C<foreach $x (qw(a b c)) {...}>. These would sometimes get the lexer into
+the wrong state, so they didn't fully work, and the similar C<foreach qw(a
+b c) {...}> that one might expect to be permitted never worked at all.
+
+This side effect of C<qw> has now been abolished. It has been deprecated
+since Perl v5.13.11. It is now necessary to use real parentheses
+everywhere that the grammar calls for them.
+
+=head2 Interaction of lexical and default warnings
+
+Turning on any lexical warnings used first to disable all default warnings
+if lexical warnings were not already enabled:
+
+ $*; # deprecation warning
+ use warnings "void";
+ $#; # void warning; no deprecation warning
+
+Now, the C<debugging>, C<deprecated>, C<glob>, C<inplace> and C<malloc> warnings
+categories are left on when turning on lexical warnings (unless they are
+turned off by C<no warnings>, of course).
+
+This may cause deprecation warnings to occur in code that used to be free
+of warnings.
+
+Those are the only categories consisting only of default warnings. Default
+warnings in other categories are still disabled by C<< use warnings "category" >>,
+as we do not yet have the infrastructure for controlling
+individual warnings.
+
+=head2 C<state sub> and C<our sub>
+
+Due to an accident of history, C<state sub> and C<our sub> were equivalent
+to a plain C<sub>, so one could even create an anonymous sub with
+C<our sub { ... }>. These are now disallowed outside of the "lexical_subs"
+feature. Under the "lexical_subs" feature they have new meanings described
+in L<perlsub/Lexical Subroutines>.
+
+=head2 Defined values stored in environment are forced to byte strings
+
+A value stored in an environment variable has always been stringified. In this
+release, it is converted to be only a byte string. First, it is forced to be
+only a string. Then if the string is utf8 and the equivalent of
+C<utf8::downgrade()> works, that result is used; otherwise, the equivalent of
+C<utf8::encode()> is used, and a warning is issued about wide characters
+(L</Diagnostics>).
+
+=head2 C<require> dies for unreadable files
+
+When C<require> encounters an unreadable file, it now dies. It used to
+ignore the file and continue searching the directories in C<@INC>
+[perl #113422].
+
+=head2 C<gv_fetchmeth_*> and SUPER
+
+The various C<gv_fetchmeth_*> XS functions used to treat a package whose
+named ended with C<::SUPER> specially. A method lookup on the C<Foo::SUPER>
+package would be treated as a C<SUPER> method lookup on the C<Foo> package. This
+is no longer the case. To do a C<SUPER> lookup, pass the C<Foo> stash and the
+C<GV_SUPER> flag.
+
+=head2 C<split>'s first argument is more consistently interpreted
+
+After some changes earlier in v5.17, C<split>'s behavior has been
+simplified: if the PATTERN argument evaluates to a string
+containing one space, it is treated the way that a I<literal> string
+containing one space once was.
+
+=head1 Deprecations
+
+=head2 Module removals
+
+The following modules will be removed from the core distribution in a future
+release, and will at that time need to be installed from CPAN. Distributions
+on CPAN which require these modules will need to list them as prerequisites.
+
+The core versions of these modules will now issue C<"deprecated">-category
+warnings to alert you to this fact. To silence these deprecation warnings,
+install the modules in question from CPAN.
+
+Note that these are (with rare exceptions) fine modules that you are encouraged
+to continue to use. Their disinclusion from core primarily hinges on their
+necessity to bootstrapping a fully functional, CPAN-capable Perl installation,
+not usually on concerns over their design.
+
+=over
+
+=item L<encoding>
+
+The use of this pragma is now strongly discouraged. It conflates the encoding
+of source text with the encoding of I/O data, reinterprets escape sequences in
+source text (a questionable choice), and introduces the UTF-8 bug to all runtime
+handling of character strings. It is broken as designed and beyond repair.
+
+For using non-ASCII literal characters in source text, please refer to L<utf8>.
+For dealing with textual I/O data, please refer to L<Encode> and L<open>.
+
+=item L<Archive::Extract>
+
+=item L<B::Lint>
+
+=item L<B::Lint::Debug>
+
+=item L<CPANPLUS> and all included C<CPANPLUS::*> modules
+
+=item L<Devel::InnerPackage>
+
+=item L<Log::Message>
+
+=item L<Log::Message::Config>
+
+=item L<Log::Message::Handlers>
+
+=item L<Log::Message::Item>
+
+=item L<Log::Message::Simple>
+
+=item L<Module::Pluggable>
+
+=item L<Module::Pluggable::Object>
+
+=item L<Object::Accessor>
+
+=item L<Pod::LaTeX>
+
+=item L<Term::UI>
+
+=item L<Term::UI::History>
+
+=back
+
+=head2 Deprecated Utilities
+
+The following utilities will be removed from the core distribution in a
+future release as their associated modules have been deprecated. They
+will remain available with the applicable CPAN distribution.
+
+=over
+
+=item L<cpanp>
+
+=item C<cpanp-run-perl>
+
+=item L<cpan2dist>
+
+These items are part of the C<CPANPLUS> distribution.
+
+=item L<pod2latex>
+
+This item is part of the C<Pod::LaTeX> distribution.
+
+=back
+
+=head2 PL_sv_objcount
+
+This interpreter-global variable used to track the total number of
+Perl objects in the interpreter. It is no longer maintained and will
+be removed altogether in Perl v5.20.
+
+=head2 Five additional characters should be escaped in patterns with C</x>
+
+When a regular expression pattern is compiled with C</x>, Perl treats 6
+characters as white space to ignore, such as SPACE and TAB. However,
+Unicode recommends 11 characters be treated thusly. We will conform
+with this in a future Perl version. In the meantime, use of any of the
+missing characters will raise a deprecation warning, unless turned off.
+The five characters are:
+
+ U+0085 NEXT LINE
+ U+200E LEFT-TO-RIGHT MARK
+ U+200F RIGHT-TO-LEFT MARK
+ U+2028 LINE SEPARATOR
+ U+2029 PARAGRAPH SEPARATOR
+
+=head2 User-defined charnames with surprising whitespace
+
+A user-defined character name with trailing or multiple spaces in a row is
+likely a typo. This now generates a warning when defined, on the assumption
+that uses of it will be unlikely to include the excess whitespace.
+
+=head2 Various XS-callable functions are now deprecated
+
+All the functions used to classify characters will be removed from a
+future version of Perl, and should not be used. With participating C
+compilers (e.g., gcc), compiling any file that uses any of these will
+generate a warning. These were not intended for public use; there are
+equivalent, faster, macros for most of them.
+
+See L<perlapi/Character classes>. The complete list is:
+
+C<is_uni_alnum>, C<is_uni_alnumc>, C<is_uni_alnumc_lc>,
+C<is_uni_alnum_lc>, C<is_uni_alpha>, C<is_uni_alpha_lc>,
+C<is_uni_ascii>, C<is_uni_ascii_lc>, C<is_uni_blank>,
+C<is_uni_blank_lc>, C<is_uni_cntrl>, C<is_uni_cntrl_lc>,
+C<is_uni_digit>, C<is_uni_digit_lc>, C<is_uni_graph>,
+C<is_uni_graph_lc>, C<is_uni_idfirst>, C<is_uni_idfirst_lc>,
+C<is_uni_lower>, C<is_uni_lower_lc>, C<is_uni_print>,
+C<is_uni_print_lc>, C<is_uni_punct>, C<is_uni_punct_lc>,
+C<is_uni_space>, C<is_uni_space_lc>, C<is_uni_upper>,
+C<is_uni_upper_lc>, C<is_uni_xdigit>, C<is_uni_xdigit_lc>,
+C<is_utf8_alnum>, C<is_utf8_alnumc>, C<is_utf8_alpha>,
+C<is_utf8_ascii>, C<is_utf8_blank>, C<is_utf8_char>,
+C<is_utf8_cntrl>, C<is_utf8_digit>, C<is_utf8_graph>,
+C<is_utf8_idcont>, C<is_utf8_idfirst>, C<is_utf8_lower>,
+C<is_utf8_mark>, C<is_utf8_perl_space>, C<is_utf8_perl_word>,
+C<is_utf8_posix_digit>, C<is_utf8_print>, C<is_utf8_punct>,
+C<is_utf8_space>, C<is_utf8_upper>, C<is_utf8_xdigit>,
+C<is_utf8_xidcont>, C<is_utf8_xidfirst>.
+
+In addition these three functions that have never worked properly are
+deprecated:
+C<to_uni_lower_lc>, C<to_uni_title_lc>, and C<to_uni_upper_lc>.
+
+=head2 Certain rare uses of backslashes within regexes are now deprecated
+
+There are three pairs of characters that Perl recognizes as
+metacharacters in regular expression patterns: C<{}>, C<[]>, and C<()>.
+These can be used as well to delimit patterns, as in:
+
+ m{foo}
+ s(foo)(bar)
+
+Since they are metacharacters, they have special meaning to regular
+expression patterns, and it turns out that you can't turn off that
+special meaning by the normal means of preceding them with a backslash,
+if you use them, paired, within a pattern delimited by them. For
+example, in
+
+ m{foo\{1,3\}}
+
+the backslashes do not change the behavior, and this matches
+S<C<"f o">> followed by one to three more occurrences of C<"o">.
+
+Usages like this, where they are interpreted as metacharacters, are
+exceedingly rare; we think there are none, for example, in all of CPAN.
+Hence, this deprecation should affect very little code. It does give
+notice, however, that any such code needs to change, which will in turn
+allow us to change the behavior in future Perl versions so that the
+backslashes do have an effect, and without fear that we are silently
+breaking any existing code.
+
+=head2 Splitting the tokens C<(?> and C<(*> in regular expressions
+
+A deprecation warning is now raised if the C<(> and C<?> are separated
+by white space or comments in C<(?...)> regular expression constructs.
+Similarly, if the C<(> and C<*> are separated in C<(*VERB...)>
+constructs.
+
+=head2 Pre-PerlIO IO implementations
+
+In theory, you can currently build perl without PerlIO. Instead, you'd use a
+wrapper around stdio or sfio. In practice, this isn't very useful. It's not
+well tested, and without any support for IO layers or (thus) Unicode, it's not
+much of a perl. Building without PerlIO will most likely be removed in the
+next version of perl.
+
+PerlIO supports a C<stdio> layer if stdio use is desired. Similarly a
+sfio layer could be produced in the future, if needed.
+
+=head1 Future Deprecations
+
+=over
+
+=item *
+
+Platforms without support infrastructure
+
+Both Windows CE and z/OS have been historically under-maintained, and are
+currently neither successfully building nor regularly being smoke tested.
+Efforts are underway to change this situation, but it should not be taken for
+granted that the platforms are safe and supported. If they do not become
+buildable and regularly smoked, support for them may be actively removed in
+future releases. If you have an interest in these platforms and you can lend
+your time, expertise, or hardware to help support these platforms, please let
+the perl development effort know by emailing C<perl5-porters at perl.org>.
+
+Some platforms that appear otherwise entirely dead are also on the short list
+for removal between now and v5.20.0:
+
+=over
+
+=item DG/UX
+
+=item NeXT
+
+=back
+
+We also think it likely that current versions of Perl will no longer
+build AmigaOS, DJGPP, NetWare (natively), OS/2 and Plan 9. If you
+are using Perl on such a platform and have an interest in ensuring
+Perl's future on them, please contact us.
+
+We believe that Perl has long been unable to build on mixed endian
+architectures (such as PDP-11s), and intend to remove any remaining
+support code. Similarly, code supporting the long umaintained GNU
+dld will be removed soon if no-one makes themselves known as an
+active user.
+
+=item *
+
+Swapping of $< and $>
+
+Perl has supported the idiom of swapping $< and $> (and likewise $( and
+$)) to temporarily drop permissions since 5.0, like this:
+
+ ($<, $>) = ($>, $<);
+
+However, this idiom modifies the real user/group id, which can have
+undesirable side-effects, is no longer useful on any platform perl
+supports and complicates the implementation of these variables and list
+assignment in general.
+
+As an alternative, assignment only to C<< $> >> is recommended:
+
+ local $> = $<;
+
+See also: L<Setuid Demystified|http://www.cs.berkeley.edu/~daw/papers/setuid-usenix02.pdf>.
+
+=item *
+
+C<microperl>, long broken and of unclear present purpose, will be removed.
+
+=item *
+
+Revamping C<< "\Q" >> semantics in double-quotish strings when combined with
+other escapes.
+
+There are several bugs and inconsistencies involving combinations
+of C<\Q> and escapes like C<\x>, C<\L>, etc., within a C<\Q...\E> pair.
+These need to be fixed, and doing so will necessarily change current
+behavior. The changes have not yet been settled.
+
+=item *
+
+Use of C<$x>, where C<x> stands for any actual (non-printing) C0 control
+character will be disallowed in a future Perl version. Use C<${x}>
+instead (where again C<x> stands for a control character),
+or better, C<$^A> , where C<^> is a caret (CIRCUMFLEX ACCENT),
+and C<A> stands for any of the characters listed at the end of
+L<perlebcdic/OPERATOR DIFFERENCES>.
+
+=back
+
+=head1 Performance Enhancements
+
+=over 4
+
+=item *
+
+Lists of lexical variable declarations (C<my($x, $y)>) are now optimised
+down to a single op and are hence faster than before.
+
+=item *
+
+A new C preprocessor define C<NO_TAINT_SUPPORT> was added that, if set,
+disables Perl's taint support altogether. Using the -T or -t command
+line flags will cause a fatal error. Beware that both core tests as
+well as many a CPAN distribution's tests will fail with this change. On
+the upside, it provides a small performance benefit due to reduced
+branching.
+
+B<Do not enable this unless you know exactly what you are getting yourself
+into.>
+
+=item *
+
+C<pack> with constant arguments is now constant folded in most cases
+[perl #113470].
+
+=item *
+
+Speed up in regular expression matching against Unicode properties. The
+largest gain is for C<\X>, the Unicode "extended grapheme cluster." The
+gain for it is about 35% - 40%. Bracketed character classes, e.g.,
+C<[0-9\x{100}]> containing code points above 255 are also now faster.
+
+=item *
+
+On platforms supporting it, several former macros are now implemented as static
+inline functions. This should speed things up slightly on non-GCC platforms.
+
+=item *
+
+The optimisation of hashes in boolean context has been extended to
+affect C<scalar(%hash)>, C<%hash ? ... : ...>, and C<sub { %hash || ... }>.
+
+=item *
+
+Filetest operators manage the stack in a fractionally more efficient manner.
+
+=item *
+
+Globs used in a numeric context are now numified directly in most cases,
+rather than being numified via stringification.
+
+=item *
+
+The C<x> repetition operator is now folded to a single constant at compile
+time if called in scalar context with constant operands and no parentheses
+around the left operand.
+
+=back
+
+=head1 Modules and Pragmata
+
+=head2 New Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Config::Perl::V> version 0.16 has been added as a dual-lifed module.
+It provides structured data retrieval of C<perl -V> output including
+information only known to the C<perl> binary and not available via L<Config>.
+
+=back
+
+=head2 Updated Modules and Pragmata
+
+For a complete list of updates, run:
+
+ $ corelist --diff 5.16.0 5.18.0
+
+You can substitute your favorite version in place of C<5.16.0>, too.
+
+=over
+
+=item *
+
+L<Archive::Extract> has been upgraded to 0.68.
+
+Work around an edge case on Linux with Busybox's unzip.
+
+=item *
+
+L<Archive::Tar> has been upgraded to 1.90.
+
+ptar now supports the -T option as well as dashless options
+[rt.cpan.org #75473], [rt.cpan.org #75475].
+
+Auto-encode filenames marked as UTF-8 [rt.cpan.org #75474].
+
+Don't use C<tell> on L<IO::Zlib> handles [rt.cpan.org #64339].
+
+Don't try to C<chown> on symlinks.
+
+=item *
+
+L<autodie> has been upgraded to 2.13.
+
+C<autodie> now plays nicely with the 'open' pragma.
+
+=item *
+
+L<B> has been upgraded to 1.42.
+
+The C<stashoff> method of COPs has been added. This provides access to an
+internal field added in perl 5.16 under threaded builds [perl #113034].
+
+C<B::COP::stashpv> now supports UTF-8 package names and embedded NULs.
+
+All C<CVf_*> and C<GVf_*>
+and more SV-related flag values are now provided as constants in the C<B::>
+namespace and available for export. The default export list has not changed.
+
+This makes the module work with the new pad API.
+
+=item *
+
+L<B::Concise> has been upgraded to 0.95.
+
+The C<-nobanner> option has been fixed, and C<format>s can now be dumped.
+When passed a sub name to dump, it will check also to see whether it
+is the name of a format. If a sub and a format share the same name,
+it will dump both.
+
+This adds support for the new C<OpMAYBE_TRUEBOOL> and C<OPpTRUEBOOL> flags.
+
+=item *
+
+L<B::Debug> has been upgraded to 1.18.
+
+This adds support (experimentally) for C<B::PADLIST>, which was
+added in Perl 5.17.4.
+
+=item *
+
+L<B::Deparse> has been upgraded to 1.20.
+
+Avoid warning when run under C<perl -w>.
+
+It now deparses
+loop controls with the correct precedence, and multiple statements in a
+C<format> line are also now deparsed correctly.
+
+This release suppresses trailing semicolons in formats.
+
+This release adds stub deparsing for lexical subroutines.
+
+It no longer dies when deparsing C<sort> without arguments. It now
+correctly omits the comma for C<system $prog @args> and C<exec $prog
+ at args>.
+
+=item *
+
+L<bignum>, L<bigint> and L<bigrat> have been upgraded to 0.33.
+
+The overrides for C<hex> and C<oct> have been rewritten, eliminating
+several problems, and making one incompatible change:
+
+=over
+
+=item *
+
+Formerly, whichever of C<use bigint> or C<use bigrat> was compiled later
+would take precedence over the other, causing C<hex> and C<oct> not to
+respect the other pragma when in scope.
+
+=item *
+
+Using any of these three pragmata would cause C<hex> and C<oct> anywhere
+else in the program to evalute their arguments in list context and prevent
+them from inferring $_ when called without arguments.
+
+=item *
+
+Using any of these three pragmata would make C<oct("1234")> return 1234
+(for any number not beginning with 0) anywhere in the program. Now "1234"
+is translated from octal to decimal, whether within the pragma's scope or
+not.
+
+=item *
+
+The global overrides that facilitate lexical use of C<hex> and C<oct> now
+respect any existing overrides that were in place before the new overrides
+were installed, falling back to them outside of the scope of C<use bignum>.
+
+=item *
+
+C<use bignum "hex">, C<use bignum "oct"> and similar invocations for bigint
+and bigrat now export a C<hex> or C<oct> function, instead of providing a
+global override.
+
+=back
+
+=item *
+
+L<Carp> has been upgraded to 1.29.
+
+Carp is no longer confused when C<caller> returns undef for a package that
+has been deleted.
+
+The C<longmess()> and C<shortmess()> functions are now documented.
+
+=item *
+
+L<CGI> has been upgraded to 3.63.
+
+Unrecognized HTML escape sequences are now handled better, problematic
+trailing newlines are no longer inserted after E<lt>formE<gt> tags
+by C<startform()> or C<start_form()>, and bogus "Insecure Dependency"
+warnings appearing with some versions of perl are now worked around.
+
+=item *
+
+L<Class::Struct> has been upgraded to 0.64.
+
+The constructor now respects overridden accessor methods [perl #29230].
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded to 2.060.
+
+The misuse of Perl's "magic" API has been fixed.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded to 2.060.
+
+Upgrade bundled zlib to version 1.2.7.
+
+Fix build failures on Irix, Solaris, and Win32, and also when building as C++
+[rt.cpan.org #69985], [rt.cpan.org #77030], [rt.cpan.org #75222].
+
+The misuse of Perl's "magic" API has been fixed.
+
+C<compress()>, C<uncompress()>, C<memGzip()> and C<memGunzip()> have
+been speeded up by making parameter validation more efficient.
+
+=item *
+
+L<CPAN::Meta::Requirements> has been upgraded to 2.122.
+
+Treat undef requirements to C<from_string_hash> as 0 (with a warning).
+
+Added C<requirements_for_module> method.
+
+=item *
+
+L<CPANPLUS> has been upgraded to 0.9135.
+
+Allow adding F<blib/script> to PATH.
+
+Save the history between invocations of the shell.
+
+Handle multiple C<makemakerargs> and C<makeflags> arguments better.
+
+This resolves issues with the SQLite source engine.
+
+=item *
+
+L<Data::Dumper> has been upgraded to 2.145.
+
+It has been optimized to only build a seen-scalar hash as necessary,
+thereby speeding up serialization drastically.
+
+Additional tests were added in order to improve statement, branch, condition
+and subroutine coverage. On the basis of the coverage analysis, some of the
+internals of Dumper.pm were refactored. Almost all methods are now
+documented.
+
+=item *
+
+L<DB_File> has been upgraded to 1.827.
+
+The main Perl module no longer uses the C<"@_"> construct.
+
+=item *
+
+L<Devel::Peek> has been upgraded to 1.11.
+
+This fixes compilation with C++ compilers and makes the module work with
+the new pad API.
+
+=item *
+
+L<Digest::MD5> has been upgraded to 2.52.
+
+Fix C<Digest::Perl::MD5> OO fallback [rt.cpan.org #66634].
+
+=item *
+
+L<Digest::SHA> has been upgraded to 5.84.
+
+This fixes a double-free bug, which might have caused vulnerabilities
+in some cases.
+
+=item *
+
+L<DynaLoader> has been upgraded to 1.18.
+
+This is due to a minor code change in the XS for the VMS implementation.
+
+This fixes warnings about using C<CODE> sections without an C<OUTPUT>
+section.
+
+=item *
+
+L<Encode> has been upgraded to 2.49.
+
+The Mac alias x-mac-ce has been added, and various bugs have been fixed
+in Encode::Unicode, Encode::UTF7 and Encode::GSM0338.
+
+=item *
+
+L<Env> has been upgraded to 1.04.
+
+Its SPLICE implementation no longer misbehaves in list context.
+
+=item *
+
+L<ExtUtils::CBuilder> has been upgraded to 0.280210.
+
+Manifest files are now correctly embedded for those versions of VC++ which
+make use of them. [perl #111782, #111798].
+
+A list of symbols to export can now be passed to C<link()> when on
+Windows, as on other OSes [perl #115100].
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded to 3.18.
+
+The generated C code now avoids unnecessarily incrementing
+C<PL_amagic_generation> on Perl versions where it's done automatically
+(or on current Perl where the variable no longer exists).
+
+This avoids a bogus warning for initialised XSUB non-parameters [perl
+#112776].
+
+=item *
+
+L<File::Copy> has been upgraded to 2.26.
+
+C<copy()> no longer zeros files when copying into the same directory,
+and also now fails (as it has long been documented to do) when attempting
+to copy a file over itself.
+
+=item *
+
+L<File::DosGlob> has been upgraded to 1.10.
+
+The internal cache of file names that it keeps for each caller is now
+freed when that caller is freed. This means
+C<< use File::DosGlob 'glob'; eval 'scalar <*>' >> no longer leaks memory.
+
+=item *
+
+L<File::Fetch> has been upgraded to 0.38.
+
+Added the 'file_default' option for URLs that do not have a file
+component.
+
+Use C<File::HomeDir> when available, and provide C<PERL5_CPANPLUS_HOME> to
+override the autodetection.
+
+Always re-fetch F<CHECKSUMS> if C<fetchdir> is set.
+
+=item *
+
+L<File::Find> has been upgraded to 1.23.
+
+This fixes inconsistent unixy path handling on VMS.
+
+Individual files may now appear in list of directories to be searched
+[perl #59750].
+
+=item *
+
+L<File::Glob> has been upgraded to 1.20.
+
+File::Glob has had exactly the same fix as File::DosGlob. Since it is
+what Perl's own C<glob> operator itself uses (except on VMS), this means
+C<< eval 'scalar <*>' >> no longer leaks.
+
+A space-separated list of patterns return long lists of results no longer
+results in memory corruption or crashes. This bug was introduced in
+Perl 5.16.0. [perl #114984]
+
+=item *
+
+L<File::Spec::Unix> has been upgraded to 3.40.
+
+C<abs2rel> could produce incorrect results when given two relative paths or
+the root directory twice [perl #111510].
+
+=item *
+
+L<File::stat> has been upgraded to 1.07.
+
+C<File::stat> ignores the L<filetest> pragma, and warns when used in
+combination therewith. But it was not warning for C<-r>. This has been
+fixed [perl #111640].
+
+C<-p> now works, and does not return false for pipes [perl #111638].
+
+Previously C<File::stat>'s overloaded C<-x> and C<-X> operators did not give
+the correct results for directories or executable files when running as
+root. They had been treating executable permissions for root just like for
+any other user, performing group membership tests I<etc> for files not owned
+by root. They now follow the correct Unix behaviour - for a directory they
+are always true, and for a file if any of the three execute permission bits
+are set then they report that root can execute the file. Perl's builtin
+C<-x> and C<-X> operators have always been correct.
+
+=item *
+
+L<File::Temp> has been upgraded to 0.23
+
+Fixes various bugs involving directory removal. Defers unlinking tempfiles if
+the initial unlink fails, which fixes problems on NFS.
+
+=item *
+
+L<GDBM_File> has been upgraded to 1.15.
+
+The undocumented optional fifth parameter to C<TIEHASH> has been
+removed. This was intended to provide control of the callback used by
+C<gdbm*> functions in case of fatal errors (such as filesystem problems),
+but did not work (and could never have worked). No code on CPAN even
+attempted to use it. The callback is now always the previous default,
+C<croak>. Problems on some platforms with how the C<C> C<croak> function
+is called have also been resolved.
+
+=item *
+
+L<Hash::Util> has been upgraded to 0.15.
+
+C<hash_unlocked> and C<hashref_unlocked> now returns true if the hash is
+unlocked, instead of always returning false [perl #112126].
+
+C<hash_unlocked>, C<hashref_unlocked>, C<lock_hash_recurse> and
+C<unlock_hash_recurse> are now exportable [perl #112126].
+
+Two new functions, C<hash_locked> and C<hashref_locked>, have been added.
+Oddly enough, these two functions were already exported, even though they
+did not exist [perl #112126].
+
+=item *
+
+L<HTTP::Tiny> has been upgraded to 0.025.
+
+Add SSL verification features [github #6], [github #9].
+
+Include the final URL in the response hashref.
+
+Add C<local_address> option.
+
+This improves SSL support.
+
+=item *
+
+L<IO> has been upgraded to 1.28.
+
+C<sync()> can now be called on read-only file handles [perl #64772].
+
+L<IO::Socket> tries harder to cache or otherwise fetch socket
+information.
+
+=item *
+
+L<IPC::Cmd> has been upgraded to 0.80.
+
+Use C<POSIX::_exit> instead of C<exit> in C<run_forked> [rt.cpan.org #76901].
+
+=item *
+
+L<IPC::Open3> has been upgraded to 1.13.
+
+The C<open3()> function no longer uses C<POSIX::close()> to close file
+descriptors since that breaks the ref-counting of file descriptors done by
+PerlIO in cases where the file descriptors are shared by PerlIO streams,
+leading to attempts to close the file descriptors a second time when
+any such PerlIO streams are closed later on.
+
+=item *
+
+L<Locale::Codes> has been upgraded to 3.25.
+
+It includes some new codes.
+
+=item *
+
+L<Memoize> has been upgraded to 1.03.
+
+Fix the C<MERGE> cache option.
+
+=item *
+
+L<Module::Build> has been upgraded to 0.4003.
+
+Fixed bug where modules without C<$VERSION> might have a version of '0' listed
+in 'provides' metadata, which will be rejected by PAUSE.
+
+Fixed bug in PodParser to allow numerals in module names.
+
+Fixed bug where giving arguments twice led to them becoming arrays, resulting
+in install paths like F<ARRAY(0xdeadbeef)/lib/Foo.pm>.
+
+A minor bug fix allows markup to be used around the leading "Name" in
+a POD "abstract" line, and some documentation improvements have been made.
+
+=item *
+
+L<Module::CoreList> has been upgraded to 2.90
+
+Version information is now stored as a delta, which greatly reduces the
+size of the F<CoreList.pm> file.
+
+This restores compatibility with older versions of perl and cleans up
+the corelist data for various modules.
+
+=item *
+
+L<Module::Load::Conditional> has been upgraded to 0.54.
+
+Fix use of C<requires> on perls installed to a path with spaces.
+
+Various enhancements include the new use of Module::Metadata.
+
+=item *
+
+L<Module::Metadata> has been upgraded to 1.000011.
+
+The creation of a Module::Metadata object for a typical module file has
+been sped up by about 40%, and some spurious warnings about C<$VERSION>s
+have been suppressed.
+
+=item *
+
+L<Module::Pluggable> has been upgraded to 4.7.
+
+Amongst other changes, triggers are now allowed on events, which gives
+a powerful way to modify behaviour.
+
+=item *
+
+L<Net::Ping> has been upgraded to 2.41.
+
+This fixes some test failures on Windows.
+
+=item *
+
+L<Opcode> has been upgraded to 1.25.
+
+Reflect the removal of the boolkeys opcode and the addition of the
+clonecv, introcv and padcv opcodes.
+
+=item *
+
+L<overload> has been upgraded to 1.22.
+
+C<no overload> now warns for invalid arguments, just like C<use overload>.
+
+=item *
+
+L<PerlIO::encoding> has been upgraded to 0.16.
+
+This is the module implementing the ":encoding(...)" I/O layer. It no
+longer corrupts memory or crashes when the encoding back-end reallocates
+the buffer or gives it a typeglob or shared hash key scalar.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded to 0.16.
+
+The buffer scalar supplied may now only contain code pounts 0xFF or
+lower. [perl #109828]
+
+=item *
+
+L<Perl::OSType> has been upgraded to 1.003.
+
+This fixes a bug detecting the VOS operating system.
+
+=item *
+
+L<Pod::Html> has been upgraded to 1.18.
+
+The option C<--libpods> has been reinstated. It is deprecated, and its use
+does nothing other than issue a warning that it is no longer supported.
+
+Since the HTML files generated by pod2html claim to have a UTF-8 charset,
+actually write the files out using UTF-8 [perl #111446].
+
+=item *
+
+L<Pod::Simple> has been upgraded to 3.28.
+
+Numerous improvements have been made, mostly to Pod::Simple::XHTML,
+which also has a compatibility change: the C<codes_in_verbatim> option
+is now disabled by default. See F<cpan/Pod-Simple/ChangeLog> for the
+full details.
+
+=item *
+
+L<re> has been upgraded to 0.23
+
+Single character [class]es like C</[s]/> or C</[s]/i> are now optimized
+as if they did not have the brackets, i.e. C</s/> or C</s/i>.
+
+See note about C<op_comp> in the L</Internal Changes> section below.
+
+=item *
+
+L<Safe> has been upgraded to 2.35.
+
+Fix interactions with C<Devel::Cover>.
+
+Don't eval code under C<no strict>.
+
+=item *
+
+L<Scalar::Util> has been upgraded to version 1.27.
+
+Fix an overloading issue with C<sum>.
+
+C<first> and C<reduce> now check the callback first (so C<&first(1)> is
+disallowed).
+
+Fix C<tainted> on magical values [rt.cpan.org #55763].
+
+Fix C<sum> on previously magical values [rt.cpan.org #61118].
+
+Fix reading past the end of a fixed buffer [rt.cpan.org #72700].
+
+=item *
+
+L<Search::Dict> has been upgraded to 1.07.
+
+No longer require C<stat> on filehandles.
+
+Use C<fc> for casefolding.
+
+=item *
+
+L<Socket> has been upgraded to 2.009.
+
+Constants and functions required for IP multicast source group membership
+have been added.
+
+C<unpack_sockaddr_in()> and C<unpack_sockaddr_in6()> now return just the IP
+address in scalar context, and C<inet_ntop()> now guards against incorrect
+length scalars being passed in.
+
+This fixes an uninitialized memory read.
+
+=item *
+
+L<Storable> has been upgraded to 2.41.
+
+Modifying C<$_[0]> within C<STORABLE_freeze> no longer results in crashes
+[perl #112358].
+
+An object whose class implements C<STORABLE_attach> is now thawed only once
+when there are multiple references to it in the structure being thawed
+[perl #111918].
+
+Restricted hashes were not always thawed correctly [perl #73972].
+
+Storable would croak when freezing a blessed REF object with a
+C<STORABLE_freeze()> method [perl #113880].
+
+It can now freeze and thaw vstrings correctly. This causes a slight
+incompatible change in the storage format, so the format version has
+increased to 2.9.
+
+This contains various bugfixes, including compatibility fixes for older
+versions of Perl and vstring handling.
+
+=item *
+
+L<Sys::Syslog> has been upgraded to 0.32.
+
+This contains several bug fixes relating to C<getservbyname()>,
+C<setlogsock()>and log levels in C<syslog()>, together with fixes for
+Windows, Haiku-OS and GNU/kFreeBSD. See F<cpan/Sys-Syslog/Changes>
+for the full details.
+
+=item *
+
+L<Term::ANSIColor> has been upgraded to 4.02.
+
+Add support for italics.
+
+Improve error handling.
+
+=item *
+
+L<Term::ReadLine> has been upgraded to 1.10. This fixes the
+use of the B<cpan> and B<cpanp> shells on Windows in the event that the current
+drive happens to contain a F<\dev\tty> file.
+
+=item *
+
+L<Test::Harness> has been upgraded to 3.26.
+
+Fix glob semantics on Win32 [rt.cpan.org #49732].
+
+Don't use C<Win32::GetShortPathName> when calling perl [rt.cpan.org #47890].
+
+Ignore -T when reading shebang [rt.cpan.org #64404].
+
+Handle the case where we don't know the wait status of the test more
+gracefully.
+
+Make the test summary 'ok' line overridable so that it can be changed to a
+plugin to make the output of prove idempotent.
+
+Don't run world-writable files.
+
+=item *
+
+L<Text::Tabs> and L<Text::Wrap> have been upgraded to
+2012.0818. Support for Unicode combining characters has been added to them
+both.
+
+=item *
+
+L<threads::shared> has been upgraded to 1.31.
+
+This adds the option to warn about or ignore attempts to clone structures
+that can't be cloned, as opposed to just unconditionally dying in
+that case.
+
+This adds support for dual-valued values as created by
+L<Scalar::Util::dualvar|Scalar::Util/"dualvar NUM, STRING">.
+
+=item *
+
+L<Tie::StdHandle> has been upgraded to 4.3.
+
+C<READ> now respects the offset argument to C<read> [perl #112826].
+
+=item *
+
+L<Time::Local> has been upgraded to 1.2300.
+
+Seconds values greater than 59 but less than 60 no longer cause
+C<timegm()> and C<timelocal()> to croak.
+
+=item *
+
+L<Unicode::UCD> has been upgraded to 0.53.
+
+This adds a function L<all_casefolds()|Unicode::UCD/all_casefolds()>
+that returns all the casefolds.
+
+=item *
+
+L<Win32> has been upgraded to 0.47.
+
+New APIs have been added for getting and setting the current code page.
+
+=back
+
+
+=head2 Removed Modules and Pragmata
+
+=over
+
+=item *
+
+L<Version::Requirements> has been removed from the core distribution. It is
+available under a different name: L<CPAN::Meta::Requirements>.
+
+=back
+
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perlcheat>
+
+=over 4
+
+=item *
+
+L<perlcheat> has been reorganized, and a few new sections were added.
+
+=back
+
+=head3 L<perldata>
+
+=over 4
+
+=item *
+
+Now explicitly documents the behaviour of hash initializer lists that
+contain duplicate keys.
+
+=back
+
+=head3 L<perldiag>
+
+=over 4
+
+=item *
+
+The explanation of symbolic references being prevented by "strict refs"
+now doesn't assume that the reader knows what symbolic references are.
+
+=back
+
+=head3 L<perlfaq>
+
+=over 4
+
+=item *
+
+L<perlfaq> has been synchronized with version 5.0150040 from CPAN.
+
+=back
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item *
+
+The return value of C<pipe> is now documented.
+
+=item *
+
+Clarified documentation of C<our>.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+Loop control verbs (C<dump>, C<goto>, C<next>, C<last> and C<redo>) have always
+had the same precedence as assignment operators, but this was not documented
+until now.
+
+=back
+
+=head3 Diagnostics
+
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages. For the complete list of
+diagnostic messages, see L<perldiag>.
+
+=head2 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<Unterminated delimiter for here document|perldiag/"Unterminated delimiter for here document">
+
+This message now occurs when a here document label has an initial quotation
+mark but the final quotation mark is missing.
+
+This replaces a bogus and misleading error message about not finding the label
+itself [perl #114104].
+
+=item *
+
+L<panic: child pseudo-process was never scheduled|perldiag/"panic: child pseudo-process was never scheduled">
+
+This error is thrown when a child pseudo-process in the ithreads implementation
+on Windows was not scheduled within the time period allowed and therefore was
+not able to initialize properly [perl #88840].
+
+=item *
+
+L<Group name must start with a non-digit word character in regex; marked by <-- HERE in mE<sol>%sE<sol>|perldiag/"Group name must start with a non-digit word character in regex; marked by <-- HERE in m/%s/">
+
+This error has been added for C<(?&0)>, which is invalid. It used to
+produce an incomprehensible error message [perl #101666].
+
+=item *
+
+L<Can't use an undefined value as a subroutine reference|perldiag/"Can't use an undefined value as %s reference">
+
+Calling an undefined value as a subroutine now produces this error message.
+It used to, but was accidentally disabled, first in Perl 5.004 for
+non-magical variables, and then in Perl v5.14 for magical (e.g., tied)
+variables. It has now been restored. In the mean time, undef was treated
+as an empty string [perl #113576].
+
+=item *
+
+L<Experimental "%s" subs not enabled|perldiag/"Experimental "%s" subs not enabled">
+
+To use lexical subs, you must first enable them:
+
+ no warnings 'experimental::lexical_subs';
+ use feature 'lexical_subs';
+ my sub foo { ... }
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+L<'Strings with code points over 0xFF may not be mapped into in-memory file handles'|perldiag/"Strings with code points over 0xFF may not be mapped into in-memory file handles">
+
+=item *
+
+L<'%s' resolved to '\o{%s}%d'|perldiag/"'%s' resolved to '\o{%s}%d'">
+
+=item *
+
+L<'Trailing white-space in a charnames alias definition is deprecated'|perldiag/"Trailing white-space in a charnames alias definition is deprecated">
+
+=item *
+
+L<'A sequence of multiple spaces in a charnames alias definition is deprecated'|perldiag/"A sequence of multiple spaces in a charnames alias definition is deprecated">
+
+=item *
+
+L<'Passing malformed UTF-8 to "%s" is deprecated'|perldiag/"Passing malformed UTF-8 to "%s" is deprecated">
+
+=item *
+
+L<Subroutine "&%s" is not available|perldiag/"Subroutine "&%s" is not available">
+
+(W closure) During compilation, an inner named subroutine or eval is
+attempting to capture an outer lexical subroutine that is not currently
+available. This can happen for one of two reasons. First, the lexical
+subroutine may be declared in an outer anonymous subroutine that has not
+yet been created. (Remember that named subs are created at compile time,
+while anonymous subs are created at run-time.) For example,
+
+ sub { my sub a {...} sub f { \&a } }
+
+At the time that f is created, it can't capture the current the "a" sub,
+since the anonymous subroutine hasn't been created yet. Conversely, the
+following won't give a warning since the anonymous subroutine has by now
+been created and is live:
+
+ sub { my sub a {...} eval 'sub f { \&a }' }->();
+
+The second situation is caused by an eval accessing a variable that has
+gone out of scope, for example,
+
+ sub f {
+ my sub a {...}
+ sub { eval '\&a' }
+ }
+ f()->();
+
+Here, when the '\&a' in the eval is being compiled, f() is not currently
+being executed, so its &a is not available for capture.
+
+=item *
+
+L<"%s" subroutine &%s masks earlier declaration in same %s|perldiag/"%s" subroutine &%s masks earlier declaration in same %s>
+
+(W misc) A "my" or "state" subroutine has been redeclared in the
+current scope or statement, effectively eliminating all access to
+the previous instance. This is almost always a typographical error.
+Note that the earlier subroutine will still exist until the end of
+the scope or until all closure references to it are destroyed.
+
+=item *
+
+L<The %s feature is experimental|perldiag/"The %s feature is experimental">
+
+(S experimental) This warning is emitted if you enable an experimental
+feature via C<use feature>. Simply suppress the warning if you want
+to use the feature, but know that in doing so you are taking the risk
+of using an experimental feature which may change or be removed in a
+future Perl version:
+
+ no warnings "experimental::lexical_subs";
+ use feature "lexical_subs";
+
+=item *
+
+L<sleep(%u) too large|perldiag/"sleep(%u) too large">
+
+(W overflow) You called C<sleep> with a number that was larger than it can
+reliably handle and C<sleep> probably slept for less time than requested.
+
+=item *
+
+L<Wide character in setenv|perldiag/"Wide character in %s">
+
+Attempts to put wide characters into environment variables via C<%ENV> now
+provoke this warning.
+
+=item *
+
+"L<Invalid negative number (%s) in chr|perldiag/"Invalid negative number (%s) in chr">"
+
+C<chr()> now warns when passed a negative value [perl #83048].
+
+=item *
+
+"L<Integer overflow in srand|perldiag/"Integer overflow in srand">"
+
+C<srand()> now warns when passed a value that doesn't fit in a C<UV> (since the
+value will be truncated rather than overflowing) [perl #40605].
+
+=item *
+
+"L<-i used with no filenames on the command line, reading from STDIN|perldiag/"-i used with no filenames on the command line, reading from STDIN">"
+
+Running perl with the C<-i> flag now warns if no input files are provided on
+the command line [perl #113410].
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+L<$* is no longer supported|perldiag/"$* is no longer supported">
+
+The warning that use of C<$*> and C<$#> is no longer supported is now
+generated for every location that references them. Previously it would fail
+to be generated if another variable using the same typeglob was seen first
+(e.g. C<@*> before C<$*>), and would not be generated for the second and
+subsequent uses. (It's hard to fix the failure to generate warnings at all
+without also generating them every time, and warning every time is
+consistent with the warnings that C<$[> used to generate.)
+
+=item *
+
+The warnings for C<\b{> and C<\B{> were added. They are a deprecation
+warning which should be turned off by that category. One should not
+have to turn off regular regexp warnings as well to get rid of these.
+
+=item *
+
+L<Constant(%s): Call to &{$^H{%s}} did not return a defined value|perldiag/Constant(%s): Call to &{$^H{%s}} did not return a defined value>
+
+Constant overloading that returns C<undef> results in this error message.
+For numeric constants, it used to say "Constant(undef)". "undef" has been
+replaced with the number itself.
+
+=item *
+
+The error produced when a module cannot be loaded now includes a hint that
+the module may need to be installed: "Can't locate hopping.pm in @INC (you
+may need to install the hopping module) (@INC contains: ...)"
+
+=item *
+
+L<vector argument not supported with alpha versions|perldiag/vector argument not supported with alpha versions>
+
+This warning was not suppressable, even with C<no warnings>. Now it is
+suppressible, and has been moved from the "internal" category to the
+"printf" category.
+
+=item *
+
+C<< Can't do {n,m} with n > m in regex; marked by <-- HERE in m/%s/ >>
+
+This fatal error has been turned into a warning that reads:
+
+L<< Quantifier {n,m} with n > m can't match in regex | perldiag/Quantifier {n,m} with n > m can't match in regex >>
+
+(W regexp) Minima should be less than or equal to maxima. If you really want
+your regexp to match something 0 times, just put {0}.
+
+=item *
+
+The "Runaway prototype" warning that occurs in bizarre cases has been
+removed as being unhelpful and inconsistent.
+
+=item *
+
+The "Not a format reference" error has been removed, as the only case in
+which it could be triggered was a bug.
+
+=item *
+
+The "Unable to create sub named %s" error has been removed for the same
+reason.
+
+=item *
+
+The 'Can't use "my %s" in sort comparison' error has been downgraded to a
+warning, '"my %s" used in sort comparison' (with 'state' instead of 'my'
+for state variables). In addition, the heuristics for guessing whether
+lexical $a or $b has been misused have been improved to generate fewer
+false positives. Lexical $a and $b are no longer disallowed if they are
+outside the sort block. Also, a named unary or list operator inside the
+sort block no longer causes the $a or $b to be ignored [perl #86136].
+
+=back
+
+=head1 Utility Changes
+
+=head3 L<h2xs>
+
+=over 4
+
+=item *
+
+F<h2xs> no longer produces invalid code for empty defines. [perl #20636]
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+Added C<useversionedarchname> option to Configure
+
+When set, it includes 'api_versionstring' in 'archname'. E.g.
+x86_64-linux-5.13.6-thread-multi. It is unset by default.
+
+This feature was requested by Tim Bunce, who observed that
+C<INSTALL_BASE> creates a library structure that does not
+differentiate by perl version. Instead, it places architecture
+specific files in "$install_base/lib/perl5/$archname". This makes
+it difficult to use a common C<INSTALL_BASE> library path with
+multiple versions of perl.
+
+By setting C<-Duseversionedarchname>, the $archname will be
+distinct for architecture I<and> API version, allowing mixed use of
+C<INSTALL_BASE>.
+
+=item *
+
+Add a C<PERL_NO_INLINE_FUNCTIONS> option
+
+If C<PERL_NO_INLINE_FUNCTIONS> is defined, don't include "inline.h"
+
+This permits test code to include the perl headers for definitions without
+creating a link dependency on the perl library (which may not exist yet).
+
+=item *
+
+Configure will honour the external C<MAILDOMAIN> environment variable, if set.
+
+=item *
+
+C<installman> no longer ignores the silent option
+
+=item *
+
+Both C<META.yml> and C<META.json> files are now included in the distribution.
+
+=item *
+
+F<Configure> will now correctly detect C<isblank()> when compiling with a C++
+compiler.
+
+=item *
+
+The pager detection in F<Configure> has been improved to allow responses which
+specify options after the program name, e.g. B</usr/bin/less -R>, if the user
+accepts the default value. This helps B<perldoc> when handling ANSI escapes
+[perl #72156].
+
+=back
+
+=head1 Testing
+
+=over 4
+
+=item *
+
+The test suite now has a section for tests that require very large amounts
+of memory. These tests won't run by default; they can be enabled by
+setting the C<PERL_TEST_MEMORY> environment variable to the number of
+gibibytes of memory that may be safely used.
+
+=back
+
+=head1 Platform Support
+
+=head2 Discontinued Platforms
+
+=over 4
+
+=item BeOS
+
+BeOS was an operating system for personal computers developed by Be Inc,
+initially for their BeBox hardware. The OS Haiku was written as an open
+source replacement for/continuation of BeOS, and its perl port is current and
+actively maintained.
+
+=item UTS Global
+
+Support code relating to UTS global has been removed. UTS was a mainframe
+version of System V created by Amdahl, subsequently sold to UTS Global. The
+port has not been touched since before Perl v5.8.0, and UTS Global is now
+defunct.
+
+=item VM/ESA
+
+Support for VM/ESA has been removed. The port was tested on 2.3.0, which
+IBM ended service on in March 2002. 2.4.0 ended service in June 2003, and
+was superseded by Z/VM. The current version of Z/VM is V6.2.0, and scheduled
+for end of service on 2015/04/30.
+
+=item MPE/IX
+
+Support for MPE/IX has been removed.
+
+=item EPOC
+
+Support code relating to EPOC has been removed. EPOC was a family of
+operating systems developed by Psion for mobile devices. It was the
+predecessor of Symbian. The port was last updated in April 2002.
+
+=item Rhapsody
+
+Support for Rhapsody has been removed.
+
+=back
+
+=head2 Platform-Specific Notes
+
+=head3 AIX
+
+Configure now always adds C<-qlanglvl=extc99> to the CC flags on AIX when
+using xlC. This will make it easier to compile a number of XS-based modules
+that assume C99 [perl #113778].
+
+=head3 clang++
+
+There is now a workaround for a compiler bug that prevented compiling
+with clang++ since Perl v5.15.7 [perl #112786].
+
+=head3 C++
+
+When compiling the Perl core as C++ (which is only semi-supported), the
+mathom functions are now compiled as C<extern "C">, to ensure proper
+binary compatibility. (However, binary compatibility isn't generally
+guaranteed anyway in the situations where this would matter.)
+
+=head3 Darwin
+
+Stop hardcoding an alignment on 8 byte boundaries to fix builds using
+-Dusemorebits.
+
+=head3 Haiku
+
+Perl should now work out of the box on Haiku R1 Alpha 4.
+
+=head3 MidnightBSD
+
+C<libc_r> was removed from recent versions of MidnightBSD and older versions
+work better with C<pthread>. Threading is now enabled using C<pthread> which
+corrects build errors with threading enabled on 0.4-CURRENT.
+
+=head3 Solaris
+
+In Configure, avoid running sed commands with flags not supported on Solaris.
+
+=head3 VMS
+
+=over
+
+=item *
+
+Where possible, the case of filenames and command-line arguments is now
+preserved by enabling the CRTL features C<DECC$EFS_CASE_PRESERVE> and
+C<DECC$ARGV_PARSE_STYLE> at start-up time. The latter only takes effect
+when extended parse is enabled in the process from which Perl is run.
+
+=item *
+
+The character set for Extended Filename Syntax (EFS) is now enabled by default
+on VMS. Among other things, this provides better handling of dots in directory
+names, multiple dots in filenames, and spaces in filenames. To obtain the old
+behavior, set the logical name C<DECC$EFS_CHARSET> to C<DISABLE>.
+
+=item *
+
+Fixed linking on builds configured with C<-Dusemymalloc=y>.
+
+=item *
+
+Experimental support for building Perl with the HP C++ compiler is available
+by configuring with C<-Dusecxx>.
+
+=item *
+
+All C header files from the top-level directory of the distribution are now
+installed on VMS, providing consistency with a long-standing practice on other
+platforms. Previously only a subset were installed, which broke non-core
+extension builds for extensions that depended on the missing include files.
+
+=item *
+
+Quotes are now removed from the command verb (but not the parameters) for
+commands spawned via C<system>, backticks, or a piped C<open>. Previously,
+quotes on the verb were passed through to DCL, which would fail to recognize
+the command. Also, if the verb is actually a path to an image or command
+procedure on an ODS-5 volume, quoting it now allows the path to contain spaces.
+
+=item *
+
+The B<a2p> build has been fixed for the HP C++ compiler on OpenVMS.
+
+=back
+
+=head3 Win32
+
+=over
+
+=item *
+
+Perl can now be built using Microsoft's Visual C++ 2012 compiler by specifying
+CCTYPE=MSVC110 (or MSVC110FREE if you are using the free Express edition for
+Windows Desktop) in F<win32/Makefile>.
+
+=item *
+
+The option to build without C<USE_SOCKETS_AS_HANDLES> has been removed.
+
+=item *
+
+Fixed a problem where perl could crash while cleaning up threads (including the
+main thread) in threaded debugging builds on Win32 and possibly other platforms
+[perl #114496].
+
+=item *
+
+A rare race condition that would lead to L<sleep|perlfunc/sleep> taking more
+time than requested, and possibly even hanging, has been fixed [perl #33096].
+
+=item *
+
+C<link> on Win32 now attempts to set C<$!> to more appropriate values
+based on the Win32 API error code. [perl #112272]
+
+Perl no longer mangles the environment block, e.g. when launching a new
+sub-process, when the environment contains non-ASCII characters. Known
+problems still remain, however, when the environment contains characters
+outside of the current ANSI codepage (e.g. see the item about Unicode in
+C<%ENV> in L<http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/todo.pod>).
+[perl #113536]
+
+=item *
+
+Building perl with some Windows compilers used to fail due to a problem
+with miniperl's C<glob> operator (which uses the C<perlglob> program)
+deleting the PATH environment variable [perl #113798].
+
+=item *
+
+A new makefile option, C<USE_64_BIT_INT>, has been added to the Windows
+makefiles. Set this to "define" when building a 32-bit perl if you want
+it to use 64-bit integers.
+
+Machine code size reductions, already made to the DLLs of XS modules in
+Perl v5.17.2, have now been extended to the perl DLL itself.
+
+Building with VC++ 6.0 was inadvertently broken in Perl v5.17.2 but has
+now been fixed again.
+
+=back
+
+=head3 WinCE
+
+Building on WinCE is now possible once again, although more work is required
+to fully restore a clean build.
+
+=head1 Internal Changes
+
+=over
+
+=item *
+
+Synonyms for the misleadingly named C<av_len()> have been created:
+C<av_top_index()> and C<av_tindex>. All three of these return the
+number of the highest index in the array, not the number of elements it
+contains.
+
+=item *
+
+SvUPGRADE() is no longer an expression. Originally this macro (and its
+underlying function, sv_upgrade()) were documented as boolean, although
+in reality they always croaked on error and never returned false. In 2005
+the documentation was updated to specify a void return value, but
+SvUPGRADE() was left always returning 1 for backwards compatibility. This
+has now been removed, and SvUPGRADE() is now a statement with no return
+value.
+
+So this is now a syntax error:
+
+ if (!SvUPGRADE(sv)) { croak(...); }
+
+If you have code like that, simply replace it with
+
+ SvUPGRADE(sv);
+
+or to avoid compiler warnings with older perls, possibly
+
+ (void)SvUPGRADE(sv);
+
+=item *
+
+Perl has a new copy-on-write mechanism that allows any SvPOK scalar to be
+upgraded to a copy-on-write scalar. A reference count on the string buffer
+is stored in the string buffer itself. This feature is B<not enabled by
+default>.
+
+It can be enabled in a perl build by running F<Configure> with
+B<-Accflags=-DPERL_NEW_COPY_ON_WRITE>, and we would encourage XS authors
+to try their code with such an enabled perl, and provide feedback.
+Unfortunately, there is not yet a good guide to updating XS code to cope
+with COW. Until such a document is available, consult the perl5-porters
+mailing list.
+
+It breaks a few XS modules by allowing copy-on-write scalars to go
+through code paths that never encountered them before.
+
+=item *
+
+Copy-on-write no longer uses the SvFAKE and SvREADONLY flags. Hence,
+SvREADONLY indicates a true read-only SV.
+
+Use the SvIsCOW macro (as before) to identify a copy-on-write scalar.
+
+=item *
+
+C<PL_glob_index> is gone.
+
+=item *
+
+The private Perl_croak_no_modify has had its context parameter removed. It is
+now has a void prototype. Users of the public API croak_no_modify remain
+unaffected.
+
+=item *
+
+Copy-on-write (shared hash key) scalars are no longer marked read-only.
+C<SvREADONLY> returns false on such an SV, but C<SvIsCOW> still returns
+true.
+
+=item *
+
+A new op type, C<OP_PADRANGE> has been introduced. The perl peephole
+optimiser will, where possible, substitute a single padrange op for a
+pushmark followed by one or more pad ops, and possibly also skipping list
+and nextstate ops. In addition, the op can carry out the tasks associated
+with the RHS of a C<< my(...) = @_ >> assignment, so those ops may be optimised
+away too.
+
+=item *
+
+Case-insensitive matching inside a [bracketed] character class with a
+multi-character fold no longer excludes one of the possibilities in the
+circumstances that it used to. [perl #89774].
+
+=item *
+
+C<PL_formfeed> has been removed.
+
+=item *
+
+The regular expression engine no longer reads one byte past the end of the
+target string. While for all internally well-formed scalars this should
+never have been a problem, this change facilitates clever tricks with
+string buffers in CPAN modules. [perl #73542]
+
+=item *
+
+Inside a BEGIN block, C<PL_compcv> now points to the currently-compiling
+subroutine, rather than the BEGIN block itself.
+
+=item *
+
+C<mg_length> has been deprecated.
+
+=item *
+
+C<sv_len> now always returns a byte count and C<sv_len_utf8> a character
+count. Previously, C<sv_len> and C<sv_len_utf8> were both buggy and would
+sometimes returns bytes and sometimes characters. C<sv_len_utf8> no longer
+assumes that its argument is in UTF-8. Neither of these creates UTF-8 caches
+for tied or overloaded values or for non-PVs any more.
+
+=item *
+
+C<sv_mortalcopy> now copies string buffers of shared hash key scalars when
+called from XS modules [perl #79824].
+
+=item *
+
+C<RXf_SPLIT> and C<RXf_SKIPWHITE> are no longer used. They are now
+#defined as 0.
+
+=item *
+
+The new C<RXf_MODIFIES_VARS> flag can be set by custom regular expression
+engines to indicate that the execution of the regular expression may cause
+variables to be modified. This lets C<s///> know to skip certain
+optimisations. Perl's own regular expression engine sets this flag for the
+special backtracking verbs that set $REGMARK and $REGERROR.
+
+=item *
+
+The APIs for accessing lexical pads have changed considerably.
+
+C<PADLIST>s are now longer C<AV>s, but their own type instead.
+C<PADLIST>s now contain a C<PAD> and a C<PADNAMELIST> of C<PADNAME>s,
+rather than C<AV>s for the pad and the list of pad names. C<PAD>s,
+C<PADNAMELIST>s, and C<PADNAME>s are to be accessed as such through the
+newly added pad API instead of the plain C<AV> and C<SV> APIs. See
+L<perlapi> for details.
+
+=item *
+
+In the regex API, the numbered capture callbacks are passed an index
+indicating what match variable is being accessed. There are special
+index values for the C<$`, $&, $&> variables. Previously the same three
+values were used to retrieve C<${^PREMATCH}, ${^MATCH}, ${^POSTMATCH}>
+too, but these have now been assigned three separate values. See
+L<perlreapi/Numbered capture callbacks>.
+
+=item *
+
+C<PL_sawampersand> was previously a boolean indicating that any of
+C<$`, $&, $&> had been seen; it now contains three one-bit flags
+indicating the presence of each of the variables individually.
+
+=item *
+
+The C<CV *> typemap entry now supports C<&{}> overloading and typeglobs,
+just like C<&{...}> [perl #96872].
+
+=item *
+
+The C<SVf_AMAGIC> flag to indicate overloading is now on the stash, not the
+object. It is now set automatically whenever a method or @ISA changes, so
+its meaning has changed, too. It now means "potentially overloaded". When
+the overload table is calculated, the flag is automatically turned off if
+there is no overloading, so there should be no noticeable slowdown.
+
+The staleness of the overload tables is now checked when overload methods
+are invoked, rather than during C<bless>.
+
+"A" magic is gone. The changes to the handling of the C<SVf_AMAGIC> flag
+eliminate the need for it.
+
+C<PL_amagic_generation> has been removed as no longer necessary. For XS
+modules, it is now a macro alias to C<PL_na>.
+
+The fallback overload setting is now stored in a stash entry separate from
+overloadedness itself.
+
+=item *
+
+The character-processing code has been cleaned up in places. The changes
+should be operationally invisible.
+
+=item *
+
+The C<study> function was made a no-op in v5.16. It was simply disabled via
+a C<return> statement; the code was left in place. Now the code supporting
+what C<study> used to do has been removed.
+
+=item *
+
+Under threaded perls, there is no longer a separate PV allocated for every
+COP to store its package name (C<< cop->stashpv >>). Instead, there is an
+offset (C<< cop->stashoff >>) into the new C<PL_stashpad> array, which
+holds stash pointers.
+
+=item *
+
+In the pluggable regex API, the C<regexp_engine> struct has acquired a new
+field C<op_comp>, which is currently just for perl's internal use, and
+should be initialized to NULL by other regex plugin modules.
+
+=item *
+
+A new function C<alloccopstash> has been added to the API, but is considered
+experimental. See L<perlapi>.
+
+=item *
+
+Perl used to implement get magic in a way that would sometimes hide bugs in
+code that could call mg_get() too many times on magical values. This hiding of
+errors no longer occurs, so long-standing bugs may become visible now. If
+you see magic-related errors in XS code, check to make sure it, together
+with the Perl API functions it uses, calls mg_get() only once on SvGMAGICAL()
+values.
+
+=item *
+
+OP allocation for CVs now uses a slab allocator. This simplifies
+memory management for OPs allocated to a CV, so cleaning up after a
+compilation error is simpler and safer [perl #111462][perl #112312].
+
+=item *
+
+C<PERL_DEBUG_READONLY_OPS> has been rewritten to work with the new slab
+allocator, allowing it to catch more violations than before.
+
+=item *
+
+The old slab allocator for ops, which was only enabled for C<PERL_IMPLICIT_SYS>
+and C<PERL_DEBUG_READONLY_OPS>, has been retired.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+Here document terminators no longer require a terminating newline character when
+they occur at the end of a file. This was already the case at the end of a
+string eval [perl #65838].
+
+=item *
+
+C<-DPERL_GLOBAL_STRUCT> builds now free the global struct B<after>
+they've finished using it.
+
+=item *
+
+A trailing '/' on a path in @INC will no longer have an additional '/'
+appended.
+
+=item *
+
+The C<:crlf> layer now works when unread data doesn't fit into its own
+buffer. [perl #112244].
+
+=item *
+
+C<ungetc()> now handles UTF-8 encoded data. [perl #116322].
+
+=item *
+
+A bug in the core typemap caused any C types that map to the T_BOOL core
+typemap entry to not be set, updated, or modified when the T_BOOL variable was
+used in an OUTPUT: section with an exception for RETVAL. T_BOOL in an INPUT:
+section was not affected. Using a T_BOOL return type for an XSUB (RETVAL)
+was not affected. A side effect of fixing this bug is, if a T_BOOL is specified
+in the OUTPUT: section (which previous did nothing to the SV), and a read only
+SV (literal) is passed to the XSUB, croaks like "Modification of a read-only
+value attempted" will happen. [perl #115796]
+
+=item *
+
+On many platforms, providing a directory name as the script name caused perl
+to do nothing and report success. It should now universally report an error
+and exit nonzero. [perl #61362]
+
+=item *
+
+C<sort {undef} ...> under fatal warnings no longer crashes. It had
+begun crashing in Perl v5.16.
+
+=item *
+
+Stashes blessed into each other
+(C<bless \%Foo::, 'Bar'; bless \%Bar::, 'Foo'>) no longer result in double
+frees. This bug started happening in Perl v5.16.
+
+=item *
+
+Numerous memory leaks have been fixed, mostly involving fatal warnings and
+syntax errors.
+
+=item *
+
+Some failed regular expression matches such as C<'f' =~ /../g> were not
+resetting C<pos>. Also, "match-once" patterns (C<m?...?g>) failed to reset
+it, too, when invoked a second time [perl #23180].
+
+=item *
+
+Several bugs involving C<local *ISA> and C<local *Foo::> causing stale
+MRO caches have been fixed.
+
+=item *
+
+Defining a subroutine when its typeglob has been aliased no longer results
+in stale method caches. This bug was introduced in Perl v5.10.
+
+=item *
+
+Localising a typeglob containing a subroutine when the typeglob's package
+has been deleted from its parent stash no longer produces an error. This
+bug was introduced in Perl v5.14.
+
+=item *
+
+Under some circumstances, C<local *method=...> would fail to reset method
+caches upon scope exit.
+
+=item *
+
+C</[.foo.]/> is no longer an error, but produces a warning (as before) and
+is treated as C</[.fo]/> [perl #115818].
+
+=item *
+
+C<goto $tied_var> now calls FETCH before deciding what type of goto
+(subroutine or label) this is.
+
+=item *
+
+Renaming packages through glob assignment
+(C<*Foo:: = *Bar::; *Bar:: = *Baz::>) in combination with C<m?...?> and
+C<reset> no longer makes threaded builds crash.
+
+=item *
+
+A number of bugs related to assigning a list to hash have been fixed. Many of
+these involve lists with repeated keys like C<(1, 1, 1, 1)>.
+
+=over 4
+
+=item *
+
+The expression C<scalar(%h = (1, 1, 1, 1))> now returns C<4>, not C<2>.
+
+=item *
+
+The return value of C<%h = (1, 1, 1)> in list context was wrong. Previously
+this would return C<(1, undef, 1)>, now it returns C<(1, undef)>.
+
+=item *
+
+Perl now issues the same warning on C<($s, %h) = (1, {})> as it does for
+C<(%h) = ({})>, "Reference found where even-sized list expected".
+
+=item *
+
+A number of additional edge cases in list assignment to hashes were
+corrected. For more details see commit 23b7025ebc.
+
+=back
+
+=item *
+
+Attributes applied to lexical variables no longer leak memory.
+[perl #114764]
+
+=item *
+
+C<dump>, C<goto>, C<last>, C<next>, C<redo> or C<require> followed by a
+bareword (or version) and then an infix operator is no longer a syntax
+error. It used to be for those infix operators (like C<+>) that have a
+different meaning where a term is expected. [perl #105924]
+
+=item *
+
+C<require a::b . 1> and C<require a::b + 1> no longer produce erroneous
+ambiguity warnings. [perl #107002]
+
+=item *
+
+Class method calls are now allowed on any string, and not just strings
+beginning with an alphanumeric character. [perl #105922]
+
+=item *
+
+An empty pattern created with C<qr//> used in C<m///> no longer triggers
+the "empty pattern reuses last pattern" behaviour. [perl #96230]
+
+=item *
+
+Tying a hash during iteration no longer results in a memory leak.
+
+=item *
+
+Freeing a tied hash during iteration no longer results in a memory leak.
+
+=item *
+
+List assignment to a tied array or hash that dies on STORE no longer
+results in a memory leak.
+
+=item *
+
+If the hint hash (C<%^H>) is tied, compile-time scope entry (which copies
+the hint hash) no longer leaks memory if FETCH dies. [perl #107000]
+
+=item *
+
+Constant folding no longer inappropriately triggers the special
+C<split " "> behaviour. [perl #94490]
+
+=item *
+
+C<defined scalar(@array)>, C<defined do { &foo }>, and similar constructs
+now treat the argument to C<defined> as a simple scalar. [perl #97466]
+
+=item *
+
+Running a custom debugging that defines no C<*DB::DB> glob or provides a
+subroutine stub for C<&DB::DB> no longer results in a crash, but an error
+instead. [perl #114990]
+
+=item *
+
+C<reset ""> now matches its documentation. C<reset> only resets C<m?...?>
+patterns when called with no argument. An empty string for an argument now
+does nothing. (It used to be treated as no argument.) [perl #97958]
+
+=item *
+
+C<printf> with an argument returning an empty list no longer reads past the
+end of the stack, resulting in erratic behaviour. [perl #77094]
+
+=item *
+
+C<--subname> no longer produces erroneous ambiguity warnings.
+[perl #77240]
+
+=item *
+
+C<v10> is now allowed as a label or package name. This was inadvertently
+broken when v-strings were added in Perl v5.6. [perl #56880]
+
+=item *
+
+C<length>, C<pos>, C<substr> and C<sprintf> could be confused by ties,
+overloading, references and typeglobs if the stringification of such
+changed the internal representation to or from UTF-8. [perl #114410]
+
+=item *
+
+utf8::encode now calls FETCH and STORE on tied variables. utf8::decode now
+calls STORE (it was already calling FETCH).
+
+=item *
+
+C<$tied =~ s/$non_utf8/$utf8/> no longer loops infinitely if the tied
+variable returns a Latin-1 string, shared hash key scalar, or reference or
+typeglob that stringifies as ASCII or Latin-1. This was a regression from
+v5.12.
+
+=item *
+
+C<s///> without /e is now better at detecting when it needs to forego
+certain optimisations, fixing some buggy cases:
+
+=over
+
+=item *
+
+Match variables in certain constructs (C<&&>, C<||>, C<..> and others) in
+the replacement part; e.g., C<s/(.)/$l{$a||$1}/g>. [perl #26986]
+
+=item *
+
+Aliases to match variables in the replacement.
+
+=item *
+
+C<$REGERROR> or C<$REGMARK> in the replacement. [perl #49190]
+
+=item *
+
+An empty pattern (C<s//$foo/>) that causes the last-successful pattern to
+be used, when that pattern contains code blocks that modify the variables
+in the replacement.
+
+=back
+
+=item *
+
+The taintedness of the replacement string no longer affects the taintedness
+of the return value of C<s///e>.
+
+=item *
+
+The C<$|> autoflush variable is created on-the-fly when needed. If this
+happened (e.g., if it was mentioned in a module or eval) when the
+currently-selected filehandle was a typeglob with an empty IO slot, it used
+to crash. [perl #115206]
+
+=item *
+
+Line numbers at the end of a string eval are no longer off by one.
+[perl #114658]
+
+=item *
+
+ at INC filters (subroutines returned by subroutines in @INC) that set $_ to a
+copy-on-write scalar no longer cause the parser to modify that string
+buffer in place.
+
+=item *
+
+C<length($object)> no longer returns the undefined value if the object has
+string overloading that returns undef. [perl #115260]
+
+=item *
+
+The use of C<PL_stashcache>, the stash name lookup cache for method calls, has
+been restored,
+
+Commit da6b625f78f5f133 in August 2011 inadvertently broke the code that looks
+up values in C<PL_stashcache>. As it's a only cache, quite correctly everything
+carried on working without it.
+
+=item *
+
+The error "Can't localize through a reference" had disappeared in v5.16.0
+when C<local %$ref> appeared on the last line of an lvalue subroutine.
+This error disappeared for C<\local %$ref> in perl v5.8.1. It has now
+been restored.
+
+=item *
+
+The parsing of here-docs has been improved significantly, fixing several
+parsing bugs and crashes and one memory leak, and correcting wrong
+subsequent line numbers under certain conditions.
+
+=item *
+
+Inside an eval, the error message for an unterminated here-doc no longer
+has a newline in the middle of it [perl #70836].
+
+=item *
+
+A substitution inside a substitution pattern (C<s/${s|||}//>) no longer
+confuses the parser.
+
+=item *
+
+It may be an odd place to allow comments, but C<s//"" # hello/e> has
+always worked, I<unless> there happens to be a null character before the
+first #. Now it works even in the presence of nulls.
+
+=item *
+
+An invalid range in C<tr///> or C<y///> no longer results in a memory leak.
+
+=item *
+
+String eval no longer treats a semicolon-delimited quote-like operator at
+the very end (C<eval 'q;;'>) as a syntax error.
+
+=item *
+
+C<< warn {$_ => 1} + 1 >> is no longer a syntax error. The parser used to
+get confused with certain list operators followed by an anonymous hash and
+then an infix operator that shares its form with a unary operator.
+
+=item *
+
+C<(caller $n)[6]> (which gives the text of the eval) used to return the
+actual parser buffer. Modifying it could result in crashes. Now it always
+returns a copy. The string returned no longer has "\n;" tacked on to the
+end. The returned text also includes here-doc bodies, which used to be
+omitted.
+
+=item *
+
+The UTF-8 position cache is now reset when accessing magical variables, to
+avoid the string buffer and the UTF-8 position cache getting out of sync
+[perl #114410].
+
+=item *
+
+Various cases of get magic being called twice for magical UTF-8
+strings have been fixed.
+
+=item *
+
+This code (when not in the presence of C<$&> etc)
+
+ $_ = 'x' x 1_000_000;
+ 1 while /(.)/;
+
+used to skip the buffer copy for performance reasons, but suffered from C<$1>
+etc changing if the original string changed. That's now been fixed.
+
+=item *
+
+Perl doesn't use PerlIO anymore to report out of memory messages, as PerlIO
+might attempt to allocate more memory.
+
+=item *
+
+In a regular expression, if something is quantified with C<{n,m}> where
+C<S<n E<gt> m>>, it can't possibly match. Previously this was a fatal
+error, but now is merely a warning (and that something won't match).
+[perl #82954].
+
+=item *
+
+It used to be possible for formats defined in subroutines that have
+subsequently been undefined and redefined to close over variables in the
+wrong pad (the newly-defined enclosing sub), resulting in crashes or
+"Bizarre copy" errors.
+
+=item *
+
+Redefinition of XSUBs at run time could produce warnings with the wrong
+line number.
+
+=item *
+
+The %vd sprintf format does not support version objects for alpha versions.
+It used to output the format itself (%vd) when passed an alpha version, and
+also emit an "Invalid conversion in printf" warning. It no longer does,
+but produces the empty string in the output. It also no longer leaks
+memory in this case.
+
+=item *
+
+C<< $obj->SUPER::method >> calls in the main package could fail if the
+SUPER package had already been accessed by other means.
+
+=item *
+
+Stash aliasing (C<< *foo:: = *bar:: >>) no longer causes SUPER calls to ignore
+changes to methods or @ISA or use the wrong package.
+
+=item *
+
+Method calls on packages whose names end in ::SUPER are no longer treated
+as SUPER method calls, resulting in failure to find the method.
+Furthermore, defining subroutines in such packages no longer causes them to
+be found by SUPER method calls on the containing package [perl #114924].
+
+=item *
+
+C<\w> now matches the code points U+200C (ZERO WIDTH NON-JOINER) and U+200D
+(ZERO WIDTH JOINER). C<\W> no longer matches these. This change is because
+Unicode corrected their definition of what C<\w> should match.
+
+=item *
+
+C<dump LABEL> no longer leaks its label.
+
+=item *
+
+Constant folding no longer changes the behaviour of functions like C<stat()>
+and C<truncate()> that can take either filenames or handles.
+C<stat 1 ? foo : bar> nows treats its argument as a file name (since it is an
+arbitrary expression), rather than the handle "foo".
+
+=item *
+
+C<truncate FOO, $len> no longer falls back to treating "FOO" as a file name if
+the filehandle has been deleted. This was broken in Perl v5.16.0.
+
+=item *
+
+Subroutine redefinitions after sub-to-glob and glob-to-glob assignments no
+longer cause double frees or panic messages.
+
+=item *
+
+C<s///> now turns vstrings into plain strings when performing a substitution,
+even if the resulting string is the same (C<s/a/a/>).
+
+=item *
+
+Prototype mismatch warnings no longer erroneously treat constant subs as having
+no prototype when they actually have "".
+
+=item *
+
+Constant subroutines and forward declarations no longer prevent prototype
+mismatch warnings from omitting the sub name.
+
+=item *
+
+C<undef> on a subroutine now clears call checkers.
+
+=item *
+
+The C<ref> operator started leaking memory on blessed objects in Perl v5.16.0.
+This has been fixed [perl #114340].
+
+=item *
+
+C<use> no longer tries to parse its arguments as a statement, making
+C<use constant { () };> a syntax error [perl #114222].
+
+=item *
+
+On debugging builds, "uninitialized" warnings inside formats no longer cause
+assertion failures.
+
+=item *
+
+On debugging builds, subroutines nested inside formats no longer cause
+assertion failures [perl #78550].
+
+=item *
+
+Formats and C<use> statements are now permitted inside formats.
+
+=item *
+
+C<print $x> and C<sub { print $x }-E<gt>()> now always produce the same output.
+It was possible for the latter to refuse to close over $x if the variable was
+not active; e.g., if it was defined outside a currently-running named
+subroutine.
+
+=item *
+
+Similarly, C<print $x> and C<print eval '$x'> now produce the same output.
+This also allows "my $x if 0" variables to be seen in the debugger [perl
+#114018].
+
+=item *
+
+Formats called recursively no longer stomp on their own lexical variables, but
+each recursive call has its own set of lexicals.
+
+=item *
+
+Attempting to free an active format or the handle associated with it no longer
+results in a crash.
+
+=item *
+
+Format parsing no longer gets confused by braces, semicolons and low-precedence
+operators. It used to be possible to use braces as format delimiters (instead
+of C<=> and C<.>), but only sometimes. Semicolons and low-precedence operators
+in format argument lines no longer confuse the parser into ignoring the line's
+return value. In format argument lines, braces can now be used for anonymous
+hashes, instead of being treated always as C<do> blocks.
+
+=item *
+
+Formats can now be nested inside code blocks in regular expressions and other
+quoted constructs (C</(?{...})/> and C<qq/${...}/>) [perl #114040].
+
+=item *
+
+Formats are no longer created after compilation errors.
+
+=item *
+
+Under debugging builds, the B<-DA> command line option started crashing in Perl
+v5.16.0. It has been fixed [perl #114368].
+
+=item *
+
+A potential deadlock scenario involving the premature termination of a pseudo-
+forked child in a Windows build with ithreads enabled has been fixed. This
+resolves the common problem of the F<t/op/fork.t> test hanging on Windows [perl
+#88840].
+
+=item *
+
+The code which generates errors from C<require()> could potentially read one or
+two bytes before the start of the filename for filenames less than three bytes
+long and ending C</\.p?\z/>. This has now been fixed. Note that it could
+never have happened with module names given to C<use()> or C<require()> anyway.
+
+=item *
+
+The handling of pathnames of modules given to C<require()> has been made
+thread-safe on VMS.
+
+=item *
+
+Non-blocking sockets have been fixed on VMS.
+
+=item *
+
+Pod can now be nested in code inside a quoted construct outside of a string
+eval. This used to work only within string evals [perl #114040].
+
+=item *
+
+C<goto ''> now looks for an empty label, producing the "goto must have
+label" error message, instead of exiting the program [perl #111794].
+
+=item *
+
+C<goto "\0"> now dies with "Can't find label" instead of "goto must have
+label".
+
+=item *
+
+The C function C<hv_store> used to result in crashes when used on C<%^H>
+[perl #111000].
+
+=item *
+
+A call checker attached to a closure prototype via C<cv_set_call_checker>
+is now copied to closures cloned from it. So C<cv_set_call_checker> now
+works inside an attribute handler for a closure.
+
+=item *
+
+Writing to C<$^N> used to have no effect. Now it croaks with "Modification
+of a read-only value" by default, but that can be overridden by a custom
+regular expression engine, as with C<$1> [perl #112184].
+
+=item *
+
+C<undef> on a control character glob (C<undef *^H>) no longer emits an
+erroneous warning about ambiguity [perl #112456].
+
+=item *
+
+For efficiency's sake, many operators and built-in functions return the
+same scalar each time. Lvalue subroutines and subroutines in the CORE::
+namespace were allowing this implementation detail to leak through.
+C<print &CORE::uc("a"), &CORE::uc("b")> used to print "BB". The same thing
+would happen with an lvalue subroutine returning the return value of C<uc>.
+Now the value is copied in such cases.
+
+=item *
+
+C<method {}> syntax with an empty block or a block returning an empty list
+used to crash or use some random value left on the stack as its invocant.
+Now it produces an error.
+
+=item *
+
+C<vec> now works with extremely large offsets (E<gt>2 GB) [perl #111730].
+
+=item *
+
+Changes to overload settings now take effect immediately, as do changes to
+inheritance that affect overloading. They used to take effect only after
+C<bless>.
+
+Objects that were created before a class had any overloading used to remain
+non-overloaded even if the class gained overloading through C<use overload>
+or @ISA changes, and even after C<bless>. This has been fixed
+[perl #112708].
+
+=item *
+
+Classes with overloading can now inherit fallback values.
+
+=item *
+
+Overloading was not respecting a fallback value of 0 if there were
+overloaded objects on both sides of an assignment operator like C<+=>
+[perl #111856].
+
+=item *
+
+C<pos> now croaks with hash and array arguments, instead of producing
+erroneous warnings.
+
+=item *
+
+C<while(each %h)> now implies C<while(defined($_ = each %h))>, like
+C<readline> and C<readdir>.
+
+=item *
+
+Subs in the CORE:: namespace no longer crash after C<undef *_> when called
+with no argument list (C<&CORE::time> with no parentheses).
+
+=item *
+
+C<unpack> no longer produces the "'/' must follow a numeric type in unpack"
+error when it is the data that are at fault [perl #60204].
+
+=item *
+
+C<join> and C<"@array"> now call FETCH only once on a tied C<$">
+[perl #8931].
+
+=item *
+
+Some subroutine calls generated by compiling core ops affected by a
+C<CORE::GLOBAL> override had op checking performed twice. The checking
+is always idempotent for pure Perl code, but the double checking can
+matter when custom call checkers are involved.
+
+=item *
+
+A race condition used to exist around fork that could cause a signal sent to
+the parent to be handled by both parent and child. Signals are now blocked
+briefly around fork to prevent this from happening [perl #82580].
+
+=item *
+
+The implementation of code blocks in regular expressions, such as C<(?{})>
+and C<(??{})>, has been heavily reworked to eliminate a whole slew of bugs.
+The main user-visible changes are:
+
+=over 4
+
+=item *
+
+Code blocks within patterns are now parsed in the same pass as the
+surrounding code; in particular it is no longer necessary to have balanced
+braces: this now works:
+
+ /(?{ $x='{' })/
+
+This means that this error message is no longer generated:
+
+ Sequence (?{...}) not terminated or not {}-balanced in regex
+
+but a new error may be seen:
+
+ Sequence (?{...}) not terminated with ')'
+
+In addition, literal code blocks within run-time patterns are only
+compiled once, at perl compile-time:
+
+ for my $p (...) {
+ # this 'FOO' block of code is compiled once,
+ # at the same time as the surrounding 'for' loop
+ /$p{(?{FOO;})/;
+ }
+
+=item *
+
+Lexical variables are now sane as regards scope, recursion and closure
+behavior. In particular, C</A(?{B})C/> behaves (from a closure viewpoint)
+exactly like C</A/ && do { B } && /C/>, while C<qr/A(?{B})C/> is like
+C<sub {/A/ && do { B } && /C/}>. So this code now works how you might
+expect, creating three regexes that match 0, 1, and 2:
+
+ for my $i (0..2) {
+ push @r, qr/^(??{$i})$/;
+ }
+ "1" =~ $r[1]; # matches
+
+=item *
+
+The C<use re 'eval'> pragma is now only required for code blocks defined
+at runtime; in particular in the following, the text of the C<$r> pattern is
+still interpolated into the new pattern and recompiled, but the individual
+compiled code-blocks within C<$r> are reused rather than being recompiled,
+and C<use re 'eval'> isn't needed any more:
+
+ my $r = qr/abc(?{....})def/;
+ /xyz$r/;
+
+=item *
+
+Flow control operators no longer crash. Each code block runs in a new
+dynamic scope, so C<next> etc. will not see
+any enclosing loops. C<return> returns a value
+from the code block, not from any enclosing subroutine.
+
+=item *
+
+Perl normally caches the compilation of run-time patterns, and doesn't
+recompile if the pattern hasn't changed, but this is now disabled if
+required for the correct behavior of closures. For example:
+
+ my $code = '(??{$x})';
+ for my $x (1..3) {
+ # recompile to see fresh value of $x each time
+ $x =~ /$code/;
+ }
+
+=item *
+
+The C</msix> and C<(?msix)> etc. flags are now propagated into the return
+value from C<(??{})>; this now works:
+
+ "AB" =~ /a(??{'b'})/i;
+
+=item *
+
+Warnings and errors will appear to come from the surrounding code (or for
+run-time code blocks, from an eval) rather than from an C<re_eval>:
+
+ use re 'eval'; $c = '(?{ warn "foo" })'; /$c/;
+ /(?{ warn "foo" })/;
+
+formerly gave:
+
+ foo at (re_eval 1) line 1.
+ foo at (re_eval 2) line 1.
+
+and now gives:
+
+ foo at (eval 1) line 1.
+ foo at /some/prog line 2.
+
+=back
+
+=item *
+
+Perl now can be recompiled to use any Unicode version. In v5.16, it
+worked on Unicodes 6.0 and 6.1, but there were various bugs if earlier
+releases were used; the older the release the more problems.
+
+=item *
+
+C<vec> no longer produces "uninitialized" warnings in lvalue context
+[perl #9423].
+
+=item *
+
+An optimization involving fixed strings in regular expressions could cause
+a severe performance penalty in edge cases. This has been fixed
+[perl #76546].
+
+=item *
+
+In certain cases, including empty subpatterns within a regular expression (such
+as C<(?:)> or C<(?:|)>) could disable some optimizations. This has been fixed.
+
+=item *
+
+The "Can't find an opnumber" message that C<prototype> produces when passed
+a string like "CORE::nonexistent_keyword" now passes UTF-8 and embedded
+NULs through unchanged [perl #97478].
+
+=item *
+
+C<prototype> now treats magical variables like C<$1> the same way as
+non-magical variables when checking for the CORE:: prefix, instead of
+treating them as subroutine names.
+
+=item *
+
+Under threaded perls, a runtime code block in a regular expression could
+corrupt the package name stored in the op tree, resulting in bad reads
+in C<caller>, and possibly crashes [perl #113060].
+
+=item *
+
+Referencing a closure prototype (C<\&{$_[1]}> in an attribute handler for a
+closure) no longer results in a copy of the subroutine (or assertion
+failures on debugging builds).
+
+=item *
+
+C<eval '__PACKAGE__'> now returns the right answer on threaded builds if
+the current package has been assigned over (as in
+C<*ThisPackage:: = *ThatPackage::>) [perl #78742].
+
+=item *
+
+If a package is deleted by code that it calls, it is possible for C<caller>
+to see a stack frame belonging to that deleted package. C<caller> could
+crash if the stash's memory address was reused for a scalar and a
+substitution was performed on the same scalar [perl #113486].
+
+=item *
+
+C<UNIVERSAL::can> no longer treats its first argument differently
+depending on whether it is a string or number internally.
+
+=item *
+
+C<open> with C<< <& >> for the mode checks to see whether the third argument is
+a number, in determining whether to treat it as a file descriptor or a handle
+name. Magical variables like C<$1> were always failing the numeric check and
+being treated as handle names.
+
+=item *
+
+C<warn>'s handling of magical variables (C<$1>, ties) has undergone several
+fixes. C<FETCH> is only called once now on a tied argument or a tied C<$@>
+[perl #97480]. Tied variables returning objects that stringify as "" are
+no longer ignored. A tied C<$@> that happened to return a reference the
+I<previous> time it was used is no longer ignored.
+
+=item *
+
+C<warn ""> now treats C<$@> with a number in it the same way, regardless of
+whether it happened via C<$@=3> or C<$@="3">. It used to ignore the
+former. Now it appends "\t...caught", as it has always done with
+C<$@="3">.
+
+=item *
+
+Numeric operators on magical variables (e.g., S<C<$1 + 1>>) used to use
+floating point operations even where integer operations were more appropriate,
+resulting in loss of accuracy on 64-bit platforms [perl #109542].
+
+=item *
+
+Unary negation no longer treats a string as a number if the string happened
+to be used as a number at some point. So, if C<$x> contains the string "dogs",
+C<-$x> returns "-dogs" even if C<$y=0+$x> has happened at some point.
+
+=item *
+
+In Perl v5.14, C<-'-10'> was fixed to return "10", not "+10". But magical
+variables (C<$1>, ties) were not fixed till now [perl #57706].
+
+=item *
+
+Unary negation now treats strings consistently, regardless of the internal
+C<UTF8> flag.
+
+=item *
+
+A regression introduced in Perl v5.16.0 involving
+C<tr/I<SEARCHLIST>/I<REPLACEMENTLIST>/> has been fixed. Only the first
+instance is supposed to be meaningful if a character appears more than
+once in C<I<SEARCHLIST>>. Under some circumstances, the final instance
+was overriding all earlier ones. [perl #113584]
+
+=item *
+
+Regular expressions like C<qr/\87/> previously silently inserted a NUL
+character, thus matching as if it had been written C<qr/\00087/>. Now it
+matches as if it had been written as C<qr/87/>, with a message that the
+sequence C<"\8"> is unrecognized.
+
+=item *
+
+C<__SUB__> now works in special blocks (C<BEGIN>, C<END>, etc.).
+
+=item *
+
+Thread creation on Windows could theoretically result in a crash if done
+inside a C<BEGIN> block. It still does not work properly, but it no longer
+crashes [perl #111610].
+
+=item *
+
+C<\&{''}> (with the empty string) now autovivifies a stub like any other
+sub name, and no longer produces the "Unable to create sub" error
+[perl #94476].
+
+=item *
+
+A regression introduced in v5.14.0 has been fixed, in which some calls
+to the C<re> module would clobber C<$_> [perl #113750].
+
+=item *
+
+C<do FILE> now always either sets or clears C<$@>, even when the file can't be
+read. This ensures that testing C<$@> first (as recommended by the
+documentation) always returns the correct result.
+
+=item *
+
+The array iterator used for the C<each @array> construct is now correctly
+reset when C<@array> is cleared [perl #75596]. This happens, for example, when
+the array is globally assigned to, as in C<@array = (...)>, but not when its
+B<values> are assigned to. In terms of the XS API, it means that C<av_clear()>
+will now reset the iterator.
+
+This mirrors the behaviour of the hash iterator when the hash is cleared.
+
+=item *
+
+C<< $class->can >>, C<< $class->isa >>, and C<< $class->DOES >> now return
+correct results, regardless of whether that package referred to by C<$class>
+exists [perl #47113].
+
+=item *
+
+Arriving signals no longer clear C<$@> [perl #45173].
+
+=item *
+
+Allow C<my ()> declarations with an empty variable list [perl #113554].
+
+=item *
+
+During parsing, subs declared after errors no longer leave stubs
+[perl #113712].
+
+=item *
+
+Closures containing no string evals no longer hang on to their containing
+subroutines, allowing variables closed over by outer subroutines to be
+freed when the outer sub is freed, even if the inner sub still exists
+[perl #89544].
+
+=item *
+
+Duplication of in-memory filehandles by opening with a "<&=" or ">&=" mode
+stopped working properly in v5.16.0. It was causing the new handle to
+reference a different scalar variable. This has been fixed [perl #113764].
+
+=item *
+
+C<qr//> expressions no longer crash with custom regular expression engines
+that do not set C<offs> at regular expression compilation time
+[perl #112962].
+
+=item *
+
+C<delete local> no longer crashes with certain magical arrays and hashes
+[perl #112966].
+
+=item *
+
+C<local> on elements of certain magical arrays and hashes used not to
+arrange to have the element deleted on scope exit, even if the element did
+not exist before C<local>.
+
+=item *
+
+C<scalar(write)> no longer returns multiple items [perl #73690].
+
+=item *
+
+String to floating point conversions no longer misparse certain strings under
+C<use locale> [perl #109318].
+
+=item *
+
+C<@INC> filters that die no longer leak memory [perl #92252].
+
+=item *
+
+The implementations of overloaded operations are now called in the correct
+context. This allows, among other things, being able to properly override
+C<< <> >> [perl #47119].
+
+=item *
+
+Specifying only the C<fallback> key when calling C<use overload> now behaves
+properly [perl #113010].
+
+=item *
+
+C<< sub foo { my $a = 0; while ($a) { ... } } >> and
+C<< sub foo { while (0) { ... } } >> now return the same thing [perl #73618].
+
+=item *
+
+String negation now behaves the same under C<use integer;> as it does
+without [perl #113012].
+
+=item *
+
+C<chr> now returns the Unicode replacement character (U+FFFD) for -1,
+regardless of the internal representation. -1 used to wrap if the argument
+was tied or a string internally.
+
+=item *
+
+Using a C<format> after its enclosing sub was freed could crash as of
+perl v5.12.0, if the format referenced lexical variables from the outer sub.
+
+=item *
+
+Using a C<format> after its enclosing sub was undefined could crash as of
+perl v5.10.0, if the format referenced lexical variables from the outer sub.
+
+=item *
+
+Using a C<format> defined inside a closure, which format references
+lexical variables from outside, never really worked unless the C<write>
+call was directly inside the closure. In v5.10.0 it even started crashing.
+Now the copy of that closure nearest the top of the call stack is used to
+find those variables.
+
+=item *
+
+Formats that close over variables in special blocks no longer crash if a
+stub exists with the same name as the special block before the special
+block is compiled.
+
+=item *
+
+The parser no longer gets confused, treating C<eval foo ()> as a syntax
+error if preceded by C<print;> [perl #16249].
+
+=item *
+
+The return value of C<syscall> is no longer truncated on 64-bit platforms
+[perl #113980].
+
+=item *
+
+Constant folding no longer causes C<print 1 ? FOO : BAR> to print to the
+FOO handle [perl #78064].
+
+=item *
+
+C<do subname> now calls the named subroutine and uses the file name it
+returns, instead of opening a file named "subname".
+
+=item *
+
+Subroutines looked up by rv2cv check hooks (registered by XS modules) are
+now taken into consideration when determining whether C<foo bar> should be
+the sub call C<foo(bar)> or the method call C<< "bar"->foo >>.
+
+=item *
+
+C<CORE::foo::bar> is no longer treated specially, allowing global overrides
+to be called directly via C<CORE::GLOBAL::uc(...)> [perl #113016].
+
+=item *
+
+Calling an undefined sub whose typeglob has been undefined now produces the
+customary "Undefined subroutine called" error, instead of "Not a CODE
+reference".
+
+=item *
+
+Two bugs involving @ISA have been fixed. C<*ISA = *glob_without_array> and
+C<undef *ISA; @{*ISA}> would prevent future modifications to @ISA from
+updating the internal caches used to look up methods. The
+*glob_without_array case was a regression from Perl v5.12.
+
+=item *
+
+Regular expression optimisations sometimes caused C<$> with C</m> to
+produce failed or incorrect matches [perl #114068].
+
+=item *
+
+C<__SUB__> now works in a C<sort> block when the enclosing subroutine is
+predeclared with C<sub foo;> syntax [perl #113710].
+
+=item *
+
+Unicode properties only apply to Unicode code points, which leads to
+some subtleties when regular expressions are matched against
+above-Unicode code points. There is a warning generated to draw your
+attention to this. However, this warning was being generated
+inappropriately in some cases, such as when a program was being parsed.
+Non-Unicode matches such as C<\w> and C<[:word:]> should not generate the
+warning, as their definitions don't limit them to apply to only Unicode
+code points. Now the message is only generated when matching against
+C<\p{}> and C<\P{}>. There remains a bug, [perl #114148], for the very
+few properties in Unicode that match just a single code point. The
+warning is not generated if they are matched against an above-Unicode
+code point.
+
+=item *
+
+Uninitialized warnings mentioning hash elements would only mention the
+element name if it was not in the first bucket of the hash, due to an
+off-by-one error.
+
+=item *
+
+A regular expression optimizer bug could cause multiline "^" to behave
+incorrectly in the presence of line breaks, such that
+C<"/\n\n" =~ m#\A(?:^/$)#im> would not match [perl #115242].
+
+=item *
+
+Failed C<fork> in list context no longer corrupts the stack.
+C<@a = (1, 2, fork, 3)> used to gobble up the 2 and assign C<(1, undef, 3)>
+if the C<fork> call failed.
+
+=item *
+
+Numerous memory leaks have been fixed, mostly involving tied variables that
+die, regular expression character classes and code blocks, and syntax
+errors.
+
+=item *
+
+Assigning a regular expression (C<${qr//}>) to a variable that happens to
+hold a floating point number no longer causes assertion failures on
+debugging builds.
+
+=item *
+
+Assigning a regular expression to a scalar containing a number no longer
+causes subsequent numification to produce random numbers.
+
+=item *
+
+Assigning a regular expression to a magic variable no longer wipes away the
+magic. This was a regression from v5.10.
+
+=item *
+
+Assigning a regular expression to a blessed scalar no longer results in
+crashes. This was also a regression from v5.10.
+
+=item *
+
+Regular expression can now be assigned to tied hash and array elements with
+flattening into strings.
+
+=item *
+
+Numifying a regular expression no longer results in an uninitialized
+warning.
+
+=item *
+
+Negative array indices no longer cause EXISTS methods of tied variables to
+be ignored. This was a regression from v5.12.
+
+=item *
+
+Negative array indices no longer result in crashes on arrays tied to
+non-objects.
+
+=item *
+
+C<$byte_overload .= $utf8> no longer results in doubly-encoded UTF-8 if the
+left-hand scalar happened to have produced a UTF-8 string the last time
+overloading was invoked.
+
+=item *
+
+C<goto &sub> now uses the current value of @_, instead of using the array
+the subroutine was originally called with. This means
+C<local @_ = (...); goto &sub> now works [perl #43077].
+
+=item *
+
+If a debugger is invoked recursively, it no longer stomps on its own
+lexical variables. Formerly under recursion all calls would share the same
+set of lexical variables [perl #115742].
+
+=item *
+
+C<*_{ARRAY}> returned from a subroutine no longer spontaneously
+becomes empty.
+
+=back
+
+=head1 Known Problems
+
+=over 4
+
+=item *
+
+UTF8-flagged strings in C<%ENV> on HP-UX 11.00 are buggy
+
+The interaction of UTF8-flagged strings and C<%ENV> on HP-UX 11.00 is
+currently dodgy in some not-yet-fully-diagnosed way. Expect test
+failures in F<t/op/magic.t>, followed by unknown behavior when storing
+wide characters in the environment.
+
+=back
+
+=head1 Obituary
+
+Hojung Yoon (AMORETTE), 24, of Seoul, South Korea, went to his long rest
+on May 8, 2013 with llama figurine and autographed TIMTOADY card. He
+was a brilliant young Perl 5 & 6 hacker and a devoted member of
+Seoul.pm. He programmed Perl, talked Perl, ate Perl, and loved Perl. We
+believe that he is still programming in Perl with his broken IBM laptop
+somewhere. He will be missed.
+
+=head1 Acknowledgements
+
+Perl v5.18.0 represents approximately 12 months of development since
+Perl v5.16.0 and contains approximately 400,000 lines of changes across
+2,100 files from 113 authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant
+community of users and developers. The following people are known to
+have contributed the improvements that became Perl v5.18.0:
+
+Aaron Crane, Aaron Trevena, Abhijit Menon-Sen, Adrian M. Enache, Alan
+Haggai Alavi, Alexandr Ciornii, Andrew Tam, Andy Dougherty, Anton Nikishaev,
+Aristotle Pagaltzis, Augustina Blair, Bob Ernst, Brad Gilbert, Breno G. de
+Oliveira, Brian Carlson, Brian Fraser, Charlie Gonzalez, Chip Salzenberg, Chris
+'BinGOs' Williams, Christian Hansen, Colin Kuskie, Craig A. Berry, Dagfinn
+Ilmari Mannsåker, Daniel Dragan, Daniel Perrett, Darin McBride, Dave Rolsky,
+David Golden, David Leadbeater, David Mitchell, David Nicol, Dominic
+Hargreaves, E. Choroba, Eric Brine, Evan Miller, Father Chrysostomos, Florian
+Ragwitz, François Perrad, George Greer, Goro Fuji, H.Merijn Brand, Herbert
+Breunung, Hugo van der Sanden, Igor Zaytsev, James E Keenan, Jan Dubois,
+Jasmine Ahuja, Jerry D. Hedden, Jess Robinson, Jesse Luehrs, Joaquin Ferrero,
+Joel Berger, John Goodyear, John Peacock, Karen Etheridge, Karl Williamson,
+Karthik Rajagopalan, Kent Fredric, Leon Timmermans, Lucas Holt, Lukas Mai,
+Marcus Holland-Moritz, Markus Jansen, Martin Hasch, Matthew Horsfall, Max
+Maischein, Michael G Schwern, Michael Schroeder, Moritz Lenz, Nicholas Clark,
+Niko Tyni, Oleg Nesterov, Patrik Hägglund, Paul Green, Paul Johnson, Paul
+Marquess, Peter Martini, Rafael Garcia-Suarez, Reini Urban, Renee Baecker,
+Rhesa Rozendaal, Ricardo Signes, Robin Barker, Ronald J. Kimball, Ruslan
+Zakirov, Salvador Fandiño, Sawyer X, Scott Lanning, Sergey Alekseev, Shawn M
+Moore, Shirakata Kentaro, Shlomi Fish, Sisyphus, Smylers, Steffen Müller,
+Steve Hay, Steve Peters, Steven Schubiger, Sullivan Beck, Sven Strickroth,
+Sébastien Aperghis-Tramoni, Thomas Sibley, Tobias Leich, Tom Wyant, Tony Cook,
+Vadim Konovalov, Vincent Pit, Volker Schatz, Walt Mankowski, Yves Orton,
+Zefram.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles recently
+posted to the comp.lang.perl.misc newsgroup and the perl bug database at
+http://rt.perl.org/perlbug/ . There may also be information at
+http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug> program
+included with your release. Be sure to trim your bug down to a tiny but
+sufficient test case. Your bug report, along with the output of C<perl -V>,
+will be sent off to perlbug at perl.org to be analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please send it
+to perl5-security-report at perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who will be
+able to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently distributed on
+CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Added: vendor/perl/dist/pod/perldtrace.pod
===================================================================
--- vendor/perl/dist/pod/perldtrace.pod (rev 0)
+++ vendor/perl/dist/pod/perldtrace.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,236 @@
+=head1 NAME
+
+perldtrace - Perl's support for DTrace
+
+=head1 SYNOPSIS
+
+ # dtrace -Zn 'perl::sub-entry, perl::sub-return { trace(copyinstr(arg0)) }'
+ dtrace: description 'perl::sub-entry, perl::sub-return ' matched 10 probes
+
+ # perl -E 'sub outer { inner(@_) } sub inner { say shift } outer("hello")'
+ hello
+
+ (dtrace output)
+ CPU ID FUNCTION:NAME
+ 0 75915 Perl_pp_entersub:sub-entry BEGIN
+ 0 75915 Perl_pp_entersub:sub-entry import
+ 0 75922 Perl_pp_leavesub:sub-return import
+ 0 75922 Perl_pp_leavesub:sub-return BEGIN
+ 0 75915 Perl_pp_entersub:sub-entry outer
+ 0 75915 Perl_pp_entersub:sub-entry inner
+ 0 75922 Perl_pp_leavesub:sub-return inner
+ 0 75922 Perl_pp_leavesub:sub-return outer
+
+=head1 DESCRIPTION
+
+DTrace is a framework for comprehensive system- and application-level
+tracing. Perl is a DTrace I<provider>, meaning it exposes several
+I<probes> for instrumentation. You can use these in conjunction
+with kernel-level probes, as well as probes from other providers
+such as MySQL, in order to diagnose software defects, or even just
+your application's bottlenecks.
+
+Perl must be compiled with the C<-Dusedtrace> option in order to
+make use of the provided probes. While DTrace aims to have no
+overhead when its instrumentation is not active, Perl's support
+itself cannot uphold that guarantee, so it is built without DTrace
+probes under most systems. One notable exception is that Mac OS X
+ships a F</usr/bin/perl> with DTrace support enabled.
+
+=head1 HISTORY
+
+=over 4
+
+=item 5.10.1
+
+Perl's initial DTrace support was added, providing C<sub-entry> and
+C<sub-return> probes.
+
+=item 5.14.0
+
+The C<sub-entry> and C<sub-return> probes gain a fourth argument: the
+package name of the function.
+
+=item 5.16.0
+
+The C<phase-change> probe was added.
+
+=item 5.18.0
+
+The C<op-entry>, C<loading-file>, and C<loaded-file> probes were added.
+
+=back
+
+=head1 PROBES
+
+=over 4
+
+=item sub-entry(SUBNAME, FILE, LINE, PACKAGE)
+
+Traces the entry of any subroutine. Note that all of the variables
+refer to the subroutine that is being invoked; there is currently
+no way to get ahold of any information about the subroutine's
+I<caller> from a DTrace action.
+
+ :*perl*::sub-entry {
+ printf("%s::%s entered at %s line %d\n",
+ copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg2);
+ }
+
+=item sub-return(SUBNAME, FILE, LINE, PACKAGE)
+
+Traces the exit of any subroutine. Note that all of the variables
+refer to the subroutine that is returning; there is currently no
+way to get ahold of any information about the subroutine's I<caller>
+from a DTrace action.
+
+ :*perl*::sub-return {
+ printf("%s::%s returned at %s line %d\n",
+ copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg2);
+ }
+
+=item phase-change(NEWPHASE, OLDPHASE)
+
+Traces changes to Perl's interpreter state. You can internalize this
+as tracing changes to Perl's C<${^GLOBAL_PHASE}> variable, especially
+since the values for C<NEWPHASE> and C<OLDPHASE> are the strings that
+C<${^GLOBAL_PHASE}> reports.
+
+ :*perl*::phase-change {
+ printf("Phase changed from %s to %s\n",
+ copyinstr(arg1), copyinstr(arg0));
+ }
+
+=item op-entry(OPNAME)
+
+Traces the execution of each opcode in the Perl runloop. This probe
+is fired before the opcode is executed. When the Perl debugger is
+enabled, the DTrace probe is fired I<after> the debugger hooks (but
+still before the opcode itself is executed).
+
+ :*perl*::op-entry {
+ printf("About to execute opcode %s\n", copyinstr(arg0));
+ }
+
+=item loading-file(FILENAME)
+
+Fires when Perl is about to load an individual file, whether from
+C<use>, C<require>, or C<do>. This probe fires before the file is
+read from disk. The filename argument is converted to local filesystem
+paths instead of providing C<Module::Name>-style names.
+
+ :*perl*:loading-file {
+ printf("About to load %s\n", copyinstr(arg0));
+ }
+
+=item loaded-file(FILENAME)
+
+Fires when Perl has successfully loaded an individual file, whether
+from C<use>, C<require>, or C<do>. This probe fires after the file
+is read from disk and its contentss evaluated. The filename argument
+is converted to local filesystem paths instead of providing
+C<Module::Name>-style names.
+
+ :*perl*:loaded-file {
+ printf("Successfully loaded %s\n", copyinstr(arg0));
+ }
+
+=back
+
+=head1 EXAMPLES
+
+=over 4
+
+=item Most frequently called functions
+
+ # dtrace -qZn 'sub-entry { @[strjoin(strjoin(copyinstr(arg3),"::"),copyinstr(arg0))] = count() } END {trunc(@, 10)}'
+
+ Class::MOP::Attribute::slots 400
+ Try::Tiny::catch 411
+ Try::Tiny::try 411
+ Class::MOP::Instance::inline_slot_access 451
+ Class::MOP::Class::Immutable::Trait:::around 472
+ Class::MOP::Mixin::AttributeCore::has_initializer 496
+ Class::MOP::Method::Wrapped::__ANON__ 544
+ Class::MOP::Package::_package_stash 737
+ Class::MOP::Class::initialize 1128
+ Class::MOP::get_metaclass_by_name 1204
+
+=item Trace function calls
+
+ # dtrace -qFZn 'sub-entry, sub-return { trace(copyinstr(arg0)) }'
+
+ 0 -> Perl_pp_entersub BEGIN
+ 0 <- Perl_pp_leavesub BEGIN
+ 0 -> Perl_pp_entersub BEGIN
+ 0 -> Perl_pp_entersub import
+ 0 <- Perl_pp_leavesub import
+ 0 <- Perl_pp_leavesub BEGIN
+ 0 -> Perl_pp_entersub BEGIN
+ 0 -> Perl_pp_entersub dress
+ 0 <- Perl_pp_leavesub dress
+ 0 -> Perl_pp_entersub dirty
+ 0 <- Perl_pp_leavesub dirty
+ 0 -> Perl_pp_entersub whiten
+ 0 <- Perl_pp_leavesub whiten
+ 0 <- Perl_dounwind BEGIN
+
+=item Function calls during interpreter cleanup
+
+ # dtrace -Zn 'phase-change /copyinstr(arg0) == "END"/ { self->ending = 1 } sub-entry /self->ending/ { trace(copyinstr(arg0)) }'
+
+ CPU ID FUNCTION:NAME
+ 1 77214 Perl_pp_entersub:sub-entry END
+ 1 77214 Perl_pp_entersub:sub-entry END
+ 1 77214 Perl_pp_entersub:sub-entry cleanup
+ 1 77214 Perl_pp_entersub:sub-entry _force_writable
+ 1 77214 Perl_pp_entersub:sub-entry _force_writable
+
+=item System calls at compile time
+
+ # dtrace -qZn 'phase-change /copyinstr(arg0) == "START"/ { self->interesting = 1 } phase-change /copyinstr(arg0) == "RUN"/ { self->interesting = 0 } syscall::: /self->interesting/ { @[probefunc] = count() } END { trunc(@, 3) }'
+
+ lseek 310
+ read 374
+ stat64 1056
+
+=item Perl functions that execute the most opcodes
+
+ # dtrace -qZn 'sub-entry { self->fqn = strjoin(copyinstr(arg3), strjoin("::", copyinstr(arg0))) } op-entry /self->fqn != ""/ { @[self->fqn] = count() } END { trunc(@, 3) }'
+
+ warnings::unimport 4589
+ Exporter::Heavy::_rebuild_cache 5039
+ Exporter::import 14578
+
+=back
+
+=head1 REFERENCES
+
+=over 4
+
+=item DTrace Dynamic Tracing Guide
+
+L<http://dtrace.org/guide/preface.html>
+
+=item DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
+
+L<http://www.amazon.com/DTrace-Dynamic-Tracing-Solaris-FreeBSD/dp/0132091518/>
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item L<Devel::DTrace::Provider>
+
+This CPAN module lets you create application-level DTrace probes written in
+Perl.
+
+=back
+
+=head1 AUTHORS
+
+Shawn M Moore C<sartak at gmail.com>
+
+=cut
Added: vendor/perl/dist/pod/perlexperiment.pod
===================================================================
--- vendor/perl/dist/pod/perlexperiment.pod (rev 0)
+++ vendor/perl/dist/pod/perlexperiment.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,334 @@
+=head1 NAME
+
+perlexperiment - A listing of experimental features in Perl
+
+=head1 DESCRIPTION
+
+This document lists the current and past experimental features in the perl
+core. Although all of these are documented with their appropriate topics,
+this succinct listing gives you an overview and basic facts about their
+status.
+
+So far we've merely tried to find and list the experimental features and infer
+their inception, versions, etc. There's a lot of speculation here.
+
+=head2 Current experiments
+
+=over 8
+
+=item -Dusemultiplicity -Duseithreads
+
+Introduced in Perl 5.6.0
+
+=item Long Doubles Still Don't Work In Solaris
+
+Introduced in Perl 5.7.0
+
+=item C<our> can now have an experimental optional attribute C<unique>
+
+Introduced in Perl 5.8.0
+
+Deprecated in Perl 5.10.0
+
+=item Linux abstract Unix domain sockets
+
+Introduced in Perl 5.9.2
+
+See also L<Socket>
+
+=item L<Pod::HTML2Pod|Pod::HTML2Pod>
+
+=item L<Pod::PXML|Pod::PXML>
+
+=item The <:pop> IO pseudolayer
+
+See also L<perlrun>
+
+=item The <:win32> IO pseudolayer
+
+See also L<perlrun>
+
+=item MLDBM
+
+See also L<perldsc>
+
+=item internal functions with M flag
+
+See also L<perlguts>
+
+=item lex_start API
+
+Introduced in Perl 5.13.7
+
+=item internal API for C<%^H>
+
+Introduced in Perl 5.13.7
+
+See also C<cophh_> in L<perlapi>.
+
+=item alloccopstash
+
+Introduced in Perl 5.18.0
+
+=item av_create_and_push
+
+=item av_create_and_unshift_one
+
+=item av_create_and_unshift_one
+
+=item cop_store_label
+
+Introduced in Perl 5.16.0
+
+=item PL_keyword_plugin
+
+=item gv_fetchmethod_*_flags
+
+Introduced in Perl 5.16.0
+
+=item hv_iternext_flags
+
+=item lex_bufutf8
+
+=item lex_discard_to
+
+=item lex_grow_linestr
+
+=item lex_next_chunk
+
+=item lex_peek_unichar
+
+=item lex_read_space
+
+=item lex_read_to
+
+=item lex_read_unichar
+
+=item lex_stuff_pv
+
+=item lex_stuff_pvn
+
+=item lex_stuff_pvs
+
+=item lex_stuff_sv
+
+=item lex_unstuff
+
+=item op_scope
+
+=item op_lvalue
+
+=item parse_fullstmt
+
+=item parse_stmtseq
+
+=item PL_parser-E<gt>bufend
+
+=item PL_parser-E<gt>bufptr
+
+=item PL_parser-E<gt>linestart
+
+=item PL_parser-E<gt>linestr
+
+=item Perl_signbit
+
+=item pad_findmy
+
+=item sv_utf8_decode
+
+=item sv_utf8_downgrade
+
+=item bytes_from_utf8
+
+=item bytes_to_utf8
+
+=item utf8_to_bytes
+
+=item Lvalue subroutines
+
+Introduced in Perl 5.6.0
+
+See also L<perlsub>
+
+=item There is an C<installhtml> target in the Makefile.
+
+=item Unicode in Perl on EBCDIC
+
+=item C<(?{code})>
+
+See also L<perlre>
+
+=item C<(??{ code })>
+
+See also L<perlre>
+
+=item Smart match (C<~~>)
+
+Introduced in Perl 5.10.0
+
+Modified in Perl 5.10.1, 5.12.0
+
+=item Lexical C<$_>
+
+Introduced in Perl 5.10.0
+
+=item Backtracking control verbs
+
+C<(*ACCEPT)>
+
+Introduced in: Perl 5.10
+
+See also: L<perlre/"Special Backtracking Control Verbs">
+
+=item Code expressions, conditional expressions, and independent expressions in regexes
+
+
+=item gv_try_downgrade
+
+See also L<perlintern>
+
+=item Experimental Support for Sun Studio Compilers for Linux OS
+
+See also L<perllinux>
+
+=item Pluggable keywords
+
+See L<perlapi/PL_keyword_plugin> for the mechanism.
+
+Introduced in: Perl 5.11.2
+
+=item Array and hash container functions accept references
+
+Introduced in Perl 5.14.0
+
+=item Lexical subroutines
+
+Introduced in: Perl 5.18
+
+See also: L<perlsub/Lexical Subroutines>
+
+=item Regular Expression Set Operations
+
+Introduced in: Perl 5.18
+
+See also: L<perlrecharclass/Extended Bracketed Character Classes>
+
+=back
+
+=head2 Accepted features
+
+These features were so wildly successful and played so well with others that
+we decided to remove their experimental status and admit them as full, stable
+features in the world of Perl, lavishing all the benefits and luxuries thereof.
+They are also awarded +5 Stability and +3 Charisma.
+
+=over 8
+
+=item The C<\N> regex character class
+
+The C<\N> character class, not to be confused with the named character
+sequence C<\N{NAME}>, denotes any non-newline character in a regular
+expression.
+
+Introduced in: Perl 5.12
+
+=item fork() emulation
+
+Introduced in Perl 5.6.1
+
+See also L<perlfork>
+
+=item DB module
+
+Introduced in Perl 5.6.0
+
+See also L<perldebug>, L<perldebtut>
+
+=item Weak references
+
+Introduced in Perl 5.6.0
+
+=item Internal file glob
+
+Introduced in Perl 5.6.0
+
+=item die accepts a reference
+
+Introduced in Perl 5.005
+
+=item 64-bit support
+
+Introduced in Perl 5.005
+
+=back
+
+=head2 Removed features
+
+These features are no longer considered experimental and their functionality
+has disappeared. It's your own fault if you wrote production programs using
+these features after we explicitly told you not to (see L<perlpolicy>).
+
+=over 8
+
+=item C<legacy>
+
+The experimental C<legacy> pragma was swallowed by the C<feature> pragma.
+
+Introduced in: 5.11.2
+
+Removed in: 5.11.3
+
+=item Assertions
+
+The C<-A> command line switch
+
+Introduced in Perl 5.9.0
+
+Removed in Perl 5.9.5
+
+=item Test::Harness::Straps
+
+Moved from Perl 5.10.1 to CPAN
+
+=item GetOpt::Long Options can now take multiple values at once (experimental)
+
+C<Getopt::Long> upgraded to version 2.35
+
+Removed in Perl 5.8.8
+
+=item The pseudo-hash data type
+
+Introduced in Perl 5.6.0
+
+Removed in Perl 5.9.0
+
+=item 5.005-style threading
+
+Introduced in Perl 5.005
+
+Removed in Perl 5.10
+
+=item perlcc
+
+Introduced in Perl 5.005
+
+Moved from Perl 5.9.0 to CPAN
+
+=back
+
+=head1 AUTHORS
+
+brian d foy C<< <brian.d.foy at gmail.com> >>
+
+SE<eacute>bastien Aperghis-Tramoni C<< <saper at cpan.org> >>
+
+=head1 COPYRIGHT
+
+Copyright 2010, brian d foy C<< <brian.d.foy at gmail.com> >>
+
+=head1 LICENSE
+
+You can use and redistribute this document under the same terms as Perl
+itself.
+
+=cut
Added: vendor/perl/dist/pod/perlootut.pod
===================================================================
--- vendor/perl/dist/pod/perlootut.pod (rev 0)
+++ vendor/perl/dist/pod/perlootut.pod 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,750 @@
+=encoding utf8
+
+=for comment
+Consistent formatting of this file is achieved with:
+ perl ./Porting/podtidy pod/perlootut.pod
+
+=head1 NAME
+
+perlootut - Object-Oriented Programming in Perl Tutorial
+
+=head1 DATE
+
+This document was created in February, 2011, and the last major
+revision was in February, 2013.
+
+If you are reading this in the future then it's possible that the state
+of the art has changed. We recommend you start by reading the perlootut
+document in the latest stable release of Perl, rather than this
+version.
+
+=head1 DESCRIPTION
+
+This document provides an introduction to object-oriented programming
+in Perl. It begins with a brief overview of the concepts behind object
+oriented design. Then it introduces several different OO systems from
+L<CPAN|http://search.cpan.org> which build on top of what Perl
+provides.
+
+By default, Perl's built-in OO system is very minimal, leaving you to
+do most of the work. This minimalism made a lot of sense in 1994, but
+in the years since Perl 5.0 we've seen a number of common patterns
+emerge in Perl OO. Fortunately, Perl's flexibility has allowed a rich
+ecosystem of Perl OO systems to flourish.
+
+If you want to know how Perl OO works under the hood, the L<perlobj>
+document explains the nitty gritty details.
+
+This document assumes that you already understand the basics of Perl
+syntax, variable types, operators, and subroutine calls. If you don't
+understand these concepts yet, please read L<perlintro> first. You
+should also read the L<perlsyn>, L<perlop>, and L<perlsub> documents.
+
+=head1 OBJECT-ORIENTED FUNDAMENTALS
+
+Most object systems share a number of common concepts. You've probably
+heard terms like "class", "object, "method", and "attribute" before.
+Understanding the concepts will make it much easier to read and write
+object-oriented code. If you're already familiar with these terms, you
+should still skim this section, since it explains each concept in terms
+of Perl's OO implementation.
+
+Perl's OO system is class-based. Class-based OO is fairly common. It's
+used by Java, C++, C#, Python, Ruby, and many other languages. There
+are other object orientation paradigms as well. JavaScript is the most
+popular language to use another paradigm. JavaScript's OO system is
+prototype-based.
+
+=head2 Object
+
+An B<object> is a data structure that bundles together data and
+subroutines which operate on that data. An object's data is called
+B<attributes>, and its subroutines are called B<methods>. An object can
+be thought of as a noun (a person, a web service, a computer).
+
+An object represents a single discrete thing. For example, an object
+might represent a file. The attributes for a file object might include
+its path, content, and last modification time. If we created an object
+to represent F</etc/hostname> on a machine named "foo.example.com",
+that object's path would be "/etc/hostname", its content would be
+"foo\n", and it's last modification time would be 1304974868 seconds
+since the beginning of the epoch.
+
+The methods associated with a file might include C<rename()> and
+C<write()>.
+
+In Perl most objects are hashes, but the OO systems we recommend keep
+you from having to worry about this. In practice, it's best to consider
+an object's internal data structure opaque.
+
+=head2 Class
+
+A B<class> defines the behavior of a category of objects. A class is a
+name for a category (like "File"), and a class also defines the
+behavior of objects in that category.
+
+All objects belong to a specific class. For example, our
+F</etc/hostname> object belongs to the C<File> class. When we want to
+create a specific object, we start with its class, and B<construct> or
+B<instantiate> an object. A specific object is often referred to as an
+B<instance> of a class.
+
+In Perl, any package can be a class. The difference between a package
+which is a class and one which isn't is based on how the package is
+used. Here's our "class declaration" for the C<File> class:
+
+ package File;
+
+In Perl, there is no special keyword for constructing an object.
+However, most OO modules on CPAN use a method named C<new()> to
+construct a new object:
+
+ my $hostname = File->new(
+ path => '/etc/hostname',
+ content => "foo\n",
+ last_mod_time => 1304974868,
+ );
+
+(Don't worry about that C<< -> >> operator, it will be explained
+later.)
+
+=head3 Blessing
+
+As we said earlier, most Perl objects are hashes, but an object can be
+an instance of any Perl data type (scalar, array, etc.). Turning a
+plain data structure into an object is done by B<blessing> that data
+structure using Perl's C<bless> function.
+
+While we strongly suggest you don't build your objects from scratch,
+you should know the term B<bless>. A B<blessed> data structure (aka "a
+referent") is an object. We sometimes say that an object has been
+"blessed into a class".
+
+Once a referent has been blessed, the C<blessed> function from the
+L<Scalar::Util> core module can tell us its class name. This subroutine
+returns an object's class when passed an object, and false otherwise.
+
+ use Scalar::Util 'blessed';
+
+ print blessed($hash); # undef
+ print blessed($hostname); # File
+
+=head3 Constructor
+
+A B<constructor> creates a new object. In Perl, a class's constructor
+is just another method, unlike some other languages, which provide
+syntax for constructors. Most Perl classes use C<new> as the name for
+their constructor:
+
+ my $file = File->new(...);
+
+=head2 Methods
+
+You already learned that a B<method> is a subroutine that operates on
+an object. You can think of a method as the things that an object can
+I<do>. If an object is a noun, then methods are its verbs (save, print,
+open).
+
+In Perl, methods are simply subroutines that live in a class's package.
+Methods are always written to receive the object as their first
+argument:
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ }
+
+ $file->print_info;
+ # The file is at /etc/hostname
+
+What makes a method special is I<how it's called>. The arrow operator
+(C<< -> >>) tells Perl that we are calling a method.
+
+When we make a method call, Perl arranges for the method's B<invocant>
+to be passed as the first argument. B<Invocant> is a fancy name for the
+thing on the left side of the arrow. The invocant can either be a class
+name or an object. We can also pass additional arguments to the method:
+
+ sub print_info {
+ my $self = shift;
+ my $prefix = shift // "This file is at ";
+
+ print $prefix, ", ", $self->path, "\n";
+ }
+
+ $file->print_info("The file is located at ");
+ # The file is located at /etc/hostname
+
+=head2 Attributes
+
+Each class can define its B<attributes>. When we instantiate an object,
+we assign values to those attributes. For example, every C<File> object
+has a path. Attributes are sometimes called B<properties>.
+
+Perl has no special syntax for attributes. Under the hood, attributes
+are often stored as keys in the object's underlying hash, but don't
+worry about this.
+
+We recommend that you only access attributes via B<accessor> methods.
+These are methods that can get or set the value of each attribute. We
+saw this earlier in the C<print_info()> example, which calls C<<
+$self->path >>.
+
+You might also see the terms B<getter> and B<setter>. These are two
+types of accessors. A getter gets the attribute's value, while a setter
+sets it. Another term for a setter is B<mutator>
+
+Attributes are typically defined as read-only or read-write. Read-only
+attributes can only be set when the object is first created, while
+read-write attributes can be altered at any time.
+
+The value of an attribute may itself be another object. For example,
+instead of returning its last mod time as a number, the C<File> class
+could return a L<DateTime> object representing that value.
+
+It's possible to have a class that does not expose any publicly
+settable attributes. Not every class has attributes and methods.
+
+=head2 Polymorphism
+
+B<Polymorphism> is a fancy way of saying that objects from two
+different classes share an API. For example, we could have C<File> and
+C<WebPage> classes which both have a C<print_content()> method. This
+method might produce different output for each class, but they share a
+common interface.
+
+While the two classes may differ in many ways, when it comes to the
+C<print_content()> method, they are the same. This means that we can
+try to call the C<print_content()> method on an object of either class,
+and B<we don't have to know what class the object belongs to!>
+
+Polymorphism is one of the key concepts of object-oriented design.
+
+=head2 Inheritance
+
+B<Inheritance> lets you create a specialized version of an existing
+class. Inheritance lets the new class reuse the methods and attributes
+of another class.
+
+For example, we could create an C<File::MP3> class which B<inherits>
+from C<File>. An C<File::MP3> B<is-a> I<more specific> type of C<File>.
+All mp3 files are files, but not all files are mp3 files.
+
+We often refer to inheritance relationships as B<parent-child> or
+C<superclass/subclass> relationships. Sometimes we say that the child
+has an B<is-a> relationship with its parent class.
+
+C<File> is a B<superclass> of C<File::MP3>, and C<File::MP3> is a
+B<subclass> of C<File>.
+
+ package File::MP3;
+
+ use parent 'File';
+
+The L<parent> module is one of several ways that Perl lets you define
+inheritance relationships.
+
+Perl allows multiple inheritance, which means that a class can inherit
+from multiple parents. While this is possible, we strongly recommend
+against it. Generally, you can use B<roles> to do everything you can do
+with multiple inheritance, but in a cleaner way.
+
+Note that there's nothing wrong with defining multiple subclasses of a
+given class. This is both common and safe. For example, we might define
+C<File::MP3::FixedBitrate> and C<File::MP3::VariableBitrate> classes to
+distinguish between different types of mp3 file.
+
+=head3 Overriding methods and method resolution
+
+Inheritance allows two classes to share code. By default, every method
+in the parent class is also available in the child. The child can
+explicitly B<override> a parent's method to provide its own
+implementation. For example, if we have an C<File::MP3> object, it has
+the C<print_info()> method from C<File>:
+
+ my $cage = File::MP3->new(
+ path => 'mp3s/My-Body-Is-a-Cage.mp3',
+ content => $mp3_data,
+ last_mod_time => 1304974868,
+ title => 'My Body Is a Cage',
+ );
+
+ $cage->print_info;
+ # The file is at mp3s/My-Body-Is-a-Cage.mp3
+
+If we wanted to include the mp3's title in the greeting, we could
+override the method:
+
+ package File::MP3;
+
+ use parent 'File';
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ print "Its title is ", $self->title, "\n";
+ }
+
+ $cage->print_info;
+ # The file is at mp3s/My-Body-Is-a-Cage.mp3
+ # Its title is My Body Is a Cage
+
+The process of determining what method should be used is called
+B<method resolution>. What Perl does is look at the object's class
+first (C<File::MP3> in this case). If that class defines the method,
+then that class's version of the method is called. If not, Perl looks
+at each parent class in turn. For C<File::MP3>, its only parent is
+C<File>. If C<File::MP3> does not define the method, but C<File> does,
+then Perl calls the method in C<File>.
+
+If C<File> inherited from C<DataSource>, which inherited from C<Thing>,
+then Perl would keep looking "up the chain" if necessary.
+
+It is possible to explicitly call a parent method from a child:
+
+ package File::MP3;
+
+ use parent 'File';
+
+ sub print_info {
+ my $self = shift;
+
+ $self->SUPER::print_info();
+ print "Its title is ", $self->title, "\n";
+ }
+
+The C<SUPER::> bit tells Perl to look for the C<print_info()> in the
+C<File::MP3> class's inheritance chain. When it finds the parent class
+that implements this method, the method is called.
+
+We mentioned multiple inheritance earlier. The main problem with
+multiple inheritance is that it greatly complicates method resolution.
+See L<perlobj> for more details.
+
+=head2 Encapsulation
+
+B<Encapsulation> is the idea that an object is opaque. When another
+developer uses your class, they don't need to know I<how> it is
+implemented, they just need to know I<what> it does.
+
+Encapsulation is important for several reasons. First, it allows you to
+separate the public API from the private implementation. This means you
+can change that implementation without breaking the API.
+
+Second, when classes are well encapsulated, they become easier to
+subclass. Ideally, a subclass uses the same APIs to access object data
+that its parent class uses. In reality, subclassing sometimes involves
+violating encapsulation, but a good API can minimize the need to do
+this.
+
+We mentioned earlier that most Perl objects are implemented as hashes
+under the hood. The principle of encapsulation tells us that we should
+not rely on this. Instead, we should use accessor methods to access the
+data in that hash. The object systems that we recommend below all
+automate the generation of accessor methods. If you use one of them,
+you should never have to access the object as a hash directly.
+
+=head2 Composition
+
+In object-oriented code, we often find that one object references
+another object. This is called B<composition>, or a B<has-a>
+relationship.
+
+Earlier, we mentioned that the C<File> class's C<last_mod_time>
+accessor could return a L<DateTime> object. This is a perfect example
+of composition. We could go even further, and make the C<path> and
+C<content> accessors return objects as well. The C<File> class would
+then be B<composed> of several other objects.
+
+=head2 Roles
+
+B<Roles> are something that a class I<does>, rather than something that
+it I<is>. Roles are relatively new to Perl, but have become rather
+popular. Roles are B<applied> to classes. Sometimes we say that classes
+B<consume> roles.
+
+Roles are an alternative to inheritance for providing polymorphism.
+Let's assume we have two classes, C<Radio> and C<Computer>. Both of
+these things have on/off switches. We want to model that in our class
+definitions.
+
+We could have both classes inherit from a common parent, like
+C<Machine>, but not all machines have on/off switches. We could create
+a parent class called C<HasOnOffSwitch>, but that is very artificial.
+Radios and computers are not specializations of this parent. This
+parent is really a rather ridiculous creation.
+
+This is where roles come in. It makes a lot of sense to create a
+C<HasOnOffSwitch> role and apply it to both classes. This role would
+define a known API like providing C<turn_on()> and C<turn_off()>
+methods.
+
+Perl does not have any built-in way to express roles. In the past,
+people just bit the bullet and used multiple inheritance. Nowadays,
+there are several good choices on CPAN for using roles.
+
+=head2 When to Use OO
+
+Object Orientation is not the best solution to every problem. In I<Perl
+Best Practices> (copyright 2004, Published by O'Reilly Media, Inc.),
+Damian Conway provides a list of criteria to use when deciding if OO is
+the right fit for your problem:
+
+=over 4
+
+=item *
+
+The system being designed is large, or is likely to become large.
+
+=item *
+
+The data can be aggregated into obvious structures, especially if
+there's a large amount of data in each aggregate.
+
+=item *
+
+The various types of data aggregate form a natural hierarchy that
+facilitates the use of inheritance and polymorphism.
+
+=item *
+
+You have a piece of data on which many different operations are
+applied.
+
+=item *
+
+You need to perform the same general operations on related types of
+data, but with slight variations depending on the specific type of data
+the operations are applied to.
+
+=item *
+
+It's likely you'll have to add new data types later.
+
+=item *
+
+The typical interactions between pieces of data are best represented by
+operators.
+
+=item *
+
+The implementation of individual components of the system is likely to
+change over time.
+
+=item *
+
+The system design is already object-oriented.
+
+=item *
+
+Large numbers of other programmers will be using your code modules.
+
+=back
+
+=head1 PERL OO SYSTEMS
+
+As we mentioned before, Perl's built-in OO system is very minimal, but
+also quite flexible. Over the years, many people have developed systems
+which build on top of Perl's built-in system to provide more features
+and convenience.
+
+We strongly recommend that you use one of these systems. Even the most
+minimal of them eliminates a lot of repetitive boilerplate. There's
+really no good reason to write your classes from scratch in Perl.
+
+If you are interested in the guts underlying these systems, check out
+L<perlobj>.
+
+=head2 Moose
+
+L<Moose> bills itself as a "postmodern object system for Perl 5". Don't
+be scared, the "postmodern" label is a callback to Larry's description
+of Perl as "the first postmodern computer language".
+
+C<Moose> provides a complete, modern OO system. Its biggest influence
+is the Common Lisp Object System, but it also borrows ideas from
+Smalltalk and several other languages. C<Moose> was created by Stevan
+Little, and draws heavily from his work on the Perl 6 OO design.
+
+Here is our C<File> class using C<Moose>:
+
+ package File;
+ use Moose;
+
+ has path => ( is => 'ro' );
+ has content => ( is => 'ro' );
+ has last_mod_time => ( is => 'ro' );
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ }
+
+C<Moose> provides a number of features:
+
+=over 4
+
+=item * Declarative sugar
+
+C<Moose> provides a layer of declarative "sugar" for defining classes.
+That sugar is just a set of exported functions that make declaring how
+your class works simpler and more palatable. This lets you describe
+I<what> your class is, rather than having to tell Perl I<how> to
+implement your class.
+
+The C<has()> subroutine declares an attribute, and C<Moose>
+automatically creates accessors for these attributes. It also takes
+care of creating a C<new()> method for you. This constructor knows
+about the attributes you declared, so you can set them when creating a
+new C<File>.
+
+=item * Roles built-in
+
+C<Moose> lets you define roles the same way you define classes:
+
+ package HasOnOfSwitch;
+ use Moose::Role;
+
+ has is_on => (
+ is => 'rw',
+ isa => 'Bool',
+ );
+
+ sub turn_on {
+ my $self = shift;
+ $self->is_on(1);
+ }
+
+ sub turn_off {
+ my $self = shift;
+ $self->is_on(0);
+ }
+
+=item * A miniature type system
+
+In the example above, you can see that we passed C<< isa => 'Bool' >>
+to C<has()> when creating our C<is_on> attribute. This tells C<Moose>
+that this attribute must be a boolean value. If we try to set it to an
+invalid value, our code will throw an error.
+
+=item * Full introspection and manipulation
+
+Perl's built-in introspection features are fairly minimal. C<Moose>
+builds on top of them and creates a full introspection layer for your
+classes. This lets you ask questions like "what methods does the File
+class implement?" It also lets you modify your classes
+programmatically.
+
+=item * Self-hosted and extensible
+
+C<Moose> describes itself using its own introspection API. Besides
+being a cool trick, this means that you can extend C<Moose> using
+C<Moose> itself.
+
+=item * Rich ecosystem
+
+There is a rich ecosystem of C<Moose> extensions on CPAN under the
+L<MooseX|http://search.cpan.org/search?query=MooseX&mode=dist>
+namespace. In addition, many modules on CPAN already use C<Moose>,
+providing you with lots of examples to learn from.
+
+=item * Many more features
+
+C<Moose> is a very powerful tool, and we can't cover all of its
+features here. We encourage you to learn more by reading the C<Moose>
+documentation, starting with
+L<Moose::Manual|http://search.cpan.org/perldoc?Moose::Manual>.
+
+=back
+
+Of course, C<Moose> isn't perfect.
+
+C<Moose> can make your code slower to load. C<Moose> itself is not
+small, and it does a I<lot> of code generation when you define your
+class. This code generation means that your runtime code is as fast as
+it can be, but you pay for this when your modules are first loaded.
+
+This load time hit can be a problem when startup speed is important,
+such as with a command-line script or a "plain vanilla" CGI script that
+must be loaded each time it is executed.
+
+Before you panic, know that many people do use C<Moose> for
+command-line tools and other startup-sensitive code. We encourage you
+to try C<Moose> out first before worrying about startup speed.
+
+C<Moose> also has several dependencies on other modules. Most of these
+are small stand-alone modules, a number of which have been spun off
+from C<Moose>. C<Moose> itself, and some of its dependencies, require a
+compiler. If you need to install your software on a system without a
+compiler, or if having I<any> dependencies is a problem, then C<Moose>
+may not be right for you.
+
+=head3 Moo
+
+If you try C<Moose> and find that one of these issues is preventing you
+from using C<Moose>, we encourage you to consider L<Moo> next. C<Moo>
+implements a subset of C<Moose>'s functionality in a simpler package.
+For most features that it does implement, the end-user API is
+I<identical> to C<Moose>, meaning you can switch from C<Moo> to
+C<Moose> quite easily.
+
+C<Moo> does not implement most of C<Moose>'s introspection API, so it's
+often faster when loading your modules. Additionally, none of its
+dependencies require XS, so it can be installed on machines without a
+compiler.
+
+One of C<Moo>'s most compelling features is its interoperability with
+C<Moose>. When someone tries to use C<Moose>'s introspection API on a
+C<Moo> class or role, it is transparently inflated into a C<Moose>
+class or role. This makes it easier to incorporate C<Moo>-using code
+into a C<Moose> code base and vice versa.
+
+For example, a C<Moose> class can subclass a C<Moo> class using
+C<extends> or consume a C<Moo> role using C<with>.
+
+The C<Moose> authors hope that one day C<Moo> can be made obsolete by
+improving C<Moose> enough, but for now it provides a worthwhile
+alternative to C<Moose>.
+
+=head2 Class::Accessor
+
+L<Class::Accessor> is the polar opposite of C<Moose>. It provides very
+few features, nor is it self-hosting.
+
+It is, however, very simple, pure Perl, and it has no non-core
+dependencies. It also provides a "Moose-like" API on demand for the
+features it supports.
+
+Even though it doesn't do much, it is still preferable to writing your
+own classes from scratch.
+
+Here's our C<File> class with C<Class::Accessor>:
+
+ package File;
+ use Class::Accessor 'antlers';
+
+ has path => ( is => 'ro' );
+ has content => ( is => 'ro' );
+ has last_mod_time => ( is => 'ro' );
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ }
+
+The C<antlers> import flag tells C<Class::Accessor> that you want to
+define your attributes using C<Moose>-like syntax. The only parameter
+that you can pass to C<has> is C<is>. We recommend that you use this
+Moose-like syntax if you choose C<Class::Accessor> since it means you
+will have a smoother upgrade path if you later decide to move to
+C<Moose>.
+
+Like C<Moose>, C<Class::Accessor> generates accessor methods and a
+constructor for your class.
+
+=head2 Object::Tiny
+
+Finally, we have L<Object::Tiny>. This module truly lives up to its
+name. It has an incredibly minimal API and absolutely no dependencies
+(core or not). Still, we think it's a lot easier to use than writing
+your own OO code from scratch.
+
+Here's our C<File> class once more:
+
+ package File;
+ use Object::Tiny qw( path content last_mod_time );
+
+ sub print_info {
+ my $self = shift;
+
+ print "This file is at ", $self->path, "\n";
+ }
+
+That's it!
+
+With C<Object::Tiny>, all accessors are read-only. It generates a
+constructor for you, as well as the accessors you define.
+
+=head2 Role::Tiny
+
+As we mentioned before, roles provide an alternative to inheritance,
+but Perl does not have any built-in role support. If you choose to use
+Moose, it comes with a full-fledged role implementation. However, if
+you use one of our other recommended OO modules, you can still use
+roles with L<Role::Tiny>
+
+C<Role::Tiny> provides some of the same features as Moose's role
+system, but in a much smaller package. Most notably, it doesn't support
+any sort of attribute declaration, so you have to do that by hand.
+Still, it's useful, and works well with C<Class::Accessor> and
+C<Object::Tiny>
+
+=head2 OO System Summary
+
+Here's a brief recap of the options we covered:
+
+=over 4
+
+=item * L<Moose>
+
+C<Moose> is the maximal option. It has a lot of features, a big
+ecosystem, and a thriving user base. We also covered L<Moo> briefly.
+C<Moo> is C<Moose> lite, and a reasonable alternative when Moose
+doesn't work for your application.
+
+=item * L<Class::Accessor>
+
+C<Class::Accessor> does a lot less than C<Moose>, and is a nice
+alternative if you find C<Moose> overwhelming. It's been around a long
+time and is well battle-tested. It also has a minimal C<Moose>
+compatibility mode which makes moving from C<Class::Accessor> to
+C<Moose> easy.
+
+=item * L<Object::Tiny>
+
+C<Object::Tiny> is the absolute minimal option. It has no dependencies,
+and almost no syntax to learn. It's a good option for a super minimal
+environment and for throwing something together quickly without having
+to worry about details.
+
+=item * L<Role::Tiny>
+
+Use C<Role::Tiny> with C<Class::Accessor> or C<Object::Tiny> if you
+find yourself considering multiple inheritance. If you go with
+C<Moose>, it comes with its own role implementation.
+
+=back
+
+=head2 Other OO Systems
+
+There are literally dozens of other OO-related modules on CPAN besides
+those covered here, and you're likely to run across one or more of them
+if you work with other people's code.
+
+In addition, plenty of code in the wild does all of its OO "by hand",
+using just the Perl built-in OO features. If you need to maintain such
+code, you should read L<perlobj> to understand exactly how Perl's
+built-in OO works.
+
+=head1 CONCLUSION
+
+As we said before, Perl's minimal OO system has led to a profusion of
+OO systems on CPAN. While you can still drop down to the bare metal and
+write your classes by hand, there's really no reason to do that with
+modern Perl.
+
+For small systems, L<Object::Tiny> and L<Class::Accessor> both provide
+minimal object systems that take care of basic boilerplate for you.
+
+For bigger projects, L<Moose> provides a rich set of features that will
+let you focus on implementing your business logic.
+
+We encourage you to play with and evaluate L<Moose>,
+L<Class::Accessor>, and L<Object::Tiny> to see which OO system is right
+for you.
+
+=cut
Added: vendor/perl/dist/regen/embed_lib.pl
===================================================================
--- vendor/perl/dist/regen/embed_lib.pl (rev 0)
+++ vendor/perl/dist/regen/embed_lib.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,141 @@
+#!/usr/bin/perl -w
+use strict;
+
+# read embed.fnc and regen/opcodes, needed by regen/embed.pl and makedef.pl
+
+require 5.004; # keep this compatible, an old perl is all we may have before
+ # we build the new one
+
+# Records the current pre-processor state:
+my @state;
+# Nested structure to group functions by the pre-processor conditions that
+# control when they are compiled:
+my %groups;
+
+sub current_group {
+ my $group = \%groups;
+ # Nested #if blocks are effectively &&ed together
+ # For embed.fnc, ordering within the && isn't relevant, so we can
+ # sort them to try to group more functions together.
+ foreach (sort @state) {
+ $group->{$_} ||= {};
+ $group = $group->{$_};
+ }
+ return $group->{''} ||= [];
+}
+
+sub add_level {
+ my ($level, $indent, $wanted) = @_;
+ my $funcs = $level->{''};
+ my @entries;
+ if ($funcs) {
+ if (!defined $wanted) {
+ @entries = @$funcs;
+ } else {
+ foreach (@$funcs) {
+ if ($_->[0] =~ /A/) {
+ push @entries, $_ if $wanted eq 'A';
+ } elsif ($_->[0] =~ /E/) {
+ push @entries, $_ if $wanted eq 'E';
+ } else {
+ push @entries, $_ if $wanted eq '';
+ }
+ }
+ }
+ @entries = sort {$a->[2] cmp $b->[2]} @entries;
+ }
+ foreach (sort grep {length $_} keys %$level) {
+ my @conditional = add_level($level->{$_}, $indent . ' ', $wanted);
+ push @entries,
+ ["#${indent}if $_"], @conditional, ["#${indent}endif"]
+ if @conditional;
+ }
+ return @entries;
+}
+
+sub setup_embed {
+ my $prefix = shift || '';
+ open IN, $prefix . 'embed.fnc' or die $!;
+
+ my @embed;
+
+ while (<IN>) {
+ chomp;
+ next if /^:/;
+ next if /^$/;
+ while (s|\\$||) {
+ $_ .= <IN>;
+ chomp;
+ }
+ s/\s+$//;
+ my @args;
+ if (/^\s*(#|$)/) {
+ @args = $_;
+ }
+ else {
+ @args = split /\s*\|\s*/, $_;
+ }
+ if (@args == 1 && $args[0] !~ /^#\s*(?:if|ifdef|ifndef|else|endif)/) {
+ die "Illegal line $. '$args[0]' in embed.fnc";
+ }
+ push @embed, \@args;
+ }
+
+ close IN or die "Problem reading embed.fnc: $!";
+
+ open IN, $prefix . 'regen/opcodes' or die $!;
+ {
+ my %syms;
+
+ while (<IN>) {
+ chomp;
+ next unless $_;
+ next if /^#/;
+ my $check = (split /\t+/, $_)[2];
+ next if $syms{$check}++;
+
+ # These are all indirectly referenced by globals.c.
+ push @embed, ['pR', 'OP *', $check, 'NN OP *o'];
+ }
+ }
+ close IN or die "Problem reading regen/opcodes: $!";
+
+ # Cluster entries in embed.fnc that have the same #ifdef guards.
+ # Also, split out at the top level the three classes of functions.
+ # Output structure is actually the same as input structure - an
+ # (ordered) list of array references, where the elements in the
+ # reference determine what it is - a reference to a 1-element array is a
+ # pre-processor directive, a reference to 2+ element array is a function.
+
+ my $current = current_group();
+
+ foreach (@embed) {
+ if (@$_ > 1) {
+ push @$current, $_;
+ next;
+ }
+ $_->[0] =~ s/^#\s+/#/;
+ $_->[0] =~ /^\S*/;
+ $_->[0] =~ s/^#ifdef\s+(\S+)/#if defined($1)/;
+ $_->[0] =~ s/^#ifndef\s+(\S+)/#if !defined($1)/;
+ if ($_->[0] =~ /^#if\s*(.*)/) {
+ push @state, $1;
+ } elsif ($_->[0] =~ /^#else\s*$/) {
+ die "Unmatched #else in embed.fnc" unless @state;
+ $state[-1] = "!($state[-1])";
+ } elsif ($_->[0] =~ m!^#endif\s*(?:/\*.*\*/)?$!) {
+ die "Unmatched #endif in embed.fnc" unless @state;
+ pop @state;
+ } else {
+ die "Unhandled pre-processor directive '$_->[0]' in embed.fnc";
+ }
+ $current = current_group();
+ }
+
+ return ([add_level(\%groups, '')],
+ [add_level(\%groups, '', '')], # core
+ [add_level(\%groups, '', 'E')], # ext
+ [add_level(\%groups, '', 'A')]); # api
+}
+
+1;
Added: vendor/perl/dist/regen/feature.pl
===================================================================
--- vendor/perl/dist/regen/feature.pl (rev 0)
+++ vendor/perl/dist/regen/feature.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,706 @@
+#!/usr/bin/perl
+#
+# Regenerate (overwriting only if changed):
+#
+# lib/feature.pm
+# feature.h
+#
+# from information hardcoded into this script and from two #defines
+# in perl.h.
+#
+# This script is normally invoked from regen.pl.
+
+BEGIN {
+ require 'regen/regen_lib.pl';
+ push @INC, './lib';
+}
+use strict ;
+
+
+###########################################################################
+# Hand-editable data
+
+# (feature name) => (internal name, used in %^H and macro names)
+my %feature = (
+ say => 'say',
+ state => 'state',
+ switch => 'switch',
+ evalbytes => 'evalbytes',
+ array_base => 'arybase',
+ current_sub => '__SUB__',
+ lexical_subs => 'lexsubs',
+ unicode_eval => 'unieval',
+ unicode_strings => 'unicode',
+ fc => 'fc',
+);
+
+# NOTE: If a feature is ever enabled in a non-contiguous range of Perl
+# versions, any code below that uses %BundleRanges will have to
+# be changed to account.
+
+# 5.odd implies the next 5.even, but an explicit 5.even can override it.
+my %feature_bundle = (
+ all => [ keys %feature ],
+ default => [qw(array_base)],
+ "5.9.5" => [qw(say state switch array_base)],
+ "5.10" => [qw(say state switch array_base)],
+ "5.11" => [qw(say state switch unicode_strings array_base)],
+ "5.13" => [qw(say state switch unicode_strings array_base)],
+ "5.15" => [qw(say state switch unicode_strings unicode_eval
+ evalbytes current_sub fc)],
+ "5.17" => [qw(say state switch unicode_strings unicode_eval
+ evalbytes current_sub fc)],
+);
+
+# not actually used currently
+my @experimental = qw( lexical_subs );
+
+
+###########################################################################
+# More data generated from the above
+
+for (keys %feature_bundle) {
+ next unless /^5\.(\d*[13579])\z/;
+ $feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
+}
+
+my %UniqueBundles; # "say state switch" => 5.10
+my %Aliases; # 5.12 => 5.11
+for( sort keys %feature_bundle ) {
+ my $value = join(' ', sort @{$feature_bundle{$_}});
+ if (exists $UniqueBundles{$value}) {
+ $Aliases{$_} = $UniqueBundles{$value};
+ }
+ else {
+ $UniqueBundles{$value} = $_;
+ }
+}
+ # start end
+my %BundleRanges; # say => ['5.10', '5.15'] # unique bundles for values
+for my $bund (
+ sort { $a eq 'default' ? -1 : $b eq 'default' ? 1 : $a cmp $b }
+ values %UniqueBundles
+) {
+ next if $bund =~ /[^\d.]/ and $bund ne 'default';
+ for (@{$feature_bundle{$bund}}) {
+ if (@{$BundleRanges{$_} ||= []} == 2) {
+ $BundleRanges{$_}[1] = $bund
+ }
+ else {
+ push @{$BundleRanges{$_}}, $bund;
+ }
+ }
+}
+
+my $HintShift;
+my $HintMask;
+my $Uni8Bit;
+
+open "perl.h", "perl.h" or die "$0 cannot open perl.h: $!";
+while (readline "perl.h") {
+ next unless /#\s*define\s+(HINT_FEATURE_MASK|HINT_UNI_8_BIT)/;
+ my $is_u8b = $1 =~ 8;
+ /(0x[A-Fa-f0-9]+)/ or die "No hex number in:\n\n$_\n ";
+ if ($is_u8b) {
+ $Uni8Bit = $1;
+ }
+ else {
+ my $hex = $HintMask = $1;
+ my $bits = sprintf "%b", oct $1;
+ $bits =~ /^0*1+(0*)\z/
+ or die "Non-contiguous bits in $bits (binary for $hex):\n\n$_\n ";
+ $HintShift = length $1;
+ my $bits_needed =
+ length sprintf "%b", scalar keys %UniqueBundles;
+ $bits =~ /1{$bits_needed}/
+ or die "Not enough bits (need $bits_needed)"
+ . " in $bits (binary for $hex):\n\n$_\n ";
+ }
+ if ($Uni8Bit && $HintMask) { last }
+}
+die "No HINT_FEATURE_MASK defined in perl.h" unless $HintMask;
+die "No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit;
+
+close "perl.h";
+
+my @HintedBundles =
+ ('default', grep !/[^\d.]/, sort values %UniqueBundles);
+
+
+###########################################################################
+# Open files to be generated
+
+my ($pm, $h) = map {
+ open_new($_, '>', { by => 'regen/feature.pl' });
+} 'lib/feature.pm', 'feature.h';
+
+
+###########################################################################
+# Generate lib/feature.pm
+
+while (<DATA>) {
+ last if /^FEATURES$/ ;
+ print $pm $_ ;
+}
+
+sub longest {
+ my $long;
+ for(@_) {
+ if (!defined $long or length $long < length) {
+ $long = $_;
+ }
+ }
+ $long;
+}
+
+print $pm "our %feature = (\n";
+my $width = length longest keys %feature;
+for(sort { length $a <=> length $b || $a cmp $b } keys %feature) {
+ print $pm " $_" . " "x($width-length)
+ . " => 'feature_$feature{$_}',\n";
+}
+print $pm ");\n\n";
+
+print $pm "our %feature_bundle = (\n";
+$width = length longest values %UniqueBundles;
+for( sort { $UniqueBundles{$a} cmp $UniqueBundles{$b} }
+ keys %UniqueBundles ) {
+ my $bund = $UniqueBundles{$_};
+ print $pm qq' "$bund"' . " "x($width-length $bund)
+ . qq' => [qw($_)],\n';
+}
+print $pm ");\n\n";
+
+for (sort keys %Aliases) {
+ print $pm
+ qq'\$feature_bundle{"$_"} = \$feature_bundle{"$Aliases{$_}"};\n';
+};
+
+#print $pm "my \%experimental = (\n";
+#print $pm " $_ => 1,\n", for @experimental;
+#print $pm ");\n";
+
+print $pm <<EOPM;
+
+our \$hint_shift = $HintShift;
+our \$hint_mask = $HintMask;
+our \@hint_bundles = qw( @HintedBundles );
+
+# This gets set (for now) in \$^H as well as in %^H,
+# for runtime speed of the uc/lc/ucfirst/lcfirst functions.
+# See HINT_UNI_8_BIT in perl.h.
+our \$hint_uni8bit = $Uni8Bit;
+EOPM
+
+
+while (<DATA>) {
+ last if /^PODTURES$/ ;
+ print $pm $_ ;
+}
+
+select +(select($pm), $~ = 'PODTURES')[0];
+format PODTURES =
+ ^<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+$::bundle, $::feature
+.
+
+for ('default', sort grep /\.\d[02468]/, keys %feature_bundle) {
+ $::bundle = ":$_";
+ $::feature = join ' ', @{$feature_bundle{$_}};
+ write $pm;
+ print $pm "\n";
+}
+
+while (<DATA>) {
+ print $pm $_ ;
+}
+
+read_only_bottom_close_and_rename($pm);
+
+
+###########################################################################
+# Generate feature.h
+
+print $h <<EOH;
+
+#if defined(PERL_CORE) || defined (PERL_EXT)
+
+#define HINT_FEATURE_SHIFT $HintShift
+
+EOH
+
+my $count;
+for (@HintedBundles) {
+ (my $key = uc) =~ y/.//d;
+ print $h "#define FEATURE_BUNDLE_$key ", $count++, "\n";
+}
+
+print $h <<'EOH';
+#define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
+
+#define CURRENT_HINTS \
+ (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
+#define CURRENT_FEATURE_BUNDLE \
+ ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
+
+/* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in
+ the HP-UX cc on PA-RISC */
+#define FEATURE_IS_ENABLED(name) \
+ ((CURRENT_HINTS \
+ & HINT_LOCALIZE_HH) \
+ ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE)
+/* The longest string we pass in. */
+EOH
+
+my $longest_internal_feature_name = longest values %feature;
+print $h <<EOL;
+#define MAX_FEATURE_LEN (sizeof("$longest_internal_feature_name")-1)
+
+EOL
+
+for (
+ sort { length $a <=> length $b || $a cmp $b } keys %feature
+) {
+ my($first,$last) =
+ map { (my $__ = uc) =~ y/.//d; $__ } @{$BundleRanges{$_}};
+ my $name = $feature{$_};
+ my $NAME = uc $name;
+ if ($last && $first eq 'DEFAULT') { # ‘>= DEFAULT’ warns
+ print $h <<EOI;
+#define FEATURE_$NAME\_IS_ENABLED \\
+ ( \\
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last \\
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
+ FEATURE_IS_ENABLED("$name")) \\
+ )
+
+EOI
+ }
+ elsif ($last) {
+ print $h <<EOH3;
+#define FEATURE_$NAME\_IS_ENABLED \\
+ ( \\
+ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_$first && \\
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last) \\
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
+ FEATURE_IS_ENABLED("$name")) \\
+ )
+
+EOH3
+ }
+ elsif ($first) {
+ print $h <<EOH4;
+#define FEATURE_$NAME\_IS_ENABLED \\
+ ( \\
+ CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_$first \\
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
+ FEATURE_IS_ENABLED("$name")) \\
+ )
+
+EOH4
+ }
+ else {
+ print $h <<EOH5;
+#define FEATURE_$NAME\_IS_ENABLED \\
+ ( \\
+ CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
+ FEATURE_IS_ENABLED("$name") \\
+ )
+
+EOH5
+ }
+}
+
+print $h <<EOH;
+
+#endif /* PERL_CORE or PERL_EXT */
+
+#ifdef PERL_IN_OP_C
+PERL_STATIC_INLINE void
+S_enable_feature_bundle(pTHX_ SV *ver)
+{
+ SV *comp_ver = sv_newmortal();
+ PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
+ | (
+EOH
+
+for (reverse @HintedBundles[1..$#HintedBundles]) { # skip default
+ my $numver = $_;
+ if ($numver eq '5.10') { $numver = '5.009005' } # special case
+ else { $numver =~ s/\./.0/ } # 5.11 => 5.011
+ (my $macrover = $_) =~ y/.//d;
+ print $h <<" EOK";
+ (sv_setnv(comp_ver, $numver),
+ vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
+ ? FEATURE_BUNDLE_$macrover :
+ EOK
+}
+
+print $h <<EOJ;
+ FEATURE_BUNDLE_DEFAULT
+ ) << HINT_FEATURE_SHIFT;
+ /* special case */
+ assert(PL_curcop == &PL_compiling);
+ if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT;
+ else PL_hints &= ~HINT_UNI_8_BIT;
+}
+#endif /* PERL_IN_OP_C */
+EOJ
+
+read_only_bottom_close_and_rename($h);
+
+
+###########################################################################
+# Template for feature.pm
+
+__END__
+package feature;
+
+our $VERSION = '1.32';
+
+FEATURES
+
+# TODO:
+# - think about versioned features (use feature switch => 2)
+
+=head1 NAME
+
+feature - Perl pragma to enable new features
+
+=head1 SYNOPSIS
+
+ use feature qw(say switch);
+ given ($foo) {
+ when (1) { say "\$foo == 1" }
+ when ([2,3]) { say "\$foo == 2 || \$foo == 3" }
+ when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" }
+ when ($_ > 100) { say "\$foo > 100" }
+ default { say "None of the above" }
+ }
+
+ use feature ':5.10'; # loads all features available in perl 5.10
+
+ use v5.10; # implicitly loads :5.10 feature bundle
+
+=head1 DESCRIPTION
+
+It is usually impossible to add new syntax to Perl without breaking
+some existing programs. This pragma provides a way to minimize that
+risk. New syntactic constructs, or new semantic meanings to older
+constructs, can be enabled by C<use feature 'foo'>, and will be parsed
+only when the appropriate feature pragma is in scope. (Nevertheless, the
+C<CORE::> prefix provides access to all Perl keywords, regardless of this
+pragma.)
+
+=head2 Lexical effect
+
+Like other pragmas (C<use strict>, for example), features have a lexical
+effect. C<use feature qw(foo)> will only make the feature "foo" available
+from that point to the end of the enclosing block.
+
+ {
+ use feature 'say';
+ say "say is available here";
+ }
+ print "But not here.\n";
+
+=head2 C<no feature>
+
+Features can also be turned off by using C<no feature "foo">. This too
+has lexical effect.
+
+ use feature 'say';
+ say "say is available here";
+ {
+ no feature 'say';
+ print "But not here.\n";
+ }
+ say "Yet it is here.";
+
+C<no feature> with no features specified will reset to the default group. To
+disable I<all> features (an unusual request!) use C<no feature ':all'>.
+
+=head1 AVAILABLE FEATURES
+
+=head2 The 'say' feature
+
+C<use feature 'say'> tells the compiler to enable the Perl 6 style
+C<say> function.
+
+See L<perlfunc/say> for details.
+
+This feature is available starting with Perl 5.10.
+
+=head2 The 'state' feature
+
+C<use feature 'state'> tells the compiler to enable C<state>
+variables.
+
+See L<perlsub/"Persistent Private Variables"> for details.
+
+This feature is available starting with Perl 5.10.
+
+=head2 The 'switch' feature
+
+C<use feature 'switch'> tells the compiler to enable the Perl 6
+given/when construct.
+
+See L<perlsyn/"Switch Statements"> for details.
+
+This feature is available starting with Perl 5.10.
+
+=head2 The 'unicode_strings' feature
+
+C<use feature 'unicode_strings'> tells the compiler to use Unicode semantics
+in all string operations executed within its scope (unless they are also
+within the scope of either C<use locale> or C<use bytes>). The same applies
+to all regular expressions compiled within the scope, even if executed outside
+it. It does not change the internal representation of strings, but only how
+they are interpreted.
+
+C<no feature 'unicode_strings'> tells the compiler to use the traditional
+Perl semantics wherein the native character set semantics is used unless it is
+clear to Perl that Unicode is desired. This can lead to some surprises
+when the behavior suddenly changes. (See
+L<perlunicode/The "Unicode Bug"> for details.) For this reason, if you are
+potentially using Unicode in your program, the
+C<use feature 'unicode_strings'> subpragma is B<strongly> recommended.
+
+This feature is available starting with Perl 5.12; was almost fully
+implemented in Perl 5.14; and extended in Perl 5.16 to cover C<quotemeta>.
+
+=head2 The 'unicode_eval' and 'evalbytes' features
+
+Under the C<unicode_eval> feature, Perl's C<eval> function, when passed a
+string, will evaluate it as a string of characters, ignoring any
+C<use utf8> declarations. C<use utf8> exists to declare the encoding of
+the script, which only makes sense for a stream of bytes, not a string of
+characters. Source filters are forbidden, as they also really only make
+sense on strings of bytes. Any attempt to activate a source filter will
+result in an error.
+
+The C<evalbytes> feature enables the C<evalbytes> keyword, which evaluates
+the argument passed to it as a string of bytes. It dies if the string
+contains any characters outside the 8-bit range. Source filters work
+within C<evalbytes>: they apply to the contents of the string being
+evaluated.
+
+Together, these two features are intended to replace the historical C<eval>
+function, which has (at least) two bugs in it, that cannot easily be fixed
+without breaking existing programs:
+
+=over
+
+=item *
+
+C<eval> behaves differently depending on the internal encoding of the
+string, sometimes treating its argument as a string of bytes, and sometimes
+as a string of characters.
+
+=item *
+
+Source filters activated within C<eval> leak out into whichever I<file>
+scope is currently being compiled. To give an example with the CPAN module
+L<Semi::Semicolons>:
+
+ BEGIN { eval "use Semi::Semicolons; # not filtered here " }
+ # filtered here!
+
+C<evalbytes> fixes that to work the way one would expect:
+
+ use feature "evalbytes";
+ BEGIN { evalbytes "use Semi::Semicolons; # filtered " }
+ # not filtered
+
+=back
+
+These two features are available starting with Perl 5.16.
+
+=head2 The 'current_sub' feature
+
+This provides the C<__SUB__> token that returns a reference to the current
+subroutine or C<undef> outside of a subroutine.
+
+This feature is available starting with Perl 5.16.
+
+=head2 The 'array_base' feature
+
+This feature supports the legacy C<$[> variable. See L<perlvar/$[> and
+L<arybase>. It is on by default but disabled under C<use v5.16> (see
+L</IMPLICIT LOADING>, below).
+
+This feature is available under this name starting with Perl 5.16. In
+previous versions, it was simply on all the time, and this pragma knew
+nothing about it.
+
+=head2 The 'fc' feature
+
+C<use feature 'fc'> tells the compiler to enable the C<fc> function,
+which implements Unicode casefolding.
+
+See L<perlfunc/fc> for details.
+
+This feature is available from Perl 5.16 onwards.
+
+=head2 The 'lexical_subs' feature
+
+B<WARNING>: This feature is still experimental and the implementation may
+change in future versions of Perl. For this reason, Perl will
+warn when you use the feature, unless you have explicitly disabled the
+warning:
+
+ no warnings "experimental::lexical_subs";
+
+This enables declaration of subroutines via C<my sub foo>, C<state sub foo>
+and C<our sub foo> syntax. See L<perlsub/Lexical Subroutines> for details.
+
+This feature is available from Perl 5.18 onwards.
+
+=head1 FEATURE BUNDLES
+
+It's possible to load multiple features together, using
+a I<feature bundle>. The name of a feature bundle is prefixed with
+a colon, to distinguish it from an actual feature.
+
+ use feature ":5.10";
+
+The following feature bundles are available:
+
+ bundle features included
+ --------- -----------------
+PODTURES
+The C<:default> bundle represents the feature set that is enabled before
+any C<use feature> or C<no feature> declaration.
+
+Specifying sub-versions such as the C<0> in C<5.14.0> in feature bundles has
+no effect. Feature bundles are guaranteed to be the same for all sub-versions.
+
+ use feature ":5.14.0"; # same as ":5.14"
+ use feature ":5.14.1"; # same as ":5.14"
+
+=head1 IMPLICIT LOADING
+
+Instead of loading feature bundles by name, it is easier to let Perl do
+implicit loading of a feature bundle for you.
+
+There are two ways to load the C<feature> pragma implicitly:
+
+=over 4
+
+=item *
+
+By using the C<-E> switch on the Perl command-line instead of C<-e>.
+That will enable the feature bundle for that version of Perl in the
+main compilation unit (that is, the one-liner that follows C<-E>).
+
+=item *
+
+By explicitly requiring a minimum Perl version number for your program, with
+the C<use VERSION> construct. That is,
+
+ use v5.10.0;
+
+will do an implicit
+
+ no feature ':all';
+ use feature ':5.10';
+
+and so on. Note how the trailing sub-version
+is automatically stripped from the
+version.
+
+But to avoid portability warnings (see L<perlfunc/use>), you may prefer:
+
+ use 5.010;
+
+with the same effect.
+
+If the required version is older than Perl 5.10, the ":default" feature
+bundle is automatically loaded instead.
+
+=back
+
+=cut
+
+sub import {
+ my $class = shift;
+
+ if (!@_) {
+ croak("No features specified");
+ }
+
+ __common(1, @_);
+}
+
+sub unimport {
+ my $class = shift;
+
+ # A bare C<no feature> should reset to the default bundle
+ if (!@_) {
+ $^H &= ~($hint_uni8bit|$hint_mask);
+ return;
+ }
+
+ __common(0, @_);
+}
+
+
+sub __common {
+ my $import = shift;
+ my $bundle_number = $^H & $hint_mask;
+ my $features = $bundle_number != $hint_mask
+ && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
+ if ($features) {
+ # Features are enabled implicitly via bundle hints.
+ # Delete any keys that may be left over from last time.
+ delete @^H{ values(%feature) };
+ $^H |= $hint_mask;
+ for (@$features) {
+ $^H{$feature{$_}} = 1;
+ $^H |= $hint_uni8bit if $_ eq 'unicode_strings';
+ }
+ }
+ while (@_) {
+ my $name = shift;
+ if (substr($name, 0, 1) eq ":") {
+ my $v = substr($name, 1);
+ if (!exists $feature_bundle{$v}) {
+ $v =~ s/^([0-9]+)\.([0-9]+).[0-9]+$/$1.$2/;
+ if (!exists $feature_bundle{$v}) {
+ unknown_feature_bundle(substr($name, 1));
+ }
+ }
+ unshift @_, @{$feature_bundle{$v}};
+ next;
+ }
+ if (!exists $feature{$name}) {
+ unknown_feature($name);
+ }
+ if ($import) {
+ $^H{$feature{$name}} = 1;
+ $^H |= $hint_uni8bit if $name eq 'unicode_strings';
+ } else {
+ delete $^H{$feature{$name}};
+ $^H &= ~ $hint_uni8bit if $name eq 'unicode_strings';
+ }
+ }
+}
+
+sub unknown_feature {
+ my $feature = shift;
+ croak(sprintf('Feature "%s" is not supported by Perl %vd',
+ $feature, $^V));
+}
+
+sub unknown_feature_bundle {
+ my $feature = shift;
+ croak(sprintf('Feature bundle "%s" is not supported by Perl %vd',
+ $feature, $^V));
+}
+
+sub croak {
+ require Carp;
+ Carp::croak(@_);
+}
+
+1;
Added: vendor/perl/dist/regen/mg_vtable.pl
===================================================================
--- vendor/perl/dist/regen/mg_vtable.pl (rev 0)
+++ vendor/perl/dist/regen/mg_vtable.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,359 @@
+#!/usr/bin/perl -w
+#
+# Regenerate (overwriting only if changed):
+#
+# mg_names.c
+# mg_raw.h
+# mg_vtable.h
+# pod/perlguts.pod
+#
+# from information stored in this file. pod/perlguts.pod is not completely
+# regenerated. Only the magic table is replaced; the other parts remain
+# untouched.
+#
+# Accepts the standard regen_lib -q and -v args.
+#
+# This script is normally invoked from regen.pl.
+
+use strict;
+require 5.004;
+
+BEGIN {
+ # Get function prototypes
+ require 'regen/regen_lib.pl';
+}
+
+my %mg =
+ (
+ sv => { char => '\0', vtable => 'sv', readonly_acceptable => 1,
+ desc => 'Special scalar variable' },
+ # overload, or type "A" magic, used to be here. Hence overloaded is
+ # often called AMAGIC internally, even though it does not use "A"
+ # magic any more.
+ overload_table => { char => 'c', vtable => 'ovrld',
+ desc => 'Holds overload table (AMT) on stash' },
+ bm => { char => 'B', vtable => 'regexp', value_magic => 1,
+ readonly_acceptable => 1,
+ desc => 'Boyer-Moore (fast string search)' },
+ regdata => { char => 'D', vtable => 'regdata',
+ desc => "Regex match position data\n(\@+ and \@- vars)" },
+ regdatum => { char => 'd', vtable => 'regdatum',
+ desc => 'Regex match position data element' },
+ env => { char => 'E', vtable => 'env', desc => '%ENV hash' },
+ envelem => { char => 'e', vtable => 'envelem',
+ desc => '%ENV hash element' },
+ fm => { char => 'f', vtable => 'regexp', value_magic => 1,
+ readonly_acceptable => 1, desc => "Formline ('compiled' format)" },
+ regex_global => { char => 'g', vtable => 'mglob', value_magic => 1,
+ readonly_acceptable => 1, desc => 'm//g target' },
+ hints => { char => 'H', vtable => 'hints', desc => '%^H hash' },
+ hintselem => { char => 'h', vtable => 'hintselem',
+ desc => '%^H hash element' },
+ isa => { char => 'I', vtable => 'isa', desc => '@ISA array' },
+ isaelem => { char => 'i', vtable => 'isaelem',
+ desc => '@ISA array element' },
+ nkeys => { char => 'k', vtable => 'nkeys', value_magic => 1,
+ desc => 'scalar(keys()) lvalue' },
+ dbfile => { char => 'L',
+ desc => 'Debugger %_<filename' },
+ dbline => { char => 'l', vtable => 'dbline',
+ desc => 'Debugger %_<filename element' },
+ shared => { char => 'N', desc => 'Shared between threads',
+ unknown_to_sv_magic => 1 },
+ shared_scalar => { char => 'n', desc => 'Shared between threads',
+ unknown_to_sv_magic => 1 },
+ collxfrm => { char => 'o', vtable => 'collxfrm', value_magic => 1,
+ desc => 'Locale transformation' },
+ tied => { char => 'P', vtable => 'pack',
+ value_magic => 1, # treat as value, so 'local @tied' isn't tied
+ desc => 'Tied array or hash' },
+ tiedelem => { char => 'p', vtable => 'packelem',
+ desc => 'Tied array or hash element' },
+ tiedscalar => { char => 'q', vtable => 'packelem',
+ desc => 'Tied scalar or handle' },
+ qr => { char => 'r', vtable => 'regexp', value_magic => 1,
+ desc => 'precompiled qr// regex' },
+ sig => { char => 'S', desc => '%SIG hash' },
+ sigelem => { char => 's', vtable => 'sigelem',
+ desc => '%SIG hash element' },
+ taint => { char => 't', vtable => 'taint', value_magic => 1,
+ desc => 'Taintedness' },
+ uvar => { char => 'U', vtable => 'uvar',
+ desc => 'Available for use by extensions' },
+ uvar_elem => { char => 'u', desc => 'Reserved for use by extensions',
+ unknown_to_sv_magic => 1 },
+ vec => { char => 'v', vtable => 'vec', value_magic => 1,
+ desc => 'vec() lvalue' },
+ vstring => { char => 'V', value_magic => 1,
+ desc => 'SV was vstring literal' },
+ utf8 => { char => 'w', vtable => 'utf8', value_magic => 1,
+ desc => 'Cached UTF-8 information' },
+ substr => { char => 'x', vtable => 'substr', value_magic => 1,
+ desc => 'substr() lvalue' },
+ defelem => { char => 'y', vtable => 'defelem', value_magic => 1,
+ desc => "Shadow \"foreach\" iterator variable /\nsmart parameter vivification" },
+ arylen => { char => '#', vtable => 'arylen', value_magic => 1,
+ desc => 'Array length ($#ary)' },
+ proto => { char => '&', desc => 'my sub prototype CV' },
+ pos => { char => '.', vtable => 'pos', value_magic => 1,
+ desc => 'pos() lvalue' },
+ backref => { char => '<', vtable => 'backref', value_magic => 1,
+ readonly_acceptable => 1, desc => 'for weak ref data' },
+ symtab => { char => ':', value_magic => 1,
+ desc => 'extra data for symbol tables' },
+ rhash => { char => '%', value_magic => 1,
+ desc => 'extra data for restricted hashes' },
+ arylen_p => { char => '@', value_magic => 1,
+ desc => 'to move arylen out of XPVAV' },
+ ext => { char => '~', desc => 'Available for use by extensions' },
+ checkcall => { char => ']', value_magic => 1, vtable => 'checkcall',
+ desc => 'inlining/mutation of call to this CV'},
+);
+
+# These have a subtly different "namespace" from the magic types.
+my %sig =
+ (
+ 'sv' => {get => 'get', set => 'set'},
+ 'env' => {set => 'set_all_env', clear => 'clear_all_env'},
+ 'envelem' => {set => 'setenv', clear => 'clearenv'},
+ 'sigelem' => {get => 'getsig', set => 'setsig', clear => 'clearsig',
+ cond => '#ifndef PERL_MICRO'},
+ 'pack' => {len => 'sizepack', clear => 'wipepack'},
+ 'packelem' => {get => 'getpack', set => 'setpack', clear => 'clearpack'},
+ 'dbline' => {set => 'setdbline'},
+ 'isa' => {set => 'setisa', clear => 'clearisa'},
+ 'isaelem' => {set => 'setisa'},
+ 'arylen' => {get => 'getarylen', set => 'setarylen', const => 1},
+ 'arylen_p' => {clear => 'cleararylen_p', free => 'freearylen_p'},
+ 'mglob' => {set => 'setmglob'},
+ 'nkeys' => {get => 'getnkeys', set => 'setnkeys'},
+ 'taint' => {get => 'gettaint', set => 'settaint'},
+ 'substr' => {get => 'getsubstr', set => 'setsubstr'},
+ 'vec' => {get => 'getvec', set => 'setvec'},
+ 'pos' => {get => 'getpos', set => 'setpos'},
+ 'uvar' => {get => 'getuvar', set => 'setuvar'},
+ 'defelem' => {get => 'getdefelem', set => 'setdefelem'},
+ 'regexp' => {set => 'setregexp', alias => [qw(bm fm)]},
+ 'regdata' => {len => 'regdata_cnt'},
+ 'regdatum' => {get => 'regdatum_get', set => 'regdatum_set'},
+ 'backref' => {free => 'killbackrefs'},
+ 'ovrld' => {free => 'freeovrld'},
+ 'utf8' => {set => 'setutf8'},
+ 'collxfrm' => {set => 'setcollxfrm',
+ cond => '#ifdef USE_LOCALE_COLLATE'},
+ 'hintselem' => {set => 'sethint', clear => 'clearhint'},
+ 'hints' => {clear => 'clearhints'},
+ 'checkcall' => {copy => 'copycallchecker'},
+);
+
+my ($vt, $raw, $names) = map {
+ open_new($_, '>',
+ { by => 'regen/mg_vtable.pl', file => $_, style => '*' });
+} 'mg_vtable.h', 'mg_raw.h', 'mg_names.c';
+my $guts = open_new("pod/perlguts.pod", ">");
+
+print $vt <<'EOH';
+/* These constants should be used in preference to raw characters
+ * when using magic. Note that some perl guts still assume
+ * certain character properties of these constants, namely that
+ * isUPPER() and toLOWER() may do useful mappings.
+ */
+
+EOH
+
+# Of course, it would be *much* easier if we could output this table directly
+# here and now. However, for our sins, we try to support EBCDIC, which wouldn't
+# be *so* bad, except that there are (at least) 3 EBCDIC charset variants, and
+# they don't agree on the code point for '~'. Which we use. Great.
+# So we have to get the local build runtime to sort our table in character order
+# (And of course, just to be helpful, in POSIX BC '~' is \xFF, so we can't even
+# simplify the C code by assuming that the last element of the array is
+# predictable)
+
+{
+ my $longest = 0;
+ foreach (keys %mg) {
+ $longest = length $_ if length $_ > $longest;
+ }
+
+ my $longest_p1 = $longest + 1;
+
+ my %mg_order;
+ while (my ($name, $data) = each %mg) {
+ my $byte = eval qq{"$data->{char}"};
+ $data->{byte} = $byte;
+ $mg_order{(uc $byte) . $byte} = $name;
+ }
+ my @rows;
+ foreach (sort keys %mg_order) {
+ my $name = $mg_order{$_};
+ my $data = $mg{$name};
+ my $i = ord $data->{byte};
+ unless ($data->{unknown_to_sv_magic}) {
+ my $value = $data->{vtable}
+ ? "want_vtbl_$data->{vtable}" : 'magic_vtable_max';
+ $value .= ' | PERL_MAGIC_READONLY_ACCEPTABLE'
+ if $data->{readonly_acceptable};
+ $value .= ' | PERL_MAGIC_VALUE_MAGIC' if $data->{value_magic};
+ my $comment = "/* $name '$data->{char}' $data->{desc} */";
+ $comment =~ s/([\\"])/\\$1/g;
+ $comment =~ tr/\n/ /;
+ print $raw qq{ { '$data->{char}', "$value",\n "$comment" },\n};
+ }
+
+ my $comment = $data->{desc};
+ my $leader = ' ' x ($longest + 27);
+ $comment =~ s/\n/\n$leader/s;
+ printf $vt "#define PERL_MAGIC_%-${longest}s '%s' /* %s */\n",
+ $name, $data->{char}, $comment;
+
+ my $char = $data->{char};
+ $char =~ s/([\\"])/\\$1/g;
+ printf $names qq[\t{ PERL_MAGIC_%-${longest_p1}s "%s(%s)" },\n],
+ "$name,", $name, $char;
+
+ push @rows, [(sprintf "%-2s PERL_MAGIC_%s", $data->{char}, $name),
+ $data->{vtable} ? "vtbl_$data->{vtable}" : '(none)',
+ $data->{desc}];
+ }
+ select +(select($guts), do {
+ my @header = ('(old-style char and macro)', 'MGVTBL', 'Type of magic');
+ my @widths = (0, 0);
+ foreach my $row (@rows) {
+ for (0, 1) {
+ $widths[$_] = length $row->[$_]
+ if length $row->[$_] > $widths[$_];
+ }
+ }
+ my $indent = ' ';
+ my $format
+ = sprintf "$indent%%-%ds%%-%ds%%s\n", $widths[0] + 1, $widths[1] + 1;
+ my $desc_wrap =
+ 79 - 7 - (length $indent) - $widths[0] - $widths[1] - 2;
+
+ open my $oldguts, "<", "pod/perlguts.pod"
+ or die "$0 cannot open pod/perlguts.pod for reading: $!";
+ while (<$oldguts>) {
+ print;
+ last if /^=for mg_vtable.pl begin/
+ }
+
+ print "\n", $indent . "mg_type\n";
+ printf $format, @header;
+ printf $format, map {'-' x length $_} @header;
+ foreach (@rows) {
+ my ($type, $vtbl, $desc) = @$_;
+ $desc =~ tr/\n/ /;
+ my @cont;
+ if (length $desc > $desc_wrap) {
+ # If it's too long, first split on '(', if there.
+ # [Which, if there, is always short enough, currently.
+ # Make this more robust if that changes]
+ ($desc, @cont) = split /(?=\()/, $desc;
+ if (!@cont) {
+ ($desc, @cont) = $desc =~ /(.{1,$desc_wrap})(?: |\z)/g
+ }
+ }
+ printf $format, $type, $vtbl, $desc;
+ printf $format, '', '', $_ foreach @cont;
+ }
+ print "\n";
+
+ while (<$oldguts>) {
+ last if /^=for mg_vtable.pl end/;
+ }
+ do { print } while <$oldguts>;
+ })[0];
+}
+
+my @names = sort keys %sig;
+{
+ my $want = join ",\n ", (map {"want_vtbl_$_"} @names), 'magic_vtable_max';
+ my $names = join qq{",\n "}, @names;
+
+ print $vt <<"EOH";
+
+enum { /* pass one of these to get_vtbl */
+ $want
+};
+
+#ifdef DOINIT
+EXTCONST char * const PL_magic_vtable_names[magic_vtable_max] = {
+ "$names"
+};
+#else
+EXTCONST char * const PL_magic_vtable_names[magic_vtable_max];
+#endif
+
+EOH
+}
+
+print $vt <<'EOH';
+/* These all need to be 0, not NULL, as NULL can be (void*)0, which is a
+ * pointer to data, whereas we're assigning pointers to functions, which are
+ * not the same beast. ANSI doesn't allow the assignment from one to the other.
+ * (although most, but not all, compilers are prepared to do it)
+ */
+
+/* order is:
+ get
+ set
+ len
+ clear
+ free
+ copy
+ dup
+ local
+*/
+
+#ifdef DOINIT
+EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = {
+EOH
+
+my @vtable_names;
+my @aliases;
+
+while (my $name = shift @names) {
+ my $data = $sig{$name};
+ push @vtable_names, $name;
+ my @funcs = map {
+ $data->{$_} ? "Perl_magic_$data->{$_}" : 0;
+ } qw(get set len clear free copy dup local);
+
+ $funcs[0] = "(int (*)(pTHX_ SV *, MAGIC *))" . $funcs[0] if $data->{const};
+ my $funcs = join ", ", @funcs;
+
+ # Because we can't have a , after the last {...}
+ my $comma = @names ? ',' : '';
+
+ print $vt "$data->{cond}\n" if $data->{cond};
+ print $vt " { $funcs }$comma\n";
+ print $vt <<"EOH" if $data->{cond};
+#else
+ { 0, 0, 0, 0, 0, 0, 0, 0 }$comma
+#endif
+EOH
+ foreach(@{$data->{alias}}) {
+ push @aliases, "#define want_vtbl_$_ want_vtbl_$name\n";
+ push @vtable_names, $_;
+ }
+}
+
+print $vt <<'EOH';
+};
+#else
+EXT_MGVTBL PL_magic_vtables[magic_vtable_max];
+#endif
+
+EOH
+
+print $vt (sort @aliases), "\n";
+
+print $vt "#define PL_vtbl_$_ PL_magic_vtables[want_vtbl_$_]\n"
+ foreach sort @vtable_names;
+
+# 63, not 64, As we rely on the last possible value to mean "NULL vtable"
+die "Too many vtable names" if @vtable_names > 63;
+
+read_only_bottom_close_and_rename($_) foreach $vt, $raw, $names;
+ close_and_rename($guts);
Added: vendor/perl/dist/regen/mk_invlists.pl
===================================================================
--- vendor/perl/dist/regen/mk_invlists.pl (rev 0)
+++ vendor/perl/dist/regen/mk_invlists.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,275 @@
+#!perl -w
+use 5.015;
+use strict;
+use warnings;
+use Unicode::UCD qw(prop_invlist prop_invmap);
+require 'regen/regen_lib.pl';
+
+# This program outputs charclass_invlists.h, which contains various inversion
+# lists in the form of C arrays that are to be used as-is for inversion lists.
+# Thus, the lists it contains are essentially pre-compiled, and need only a
+# light-weight fast wrapper to make them usable at run-time.
+
+# As such, this code knows about the internal structure of these lists, and
+# any change made to that has to be done here as well. A random number stored
+# in the headers is used to minimize the possibility of things getting
+# out-of-sync, or the wrong data structure being passed. Currently that
+# random number is:
+my $VERSION_DATA_STRUCTURE_TYPE = 290655244;
+
+my $out_fh = open_new('charclass_invlists.h', '>',
+ {style => '*', by => $0,
+ from => "Unicode::UCD"});
+
+print $out_fh "/* See the generating file for comments */\n\n";
+
+my %include_in_ext_re = ( NonL1_Perl_Non_Final_Folds => 1 );
+
+sub output_invlist ($$) {
+ my $name = shift;
+ my $invlist = shift; # Reference to inversion list array
+
+ die "No inversion list for $name" unless defined $invlist
+ && ref $invlist eq 'ARRAY'
+ && @$invlist;
+
+ # Output the inversion list $invlist using the name $name for it.
+ # It is output in the exact internal form for inversion lists.
+
+ my $zero_or_one; # Is the last element of the header 0, or 1 ?
+
+ # If the first element is 0, it goes in the header, instead of the body
+ if ($invlist->[0] == 0) {
+ shift @$invlist;
+
+ $zero_or_one = 0;
+
+ # Add a dummy 0 at the end so that the length is constant. inversion
+ # lists are always stored with enough room so that if they change from
+ # beginning with 0, they don't have to grow.
+ push @$invlist, 0;
+ }
+ else {
+ $zero_or_one = 1;
+ }
+
+ print $out_fh "\n#ifndef PERL_IN_XSUB_RE\n" unless exists $include_in_ext_re{$name};
+ print $out_fh "\nstatic UV ${name}_invlist[] = {\n";
+
+ print $out_fh "\t", scalar @$invlist, ",\t/* Number of elements */\n";
+
+ # This should be UV_MAX, but I (khw) am not confident that the suffixes
+ # for specifying the constant are portable, e.g. 'ull' on a 32 bit
+ # machine that is configured to use 64 bits; might need a Configure probe
+ print $out_fh "\t0,\t/* Current iteration position */\n";
+ print $out_fh "\t0,\t/* Cache of previous search index result */\n";
+ print $out_fh "\t$VERSION_DATA_STRUCTURE_TYPE, /* Version and data structure type */\n";
+ print $out_fh "\t", $zero_or_one,
+ ",\t/* 0 if this is the first element of the list proper;",
+ "\n\t\t 1 if the next element is the first */\n";
+
+ # The main body are the UVs passed in to this routine. Do the final
+ # element separately
+ for my $i (0 .. @$invlist - 1 - 1) {
+ print $out_fh "\t$invlist->[$i],\n";
+ }
+
+ # The final element does not have a trailing comma, as C can't handle it.
+ print $out_fh "\t$invlist->[-1]\n";
+
+ print $out_fh "};\n";
+ print $out_fh "\n#endif\n" unless exists $include_in_ext_re{$name};
+
+}
+
+sub mk_invlist_from_cp_list {
+
+ # Returns an inversion list constructed from the sorted input array of
+ # code points
+
+ my $list_ref = shift;
+
+ # Initialize to just the first element
+ my @invlist = ( $list_ref->[0], $list_ref->[0] + 1);
+
+ # For each succeeding element, if it extends the previous range, adjust
+ # up, otherwise add it.
+ for my $i (1 .. @$list_ref - 1) {
+ if ($invlist[-1] == $list_ref->[$i]) {
+ $invlist[-1]++;
+ }
+ else {
+ push @invlist, $list_ref->[$i], $list_ref->[$i] + 1;
+ }
+ }
+ return @invlist;
+}
+
+# Read in the Case Folding rules, and construct arrays of code points for the
+# properties we need.
+my ($cp_ref, $folds_ref, $format) = prop_invmap("Case_Folding");
+die "Could not find inversion map for Case_Folding" unless defined $format;
+die "Incorrect format '$format' for Case_Folding inversion map"
+ unless $format eq 'al';
+my @has_multi_char_fold;
+my @is_non_final_fold;
+
+for my $i (0 .. @$folds_ref - 1) {
+ next unless ref $folds_ref->[$i]; # Skip single-char folds
+ push @has_multi_char_fold, $cp_ref->[$i];
+
+ # Add to the the non-finals list each code point that is in a non-final
+ # position
+ for my $j (0 .. @{$folds_ref->[$i]} - 2) {
+ push @is_non_final_fold, $folds_ref->[$i][$j]
+ unless grep { $folds_ref->[$i][$j] == $_ } @is_non_final_fold;
+ }
+}
+
+sub _Perl_Multi_Char_Folds {
+ @has_multi_char_fold = sort { $a <=> $b } @has_multi_char_fold;
+ return mk_invlist_from_cp_list(\@has_multi_char_fold);
+}
+
+sub _Perl_Non_Final_Folds {
+ @is_non_final_fold = sort { $a <=> $b } @is_non_final_fold;
+ return mk_invlist_from_cp_list(\@is_non_final_fold);
+}
+
+output_invlist("Latin1", [ 0, 256 ]);
+output_invlist("AboveLatin1", [ 256 ]);
+
+# We construct lists for all the POSIX and backslash sequence character
+# classes in two forms:
+# 1) ones which match only in the ASCII range
+# 2) ones which match either in the Latin1 range, or the entire Unicode range
+#
+# These get compiled in, and hence affect the memory footprint of every Perl
+# program, even those not using Unicode. To minimize the size, currently
+# the Latin1 version is generated for the beyond ASCII range except for those
+# lists that are quite small for the entire range, such as for \s, which is 22
+# UVs long plus 4 UVs (currently) for the header.
+#
+# To save even more memory, the ASCII versions could be derived from the
+# larger ones at runtime, saving some memory (minus the expense of the machine
+# instructions to do so), but these are all small anyway, so their total is
+# about 100 UVs.
+#
+# In the list of properties below that get generated, the L1 prefix is a fake
+# property that means just the Latin1 range of the full property (whose name
+# has an X prefix instead of L1).
+#
+# An initial & means to use the subroutine from this file instead of an
+# official inversion list.
+
+for my $prop (qw(
+ ASCII
+ L1Cased
+ VertSpace
+ PerlSpace
+ XPerlSpace
+ PosixAlnum
+ L1PosixAlnum
+ PosixAlpha
+ L1PosixAlpha
+ PosixBlank
+ XPosixBlank
+ PosixCntrl
+ XPosixCntrl
+ PosixDigit
+ PosixGraph
+ L1PosixGraph
+ PosixLower
+ L1PosixLower
+ PosixPrint
+ L1PosixPrint
+ PosixPunct
+ L1PosixPunct
+ PosixSpace
+ XPosixSpace
+ PosixUpper
+ L1PosixUpper
+ PosixWord
+ L1PosixWord
+ PosixXDigit
+ XPosixXDigit
+ &NonL1_Perl_Non_Final_Folds
+ &_Perl_Multi_Char_Folds
+ )
+) {
+
+ # For the Latin1 properties, we change to use the eXtended version of the
+ # base property, then go through the result and get rid of everything not
+ # in Latin1 (above 255). Actually, we retain the element for the range
+ # that crosses the 255/256 boundary if it is one that matches the
+ # property. For example, in the Word property, there is a range of code
+ # points that start at U+00F8 and goes through U+02C1. Instead of
+ # artifically cutting that off at 256 because 256 is the first code point
+ # above Latin1, we let the range go to its natural ending. That gives us
+ # extra information with no added space taken. But if the range that
+ # crosses the boundary is one that doesn't match the property, we don't
+ # start a new range above 255, as that could be construed as going to
+ # infinity. For example, the Upper property doesn't include the character
+ # at 255, but does include the one at 256. We don't include the 256 one.
+ my $prop_name = $prop;
+ my $is_local_sub = $prop_name =~ s/^&//;
+ my $lookup_prop = $prop_name;
+ my $l1_only = ($lookup_prop =~ s/^L1Posix/XPosix/ or $lookup_prop =~ s/^L1//);
+ my $nonl1_only = 0;
+ $nonl1_only = $lookup_prop =~ s/^NonL1// unless $l1_only;
+
+ my @invlist;
+ if ($is_local_sub) {
+ @invlist = eval $lookup_prop;
+ }
+ else {
+ @invlist = prop_invlist($lookup_prop, '_perl_core_internal_ok');
+ }
+ die "Could not find inversion list for '$lookup_prop'" unless @invlist;
+
+ if ($l1_only) {
+ for my $i (0 .. @invlist - 1 - 1) {
+ if ($invlist[$i] > 255) {
+
+ # In an inversion list, even-numbered elements give the code
+ # points that begin ranges that match the property;
+ # odd-numbered give ones that begin ranges that don't match.
+ # If $i is odd, we are at the first code point above 255 that
+ # doesn't match, which means the range it is ending does
+ # match, and crosses the 255/256 boundary. We want to include
+ # this ending point, so increment $i, so the splice below
+ # includes it. Conversely, if $i is even, it is the first
+ # code point above 255 that matches, which means there was no
+ # matching range that crossed the boundary, and we don't want
+ # to include this code point, so splice before it.
+ $i++ if $i % 2 != 0;
+
+ # Remove everything past this.
+ splice @invlist, $i;
+ last;
+ }
+ }
+ }
+ elsif ($nonl1_only) {
+ my $found_nonl1 = 0;
+ for my $i (0 .. @invlist - 1 - 1) {
+ next if $invlist[$i] < 256;
+
+ # Here, we have the first element in the array that indicates an
+ # element above Latin1. Get rid of all previous ones.
+ splice @invlist, 0, $i;
+
+ # If this one's index is not divisible by 2, it means that this
+ # element is inverting away from being in the list, which means
+ # all code points from 256 to this one are in this list.
+ unshift @invlist, 256 if $i % 2 != 0;
+ $found_nonl1 = 1;
+ last;
+ }
+ die "No non-Latin1 code points in $lookup_prop" unless $found_nonl1;
+ }
+
+ output_invlist($prop_name, \@invlist);
+}
+
+read_only_bottom_close_and_rename($out_fh)
Added: vendor/perl/dist/regen/regcharclass_multi_char_folds.pl
===================================================================
--- vendor/perl/dist/regen/regcharclass_multi_char_folds.pl (rev 0)
+++ vendor/perl/dist/regen/regcharclass_multi_char_folds.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,110 @@
+package regcharclass_multi_char_folds;
+use 5.015;
+use strict;
+use warnings;
+use Unicode::UCD "prop_invmap";
+
+# This returns an array of strings of the form
+# "\x{foo}\x{bar}\x{baz}"
+# of the sequences of code points that are multi-character folds in the
+# current Unicode version. If the parameter is 1, all such folds are
+# returned. If the parameters is 0, only the ones containing exclusively
+# Latin1 characters are returned. In the latter case all combinations of
+# Latin1 characters that can fold to the base one are returned. Thus for
+# 'ss', it would return in addition, 'Ss', 'sS', and 'SS'. This is because
+# this code is designed to help regcomp.c, and EXACTFish regnodes. For
+# non-UTF-8 patterns, the strings are not folded, so we need to check for the
+# upper and lower case versions. For UTF-8 patterns, the strings are folded,
+# so we only need to worry about the fold version. There are no non-ASCII
+# Latin1 multi-char folds currently, and none likely to be ever added. Thus
+# the output is the same as if it were just asking for ASCII characters, not
+# full Latin1. Hence, it is suitable for generating things that match
+# EXACTFA. It does check for and croak if there ever were to be an upper
+# Latin1 range multi-character fold.
+#
+# This is designed for input to regen/regcharlass.pl.
+
+sub gen_combinations ($;) {
+ # Generate all combinations for the first parameter which is an array of
+ # arrays.
+
+ my ($fold_ref, $string, $i) = @_;
+ $string = "" unless $string;
+ $i = 0 unless $i;
+
+ my @ret;
+
+ # Look at each element in this level's array.
+ foreach my $j (0 .. @{$fold_ref->[$i]} - 1) {
+
+ # Append its representation to what we have currently
+ my $new_string = sprintf "$string\\x{%X}", $fold_ref->[$i][$j];
+
+ if ($i >= @$fold_ref - 1) { # Final level: just return it
+ push @ret, "\"$new_string\"";
+ }
+ else { # Generate the combinations for the next level with this one's
+ push @ret, &gen_combinations($fold_ref, $new_string, $i + 1);
+ }
+ }
+
+ return @ret;
+}
+
+sub multi_char_folds ($) {
+ my $all_folds = shift; # The single parameter is true if wants all
+ # multi-char folds; false if just the ones that
+ # are all ascii
+
+ my ($cp_ref, $folds_ref, $format) = prop_invmap("Case_Folding");
+ die "Could not find inversion map for Case_Folding" unless defined $format;
+ die "Incorrect format '$format' for Case_Folding inversion map"
+ unless $format eq 'al';
+ my @folds;
+
+ for my $i (0 .. @$folds_ref - 1) {
+ next unless ref $folds_ref->[$i]; # Skip single-char folds
+
+ # The code in regcomp.c currently assumes that no multi-char fold
+ # folds to the upper Latin1 range. It's not a big deal to add; we
+ # just have to forbid such a fold in EXACTFL nodes, like we do already
+ # for ascii chars in EXACTFA (and EXACTFL) nodes. But I (khw) doubt
+ # that there will ever be such a fold created by Unicode, so the code
+ # isn't there to occupy space and time; instead there is this check.
+ die sprintf("regcomp.c can't cope with a latin1 multi-char fold (found in the fold of U+%X", $cp_ref->[$i]) if grep { $_ < 256 && chr($_) !~ /[[:ascii:]]/ } @{$folds_ref->[$i]};
+
+ # Create a line that looks like "\x{foo}\x{bar}\x{baz}" of the code
+ # points that make up the fold.
+ my $fold = join "", map { sprintf "\\x{%X}", $_ } @{$folds_ref->[$i]};
+ $fold = "\"$fold\"";
+
+ # Skip if something else already has this fold
+ next if grep { $_ eq $fold } @folds;
+
+ if ($all_folds) {
+ push @folds, $fold
+ } # Skip if wants only all-ascii folds, and there is a non-ascii
+ elsif (! grep { chr($_) =~ /[^[:ascii:]]/ } @{$folds_ref->[$i]}) {
+
+ # If the fold is to a cased letter, replace the entry with an
+ # array which also includes its upper case.
+ my $this_fold_ref = $folds_ref->[$i];
+ for my $j (0 .. @$this_fold_ref - 1) {
+ my $this_ord = $this_fold_ref->[$j];
+ if (chr($this_ord) =~ /\p{Cased}/) {
+ my $uc = ord(uc(chr($this_ord)));
+ undef $this_fold_ref->[$j];
+ @{$this_fold_ref->[$j]} = ( $this_ord, $uc);
+ }
+ }
+
+ # Then generate all combinations of upper/lower case of the fold.
+ push @folds, gen_combinations($this_fold_ref);
+
+ }
+ }
+
+ return @folds;
+}
+
+1
Added: vendor/perl/dist/regen/unicode_constants.pl
===================================================================
--- vendor/perl/dist/regen/unicode_constants.pl (rev 0)
+++ vendor/perl/dist/regen/unicode_constants.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,160 @@
+use v5.16.0;
+use strict;
+use warnings;
+require 'regen/regen_lib.pl';
+use charnames qw(:loose);
+
+my $out_fh = open_new('unicode_constants.h', '>',
+ {style => '*', by => $0,
+ from => "Unicode data"});
+
+print $out_fh <<END;
+
+#ifndef H_UNICODE_CONSTANTS /* Guard against nested #includes */
+#define H_UNICODE_CONSTANTS 1
+
+/* This file contains #defines for various Unicode code points. The values
+ * the macros expand to are the native Unicode code point, or all or portions
+ * of the UTF-8 encoding for the code point. In the former case, the macro
+ * name has the suffix "_NATIVE"; otherwise, the suffix "_UTF8".
+ *
+ * The macros that have the suffix "_UTF8" may have further suffixes, as
+ * follows:
+ * "_FIRST_BYTE" if the value is just the first byte of the UTF-8
+ * representation; the value will be a numeric constant.
+ * "_TAIL" if instead it represents all but the first byte. This, and
+ * with no additional suffix are both string constants */
+
+END
+
+# The data are at the end of this file. A blank line is output as-is.
+# Comments (lines whose first non-blank is a '#') are converted to C-style,
+# though empty comments are converted to blank lines. Otherwise, each line
+# represents one #define, and begins with either a Unicode character name with
+# the blanks and dashes in it squeezed out or replaced by underscores; or it
+# may be a hexadecimal Unicode code point of the form U+xxxx. In the latter
+# case, the name will be looked-up to use as the name of the macro. In either
+# case, the macro name will have suffixes as listed above, and all blanks and
+# dashes will be replaced by underscores.
+#
+# Each line may optionally have one of the following flags on it, separated by
+# white space from the initial token.
+# string indicates that the output is to be of the string form
+# described in the comments above that are placed in the file.
+# string_skip_ifundef is the same as 'string', but instead of dying if the
+# code point doesn't exist, the line is just skipped: no output is
+# generated for it
+# first indicates that the output is to be of the FIRST_BYTE form.
+# tail indicates that the output is of the _TAIL form.
+# native indicates that the output is the code point, converted to the
+# platform's native character set if applicable
+#
+# If the code point has no official name, the desired name may be appended
+# after the flag, which will be ignored if there is an official name.
+#
+# This program is used to make it convenient to create compile time constants
+# of UTF-8, and to generate proper EBCDIC as well as ASCII without manually
+# having to figure things out.
+
+while ( <DATA> ) {
+ chomp;
+
+ # Convert any '#' comments to /* ... */; empty lines and comments are
+ # output as blank lines
+ if ($_ =~ m/ ^ \s* (?: \# ( .* ) )? $ /x) {
+ my $comment_body = $1 // "";
+ if ($comment_body ne "") {
+ print $out_fh "/* $comment_body */\n";
+ }
+ else {
+ print $out_fh "\n";
+ }
+ next;
+ }
+
+ unless ($_ =~ m/ ^ ( [^\ ]* ) # Name or code point token
+ (?: [\ ]+ ( [^ ]* ) )? # optional flag
+ (?: [\ ]+ ( .* ) )? # name if unnamed; flag is required
+ /x)
+ {
+ die "Unexpected syntax at line $.: $_\n";
+ }
+
+ my $name_or_cp = $1;
+ my $flag = $2;
+ my $desired_name = $3;
+
+ my $name;
+ my $cp;
+ my $U_cp; # code point in Unicode (not-native) terms
+ my $undef_ok = $desired_name || $flag =~ /skip_if_undef/;
+
+ if ($name_or_cp =~ /^U\+(.*)/) {
+ $U_cp = hex $1;
+ $name = charnames::viacode($name_or_cp);
+ if (! defined $name) {
+ die "Unknown code point '$name_or_cp' at line $.: $_\n" unless $undef_ok;
+ $name = "";
+ }
+ $cp = utf8::unicode_to_native($U_cp);
+ }
+ else {
+ $name = $name_or_cp;
+ $cp = charnames::vianame($name =~ s/_/ /gr);
+ $U_cp = utf8::native_to_unicode($cp);
+ die "Unknown name '$name' at line $.: $_\n" unless defined $name;
+ }
+
+ $name = $desired_name if $name eq "" && $desired_name;
+ $name =~ s/[- ]/_/g; # The macro name can have no blanks nor dashes
+
+ my $str = join "", map { sprintf "\\x%02X", $_ }
+ unpack("U0C*", pack("U", $cp));
+
+ my $suffix = '_UTF8';
+ if (! defined $flag || $flag =~ /^ string (_skip_if_undef)? $/x) {
+ $str = "\"$str\""; # Will be a string constant
+ } elsif ($flag eq 'tail') {
+ $str =~ s/\\x..//; # Remove the first byte
+ $suffix .= '_TAIL';
+ $str = "\"$str\""; # Will be a string constant
+ }
+ elsif ($flag eq 'first') {
+ $str =~ s/ \\x ( .. ) .* /$1/x; # Get the two nibbles of the 1st byte
+ $suffix .= '_FIRST_BYTE';
+ $str = "0x$str"; # Is a numeric constant
+ }
+ elsif ($flag eq 'native') {
+ die "Are you sure you want to run this on an above-Latin1 code point?" if $cp > 0xff;
+ $suffix = '_NATIVE';
+ $str = sprintf "0x%02X", $cp; # Is a numeric constant
+ }
+ else {
+ die "Unknown flag at line $.: $_\n";
+ }
+ printf $out_fh "#define %s%s %s /* U+%04X */\n", $name, $suffix, $str, $U_cp;
+}
+
+print $out_fh "\n#endif /* H_UNICODE_CONSTANTS */\n";
+
+read_only_bottom_close_and_rename($out_fh);
+
+__DATA__
+
+U+0300 string
+U+0301 string
+U+0308 string
+
+U+03B9 string
+
+U+03C5 string
+
+U+2010 string
+U+D800 first FIRST_SURROGATE
+
+DEL native
+U+00DF native
+U+00E5 native
+U+00C5 native
+U+00FF native
+U+00B5 native
Added: vendor/perl/dist/t/bigmem/read.t
===================================================================
--- vendor/perl/dist/t/bigmem/read.t (rev 0)
+++ vendor/perl/dist/t/bigmem/read.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,24 @@
+#!perl
+BEGIN {
+ chdir 't';
+ unshift @INC, "../lib";
+}
+
+use strict;
+require './test.pl';
+use Config qw(%Config);
+
+$ENV{PERL_TEST_MEMORY} >= 3
+ or skip_all("Need ~3Gb for this test");
+$Config{ptrsize} >= 8
+ or skip_all("Need 64-bit pointers for this test");
+
+plan(1);
+
+# RT #100514
+my $x = "";
+read(DATA, $x, 4, 0x80000000);
+is(length $x, 0x80000004, "check we read to the correct offset");
+__DATA__
+Food
+
Added: vendor/perl/dist/t/bigmem/vec.t
===================================================================
--- vendor/perl/dist/t/bigmem/vec.t (rev 0)
+++ vendor/perl/dist/t/bigmem/vec.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,34 @@
+#!perl
+BEGIN {
+ chdir 't';
+ unshift @INC, "../lib";
+}
+
+use strict;
+require './test.pl';
+use Config qw(%Config);
+
+$ENV{PERL_TEST_MEMORY} >= 1
+ or skip_all("Need ~1Gb for this test");
+$Config{ptrsize} >= 8
+ or skip_all("Need 64-bit pointers for this test");
+
+plan(7);
+
+# RT #111730: Negative offset to vec in lvalue context
+
+my $v = "";
+ok(scalar eval { vec($v, 0x80000000, 1) = 1 }, "set a bit at a large offset");
+ok(vec($v, 0x80000000, 1), "check a bit at a large offset");
+
+ok(scalar eval { vec($v, 0x100000000, 1) = 1 },
+ "set a bit at a larger offset");
+ok(vec($v, 0x100000000, 1), "check a bit at a larger offset");
+
+# real out of range values
+ok(!eval { vec($v, -0x80000000, 1) = 1 },
+ "shouldn't be able to set at a large negative offset");
+ok(!eval { vec($v, -0x100000000, 1) = 1 },
+ "shouldn't be able to set at a larger negative offset");
+
+ok(!vec($v, 0, 1), "make sure we didn't wrap");
Added: vendor/perl/dist/t/io/shm.t
===================================================================
--- vendor/perl/dist/t/io/shm.t (rev 0)
+++ vendor/perl/dist/t/io/shm.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,92 @@
+################################################################################
+#
+# $Revision: 6 $
+# $Author: mhx $
+# $Date: 2010/03/07 16:01:42 +0100 $
+#
+################################################################################
+#
+# Version 2.x, Copyright (C) 2007-2010, Marcus Holland-Moritz <mhx at cpan.org>.
+# Version 1.x, Copyright (C) 1999, Graham Barr <gbarr at pobox.com>.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+#
+################################################################################
+
+BEGIN {
+ if ($ENV{'PERL_CORE'}) {
+ chdir 't' if -d 't';
+ @INC = '../lib' if -d '../lib' && -d '../ext';
+ }
+
+ require "./test.pl";
+ require Config; import Config;
+
+ if ($ENV{'PERL_CORE'} && $Config{'extensions'} !~ m[\bIPC/SysV\b]) {
+ skip_all('-- IPC::SysV was not built');
+ }
+ skip_all_if_miniperl();
+ if ($Config{'d_shm'} ne 'define') {
+ skip_all('-- $Config{d_shm} undefined');
+ }
+}
+
+
+use sigtrap qw/die normal-signals error-signals/;
+use IPC::SysV qw/ IPC_PRIVATE S_IRWXU IPC_RMID /;
+
+my $key;
+END { shmctl $key, IPC_RMID, 0 if defined $key }
+
+{
+ local $SIG{SYS} = sub { plan(skip_all => "SIGSYS caught") } if exists $SIG{SYS};
+ $key = shmget IPC_PRIVATE, 8, S_IRWXU;
+}
+
+if (not defined $key) {
+ my $info = "IPC::SharedMem->new failed: $!";
+ if ($! == &IPC::SysV::ENOSPC || $! == &IPC::SysV::ENOSYS ||
+ $! == &IPC::SysV::ENOMEM || $! == &IPC::SysV::EACCES) {
+ plan(skip_all => $info);
+ }
+ else {
+ die $info;
+ }
+}
+else {
+ plan(tests => 15);
+ pass('acquired shared mem');
+}
+
+ok(shmwrite($key, pack("N", 4711), 0, 4), 'write(offs=0)');
+ok(shmwrite($key, pack("N", 210577), 4, 4), 'write(offs=4)');
+
+my $var;
+ok(shmread($key, $var, 0, 4), 'read(offs=0) returned ok');
+is($var, pack("N", 4711), 'read(offs=0) correct');
+ok(shmread($key, $var, 4, 4), 'read(offs=4) returned ok');
+is($var, pack("N", 210577), 'read(offs=4) correct');
+
+ok(shmwrite($key, "Shared", 1, 6), 'write(offs=1)');
+
+ok(shmread($key, $var, 1, 6), 'read(offs=1) returned ok');
+is($var, 'Shared', 'read(offs=1) correct');
+ok(shmwrite($key,"Memory", 0, 6), 'write(offs=0)');
+
+my $number = 1;
+my $int = 2;
+shmwrite $key, $int, 0, 1;
+shmread $key, $number, 0, 1;
+is("$number", $int, qq{"\$id" eq "$int"});
+cmp_ok($number + 0, '==', $int, "\$id + 0 == $int");
+
+my ($fetch, $store) = (0, 0);
+{ package Counted;
+ sub TIESCALAR { bless [undef] }
+ sub FETCH { ++$fetch; $_[0][0] }
+ sub STORE { ++$store; $_[0][0] = $_[1] } }
+tie $ct, 'Counted';
+shmread $key, $ct, 0, 1;
+is($fetch, 1, "shmread FETCH once");
+is($store, 1, "shmread STORE once");
Added: vendor/perl/dist/t/lib/Count.pm
===================================================================
--- vendor/perl/dist/t/lib/Count.pm (rev 0)
+++ vendor/perl/dist/t/lib/Count.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,8 @@
+# zero! ha ha ha
+package Count;
+"ha!";
+__DATA__
+one! ha ha ha
+two! ha ha ha
+three! ha ha ha
+four! ha ha ha
Added: vendor/perl/dist/t/lib/Devel/nodb.pm
===================================================================
--- vendor/perl/dist/t/lib/Devel/nodb.pm (rev 0)
+++ vendor/perl/dist/t/lib/Devel/nodb.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,3 @@
+package Devel::nodb;
+*DB::DB = sub { } if 0;
+1;
Added: vendor/perl/dist/t/lib/croak/mg
===================================================================
--- vendor/perl/dist/t/lib/croak/mg (rev 0)
+++ vendor/perl/dist/t/lib/croak/mg 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,7 @@
+__END__
+# mg.c
+# NAME Perl_magic_setsig
+$SIG{_HUNGRY} = \&mmm_pie;
+warn "Mmm, pie";
+EXPECT
+No such hook: _HUNGRY at - line 2.
Added: vendor/perl/dist/t/lib/croak/op
===================================================================
--- vendor/perl/dist/t/lib/croak/op (rev 0)
+++ vendor/perl/dist/t/lib/croak/op 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,45 @@
+__END__
+# NAME my $<special>
+my $!;
+EXPECT
+Can't use global $! in "my" at - line 1, near "my $!"
+Execution of - aborted due to compilation errors.
+########
+# NAME OP_HELEM fields
+package Foo;
+use fields qw(a b);
+sub new {
+ my $class = shift;
+ return fields::new($class);
+}
+my Foo $f = Foo->new;
+$f->{c} = 1;
+EXPECT
+No such class field "c" in variable $f of type Foo at - line 8.
+########
+# NAME OP_HSLICE fields
+package Foo;
+use fields qw(a b);
+sub new {
+ my $class = shift;
+ return fields::new($class);
+}
+my Foo $f = Foo->new;
+@$f{"a", "c"} = ( 1, 2 );
+EXPECT
+No such class field "c" in variable $f of type Foo at - line 8.
+########
+# NAME delete BAD
+delete $x;
+EXPECT
+delete argument is not a HASH or ARRAY element or slice at - line 1.
+########
+# NAME exists BAD
+exists $x;
+EXPECT
+exists argument is not a HASH or ARRAY element or a subroutine at - line 1.
+########
+# NAME exists non-sub
+exists &foo()
+EXPECT
+exists argument is not a subroutine name at - line 1.
Added: vendor/perl/dist/t/lib/croak/pp_ctl
===================================================================
--- vendor/perl/dist/t/lib/croak/pp_ctl (rev 0)
+++ vendor/perl/dist/t/lib/croak/pp_ctl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,18 @@
+__END__
+# NAME dump with computed label
+my $label = "foo";
+dump $label;
+EXPECT
+Can't find label foo at - line 2.
+########
+# NAME when outside given
+use 5.01; no warnings 'experimental::smartmatch';
+when(undef){}
+EXPECT
+Can't "when" outside a topicalizer at - line 2.
+########
+# NAME default outside given
+use 5.01;
+default{}
+EXPECT
+Can't "default" outside a topicalizer at - line 2.
Added: vendor/perl/dist/t/lib/croak/pp_hot
===================================================================
--- vendor/perl/dist/t/lib/croak/pp_hot (rev 0)
+++ vendor/perl/dist/t/lib/croak/pp_hot 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,60 @@
+__END__
+# NAME local %$ref on last line of lvalue sub in lv cx
+ sub foo :lvalue { local %{\%foo} }
+ (foo) = 3;
+EXPECT
+Can't localize through a reference at - line 1.
+########
+# NAME local @$ref on last line of lvalue sub in lv cx
+ sub foo :lvalue { local @{\@foo} }
+ (foo) = 3;
+EXPECT
+Can't localize through a reference at - line 1.
+########
+# NAME local %$ref on last line of lvalue sub in non-lv cx
+ sub foo :lvalue { local %{\%foo} }
+ foo;
+EXPECT
+Can't localize through a reference at - line 1.
+########
+# NAME local @$ref on last line of lvalue sub in non-lv cx
+ sub foo :lvalue { local @{\@foo} }
+ foo;
+EXPECT
+Can't localize through a reference at - line 1.
+########
+# NAME \local %$ref
+ \local %{\%hash}
+EXPECT
+Can't localize through a reference at - line 1.
+########
+# NAME \local @$ref
+ \local @{\@hash}
+EXPECT
+Can't localize through a reference at - line 1.
+########
+# NAME calling undef sub belonging to undef GV
+ my $foosub = \&foo;
+ undef *foo;
+ &$foosub;
+EXPECT
+Undefined subroutine &main::foo called at - line 3.
+########
+# NAME calling undef sub resident in its GV
+ my $foosub = \&foo;
+ &$foosub;
+EXPECT
+Undefined subroutine &main::foo called at - line 2.
+########
+# NAME calling undef scalar
+ &{+undef};
+EXPECT
+Can't use an undefined value as a subroutine reference at - line 1.
+########
+# NAME calling undef magical scalar
+ sub TIESCALAR {bless[]}
+ sub FETCH {}
+ tie $tied, "";
+ &$tied;
+EXPECT
+Can't use an undefined value as a subroutine reference at - line 4.
Added: vendor/perl/dist/t/lib/croak/toke
===================================================================
--- vendor/perl/dist/t/lib/croak/toke (rev 0)
+++ vendor/perl/dist/t/lib/croak/toke 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,130 @@
+__END__
+# NAME Unterminated here-doc in string eval
+eval "<<foo"; die $@
+EXPECT
+Can't find string terminator "foo" anywhere before EOF at (eval 1) line 1.
+########
+# NAME Unterminated here-doc in s/// string eval
+eval "s//<<foo/e"; die $@
+EXPECT
+Can't find string terminator "foo" anywhere before EOF at (eval 1) line 1.
+########
+# NAME Missing name in "my sub"
+use feature 'lexical_subs'; my sub;
+EXPECT
+The lexical_subs feature is experimental at - line 1.
+Missing name in "my sub" at - line 1.
+########
+# NAME Missing name in "our sub"
+use feature 'lexical_subs'; our sub;
+EXPECT
+The lexical_subs feature is experimental at - line 1.
+Missing name in "our sub" at - line 1.
+########
+# NAME Missing name in "state sub"
+use 5.01; use feature 'lexical_subs';
+state sub;
+EXPECT
+The lexical_subs feature is experimental at - line 2.
+Missing name in "state sub" at - line 2.
+########
+# NAME Integer constant overloading returning undef
+use overload;
+BEGIN { overload::constant integer => sub {}; undef *^H }
+1
+EXPECT
+Constant(1) unknown at - line 3, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME Float constant overloading returning undef
+use overload;
+BEGIN { overload::constant float => sub {}; undef *^H }
+1.1
+EXPECT
+Constant(1.1) unknown at - line 3, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME Binary constant overloading returning undef
+use overload;
+BEGIN { overload::constant binary => sub {}; undef *^H }
+0x1
+EXPECT
+Constant(0x1) unknown at - line 3, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME String constant overloading returning undef
+use overload;
+BEGIN { overload::constant q => sub {}; undef *^H }
+'1', "1$_", tr"a"", s""a"
+EXPECT
+Constant(q) unknown at - line 3, near "'1'"
+Constant(qq) unknown at - line 3, within string
+Constant(tr) unknown at - line 3, within string
+Constant(s) unknown at - line 3, within string
+Execution of - aborted due to compilation errors.
+########
+# NAME Regexp constant overloading when *^H is undefined
+use overload;
+BEGIN { overload::constant qr => sub {}; undef *^H }
+/a/, m'a'
+EXPECT
+Constant(qq) unknown at - line 3, within pattern
+Constant(q) unknown at - line 3, within pattern
+Execution of - aborted due to compilation errors.
+########
+# NAME \N{...} when charnames fails to load but without an error
+# SKIP ? exists $ENV{PERL_UNICODE} ? "Unreliable under some PERL_UNICODE settings" : 0
+BEGIN { ++$_ for @INC{"charnames.pm","_charnames.pm"} }
+"\N{a}"
+EXPECT
+Constant(\N{a}) unknown at - line 2, within string
+Execution of - aborted due to compilation errors.
+########
+# NAME Integer constant overloading returning undef
+use overload;
+BEGIN { overload::constant integer => sub {} }
+1
+EXPECT
+Constant(1): Call to &{$^H{integer}} did not return a defined value at - line 3, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME Float constant overloading returning undef
+use overload;
+BEGIN { overload::constant float => sub {} }
+1.1
+EXPECT
+Constant(1.1): Call to &{$^H{float}} did not return a defined value at - line 3, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME Binary constant overloading returning undef
+use overload;
+BEGIN { overload::constant binary => sub {} }
+0x1
+EXPECT
+Constant(0x1): Call to &{$^H{binary}} did not return a defined value at - line 3, at end of line
+Execution of - aborted due to compilation errors.
+########
+# NAME String constant overloading returning undef
+use overload;
+BEGIN { overload::constant q => sub {} }
+'1', "1$_", tr"a"", s""a"
+EXPECT
+Constant(q): Call to &{$^H{q}} did not return a defined value at - line 3, near "'1'"
+Constant(qq): Call to &{$^H{q}} did not return a defined value at - line 3, within string
+Constant(tr): Call to &{$^H{q}} did not return a defined value at - line 3, within string
+Constant(s): Call to &{$^H{q}} did not return a defined value at - line 3, within string
+Execution of - aborted due to compilation errors.
+########
+# NAME Regexp constant overloading returning undef
+use overload;
+BEGIN { overload::constant qr => sub {} }
+/a/, m'a'
+EXPECT
+Constant(qq): Call to &{$^H{qr}} did not return a defined value at - line 3, within pattern
+Constant(q): Call to &{$^H{qr}} did not return a defined value at - line 3, within pattern
+Execution of - aborted due to compilation errors.
+########
+# NAME Unterminated delimiter for here document
+<<"foo
+EXPECT
+Unterminated delimiter for here document at - line 1.
Added: vendor/perl/dist/t/lib/overload_nomethod.t
===================================================================
--- vendor/perl/dist/t/lib/overload_nomethod.t (rev 0)
+++ vendor/perl/dist/t/lib/overload_nomethod.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,22 @@
+use warnings;
+use strict;
+use Test::Simple tests => 3;
+
+package Foo;
+use overload
+ nomethod => sub { die "unimplemented\n" };
+sub new { bless {}, shift };
+
+package main;
+
+my $foo = Foo->new;
+
+eval {my $val = $foo + 1};
+ok( $@ =~ /unimplemented/ );
+
+eval {$foo += 1};
+ok( $@ =~ /unimplemented/ );
+
+eval {my $val = 0; $val += $foo};
+ok( $@ =~ /unimplemented/ );
+
Added: vendor/perl/dist/t/lib/test_require.pm
===================================================================
--- vendor/perl/dist/t/lib/test_require.pm (rev 0)
+++ vendor/perl/dist/t/lib/test_require.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,6 @@
+#!perl -w
+# Don't use strict because this is for testing require
+
+package test_require;
+
+++$test_require::loaded;
Added: vendor/perl/dist/t/mro/basic_01_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_01_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_01_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 4);
+
+=pod
+
+This tests the classic diamond inheritance pattern.
+
+ <A>
+ / \
+<B> <C>
+ \ /
+ <D>
+
+=cut
+
+{
+ package Diᚪၚd_A;
+ sub hèllò { 'Diᚪၚd_A::hèllò' }
+}
+{
+ package Diᚪၚd_B;
+ use base 'Diᚪၚd_A';
+}
+{
+ package Diᚪၚd_C;
+ use base 'Diᚪၚd_A';
+
+ sub hèllò { 'Diᚪၚd_C::hèllò' }
+}
+{
+ package Diᚪၚd_D;
+ use base ('Diᚪၚd_B', 'Diᚪၚd_C');
+ use mro 'c3';
+}
+
+ok(eq_array(
+ mro::get_linear_isa('Diᚪၚd_D'),
+ [ qw(Diᚪၚd_D Diᚪၚd_B Diᚪၚd_C Diᚪၚd_A) ]
+), '... got the right MRO for Diᚪၚd_D');
+
+is(Diᚪၚd_D->hèllò, 'Diᚪၚd_C::hèllò', '... method resolved itself as expected');
+is(Diᚪၚd_D->can('hèllò')->(), 'Diᚪၚd_C::hèllò', '... can(method) resolved itself as expected');
+is(UNIVERSAL::can("Diᚪၚd_D", 'hèllò')->(), 'Diᚪၚd_C::hèllò', '... can(method) resolved itself as expected');
Added: vendor/perl/dist/t/mro/basic_01_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_01_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_01_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 4);
+
+=pod
+
+This tests the classic diamond inheritance pattern.
+
+ <A>
+ / \
+<B> <C>
+ \ /
+ <D>
+
+=cut
+
+{
+ package Diᚪၚd_A;
+ sub hèllò { 'Diᚪၚd_A::hèllò' }
+}
+{
+ package Diᚪၚd_B;
+ use base 'Diᚪၚd_A';
+}
+{
+ package Diᚪၚd_C;
+ use base 'Diᚪၚd_A';
+
+ sub hèllò { 'Diᚪၚd_C::hèllò' }
+}
+{
+ package Diᚪၚd_D;
+ use base ('Diᚪၚd_B', 'Diᚪၚd_C');
+ use mro 'dfs';
+}
+
+ok(eq_array(
+ mro::get_linear_isa('Diᚪၚd_D'),
+ [ qw(Diᚪၚd_D Diᚪၚd_B Diᚪၚd_A Diᚪၚd_C) ]
+), '... got the right MRO for Diᚪၚd_D');
+
+is(Diᚪၚd_D->hèllò, 'Diᚪၚd_A::hèllò', '... method resolved itself as expected');
+is(Diᚪၚd_D->can('hèllò')->(), 'Diᚪၚd_A::hèllò', '... can(method) resolved itself as expected');
+is(UNIVERSAL::can("Diᚪၚd_D", 'hèllò')->(), 'Diᚪၚd_A::hèllò', '... can(method) resolved itself as expected');
Added: vendor/perl/dist/t/mro/basic_02_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_02_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_02_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,117 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 10);
+
+=pod
+
+This example is take from: http://www.python.org/2.3/mro.html
+
+"My first example"
+class O: pass
+class F(O): pass
+class E(O): pass
+class D(O): pass
+class C(D,F): pass
+class B(D,E): pass
+class A(B,C): pass
+
+
+ 6
+ ---
+Level 3 | O | (more general)
+ / --- \
+ / | \ |
+ / | \ |
+ / | \ |
+ --- --- --- |
+Level 2 3 | D | 4| E | | F | 5 |
+ --- --- --- |
+ \ \ _ / | |
+ \ / \ _ | |
+ \ / \ | |
+ --- --- |
+Level 1 1 | B | | C | 2 |
+ --- --- |
+ \ / |
+ \ / \ /
+ ---
+Level 0 0 | A | (more specialized)
+ ---
+
+=cut
+
+{
+ package 텟ţ::ᴼ;
+ use mro 'c3';
+
+ package 텟ţ::Ḟ;
+ use mro 'c3';
+ use base '텟ţ::ᴼ';
+
+ package 텟ţ::ऍ;
+ use base '텟ţ::ᴼ';
+ use mro 'c3';
+
+ sub ƈ_or_ऍ { '텟ţ::ऍ' }
+
+ package 텟ţ::Ḋ;
+ use mro 'c3';
+ use base '텟ţ::ᴼ';
+
+ sub ƈ_or_Ḋ { '텟ţ::Ḋ' }
+
+ package 텟ţ::ƈ;
+ use base ('텟ţ::Ḋ', '텟ţ::Ḟ');
+ use mro 'c3';
+
+ sub ƈ_or_Ḋ { '텟ţ::ƈ' }
+ sub ƈ_or_ऍ { '텟ţ::ƈ' }
+
+ package 텟ţ::ᛒ;
+ use mro 'c3';
+ use base ('텟ţ::Ḋ', '텟ţ::ऍ');
+
+ package 텟ţ::ଅ;
+ use base ('텟ţ::ᛒ', '텟ţ::ƈ');
+ use mro 'c3';
+}
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::Ḟ'),
+ [ qw(텟ţ::Ḟ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::Ḟ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ऍ'),
+ [ qw(텟ţ::ऍ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::ऍ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::Ḋ'),
+ [ qw(텟ţ::Ḋ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::Ḋ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ƈ'),
+ [ qw(텟ţ::ƈ 텟ţ::Ḋ 텟ţ::Ḟ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::ƈ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ᛒ'),
+ [ qw(텟ţ::ᛒ 텟ţ::Ḋ 텟ţ::ऍ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::ᛒ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ଅ'),
+ [ qw(텟ţ::ଅ 텟ţ::ᛒ 텟ţ::ƈ 텟ţ::Ḋ 텟ţ::ऍ 텟ţ::Ḟ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::ଅ');
+
+is(텟ţ::ଅ->ƈ_or_Ḋ, '텟ţ::ƈ', '... got the expected method output');
+is(텟ţ::ଅ->can('ƈ_or_Ḋ')->(), '텟ţ::ƈ', '... can got the expected method output');
+is(텟ţ::ଅ->ƈ_or_ऍ, '텟ţ::ƈ', '... got the expected method output');
+is(텟ţ::ଅ->can('ƈ_or_ऍ')->(), '텟ţ::ƈ', '... can got the expected method output');
Added: vendor/perl/dist/t/mro/basic_02_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_02_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_02_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,117 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 10);
+
+=pod
+
+This example is take from: http://www.python.org/2.3/mro.html
+
+"My first example"
+class O: pass
+class F(O): pass
+class E(O): pass
+class D(O): pass
+class C(D,F): pass
+class B(D,E): pass
+class A(B,C): pass
+
+
+ 6
+ ---
+Level 3 | O | (more general)
+ / --- \
+ / | \ |
+ / | \ |
+ / | \ |
+ --- --- --- |
+Level 2 3 | D | 4| E | | F | 5 |
+ --- --- --- |
+ \ \ _ / | |
+ \ / \ _ | |
+ \ / \ | |
+ --- --- |
+Level 1 1 | B | | C | 2 |
+ --- --- |
+ \ / |
+ \ / \ /
+ ---
+Level 0 0 | A | (more specialized)
+ ---
+
+=cut
+
+{
+ package 텟ţ::ᴼ;
+ use mro 'dfs';
+
+ package 텟ţ::Ḟ;
+ use mro 'dfs';
+ use base '텟ţ::ᴼ';
+
+ package 텟ţ::ऍ;
+ use base '텟ţ::ᴼ';
+ use mro 'dfs';
+
+ sub ƈ_or_ऍ { '텟ţ::ऍ' }
+
+ package 텟ţ::Ḋ;
+ use mro 'dfs';
+ use base '텟ţ::ᴼ';
+
+ sub ƈ_or_Ḋ { '텟ţ::Ḋ' }
+
+ package 텟ţ::ƈ;
+ use base ('텟ţ::Ḋ', '텟ţ::Ḟ');
+ use mro 'dfs';
+
+ sub ƈ_or_Ḋ { '텟ţ::ƈ' }
+ sub ƈ_or_ऍ { '텟ţ::ƈ' }
+
+ package 텟ţ::ᛒ;
+ use mro 'dfs';
+ use base ('텟ţ::Ḋ', '텟ţ::ऍ');
+
+ package 텟ţ::ଅ;
+ use base ('텟ţ::ᛒ', '텟ţ::ƈ');
+ use mro 'dfs';
+}
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::Ḟ'),
+ [ qw(텟ţ::Ḟ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::Ḟ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ऍ'),
+ [ qw(텟ţ::ऍ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::ऍ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::Ḋ'),
+ [ qw(텟ţ::Ḋ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::Ḋ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ƈ'),
+ [ qw(텟ţ::ƈ 텟ţ::Ḋ 텟ţ::ᴼ 텟ţ::Ḟ) ]
+), '... got the right MRO for 텟ţ::ƈ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ᛒ'),
+ [ qw(텟ţ::ᛒ 텟ţ::Ḋ 텟ţ::ᴼ 텟ţ::ऍ) ]
+), '... got the right MRO for 텟ţ::ᛒ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ଅ'),
+ [ qw(텟ţ::ଅ 텟ţ::ᛒ 텟ţ::Ḋ 텟ţ::ᴼ 텟ţ::ऍ 텟ţ::ƈ 텟ţ::Ḟ) ]
+), '... got the right MRO for 텟ţ::ଅ');
+
+is(텟ţ::ଅ->ƈ_or_Ḋ, '텟ţ::Ḋ', '... got the expected method output');
+is(텟ţ::ଅ->can('ƈ_or_Ḋ')->(), '텟ţ::Ḋ', '... can got the expected method output');
+is(텟ţ::ଅ->ƈ_or_ऍ, '텟ţ::ऍ', '... got the expected method output');
+is(텟ţ::ଅ->can('ƈ_or_ऍ')->(), '텟ţ::ऍ', '... can got the expected method output');
Added: vendor/perl/dist/t/mro/basic_03_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_03_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_03_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,103 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 4);
+
+=pod
+
+This example is take from: http://www.python.org/2.3/mro.html
+
+"My second example"
+class O: pass
+class F(O): pass
+class E(O): pass
+class D(O): pass
+class C(D,F): pass
+class B(E,D): pass
+class A(B,C): pass
+
+ 6
+ ---
+Level 3 | O |
+ / --- \
+ / | \
+ / | \
+ / | \
+ --- --- ---
+Level 2 2 | E | 4 | D | | F | 5
+ --- --- ---
+ \ / \ /
+ \ / \ /
+ \ / \ /
+ --- ---
+Level 1 1 | B | | C | 3
+ --- ---
+ \ /
+ \ /
+ ---
+Level 0 0 | A |
+ ---
+
+>>> A.mro()
+(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>,
+<class '__main__.C'>, <class '__main__.D'>, <class '__main__.F'>,
+<type 'object'>)
+
+=cut
+
+{
+ package 텟ţ::ᴼ;
+ use mro 'c3';
+
+ sub ᴼ_or_Ḋ { '텟ţ::ᴼ' }
+ sub ᴼ_or_Ḟ { '텟ţ::ᴼ' }
+
+ package 텟ţ::Ḟ;
+ use base '텟ţ::ᴼ';
+ use mro 'c3';
+
+ sub ᴼ_or_Ḟ { '텟ţ::Ḟ' }
+
+ package 텟ţ::ऍ;
+ use base '텟ţ::ᴼ';
+ use mro 'c3';
+
+ package 텟ţ::Ḋ;
+ use base '텟ţ::ᴼ';
+ use mro 'c3';
+
+ sub ᴼ_or_Ḋ { '텟ţ::Ḋ' }
+ sub ƈ_or_Ḋ { '텟ţ::Ḋ' }
+
+ package 텟ţ::ƈ;
+ use base ('텟ţ::Ḋ', '텟ţ::Ḟ');
+ use mro 'c3';
+
+ sub ƈ_or_Ḋ { '텟ţ::ƈ' }
+
+ package 텟ţ::ᛒ;
+ use base ('텟ţ::ऍ', '텟ţ::Ḋ');
+ use mro 'c3';
+
+ package 텟ţ::ଅ;
+ use base ('텟ţ::ᛒ', '텟ţ::ƈ');
+ use mro 'c3';
+}
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ଅ'),
+ [ qw(텟ţ::ଅ 텟ţ::ᛒ 텟ţ::ऍ 텟ţ::ƈ 텟ţ::Ḋ 텟ţ::Ḟ 텟ţ::ᴼ) ]
+), '... got the right MRO for 텟ţ::ଅ');
+
+is(텟ţ::ଅ->ᴼ_or_Ḋ, '텟ţ::Ḋ', '... got the right method dispatch');
+is(텟ţ::ଅ->ᴼ_or_Ḟ, '텟ţ::Ḟ', '... got the right method dispatch');
+
+# NOTE:
+# this test is particularly interesting because the p5 dispatch
+# would actually call 텟ţ::Ḋ before 텟ţ::ƈ and 텟ţ::Ḋ is a
+# subclass of 텟ţ::ƈ
+is(텟ţ::ଅ->ƈ_or_Ḋ, '텟ţ::ƈ', '... got the right method dispatch');
Added: vendor/perl/dist/t/mro/basic_03_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_03_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_03_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,103 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 4);
+
+=pod
+
+This example is take from: http://www.python.org/2.3/mro.html
+
+"My second example"
+class O: pass
+class F(O): pass
+class E(O): pass
+class D(O): pass
+class C(D,F): pass
+class B(E,D): pass
+class A(B,C): pass
+
+ 6
+ ---
+Level 3 | O |
+ / --- \
+ / | \
+ / | \
+ / | \
+ --- --- ---
+Level 2 2 | E | 4 | D | | F | 5
+ --- --- ---
+ \ / \ /
+ \ / \ /
+ \ / \ /
+ --- ---
+Level 1 1 | B | | C | 3
+ --- ---
+ \ /
+ \ /
+ ---
+Level 0 0 | A |
+ ---
+
+>>> A.mro()
+(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>,
+<class '__main__.C'>, <class '__main__.D'>, <class '__main__.F'>,
+<type 'object'>)
+
+=cut
+
+{
+ package 텟ţ::ᴼ;
+ use mro 'dfs';
+
+ sub ᴼ_or_Ḋ { '텟ţ::ᴼ' }
+ sub ᴼ_or_Ḟ { '텟ţ::ᴼ' }
+
+ package 텟ţ::Ḟ;
+ use base '텟ţ::ᴼ';
+ use mro 'dfs';
+
+ sub ᴼ_or_Ḟ { '텟ţ::Ḟ' }
+
+ package 텟ţ::ऍ;
+ use base '텟ţ::ᴼ';
+ use mro 'dfs';
+
+ package 텟ţ::Ḋ;
+ use base '텟ţ::ᴼ';
+ use mro 'dfs';
+
+ sub ᴼ_or_Ḋ { '텟ţ::Ḋ' }
+ sub ƈ_or_Ḋ { '텟ţ::Ḋ' }
+
+ package 텟ţ::ƈ;
+ use base ('텟ţ::Ḋ', '텟ţ::Ḟ');
+ use mro 'dfs';
+
+ sub ƈ_or_Ḋ { '텟ţ::ƈ' }
+
+ package 텟ţ::ᛒ;
+ use base ('텟ţ::ऍ', '텟ţ::Ḋ');
+ use mro 'dfs';
+
+ package 텟ţ::ଅ;
+ use base ('텟ţ::ᛒ', '텟ţ::ƈ');
+ use mro 'dfs';
+}
+
+ok(eq_array(
+ mro::get_linear_isa('텟ţ::ଅ'),
+ [ qw(텟ţ::ଅ 텟ţ::ᛒ 텟ţ::ऍ 텟ţ::ᴼ 텟ţ::Ḋ 텟ţ::ƈ 텟ţ::Ḟ) ]
+), '... got the right MRO for 텟ţ::ଅ');
+
+is(텟ţ::ଅ->ᴼ_or_Ḋ, '텟ţ::ᴼ', '... got the right method dispatch');
+is(텟ţ::ଅ->ᴼ_or_Ḟ, '텟ţ::ᴼ', '... got the right method dispatch');
+
+# NOTE:
+# this test is particularly interesting because the p5 dispatch
+# would actually call 텟ţ::Ḋ before 텟ţ::ƈ and 텟ţ::Ḋ is a
+# subclass of 텟ţ::ƈ
+is(텟ţ::ଅ->ƈ_or_Ḋ, '텟ţ::Ḋ', '... got the right method dispatch');
Added: vendor/perl/dist/t/mro/basic_04_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_04_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_04_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 1);
+
+=pod
+
+From the parrot test t/pmc/object-meths.t
+
+ A B A E
+ \ / \ /
+ C D
+ \ /
+ \ /
+ F
+
+=cut
+
+{
+ package Ƭ::ŁiƁ::ଅ; use mro 'c3';
+ package Ƭ::ŁiƁ::ᛒ; use mro 'c3';
+ package Ƭ::ŁiƁ::ऍ; use mro 'c3';
+ package Ƭ::ŁiƁ::ƈ; use mro 'c3'; use base ('Ƭ::ŁiƁ::ଅ', 'Ƭ::ŁiƁ::ᛒ');
+ package Ƭ::ŁiƁ::Ḋ; use mro 'c3'; use base ('Ƭ::ŁiƁ::ଅ', 'Ƭ::ŁiƁ::ऍ');
+ package Ƭ::ŁiƁ::Ḟ; use mro 'c3'; use base ('Ƭ::ŁiƁ::ƈ', 'Ƭ::ŁiƁ::Ḋ');
+}
+
+ok(eq_array(
+ mro::get_linear_isa('Ƭ::ŁiƁ::Ḟ'),
+ [ qw(Ƭ::ŁiƁ::Ḟ Ƭ::ŁiƁ::ƈ Ƭ::ŁiƁ::Ḋ Ƭ::ŁiƁ::ଅ Ƭ::ŁiƁ::ᛒ Ƭ::ŁiƁ::ऍ) ]
+), '... got the right MRO for Ƭ::ŁiƁ::Ḟ');
+
Added: vendor/perl/dist/t/mro/basic_04_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_04_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_04_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 1);
+
+=pod
+
+From the parrot test t/pmc/object-meths.t
+
+ ଅ ᛒ ଅ ऍ
+ \ / \ /
+ ƈ Ḋ
+ \ /
+ \ /
+ Ḟ
+
+=cut
+
+{
+ package Ƭ::ŁiƁ::ଅ; use mro 'dfs';
+ package Ƭ::ŁiƁ::ᛒ; use mro 'dfs';
+ package Ƭ::ŁiƁ::ऍ; use mro 'dfs';
+ package Ƭ::ŁiƁ::ƈ; use mro 'dfs'; use base ('Ƭ::ŁiƁ::ଅ', 'Ƭ::ŁiƁ::ᛒ');
+ package Ƭ::ŁiƁ::Ḋ; use mro 'dfs'; use base ('Ƭ::ŁiƁ::ଅ', 'Ƭ::ŁiƁ::ऍ');
+ package Ƭ::ŁiƁ::Ḟ; use mro 'dfs'; use base ('Ƭ::ŁiƁ::ƈ', 'Ƭ::ŁiƁ::Ḋ');
+}
+
+ok(eq_array(
+ mro::get_linear_isa('Ƭ::ŁiƁ::Ḟ'),
+ [ qw(Ƭ::ŁiƁ::Ḟ Ƭ::ŁiƁ::ƈ Ƭ::ŁiƁ::ଅ Ƭ::ŁiƁ::ᛒ Ƭ::ŁiƁ::Ḋ Ƭ::ŁiƁ::ऍ) ]
+), '... got the right MRO for Ƭ::ŁiƁ::Ḟ');
+
Added: vendor/perl/dist/t/mro/basic_05_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_05_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_05_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,57 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 2);
+
+=pod
+
+This tests a strange bug found by Matt S. Trout
+while building DBIx::Class. Thanks Matt!!!!
+
+ <A>
+ / \
+<C> <B>
+ \ /
+ <D>
+
+=cut
+
+{
+ package Diᚪၚd_A;
+ use mro 'c3';
+
+ sub ᕘ { 'Diᚪၚd_A::ᕘ' }
+}
+{
+ package Diᚪၚd_B;
+ use base 'Diᚪၚd_A';
+ use mro 'c3';
+
+ sub ᕘ { 'Diᚪၚd_B::ᕘ => ' . (shift)->SUPER::ᕘ }
+}
+{
+ package Diᚪၚd_C;
+ use mro 'c3';
+ use base 'Diᚪၚd_A';
+
+}
+{
+ package Diᚪၚd_D;
+ use base ('Diᚪၚd_C', 'Diᚪၚd_B');
+ use mro 'c3';
+
+ sub ᕘ { 'Diᚪၚd_D::ᕘ => ' . (shift)->SUPER::ᕘ }
+}
+
+ok(eq_array(
+ mro::get_linear_isa('Diᚪၚd_D'),
+ [ qw(Diᚪၚd_D Diᚪၚd_C Diᚪၚd_B Diᚪၚd_A) ]
+), '... got the right MRO for Diᚪၚd_D');
+
+is(Diᚪၚd_D->ᕘ,
+ 'Diᚪၚd_D::ᕘ => Diᚪၚd_B::ᕘ => Diᚪၚd_A::ᕘ',
+ '... got the right next::method dispatch path');
Added: vendor/perl/dist/t/mro/basic_05_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_05_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_05_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,58 @@
+#!./perl
+
+use strict;
+use warnings;
+
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 2);
+
+=pod
+
+This tests a strange bug found by Matt S. Trout
+while building DBIx::Class. Thanks Matt!!!!
+
+ <A>
+ / \
+<C> <B>
+ \ /
+ <D>
+
+=cut
+
+{
+ package Diᚪၚd_A;
+ use mro 'dfs';
+
+ sub ᕘ { 'Diᚪၚd_A::ᕘ' }
+}
+{
+ package Diᚪၚd_B;
+ use base 'Diᚪၚd_A';
+ use mro 'dfs';
+
+ sub ᕘ { 'Diᚪၚd_B::ᕘ => ' . (shift)->SUPER::ᕘ }
+}
+{
+ package Diᚪၚd_C;
+ use mro 'dfs';
+ use base 'Diᚪၚd_A';
+
+}
+{
+ package Diᚪၚd_D;
+ use base ('Diᚪၚd_C', 'Diᚪၚd_B');
+ use mro 'dfs';
+
+ sub ᕘ { 'Diᚪၚd_D::ᕘ => ' . (shift)->SUPER::ᕘ }
+}
+
+ok(eq_array(
+ mro::get_linear_isa('Diᚪၚd_D'),
+ [ qw(Diᚪၚd_D Diᚪၚd_C Diᚪၚd_A Diᚪၚd_B) ]
+), '... got the right MRO for Diᚪၚd_D');
+
+is(Diᚪၚd_D->ᕘ,
+ 'Diᚪၚd_D::ᕘ => Diᚪၚd_A::ᕘ',
+ '... got the right next::method dispatch path');
Added: vendor/perl/dist/t/mro/basic_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/basic_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/basic_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,328 @@
+#!./perl
+
+use utf8;
+use open qw( :utf8 :std );
+use strict;
+use warnings;
+
+BEGIN { require q(./test.pl); } plan(tests => 53);
+
+require mro;
+
+{
+ package MRO_அ;
+ our @ISA = qw//;
+ package MRO_ɓ;
+ our @ISA = qw//;
+ package MRO_ᶝ;
+ our @ISA = qw//;
+ package MRO_d;
+ our @ISA = qw/MRO_அ MRO_ɓ MRO_ᶝ/;
+ package MRO_ɛ;
+ our @ISA = qw/MRO_அ MRO_ɓ MRO_ᶝ/;
+ package MRO_ᚠ;
+ our @ISA = qw/MRO_d MRO_ɛ/;
+}
+
+my @MFO_ᚠ_DFS = qw/MRO_ᚠ MRO_d MRO_அ MRO_ɓ MRO_ᶝ MRO_ɛ/;
+my @MFO_ᚠ_C3 = qw/MRO_ᚠ MRO_d MRO_ɛ MRO_அ MRO_ɓ MRO_ᶝ/;
+is(mro::get_mro('MRO_ᚠ'), 'dfs');
+ok(eq_array(
+ mro::get_linear_isa('MRO_ᚠ'), \@MFO_ᚠ_DFS
+));
+
+ok(eq_array(mro::get_linear_isa('MRO_ᚠ', 'dfs'), \@MFO_ᚠ_DFS));
+ok(eq_array(mro::get_linear_isa('MRO_ᚠ', 'c3'), \@MFO_ᚠ_C3));
+eval{mro::get_linear_isa('MRO_ᚠ', 'C3')};
+like($@, qr/^Invalid mro name: 'C3'/);
+
+mro::set_mro('MRO_ᚠ', 'c3');
+is(mro::get_mro('MRO_ᚠ'), 'c3');
+ok(eq_array(
+ mro::get_linear_isa('MRO_ᚠ'), \@MFO_ᚠ_C3
+));
+
+ok(eq_array(mro::get_linear_isa('MRO_ᚠ', 'dfs'), \@MFO_ᚠ_DFS));
+ok(eq_array(mro::get_linear_isa('MRO_ᚠ', 'c3'), \@MFO_ᚠ_C3));
+eval{mro::get_linear_isa('MRO_ᚠ', 'C3')};
+like($@, qr/^Invalid mro name: 'C3'/);
+
+ok(!mro::is_universal('MRO_ɓ'));
+
+ at UNIVERSAL::ISA = qw/MRO_ᚠ/;
+ok(mro::is_universal('MRO_ɓ'));
+
+ at UNIVERSAL::ISA = ();
+ok(!mro::is_universal('MRO_ᚠ'));
+ok(!mro::is_universal('MRO_ɓ'));
+
+# is_universal, get_mro, and get_linear_isa should
+# handle non-existent packages sanely
+ok(!mro::is_universal('Does_Not_Exist'));
+is(mro::get_mro('Also_Does_Not_Exist'), 'dfs');
+ok(eq_array(
+ mro::get_linear_isa('Does_Not_Exist_Three'),
+ [qw/Does_Not_Exist_Three/]
+));
+
+# Assigning @ISA via globref
+{
+ package MRO_ҭṣṱबꗻ;
+ sub 텟tf운ꜿ { return 123 }
+ package MRO_Test옽ḦРꤷsӭ;
+ sub 텟ₜꖢᶯcƧ { return 321 }
+ package MRO_Ɯ; our @ISA = qw/MRO_ҭṣṱबꗻ/;
+}
+*MRO_ᕡ::ISA = *MRO_Ɯ::ISA;
+is(eval { MRO_ᕡ->텟tf운ꜿ() }, 123);
+
+# XXX TODO (when there's a way to backtrack through a glob's aliases)
+# push(@MRO_M::ISA, 'MRO_TestOtherBase');
+# is(eval { MRO_N->testfunctwo() }, 321);
+
+# Simple DESTROY Baseline
+{
+ my $x = 0;
+ my $obj;
+
+ {
+ package DESTROY_MRO_Bӓeᓕne;
+ sub new { bless {} => shift }
+ sub DESTROY { $x++ }
+
+ package DESTROY_MRO_Bӓeᓕne_χḻɖ;
+ our @ISA = qw/DESTROY_MRO_Bӓeᓕne/;
+ }
+
+ $obj = DESTROY_MRO_Bӓeᓕne->new();
+ undef $obj;
+ is($x, 1);
+
+ $obj = DESTROY_MRO_Bӓeᓕne_χḻɖ->new();
+ undef $obj;
+ is($x, 2);
+}
+
+# Dynamic DESTROY
+{
+ my $x = 0;
+ my $obj;
+
+ {
+ package DESTROY_MRO_Dჷ및;
+ sub new { bless {} => shift }
+
+ package DESTROY_MRO_Dჷ및_χḻɖ;
+ our @ISA = qw/DESTROY_MRO_Dჷ및/;
+ }
+
+ $obj = DESTROY_MRO_Dჷ및->new();
+ undef $obj;
+ is($x, 0);
+
+ $obj = DESTROY_MRO_Dჷ및_χḻɖ->new();
+ undef $obj;
+ is($x, 0);
+
+ no warnings 'once';
+ *DESTROY_MRO_Dჷ및::DESTROY = sub { $x++ };
+
+ $obj = DESTROY_MRO_Dჷ및->new();
+ undef $obj;
+ is($x, 1);
+
+ $obj = DESTROY_MRO_Dჷ및_χḻɖ->new();
+ undef $obj;
+ is($x, 2);
+}
+
+# clearing @ISA in different ways
+# some are destructive to the package, hence the new
+# package name each time
+{
+ no warnings 'uninitialized';
+ {
+ package ᛁ앛ଌᛠ;
+ our @ISA = qw/xx ƳƳ ƶƶ/;
+ }
+ # baseline
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ'),[qw/ᛁ앛ଌᛠ xx ƳƳ ƶƶ/]));
+
+ # this looks dumb, but it preserves existing behavior for compatibility
+ # (undefined @ISA elements treated as "main")
+ $ᛁ앛ଌᛠ::ISA[1] = undef;
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ'),[qw/ᛁ앛ଌᛠ xx main ƶƶ/]));
+
+ # undef the array itself
+ undef @ᛁ앛ଌᛠ::ISA;
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ'),[qw/ᛁ앛ଌᛠ/]));
+
+ # Now, clear more than one package's @ISA at once
+ {
+ package ᛁ앛ଌᛠ1;
+ our @ISA = qw/WẆ xx/;
+
+ package ᛁ앛ଌᛠ2;
+ our @ISA = qw/ƳƳ ƶƶ/;
+ }
+ # baseline
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ1'),[qw/ᛁ앛ଌᛠ1 WẆ xx/]));
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ2'),[qw/ᛁ앛ଌᛠ2 ƳƳ ƶƶ/]));
+ (@ᛁ앛ଌᛠ1::ISA, @ᛁ앛ଌᛠ2::ISA) = ();
+
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ1'),[qw/ᛁ앛ଌᛠ1/]));
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ2'),[qw/ᛁ앛ଌᛠ2/]));
+
+ # [perl #49564] This is a pretty obscure way of clearing @ISA but
+ # it tests a regression that affects XS code calling av_clear too.
+ {
+ package ᛁ앛ଌᛠ3;
+ our @ISA = qw/WẆ xx/;
+ }
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ3'),[qw/ᛁ앛ଌᛠ3 WẆ xx/]));
+ {
+ package ᛁ앛ଌᛠ3;
+ reset 'I';
+ }
+ ok(eq_array(mro::get_linear_isa('ᛁ앛ଌᛠ3'),[qw/ᛁ앛ଌᛠ3/]));
+}
+
+# Check that recursion bails out "cleanly" in a variety of cases
+# (as opposed to say, bombing the interpreter or something)
+{
+ my @recurse_codes = (
+ '@MRO_ഋ1::ISA = "MRO_ഋ2"; @MRO_ഋ2::ISA = "MRO_ഋ1";',
+ '@MRO_ഋ3::ISA = "MRO_ഋ4"; push(@MRO_ഋ4::ISA, "MRO_ഋ3");',
+ '@MRO_ഋ5::ISA = "MRO_ഋ6"; @MRO_ഋ6::ISA = qw/xx MRO_ഋ5 ƳƳ/;',
+ '@MRO_ഋ7::ISA = "MRO_ഋ8"; push(@MRO_ഋ8::ISA, qw/xx MRO_ഋ7 ƳƳ/)',
+ );
+ foreach my $code (@recurse_codes) {
+ eval $code;
+ ok($@ =~ /Recursive inheritance detected/);
+ }
+}
+
+# Check that SUPER caches get invalidated correctly
+{
+ {
+ package スṔઍR텟ʇ;
+ sub new { bless {} => shift }
+ sub ຟઓ { $_[1]+1 }
+
+ package スṔઍR텟ʇ::MᶤƉ;
+ our @ISA = 'スṔઍR텟ʇ';
+
+ package スṔઍR텟ʇ::킫;
+ our @ISA = 'スṔઍR텟ʇ::MᶤƉ';
+ sub ຟઓ { my $s = shift; $s->SUPER::ຟઓ(@_) }
+
+ package スṔઍR텟ʇ::렙ﷰए;
+ sub ຟઓ { $_[1]+3 }
+ }
+
+ my $stk_obj = スṔઍR텟ʇ::킫->new();
+ is($stk_obj->ຟઓ(1), 2);
+ { no warnings 'redefine';
+ *スṔઍR텟ʇ::ຟઓ = sub { $_[1]+2 };
+ }
+ is($stk_obj->ຟઓ(2), 4);
+ @スṔઍR텟ʇ::MᶤƉ::ISA = 'スṔઍR텟ʇ::렙ﷰए';
+ is($stk_obj->ຟઓ(3), 6);
+}
+
+{
+ {
+ # assigning @ISA via arrayref to globref RT 60220
+ package ᛔ1;
+ sub new { bless {}, shift }
+
+ package ᛔ2;
+ }
+ *{ᛔ2::ISA} = [ 'ᛔ1' ];
+ my $foo = ᛔ2->new;
+ ok(!eval { $foo->ɓᛅƘ }, "no ɓᛅƘ method");
+ no warnings 'once'; # otherwise it'll bark about ᛔ1::ɓᛅƘ used only once
+ *{ᛔ1::ɓᛅƘ} = sub { "[ɓᛅƘ]" };
+ is(scalar eval { $foo->ɓᛅƘ }, "[ɓᛅƘ]", "can ɓᛅƘ now");
+ is $@, '';
+}
+
+{
+ # assigning @ISA via arrayref then modifying it RT 72866
+ {
+ package ㄑ1;
+ sub Fஓ { }
+
+ package ㄑ2;
+ sub ƚ { }
+
+ package ㄑ3;
+ }
+ push @ㄑ3::ISA, "ㄑ1";
+ can_ok("ㄑ3", "Fஓ");
+ *ㄑ3::ISA = [];
+ push @ㄑ3::ISA, "ㄑ1";
+ can_ok("ㄑ3", "Fஓ");
+ *ㄑ3::ISA = [];
+ push @ㄑ3::ISA, "ㄑ2";
+ can_ok("ㄑ3", "ƚ");
+ ok(!ㄑ3->can("Fஓ"), "can't call Fஓ method any longer");
+}
+
+{
+ # test mro::method_changed_in
+ my $count = mro::get_pkg_gen("MRO_அ");
+ mro::method_changed_in("MRO_அ");
+ my $count_new = mro::get_pkg_gen("MRO_அ");
+
+ is($count_new, $count + 1);
+}
+
+{
+ # test if we can call mro::invalidate_all_method_caches;
+ eval {
+ mro::invalidate_all_method_caches();
+ };
+ is($@, "");
+}
+
+{
+ # @main::ISA
+ no warnings 'once';
+ @main::ISA = 'პᛅeȵᛏ';
+ my $output = '';
+ *პᛅeȵᛏ::ど = sub { $output .= 'პᛅeȵᛏ' };
+ *პᛅeȵᛏ2::ど = sub { $output .= 'პᛅeȵᛏ2' };
+ main->ど;
+ @main::ISA = 'პᛅeȵᛏ2';
+ main->ど;
+ is $output, 'პᛅeȵᛏპᛅeȵᛏ2', '@main::ISA is magical';
+}
+
+{
+ # Undefining *ISA, then modifying @ISA
+ # This broke Class::Trait. See [perl #79024].
+ {package Class::Trait::Base}
+ no strict 'refs';
+ undef *{"एxṰர::ʦፖㄡsȨ::ISA"};
+ 'एxṰர::ʦፖㄡsȨ'->isa('Class::Trait::Base'); # cache the mro
+ unshift @{"एxṰர::ʦፖㄡsȨ::ISA"}, 'Class::Trait::Base';
+ ok 'एxṰர::ʦፖㄡsȨ'->isa('Class::Trait::Base'),
+ 'a isa b after undef *a::ISA and @a::ISA modification';
+}
+
+{
+ # Deleting $package::{ISA}
+ # Broken in 5.10.0; fixed in 5.13.7
+ @BḼᵑth::ISA = 'Bલdḏ';
+ delete $BḼᵑth::{ISA};
+ ok !BḼᵑth->isa("Bલdḏ"), 'delete $package::{ISA}';
+}
+
+{
+ # Undefining stashes
+ @ᖫᕃㄒṭ::ISA = "ᖮw잍";
+ @ᖮw잍::ISA = "ሲঌએ";
+ undef %ᖮw잍::;
+ ok !ᖫᕃㄒṭ->isa('ሲঌએ'), 'undef %package:: updates subclasses';
+}
Added: vendor/perl/dist/t/mro/c3_with_overload_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/c3_with_overload_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/c3_with_overload_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,47 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+require q(./test.pl); plan(tests => 7);
+
+{
+ package BaseTest;
+ use strict;
+ use warnings;
+ use mro 'c3';
+
+ package OverloadingTest;
+ use strict;
+ use warnings;
+ use mro 'c3';
+ use base 'BaseTest';
+ use overload '""' => sub { ref(shift) . " stringified" },
+ fallback => 1;
+
+ sub new { bless {} => shift }
+
+ package InheritingFromOverloadedTest;
+ use strict;
+ use warnings;
+ use base 'OverloadingTest';
+ use mro 'c3';
+}
+
+my $x = InheritingFromOverloadedTest->new();
+object_ok($x, 'InheritingFromOverloadedTest');
+
+my $y = OverloadingTest->new();
+object_ok($y, 'OverloadingTest');
+
+is("$x", 'InheritingFromOverloadedTest stringified', '... got the right value when stringifing');
+is("$y", 'OverloadingTest stringified', '... got the right value when stringifing');
+
+ok(($y eq 'OverloadingTest stringified'), '... eq was handled correctly');
+
+my $result;
+eval {
+ $result = $x eq 'InheritingFromOverloadedTest stringified'
+};
+ok(!$@, '... this should not throw an exception');
+ok($result, '... and we should get the true value');
Added: vendor/perl/dist/t/mro/complex_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/complex_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/complex_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,144 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 12);
+
+=pod
+
+This example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879
+
+ --- --- ---
+Level 5 8 | A | 9 | B | A | C | (More General)
+ --- --- --- V
+ \ | / |
+ \ | / |
+ \ | / |
+ \ | / |
+ --- |
+Level 4 7 | D | |
+ --- |
+ / \ |
+ / \ |
+ --- --- |
+Level 3 4 | G | 6 | E | |
+ --- --- |
+ | | |
+ | | |
+ --- --- |
+Level 2 3 | H | 5 | F | |
+ --- --- |
+ \ / | |
+ \ / | |
+ \ | |
+ / \ | |
+ / \ | |
+ --- --- |
+Level 1 1 | J | 2 | I | |
+ --- --- |
+ \ / |
+ \ / |
+ --- v
+Level 0 0 | K | (More Specialized)
+ ---
+
+
+0123456789A
+KJIHGFEDABC
+
+=cut
+
+{
+ package 텟Ṱ::ᐊ; use mro 'c3';
+
+ package 텟Ṱ::ḅ; use mro 'c3';
+
+ package 텟Ṱ::ȼ; use mro 'c3';
+
+ package 텟Ṱ::Ḏ; use mro 'c3';
+ use base qw/텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ/;
+
+ package 텟Ṱ::Ӭ; use mro 'c3';
+ use base qw/텟Ṱ::Ḏ/;
+
+ package 텟Ṱ::Ḟ; use mro 'c3';
+ use base qw/텟Ṱ::Ӭ/;
+ sub testmèth { "wrong" }
+
+ package 텟Ṱ::ḡ; use mro 'c3';
+ use base qw/텟Ṱ::Ḏ/;
+
+ package 텟Ṱ::Ḣ; use mro 'c3';
+ use base qw/텟Ṱ::ḡ/;
+
+ package 텟Ṱ::ᶦ; use mro 'c3';
+ use base qw/텟Ṱ::Ḣ 텟Ṱ::Ḟ/;
+ sub testmèth { "right" }
+
+ package 텟Ṱ::J; use mro 'c3';
+ use base qw/텟Ṱ::Ḟ/;
+
+ package 텟Ṱ::Ḵ; use mro 'c3';
+ use base qw/텟Ṱ::J 텟Ṱ::ᶦ/;
+ sub testmèth { shift->next::method }
+}
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ᐊ'),
+ [ qw(텟Ṱ::ᐊ) ]
+), '... got the right C3 merge order for 텟Ṱ::ᐊ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ḅ'),
+ [ qw(텟Ṱ::ḅ) ]
+), '... got the right C3 merge order for 텟Ṱ::ḅ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ȼ'),
+ [ qw(텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::ȼ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ḏ'),
+ [ qw(텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::Ḏ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ӭ'),
+ [ qw(텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::Ӭ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ḟ'),
+ [ qw(텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::Ḟ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ḡ'),
+ [ qw(텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::ḡ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ḣ'),
+ [ qw(텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::Ḣ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ᶦ'),
+ [ qw(텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::ᶦ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::J'),
+ [ qw(텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::J');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ḵ'),
+ [ qw(텟Ṱ::Ḵ 텟Ṱ::J 텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right C3 merge order for 텟Ṱ::Ḵ');
+
+is(텟Ṱ::Ḵ->testmèth(), "right", 'next::method working ok');
Added: vendor/perl/dist/t/mro/complex_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/complex_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/complex_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,139 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 11);
+
+=pod
+
+This example is taken from: http://rt.cpan.org/Public/Bug/Display.html?id=20879
+
+ --- --- ---
+Level 5 8 | A | 9 | B | A | C | (More General)
+ --- --- --- V
+ \ | / |
+ \ | / |
+ \ | / |
+ \ | / |
+ --- |
+Level 4 7 | D | |
+ --- |
+ / \ |
+ / \ |
+ --- --- |
+Level 3 4 | G | 6 | E | |
+ --- --- |
+ | | |
+ | | |
+ --- --- |
+Level 2 3 | H | 5 | F | |
+ --- --- |
+ \ / | |
+ \ / | |
+ \ | |
+ / \ | |
+ / \ | |
+ --- --- |
+Level 1 1 | J | 2 | I | |
+ --- --- |
+ \ / |
+ \ / |
+ --- v
+Level 0 0 | K | (More Specialized)
+ ---
+
+
+0123456789A
+KJIHGFEDABC
+
+=cut
+
+{
+ package 텟Ṱ::ᐊ; use mro 'dfs';
+
+ package 텟Ṱ::ḅ; use mro 'dfs';
+
+ package 텟Ṱ::ȼ; use mro 'dfs';
+
+ package 텟Ṱ::Ḏ; use mro 'dfs';
+ use base qw/텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ/;
+
+ package 텟Ṱ::Ӭ; use mro 'dfs';
+ use base qw/텟Ṱ::Ḏ/;
+
+ package 텟Ṱ::Ḟ; use mro 'dfs';
+ use base qw/텟Ṱ::Ӭ/;
+
+ package 텟Ṱ::ḡ; use mro 'dfs';
+ use base qw/텟Ṱ::Ḏ/;
+
+ package 텟Ṱ::Ḣ; use mro 'dfs';
+ use base qw/텟Ṱ::ḡ/;
+
+ package 텟Ṱ::ᶦ; use mro 'dfs';
+ use base qw/텟Ṱ::Ḣ 텟Ṱ::Ḟ/;
+
+ package 텟Ṱ::J; use mro 'dfs';
+ use base qw/텟Ṱ::Ḟ/;
+
+ package 텟Ṱ::Ḵ; use mro 'dfs';
+ use base qw/텟Ṱ::J 텟Ṱ::ᶦ/;
+}
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ᐊ'),
+ [ qw(텟Ṱ::ᐊ) ]
+), '... got the right DFS merge order for 텟Ṱ::ᐊ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ḅ'),
+ [ qw(텟Ṱ::ḅ) ]
+), '... got the right DFS merge order for 텟Ṱ::ḅ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ȼ'),
+ [ qw(텟Ṱ::ȼ) ]
+), '... got the right DFS merge order for 텟Ṱ::ȼ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ḏ'),
+ [ qw(텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right DFS merge order for 텟Ṱ::Ḏ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ӭ'),
+ [ qw(텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right DFS merge order for 텟Ṱ::Ӭ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ḟ'),
+ [ qw(텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right DFS merge order for 텟Ṱ::Ḟ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ḡ'),
+ [ qw(텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right DFS merge order for 텟Ṱ::ḡ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ḣ'),
+ [ qw(텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right DFS merge order for 텟Ṱ::Ḣ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::ᶦ'),
+ [ qw(텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ 텟Ṱ::Ḟ 텟Ṱ::Ӭ) ]
+), '... got the right DFS merge order for 텟Ṱ::ᶦ');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::J'),
+ [ qw(텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ) ]
+), '... got the right DFS merge order for 텟Ṱ::J');
+
+ok(eq_array(
+ mro::get_linear_isa('텟Ṱ::Ḵ'),
+ [ qw(텟Ṱ::Ḵ 텟Ṱ::J 텟Ṱ::Ḟ 텟Ṱ::Ӭ 텟Ṱ::Ḏ 텟Ṱ::ᐊ 텟Ṱ::ḅ 텟Ṱ::ȼ 텟Ṱ::ᶦ 텟Ṱ::Ḣ 텟Ṱ::ḡ) ]
+), '... got the right DFS merge order for 텟Ṱ::Ḵ');
Added: vendor/perl/dist/t/mro/dbic_c3_utf8.t
===================================================================
(Binary files differ)
Index: vendor/perl/dist/t/mro/dbic_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/dbic_c3_utf8.t 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/t/mro/dbic_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/t/mro/dbic_c3_utf8.t
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: vendor/perl/dist/t/mro/dbic_dfs_utf8.t
===================================================================
(Binary files differ)
Index: vendor/perl/dist/t/mro/dbic_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/dbic_dfs_utf8.t 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/t/mro/dbic_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/t/mro/dbic_dfs_utf8.t
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: vendor/perl/dist/t/mro/inconsistent_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/inconsistent_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/inconsistent_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,52 @@
+#!./perl
+
+use strict;
+use warnings;
+BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+}
+
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 1);
+
+require mro;
+
+=pod
+
+This example is take from: http://www.python.org/2.3/mro.html
+
+"Serious order disagreement" # From Guido
+class O: pass
+class X(O): pass
+class Y(O): pass
+class A(X,Y): pass
+class B(Y,X): pass
+try:
+ class Z(A,B): pass #creates Z(A,B) in Python 2.2
+except TypeError:
+ pass # Z(A,B) cannot be created in Python 2.3
+
+=cut
+
+{
+ package ẋ;
+
+ package Ƴ;
+
+ package ẋƳ;
+ our @ISA = ('ẋ', 'Ƴ');
+
+ package Ƴẋ;
+ our @ISA = ('Ƴ', 'ẋ');
+
+ package Ȥ;
+ our @ISA = ('ẋƳ', 'Ƴẋ');
+}
+
+eval { mro::get_linear_isa('Ȥ', 'c3') };
+like($@, qr/^Inconsistent /, '... got the right error with an inconsistent hierarchy');
Added: vendor/perl/dist/t/mro/isa_aliases_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/isa_aliases_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/isa_aliases_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,46 @@
+#!./perl
+
+BEGIN { chdir 't'; @INC = '../lib'; require './test.pl' }
+
+use utf8;
+use open qw( :utf8 :std );
+
+plan 12;
+
+@ฟ옥ʮ::ISA = "ᶶ";
+*ຜ옥ㄏ::ISA = *ฟ옥ʮ::ISA;
+@ฟ옥ʮ::ISA = "Bᐊㄗ";
+
+ok 'ฟ옥ʮ'->isa("Bᐊㄗ"),
+ 'isa after another stash has claimed the @ISA via glob assignment';
+ok 'ຜ옥ㄏ'->isa("Bᐊㄗ"),
+ 'isa on the stash that claimed the @ISA via glob assignment';
+ok !ฟ옥ʮ->isa("ᶶ"),
+ '!isa when another stash has claimed the @ISA via glob assignment';
+ok !ຜ옥ㄏ->isa("ᶶ"),
+ '!isa on the stash that claimed the @ISA via glob assignment';
+
+@ฟ옥ʮ::ISA = "ᶶ";
+*ฟ옥ʮ::ISA = ["Bᐊㄗ"];
+
+ok 'ฟ옥ʮ'->isa("Bᐊㄗ"),
+ 'isa after glob-to-ref assignment when *ISA is shared';
+ok 'ຜ옥ㄏ'->isa("Bᐊㄗ"),
+ 'isa after glob-to-ref assignment on another stash when *ISA is shared';
+ok !ฟ옥ʮ->isa("ᶶ"),
+ '!isa after glob-to-ref assignment when *ISA is shared';
+ok !ຜ옥ㄏ->isa("ᶶ"),
+ '!isa after glob-to-ref assignment on another stash when *ISA is shared';
+
+@ᕘ::ISA = "ᶶ";
+*ጶ::ISA = \@ᕘ::ISA;
+@ᕘ::ISA = "Bᐊㄗ";
+
+ok 'ᕘ'->isa("Bᐊㄗ"),
+ 'isa after another stash has claimed the @ISA via ref-to-glob assignment';
+ok 'ጶ'->isa("Bᐊㄗ"),
+ 'isa on the stash that claimed the @ISA via ref-to-glob assignment';
+ok !ᕘ->isa("ᶶ"),
+ '!isa when another stash has claimed the @ISA via ref-to-glob assignment';
+ok !ጶ->isa("ᶶ"),
+ '!isa on the stash that claimed the @ISA via ref-to-glob assignment';
Added: vendor/perl/dist/t/mro/isa_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/isa_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/isa_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,71 @@
+#!perl -w
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require "./test.pl";
+}
+
+use strict;
+use utf8;
+use open qw( :utf8 :std );
+
+plan 'no_plan';
+
+# package klonk doesn't have a stash.
+
+package 캎oẃ;
+use mro 'c3';
+
+# No parents
+
+package urḲḵk;
+use mro 'c3';
+
+# 1 parent
+ at urḲḵk::ISA = 'kഌoんḰ';
+
+package к;
+use mro 'c3';
+
+# 2 parents
+ at urḲḵk::ISA = ('kഌoんḰ', '캎oẃ');
+
+package ṭ화ckэ;
+use mro 'c3';
+
+# No parents, has @ISA
+@ṭ화ckэ::ISA = ();
+
+package Źzzzዟᑉ;
+use mro 'c3';
+
+@Źzzzዟᑉ::ISA = ('ṭ화ckэ', '캎oẃ');
+
+package Ẁ함M;
+use mro 'c3';
+
+@Ẁ함M::ISA = ('캎oẃ', 'ṭ화ckэ');
+
+package main;
+
+my %expect =
+ (
+ kഌoんḰ => [qw(kഌoんḰ)],
+ urḲḵk => [qw(urḲḵk kഌoんḰ 캎oẃ)],
+ 캎oẃ => [qw(캎oẃ)],
+ к => [qw(к)],
+ ṭ화ckэ => [qw(ṭ화ckэ)],
+ Źzzzዟᑉ => [qw(Źzzzዟᑉ ṭ화ckэ 캎oẃ)],
+ Ẁ함M => [qw(Ẁ함M 캎oẃ ṭ화ckэ)],
+ );
+
+foreach my $package (qw(kഌoんḰ urḲḵk 캎oẃ к ṭ화ckэ Źzzzዟᑉ Ẁ함M)) {
+ my $ref = bless [], $package;
+ my $isa = $expect{$package};
+ is("@{mro::get_linear_isa($package)}", "@$isa", "\@ISA for $package");
+
+ foreach my $class ($package, @$isa, 'UNIVERSAL') {
+ object_ok($ref, $class, $package);
+ }
+}
Added: vendor/perl/dist/t/mro/isa_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/isa_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/isa_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,67 @@
+#!perl -w
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require "./test.pl";
+}
+
+use strict;
+use utf8;
+use open qw( :utf8 :std );
+
+plan 'no_plan';
+
+# package klonk doesn't have a stash.
+
+package 캎oẃ;
+
+# No parents
+
+package urḲḵk;
+
+# 1 parent
+ at urḲḵk::ISA = 'kഌoんḰ';
+
+package к;
+
+# 2 parents
+ at urḲḵk::ISA = ('kഌoんḰ', '캎oẃ');
+
+package ṭ화ckэ;
+
+# No parents, has @ISA
+@ṭ화ckэ::ISA = ();
+
+package Źzzzዟᑉ;
+
+@Źzzzዟᑉ::ISA = ('ṭ화ckэ', '캎oẃ');
+
+package Ẁ함M;
+
+@Ẁ함M::ISA = ('캎oẃ', 'ṭ화ckэ');
+
+package main;
+
+require mro;
+
+my %expect =
+ (
+ kഌoんḰ => [qw(kഌoんḰ)],
+ urḲḵk => [qw(urḲḵk kഌoんḰ 캎oẃ)],
+ 캎oẃ => [qw(캎oẃ)],
+ к => [qw(к)],
+ ṭ화ckэ => [qw(ṭ화ckэ)],
+ Źzzzዟᑉ => [qw(Źzzzዟᑉ ṭ화ckэ 캎oẃ)],
+ Ẁ함M => [qw(Ẁ함M 캎oẃ ṭ화ckэ)],
+ );
+
+foreach my $package (qw(kഌoんḰ urḲḵk 캎oẃ к ṭ화ckэ Źzzzዟᑉ Ẁ함M)) {
+ my $ref = bless [], $package;
+ my $isa = $expect{$package};
+ is("@{mro::get_linear_isa($package)}", "@$isa", "\@ISA for $package");
+
+ foreach my $class ($package, @$isa, 'UNIVERSAL') {
+ object_ok($ref, $class, $package);
+ }
+}
Added: vendor/perl/dist/t/mro/isarev_utf8.t
===================================================================
(Binary files differ)
Index: vendor/perl/dist/t/mro/isarev_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/isarev_utf8.t 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/t/mro/isarev_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/t/mro/isarev_utf8.t
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: vendor/perl/dist/t/mro/method_caching_utf8.t
===================================================================
(Binary files differ)
Index: vendor/perl/dist/t/mro/method_caching_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/method_caching_utf8.t 2013-12-02 02:59:32 UTC (rev 6433)
+++ vendor/perl/dist/t/mro/method_caching_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
Property changes on: vendor/perl/dist/t/mro/method_caching_utf8.t
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: vendor/perl/dist/t/mro/next_NEXT_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/next_NEXT_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/next_NEXT_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use NEXT;
+use utf8;
+use open qw( :utf8 :std );
+
+require './test.pl';
+plan(tests => 4);
+
+{
+ package ᕘ;
+ use strict;
+ use warnings;
+ use mro 'c3';
+
+ sub fಓ { 'ᕘ::fಓ' }
+
+ package Fᶽ;
+ use strict;
+ use warnings;
+ use mro 'c3';
+ use base 'ᕘ';
+
+ sub fಓ { 'Fᶽ::fಓ => ' . (shift)->next::method }
+
+ package Bᛆ;
+ use strict;
+ use warnings;
+ use mro 'c3';
+ use base 'ᕘ';
+
+ sub fಓ { 'Bᛆ::fಓ => ' . (shift)->next::method }
+
+ package Baᕃ;
+ use strict;
+ use warnings;
+
+ use base 'Bᛆ', 'Fᶽ';
+
+ sub fಓ { 'Baᕃ::fಓ => ' . (shift)->NEXT::fಓ }
+}
+
+is(ᕘ->fಓ, 'ᕘ::fಓ', '... got the right value from ᕘ->fಓ');
+is(Fᶽ->fಓ, 'Fᶽ::fಓ => ᕘ::fಓ', '... got the right value from Fᶽ->fಓ');
+is(Bᛆ->fಓ, 'Bᛆ::fಓ => ᕘ::fಓ', '... got the right value from Bᛆ->fಓ');
+
+is(Baᕃ->fಓ, 'Baᕃ::fಓ => Bᛆ::fಓ => Fᶽ::fಓ => ᕘ::fಓ', '... got the right value using NEXT in a subclass of a C3 class');
+
Added: vendor/perl/dist/t/mro/next_edgecases_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/next_edgecases_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/next_edgecases_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,98 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN { chdir 't'; require q(./test.pl); @INC = qw "../lib lib" }
+
+use utf8;
+use open qw( :utf8 :std );
+
+plan(tests => 12);
+
+{
+
+ {
+ package ᕘ;
+ use strict;
+ use warnings;
+ use mro 'c3';
+ sub new { bless {}, $_[0] }
+ sub ƚ { 'ᕘ::ƚ' }
+ }
+
+ # call the submethod in the direct instance
+
+ my $foo = ᕘ->new();
+ object_ok($foo, 'ᕘ');
+
+ can_ok($foo, 'ƚ');
+ is($foo->ƚ(), 'ᕘ::ƚ', '... got the right return value');
+
+ # fail calling it from a subclass
+
+ {
+ package Baɾ;
+ use strict;
+ use warnings;
+ use mro 'c3';
+ our @ISA = ('ᕘ');
+ }
+
+ my $bar = Baɾ->new();
+ object_ok($bar, 'Baɾ');
+ object_ok($bar, 'ᕘ');
+
+ # test it working with with Sub::Name
+ SKIP: {
+ eval 'use Sub::Name';
+ skip("Sub::Name is required for this test", 3) if $@;
+
+ my $m = sub { (shift)->next::method() };
+ Sub::Name::subname('Baɾ::ƚ', $m);
+ {
+ no strict 'refs';
+ *{'Baɾ::ƚ'} = $m;
+ }
+
+ can_ok($bar, 'ƚ');
+ my $value = eval { $bar->ƚ() };
+ ok(!$@, '... calling ƚ() succeeded') || diag $@;
+ is($value, 'ᕘ::ƚ', '... got the right return value too');
+ }
+
+ # test it failing without Sub::Name
+ {
+ package બʑ;
+ use strict;
+ use warnings;
+ use mro 'c3';
+ our @ISA = ('ᕘ');
+ }
+
+ my $baz = બʑ->new();
+ object_ok($baz, 'બʑ');
+ object_ok($baz, 'ᕘ');
+
+ {
+ my $m = sub { (shift)->next::method() };
+ {
+ no strict 'refs';
+ *{'બʑ::ƚ'} = $m;
+ }
+
+ eval { $baz->ƚ() };
+ ok($@, '... calling ƚ() with next::method failed') || diag $@;
+ }
+
+ # Test with non-existing class (used to segfault)
+ {
+ package Qűx;
+ use mro;
+ sub fਓ { No::Such::Class->next::can }
+ }
+
+ eval { Qűx->fਓ() };
+ is($@, '', "->next::can on non-existing package name");
+
+}
Added: vendor/perl/dist/t/mro/next_goto_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/next_goto_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/next_goto_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+require q(./test.pl); plan(tests => 4);
+
+use mro;
+
+{
+ package PṞoxᚤ;
+ our @ISA = qw//;
+ sub next_prxᔬ { goto &next::method }
+ sub maybe_prxᔬ { goto &maybe::next::method }
+ sub can_prxᔬ { goto &next::can }
+
+ package Ⱦ밧ᶟ;
+ our @ISA = qw//;
+ sub ᕗ { 42 }
+ sub Ƚ { 24 }
+ # বẔ doesn't exist intentionally
+ sub ʠঊₓ { 242 }
+
+ package ᵗ톺;
+ our @ISA = qw/Ⱦ밧ᶟ/;
+ sub ᕗ { shift->PṞoxᚤ::next_prxᔬ() }
+ sub Ƚ { shift->PṞoxᚤ::maybe_prxᔬ() }
+ sub বẔ { shift->PṞoxᚤ::maybe_prxᔬ() }
+ sub ʠঊₓ { shift->PṞoxᚤ::can_prxᔬ()->() }
+}
+
+is(ᵗ톺->ᕗ, 42, 'proxy next::method via goto');
+is(ᵗ톺->Ƚ, 24, 'proxy maybe::next::method via goto');
+ok(!ᵗ톺->বẔ, 'proxy maybe::next::method via goto with no method');
+is(ᵗ톺->ʠঊₓ, 242, 'proxy next::can via goto');
Added: vendor/perl/dist/t/mro/next_inanon_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/next_inanon_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/next_inanon_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,58 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+require q(./test.pl); plan(tests => 2);
+
+=pod
+
+This tests the successful handling of a next::method call from within an
+anonymous subroutine.
+
+=cut
+
+{
+ package ㅏ;
+ use mro 'c3';
+
+ sub ᕘ {
+ return 'ㅏ::ᕘ';
+ }
+
+ sub Ḃᛆ {
+ return 'ㅏ::Ḃᛆ';
+ }
+}
+
+{
+ package Ḃ;
+ use base 'ㅏ';
+ use mro 'c3';
+
+ sub ᕘ {
+ my $code = sub {
+ return 'Ḃ::ᕘ => ' . (shift)->next::method();
+ };
+ return (shift)->$code;
+ }
+
+ sub Ḃᛆ {
+ my $code1 = sub {
+ my $code2 = sub {
+ return 'Ḃ::Ḃᛆ => ' . (shift)->next::method();
+ };
+ return (shift)->$code2;
+ };
+ return (shift)->$code1;
+ }
+}
+
+is(Ḃ->ᕘ, "Ḃ::ᕘ => ㅏ::ᕘ",
+ 'method resolved inside anonymous sub');
+
+is(Ḃ->Ḃᛆ, "Ḃ::Ḃᛆ => ㅏ::Ḃᛆ",
+ 'method resolved inside nested anonymous subs');
+
+
Added: vendor/perl/dist/t/mro/next_ineval_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/next_ineval_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/next_ineval_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 1);
+
+=pod
+
+This tests the use of an eval{} block to wrap a next::method call.
+
+=cut
+
+{
+ package అ;
+ use mro 'c3';
+
+ sub ຟǫ {
+ die 'అ::ຟǫ died';
+ return 'అ::ຟǫ succeeded';
+ }
+}
+
+{
+ package b;
+ use base 'అ';
+ use mro 'c3';
+
+ sub ຟǫ {
+ eval {
+ return 'b::ຟǫ => ' . (shift)->next::method();
+ };
+
+ if ($@) {
+ return $@;
+ }
+ }
+}
+
+like(b->ຟǫ,
+ qr/^అ::ຟǫ died/u,
+ 'method resolved inside eval{}');
+
+
Added: vendor/perl/dist/t/mro/next_method_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/next_method_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/next_method_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 5);
+
+=pod
+
+This tests the classic diamond inheritance pattern.
+
+ <A>
+ / \
+<B> <C>
+ \ /
+ <D>
+
+=cut
+
+{
+ package Diӑmond_A;
+ use mro 'c3';
+ sub 헬ฬ { 'Diӑmond_A::헬ฬ' }
+ sub fಓ { 'Diӑmond_A::fಓ' }
+}
+{
+ package Diӑmond_B;
+ use base 'Diӑmond_A';
+ use mro 'c3';
+ sub fಓ { 'Diӑmond_B::fಓ => ' . (shift)->next::method() }
+}
+{
+ package Diӑmond_C;
+ use mro 'c3';
+ use base 'Diӑmond_A';
+
+ sub 헬ฬ { 'Diӑmond_C::헬ฬ => ' . (shift)->next::method() }
+ sub fಓ { 'Diӑmond_C::fಓ => ' . (shift)->next::method() }
+}
+{
+ package Diӑmond_D;
+ use base ('Diӑmond_B', 'Diӑmond_C');
+ use mro 'c3';
+
+ sub fಓ { 'Diӑmond_D::fಓ => ' . (shift)->next::method() }
+}
+
+ok(eq_array(
+ mro::get_linear_isa('Diӑmond_D'),
+ [ qw(Diӑmond_D Diӑmond_B Diӑmond_C Diӑmond_A) ]
+), '... got the right MRO for Diӑmond_D');
+
+is(Diӑmond_D->헬ฬ, 'Diӑmond_C::헬ฬ => Diӑmond_A::헬ฬ', '... method resolved itself as expected');
+
+is(Diӑmond_D->can('헬ฬ')->('Diӑmond_D'),
+ 'Diӑmond_C::헬ฬ => Diӑmond_A::헬ฬ',
+ '... can(method) resolved itself as expected');
+
+is(UNIVERSAL::can("Diӑmond_D", '헬ฬ')->('Diӑmond_D'),
+ 'Diӑmond_C::헬ฬ => Diӑmond_A::헬ฬ',
+ '... can(method) resolved itself as expected');
+
+is(Diӑmond_D->fಓ,
+ 'Diӑmond_D::fಓ => Diӑmond_B::fಓ => Diӑmond_C::fಓ => Diӑmond_A::fಓ',
+ '... method fಓ resolved itself as expected');
Added: vendor/perl/dist/t/mro/next_skip_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/next_skip_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/next_skip_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,77 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+require q(./test.pl); plan(tests => 10);
+
+use utf8;
+use open qw( :utf8 :std );
+
+=pod
+
+This tests the classic diamond inheritance pattern.
+
+ <A>
+ / \
+<B> <C>
+ \ /
+ <D>
+
+=cut
+
+{
+ package Diᚪၚd_A;
+ use mro 'c3';
+ sub ᴮaȐ { 'Diᚪၚd_A::ᴮaȐ' }
+ sub 바ź { 'Diᚪၚd_A::바ź' }
+}
+{
+ package Diᚪၚd_B;
+ use base 'Diᚪၚd_A';
+ use mro 'c3';
+ sub 바ź { 'Diᚪၚd_B::바ź => ' . (shift)->next::method() }
+}
+{
+ package Diᚪၚd_C;
+ use mro 'c3';
+ use base 'Diᚪၚd_A';
+ sub ᕘ { 'Diᚪၚd_C::ᕘ' }
+ sub buƵ { 'Diᚪၚd_C::buƵ' }
+
+ sub woz { 'Diᚪၚd_C::woz' }
+ sub maᐇbʚ { 'Diᚪၚd_C::maᐇbʚ' }
+}
+{
+ package Diᚪၚd_D;
+ use base ('Diᚪၚd_B', 'Diᚪၚd_C');
+ use mro 'c3';
+ sub ᕘ { 'Diᚪၚd_D::ᕘ => ' . (shift)->next::method() }
+ sub ᴮaȐ { 'Diᚪၚd_D::ᴮaȐ => ' . (shift)->next::method() }
+ sub buƵ { 'Diᚪၚd_D::buƵ => ' . (shift)->바ź() }
+ sub fuz { 'Diᚪၚd_D::fuz => ' . (shift)->next::method() }
+
+ sub woz { 'Diᚪၚd_D::woz can => ' . ((shift)->next::can() ? 1 : 0) }
+ sub noz { 'Diᚪၚd_D::noz can => ' . ((shift)->next::can() ? 1 : 0) }
+
+ sub maᐇbʚ { 'Diᚪၚd_D::maᐇbʚ => ' . ((shift)->maybe::next::method() || 0) }
+ sub ᒧyベ { 'Diᚪၚd_D::ᒧyベ => ' . ((shift)->maybe::next::method() || 0) }
+
+}
+
+ok(eq_array(
+ mro::get_linear_isa('Diᚪၚd_D'),
+ [ qw(Diᚪၚd_D Diᚪၚd_B Diᚪၚd_C Diᚪၚd_A) ]
+), '... got the right MRO for Diᚪၚd_D');
+
+is(Diᚪၚd_D->ᕘ, 'Diᚪၚd_D::ᕘ => Diᚪၚd_C::ᕘ', '... skipped B and went to C correctly');
+is(Diᚪၚd_D->ᴮaȐ, 'Diᚪၚd_D::ᴮaȐ => Diᚪၚd_A::ᴮaȐ', '... skipped B & C and went to A correctly');
+is(Diᚪၚd_D->바ź, 'Diᚪၚd_B::바ź => Diᚪၚd_A::바ź', '... called B method, skipped C and went to A correctly');
+is(Diᚪၚd_D->buƵ, 'Diᚪၚd_D::buƵ => Diᚪၚd_B::바ź => Diᚪၚd_A::바ź', '... called D method dispatched to , different method correctly');
+eval { Diᚪၚd_D->fuz };
+like($@, qr/^No next::method 'fuz' found for Diᚪၚd_D/u, '... cannot re-dispatch to a method which is not there');
+is(Diᚪၚd_D->woz, 'Diᚪၚd_D::woz can => 1', '... can re-dispatch figured out correctly');
+is(Diᚪၚd_D->noz, 'Diᚪၚd_D::noz can => 0', '... cannot re-dispatch figured out correctly');
+
+is(Diᚪၚd_D->maᐇbʚ, 'Diᚪၚd_D::maᐇbʚ => Diᚪၚd_C::maᐇbʚ', '... redispatched D to C when it exists');
+is(Diᚪၚd_D->ᒧyベ, 'Diᚪၚd_D::ᒧyベ => 0', '... quietly failed redispatch from D');
Added: vendor/perl/dist/t/mro/overload_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/overload_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/overload_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,57 @@
+#!./perl
+
+use strict;
+use warnings;
+BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+}
+
+use utf8;
+use open qw( :utf8 :std );
+
+require q(./test.pl); plan(tests => 7);
+
+{
+ package 밧e텟ʇ;
+ use strict;
+ use warnings;
+ use mro 'c3';
+
+ package Ov에rꪩࡃᛝTeŝṱ;
+ use strict;
+ use warnings;
+ use mro 'c3';
+ use base '밧e텟ʇ';
+ use overload '""' => sub { ref(shift) . " stringified" },
+ fallback => 1;
+
+ sub ネᚹ { bless {} => shift }
+
+ package 읺ҎꀀḮṆᵷꜰ롬ᵕveŔŁoad엗텟ᵵ;
+ use strict;
+ use warnings;
+ use base 'Ov에rꪩࡃᛝTeŝṱ';
+ use mro 'c3';
+}
+
+my $x = 읺ҎꀀḮṆᵷꜰ롬ᵕveŔŁoad엗텟ᵵ->ネᚹ();
+object_ok($x, '읺ҎꀀḮṆᵷꜰ롬ᵕveŔŁoad엗텟ᵵ');
+
+my $y = Ov에rꪩࡃᛝTeŝṱ->ネᚹ();
+object_ok($y, 'Ov에rꪩࡃᛝTeŝṱ');
+
+is("$x", '읺ҎꀀḮṆᵷꜰ롬ᵕveŔŁoad엗텟ᵵ stringified', '... got the right value when stringifing');
+is("$y", 'Ov에rꪩࡃᛝTeŝṱ stringified', '... got the right value when stringifing');
+
+ok(($y eq 'Ov에rꪩࡃᛝTeŝṱ stringified'), '... eq was handled correctly');
+
+my $result;
+eval {
+ $result = $x eq '읺ҎꀀḮṆᵷꜰ롬ᵕveŔŁoad엗텟ᵵ stringified'
+};
+ok(!$@, '... this should not throw an exception');
+ok($result, '... and we should get the true value');
+
Added: vendor/perl/dist/t/mro/package_aliases_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/package_aliases_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/package_aliases_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,469 @@
+#!./perl
+
+BEGIN {
+ $ENV{PERL_UNICODE} = 0;
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+ require q(./test.pl);
+}
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+plan(tests => 52);
+
+{
+ package Neẁ;
+ use strict;
+ use warnings;
+
+ package ऑlㄉ;
+ use strict;
+ use warnings;
+
+ {
+ no strict 'refs';
+ *{'ऑlㄉ::'} = *{'Neẁ::'};
+ }
+}
+
+ok (ऑlㄉ->isa(Neẁ::), 'ऑlㄉ inherits from Neẁ');
+ok (Neẁ->isa(ऑlㄉ::), 'Neẁ inherits from ऑlㄉ');
+
+object_ok (bless ({}, ऑlㄉ::), Neẁ::, 'ऑlㄉ object');
+object_ok (bless ({}, Neẁ::), ऑlㄉ::, 'Neẁ object');
+
+
+# Test that replacing a package by assigning to an existing glob
+# invalidates the isa caches
+for(
+ {
+ name => 'assigning a glob to a glob',
+ code => '$life_raft = $::{"lㅔf::"}; *lㅔf:: = $::{"릭Ⱶᵀ::"}',
+ },
+ {
+ name => 'assigning a string to a glob',
+ code => '$life_raft = $::{"lㅔf::"}; *lㅔf:: = "릭Ⱶᵀ::"',
+ },
+ {
+ name => 'assigning a stashref to a glob',
+ code => '$life_raft = \%lㅔf::; *lㅔf:: = \%릭Ⱶᵀ::',
+ },
+) {
+my $prog = q~
+ BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+ }
+ use utf8;
+ use open qw( :utf8 :std );
+
+ @숩cਲꩋ::ISA = "lㅔf";
+ @lㅔf::ISA = "톺ĺФț";
+
+ sub 톺ĺФț::Sᑊeಅḱ { "Woof!" }
+ sub ᴖ릭ᚽʇ::Sᑊeಅḱ { "Bow-wow!" }
+
+ my $thing = bless [], "숩cਲꩋ";
+
+ # mro_package_moved needs to know to skip non-globs
+ $릭Ⱶᵀ::{"ᚷꝆエcƙ::"} = 3;
+
+ @릭Ⱶᵀ::ISA = 'ᴖ릭ᚽʇ';
+ my $life_raft;
+ __code__;
+
+ print $thing->Sᑊeಅḱ, "\n";
+
+ undef $life_raft;
+ print $thing->Sᑊeಅḱ, "\n";
+ ~ =~ s\__code__\$$_{code}\r; #\
+utf8::encode($prog);
+ fresh_perl_is
+ $prog,
+ "Bow-wow!\nBow-wow!\n",
+ {},
+ "replacing packages by $$_{name} updates isa caches";
+}
+
+# Similar test, but with nested packages
+#
+# 톺ĺФț (Woof) ᴖ릭ᚽʇ (Bow-wow)
+# | |
+# lㅔf::Side <- 릭Ⱶᵀ::Side
+# |
+# 숩cਲꩋ
+#
+# This test assigns 릭Ⱶᵀ:: to lㅔf::, indirectly making lㅔf::Side an
+# alias to 릭Ⱶᵀ::Side (following the arrow in the diagram).
+for(
+ {
+ name => 'assigning a glob to a glob',
+ code => '$life_raft = $::{"lㅔf::"}; *lㅔf:: = $::{"릭Ⱶᵀ::"}',
+ },
+ {
+ name => 'assigning a string to a glob',
+ code => '$life_raft = $::{"lㅔf::"}; *lㅔf:: = "릭Ⱶᵀ::"',
+ },
+ {
+ name => 'assigning a stashref to a glob',
+ code => '$life_raft = \%lㅔf::; *lㅔf:: = \%릭Ⱶᵀ::',
+ },
+) {
+ my $prog = q~
+ BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+ }
+ use utf8;
+ use open qw( :utf8 :std );
+ @숩cਲꩋ::ISA = "lㅔf::Side";
+ @lㅔf::Side::ISA = "톺ĺФț";
+
+ sub 톺ĺФț::Sᑊeಅḱ { "Woof!" }
+ sub ᴖ릭ᚽʇ::Sᑊeಅḱ { "Bow-wow!" }
+
+ my $thing = bless [], "숩cਲꩋ";
+
+ @릭Ⱶᵀ::Side::ISA = 'ᴖ릭ᚽʇ';
+ my $life_raft;
+ __code__;
+
+ print $thing->Sᑊeಅḱ, "\n";
+
+ undef $life_raft;
+ print $thing->Sᑊeಅḱ, "\n";
+ ~ =~ s\__code__\$$_{code}\r;
+ utf8::encode($prog);
+
+ fresh_perl_is
+ $prog,
+ "Bow-wow!\nBow-wow!\n",
+ {},
+ "replacing nested packages by $$_{name} updates isa caches";
+}
+
+# Another nested package test, in which the isa cache needs to be reset on
+# the subclass of a package that does not exist.
+#
+# Parenthesized packages do not exist.
+#
+# ɵűʇㄦ::인ንʵ ( cฬnए::인ንʵ )
+# | |
+# Lфť R익hȚ
+#
+# ɵűʇㄦ -> cฬnए
+#
+# This test assigns ɵűʇㄦ:: to cฬnए::, making cฬnए::인ንʵ an alias to
+# ɵűʇㄦ::인ንʵ.
+#
+# Then we also run the test again, but without ɵűʇㄦ::인ንʵ
+for(
+ {
+ name => 'assigning a glob to a glob',
+ code => '*cฬnए:: = *ɵűʇㄦ::',
+ },
+ {
+ name => 'assigning a string to a glob',
+ code => '*cฬnए:: = "ɵűʇㄦ::"',
+ },
+ {
+ name => 'assigning a stashref to a glob',
+ code => '*cฬnए:: = \%ɵűʇㄦ::',
+ },
+) {
+ for my $tail ('인ንʵ', '인ንʵ::', '인ንʵ:::', '인ንʵ::::') {
+ my $prog = q~
+ BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+ }
+ use utf8;
+ use open qw( :utf8 :std );
+ use Encode ();
+
+ if (grep /\P{ASCII}/, @ARGV) {
+ @ARGV = map { Encode::decode("UTF-8", $_) } @ARGV;
+ }
+
+ my $tail = shift;
+ @Lфť::ISA = "ɵűʇㄦ::$tail";
+ @R익hȚ::ISA = "cฬnए::$tail";
+ bless [], "ɵűʇㄦ::$tail"; # autovivify the stash
+
+ __code__;
+
+ print "ok 1", "\n" if Lфť->isa("cฬnए::$tail");
+ print "ok 2", "\n" if R익hȚ->isa("ɵűʇㄦ::$tail");
+ print "ok 3", "\n" if R익hȚ->isa("cฬnए::$tail");
+ print "ok 4", "\n" if Lфť->isa("ɵűʇㄦ::$tail");
+ ~ =~ s\__code__\$$_{code}\r;
+ utf8::encode($prog);
+ fresh_perl_is
+ $prog,
+ "ok 1\nok 2\nok 3\nok 4\n",
+ { args => [$tail] },
+ "replacing nonexistent nested packages by $$_{name} updates isa caches"
+ ." ($tail)";
+
+ # Same test but with the subpackage autovivified after the assignment
+ $prog = q~
+ BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+ }
+ use utf8;
+ use open qw( :utf8 :std );
+ use Encode ();
+
+ if (grep /\P{ASCII}/, @ARGV) {
+ @ARGV = map { Encode::decode("UTF-8", $_) } @ARGV;
+ }
+
+ my $tail = shift;
+ @Lфť::ISA = "ɵűʇㄦ::$tail";
+ @R익hȚ::ISA = "cฬnए::$tail";
+
+ __code__;
+
+ bless [], "ɵűʇㄦ::$tail";
+
+ print "ok 1", "\n" if Lфť->isa("cฬnए::$tail");
+ print "ok 2", "\n" if R익hȚ->isa("ɵűʇㄦ::$tail");
+ print "ok 3", "\n" if R익hȚ->isa("cฬnए::$tail");
+ print "ok 4", "\n" if Lфť->isa("ɵűʇㄦ::$tail");
+ ~ =~ s\__code__\$$_{code}\r;
+ utf8::encode($prog);
+ fresh_perl_is
+ $prog,
+ "ok 1\nok 2\nok 3\nok 4\n",
+ { args => [$tail] },
+ "Giving nonexistent packages multiple effective names by $$_{name}"
+ . " ($tail)";
+ }
+}
+
+no warnings; # temporary; there seems to be a scoping bug, as this does not
+ # work when placed in the blocks below
+
+# Test that deleting stash elements containing
+# subpackages also invalidates the isa cache.
+# Maybe this does not belong in package_aliases.t, but it is closely
+# related to the tests immediately preceding.
+{
+ @ቹऋ::ISA = ("Cuȓ", "ฮンᛞ");
+ @Cuȓ::ISA = "Hyḹ앛Ҭテ";
+
+ sub Hyḹ앛Ҭテ::Sᑊeಅḱ { "Arff!" }
+ sub ฮンᛞ::Sᑊeಅḱ { "Woof!" }
+
+ my $pet = bless [], "ቹऋ";
+
+ my $life_raft = delete $::{'Cuȓ::'};
+
+ is $pet->Sᑊeಅḱ, 'Woof!',
+ 'deleting a stash from its parent stash invalidates the isa caches';
+
+ undef $life_raft;
+ is $pet->Sᑊeಅḱ, 'Woof!',
+ 'the deleted stash is gone completely when freed';
+}
+# Same thing, but with nested packages
+{
+ @펱ᑦ::ISA = ("Cuȓȓ::Cuȓȓ::Cuȓȓ", "ɥwn");
+ @Cuȓȓ::Cuȓȓ::Cuȓȓ::ISA = "lȺt랕ᚖ";
+
+ sub lȺt랕ᚖ::Sᑊeಅḱ { "Arff!" }
+ sub ɥwn::Sᑊeಅḱ { "Woof!" }
+
+ my $pet = bless [], "펱ᑦ";
+
+ my $life_raft = delete $::{'Cuȓȓ::'};
+
+ is $pet->Sᑊeಅḱ, 'Woof!',
+ 'deleting a stash from its parent stash resets caches of substashes';
+
+ undef $life_raft;
+ is $pet->Sᑊeಅḱ, 'Woof!',
+ 'the deleted substash is gone completely when freed';
+}
+
+# [perl #77358]
+my $prog = q~#!perl -w
+ BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+ }
+ use utf8;
+ use open qw( :utf8 :std );
+ @펱ᑦ::ISA = "T잌ዕ";
+ @T잌ዕ::ISA = "Bᛆヶṝ";
+
+ sub Bᛆヶṝ::Sᑊeಅḱ { print "Woof!\n" }
+ sub lȺt랕ᚖ::Sᑊeಅḱ { print "Bow-wow!\n" }
+
+ my $pet = bless [], "펱ᑦ";
+
+ $pet->Sᑊeಅḱ;
+
+ sub ດƓ::Sᑊeಅḱ { print "Hello.\n" } # strange ດƓ!
+ @ດƓ::ISA = 'lȺt랕ᚖ';
+ *T잌ዕ:: = delete $::{'ດƓ::'};
+
+ $pet->Sᑊeಅḱ;
+ ~;
+utf8::encode($prog);
+fresh_perl_is
+ $prog,
+ "Woof!\nHello.\n",
+ { stderr => 1 },
+ "Assigning a nameless package over one w/subclasses updates isa caches";
+
+# mro_package_moved needs to make a distinction between replaced and
+# assigned stashes when keeping track of what it has seen so far.
+no warnings; {
+ no strict 'refs';
+
+ sub ʉ::bᓗnǩ::bᓗnǩ::ພo { "bbb" }
+ sub ᵛeↄl움::ພo { "lasrevinu" }
+ @ݏ엗Ƚeᵬૐᵖ::ISA = qw 'ພo::bᓗnǩ::bᓗnǩ ᵛeↄl움';
+ *ພo::ବㄗ:: = *ʉ::bᓗnǩ::; # now ʉ::bᓗnǩ:: is on both sides
+ *ພo:: = *ʉ::; # here ʉ::bᓗnǩ:: is both deleted and added
+ *ʉ:: = *ቦᵕ::; # now it is only known as ພo::bᓗnǩ::
+
+ # At this point, before the bug was fixed, %ພo::bᓗnǩ::bᓗnǩ:: ended
+ # up with no effective name, allowing it to be deleted without updating
+ # its subclassesâ caches.
+
+ my $accum = '';
+
+ $accum .= 'ݏ엗Ƚeᵬૐᵖ'->ພo; # bbb
+ delete ${"ພo::bᓗnǩ::"}{"bᓗnǩ::"};
+ $accum .= 'ݏ엗Ƚeᵬૐᵖ'->ພo; # bbb (Oops!)
+ @ݏ엗Ƚeᵬૐᵖ::ISA = @ݏ엗Ƚeᵬૐᵖ::ISA;
+ $accum .= 'ݏ엗Ƚeᵬૐᵖ'->ພo; # lasrevinu
+
+ is $accum, 'bbblasrevinulasrevinu',
+ 'nested classes deleted & added simultaneously';
+}
+use warnings;
+
+# mro_package_moved needs to check for self-referential packages.
+# This broke Text::Template [perl #78362].
+watchdog 3;
+*ᕘ:: = \%::;
+*Aᶜme::Mῌ::Aᶜme:: = \*Aᶜme::; # indirect self-reference
+pass("mro_package_moved and self-referential packages");
+
+# Deleting a glob whose name does not indicate its location in the symbol
+# table but which nonetheless *is* in the symbol table.
+{
+ no strict refs=>;
+ no warnings;
+ @ოƐ::mഒrェ::ISA = "foᚒ";
+ sub foᚒ::ວmᑊ { "aoeaa" }
+ *ťວ:: = *ოƐ::;
+ delete $::{"ოƐ::"};
+ @C힐dᒡl았::ISA = 'ťວ::mഒrェ';
+ my $accum = 'C힐dᒡl았'->ວmᑊ . '-';
+ my $life_raft = delete ${"ťວ::"}{"mഒrェ::"};
+ $accum .= eval { 'C힐dᒡl았'->ວmᑊ } // '<undef>';
+ is $accum, 'aoeaa-<undef>',
+ 'Deleting globs whose loc in the symtab differs from gv_fullname'
+}
+
+# Pathological test for undeffing a stash that has an alias.
+*ᵍh엞:: = *ኔƞ::;
+@숩cਲꩋ::ISA = 'ᵍh엞';
+undef %ᵍh엞::;
+sub F렐ᛔ::ວmᑊ { "clumpren" }
+eval '
+ $ኔƞ::whatever++;
+ @ኔƞ::ISA = "F렐ᛔ";
+';
+is eval { '숩cਲꩋ'->ວmᑊ }, 'clumpren',
+ 'Changes to @ISA after undef via original name';
+undef %ᵍh엞::;
+eval '
+ $ᵍh엞::whatever++;
+ @ᵍh엞::ISA = "F렐ᛔ";
+';
+is eval { '숩cਲꩋ'->ວmᑊ }, 'clumpren',
+ 'Changes to @ISA after undef via alias';
+
+
+# Packages whose containing stashes have aliases must lose all names cor-
+# responding to that container when detached.
+{
+ {package śmᛅḙ::በɀ} # autovivify
+ *pḢ린ᚷ:: = *śmᛅḙ::; # śmᛅḙ::በɀ now also named pḢ린ᚷ::በɀ
+ *본:: = delete $śmᛅḙ::{"በɀ::"};
+ # In 5.13.7, it has now lost its śmᛅḙ::በɀ name (reverting to pḢ린ᚷ::በɀ
+ # as the effective name), and gained 본 as an alias.
+ # In 5.13.8, both śmᛅḙ::በɀ *and* pḢ린ᚷ::በɀ names are deleted.
+
+ # Make some methods
+ no strict 'refs';
+ *{"pḢ린ᚷ::በɀ::fฤmᛈ"} = sub { "hello" };
+ sub Fルmፕṟ::fฤmᛈ { "good bye" };
+
+ @ᵇるᣘ킨::ISA = qw "본 Fルmፕṟ"; # now wrongly inherits from pḢ린ᚷ::በɀ
+
+ is fฤmᛈ ᵇるᣘ킨, "good bye",
+ 'detached stashes lose all names corresponding to the containing stash';
+}
+
+# Crazy edge cases involving packages ending with a single :
+@촐oン::ISA = 'ᚖგ:'; # pun intended!
+bless [], "ᚖგ:"; # autovivify the stash
+ok "촐oン"->isa("ᚖგ:"), 'class isa "class:"';
+{ no strict 'refs'; *{"ᚖგ:::"} = *ᚖგ:: }
+ok "촐oン"->isa("ᚖგ"),
+ 'isa(ᕘ) when inheriting from "class:" which is an alias for ᕘ';
+{
+ no warnings;
+ # The next line of code is *not* normative. If the structure changes,
+ # this line needs to change, too.
+ my $ᕘ = delete $ᚖგ::{":"};
+ ok !촐oン->isa("ᚖგ"),
+ 'class that isa "class:" no longer isa ᕘ if "class:" has been deleted';
+}
+@촐oン::ISA = ':';
+bless [], ":";
+ok "촐oン"->isa(":"), 'class isa ":"';
+{ no strict 'refs'; *{":::"} = *ፑňṪu앝ȋ온:: }
+ok "촐oン"->isa("ፑňṪu앝ȋ온"),
+ 'isa(ᕘ) when inheriting from ":" which is an alias for ᕘ';
+@촐oン::ISA = 'ᚖგ:';
+bless [], "ᚖგ:";
+{
+ no strict 'refs';
+ my $life_raft = \%{"ᚖგ:::"};
+ *{"ᚖგ:::"} = \%ᚖგ::;
+ ok "촐oン"->isa("ᚖგ"),
+ 'isa(ᕘ) when inheriting from "class:" after hash-to-glob assignment';
+}
+@촐oン::ISA = 'ŏ:';
+bless [], "ŏ:";
+{
+ no strict 'refs';
+ my $life_raft = \%{"ŏ:::"};
+ *{"ŏ:::"} = "ᚖგ::";
+ ok "촐oン"->isa("ᚖგ"),
+ 'isa(ᕘ) when inheriting from "class:" after string-to-glob assignment';
+}
+=cut
Added: vendor/perl/dist/t/mro/pkg_gen_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/pkg_gen_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/pkg_gen_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,44 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+
+chdir 't' if -d 't';
+require q(./test.pl); plan(tests => 7);
+
+require mro;
+
+{
+ package ᕘ;
+ our @ISA = qw//;
+}
+
+ok(!mro::get_pkg_gen('레알ឭ되s놑Eξsᴛ'),
+ "pkg_gen 0 for non-existent pkg");
+
+my $f_gen = mro::get_pkg_gen('ᕘ');
+ok($f_gen > 0, 'ᕘ pkg_gen > 0');
+
+{
+ no warnings 'once';
+ *ᕘ::ᕘ_Ƒ운ℭ = sub { 123 };
+}
+my $new_f_gen = mro::get_pkg_gen('ᕘ');
+ok($new_f_gen > $f_gen, 'ᕘ pkg_gen incs for methods');
+$f_gen = $new_f_gen;
+
+@ᕘ::ISA = qw/Bar/;
+$new_f_gen = mro::get_pkg_gen('ᕘ');
+ok($new_f_gen > $f_gen, 'ᕘ pkg_gen incs for @ISA');
+
+undef %ᕘ::;
+is(mro::get_pkg_gen('ᕘ'), 1, "pkg_gen 1 for undef %Pkg::");
+
+delete $::{"ᕘ::"};
+is(mro::get_pkg_gen('ᕘ'), 0, 'pkg_gen 0 for delete $::{Pkg::}');
+
+delete $::{"ㄑଊx::"};
+push @ㄑଊx::ISA, "Woot"; # should not segfault
+ok(1, "No segfault on modification of ISA in a deleted stash");
Added: vendor/perl/dist/t/mro/recursion_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/recursion_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/recursion_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,102 @@
+#!./perl
+
+use strict;
+use warnings;
+BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+}
+use utf8;
+use open qw( :utf8 :std );
+
+require './test.pl';
+
+plan(skip_all => "Your system has no SIGALRM") if !exists $SIG{ALRM};
+plan(tests => 8);
+
+require mro;
+
+=pod
+
+These are like the 010_complex_merge_classless test,
+but an infinite loop has been made in the heirarchy,
+to test that we can fail cleanly instead of going
+into an infinite loop
+
+=cut
+
+# initial setup, everything sane
+{
+ package ƙ;
+ use mro 'c3';
+ our @ISA = qw/ᶨ ィ/;
+ package ᶨ;
+ use mro 'c3';
+ our @ISA = qw/f/;
+ package ィ;
+ use mro 'c3';
+ our @ISA = qw/ʰ f/;
+ package ʰ;
+ use mro 'c3';
+ our @ISA = qw/ᶢ/;
+ package ᶢ;
+ use mro 'c3';
+ our @ISA = qw/ᛞ/;
+ package f;
+ use mro 'c3';
+ our @ISA = qw/ǝ/;
+ package ǝ;
+ use mro 'c3';
+ our @ISA = qw/ᛞ/;
+ package ᛞ;
+ use mro 'c3';
+ our @ISA = qw/Ạ B ʗ/;
+ package ʗ;
+ use mro 'c3';
+ our @ISA = qw//;
+ package B;
+ use mro 'c3';
+ our @ISA = qw//;
+ package Ạ;
+ use mro 'c3';
+ our @ISA = qw//;
+}
+
+# A series of 8 aberations that would cause infinite loops,
+# each one undoing the work of the previous
+my @loopies = (
+ sub { @ǝ::ISA = qw/f/ },
+ sub { @ǝ::ISA = qw/ᛞ/; @ʗ::ISA = qw/f/ },
+ sub { @ʗ::ISA = qw//; @Ạ::ISA = qw/ƙ/ },
+ sub { @Ạ::ISA = qw//; @ᶨ::ISA = qw/f ƙ/ },
+ sub { @ᶨ::ISA = qw/f/; @ʰ::ISA = qw/ƙ ᶢ/ },
+ sub { @ʰ::ISA = qw/ᶢ/; @B::ISA = qw/B/ },
+ sub { @B::ISA = qw//; @ƙ::ISA = qw/ƙ ᶨ ィ/ },
+ sub { @ƙ::ISA = qw/ᶨ ィ/; @ᛞ::ISA = qw/Ạ ʰ B ʗ/ },
+);
+
+foreach my $loopy (@loopies) {
+ eval {
+ local $SIG{ALRM} = sub { die "ALRMTimeout" };
+ alarm(3);
+ $loopy->();
+ mro::get_linear_isa('ƙ', 'c3');
+ };
+
+ if(my $err = $@) {
+ if($err =~ /ALRMTimeout/) {
+ ok(0, "Loop terminated by SIGALRM");
+ }
+ elsif($err =~ /Recursive inheritance detected/) {
+ ok(1, "Graceful exception thrown");
+ }
+ else {
+ ok(0, "Unrecognized exception: $err");
+ }
+ }
+ else {
+ ok(0, "Infinite loop apparently succeeded???");
+ }
+}
Added: vendor/perl/dist/t/mro/recursion_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/recursion_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/recursion_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,89 @@
+#!./perl
+
+use strict;
+use warnings;
+BEGIN {
+ unless (-d 'blib') {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ }
+}
+use utf8;
+use open qw( :utf8 :std );
+
+require './test.pl';
+
+plan(skip_all => "Your system has no SIGALRM") if !exists $SIG{ALRM};
+plan(tests => 8);
+
+=pod
+
+These are like the 010_complex_merge_classless test,
+but an infinite loop has been made in the heirarchy,
+to test that we can fail cleanly instead of going
+into an infinite loop
+
+=cut
+
+# initial setup, everything sane
+{
+ package ƙ;
+ our @ISA = qw/ᶨ ィ/;
+ package ᶨ;
+ our @ISA = qw/f/;
+ package ィ;
+ our @ISA = qw/ʰ f/;
+ package ʰ;
+ our @ISA = qw/ᶢ/;
+ package ᶢ;
+ our @ISA = qw/ᛞ/;
+ package f;
+ our @ISA = qw/ǝ/;
+ package ǝ;
+ our @ISA = qw/ᛞ/;
+ package ᛞ;
+ our @ISA = qw/Ạ B ʗ/;
+ package ʗ;
+ our @ISA = qw//;
+ package B;
+ our @ISA = qw//;
+ package Ạ;
+ our @ISA = qw//;
+}
+
+# A series of 8 aberations that would cause infinite loops,
+# each one undoing the work of the previous
+my @loopies = (
+ sub { @ǝ::ISA = qw/f/ },
+ sub { @ǝ::ISA = qw/ᛞ/; @ʗ::ISA = qw/f/ },
+ sub { @ʗ::ISA = qw//; @Ạ::ISA = qw/ƙ/ },
+ sub { @Ạ::ISA = qw//; @ᶨ::ISA = qw/f ƙ/ },
+ sub { @ᶨ::ISA = qw/f/; @ʰ::ISA = qw/ƙ ᶢ/ },
+ sub { @ʰ::ISA = qw/ᶢ/; @B::ISA = qw/B/ },
+ sub { @B::ISA = qw//; @ƙ::ISA = qw/ƙ ᶨ ィ/ },
+ sub { @ƙ::ISA = qw/ᶨ ィ/; @ᛞ::ISA = qw/Ạ ʰ B ʗ/ },
+);
+
+foreach my $loopy (@loopies) {
+ eval {
+ local $SIG{ALRM} = sub { die "ALRMTimeout" };
+ alarm(3);
+ $loopy->();
+ mro::get_linear_isa('ƙ', 'dfs');
+ };
+
+ if(my $err = $@) {
+ if($err =~ /ALRMTimeout/) {
+ ok(0, "Loop terminated by SIGALRM");
+ }
+ elsif($err =~ /Recursive inheritance detected/) {
+ ok(1, "Graceful exception thrown");
+ }
+ else {
+ ok(0, "Unrecognized exception: $err");
+ }
+ }
+ else {
+ ok(0, "Infinite loop apparently succeeded???");
+ }
+}
Added: vendor/perl/dist/t/mro/vulcan_c3_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/vulcan_c3_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/vulcan_c3_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,67 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+require q(./test.pl); plan(tests => 1);
+
+=pod
+
+example taken from: L<http://www.opendylan.org/books/drm/Method_Dispatch>
+
+ 옵젳Ṯ
+ ^
+ |
+ ᓕᵮꡠFᚖᶭ
+ ^ ^
+ / \
+ SㄣチenŦ 빞엗ᱞ
+ ^ ^
+ | |
+ ᕟ텔li겐ț Hʉ만ӫ읻
+ ^ ^
+ \ /
+ ቩᓪ찬
+
+ define class <SㄣチenŦ> (<ᓕᵮꡠFᚖᶭ>) end class;
+ define class <빞엗ᱞ> (<ᓕᵮꡠFᚖᶭ>) end class;
+ define class <ᕟ텔li겐ț> (<SㄣチenŦ>) end class;
+ define class <Hʉ만ӫ읻> (<빞엗ᱞ>) end class;
+ define class <ቩᓪ찬> (<ᕟ텔li겐ț>, <Hʉ만ӫ읻>) end class;
+
+=cut
+
+{
+ package 옵젳Ṯ;
+ use mro 'c3';
+
+ package ᓕᵮꡠFᚖᶭ;
+ use mro 'c3';
+ use base '옵젳Ṯ';
+
+ package SㄣチenŦ;
+ use mro 'c3';
+ use base 'ᓕᵮꡠFᚖᶭ';
+
+ package 빞엗ᱞ;
+ use mro 'c3';
+ use base 'ᓕᵮꡠFᚖᶭ';
+
+ package ᕟ텔li겐ț;
+ use mro 'c3';
+ use base 'SㄣチenŦ';
+
+ package Hʉ만ӫ읻;
+ use mro 'c3';
+ use base '빞엗ᱞ';
+
+ package ቩᓪ찬;
+ use mro 'c3';
+ use base ('ᕟ텔li겐ț', 'Hʉ만ӫ읻');
+}
+
+ok(eq_array(
+ mro::get_linear_isa('ቩᓪ찬'),
+ [ qw(ቩᓪ찬 ᕟ텔li겐ț SㄣチenŦ Hʉ만ӫ읻 빞엗ᱞ ᓕᵮꡠFᚖᶭ 옵젳Ṯ) ]
+), '... got the right MRO for the ቩᓪ찬 Dylan Example');
Added: vendor/perl/dist/t/mro/vulcan_dfs_utf8.t
===================================================================
--- vendor/perl/dist/t/mro/vulcan_dfs_utf8.t (rev 0)
+++ vendor/perl/dist/t/mro/vulcan_dfs_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,68 @@
+#!./perl
+
+use strict;
+use warnings;
+use utf8;
+use open qw( :utf8 :std );
+require q(./test.pl); plan(tests => 1);
+
+
+=pod
+
+example taken from: L<http://www.opendylan.org/books/drm/Method_Dispatch>
+
+ 옵젳Ṯ
+ ^
+ |
+ ᓕᵮꡠFᚖᶭ
+ ^ ^
+ / \
+ SㄣチenŦ 빞엗ᱞ
+ ^ ^
+ | |
+ ᕟ텔li겐ț Hʉ만ӫ읻
+ ^ ^
+ \ /
+ ቩᓪ찬
+
+ define class <SㄣチenŦ> (<life-form>) end class;
+ define class <빞엗ᱞ> (<life-form>) end class;
+ define class <ᕟ텔li겐ț> (<SㄣチenŦ>) end class;
+ define class <Hʉ만ӫ읻> (<빞엗ᱞ>) end class;
+ define class <ቩᓪ찬> (<ᕟ텔li겐ț>, <Hʉ만ӫ읻>) end class;
+
+=cut
+
+{
+ package 옵젳Ṯ;
+ use mro 'dfs';
+
+ package ᓕᵮꡠFᚖᶭ;
+ use mro 'dfs';
+ use base '옵젳Ṯ';
+
+ package SㄣチenŦ;
+ use mro 'dfs';
+ use base 'ᓕᵮꡠFᚖᶭ';
+
+ package 빞엗ᱞ;
+ use mro 'dfs';
+ use base 'ᓕᵮꡠFᚖᶭ';
+
+ package ᕟ텔li겐ț;
+ use mro 'dfs';
+ use base 'SㄣチenŦ';
+
+ package Hʉ만ӫ읻;
+ use mro 'dfs';
+ use base '빞엗ᱞ';
+
+ package ቩᓪ찬;
+ use mro 'dfs';
+ use base ('ᕟ텔li겐ț', 'Hʉ만ӫ읻');
+}
+
+ok(eq_array(
+ mro::get_linear_isa('ቩᓪ찬'),
+ [ qw(ቩᓪ찬 ᕟ텔li겐ț SㄣチenŦ ᓕᵮꡠFᚖᶭ 옵젳Ṯ Hʉ만ӫ읻 빞엗ᱞ) ]
+), '... got the right MRO for the ቩᓪ찬 Dylan Example');
Added: vendor/perl/dist/t/op/closure_test.pl
===================================================================
--- vendor/perl/dist/t/op/closure_test.pl (rev 0)
+++ vendor/perl/dist/t/op/closure_test.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,10 @@
+# This file exists to test closure prototypes with no CvOUTSIDE. Only
+# by putting this in a separate file can we get a sub (this file’s
+# main CV) with no CvOUTSIDE. When the outer sub is freed, the inner
+# subs also get CvOUTSIDE set to null.
+
+ my $x;
+ $closure_test::s2 = sub {
+ $x;
+ sub { $x; '10 cubes' };
+ };
Added: vendor/perl/dist/t/op/coreamp.t
===================================================================
--- vendor/perl/dist/t/op/coreamp.t (rev 0)
+++ vendor/perl/dist/t/op/coreamp.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,1052 @@
+#!./perl
+
+# This file tests the results of calling subroutines in the CORE::
+# namespace with ampersand syntax. In other words, it tests the bodies of
+# the subroutines themselves, not the ops that they might inline themselves
+# as when called as barewords.
+
+# Other tests for CORE subs are in coresubs.t
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = qw(. ../lib);
+ require "test.pl";
+ $^P |= 0x100;
+}
+
+no warnings 'experimental::smartmatch';
+
+sub lis($$;$) {
+ &is(map(@$_ ? "[@{[map $_//'~~u~~', @$_]}]" : 'nought', @_[0,1]), $_[2]);
+}
+
+package hov {
+ use overload '%{}' => sub { +{} }
+}
+package sov {
+ use overload '${}' => sub { \my $x }
+}
+
+my %op_desc = (
+ evalbytes=> 'eval "string"',
+ join => 'join or string',
+ pos => 'match position',
+ prototype=> 'subroutine prototype',
+ readline => '<HANDLE>',
+ readpipe => 'quoted execution (``, qx)',
+ reset => 'symbol reset',
+ ref => 'reference-type operator',
+ undef => 'undef operator',
+);
+sub op_desc($) {
+ return $op_desc{$_[0]} || $_[0];
+}
+
+
+# This tests that the &{} syntax respects the number of arguments implied
+# by the prototype, plus some extra tests for the (_) prototype.
+sub test_proto {
+ my($o) = shift;
+
+ # Create an alias, for the caller’s convenience.
+ *{"my$o"} = \&{"CORE::$o"};
+
+ my $p = prototype "CORE::$o";
+ $p = '$;$' if $p eq '$_';
+
+ if ($p eq '') {
+ $tests ++;
+
+ eval " &CORE::$o(1) ";
+ like $@, qr/^Too many arguments for $o at /, "&$o with too many args";
+
+ }
+ elsif ($p =~ /^_;?\z/) {
+ $tests ++;
+
+ eval " &CORE::$o(1,2) ";
+ my $desc = quotemeta op_desc($o);
+ like $@, qr/^Too many arguments for $desc at /,
+ "&$o with too many args";
+
+ if (!@_) { return }
+
+ $tests += 6;
+
+ my($in,$out) = @_; # for testing implied $_
+
+ # Since we have $in and $out values, we might as well test basic amper-
+ # sand calls, too.
+
+ is &{"CORE::$o"}($in), $out, "&$o";
+ lis [&{"CORE::$o"}($in)], [$out], "&$o in list context";
+
+ $_ = $in;
+ is &{"CORE::$o"}(), $out, "&$o with no args";
+
+ # Since there is special code to deal with lexical $_, make sure it
+ # works in all cases.
+ undef $_;
+ {
+ no warnings 'experimental::lexical_topic';
+ my $_ = $in;
+ is &{"CORE::$o"}(), $out, "&$o with no args uses lexical \$_";
+ }
+ # Make sure we get the right pad under recursion
+ my $r;
+ $r = sub {
+ if($_[0]) {
+ no warnings 'experimental::lexical_topic';
+ my $_ = $in;
+ is &{"CORE::$o"}(), $out,
+ "&$o with no args uses the right lexical \$_ under recursion";
+ }
+ else {
+ &$r(1)
+ }
+ };
+ &$r(0);
+ no warnings 'experimental::lexical_topic';
+ my $_ = $in;
+ eval {
+ is "CORE::$o"->(), $out, "&$o with the right lexical \$_ in an eval"
+ };
+ }
+ elsif ($p =~ '^;([$*]+)\z') { # ;$ ;* ;$$ etc.
+ my $maxargs = length $1;
+ $tests += 1;
+ eval " &CORE::$o((1)x($maxargs+1)) ";
+ my $desc = quotemeta op_desc($o);
+ like $@, qr/^Too many arguments for $desc at /,
+ "&$o with too many args";
+ }
+ elsif ($p =~ '^([$*]+);?\z') { # Fixed-length $$$ or ***
+ my $args = length $1;
+ $tests += 2;
+ my $desc = quotemeta op_desc($o);
+ eval " &CORE::$o((1)x($args-1)) ";
+ like $@, qr/^Not enough arguments for $desc at /, "&$o w/too few args";
+ eval " &CORE::$o((1)x($args+1)) ";
+ like $@, qr/^Too many arguments for $desc at /, "&$o w/too many args";
+ }
+ elsif ($p =~ '^([$*]+);([$*]+)\z') { # Variable-length $$$ or ***
+ my $minargs = length $1;
+ my $maxargs = $minargs + length $2;
+ $tests += 2;
+ eval " &CORE::$o((1)x($minargs-1)) ";
+ like $@, qr/^Not enough arguments for $o at /, "&$o with too few args";
+ eval " &CORE::$o((1)x($maxargs+1)) ";
+ like $@, qr/^Too many arguments for $o at /, "&$o with too many args";
+ }
+ elsif ($p eq '_;$') {
+ $tests += 1;
+
+ eval " &CORE::$o(1,2,3) ";
+ like $@, qr/^Too many arguments for $o at /, "&$o with too many args";
+ }
+ elsif ($p eq '@') {
+ # Do nothing, as we cannot test for too few or too many arguments.
+ }
+ elsif ($p =~ '^[$*;]+@\z') {
+ $tests ++;
+ $p =~ ';@';
+ my $minargs = $-[0];
+ eval " &CORE::$o((1)x($minargs-1)) ";
+ my $desc = quotemeta op_desc($o);
+ like $@, qr/^Not enough arguments for $desc at /,
+ "&$o with too few args";
+ }
+ elsif ($p =~ /^\*\\\$\$(;?)\$\z/) { # *\$$$ and *\$$;$
+ $tests += 5;
+
+ eval "&CORE::$o(1,1,1,1,1)";
+ like $@, qr/^Too many arguments for $o at /,
+ "&$o with too many args";
+ eval " &CORE::$o((1)x(\$1?2:3)) ";
+ like $@, qr/^Not enough arguments for $o at /,
+ "&$o with too few args";
+ eval " &CORE::$o(1,[],1,1) ";
+ like $@, qr/^Type of arg 2 to &CORE::$o must be scalar reference at /,
+ "&$o with array ref arg";
+ eval " &CORE::$o(1,1,1,1) ";
+ like $@, qr/^Type of arg 2 to &CORE::$o must be scalar reference at /,
+ "&$o with scalar arg";
+ eval " &CORE::$o(1,bless([], 'sov'),1,1) ";
+ like $@, qr/^Type of arg 2 to &CORE::$o must be scalar reference at /,
+ "&$o with non-scalar arg w/scalar overload (which does not count)";
+ }
+ elsif ($p =~ /^\\%\$*\z/) { # \% and \%$$
+ $tests += 5;
+
+ eval "&CORE::$o(" . join(",", (1) x length $p) . ")";
+ like $@, qr/^Too many arguments for $o at /,
+ "&$o with too many args";
+ eval " &CORE::$o(" . join(",", (1) x (length($p)-2)) . ") ";
+ like $@, qr/^Not enough arguments for $o at /,
+ "&$o with too few args";
+ my $moreargs = ",1" x (length($p) - 2);
+ eval " &CORE::$o([]$moreargs) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be hash reference at /,
+ "&$o with array ref arg";
+ eval " &CORE::$o(*foo$moreargs) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be hash reference at /,
+ "&$o with typeglob arg";
+ eval " &CORE::$o(bless([], 'hov')$moreargs) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be hash reference at /,
+ "&$o with non-hash arg with hash overload (which does not count)";
+ }
+ elsif ($p =~ /^(;)?\\\[(\$\@%&?\*)](\$\@)?\z/) {
+ $tests += 3;
+
+ unless ($3) {
+ $tests ++;
+ eval " &CORE::$o(1,2) ";
+ like $@, qr/^Too many arguments for ${\op_desc($o)} at /,
+ "&$o with too many args";
+ }
+ unless ($1) {
+ $tests ++;
+ eval { &{"CORE::$o"}($3 ? 1 : ()) };
+ like $@, qr/^Not enough arguments for $o at /,
+ "&$o with too few args";
+ }
+ my $more_args = $3 ? ',1' : '';
+ eval " &CORE::$o(2$more_args) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be reference to one of(?x:
+ ) \[\Q$2\E] at /,
+ "&$o with non-ref arg";
+ eval " &CORE::$o(*STDOUT{IO}$more_args) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be reference to one of(?x:
+ ) \[\Q$2\E] at /,
+ "&$o with ioref arg";
+ my $class = ref *DATA{IO};
+ eval " &CORE::$o(bless(*DATA{IO}, 'hov')$more_args) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be reference to one of(?x:
+ ) \[\Q$2\E] at /,
+ "&$o with ioref arg with hash overload (which does not count)";
+ bless *DATA{IO}, $class;
+ if (do {$2 !~ /&/}) {
+ $tests++;
+ eval " &CORE::$o(\\&scriggle$more_args) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be reference to one (?x:
+ )of \[\Q$2\E] at /,
+ "&$o with coderef arg";
+ }
+ }
+ elsif ($p eq ';\[$*]') {
+ $tests += 4;
+
+ my $desc = quotemeta op_desc($o);
+ eval " &CORE::$o(1,2) ";
+ like $@, qr/^Too many arguments for $desc at /,
+ "&$o with too many args";
+ eval " &CORE::$o([]) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be scalar reference at /,
+ "&$o with array ref arg";
+ eval " &CORE::$o(1) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be scalar reference at /,
+ "&$o with scalar arg";
+ eval " &CORE::$o(bless([], 'sov')) ";
+ like $@, qr/^Type of arg 1 to &CORE::$o must be scalar reference at /,
+ "&$o with non-scalar arg w/scalar overload (which does not count)";
+ }
+
+ else {
+ die "Please add tests for the $p prototype";
+ }
+}
+
+# Test that &CORE::foo calls without parentheses (no new @_) can handle the
+# total absence of any @_ without crashing.
+undef *_;
+&CORE::wantarray;
+$tests++;
+pass('no crash with &CORE::foo when *_{ARRAY} is undef');
+
+test_proto '__FILE__';
+test_proto '__LINE__';
+test_proto '__PACKAGE__';
+test_proto '__SUB__';
+
+is file(), 'frob' , '__FILE__ does check its caller' ; ++ $tests;
+is line(), 5 , '__LINE__ does check its caller' ; ++ $tests;
+is pakg(), 'stribble', '__PACKAGE__ does check its caller'; ++ $tests;
+sub __SUB__test { &my__SUB__ }
+is __SUB__test, \&__SUB__test, '&__SUB__'; ++ $tests;
+
+test_proto 'abs', -5, 5;
+
+test_proto 'accept';
+$tests += 6; eval q{
+ is &CORE::accept(qw{foo bar}), undef, "&accept";
+ lis [&{"CORE::accept"}(qw{foo bar})], [undef], "&accept in list context";
+
+ &myaccept(my $foo, my $bar);
+ is ref $foo, 'GLOB', 'CORE::accept autovivifies its first argument';
+ is $bar, undef, 'CORE::accept does not autovivify its second argument';
+ use strict;
+ undef $foo;
+ eval { 'myaccept'->($foo, $bar) };
+ like $@, qr/^Can't use an undefined value as a symbol reference at/,
+ 'CORE::accept will not accept undef 2nd arg under strict';
+ is ref $foo, 'GLOB', 'CORE::accept autovivs its first arg under strict';
+};
+
+test_proto 'alarm';
+test_proto 'atan2';
+
+test_proto 'bind';
+$tests += 3;
+is &CORE::bind('foo', 'bear'), undef, "&bind";
+lis [&CORE::bind('foo', 'bear')], [undef], "&bind in list context";
+eval { &mybind(my $foo, "bear") };
+like $@, qr/^Bad symbol for filehandle at/,
+ 'CORE::bind dies with undef first arg';
+
+test_proto 'binmode';
+$tests += 3;
+is &CORE::binmode(qw[foo bar]), undef, "&binmode";
+lis [&CORE::binmode(qw[foo bar])], [undef], "&binmode in list context";
+is &mybinmode(foo), undef, '&binmode with one arg';
+
+test_proto 'bless';
+$tests += 3;
+like &CORE::bless([],'parcel'), qr/^parcel=ARRAY/, "&bless";
+like join(" ", &CORE::bless([],'parcel')),
+ qr/^parcel=ARRAY(?!.* )/, "&bless in list context";
+like &mybless([]), qr/^main=ARRAY/, '&bless with one arg';
+
+test_proto 'break';
+{ $tests ++;
+ my $tmp;
+ CORE::given(1) {
+ CORE::when(1) {
+ &mybreak;
+ $tmp = 'bad';
+ }
+ }
+ is $tmp, undef, '&break';
+}
+
+test_proto 'caller';
+$tests += 4;
+sub caller_test {
+ is scalar &CORE::caller, 'hadhad', '&caller';
+ is scalar &CORE::caller(1), 'main', '&caller(1)';
+ lis [&CORE::caller], [caller], '&caller in list context';
+ # The last element of caller in list context is a hint hash, which
+ # may be a different hash for caller vs &CORE::caller, so an eq com-
+ # parison (which lis() uses for convenience) won’t work. So just
+ # pop the last element, since the rest are sufficient to prove that
+ # &CORE::caller works.
+ my @ampcaller = &CORE::caller(1);
+ my @caller = caller(1);
+ pop @ampcaller; pop @caller;
+ lis \@ampcaller, \@caller, '&caller(1) in list context';
+}
+sub {
+ package hadhad;
+ ::caller_test();
+}->();
+
+test_proto 'chmod';
+$tests += 3;
+is &CORE::chmod(), 0, '&chmod with no args';
+is &CORE::chmod(0666), 0, '&chmod';
+lis [&CORE::chmod(0666)], [0], '&chmod in list context';
+
+test_proto 'chown';
+$tests += 4;
+is &CORE::chown(), 0, '&chown with no args';
+is &CORE::chown(1), 0, '&chown with 1 arg';
+is &CORE::chown(1,2), 0, '&chown';
+lis [&CORE::chown(1,2)], [0], '&chown in list context';
+
+test_proto 'chr', 5, "\5";
+test_proto 'chroot';
+
+test_proto 'close';
+{
+ last if is_miniperl;
+ $tests += 3;
+
+ open my $fh, ">", \my $buffalo;
+ print $fh 'an address in the outskirts of Jersey';
+ ok &CORE::close($fh), '&CORE::close retval';
+ print $fh 'lalala';
+ is $buffalo, 'an address in the outskirts of Jersey',
+ 'effect of &CORE::close';
+ # This has to be a separate variable from $fh, as re-using the same
+ # variable can cause the tests to pass by accident. That actually hap-
+ # pened during developement, because the second close() was reading
+ # beyond the end of the stack and finding a $fh left over from before.
+ open my $fh2, ">", \($buffalo = '');
+ select+(select($fh2), do {
+ print "Nasusiro Tokasoni";
+ &CORE::close();
+ print "jfd";
+ is $buffalo, "Nasusiro Tokasoni", '&CORE::close with no args';
+ })[0];
+}
+lis [&CORE::close('tototootot')], [''], '&close in list context'; ++$tests;
+
+test_proto 'closedir';
+$tests += 2;
+is &CORE::closedir(foo), undef, '&CORE::closedir';
+lis [&CORE::closedir(foo)], [undef], '&CORE::closedir in list context';
+
+test_proto 'connect';
+$tests += 2;
+is &CORE::connect('foo','bar'), undef, '&connect';
+lis [&myconnect('foo','bar')], [undef], '&connect in list context';
+
+test_proto 'continue';
+$tests ++;
+CORE::given(1) {
+ CORE::when(1) {
+ &mycontinue();
+ }
+ pass "&continue";
+}
+
+test_proto 'cos';
+test_proto 'crypt';
+
+test_proto 'dbmclose';
+test_proto 'dbmopen';
+{
+ last unless eval { require AnyDBM_File };
+ $tests ++;
+ my $filename = tempfile();
+ &mydbmopen(\my %db, $filename, 0666);
+ $db{1} = 2; $db{3} = 4;
+ &mydbmclose(\%db);
+ is scalar keys %db, 0, '&dbmopen and &dbmclose';
+}
+
+test_proto 'die';
+eval { dier('quinquangle') };
+is $@, "quinquangle at frob line 6.\n", '&CORE::die'; $tests ++;
+
+test_proto $_ for qw(
+ endgrent endhostent endnetent endprotoent endpwent endservent
+);
+
+test_proto 'evalbytes';
+$tests += 4;
+{
+ chop(my $upgraded = "use utf8; '\xc4\x80'" . chr 256);
+ is &myevalbytes($upgraded), chr 256, '&evalbytes';
+ # Test hints
+ require strict;
+ strict->import;
+ &myevalbytes('
+ is someone, "someone", "run-time hint bits do not leak into &evalbytes"
+ ');
+ use strict;
+ BEGIN { $^H{coreamp} = 42 }
+ $^H{coreamp} = 75;
+ &myevalbytes('
+ BEGIN {
+ is $^H{coreamp}, 42, "compile-time hh propagates into &evalbytes";
+ }
+ ${"frobnicate"}
+ ');
+ like $@, qr/strict/, 'compile-time hint bits propagate into &evalbytes';
+}
+
+test_proto 'exit';
+$tests ++;
+is runperl(prog => '&CORE::exit; END { print qq-ok\n- }'), "ok\n",
+ '&exit with no args';
+
+test_proto 'fork';
+
+test_proto 'formline';
+$tests += 3;
+is &myformline(' @<<< @>>>', 1, 2), 1, '&myformline retval';
+is $^A, ' 1 2', 'effect of &myformline';
+lis [&myformline('@')], [1], '&myformline in list context';
+
+test_proto 'exp';
+
+test_proto 'fc';
+$tests += 2;
+{
+ my $sharp_s = "\xdf";
+ is &myfc($sharp_s), $sharp_s, '&fc, no unicode_strings';
+ use feature 'unicode_strings';
+ is &myfc($sharp_s), "ss", '&fc, unicode_strings';
+}
+
+test_proto 'fcntl';
+
+test_proto 'fileno';
+$tests += 2;
+is &CORE::fileno(\*STDIN), fileno STDIN, '&CORE::fileno';
+lis [&CORE::fileno(\*STDIN)], [fileno STDIN], '&CORE::fileno in list cx';
+
+test_proto 'flock';
+test_proto 'fork';
+
+test_proto 'getc';
+{
+ last if is_miniperl;
+ $tests += 3;
+ local *STDIN;
+ open my $fh, "<", \(my $buf='falo');
+ open STDIN, "<", \(my $buf2 = 'bison');
+ is &mygetc($fh), 'f', '&mygetc';
+ is &mygetc(), 'b', '&mygetc with no args';
+ lis [&mygetc($fh)], ['a'], '&mygetc in list context';
+}
+
+test_proto "get$_" for qw '
+ grent grgid grnam hostbyaddr hostbyname hostent login netbyaddr netbyname
+ netent peername
+';
+
+test_proto 'getpgrp';
+eval {&mygetpgrp()};
+pass '&getpgrp with no args does not crash'; $tests++;
+
+test_proto "get$_" for qw '
+ ppid priority protobyname protobynumber protoent
+ pwent pwnam pwuid servbyname servbyport servent sockname sockopt
+';
+
+# Make sure the following tests test what we think they are testing.
+ok ! $CORE::{glob}, '*CORE::glob not autovivified yet'; $tests ++;
+{
+ # Make sure ck_glob does not respect the override when &CORE::glob is
+ # autovivified (by test_proto).
+ local *CORE::GLOBAL::glob = sub {};
+ test_proto 'glob';
+}
+$_ = "t/*.t";
+ at _ = &myglob($_);
+is join($", &myglob()), "@_", '&glob without arguments';
+is join($", &myglob("t/*.t")), "@_", '&glob with an arg';
+$tests += 2;
+
+test_proto 'gmtime';
+&CORE::gmtime;
+pass '&gmtime without args does not crash'; ++$tests;
+
+test_proto 'hex', ff=>255;
+
+test_proto 'index';
+$tests += 3;
+is &myindex("foffooo","o",2),4,'&index';
+lis [&myindex("foffooo","o",2)],[4],'&index in list context';
+is &myindex("foffooo","o"),1,'&index with 2 args';
+
+test_proto 'int', 1.5=>1;
+test_proto 'ioctl';
+
+test_proto 'join';
+$tests += 2;
+is &myjoin('a','b','c'), 'bac', '&join';
+lis [&myjoin('a','b','c')], ['bac'], '&join in list context';
+
+test_proto 'kill'; # set up mykill alias
+if ($^O ne 'riscos') {
+ $tests ++;
+ ok( &mykill(0, $$), '&kill' );
+}
+
+test_proto 'lc', 'A', 'a';
+test_proto 'lcfirst', 'AA', 'aA';
+test_proto 'length', 'aaa', 3;
+test_proto 'link';
+test_proto 'listen';
+
+test_proto 'localtime';
+&CORE::localtime;
+pass '&localtime without args does not crash'; ++$tests;
+
+test_proto 'lock';
+$tests += 6;
+is \&mylock(\$foo), \$foo, '&lock retval when passed a scalar ref';
+lis [\&mylock(\$foo)], [\$foo], '&lock in list context';
+is &mylock(\@foo), \@foo, '&lock retval when passed an array ref';
+is &mylock(\%foo), \%foo, '&lock retval when passed a ash ref';
+is &mylock(\&foo), \&foo, '&lock retval when passed a code ref';
+is \&mylock(\*foo), \*foo, '&lock retval when passed a glob ref';
+
+test_proto 'log';
+
+test_proto 'mkdir';
+# mkdir is tested with implicit $_ at the end, to make the test easier
+
+test_proto "msg$_" for qw( ctl get rcv snd );
+
+test_proto 'not';
+$tests += 2;
+is &mynot(1), !1, '¬';
+lis [&mynot(0)], [!0], '¬ in list context';
+
+test_proto 'oct', '666', 438;
+
+test_proto 'open';
+$tests += 5;
+$file = 'test.pl';
+ok &myopen('file'), '&open with 1 arg' or warn "1-arg open: $!";
+like <file>, qr|^#|, 'result of &open with 1 arg';
+close file;
+{
+ ok &myopen(my $fh, "test.pl"), 'two-arg &open';
+ ok $fh, '&open autovivifies';
+ like <$fh>, qr '^#', 'result of &open with 2 args';
+ last if is_miniperl;
+ $tests +=2;
+ ok &myopen(my $fh2, "<", \"sharummbles"), 'retval of 3-arg &open';
+ is <$fh2>, 'sharummbles', 'result of three-arg &open';
+}
+
+test_proto 'opendir';
+test_proto 'ord', chr(64), 64;
+
+test_proto 'pack';
+$tests += 2;
+is &mypack("H*", '5065726c'), 'Perl', '&pack';
+lis [&mypack("H*", '5065726c')], ['Perl'], '&pack in list context';
+
+test_proto 'pipe';
+
+test_proto 'pos';
+$tests += 4;
+$_ = "hello";
+pos = 3;
+is &mypos, 3, 'reading &pos without args';
+&mypos = 4;
+is pos, 4, 'writing to &pos without args';
+{
+ my $x = "gubai";
+ pos $x = 3;
+ is &mypos(\$x), 3, 'reading &pos without args';
+ &mypos(\$x) = 4;
+ is pos $x, 4, 'writing to &pos without args';
+}
+
+test_proto 'prototype';
+$tests++;
+is &myprototype(\&myprototype), prototype("CORE::prototype"), '&prototype';
+
+test_proto 'quotemeta', '$', '\$';
+
+test_proto 'rand';
+$tests += 3;
+like &CORE::rand, qr/^0[.\d+-e]*\z/, '&rand';
+unlike join(" ", &CORE::rand), qr/ /, '&rand in list context';
+&cmp_ok(&CORE::rand(78), qw '< 78', '&rand with 1 arg');
+
+test_proto 'read';
+{
+ last if is_miniperl;
+ $tests += 5;
+ open my $fh, "<", \(my $buff = 'morays have their mores');
+ ok &myread($fh, \my $input, 6), '&read with 3 args';
+ is $input, 'morays', 'value read by 3-arg &read';
+ ok &myread($fh, \$input, 6, 6), '&read with 4 args';
+ is $input, 'morays have ', 'value read by 4-arg &read';
+ is +()=&myread($fh, \$input, 6), 1, '&read in list context';
+}
+
+test_proto 'readdir';
+
+test_proto 'readline';
+{
+ local *ARGV = *DATA;
+ $tests ++;
+ is scalar &myreadline,
+ "I wandered lonely as a cloud\n", '&readline w/no args';
+}
+{
+ last if is_miniperl;
+ $tests += 2;
+ open my $fh, "<", \(my $buff = <<END);
+The Recursive Problem
+---------------------
+I have a problem I cannot solve.
+The problem is that I cannot solve it.
+END
+ is &myreadline($fh), "The Recursive Problem\n",
+ '&readline with 1 arg';
+ lis [&myreadline($fh)], [
+ "---------------------\n",
+ "I have a problem I cannot solve.\n",
+ "The problem is that I cannot solve it.\n",
+ ], '&readline in list context';
+}
+
+test_proto 'readlink';
+test_proto 'readpipe';
+test_proto 'recv';
+
+use if !is_miniperl, File::Spec::Functions, qw "catfile";
+use if !is_miniperl, File::Temp, 'tempdir';
+
+test_proto 'rename';
+{
+ last if is_miniperl;
+ $tests ++;
+ my $dir = tempdir(uc cleanup => 1);
+ my $tmpfilenam = catfile $dir, 'aaa';
+ open my $fh, ">", $tmpfilenam or die "cannot open $tmpfilenam: $!";
+ close $fh or die "cannot close $tmpfilenam: $!";
+ &myrename("$tmpfilenam", $tmpfilenam = catfile $dir,'bbb');
+ ok open(my $fh, '>', $tmpfilenam), '&rename';
+}
+
+test_proto 'ref', [], 'ARRAY';
+
+test_proto 'reset';
+$tests += 2;
+my $oncer = sub { "a" =~ m?a? };
+&$oncer;
+&myreset;
+ok &$oncer, '&reset with no args';
+package resettest {
+ $b = "c";
+ $banana = "cream";
+ &::myreset('b');
+ ::lis [$b,$banana],[(undef)x2], '1-arg &reset';
+}
+
+test_proto 'reverse';
+$tests += 2;
+is &myreverse('reward'), 'drawer', '&reverse';
+lis [&myreverse(qw 'dog bites man')], [qw 'man bites dog'],
+ '&reverse in list context';
+
+test_proto 'rewinddir';
+
+test_proto 'rindex';
+$tests += 3;
+is &myrindex("foffooo","o",2),1,'&rindex';
+lis [&myrindex("foffooo","o",2)],[1],'&rindex in list context';
+is &myrindex("foffooo","o"),6,'&rindex with 2 args';
+
+test_proto 'rmdir';
+
+test_proto 'scalar';
+$tests += 2;
+is &myscalar(3), 3, '&scalar';
+lis [&myscalar(3)], [3], '&scalar in list cx';
+
+test_proto 'seek';
+{
+ last if is_miniperl;
+ $tests += 1;
+ open my $fh, "<", \"misled" or die $!;
+ &myseek($fh, 2, 0);
+ is <$fh>, 'sled', '&seek in action';
+}
+
+test_proto 'seekdir';
+
+# Can’t test_proto, as it has none
+$tests += 8;
+*myselect = \&CORE::select;
+is defined prototype &myselect, defined prototype "CORE::select",
+ 'prototype of &select (or lack thereof)';
+is &myselect, select, '&select with no args';
+{
+ my $prev = select;
+ is &myselect(my $fh), $prev, '&select($arg) retval';
+ is lc ref $fh, 'glob', '&select autovivifies';
+ is select=~s/\*//rug, (*$fh."")=~s/\*//rug, '&select selects';
+ select $prev;
+}
+eval { &myselect(1,2) };
+like $@, qr/^Not enough arguments for select system call at /,
+ ,'&myselect($two,$args)';
+eval { &myselect(1,2,3) };
+like $@, qr/^Not enough arguments for select system call at /,
+ ,'&myselect($with,$three,$args)';
+eval { &myselect(1,2,3,4,5) };
+like $@, qr/^Too many arguments for select system call at /,
+ ,'&myselect($a,$total,$of,$five,$args)';
+&myselect((undef)x3,.25);
+# Just have to assume that worked. :-) If we get here, at least it didn’t
+# crash or anything.
+
+test_proto "sem$_" for qw "ctl get op";
+
+test_proto 'send';
+
+test_proto "set$_" for qw '
+ grent hostent netent
+';
+
+test_proto 'setpgrp';
+$tests +=2;
+eval { &mysetpgrp( 0) };
+pass "&setpgrp with one argument";
+eval { &mysetpgrp };
+pass "&setpgrp with no arguments";
+
+test_proto "set$_" for qw '
+ priority protoent pwent servent sockopt
+';
+
+test_proto "shm$_" for qw "ctl get read write";
+test_proto 'shutdown';
+test_proto 'sin';
+test_proto 'sleep';
+test_proto "socket$_" for "", "pair";
+
+test_proto 'sprintf';
+$tests += 2;
+is &mysprintf("%x", 65), '41', '&sprintf';
+lis [&mysprintf("%x", '65')], ['41'], '&sprintf in list context';
+
+test_proto 'sqrt', 4, 2;
+
+test_proto 'srand';
+$tests ++;
+&CORE::srand;
+() = &CORE::srand;
+pass '&srand with no args does not crash';
+
+test_proto 'study';
+
+test_proto 'substr';
+$tests += 5;
+$_ = "abc";
+is &mysubstr($_, 1, 1, "d"), 'b', '4-arg &substr';
+is $_, 'adc', 'what 4-arg &substr does';
+is &mysubstr("abc", 1, 1), 'b', '3-arg &substr';
+is &mysubstr("abc", 1), 'bc', '2-arg &substr';
+&mysubstr($_, 1) = 'long';
+is $_, 'along', 'lvalue &substr';
+
+test_proto 'symlink';
+test_proto 'syscall';
+
+test_proto 'sysopen';
+$tests +=2;
+{
+ &mysysopen(my $fh, 'test.pl', 0);
+ pass '&sysopen does not crash with 3 args';
+ ok $fh, 'sysopen autovivifies';
+}
+
+test_proto 'sysread';
+test_proto 'sysseek';
+test_proto 'syswrite';
+
+test_proto 'tell';
+{
+ $tests += 2;
+ open my $fh, "test.pl" or die "Cannot open test.pl";
+ <$fh>;
+ is &mytell(), tell($fh), '&tell with no args';
+ is &mytell($fh), tell($fh), '&tell with an arg';
+}
+
+test_proto 'telldir';
+
+test_proto 'tie';
+test_proto 'tied';
+$tests += 3;
+{
+ my $fetches;
+ package tier {
+ sub TIESCALAR { bless[] }
+ sub FETCH { ++$fetches }
+ }
+ my $tied;
+ my $obj = &mytie(\$tied, 'tier');
+ is &mytied(\$tied), $obj, '&tie and &tied retvals';
+ () = "$tied";
+ is $fetches, 1, '&tie actually ties';
+ &CORE::untie(\$tied);
+ () = "$tied";
+ is $fetches, 1, '&untie unties';
+}
+
+test_proto 'time';
+$tests += 2;
+like &mytime, '^\d+\z', '&time in scalar context';
+like join('-', &mytime), '^\d+\z', '&time in list context';
+
+test_proto 'times';
+$tests += 2;
+like &mytimes, '^[\d.]+\z', '× in scalar context';
+like join('-',&mytimes), '^[\d.]+-[\d.]+-[\d.]+-[\d.]+\z',
+ '× in list context';
+
+test_proto 'uc', 'aa', 'AA';
+test_proto 'ucfirst', 'aa', "Aa";
+
+test_proto 'umask';
+$tests ++;
+is &myumask, umask, '&umask with no args';
+
+test_proto 'undef';
+$tests += 12;
+is &myundef(), undef, '&undef returns undef';
+lis [&myundef()], [undef], '&undef returns undef in list cx';
+lis [&myundef(\$_)], [undef], '&undef(...) returns undef in list cx';
+is \&myundef(), \undef, '&undef returns the right undef';
+$_ = 'anserine questions';
+&myundef(\$_);
+is $_, undef, '&undef(\$_) undefines $_';
+ at _ = 1..3;
+&myundef(\@_);
+is @_, 0, '&undef(\@_) undefines @_';
+%_ = 1..4;
+&myundef(\%_);
+ok !%_, '&undef(\%_) undefines %_';
+&myundef(\&utf8::valid); # nobody should be using this :-)
+ok !defined &utf8::valid, '&undef(\&foo) undefines &foo';
+ at _ = \*_;
+&myundef;
+is *_{ARRAY}, undef, '@_=\*_, &undef undefines *_';
+ at _ = \*_;
+&myundef(\*_);
+is *_{ARRAY}, undef, '&undef(\*_) undefines *_';
+(&myundef(), @_) = 1..10;
+lis \@_, [2..10], 'list assignment to &undef()';
+ok !defined undef, 'list assignment to &undef() does not affect undef';
+undef @_;
+
+test_proto 'unpack';
+$tests += 2;
+$_ = 'abcd';
+is &myunpack("H*"), '61626364', '&unpack with one arg';
+is &myunpack("H*", "bcde"), '62636465', '&unpack with two arg';
+
+
+test_proto 'untie'; # behaviour already tested along with tie(d)
+
+test_proto 'utime';
+$tests += 2;
+is &myutime(undef,undef), 0, '&utime';
+lis [&myutime(undef,undef)], [0], '&utime in list context';
+
+test_proto 'vec';
+$tests += 3;
+is &myvec("foo", 0, 4), 6, '&vec';
+lis [&myvec("foo", 0, 4)], [6], '&vec in list context';
+$tmp = "foo";
+++&myvec($tmp,0,4);
+is $tmp, "goo", 'lvalue &vec';
+
+test_proto 'wait';
+test_proto 'waitpid';
+
+test_proto 'wantarray';
+$tests += 4;
+my $context;
+my $cx_sub = sub {
+ $context = qw[void scalar list][&mywantarray + defined mywantarray()]
+};
+() = &$cx_sub;
+is $context, 'list', '&wantarray with caller in list context';
+scalar &$cx_sub;
+is($context, 'scalar', '&wantarray with caller in scalar context');
+&$cx_sub;
+is($context, 'void', '&wantarray with caller in void context');
+lis [&mywantarray],[wantarray], '&wantarray itself in list context';
+
+test_proto 'warn';
+{ $tests += 3;
+ my $w;
+ local $SIG{__WARN__} = sub { $w = shift };
+ is &mywarn('a'), 1, '&warn retval';
+ is $w, "a at " . __FILE__ . " line " . (__LINE__-1) . ".\n", 'warning';
+ lis [&mywarn()], [1], '&warn retval in list context';
+}
+
+test_proto 'write';
+$tests ++;
+eval {&mywrite};
+like $@, qr'^Undefined format "STDOUT" called',
+ "&write without arguments can handle the null";
+
+# This is just a check to make sure we have tested everything. If we
+# haven’t, then either the sub needs to be tested or the list in
+# gv.c is wrong.
+{
+ last if is_miniperl;
+ require File::Spec::Functions;
+ my $keywords_file =
+ File::Spec::Functions::catfile(
+ File::Spec::Functions::updir,'regen','keywords.pl'
+ );
+ open my $kh, $keywords_file
+ or die "$0 cannot open $keywords_file: $!";
+ while(<$kh>) {
+ if (m?__END__?..${\0} and /^[-+](.*)/) {
+ my $word = $1;
+ next if
+ $word =~ /^(?:s(?:tate|ort|ay|ub)?|d(?:ef
+ ault|ump|o)|p(?:rintf?|ackag
+ e)|e(?:ls(?:if|e)|val|q)|g(?:[et]|iven|oto
+ |rep)|u(?:n(?:less|til)|se)|l(?:(?:as)?t|ocal|e)|re
+ (?:quire|turn|do)|__(?:DATA|END)__|for(?:each|mat)?|(?:
+ AUTOLOA|EN)D|n(?:e(?:xt)?|o)|C(?:HECK|ORE)|wh(?:ile|en)
+ |(?:ou?|t)r|m(?:ap|y)?|UNITCHECK|q[qrwx]?|x(?:or)?|DEST
+ ROY|BEGIN|INIT|and|cmp|if|y)\z/x;
+ $tests ++;
+ ok exists &{"my$word"}
+ || (eval{&{"CORE::$word"}}, $@ =~ /cannot be called directly/),
+ "$word either has been tested or is not ampable";
+ }
+ }
+}
+
+# Add new tests above this line.
+
+# This test must come last (before the test count test):
+
+{
+ last if is_miniperl;
+ require Cwd;
+ import Cwd;
+ $tests += 3;
+ require File::Temp ;
+ my $dir = File::Temp::tempdir(uc cleanup => 1);
+ my $cwd = cwd();
+ chdir($dir);
+
+ # Make sure that implicit $_ is not applied to mkdir’s second argument.
+ local $^W = 1;
+ my $warnings;
+ local $SIG{__WARN__} = sub { ++$warnings };
+
+ no warnings 'experimental::lexical_topic';
+ my $_ = 'Phoo';
+ ok &mymkdir(), '&mkdir';
+ like <*>, qr/^phoo(.DIR)?\z/i, 'mkdir works with implicit $_';
+
+ is $warnings, undef, 'no implicit $_ for second argument to mkdir';
+
+ chdir($cwd); # so auto-cleanup can remove $dir
+}
+
+# ------------ END TESTING ----------- #
+
+done_testing $tests;
+
+#line 3 frob
+
+sub file { &CORE::__FILE__ }
+sub line { &CORE::__LINE__ } # 5
+sub dier { &CORE::die(@_) } # 6
+package stribble;
+sub main::pakg { &CORE::__PACKAGE__ }
+
+# Please do not add new tests here.
+package main;
+CORE::__DATA__
+I wandered lonely as a cloud
+That floats on high o’er vales and hills,
+And all at once I saw a crowd,
+A host of golden daffodils!
+Beside the lake, beneath the trees,
+Fluttering, dancing, in the breeze.
+-- Wordsworth
Added: vendor/perl/dist/t/op/coresubs.t
===================================================================
--- vendor/perl/dist/t/op/coresubs.t (rev 0)
+++ vendor/perl/dist/t/op/coresubs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,155 @@
+#!./perl
+
+# This script tests the inlining and prototype of CORE:: subs. Any generic
+# tests that are not specific to &foo-style calls should go in this
+# file, too.
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = qw(. ../lib);
+ require "test.pl";
+ skip_all_without_dynamic_extension('B');
+ $^P |= 0x100;
+}
+
+use B::Deparse;
+my $bd = new B::Deparse '-p';
+
+my %unsupported = map +($_=>1), qw (
+ __DATA__ __END__ AUTOLOAD BEGIN UNITCHECK CORE DESTROY END INIT CHECK and
+ cmp default do dump else elsif eq eval for foreach
+ format ge given goto grep gt if last le local lt m map my ne next
+ no or our package print printf q qq qr qw qx redo require
+ return s say sort state sub tr unless until use
+ when while x xor y
+);
+my %args_for = (
+ dbmopen => '%1,$2,$3',
+ dbmclose => '%1',
+ delete => '$1[2]',
+ exists => '$1[2]',
+);
+my %desc = (
+ pos => 'match position',
+);
+
+use File::Spec::Functions;
+my $keywords_file = catfile(updir,'regen','keywords.pl');
+open my $kh, $keywords_file
+ or die "$0 cannot open $keywords_file: $!";
+while(<$kh>) {
+ if (m?__END__?..${\0} and /^[+-]/) {
+ chomp(my $word = $');
+ if($unsupported{$word}) {
+ $tests ++;
+ ok !defined &{"CORE::$word"}, "no CORE::$word";
+ }
+ else {
+ $tests += 4;
+
+ ok defined &{"CORE::$word"}, "defined &{'CORE::$word'}";
+
+ my $proto = prototype "CORE::$word";
+ *{"my$word"} = \&{"CORE::$word"};
+ is prototype \&{"my$word"}, $proto, "prototype of &CORE::$word";
+
+ CORE::state $protochar = qr/([^\\]|\\(?:[^[]|\[[^]]+\]))/;
+ my $numargs =
+ $word eq 'delete' || $word eq 'exists' ? 1 :
+ (() = $proto =~ s/;.*//r =~ /\G$protochar/g);
+ my $code =
+ "#line 1 This-line-makes-__FILE__-easier-to-test.
+ sub { () = (my$word("
+ . ($args_for{$word} || join ",", map "\$$_", 1..$numargs)
+ . "))}";
+ my $core = $bd->coderef2text(eval $code =~ s/my/CORE::/r or die);
+ my $my = $bd->coderef2text(eval $code or die);
+ is $my, $core, "inlinability of CORE::$word with parens";
+
+ $code =
+ "#line 1 This-line-makes-__FILE__-easier-to-test.
+ sub { () = (my$word "
+ . ($args_for{$word} || join ",", map "\$$_", 1..$numargs)
+ . ")}";
+ $core = $bd->coderef2text(eval $code =~ s/my/CORE::/r or die);
+ $my = $bd->coderef2text(eval $code or die);
+ is $my, $core, "inlinability of CORE::$word without parens";
+
+ # High-precedence tests
+ my $hpcode;
+ if (!$proto && defined $proto) { # nullary
+ $hpcode = "sub { () = my$word + 1 }";
+ }
+ elsif ($proto =~ /^;?$protochar\z/) { # unary
+ $hpcode = "sub { () = my$word "
+ . ($args_for{$word}||'$a') . ' > $b'
+ .'}';
+ }
+ if ($hpcode) {
+ $tests ++;
+ $core = $bd->coderef2text(eval $hpcode =~ s/my/CORE::/r or die);
+ $my = $bd->coderef2text(eval $hpcode or die);
+ is $my, $core, "precedence of CORE::$word without parens";
+ }
+
+ next if ($proto =~ /\@/);
+ # These ops currently accept any number of args, despite their
+ # prototypes, if they have any:
+ next if $word =~ /^(?:chom?p|exec|keys|each|not
+ |(?:prototyp|read(?:lin|pip))e
+ |reset|system|values|l?stat)|evalbytes/x;
+
+ $tests ++;
+ $code =
+ "sub { () = (my$word("
+ . (
+ $args_for{$word}
+ ? $args_for{$word}.',$7'
+ : join ",", map "\$$_", 1..$numargs+5+(
+ $proto =~ /;/
+ ? () = $' =~ /\G$protochar/g
+ : 0
+ )
+ )
+ . "))}";
+ eval $code;
+ my $desc = $desc{$word} || $word;
+ like $@, qr/^Too many arguments for $desc/,
+ "inlined CORE::$word with too many args"
+ or warn $code;
+
+ }
+ }
+}
+
+$tests++;
+# This subroutine is outside the warnings scope:
+sub foo { goto &CORE::abs }
+use warnings;
+$SIG{__WARN__} = sub { like shift, qr\^Use of uninitialized\ };
+foo(undef);
+
+$tests+=2;
+is runperl(prog => 'print CORE->lc, qq-\n-'), "core\n",
+ 'methods calls autovivify coresubs';
+is runperl(prog => '@ISA=CORE; print main->uc, qq-\n-'), "MAIN\n",
+ 'inherted method calls autovivify coresubs';
+
+{ # RT #117607
+ $tests++;
+ like runperl(prog => '$foo/; \&CORE::lc', stderr => 1),
+ qr/^syntax error/, "RT #117607: \\&CORE::foo doesn't crash in error context";
+}
+
+$tests++;
+ok eval { *CORE::exit = \42 },
+ '[rt.cpan.org #74289] *CORE::foo is not accidentally made read-only';
+
+ at UNIVERSAL::ISA = CORE;
+is "just another "->ucfirst . "perl hacker,\n"->ucfirst,
+ "Just another Perl hacker,\n", 'coresubs do not return TARG';
+++$tests;
+
+done_testing $tests;
+
+CORE::__END__
Added: vendor/perl/dist/t/op/current_sub.t
===================================================================
--- vendor/perl/dist/t/op/current_sub.t (rev 0)
+++ vendor/perl/dist/t/op/current_sub.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,77 @@
+#!./perl
+
+BEGIN {
+ chdir 't';
+ @INC = qw(../lib);
+ require './test.pl';
+ plan (tests => 17);
+}
+
+is __SUB__, "__SUB__", '__SUB__ is a bareword outside of use feature';
+
+{
+ use v5.15;
+ is __SUB__, undef, '__SUB__ under use v5.16';
+}
+
+use feature 'current_sub';
+
+is __SUB__, undef, '__SUB__ returns undef outside of a subroutine';
+is +()=__SUB__, 1, '__SUB__ returns undef in list context';
+
+sub foo { __SUB__ }
+is foo, \&foo, '__SUB__ inside a named subroutine';
+is foo->(), \&foo, '__SUB__ is callable';
+is ref foo, 'CODE', '__SUB__ is a code reference';
+
+my $subsub = sub { __SUB__ };
+is &$subsub, $subsub, '__SUB__ inside anonymous non-closure';
+
+my @subsubs;
+for my $x(1..3) {
+ push @subsubs, sub { return $x if @_; __SUB__ };
+}
+# Don’t loop here; we need to avoid interactions between the iterator
+# and the closure.
+is $subsubs[0]()(0), 1, '__SUB__ inside closure (1)';
+is $subsubs[1]()(0), 2, '__SUB__ inside closure (2)';
+is $subsubs[2]()(0), 3, '__SUB__ inside closure (3)';
+
+BEGIN {
+ return "begin 1" if @_;
+ is CORE::__SUB__->(0), "begin 1", 'in BEGIN block'
+}
+BEGIN {
+ return "begin 2" if @_;
+ is &CORE::__SUB__->(0), "begin 2", 'in BEGIN block via & (unoptimised)'
+}
+
+sub bar;
+sub bar {
+ () = sort {
+ is CORE::__SUB__, \&bar, 'in sort block in sub with forw decl'
+ } 1,2;
+}
+bar();
+sub bur;
+sub bur {
+ () = sort {
+ is &CORE::__SUB__, \&bur, '& in sort block in sub with forw decl'
+ } 1,2;
+}
+bur();
+
+sub squog;
+sub squog {
+ grep { is CORE::__SUB__, \&squog,
+ 'in grep block in sub with forw decl'
+ } 1;
+}
+squog();
+sub squag;
+sub squag {
+ grep { is &CORE::__SUB__, \&squag,
+ '& in grep block in sub with forw decl'
+ } 1;
+}
+squag();
Added: vendor/perl/dist/t/op/defined.t
===================================================================
--- vendor/perl/dist/t/op/defined.t (rev 0)
+++ vendor/perl/dist/t/op/defined.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,20 @@
+#!perl
+BEGIN {
+ chdir 't';
+ require './test.pl';
+}
+
+plan 5;
+
+sub notdef { undef }
+
+# [perl #97466]
+# These should actually call the sub, instead of testing the sub itself
+ok !defined do { ¬def }, 'defined do { &sub }';
+ok !defined(scalar(42,¬def)), 'defined(scalar(42,&sub))';
+ok !defined do{();¬def}, '!defined do{();&sub}';
+
+# Likewise, these should evaluate @array in scalar context
+no warnings "deprecated";
+ok defined($false ? $scalar : @array), 'defined( ... ? ... : @array)';
+ok defined(scalar @array), 'defined(scalar @array)';
Added: vendor/perl/dist/t/op/evalbytes.t
===================================================================
--- vendor/perl/dist/t/op/evalbytes.t (rev 0)
+++ vendor/perl/dist/t/op/evalbytes.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,34 @@
+#!./perl
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+plan(tests => 8);
+
+{
+ local $SIG{__WARN__} = sub {};
+ eval "evalbytes 'foo'";
+ like $@, qr/syntax error/, 'evalbytes outside feature scope';
+}
+
+# We enable unicode_eval just to test that it does not interfere.
+use feature 'evalbytes', 'unicode_eval';
+
+is evalbytes("1+7"), 8, 'evalbytes basic sanity check';
+
+my $code = qq('\xff\xfe');
+is evalbytes($code), "\xff\xfe", 'evalbytes on extra-ASCII bytes';
+chop((my $upcode = $code) .= chr 256);
+is evalbytes($upcode), "\xff\xfe", 'evalbytes on upgraded extra-ASCII';
+{
+ use utf8;
+ is evalbytes($code), "\xff\xfe", 'evalbytes ignores outer utf8 pragma';
+}
+is evalbytes "use utf8; '\xc4\x80'", chr 256, 'use utf8 within evalbytes';
+chop($upcode = "use utf8; '\xc4\x80'" . chr 256);
+is evalbytes $upcode, chr 256, 'use utf8 within evalbytes on utf8 string';
+eval { evalbytes chr 256 };
+like $@, qr/Wide character/, 'evalbytes croaks on non-bytes';
Added: vendor/perl/dist/t/op/for.t
===================================================================
--- vendor/perl/dist/t/op/for.t (rev 0)
+++ vendor/perl/dist/t/op/for.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,564 @@
+#!./perl
+
+BEGIN {
+ require "test.pl";
+}
+
+plan(104);
+
+# A lot of tests to check that reversed for works.
+
+ at array = ('A', 'B', 'C');
+for (@array) {
+ $r .= $_;
+}
+is ($r, 'ABC', 'Forwards for array');
+$r = '';
+for (1,2,3) {
+ $r .= $_;
+}
+is ($r, '123', 'Forwards for list');
+$r = '';
+for (map {$_} @array) {
+ $r .= $_;
+}
+is ($r, 'ABC', 'Forwards for array via map');
+$r = '';
+for (map {$_} 1,2,3) {
+ $r .= $_;
+}
+is ($r, '123', 'Forwards for list via map');
+$r = '';
+for (1 .. 3) {
+ $r .= $_;
+}
+is ($r, '123', 'Forwards for list via ..');
+$r = '';
+for ('A' .. 'C') {
+ $r .= $_;
+}
+is ($r, 'ABC', 'Forwards for list via ..');
+
+$r = '';
+for (reverse @array) {
+ $r .= $_;
+}
+is ($r, 'CBA', 'Reverse for array');
+$r = '';
+for (reverse 1,2,3) {
+ $r .= $_;
+}
+is ($r, '321', 'Reverse for list');
+$r = '';
+for (reverse map {$_} @array) {
+ $r .= $_;
+}
+is ($r, 'CBA', 'Reverse for array via map');
+$r = '';
+for (reverse map {$_} 1,2,3) {
+ $r .= $_;
+}
+is ($r, '321', 'Reverse for list via map');
+$r = '';
+for (reverse 1 .. 3) {
+ $r .= $_;
+}
+is ($r, '321', 'Reverse for list via ..');
+$r = '';
+for (reverse 'A' .. 'C') {
+ $r .= $_;
+}
+is ($r, 'CBA', 'Reverse for list via ..');
+
+$r = '';
+for my $i (@array) {
+ $r .= $i;
+}
+is ($r, 'ABC', 'Forwards for array with var');
+$r = '';
+for my $i (1,2,3) {
+ $r .= $i;
+}
+is ($r, '123', 'Forwards for list with var');
+$r = '';
+for my $i (map {$_} @array) {
+ $r .= $i;
+}
+is ($r, 'ABC', 'Forwards for array via map with var');
+$r = '';
+for my $i (map {$_} 1,2,3) {
+ $r .= $i;
+}
+is ($r, '123', 'Forwards for list via map with var');
+$r = '';
+for my $i (1 .. 3) {
+ $r .= $i;
+}
+is ($r, '123', 'Forwards for list via .. with var');
+$r = '';
+for my $i ('A' .. 'C') {
+ $r .= $i;
+}
+is ($r, 'ABC', 'Forwards for list via .. with var');
+
+$r = '';
+for my $i (reverse @array) {
+ $r .= $i;
+}
+is ($r, 'CBA', 'Reverse for array with var');
+$r = '';
+for my $i (reverse 1,2,3) {
+ $r .= $i;
+}
+is ($r, '321', 'Reverse for list with var');
+$r = '';
+for my $i (reverse map {$_} @array) {
+ $r .= $i;
+}
+is ($r, 'CBA', 'Reverse for array via map with var');
+$r = '';
+for my $i (reverse map {$_} 1,2,3) {
+ $r .= $i;
+}
+is ($r, '321', 'Reverse for list via map with var');
+$r = '';
+for my $i (reverse 1 .. 3) {
+ $r .= $i;
+}
+is ($r, '321', 'Reverse for list via .. with var');
+$r = '';
+for my $i (reverse 'A' .. 'C') {
+ $r .= $i;
+}
+is ($r, 'CBA', 'Reverse for list via .. with var');
+
+# For some reason the generate optree is different when $_ is implicit.
+$r = '';
+for $_ (@array) {
+ $r .= $_;
+}
+is ($r, 'ABC', 'Forwards for array with explicit $_');
+$r = '';
+for $_ (1,2,3) {
+ $r .= $_;
+}
+is ($r, '123', 'Forwards for list with explicit $_');
+$r = '';
+for $_ (map {$_} @array) {
+ $r .= $_;
+}
+is ($r, 'ABC', 'Forwards for array via map with explicit $_');
+$r = '';
+for $_ (map {$_} 1,2,3) {
+ $r .= $_;
+}
+is ($r, '123', 'Forwards for list via map with explicit $_');
+$r = '';
+for $_ (1 .. 3) {
+ $r .= $_;
+}
+is ($r, '123', 'Forwards for list via .. with var with explicit $_');
+$r = '';
+for $_ ('A' .. 'C') {
+ $r .= $_;
+}
+is ($r, 'ABC', 'Forwards for list via .. with var with explicit $_');
+
+$r = '';
+for $_ (reverse @array) {
+ $r .= $_;
+}
+is ($r, 'CBA', 'Reverse for array with explicit $_');
+$r = '';
+for $_ (reverse 1,2,3) {
+ $r .= $_;
+}
+is ($r, '321', 'Reverse for list with explicit $_');
+$r = '';
+for $_ (reverse map {$_} @array) {
+ $r .= $_;
+}
+is ($r, 'CBA', 'Reverse for array via map with explicit $_');
+$r = '';
+for $_ (reverse map {$_} 1,2,3) {
+ $r .= $_;
+}
+is ($r, '321', 'Reverse for list via map with explicit $_');
+$r = '';
+for $_ (reverse 1 .. 3) {
+ $r .= $_;
+}
+is ($r, '321', 'Reverse for list via .. with var with explicit $_');
+$r = '';
+for $_ (reverse 'A' .. 'C') {
+ $r .= $_;
+}
+is ($r, 'CBA', 'Reverse for list via .. with var with explicit $_');
+
+# I don't think that my is that different from our in the optree. But test a
+# few:
+$r = '';
+for our $i (reverse @array) {
+ $r .= $i;
+}
+is ($r, 'CBA', 'Reverse for array with our var');
+$r = '';
+for our $i (reverse 1,2,3) {
+ $r .= $i;
+}
+is ($r, '321', 'Reverse for list with our var');
+$r = '';
+for our $i (reverse map {$_} @array) {
+ $r .= $i;
+}
+is ($r, 'CBA', 'Reverse for array via map with our var');
+$r = '';
+for our $i (reverse map {$_} 1,2,3) {
+ $r .= $i;
+}
+is ($r, '321', 'Reverse for list via map with our var');
+$r = '';
+for our $i (reverse 1 .. 3) {
+ $r .= $i;
+}
+is ($r, '321', 'Reverse for list via .. with our var');
+$r = '';
+for our $i (reverse 'A' .. 'C') {
+ $r .= $i;
+}
+is ($r, 'CBA', 'Reverse for list via .. with our var');
+
+
+$r = '';
+for (1, reverse @array) {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for array with leading value');
+$r = '';
+for ('A', reverse 1,2,3) {
+ $r .= $_;
+}
+is ($r, 'A321', 'Reverse for list with leading value');
+$r = '';
+for (1, reverse map {$_} @array) {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for array via map with leading value');
+$r = '';
+for ('A', reverse map {$_} 1,2,3) {
+ $r .= $_;
+}
+is ($r, 'A321', 'Reverse for list via map with leading value');
+$r = '';
+for ('A', reverse 1 .. 3) {
+ $r .= $_;
+}
+is ($r, 'A321', 'Reverse for list via .. with leading value');
+$r = '';
+for (1, reverse 'A' .. 'C') {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for list via .. with leading value');
+
+$r = '';
+for (reverse (@array), 1) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for array with trailing value');
+$r = '';
+for (reverse (1,2,3), 'A') {
+ $r .= $_;
+}
+is ($r, '321A', 'Reverse for list with trailing value');
+$r = '';
+for (reverse (map {$_} @array), 1) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for array via map with trailing value');
+$r = '';
+for (reverse (map {$_} 1,2,3), 'A') {
+ $r .= $_;
+}
+is ($r, '321A', 'Reverse for list via map with trailing value');
+$r = '';
+for (reverse (1 .. 3), 'A') {
+ $r .= $_;
+}
+is ($r, '321A', 'Reverse for list via .. with trailing value');
+$r = '';
+for (reverse ('A' .. 'C'), 1) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for list via .. with trailing value');
+
+
+$r = '';
+for $_ (1, reverse @array) {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for array with leading value with explicit $_');
+$r = '';
+for $_ ('A', reverse 1,2,3) {
+ $r .= $_;
+}
+is ($r, 'A321', 'Reverse for list with leading value with explicit $_');
+$r = '';
+for $_ (1, reverse map {$_} @array) {
+ $r .= $_;
+}
+is ($r, '1CBA',
+ 'Reverse for array via map with leading value with explicit $_');
+$r = '';
+for $_ ('A', reverse map {$_} 1,2,3) {
+ $r .= $_;
+}
+is ($r, 'A321', 'Reverse for list via map with leading value with explicit $_');
+$r = '';
+for $_ ('A', reverse 1 .. 3) {
+ $r .= $_;
+}
+is ($r, 'A321', 'Reverse for list via .. with leading value with explicit $_');
+$r = '';
+for $_ (1, reverse 'A' .. 'C') {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for list via .. with leading value with explicit $_');
+
+$r = '';
+for $_ (reverse (@array), 1) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for array with trailing value with explicit $_');
+$r = '';
+for $_ (reverse (1,2,3), 'A') {
+ $r .= $_;
+}
+is ($r, '321A', 'Reverse for list with trailing value with explicit $_');
+$r = '';
+for $_ (reverse (map {$_} @array), 1) {
+ $r .= $_;
+}
+is ($r, 'CBA1',
+ 'Reverse for array via map with trailing value with explicit $_');
+$r = '';
+for $_ (reverse (map {$_} 1,2,3), 'A') {
+ $r .= $_;
+}
+is ($r, '321A',
+ 'Reverse for list via map with trailing value with explicit $_');
+$r = '';
+for $_ (reverse (1 .. 3), 'A') {
+ $r .= $_;
+}
+is ($r, '321A', 'Reverse for list via .. with trailing value with explicit $_');
+$r = '';
+for $_ (reverse ('A' .. 'C'), 1) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for list via .. with trailing value with explicit $_');
+
+$r = '';
+for my $i (1, reverse @array) {
+ $r .= $i;
+}
+is ($r, '1CBA', 'Reverse for array with leading value and var');
+$r = '';
+for my $i ('A', reverse 1,2,3) {
+ $r .= $i;
+}
+is ($r, 'A321', 'Reverse for list with leading value and var');
+$r = '';
+for my $i (1, reverse map {$_} @array) {
+ $r .= $i;
+}
+is ($r, '1CBA', 'Reverse for array via map with leading value and var');
+$r = '';
+for my $i ('A', reverse map {$_} 1,2,3) {
+ $r .= $i;
+}
+is ($r, 'A321', 'Reverse for list via map with leading value and var');
+$r = '';
+for my $i ('A', reverse 1 .. 3) {
+ $r .= $i;
+}
+is ($r, 'A321', 'Reverse for list via .. with leading value and var');
+$r = '';
+for my $i (1, reverse 'A' .. 'C') {
+ $r .= $i;
+}
+is ($r, '1CBA', 'Reverse for list via .. with leading value and var');
+
+$r = '';
+for my $i (reverse (@array), 1) {
+ $r .= $i;
+}
+is ($r, 'CBA1', 'Reverse for array with trailing value and var');
+$r = '';
+for my $i (reverse (1,2,3), 'A') {
+ $r .= $i;
+}
+is ($r, '321A', 'Reverse for list with trailing value and var');
+$r = '';
+for my $i (reverse (map {$_} @array), 1) {
+ $r .= $i;
+}
+is ($r, 'CBA1', 'Reverse for array via map with trailing value and var');
+$r = '';
+for my $i (reverse (map {$_} 1,2,3), 'A') {
+ $r .= $i;
+}
+is ($r, '321A', 'Reverse for list via map with trailing value and var');
+$r = '';
+for my $i (reverse (1 .. 3), 'A') {
+ $r .= $i;
+}
+is ($r, '321A', 'Reverse for list via .. with trailing value and var');
+$r = '';
+for my $i (reverse ('A' .. 'C'), 1) {
+ $r .= $i;
+}
+is ($r, 'CBA1', 'Reverse for list via .. with trailing value and var');
+
+
+$r = '';
+for (reverse 1, @array) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for value and array');
+$r = '';
+for (reverse map {$_} 1, @array) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for value and array via map');
+$r = '';
+for (reverse 1 .. 3, @array) {
+ $r .= $_;
+}
+is ($r, 'CBA321', 'Reverse for .. and array');
+$r = '';
+for (reverse 'X' .. 'Z', @array) {
+ $r .= $_;
+}
+is ($r, 'CBAZYX', 'Reverse for .. and array');
+$r = '';
+for (reverse map {$_} 1 .. 3, @array) {
+ $r .= $_;
+}
+is ($r, 'CBA321', 'Reverse for .. and array via map');
+$r = '';
+for (reverse map {$_} 'X' .. 'Z', @array) {
+ $r .= $_;
+}
+is ($r, 'CBAZYX', 'Reverse for .. and array via map');
+
+$r = '';
+for (reverse (@array, 1)) {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for array and value');
+$r = '';
+for (reverse (map {$_} @array, 1)) {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for array and value via map');
+
+$r = '';
+for $_ (reverse 1, @array) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for value and array with explicit $_');
+$r = '';
+for $_ (reverse map {$_} 1, @array) {
+ $r .= $_;
+}
+is ($r, 'CBA1', 'Reverse for value and array via map with explicit $_');
+$r = '';
+for $_ (reverse 1 .. 3, @array) {
+ $r .= $_;
+}
+is ($r, 'CBA321', 'Reverse for .. and array with explicit $_');
+$r = '';
+for $_ (reverse 'X' .. 'Z', @array) {
+ $r .= $_;
+}
+is ($r, 'CBAZYX', 'Reverse for .. and array with explicit $_');
+$r = '';
+for $_ (reverse map {$_} 1 .. 3, @array) {
+ $r .= $_;
+}
+is ($r, 'CBA321', 'Reverse for .. and array via map with explicit $_');
+$r = '';
+for $_ (reverse map {$_} 'X' .. 'Z', @array) {
+ $r .= $_;
+}
+is ($r, 'CBAZYX', 'Reverse for .. and array via map with explicit $_');
+
+$r = '';
+for $_ (reverse (@array, 1)) {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for array and value with explicit $_');
+$r = '';
+for $_ (reverse (map {$_} @array, 1)) {
+ $r .= $_;
+}
+is ($r, '1CBA', 'Reverse for array and value via map with explicit $_');
+
+
+$r = '';
+for my $i (reverse 1, @array) {
+ $r .= $i;
+}
+is ($r, 'CBA1', 'Reverse for value and array with var');
+$r = '';
+for my $i (reverse map {$_} 1, @array) {
+ $r .= $i;
+}
+is ($r, 'CBA1', 'Reverse for value and array via map with var');
+$r = '';
+for my $i (reverse 1 .. 3, @array) {
+ $r .= $i;
+}
+is ($r, 'CBA321', 'Reverse for .. and array with var');
+$r = '';
+for my $i (reverse 'X' .. 'Z', @array) {
+ $r .= $i;
+}
+is ($r, 'CBAZYX', 'Reverse for .. and array with var');
+$r = '';
+for my $i (reverse map {$_} 1 .. 3, @array) {
+ $r .= $i;
+}
+is ($r, 'CBA321', 'Reverse for .. and array via map with var');
+$r = '';
+for my $i (reverse map {$_} 'X' .. 'Z', @array) {
+ $r .= $i;
+}
+is ($r, 'CBAZYX', 'Reverse for .. and array via map with var');
+
+$r = '';
+for my $i (reverse (@array, 1)) {
+ $r .= $i;
+}
+is ($r, '1CBA', 'Reverse for array and value with var');
+$r = '';
+for my $i (reverse (map {$_} @array, 1)) {
+ $r .= $i;
+}
+is ($r, '1CBA', 'Reverse for array and value via map with var');
+
+TODO: {
+ if (do {17; foreach (1, 2) { 1; } } != 17) {
+ #print "not ";
+ todo_skip("RT #1085: what should be output of perl -we 'print do { foreach (1, 2) { 1; } }'");
+ }
+}
+
+TODO: {
+ local $TODO = "RT #2166: foreach spuriously autovivifies";
+ my %h;
+ foreach (@h{a, b}) {}
+ if(keys(%h)) {
+ todo_skip("RT #2166: foreach spuriously autovivifies");
+ }
+}
Added: vendor/perl/dist/t/op/fresh_perl_utf8.t
===================================================================
--- vendor/perl/dist/t/op/fresh_perl_utf8.t (rev 0)
+++ vendor/perl/dist/t/op/fresh_perl_utf8.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,21 @@
+#!./perl
+
+#This file is intentionally written in UTF-8
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+plan 1;
+
+use utf8;
+use strict;
+use open qw( :utf8 :std );
+
+{
+ local $@;
+ eval 'sub testme { my $ᨕ = "test"; { local $ᨕ = "new test"; print $ᨕ } }';
+ like( $@, qr/Can't localize lexical variable \$ᨕ at /u, q!"Can't localize lexical" error is in UTF-8! );
+}
Added: vendor/perl/dist/t/op/hash-rt85026.t
===================================================================
--- vendor/perl/dist/t/op/hash-rt85026.t (rev 0)
+++ vendor/perl/dist/t/op/hash-rt85026.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,69 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+ require './test.pl';
+ skip_all_without_dynamic_extension("Devel::Peek");
+}
+
+use strict;
+use Devel::Peek;
+use File::Temp qw(tempdir);
+use File::Spec;
+
+my %hash = map +($_ => 1), ("a".."z");
+
+my $tmp_dir = tempdir(CLEANUP => 1);
+my $tmp_file = File::Spec->catfile($tmp_dir, 'dump');
+
+sub riter {
+ local *OLDERR;
+ open(OLDERR, ">&STDERR") || die "Can't dup STDERR: $!";
+ open(STDERR, ">", $tmp_file) ||
+ die "Could not open '$tmp_file' for write: $^E";
+ Dump(\%hash);
+ open(STDERR, ">&OLDERR") || die "Can't dup OLDERR: $!";
+ open(my $fh, "<", $tmp_file) ||
+ die "Could not open '$tmp_file' for read: $^E";
+ local $/;
+ my $dump = <$fh>;
+ my ($riter) = $dump =~ /^\s*RITER\s*=\s*(\d+)/m or
+ die "No plain RITER in dump '$dump'";
+ return $riter;
+}
+
+my @riters;
+while (my $key = each %hash) {
+ push @{$riters[riter()]}, $key;
+}
+
+my ($first_key, $second_key);
+my $riter = 0;
+for my $chain (@riters) {
+ if ($chain && @$chain >= 2) {
+ $first_key = $chain->[0];
+ $second_key = $chain->[1];
+ last;
+ }
+ $riter++;
+}
+$first_key ||
+ skip_all "No 2 element chains; need a different initial HASH";
+$| = 1;
+
+plan(1);
+
+# Ok all preparation is done
+note <<"EOF"
+Found keys '$first_key' and '$second_key' on chain $riter
+Will now iterato to key '$first_key' then delete '$first_key' and '$second_key'.
+EOF
+;
+1 until $first_key eq each %hash;
+delete $hash{$first_key};
+delete $hash{$second_key};
+
+note "Now iterating into freed memory\n";
+1 for each %hash;
+ok(1, "Survived!");
Added: vendor/perl/dist/t/op/heredoc.t
===================================================================
--- vendor/perl/dist/t/op/heredoc.t (rev 0)
+++ vendor/perl/dist/t/op/heredoc.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,85 @@
+# tests for heredocs besides what is tested in base/lex.t
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+use strict;
+plan(tests => 9);
+
+
+# heredoc without newline (#65838)
+{
+ my $string = <<'HEREDOC';
+testing for 65838
+HEREDOC
+
+ my $code = "<<'HEREDOC';\n${string}HEREDOC"; # HD w/o newline, in eval-string
+ my $hd = eval $code or warn "$@ ---";
+ is($hd, $string, "no terminating newline in string-eval");
+}
+
+
+# here-doc edge cases
+{
+ my $string = "testing for 65838";
+
+ fresh_perl_is(
+ "print <<'HEREDOC';\n${string}\nHEREDOC",
+ $string,
+ {},
+ "heredoc at EOF without trailing newline"
+ );
+
+ fresh_perl_is(
+ "print <<;\n$string\n",
+ $string,
+ { switches => ['-X'] },
+ "blank-terminated heredoc at EOF"
+ );
+ fresh_perl_is(
+ "print <<\n$string\n",
+ $string,
+ { switches => ['-X'] },
+ "blank-terminated heredoc at EOF and no semicolon"
+ );
+ fresh_perl_is(
+ "print <<foo\r\nick and queasy\r\nfoo\r\n",
+ 'ick and queasy',
+ { switches => ['-X'] },
+ "crlf-terminated heredoc"
+ );
+ fresh_perl_is(
+ "print qq|\${\\<<foo}|\nick and queasy\nfoo\n",
+ 'ick and queasy',
+ { switches => ['-w'], stderr => 1 },
+ 'no warning for qq|${\<<foo}| in file'
+ );
+}
+
+
+# here-doc parse failures
+{
+ fresh_perl_like(
+ "print <<HEREDOC;\nwibble\n HEREDOC",
+ qr/find string terminator/,
+ {},
+ "string terminator must start at newline"
+ );
+
+ fresh_perl_like(
+ "print <<;\nno more newlines",
+ qr/find string terminator/,
+ { switches => ['-X'] },
+ "empty string terminator still needs a newline"
+ );
+
+ fresh_perl_like(
+ "print <<ThisTerminatorIsLongerThanTheData;\nno more newlines",
+ qr/find string terminator/,
+ {},
+ "long terminator fails correctly"
+ );
+}
Added: vendor/perl/dist/t/op/lexsub.t
===================================================================
--- vendor/perl/dist/t/op/lexsub.t (rev 0)
+++ vendor/perl/dist/t/op/lexsub.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,713 @@
+#!perl
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+ require './test.pl';
+ *bar::is = *is;
+ *bar::like = *like;
+}
+no warnings 'deprecated';
+plan 136;
+
+# -------------------- Errors with feature disabled -------------------- #
+
+eval "#line 8 foo\nmy sub foo";
+is $@, qq 'Experimental "my" subs not enabled at foo line 8.\n',
+ 'my sub unexperimental error';
+eval "#line 8 foo\nCORE::state sub foo";
+is $@, qq 'Experimental "state" subs not enabled at foo line 8.\n',
+ 'state sub unexperimental error';
+eval "#line 8 foo\nour sub foo";
+is $@, qq 'Experimental "our" subs not enabled at foo line 8.\n',
+ 'our sub unexperimental error';
+
+# -------------------- our -------------------- #
+
+no warnings "experimental::lexical_subs";
+use feature 'lexical_subs';
+{
+ our sub foo { 42 }
+ is foo, 42, 'calling our sub from same package';
+ is &foo, 42, 'calling our sub from same package (amper)';
+ is do foo(), 42, 'calling our sub from same package (do)';
+ package bar;
+ sub bar::foo { 43 }
+ is foo, 42, 'calling our sub from another package';
+ is &foo, 42, 'calling our sub from another package (amper)';
+ is do foo(), 42, 'calling our sub from another package (do)';
+}
+package bar;
+is foo, 43, 'our sub falling out of scope';
+is &foo, 43, 'our sub falling out of scope (called via amper)';
+is do foo(), 43, 'our sub falling out of scope (called via amper)';
+package main;
+{
+ sub bar::a { 43 }
+ our sub a {
+ if (shift) {
+ package bar;
+ is a, 43, 'our sub invisible inside itself';
+ is &a, 43, 'our sub invisible inside itself (called via amper)';
+ is do a(), 43, 'our sub invisible inside itself (called via do)';
+ }
+ 42
+ }
+ a(1);
+ sub bar::b { 43 }
+ our sub b;
+ our sub b {
+ if (shift) {
+ package bar;
+ is b, 42, 'our sub visible inside itself after decl';
+ is &b, 42, 'our sub visible inside itself after decl (amper)';
+ is do b(), 42, 'our sub visible inside itself after decl (do)';
+ }
+ 42
+ }
+ b(1)
+}
+sub c { 42 }
+sub bar::c { 43 }
+{
+ our sub c;
+ package bar;
+ is c, 42, 'our sub foo; makes lex alias for existing sub';
+ is &c, 42, 'our sub foo; makes lex alias for existing sub (amper)';
+ is do c(), 42, 'our sub foo; makes lex alias for existing sub (do)';
+}
+{
+ our sub d;
+ sub bar::d { 'd43' }
+ package bar;
+ sub d { 'd42' }
+ is eval ::d, 'd42', 'our sub foo; applies to subsequent sub foo {}';
+}
+{
+ our sub e ($);
+ is prototype "::e", '$', 'our sub with proto';
+}
+{
+ our sub if() { 42 }
+ my $x = if if if;
+ is $x, 42, 'lexical subs (even our) override all keywords';
+ package bar;
+ my $y = if if if;
+ is $y, 42, 'our subs from other packages override all keywords';
+}
+
+# -------------------- state -------------------- #
+
+use feature 'state'; # state
+{
+ state sub foo { 44 }
+ isnt \&::foo, \&foo, 'state sub is not stored in the package';
+ is eval foo, 44, 'calling state sub from same package';
+ is eval &foo, 44, 'calling state sub from same package (amper)';
+ is eval do foo(), 44, 'calling state sub from same package (do)';
+ package bar;
+ is eval foo, 44, 'calling state sub from another package';
+ is eval &foo, 44, 'calling state sub from another package (amper)';
+ is eval do foo(), 44, 'calling state sub from another package (do)';
+}
+package bar;
+is foo, 43, 'state sub falling out of scope';
+is &foo, 43, 'state sub falling out of scope (called via amper)';
+is do foo(), 43, 'state sub falling out of scope (called via amper)';
+{
+ sub sa { 43 }
+ state sub sa {
+ if (shift) {
+ is sa, 43, 'state sub invisible inside itself';
+ is &sa, 43, 'state sub invisible inside itself (called via amper)';
+ is do sa(), 43, 'state sub invisible inside itself (called via do)';
+ }
+ 44
+ }
+ sa(1);
+ sub sb { 43 }
+ state sub sb;
+ state sub sb {
+ if (shift) {
+ # ‘state sub foo{}’ creates a new pad entry, not reusing the forward
+ # declaration. Being invisible inside itself, it sees the stub.
+ eval{sb};
+ like $@, qr/^Undefined subroutine &sb called at /,
+ 'state sub foo {} after forward declaration';
+ eval{&sb};
+ like $@, qr/^Undefined subroutine &sb called at /,
+ 'state sub foo {} after forward declaration (amper)';
+ eval{do sb()};
+ like $@, qr/^Undefined subroutine &sb called at /,
+ 'state sub foo {} after forward declaration (do)';
+ }
+ 44
+ }
+ sb(1);
+ sub sb2 { 43 }
+ state sub sb2;
+ sub sb2 {
+ if (shift) {
+ package bar;
+ is sb2, 44, 'state sub visible inside itself after decl';
+ is &sb2, 44, 'state sub visible inside itself after decl (amper)';
+ is do sb2(), 44, 'state sub visible inside itself after decl (do)';
+ }
+ 44
+ }
+ sb2(1);
+ state sub sb3;
+ {
+ state sub sb3 { # new pad entry
+ # The sub containing this comment is invisible inside itself.
+ # So this one here will assign to the outer pad entry:
+ sub sb3 { 47 }
+ }
+ }
+ is eval{sb3}, 47,
+ 'sub foo{} applying to "state sub foo;" even inside state sub foo{}';
+ # Same test again, but inside an anonymous sub
+ sub {
+ state sub sb4;
+ {
+ state sub sb4 {
+ sub sb4 { 47 }
+ }
+ }
+ is sb4, 47,
+ 'sub foo{} applying to "state sub foo;" even inside state sub foo{}';
+ }->();
+}
+sub sc { 43 }
+{
+ state sub sc;
+ eval{sc};
+ like $@, qr/^Undefined subroutine &sc called at /,
+ 'state sub foo; makes no lex alias for existing sub';
+ eval{&sc};
+ like $@, qr/^Undefined subroutine &sc called at /,
+ 'state sub foo; makes no lex alias for existing sub (amper)';
+ eval{do sc()};
+ like $@, qr/^Undefined subroutine &sc called at /,
+ 'state sub foo; makes no lex alias for existing sub (do)';
+}
+package main;
+{
+ state sub se ($);
+ is prototype eval{\&se}, '$', 'state sub with proto';
+ is prototype "se", undef, 'prototype "..." ignores state subs';
+}
+{
+ state sub if() { 44 }
+ my $x = if if if;
+ is $x, 44, 'state subs override all keywords';
+ package bar;
+ my $y = if if if;
+ is $y, 44, 'state subs from other packages override all keywords';
+}
+{
+ use warnings; no warnings "experimental::lexical_subs";
+ state $w ;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ eval '#line 87 squidges
+ state sub foo;
+ state sub foo {};
+ ';
+ is $w,
+ '"state" subroutine &foo masks earlier declaration in same scope at '
+ . "squidges line 88.\n",
+ 'warning for state sub masking earlier declaration';
+}
+# Since state vars inside anonymous subs are cloned at the same time as the
+# anonymous subs containing them, the same should happen for state subs.
+sub make_closure {
+ my $x = shift;
+ sub {
+ state sub foo { $x }
+ foo
+ }
+}
+$sub1 = make_closure 48;
+$sub2 = make_closure 49;
+is &$sub1, 48, 'state sub in closure (1)';
+is &$sub2, 49, 'state sub in closure (2)';
+# But we need to test that state subs actually do persist from one invoca-
+# tion of a named sub to another (i.e., that they are not my subs).
+{
+ use warnings; no warnings "experimental::lexical_subs";
+ state $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ eval '#line 65 teetet
+ sub foom {
+ my $x = shift;
+ state sub poom { $x }
+ eval{\&poom}
+ }
+ ';
+ is $w, "Variable \"\$x\" will not stay shared at teetet line 67.\n",
+ 'state subs get "Variable will not stay shared" messages';
+ my $poom = foom(27);
+ my $poom2 = foom(678);
+ is eval{$poom->()}, eval {$poom2->()},
+ 'state subs close over the first outer my var, like pkg subs';
+ my $x = 43;
+ for $x (765) {
+ state sub etetetet { $x }
+ is eval{etetetet}, 43, 'state sub ignores for() localisation';
+ }
+}
+# And we also need to test that multiple state subs can close over each
+# other’s entries in the parent subs pad, and that cv_clone is not con-
+# fused by that.
+sub make_anon_with_state_sub{
+ sub {
+ state sub s1;
+ state sub s2 { \&s1 }
+ sub s1 { \&s2 }
+ if (@_) { return \&s1 }
+ is s1,\&s2, 'state sub in anon closure closing over sibling state sub';
+ is s2,\&s1, 'state sub in anon closure closing over sibling state sub';
+ }
+}
+{
+ my $s = make_anon_with_state_sub;
+ &$s;
+
+ # And make sure the state subs were actually cloned.
+ isnt make_anon_with_state_sub->(0), &$s(0),
+ 'state subs in anon subs are cloned';
+ is &$s(0), &$s(0), 'but only when the anon sub is cloned';
+}
+{
+ state sub BEGIN { exit };
+ pass 'state subs are never special blocks';
+ state sub END { shift }
+ is eval{END('jkqeudth')}, jkqeudth,
+ 'state sub END {shift} implies @_, not @ARGV';
+}
+{
+ state sub redef {}
+ use warnings; no warnings "experimental::lexical_subs";
+ state $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ eval "#line 56 pygpyf\nsub redef {}";
+ is $w, "Subroutine redef redefined at pygpyf line 56.\n",
+ "sub redefinition warnings from state subs";
+}
+{
+ state sub p (\@) {
+ is ref $_[0], 'ARRAY', 'state sub with proto';
+ }
+ p(my @a);
+ p my @b;
+ state sub q () { 45 }
+ is q(), 45, 'state constant called with parens';
+}
+{
+ state sub x;
+ eval 'sub x {3}';
+ is x, 3, 'state sub defined inside eval';
+
+ sub r {
+ state sub foo { 3 };
+ if (@_) { # outer call
+ r();
+ is foo(), 42,
+ 'state sub run-time redefinition applies to all recursion levels';
+ }
+ else { # inner call
+ eval 'sub foo { 42 }';
+ }
+ }
+ r(1);
+}
+like runperl(
+ switches => [ '-Mfeature=:all' ],
+ prog => 'state sub a { foo ref } a()',
+ stderr => 1
+ ),
+ qr/syntax error/,
+ 'referencing a state sub after a syntax error does not crash';
+
+# -------------------- my -------------------- #
+
+{
+ my sub foo { 44 }
+ isnt \&::foo, \&foo, 'my sub is not stored in the package';
+ is foo, 44, 'calling my sub from same package';
+ is &foo, 44, 'calling my sub from same package (amper)';
+ is do foo(), 44, 'calling my sub from same package (do)';
+ package bar;
+ is foo, 44, 'calling my sub from another package';
+ is &foo, 44, 'calling my sub from another package (amper)';
+ is do foo(), 44, 'calling my sub from another package (do)';
+}
+package bar;
+is foo, 43, 'my sub falling out of scope';
+is &foo, 43, 'my sub falling out of scope (called via amper)';
+is do foo(), 43, 'my sub falling out of scope (called via amper)';
+{
+ sub ma { 43 }
+ my sub ma {
+ if (shift) {
+ is ma, 43, 'my sub invisible inside itself';
+ is &ma, 43, 'my sub invisible inside itself (called via amper)';
+ is do ma(), 43, 'my sub invisible inside itself (called via do)';
+ }
+ 44
+ }
+ ma(1);
+ sub mb { 43 }
+ my sub mb;
+ my sub mb {
+ if (shift) {
+ # ‘my sub foo{}’ creates a new pad entry, not reusing the forward
+ # declaration. Being invisible inside itself, it sees the stub.
+ eval{mb};
+ like $@, qr/^Undefined subroutine &mb called at /,
+ 'my sub foo {} after forward declaration';
+ eval{&mb};
+ like $@, qr/^Undefined subroutine &mb called at /,
+ 'my sub foo {} after forward declaration (amper)';
+ eval{do mb()};
+ like $@, qr/^Undefined subroutine &mb called at /,
+ 'my sub foo {} after forward declaration (do)';
+ }
+ 44
+ }
+ mb(1);
+ sub mb2 { 43 }
+ my sub sb2;
+ sub mb2 {
+ if (shift) {
+ package bar;
+ is mb2, 44, 'my sub visible inside itself after decl';
+ is &mb2, 44, 'my sub visible inside itself after decl (amper)';
+ is do mb2(), 44, 'my sub visible inside itself after decl (do)';
+ }
+ 44
+ }
+ mb2(1);
+ my sub mb3;
+ {
+ my sub mb3 { # new pad entry
+ # The sub containing this comment is invisible inside itself.
+ # So this one here will assign to the outer pad entry:
+ sub mb3 { 47 }
+ }
+ }
+ is eval{mb3}, 47,
+ 'sub foo{} applying to "my sub foo;" even inside my sub foo{}';
+ # Same test again, but inside an anonymous sub
+ sub {
+ my sub mb4;
+ {
+ my sub mb4 {
+ sub mb4 { 47 }
+ }
+ }
+ is mb4, 47,
+ 'sub foo{} applying to "my sub foo;" even inside my sub foo{}';
+ }->();
+}
+sub mc { 43 }
+{
+ my sub mc;
+ eval{mc};
+ like $@, qr/^Undefined subroutine &mc called at /,
+ 'my sub foo; makes no lex alias for existing sub';
+ eval{&mc};
+ like $@, qr/^Undefined subroutine &mc called at /,
+ 'my sub foo; makes no lex alias for existing sub (amper)';
+ eval{do mc()};
+ like $@, qr/^Undefined subroutine &mc called at /,
+ 'my sub foo; makes no lex alias for existing sub (do)';
+}
+package main;
+{
+ my sub me ($);
+ is prototype eval{\&me}, '$', 'my sub with proto';
+ is prototype "me", undef, 'prototype "..." ignores my subs';
+}
+{
+ my sub if() { 44 }
+ my $x = if if if;
+ is $x, 44, 'my subs override all keywords';
+ package bar;
+ my $y = if if if;
+ is $y, 44, 'my subs from other packages override all keywords';
+}
+{
+ use warnings; no warnings "experimental::lexical_subs";
+ my $w ;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ eval '#line 87 squidges
+ my sub foo;
+ my sub foo {};
+ ';
+ is $w,
+ '"my" subroutine &foo masks earlier declaration in same scope at '
+ . "squidges line 88.\n",
+ 'warning for my sub masking earlier declaration';
+}
+# Test that my subs are cloned inside anonymous subs.
+sub mmake_closure {
+ my $x = shift;
+ sub {
+ my sub foo { $x }
+ foo
+ }
+}
+$sub1 = mmake_closure 48;
+$sub2 = mmake_closure 49;
+is &$sub1, 48, 'my sub in closure (1)';
+is &$sub2, 49, 'my sub in closure (2)';
+# Test that they are cloned in named subs.
+{
+ use warnings; no warnings "experimental::lexical_subs";
+ my $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ eval '#line 65 teetet
+ sub mfoom {
+ my $x = shift;
+ my sub poom { $x }
+ \&poom
+ }
+ ';
+ is $w, undef, 'my subs get no "Variable will not stay shared" messages';
+ my $poom = mfoom(27);
+ my $poom2 = mfoom(678);
+ is $poom->(), 27, 'my subs closing over outer my var (1)';
+ is $poom2->(), 678, 'my subs closing over outer my var (2)';
+ my $x = 43;
+ my sub aoeu;
+ for $x (765) {
+ my sub etetetet { $x }
+ sub aoeu { $x }
+ is etetetet, 765, 'my sub respects for() localisation';
+ is aoeu, 43, 'unless it is declared outside the for loop';
+ }
+}
+# And we also need to test that multiple my subs can close over each
+# other’s entries in the parent subs pad, and that cv_clone is not con-
+# fused by that.
+sub make_anon_with_my_sub{
+ sub {
+ my sub s1;
+ my sub s2 { \&s1 }
+ sub s1 { \&s2 }
+ if (@_) { return eval { \&s1 } }
+ is eval{s1},eval{\&s2}, 'my sub in anon closure closing over sibling my sub';
+ is eval{s2},eval{\&s1}, 'my sub in anon closure closing over sibling my sub';
+ }
+}
+
+# Test my subs inside predeclared my subs
+{
+ my sub s2;
+ sub s2 {
+ my $x = 3;
+ my sub s3 { eval '$x' }
+ s3;
+ }
+ is s2, 3, 'my sub inside predeclared my sub';
+}
+
+{
+ my $s = make_anon_with_my_sub;
+ &$s;
+
+ # And make sure the my subs were actually cloned.
+ isnt make_anon_with_my_sub->(0), &$s(0),
+ 'my subs in anon subs are cloned';
+ isnt &$s(0), &$s(0), 'at each invocation of the enclosing sub';
+}
+{
+ my sub BEGIN { exit };
+ pass 'my subs are never special blocks';
+ my sub END { shift }
+ is END('jkqeudth'), jkqeudth,
+ 'my sub END {shift} implies @_, not @ARGV';
+}
+{
+ my sub redef {}
+ use warnings; no warnings "experimental::lexical_subs";
+ my $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ eval "#line 56 pygpyf\nsub redef {}";
+ is $w, "Subroutine redef redefined at pygpyf line 56.\n",
+ "sub redefinition warnings from my subs";
+
+ undef $w;
+ sub {
+ my sub x {};
+ sub { eval "#line 87 khaki\n\\&x" }
+ }->()();
+ is $w, "Subroutine \"&x\" is not available at khaki line 87.\n",
+ "unavailability warning during compilation of eval in closure";
+
+ undef $w;
+ no warnings 'void';
+ eval <<'->()();';
+#line 87 khaki
+ sub {
+ my sub x{}
+ sub not_lexical8 {
+ \&x
+ }
+ }
+->()();
+ is $w, "Subroutine \"&x\" is not available at khaki line 90.\n",
+ "unavailability warning during compilation of named sub in anon";
+
+ undef $w;
+ sub not_lexical9 {
+ my sub x {};
+ format =
+@
+&x
+.
+ }
+ eval { write };
+ my($f,$l) = (__FILE__,__LINE__ - 1);
+ is $w, "Subroutine \"&x\" is not available at $f line $l.\n",
+ 'unavailability warning during cloning';
+ $l -= 3;
+ is $@, "Undefined subroutine &x called at $f line $l.\n",
+ 'Vivified sub is correctly named';
+}
+sub not_lexical10 {
+ my sub foo;
+ foo();
+ sub not_lexical11 {
+ my sub bar {
+ my $x = 'khaki car keys for the khaki car';
+ not_lexical10();
+ sub foo {
+ is $x, 'khaki car keys for the khaki car',
+ 'mysubs in inner clonables use the running clone of their CvOUTSIDE'
+ }
+ }
+ bar()
+ }
+}
+not_lexical11();
+{
+ my sub p (\@) {
+ is ref $_[0], 'ARRAY', 'my sub with proto';
+ }
+ p(my @a);
+ p @a;
+ my sub q () { 46 }
+ is q(), 46, 'my constant called with parens';
+}
+{
+ my sub x;
+ my $count;
+ sub x { x() if $count++ < 10 }
+ x();
+ is $count, 11, 'my recursive subs';
+}
+{
+ my sub x;
+ eval 'sub x {3}';
+ is x, 3, 'my sub defined inside eval';
+}
+
+{
+ state $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ eval q{ my sub george () { 2 } };
+ is $w, undef, 'no double free from constant my subs';
+}
+like runperl(
+ switches => [ '-Mfeature=:all' ],
+ prog => 'my sub a { foo ref } a()',
+ stderr => 1
+ ),
+ qr/syntax error/,
+ 'referencing a my sub after a syntax error does not crash';
+
+# -------------------- Interactions (and misc tests) -------------------- #
+
+is sub {
+ my sub s1;
+ my sub s2 { 3 };
+ sub s1 { state sub foo { \&s2 } foo }
+ s1
+ }->()(), 3, 'state sub inside my sub closing over my sub uncle';
+
+{
+ my sub s2 { 3 };
+ sub not_lexical { state sub foo { \&s2 } foo }
+ is not_lexical->(), 3, 'state subs that reference my sub from outside';
+}
+
+# Test my subs inside predeclared package subs
+# This test also checks that CvOUTSIDE pointers are not mangled when the
+# inner sub’s CvOUTSIDE points to another sub.
+sub not_lexical2;
+sub not_lexical2 {
+ my $x = 23;
+ my sub bar;
+ sub not_lexical3 {
+ not_lexical2();
+ sub bar { $x }
+ };
+ bar
+}
+is not_lexical3, 23, 'my subs inside predeclared package subs';
+
+# Test my subs inside predeclared package sub, where the lexical sub is
+# declared outside the package sub.
+# This checks that CvOUTSIDE pointers are fixed up even when the sub is
+# not declared inside the sub that its CvOUTSIDE points to.
+sub not_lexical5 {
+ my sub foo;
+ sub not_lexical4;
+ sub not_lexical4 {
+ my $x = 234;
+ not_lexical5();
+ sub foo { $x }
+ }
+ foo
+}
+is not_lexical4, 234,
+ 'my sub defined in predeclared pkg sub but declared outside';
+
+undef *not_lexical6;
+{
+ my sub foo;
+ sub not_lexical6 { sub foo { } }
+ pass 'no crash when cloning a mysub declared inside an undef pack sub';
+}
+
+undef ¬_lexical7;
+eval 'sub not_lexical7 { my @x }';
+{
+ my sub foo;
+ foo();
+ sub not_lexical7 {
+ state $x;
+ sub foo {
+ is ref \$x, 'SCALAR',
+ "redeffing a mysub's outside does not make it use the wrong pad"
+ }
+ }
+}
+
+like runperl(
+ switches => [ '-Mfeature=:all', '-Mwarnings=FATAL,all', '-M-warnings=experimental::lexical_subs' ],
+ prog => 'my sub foo; sub foo { foo } foo',
+ stderr => 1
+ ),
+ qr/Deep recursion on subroutine "foo"/,
+ 'deep recursion warnings for lexical subs do not crash';
+
+like runperl(
+ switches => [ '-Mfeature=:all', '-Mwarnings=FATAL,all', '-M-warnings=experimental::lexical_subs' ],
+ prog => 'my sub foo() { 42 } undef &foo',
+ stderr => 1
+ ),
+ qr/Constant subroutine foo undefined at /,
+ 'constant undefinition warnings for lexical subs do not crash';
Added: vendor/perl/dist/t/op/lock.t
===================================================================
--- vendor/perl/dist/t/op/lock.t (rev 0)
+++ vendor/perl/dist/t/op/lock.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,16 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = qw(. ../lib);
+ require './test.pl';
+}
+plan tests => 5;
+
+is \lock $foo, \$foo, 'lock returns a scalar argument';
+is lock @foo, \@foo, 'lock returns a ref to its array argument';
+is lock %foo, \%foo, 'lock returns a ref to its hash argument';
+is lock &foo, \&foo, 'lock returns a ref to its code argument';
+
+sub eulavl : lvalue { $x }
+is lock &eulavl, \&eulavl, 'lock returns a ref to its lvalue sub arg';
Added: vendor/perl/dist/t/op/require_37033.t
===================================================================
--- vendor/perl/dist/t/op/require_37033.t (rev 0)
+++ vendor/perl/dist/t/op/require_37033.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,42 @@
+#!perl -w
+use strict;
+
+# Check that require doesn't leave the handle it uses open, if it happens that
+# the handle it opens gets file descriptor 0. RT #37033.
+
+require './test.pl';
+ at INC = 'lib';
+
+sub test_require {
+ my ($state, $want) = @_;
+ delete $INC{'test_use_14937.pm'};
+ open my $fh, '<', 'README' or die "Can't open README: $!";
+ my $fileno = fileno $fh;
+ if (defined $want) {
+ is($fileno, $want,
+ "file handle has correct numeric file descriptor $state");
+ } else {
+ like($fileno, qr/\A\d+\z/,
+ "file handle has a numeric file descriptor $state");
+ }
+ close $fh or die;
+
+ is($INC{'test_use_14937.pm'}, undef, "test_use_14937 isn't loaded $state");
+ require test_use_14937;
+ isnt($INC{'test_use_14937.pm'}, undef, "test_use_14937 is loaded $state");
+
+ open $fh, '<', 'README' or die "Can't open README: $!";
+ is(fileno $fh, $fileno,
+ "file handle has the same numeric file descriptor $state");
+ close $fh or die;
+}
+
+is(fileno STDIN, 0, 'STDIN is open on file descriptor 0');
+test_require('(STDIN open)');
+
+close STDIN or die "Can't close STDIN: $!";
+
+is(fileno STDIN, undef, 'STDIN is closed');
+test_require('(STDIN closed)', 0);
+
+done_testing();
Added: vendor/perl/dist/t/op/select.t
===================================================================
--- vendor/perl/dist/t/op/select.t (rev 0)
+++ vendor/perl/dist/t/op/select.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,34 @@
+#!./perl
+
+BEGIN {
+ chdir 't';
+ require './test.pl';
+}
+
+plan reverse 9;
+
+
+open my $fh, "test.pl" or die "$0 unfortunately cannot open test.pl: $!";
+
+is select, 'main::STDOUT', 'select retval';
+is select($fh), 'main::STDOUT', 'select retval when called with argument';
+ok ref select, 'select returns ref for glob generated by open';
+is select, $fh, 'the ref returned references the right referent';
+is select(STDOUT), $fh, 'select previous ref when setting to bareword';
+is select, 'main::STDOUT', 'switching back to STDOUT';
+is ref\select, 'SCALAR', 'and STDOUT is a plain string';
+
+open foo::bar, "test.pl" or die "$0 sadly cannot open test.pl: $!";
+select foo::bar;
+$handle = \*foo::bar;
+$stash = \%foo::;
+*foo:: = *bar::;
+is select, $handle,
+ 'select returns ref for glob whose stash has been detached';
+
+open thwat::snin, "test.pl" or die "$0 is unable to open test.pl: $!";
+select thwat::snin;
+$handle = \*thwat::snin;
+*thwat:: = *snin::; # gv is now *__ANON__::snin
+is select, $handle,
+ 'select returns ref for glob with no stash pointer';
Added: vendor/perl/dist/t/op/sigsystem.t
===================================================================
--- vendor/perl/dist/t/op/sigsystem.t (rev 0)
+++ vendor/perl/dist/t/op/sigsystem.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,64 @@
+#!perl -w
+
+BEGIN {
+ require './test.pl';
+ skip_all_if_miniperl();
+ skip_all_without_config(qw(d_fork));
+}
+
+use strict;
+use constant TRUE => ($^X, '-e', 'exit 0');
+use Data::Dumper;
+
+plan tests => 4;
+
+SKIP: {
+ skip 'Platform doesn\'t support SIGCHLD', 4 if not exists $SIG{CHLD};
+ require POSIX;
+ require Time::HiRes;
+
+ my @pids;
+ $SIG{CHLD} = sub {
+ while ((my $child = waitpid(-1, POSIX::WNOHANG())) > 0) {
+ note "Reaped: $child";
+ push @pids, $child;
+ }
+ };
+ my $pid = fork // die "Can't fork: $!";
+ unless ($pid) {
+ note("Child PID: $$");
+ Time::HiRes::sleep(0.250);
+ POSIX::_exit(0);
+ }
+
+ test_system('without reaper');
+
+ test_system('with reaper');
+
+ note("Waiting briefly for SIGCHLD...");
+ Time::HiRes::sleep(0.500);
+
+ ok(@pids == 1, 'Reaped only one process');
+ ok($pids[0] == $pid, "Reaped the right process.") or diag(Dumper(\@pids));
+}
+
+sub test_system {
+ my $subtest = shift;
+
+ my $expected_zeroes = 10;
+ my $got_zeroes = 0;
+
+ # This test is looking for a race between system()'s waitpid() and a
+ # signal handler. Looping a few times increases the chances of
+ # catching the error.
+
+ for (1..$expected_zeroes) {
+ $got_zeroes++ unless system(TRUE);
+ }
+
+ is(
+ $got_zeroes, $expected_zeroes,
+ "system() $subtest succeeded $got_zeroes times out of $expected_zeroes"
+ );
+}
+
Added: vendor/perl/dist/t/op/svleak.pl
===================================================================
--- vendor/perl/dist/t/op/svleak.pl (rev 0)
+++ vendor/perl/dist/t/op/svleak.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+<<END
Added: vendor/perl/dist/t/op/unlink.t
===================================================================
--- vendor/perl/dist/t/op/unlink.t (rev 0)
+++ vendor/perl/dist/t/op/unlink.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,38 @@
+#!./perl
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+plan 6;
+
+# Need to run this in a quiet private directory as it assumes that it can
+# reliably delete fixed file names.
+my $tempdir = tempfile;
+
+mkdir $tempdir, 0700 or die "Can't mkdir '$tempdir': $!";
+chdir $tempdir or die die "Can't chdir '$tempdir': $!";
+
+sub make_file {
+ my $file = shift;
+ open my $fh, ">", $file or die "Can't open $file: $!";
+ close $fh or die "Can't close $file: $!";
+}
+
+make_file('aaa');
+is unlink('aaa'), 1, 'retval of unlink with one file name';
+ok (!-e 'aaa', 'unlink unlinked it');
+make_file($_) for 'aaa', 'bbb';
+is unlink('aaa','bbb','ccc'), 2,
+ 'retval of unlink with list that includes nonexistent file';
+ok (!-e 'aaa' && !-e 'bbb', 'unlink unlank the files it claims it unlank');
+$_ = 'zzz';
+make_file 'zzz';
+is unlink, 1, 'retval of unlink with no args';
+ok !-e 'zzz', 'unlink with no arg unlinked $_';
+
+
+chdir '..' or die "Couldn't chdir .. for cleanup: $!";
+rmdir $tempdir or die "Couldn't unlink tempdir '$tempdir': $!";
Added: vendor/perl/dist/t/op/while.t
===================================================================
--- vendor/perl/dist/t/op/while.t (rev 0)
+++ vendor/perl/dist/t/op/while.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,215 @@
+#!./perl
+
+BEGIN {
+ chdir 't';
+ require "test.pl";
+}
+
+plan(25);
+
+my $tmpfile = tempfile();
+open (tmp,'>', $tmpfile) || die "Can't create Cmd_while.tmp.";
+print tmp "tvi925\n";
+print tmp "tvi920\n";
+print tmp "vt100\n";
+print tmp "Amiga\n";
+print tmp "paper\n";
+close tmp or die "Could not close: $!";
+
+# test "last" command
+
+open(fh, $tmpfile) || die "Can't open Cmd_while.tmp.";
+while (<fh>) {
+ last if /vt100/;
+}
+ok(!eof && /vt100/);
+
+# test "next" command
+
+$bad = '';
+open(fh, $tmpfile) || die "Can't open Cmd_while.tmp.";
+while (<fh>) {
+ next if /vt100/;
+ $bad = 1 if /vt100/;
+}
+ok(eof && !/vt100/ && !$bad);
+
+# test "redo" command
+
+$bad = '';
+open(fh,$tmpfile) || die "Can't open Cmd_while.tmp.";
+while (<fh>) {
+ if (s/vt100/VT100/g) {
+ s/VT100/Vt100/g;
+ redo;
+ }
+ $bad = 1 if /vt100/;
+ $bad = 1 if /VT100/;
+}
+ok(eof && !$bad);
+
+# now do the same with a label and a continue block
+
+# test "last" command
+
+$badcont = '';
+open(fh,$tmpfile) || die "Can't open Cmd_while.tmp.";
+line: while (<fh>) {
+ if (/vt100/) {last line;}
+} continue {
+ $badcont = 1 if /vt100/;
+}
+ok(!eof && /vt100/);
+ok(!$badcont);
+
+# test "next" command
+
+$bad = '';
+$badcont = 1;
+open(fh,$tmpfile) || die "Can't open Cmd_while.tmp.";
+entry: while (<fh>) {
+ next entry if /vt100/;
+ $bad = 1 if /vt100/;
+} continue {
+ $badcont = '' if /vt100/;
+}
+ok(eof && !/vt100/ && !$bad);
+ok(!$badcont);
+
+# test "redo" command
+
+$bad = '';
+$badcont = '';
+open(fh,$tmpfile) || die "Can't open Cmd_while.tmp.";
+loop: while (<fh>) {
+ if (s/vt100/VT100/g) {
+ s/VT100/Vt100/g;
+ redo loop;
+ }
+ $bad = 1 if /vt100/;
+ $bad = 1 if /VT100/;
+} continue {
+ $badcont = 1 if /vt100/;
+}
+ok(eof && !$bad);
+ok(!$badcont);
+
+close(fh) || die "Can't close Cmd_while.tmp.";
+
+$i = 9;
+{
+ $i++;
+}
+is($i, 10);
+
+# Check curpm is reset when jumping out of a scope
+$i = 0;
+'abc' =~ /b/;
+WHILE:
+while (1) {
+ $i++;
+ is($` . $& . $', "abc");
+ { # Localize changes to $` and friends
+ 'end' =~ /end/;
+ redo WHILE if $i == 1;
+ next WHILE if $i == 2;
+ # 3 do a normal loop
+ last WHILE if $i == 4;
+ }
+}
+is($` . $& . $', "abc");
+
+# check that scope cleanup happens right when there's a continue block
+{
+ my $var = 16;
+ my (@got_var, @got_i);
+ while (my $i = ++$var) {
+ next if $i == 17;
+ last if $i > 17;
+ my $i = 0;
+ }
+ continue {
+ ($got_var, $got_i) = ($var, $i);
+ }
+ is($got_var, 17);
+ is($got_i, 17);
+}
+
+{
+ my $got_l;
+ local $l = 18;
+ {
+ local $l = 0
+ }
+ continue {
+ $got_l = $l;
+ }
+ is($got_l, 18);
+}
+
+{
+ my $got_l;
+ local $l = 19;
+ my $x = 0;
+ while (!$x++) {
+ local $l = 0
+ }
+ continue {
+ $got_l = $l;
+ }
+ is($got_l, $l);
+}
+
+{
+ my $ok = 1;
+ $i = 20;
+ while (1) {
+ my $x;
+ $ok = 0 if defined $x;
+ if ($i == 21) {
+ next;
+ }
+ last;
+ }
+ continue {
+ ++$i;
+ }
+ ok($ok);
+}
+
+sub save_context { $_[0] = wantarray; $_[1] }
+
+{
+ my $context = -1;
+ my $p = sub {
+ my $x = 1;
+ while ($x--) {
+ save_context($context, "foo");
+ }
+ };
+ is(scalar($p->()), 0);
+ is($context, undef, "last statement in while block has 'void' context");
+}
+
+{
+ my $context = -1;
+ my $p = sub {
+ my $x = 1;
+ {
+ save_context($context, "foo");
+ }
+ };
+ is(scalar($p->()), "foo");
+ is($context, "", "last statement in block has 'scalar' context");
+}
+
+{
+ # test scope is cleaned
+ my $i = 0;
+ my @a;
+ while ($i++ < 2) {
+ my $x;
+ push @a, \$x;
+ }
+ ok($a[0] ne $a[1]);
+}
Added: vendor/perl/dist/t/opbasic/arith.t
===================================================================
--- vendor/perl/dist/t/opbasic/arith.t (rev 0)
+++ vendor/perl/dist/t/opbasic/arith.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,458 @@
+#!./perl -w
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+# This file has been placed in t/opbasic to indicate that it should not use
+# functions imported from t/test.pl or Test::More, as those programs/libraries
+# use operators which are what is being tested in this file.
+
+print "1..167\n";
+
+sub try ($$$) {
+ print +($_[1] ? "ok" : "not ok"), " $_[0] - $_[2]\n";
+}
+sub tryeq ($$$$) {
+ if ($_[1] == $_[2]) {
+ print "ok $_[0]";
+ } else {
+ print "not ok $_[0] # $_[1] != $_[2]";
+ }
+ print " - $_[3]\n";
+}
+sub tryeq_sloppy ($$$$) {
+ if ($_[1] == $_[2]) {
+ print "ok $_[0]";
+ } else {
+ my $error = abs (($_[1] - $_[2]) / $_[1]);
+ if ($error < 1e-9) {
+ print "ok $_[0] # $_[1] is close to $_[2], \$^O eq $^O";
+ } else {
+ print "not ok $_[0] # $_[1] != $_[2]";
+ }
+ }
+ print " - $_[3]\n";
+}
+
+my $T = 1;
+tryeq $T++, 13 % 4, 1, 'modulo: positive positive';
+tryeq $T++, -13 % 4, 3, 'modulo: negative positive';
+tryeq $T++, 13 % -4, -3, 'modulo: positive negative';
+tryeq $T++, -13 % -4, -1, 'modulo: negative negative';
+
+# Give abs() a good work-out before using it in anger
+tryeq $T++, abs(0), 0, 'abs(): 0 0';
+tryeq $T++, abs(1), 1, 'abs(): 1 1';
+tryeq $T++, abs(-1), 1, 'abs(): -1 1';
+tryeq $T++, abs(2147483647), 2147483647, 'abs(): 2**31-1: pos pos';
+tryeq $T++, abs(-2147483647), 2147483647, 'abs(): 2**31-1: neg pos';
+tryeq $T++, abs(4294967295), 4294967295, 'abs(): 2**32-1: pos pos';
+tryeq $T++, abs(-4294967295), 4294967295, 'abs(): 2**32-1: neg pos';
+tryeq $T++, abs(9223372036854775807), 9223372036854775807,
+ 'abs(): 2**63-1: pos pos';
+tryeq $T++, abs(-9223372036854775807), 9223372036854775807,
+ 'abs(): 2**63-1: neg pos';
+# Assume no change whatever; no slop needed
+tryeq $T++, abs(1e50), 1e50, 'abs(): 1e50: pos pos';
+# Assume only sign bit flipped
+tryeq $T++, abs(-1e50), 1e50, 'abs(): 1e50: neg pos';
+
+my $limit = 1e6;
+
+# Division (and modulo) of floating point numbers
+# seem to be rather sloppy in Cray.
+$limit = 1e8 if $^O eq 'unicos';
+
+try $T++, abs( 13e21 % 4e21 - 1e21) < $limit, 'abs() for floating point';
+try $T++, abs(-13e21 % 4e21 - 3e21) < $limit, 'abs() for floating point';
+try $T++, abs( 13e21 % -4e21 - -3e21) < $limit, 'abs() for floating point';
+try $T++, abs(-13e21 % -4e21 - -1e21) < $limit, 'abs() for floating point';
+
+tryeq $T++, 4063328477 % 65535, 27407, 'UV behaves properly: modulo';
+tryeq $T++, 4063328477 % 4063328476, 1, 'UV behaves properly: modulo';
+tryeq $T++, 4063328477 % 2031664238, 1, 'UV behaves properly: modulo';
+tryeq $T++, 2031664238 % 4063328477, 2031664238,
+ 'UV behaves properly: modulo';
+
+tryeq $T++, 2147483647 + 0, 2147483647,
+ 'trigger wrapping on 32 bit IVs and UVs';
+
+tryeq $T++, 2147483647 + 1, 2147483648, 'IV + IV promotes to UV';
+tryeq $T++, 2147483640 + 10, 2147483650, 'IV + IV promotes to UV';
+tryeq $T++, 2147483647 + 2147483647, 4294967294, 'IV + IV promotes to UV';
+tryeq $T++, 2147483647 + 2147483649, 4294967296, 'IV + UV promotes to NV';
+tryeq $T++, 4294967294 + 2, 4294967296, 'UV + IV promotes to NV';
+tryeq $T++, 4294967295 + 4294967295, 8589934590, 'UV + UV promotes to NV';
+
+tryeq $T++, 2147483648 + -1, 2147483647, 'UV + IV promotes to IV';
+tryeq $T++, 2147483650 + -10, 2147483640, 'UV + IV promotes to IV';
+tryeq $T++, -1 + 2147483648, 2147483647, 'IV + UV promotes to IV';
+tryeq $T++, -10 + 4294967294, 4294967284, 'IV + UV promotes to IV';
+tryeq $T++, -2147483648 + -2147483648, -4294967296, 'IV + IV promotes to NV';
+tryeq $T++, -2147483640 + -10, -2147483650, 'IV + IV promotes to NV';
+
+# Hmm. Do not forget the simple stuff
+# addition
+tryeq $T++, 1 + 1, 2, 'addition of 2 positive integers';
+tryeq $T++, 4 + -2, 2, 'addition of positive and negative integer';
+tryeq $T++, -10 + 100, 90, 'addition of negative and positive integer';
+tryeq $T++, -7 + -9, -16, 'addition of 2 negative integers';
+tryeq $T++, -63 + +2, -61, 'addition of signed negative and positive integers';
+tryeq $T++, 4 + -1, 3, 'addition of positive and negative integer';
+tryeq $T++, -1 + 1, 0, 'addition which sums to 0';
+tryeq $T++, +29 + -29, 0, 'addition which sums to 0';
+tryeq $T++, -1 + 4, 3, 'addition of signed negative and positive integers';
+tryeq $T++, +4 + -17, -13, 'addition of signed positive and negative integers';
+
+# subtraction
+tryeq $T++, 3 - 1, 2, 'subtraction of two positive integers';
+tryeq $T++, 3 - 15, -12,
+ 'subtraction of two positive integers: minuend smaller';
+tryeq $T++, 3 - -7, 10, 'subtraction of positive and negative integer';
+tryeq $T++, -156 - 5, -161, 'subtraction of negative and positive integer';
+tryeq $T++, -156 - -5, -151, 'subtraction of two negative integers';
+tryeq $T++, -5 - -12, 7,
+ 'subtraction of two negative integers: minuend smaller';
+tryeq $T++, -3 - -3, 0, 'subtraction of two negative integers with result of 0';
+tryeq $T++, 15 - 15, 0, 'subtraction of two positive integers with result of 0';
+tryeq $T++, 2147483647 - 0, 2147483647, 'subtraction from large integer';
+tryeq $T++, 2147483648 - 0, 2147483648, 'subtraction from large integer';
+tryeq $T++, -2147483648 - 0, -2147483648,
+ 'subtraction from large negative integer';
+tryeq $T++, 0 - -2147483647, 2147483647,
+ 'subtraction of large negative integer from 0';
+tryeq $T++, -1 - -2147483648, 2147483647,
+ 'subtraction of large negative integer from negative integer';
+tryeq $T++, 2 - -2147483648, 2147483650,
+ 'subtraction of large negative integer from positive integer';
+tryeq $T++, 4294967294 - 3, 4294967291, 'subtraction from large integer';
+tryeq $T++, -2147483648 - -1, -2147483647,
+ 'subtraction from large negative integer';
+tryeq $T++, 2147483647 - -1, 2147483648, 'IV - IV promote to UV';
+tryeq $T++, 2147483647 - -2147483648, 4294967295, 'IV - IV promote to UV';
+tryeq $T++, 4294967294 - -3, 4294967297, 'UV - IV promote to NV';
+tryeq $T++, -2147483648 - +1, -2147483649, 'IV - IV promote to NV';
+tryeq $T++, 2147483648 - 2147483650, -2, 'UV - UV promote to IV';
+tryeq $T++, 2000000000 - 4000000000, -2000000000, 'IV - UV promote to IV';
+
+# No warnings should appear;
+my $a;
+$a += 1;
+tryeq $T++, $a, 1, '+= with positive';
+undef $a;
+$a += -1;
+tryeq $T++, $a, -1, '+= with negative';
+undef $a;
+$a += 4294967290;
+tryeq $T++, $a, 4294967290, '+= with positive';
+undef $a;
+$a += -4294967290;
+tryeq $T++, $a, -4294967290, '+= with negative';
+undef $a;
+$a += 4294967297;
+tryeq $T++, $a, 4294967297, '+= with positive';
+undef $a;
+$a += -4294967297;
+tryeq $T++, $a, -4294967297, '+= with negative';
+
+my $s;
+$s -= 1;
+tryeq $T++, $s, -1, '-= with positive';
+undef $s;
+$s -= -1;
+tryeq $T++, $s, +1, '-= with negative';
+undef $s;
+$s -= -4294967290;
+tryeq $T++, $s, +4294967290, '-= with negative';
+undef $s;
+$s -= 4294967290;
+tryeq $T++, $s, -4294967290, '-= with negative';
+undef $s;
+$s -= 4294967297;
+tryeq $T++, $s, -4294967297, '-= with positive';
+undef $s;
+$s -= -4294967297;
+tryeq $T++, $s, +4294967297, '-= with positive';
+
+# multiplication
+tryeq $T++, 1 * 3, 3, 'multiplication of two positive integers';
+tryeq $T++, -2 * 3, -6, 'multiplication of negative and positive integer';
+tryeq $T++, 3 * -3, -9, 'multiplication of positive and negative integer';
+tryeq $T++, -4 * -3, 12, 'multiplication of two negative integers';
+
+# check with 0xFFFF and 0xFFFF
+tryeq $T++, 65535 * 65535, 4294836225,
+ 'multiplication: 0xFFFF and 0xFFFF: pos pos';
+tryeq $T++, 65535 * -65535, -4294836225,
+ 'multiplication: 0xFFFF and 0xFFFF: pos neg';
+tryeq $T++, -65535 * 65535, -4294836225,
+ 'multiplication: 0xFFFF and 0xFFFF: pos neg';
+tryeq $T++, -65535 * -65535, 4294836225,
+ 'multiplication: 0xFFFF and 0xFFFF: neg neg';
+
+# check with 0xFFFF and 0x10001
+tryeq $T++, 65535 * 65537, 4294967295,
+ 'multiplication: 0xFFFF and 0x10001: pos pos';
+tryeq $T++, 65535 * -65537, -4294967295,
+ 'multiplication: 0xFFFF and 0x10001: pos neg';
+tryeq $T++, -65535 * 65537, -4294967295,
+ 'multiplication: 0xFFFF and 0x10001: neg pos';
+tryeq $T++, -65535 * -65537, 4294967295,
+ 'multiplication: 0xFFFF and 0x10001: neg neg';
+
+# check with 0x10001 and 0xFFFF
+tryeq $T++, 65537 * 65535, 4294967295,
+ 'multiplication: 0x10001 and 0xFFFF: pos pos';
+tryeq $T++, 65537 * -65535, -4294967295,
+ 'multiplication: 0x10001 and 0xFFFF: pos neg';
+tryeq $T++, -65537 * 65535, -4294967295,
+ 'multiplication: 0x10001 and 0xFFFF: neg pos';
+tryeq $T++, -65537 * -65535, 4294967295,
+ 'multiplication: 0x10001 and 0xFFFF: neg neg';
+
+# These should all be dones as NVs
+tryeq $T++, 65537 * 65537, 4295098369, 'multiplication: NV: pos pos';
+tryeq $T++, 65537 * -65537, -4295098369, 'multiplication: NV: pos neg';
+tryeq $T++, -65537 * 65537, -4295098369, 'multiplication: NV: neg pos';
+tryeq $T++, -65537 * -65537, 4295098369, 'multiplication: NV: neg neg';
+
+# will overflow an IV (in 32-bit)
+tryeq $T++, 46340 * 46342, 0x80001218,
+ 'multiplication: overflow an IV in 32-bit: pos pos';
+tryeq $T++, 46340 * -46342, -0x80001218,
+ 'multiplication: overflow an IV in 32-bit: pos neg';
+tryeq $T++, -46340 * 46342, -0x80001218,
+ 'multiplication: overflow an IV in 32-bit: neg pos';
+tryeq $T++, -46340 * -46342, 0x80001218,
+ 'multiplication: overflow an IV in 32-bit: neg neg';
+
+tryeq $T++, 46342 * 46340, 0x80001218,
+ 'multiplication: overflow an IV in 32-bit: pos pos';
+tryeq $T++, 46342 * -46340, -0x80001218,
+ 'multiplication: overflow an IV in 32-bit: pos neg';
+tryeq $T++, -46342 * 46340, -0x80001218,
+ 'multiplication: overflow an IV in 32-bit: neg pos';
+tryeq $T++, -46342 * -46340, 0x80001218,
+ 'multiplication: overflow an IV in 32-bit: neg neg';
+
+# will overflow a positive IV (in 32-bit)
+tryeq $T++, 65536 * 32768, 0x80000000,
+ 'multiplication: overflow a positive IV in 32-bit: pos pos';
+tryeq $T++, 65536 * -32768, -0x80000000,
+ 'multiplication: overflow a positive IV in 32-bit: pos neg';
+tryeq $T++, -65536 * 32768, -0x80000000,
+ 'multiplication: overflow a positive IV in 32-bit: neg pos';
+tryeq $T++, -65536 * -32768, 0x80000000,
+ 'multiplication: overflow a positive IV in 32-bit: neg neg';
+
+tryeq $T++, 32768 * 65536, 0x80000000,
+ 'multiplication: overflow a positive IV in 32-bit: pos pos';
+tryeq $T++, 32768 * -65536, -0x80000000,
+ 'multiplication: overflow a positive IV in 32-bit: pos neg';
+tryeq $T++, -32768 * 65536, -0x80000000,
+ 'multiplication: overflow a positive IV in 32-bit: neg pos';
+tryeq $T++, -32768 * -65536, 0x80000000,
+ 'multiplication: overflow a positive IV in 32-bit: neg neg';
+
+# 2147483647 is prime. bah.
+
+tryeq $T++, 46339 * 46341, 0x7ffea80f,
+ 'multiplication: hex product: pos pos';
+tryeq $T++, 46339 * -46341, -0x7ffea80f,
+ 'multiplication: hex product: pos neg';
+tryeq $T++, -46339 * 46341, -0x7ffea80f,
+ 'multiplication: hex product: neg pos';
+tryeq $T++, -46339 * -46341, 0x7ffea80f,
+ 'multiplication: hex product: neg neg';
+
+# leading space should be ignored
+
+tryeq $T++, 1 + " 1", 2, 'ignore leading space: addition';
+tryeq $T++, 3 + " -1", 2, 'ignore leading space: subtraction';
+tryeq $T++, 1.2, " 1.2", 'floating point and string equivalent: positive';
+tryeq $T++, -1.2, " -1.2", 'floating point and string equivalent: negative';
+
+# division
+tryeq $T++, 28/14, 2, 'division of two positive integers';
+tryeq $T++, 28/-7, -4, 'division of positive integer by negative';
+tryeq $T++, -28/4, -7, 'division of negative integer by positive';
+tryeq $T++, -28/-2, 14, 'division of negative integer by negative';
+
+tryeq $T++, 0x80000000/1, 0x80000000,
+ 'division of positive hex by positive integer';
+tryeq $T++, 0x80000000/-1, -0x80000000,
+ 'division of positive hex by negative integer';
+tryeq $T++, -0x80000000/1, -0x80000000,
+ 'division of negative hex by negative integer';
+tryeq $T++, -0x80000000/-1, 0x80000000,
+ 'division of negative hex by positive integer';
+
+# The example for sloppy divide, rigged to avoid the peephole optimiser.
+tryeq_sloppy $T++, "20." / "5.", 4, 'division of floating point without fractional part';
+
+tryeq $T++, 2.5 / 2, 1.25,
+ 'division of positive floating point by positive integer';
+tryeq $T++, 3.5 / -2, -1.75,
+ 'division of positive floating point by negative integer';
+tryeq $T++, -4.5 / 2, -2.25,
+ 'division of negative floating point by positive integer';
+tryeq $T++, -5.5 / -2, 2.75,
+ 'division of negative floating point by negative integer';
+
+# Bluuurg if your floating point can not accurately cope with powers of 2
+# [I suspect this is parsing string->float problems, not actual arith]
+tryeq_sloppy $T++, 18446744073709551616/1, 18446744073709551616,
+ 'division of very large number by 1'; # Bluuurg
+tryeq_sloppy $T++, 18446744073709551616/2, 9223372036854775808,
+ 'division of very large number by 2';
+tryeq_sloppy $T++, 18446744073709551616/4294967296, 4294967296,
+ 'division of two very large numbers';
+tryeq_sloppy $T++, 18446744073709551616/9223372036854775808, 2,
+ 'division of two very large numbers';
+
+{
+ # The peephole optimiser is wrong to think that it can substitute intops
+ # in place of regular ops, because i_multiply can overflow.
+ # Bug reported by "Sisyphus" <kalinabears at hdc.com.au>
+ my $n = 1127;
+
+ my $float = ($n % 1000) * 167772160.0;
+ tryeq_sloppy $T++, $float, 21307064320, 'integer times floating point';
+
+ # On a 32 bit machine, if the i_multiply op is used, you will probably get
+ # -167772160. It is actually undefined behaviour, so anything may happen.
+ my $int = ($n % 1000) * 167772160;
+ tryeq $T++, $int, 21307064320, 'integer times integer';
+
+ my $float2 = ($n % 1000 + 0.0) * 167772160;
+ tryeq $T++, $float2, 21307064320, 'floating point times integer';
+
+ my $int2 = ($n % 1000 + 0) * 167772160;
+ tryeq $T++, $int2, 21307064320, 'integer plus zero times integer';
+
+ # zero, but in a way that ought to be able to defeat any future optimizer:
+ my $zero = $$ - $$;
+ my $int3 = ($n % 1000 + $zero) * 167772160;
+ tryeq $T++, $int3, 21307064320, 'defeat any future optimizer';
+
+ my $t = time;
+ my $t1000 = time() * 1000;
+ try $T++, abs($t1000 -1000 * $t) <= 2000, 'absolute value';
+}
+
+{
+ # 64 bit variants
+ my $n = 1127;
+
+ my $float = ($n % 1000) * 720575940379279360.0;
+ tryeq_sloppy $T++, $float, 9.15131444281685e+19,
+ '64 bit: integer times floating point';
+
+ my $int = ($n % 1000) * 720575940379279360;
+ tryeq_sloppy $T++, $int, 9.15131444281685e+19,
+ '64 bit: integer times integer';
+
+ my $float2 = ($n % 1000 + 0.0) * 720575940379279360;
+ tryeq_sloppy $T++, $float2, 9.15131444281685e+19,
+ '64 bit: floating point times integer';
+
+ my $int2 = ($n % 1000 + 0) * 720575940379279360;
+ tryeq_sloppy $T++, $int2, 9.15131444281685e+19,
+ '64 bit: integer plus zero times integer';
+
+ # zero, but in a way that ought to be able to defeat any future optimizer:
+ my $zero = $$ - $$;
+ my $int3 = ($n % 1000 + $zero) * 720575940379279360;
+ tryeq_sloppy $T++, $int3, 9.15131444281685e+19,
+ '64 bit: defeat any future optimizer';
+}
+
+# [perl #109542] $1 and "$1" should be treated the same way
+"976562500000000" =~ /(\d+)/;
+$a = ($1 * 1024);
+$b = ("$1" * 1024);
+print "not "x($a ne $b), "ok ", $T++, qq ' - \$1 vs "\$1" * something\n';
+$a = (1024 * $1);
+$b = (1024 * "$1");
+print "not "x($a ne $b), "ok ", $T++, qq ' - something * \$1 vs "\$1"\n';
+$a = ($1 + 102400000000000);
+$b = ("$1" + 102400000000000);
+print "not "x($a ne $b), "ok ", $T++, qq ' - \$1 vs "\$1" + something\n';
+$a = (102400000000000 + $1);
+$b = (102400000000000 + "$1");
+print "not "x($a ne $b), "ok ", $T++, qq ' - something + \$1 vs "\$1"\n';
+$a = ($1 - 10240000000000000);
+$b = ("$1" - 10240000000000000);
+print "not "x($a ne $b), "ok ", $T++, qq ' - \$1 vs "\$1" - something\n';
+$a = (10240000000000000 - $1);
+$b = (10240000000000000 - "$1");
+print "not "x($a ne $b), "ok ", $T++, qq ' - something - \$1 vs "\$1"\n';
+"976562500" =~ /(\d+)/;
+$a = ($1 ** 2);
+$b = ("$1" ** 2);
+print "not "x($a ne $b), "ok ", $T++, qq ' - \$1 vs "\$1" ** something\n';
+"32" =~ /(\d+)/;
+$a = (3 ** $1);
+$b = (3 ** "$1");
+print "not "x($a ne $b), "ok ", $T++, qq ' - something ** \$1 vs "\$1"\n';
+"97656250000000000" =~ /(\d+)/;
+$a = ($1 / 10);
+$b = ("$1" / 10);
+print "not "x($a ne $b), "ok ", $T++, qq ' - \$1 vs "\$1" / something\n';
+"10" =~ /(\d+)/;
+$a = (97656250000000000 / $1);
+$b = (97656250000000000 / "$1");
+print "not "x($a ne $b), "ok ", $T++, qq ' - something / \$1 vs "\$1"\n';
+"97656250000000000" =~ /(\d+)/;
+$a = ($1 <=> 97656250000000001);
+$b = ("$1" <=> 97656250000000001);
+print "not "x($a ne $b), "ok ", $T++, qq ' - \$1 vs "\$1" <=> something\n';
+$a = (97656250000000001 <=> $1);
+$b = (97656250000000001 <=> "$1");
+print "not "x($a ne $b), "ok ", $T++, qq ' - something <=> \$1 vs "\$1"\n';
+"97656250000000001" =~ /(\d+)/;
+$a = ($1 % 97656250000000002);
+$b = ("$1" % 97656250000000002);
+print "not "x($a ne $b), "ok ", $T++, qq ' - \$1 vs "\$1" % something\n';
+$a = (97656250000000000 % $1);
+$b = (97656250000000000 % "$1");
+print "not "x($a ne $b), "ok ", $T++, qq ' - something % \$1 vs "\$1"\n';
+
+my $vms_no_ieee;
+if ($^O eq 'VMS') {
+ use vars '%Config';
+ eval {require Config; import Config};
+ $vms_no_ieee = 1 unless defined($Config{useieee});
+}
+
+if ($^O eq 'vos') {
+ print "not ok ", $T++, " # TODO VOS raises SIGFPE instead of producing infinity.\n";
+}
+elsif ($vms_no_ieee) {
+ print $T++, " # SKIP -- the IEEE infinity model is unavailable in this configuration.\n"
+}
+elsif ($^O eq 'ultrix') {
+ print "not ok ", $T++, " # TODO Ultrix enters deep nirvana instead of producing infinity.\n";
+}
+else {
+ # The computation of $v should overflow and produce "infinity"
+ # on any system whose max exponent is less than 10**1506.
+ # The exact string used to represent infinity varies by OS,
+ # so we don't test for it; all we care is that we don't die.
+ #
+ # Perl considers it to be an error if SIGFPE is raised.
+ # Chances are the interpreter will die, since it doesn't set
+ # up a handler for SIGFPE. That's why this test is last; to
+ # minimize the number of test failures. --PG
+
+ my $n = 5000;
+ my $v = 2;
+ while (--$n)
+ {
+ $v *= 2;
+ }
+ print "ok ", $T++, " - infinity\n";
+}
+
Added: vendor/perl/dist/t/opbasic/cmp.t
===================================================================
--- vendor/perl/dist/t/opbasic/cmp.t (rev 0)
+++ vendor/perl/dist/t/opbasic/cmp.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,322 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+# This file has been placed in t/opbasic to indicate that it should not use
+# functions imported from t/test.pl or Test::More, as those programs/libraries
+# use operators which are what is being tested in this file.
+
+# 2s complement assumption. Will not break test, just makes the internals of
+# the SVs less interesting if were not on 2s complement system.
+my $uv_max = ~0;
+my $uv_maxm1 = ~0 ^ 1;
+my $uv_big = $uv_max;
+$uv_big = ($uv_big - 20000) | 1;
+my ($iv0, $iv1, $ivm1, $iv_min, $iv_max, $iv_big, $iv_small);
+$iv_max = $uv_max; # Do copy, *then* divide
+$iv_max /= 2;
+$iv_min = $iv_max;
+{
+ use integer;
+ $iv0 = 2 - 2;
+ $iv1 = 3 - 2;
+ $ivm1 = 2 - 3;
+ $iv_max -= 1;
+ $iv_min += 0;
+ $iv_big = $iv_max - 3;
+ $iv_small = $iv_min + 2;
+}
+my $uv_bigi = $iv_big;
+$uv_bigi |= 0x0;
+
+my @array = qw(perl rules);
+
+my @raw, @upgraded, @utf8;
+foreach ("\x{1F4A9}", chr(163), 'N') {
+ push @raw, $_;
+ my $temp = $_ . chr 256;
+ chop $temp;
+ push @upgraded, $temp;
+ my $utf8 = $_;
+ next if utf8::upgrade($utf8) == length $_;
+ utf8::encode($utf8);
+ push @utf8, $utf8;
+}
+
+# Seems one needs to perform the maths on 'Inf' to get the NV correctly primed.
+ at FOO = ('s', 'N/A', 'a', 'NaN', -1, undef, 0, 1, 3.14, 1e37, 0.632120558, -.5,
+ 'Inf'+1, '-Inf'-1, 0x0, 0x1, 0x5, 0xFFFFFFFF, $uv_max, $uv_maxm1,
+ $uv_big, $uv_bigi, $iv0, $iv1, $ivm1, $iv_min, $iv_max, $iv_big,
+ $iv_small, \$array[0], \$array[0], \$array[1], \$^X, @raw, @upgraded,
+ @utf8);
+
+$expect = 7 * ($#FOO+2) * ($#FOO+1) + 6 * @raw + 6 * @utf8;
+print "1..$expect\n";
+
+my $bad_NaN = 0;
+
+{
+ # gcc -ffast-math option may stop NaNs working correctly
+ use Config;
+ my $ccflags = $Config{ccflags} // '';
+ $bad_NaN = 1 if $ccflags =~ /-ffast-math\b/;
+}
+
+sub nok ($$$$$$$$) {
+ my ($test, $left, $threeway, $right, $result, $i, $j, $boolean) = @_;
+ $result = defined $result ? "'$result'" : 'undef';
+ if ($bad_NaN && ($left eq 'NaN' || $right eq 'NaN')) {
+ print "ok $test # skipping failed NaN test under -ffast-math\n";
+ }
+ else {
+ print "not ok $test # ($left $threeway $right) gives: $result \$i=$i \$j=$j, $boolean disagrees\n";
+ }
+}
+
+my $ok = 0;
+for my $i (0..$#FOO) {
+ for my $j ($i..$#FOO) {
+ $ok++;
+ # Comparison routines may convert these internally, which would change
+ # what is used to determine the comparison on later runs. Hence copy
+ my ($i1, $i2, $i3, $i4, $i5, $i6, $i7, $i8, $i9, $i10,
+ $i11, $i12, $i13, $i14, $i15, $i16, $i17) =
+ ($FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i],
+ $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i],
+ $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i], $FOO[$i]);
+ my ($j1, $j2, $j3, $j4, $j5, $j6, $j7, $j8, $j9, $j10,
+ $j11, $j12, $j13, $j14, $j15, $j16, $j17) =
+ ($FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j],
+ $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j],
+ $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j], $FOO[$j]);
+ my $cmp = $i1 <=> $j1;
+ if (!defined($cmp) ? !($i2 < $j2)
+ : ($cmp == -1 && $i2 < $j2 ||
+ $cmp == 0 && !($i2 < $j2) ||
+ $cmp == 1 && !($i2 < $j2)))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<');
+ }
+ $ok++;
+ if (!defined($cmp) ? !($i4 == $j4)
+ : ($cmp == -1 && !($i4 == $j4) ||
+ $cmp == 0 && $i4 == $j4 ||
+ $cmp == 1 && !($i4 == $j4)))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '==');
+ }
+ $ok++;
+ if (!defined($cmp) ? !($i5 > $j5)
+ : ($cmp == -1 && !($i5 > $j5) ||
+ $cmp == 0 && !($i5 > $j5) ||
+ $cmp == 1 && ($i5 > $j5)))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '>');
+ }
+ $ok++;
+ if (!defined($cmp) ? !($i6 >= $j6)
+ : ($cmp == -1 && !($i6 >= $j6) ||
+ $cmp == 0 && $i6 >= $j6 ||
+ $cmp == 1 && $i6 >= $j6))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '>=');
+ }
+ $ok++;
+ # OK, so the docs are wrong it seems. NaN != NaN
+ if (!defined($cmp) ? ($i7 != $j7)
+ : ($cmp == -1 && $i7 != $j7 ||
+ $cmp == 0 && !($i7 != $j7) ||
+ $cmp == 1 && $i7 != $j7))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '!=');
+ }
+ $ok++;
+ if (!defined($cmp) ? !($i8 <= $j8)
+ : ($cmp == -1 && $i8 <= $j8 ||
+ $cmp == 0 && $i8 <= $j8 ||
+ $cmp == 1 && !($i8 <= $j8)))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<=');
+ }
+ $ok++;
+ my $pmc = $j16 <=> $i16; # cmp it in reverse
+ # Should give -ve of other answer, or undef for NaNs
+ # a + -a should be zero. not zero is truth. which avoids using ==
+ if (defined($cmp) ? !($cmp + $pmc) : !defined $pmc)
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, '<=>', $j3, $cmp, $i, $j, '<=> transposed');
+ }
+
+
+ # String comparisons
+ $ok++;
+ $cmp = $i9 cmp $j9;
+ if ($cmp == -1 && $i10 lt $j10 ||
+ $cmp == 0 && !($i10 lt $j10) ||
+ $cmp == 1 && !($i10 lt $j10))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'lt');
+ }
+ $ok++;
+ if ($cmp == -1 && !($i11 eq $j11) ||
+ $cmp == 0 && ($i11 eq $j11) ||
+ $cmp == 1 && !($i11 eq $j11))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'eq');
+ }
+ $ok++;
+ if ($cmp == -1 && !($i12 gt $j12) ||
+ $cmp == 0 && !($i12 gt $j12) ||
+ $cmp == 1 && ($i12 gt $j12))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'gt');
+ }
+ $ok++;
+ if ($cmp == -1 && $i13 le $j13 ||
+ $cmp == 0 && ($i13 le $j13) ||
+ $cmp == 1 && !($i13 le $j13))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'le');
+ }
+ $ok++;
+ if ($cmp == -1 && ($i14 ne $j14) ||
+ $cmp == 0 && !($i14 ne $j14) ||
+ $cmp == 1 && ($i14 ne $j14))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'ne');
+ }
+ $ok++;
+ if ($cmp == -1 && !($i15 ge $j15) ||
+ $cmp == 0 && ($i15 ge $j15) ||
+ $cmp == 1 && ($i15 ge $j15))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'ge');
+ }
+ $ok++;
+ $pmc = $j17 cmp $i17; # cmp it in reverse
+ # Should give -ve of other answer
+ # a + -a should be zero. not zero is truth. which avoids using ==
+ if (!($cmp + $pmc))
+ {
+ print "ok $ok\n";
+ }
+ else {
+ nok ($ok, $i3, 'cmp', $j3, $cmp, $i, $j, 'cmp transposed');
+ }
+ }
+}
+
+# We know the answers for these. We can rely on the consistency checks above
+# to test the other string comparisons.
+
+while (my ($i, $v) = each @raw) {
+ # Copy, to avoid any inadvertent conversion
+ my ($raw, $cooked, $not);
+ $raw = $v;
+ $cooked = $upgraded[$i];
+ $not = $raw eq $cooked ? '' : 'not ';
+ printf "%sok %d # eq, chr %d\n", $not, ++$ok, ord $raw;
+
+ $raw = $v;
+ $cooked = $upgraded[$i];
+ $not = $raw ne $cooked ? 'not ' : '';
+ printf "%sok %d # ne, chr %d\n", $not, ++$ok, ord $raw;
+
+ $raw = $v;
+ $cooked = $upgraded[$i];
+ $not = (($raw cmp $cooked) == 0) ? '' : 'not ';
+ printf "%sok %d # cmp, chr %d\n", $not, ++$ok, ord $raw;
+
+ # And now, transposed.
+ $raw = $v;
+ $cooked = $upgraded[$i];
+ $not = $cooked eq $raw ? '' : 'not ';
+ printf "%sok %d # eq, chr %d\n", $not, ++$ok, ord $raw;
+
+ $raw = $v;
+ $cooked = $upgraded[$i];
+ $not = $cooked ne $raw ? 'not ' : '';
+ printf "%sok %d # ne, chr %d\n", $not, ++$ok, ord $raw;
+
+ $raw = $v;
+ $cooked = $upgraded[$i];
+ $not = (($cooked cmp $raw) == 0) ? '' : 'not ';
+ printf "%sok %d # cmp, chr %d\n", $not, ++$ok, ord $raw;
+}
+
+while (my ($i, $v) = each @utf8) {
+ # Copy, to avoid any inadvertent conversion
+ my ($raw, $cooked, $not);
+ $raw = $raw[$i];
+ $cooked = $v;
+ $not = $raw eq $cooked ? 'not ' : '';
+ printf "%sok %d # eq vs octets, chr %d\n", $not, ++$ok, ord $raw;
+
+ $raw = $raw[$i];
+ $cooked = $v;
+ $not = $raw ne $cooked ? '' : 'not ';
+ printf "%sok %d # ne vs octets, chr %d\n", $not, ++$ok, ord $raw;
+
+ $raw = $raw[$i];
+ $cooked = $v;
+ $not = (($raw cmp $cooked) == 0) ? 'not ' : '';
+ printf "%sok %d # cmp vs octects, chr %d\n", $not, ++$ok, ord $raw;
+
+ # And now, transposed.
+ $raw = $raw[$i];
+ $cooked = $v;
+ $not = $cooked eq $raw ? 'not ' : '';
+ printf "%sok %d # eq vs octets, chr %d\n", $not, ++$ok, ord $raw;
+
+ $raw = $raw[$i];
+ $cooked = $v;
+ $not = $cooked ne $raw? '' : 'not ';
+ printf "%sok %d # ne vs octets, chr %d\n", $not, ++$ok, ord $raw;
+
+ $raw = $raw[$i];
+ $cooked = $v;
+ $not = (($cooked cmp $raw) == 0) ? 'not ' : '';
+ printf "%sok %d # cmp vs octects, chr %d\n", $not, ++$ok, ord $raw;
+}
Added: vendor/perl/dist/t/opbasic/concat.t
===================================================================
--- vendor/perl/dist/t/opbasic/concat.t (rev 0)
+++ vendor/perl/dist/t/opbasic/concat.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,165 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+# ok() functions from other sources (e.g., t/test.pl) may use concatenation,
+# but that is what is being tested in this file. Hence, we place this file
+# in the directory where do not use t/test.pl, and we write an ok() function
+# specially written to avoid any concatenation.
+
+my $test = 1;
+sub ok {
+ my($ok, $name) = @_;
+
+ printf "%sok %d - %s\n", ($ok ? "" : "not "), $test, $name;
+
+ printf "# Failed test at line %d\n", (caller)[2] unless $ok;
+
+ $test++;
+ return $ok;
+}
+
+print "1..30\n";
+
+($a, $b, $c) = qw(foo bar);
+
+ok("$a" eq "foo", "verifying assign");
+ok("$a$b" eq "foobar", "basic concatenation");
+ok("$c$a$c" eq "foo", "concatenate undef, fore and aft");
+
+# Okay, so that wasn't very challenging. Let's go Unicode.
+
+{
+ # bug id 20000819.004
+
+ $_ = $dx = "\x{10f2}";
+ s/($dx)/$dx$1/;
+ {
+ ok($_ eq "$dx$dx","bug id 20000819.004, back");
+ }
+
+ $_ = $dx = "\x{10f2}";
+ s/($dx)/$1$dx/;
+ {
+ ok($_ eq "$dx$dx","bug id 20000819.004, front");
+ }
+
+ $dx = "\x{10f2}";
+ $_ = "\x{10f2}\x{10f2}";
+ s/($dx)($dx)/$1$2/;
+ {
+ ok($_ eq "$dx$dx","bug id 20000819.004, front and back");
+ }
+}
+
+{
+ # bug id 20000901.092
+ # test that undef left and right of utf8 results in a valid string
+
+ my $a;
+ $a .= "\x{1ff}";
+ ok($a eq "\x{1ff}", "bug id 20000901.092, undef left");
+ $a .= undef;
+ ok($a eq "\x{1ff}", "bug id 20000901.092, undef right");
+}
+
+{
+ # ID 20001020.006
+
+ "x" =~ /(.)/; # unset $2
+
+ # Without the fix this 5.7.0 would croak:
+ # Modification of a read-only value attempted at ...
+ eval {"$2\x{1234}"};
+ ok(!$@, "bug id 20001020.006, left");
+
+ # For symmetry with the above.
+ eval {"\x{1234}$2"};
+ ok(!$@, "bug id 20001020.006, right");
+
+ *pi = \undef;
+ # This bug existed earlier than the $2 bug, but is fixed with the same
+ # patch. Without the fix this 5.7.0 would also croak:
+ # Modification of a read-only value attempted at ...
+ eval{"$pi\x{1234}"};
+ ok(!$@, "bug id 20001020.006, constant left");
+
+ # For symmetry with the above.
+ eval{"\x{1234}$pi"};
+ ok(!$@, "bug id 20001020.006, constant right");
+}
+
+sub beq { use bytes; $_[0] eq $_[1]; }
+
+{
+ # concat should not upgrade its arguments.
+ my($l, $r, $c);
+
+ ($l, $r, $c) = ("\x{101}", "\x{fe}", "\x{101}\x{fe}");
+ ok(beq($l.$r, $c), "concat utf8 and byte");
+ ok(beq($l, "\x{101}"), "right not changed after concat u+b");
+ ok(beq($r, "\x{fe}"), "left not changed after concat u+b");
+
+ ($l, $r, $c) = ("\x{fe}", "\x{101}", "\x{fe}\x{101}");
+ ok(beq($l.$r, $c), "concat byte and utf8");
+ ok(beq($l, "\x{fe}"), "right not changed after concat b+u");
+ ok(beq($r, "\x{101}"), "left not changed after concat b+u");
+}
+
+{
+ my $a; ($a .= 5) . 6;
+ ok($a == 5, '($a .= 5) . 6 - present since 5.000');
+}
+
+{
+ # [perl #24508] optree construction bug
+ sub strfoo { "x" }
+ my ($x, $y);
+ $y = ($x = '' . strfoo()) . "y";
+ ok( "$x,$y" eq "x,xy", 'figures out correct target' );
+}
+
+{
+ # [perl #26905] "use bytes" doesn't apply byte semantics to concatenation
+
+ my $p = "\xB6"; # PILCROW SIGN (ASCII/EBCDIC), 2bytes in UTF-X
+ my $u = "\x{100}";
+ my $b = pack 'a*', "\x{100}";
+ my $pu = "\xB6\x{100}";
+ my $up = "\x{100}\xB6";
+ my $x1 = $p;
+ my $y1 = $u;
+
+ use bytes;
+ ok(beq($p.$u, $p.$b), "perl #26905, left eq bytes");
+ ok(beq($u.$p, $b.$p), "perl #26905, right eq bytes");
+ ok(!beq($p.$u, $pu), "perl #26905, left ne unicode");
+ ok(!beq($u.$p, $up), "perl #26905, right ne unicode");
+
+ $x1 .= $u;
+ $x2 = $p . $u;
+ $y1 .= $p;
+ $y2 = $u . $p;
+
+ no bytes;
+ ok(beq($x1, $x2), "perl #26905, left, .= vs = . in bytes");
+ ok(beq($y1, $y2), "perl #26905, right, .= vs = . in bytes");
+ ok(($x1 eq $x2), "perl #26905, left, .= vs = . in chars");
+ ok(($y1 eq $y2), "perl #26905, right, .= vs = . in chars");
+}
+
+{
+ # Concatenation needs to preserve UTF8ness of left oper.
+ my $x = eval"qr/\x{fff}/";
+ ok( ord chop($x .= "\303\277") == 191, "UTF8ness preserved" );
+}
+
+{
+ my $x;
+ $x = "a" . "b";
+ $x .= "-append-";
+ ok($x eq "ab-append-", "Appending to something initialized using constant folding");
+}
Added: vendor/perl/dist/t/opbasic/magic_phase.t
===================================================================
--- vendor/perl/dist/t/opbasic/magic_phase.t (rev 0)
+++ vendor/perl/dist/t/opbasic/magic_phase.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,49 @@
+#!./perl
+
+use strict;
+use warnings;
+
+# Test ${^GLOBAL_PHASE}
+#
+# Test::More, t/test.pl, etc., assert plans in END, which happens before global
+# destruction. We do not want to use those programs/libraries here, so we
+# place this file in directory t/opbasic.
+
+BEGIN { print "1..7\n" }
+
+sub ok ($$) {
+ print "not " if !$_[0];
+ print "ok";
+ print " - $_[1]" if defined $_[1];
+ print "\n";
+}
+
+BEGIN {
+ ok ${^GLOBAL_PHASE} eq 'START', 'START';
+}
+
+CHECK {
+ ok ${^GLOBAL_PHASE} eq 'CHECK', 'CHECK';
+}
+
+INIT {
+ ok ${^GLOBAL_PHASE} eq 'INIT', 'INIT';
+}
+
+ok ${^GLOBAL_PHASE} eq 'RUN', 'RUN';
+
+sub Moo::DESTROY {
+ ok ${^GLOBAL_PHASE} eq 'RUN', 'DESTROY is run-time too, usually';
+}
+
+my $tiger = bless {}, Moo::;
+
+sub Kooh::DESTROY {
+ ok ${^GLOBAL_PHASE} eq 'DESTRUCT', 'DESTRUCT';
+}
+
+our $affe = bless {}, Kooh::;
+
+END {
+ ok ${^GLOBAL_PHASE} eq 'END', 'END';
+}
Added: vendor/perl/dist/t/opbasic/qq.t
===================================================================
--- vendor/perl/dist/t/opbasic/qq.t (rev 0)
+++ vendor/perl/dist/t/opbasic/qq.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,76 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+# This file uses a specially crafted is() function rather than that found in
+# t/test.pl or Test::More. Hence, we place this file in directory t/opbasic.
+
+print q(1..28
+);
+
+# This is() function is written to avoid ""
+my $test = 1;
+sub is {
+ my($left, $right) = @_;
+
+ if ($left eq $right) {
+ printf 'ok %d
+', $test++;
+ return 1;
+ }
+ foreach ($left, $right) {
+ # Comment out these regexps to map non-printables to ord if the perl under
+ # test is so broken that it is not helping
+ s/([^-+A-Za-z_0-9])/sprintf q{'.chr(%d).'}, ord $1/ge;
+ $_ = sprintf q('%s'), $_;
+ s/^''\.//;
+ s/\.''$//;
+ }
+ printf q(not ok %d - got %s expected %s
+), $test++, $left, $right;
+
+ printf q(# Failed test at line %d
+), (caller)[2];
+
+ return 0;
+}
+
+is ("\x53", chr 83);
+is ("\x4EE", chr (78) . 'E');
+is ("\x4i", chr (4) . 'i'); # This will warn
+is ("\xh", chr (0) . 'h'); # This will warn
+is ("\xx", chr (0) . 'x'); # This will warn
+is ("\xx9", chr (0) . 'x9'); # This will warn. \x9 is tab in EBCDIC too?
+is ("\x9_E", chr (9) . '_E'); # This will warn
+
+is ("\x{4E}", chr 78);
+is ("\x{6_9}", chr 105);
+is ("\x{_6_3}", chr 99);
+is ("\x{_6B}", chr 107);
+
+is ("\x{9__0}", chr 9); # multiple underscores not allowed.
+is ("\x{77_}", chr 119); # trailing underscore warns.
+is ("\x{6FQ}z", chr (111) . 'z');
+
+is ("\x{0x4E}", chr 0);
+is ("\x{x4E}", chr 0);
+
+is ("\x{0065}", chr 101);
+is ("\x{000000000000000000000000000000000000000000000000000000000000000072}",
+ chr 114);
+is ("\x{0_06_5}", chr 101);
+is ("\x{1234}", chr 4660);
+is ("\x{10FFFD}", chr 1114109);
+is ("\400", chr 0x100);
+is ("\600", chr 0x180);
+is ("\777", chr 0x1FF);
+is ("a\o{120}b", "a" . chr(0x50) . "b");
+is ("a\o{400}b", "a" . chr(0x100) . "b");
+is ("a\o{1000}b", "a" . chr(0x200) . "b");
+
+# This caused a memory fault
+no warnings "utf8";
+is ("abc", eval qq[qq\x{8000_0000}abc\x{8000_0000}])
Added: vendor/perl/dist/t/porting/checkcfgvar.t
===================================================================
--- vendor/perl/dist/t/porting/checkcfgvar.t (rev 0)
+++ vendor/perl/dist/t/porting/checkcfgvar.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,29 @@
+#!./perl -w
+
+# What does this test?
+# This uses Porting/checkcfgvar.pl to check that none of the config.sh-like
+# files are missing any entries.
+#
+# Why do we test this?
+# We need them to be complete when we ship a release, and this way we catch
+# problems as early as possible. (Instead of creating the potential for yet
+# another last-minute job for the release manager). If a config file for a
+# platform is incomplete, it can't be used to correctly regenerate config.h,
+# because missing values result in invalid C code. We keep the files sorted
+# as it makes it easy to automate adding defaults.
+#
+# It's broken - how do I fix it?
+# The most likely reason that the test failed is because you've just added
+# a new entry to Configure, config.sh and config_h.SH but nowhere else.
+# Run something like:
+# perl Porting/checkcfgvar.pl --regen --default=undef
+# (the correct default might not always be undef) to do most of the work, and
+# then hand-edit configure.com (as that's not automated).
+# If this changes uconfig.sh, you'll also need to run perl regen/uconfig_h.pl
+
+BEGIN {
+ @INC = '..' if -f '../TestInit.pm';
+}
+use TestInit qw(T A); # T is chdir to the top level, A makes paths absolute
+
+system "$^X Porting/checkcfgvar.pl --tap";
Added: vendor/perl/dist/t/porting/customized.dat
===================================================================
--- vendor/perl/dist/t/porting/customized.dat (rev 0)
+++ vendor/perl/dist/t/porting/customized.dat 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,16 @@
+Text::Balanced cpan/Text-Balanced/t/01_compile.t 1598cf491a48fa546260a2ec41142abe84da533d
+Text::Balanced cpan/Text-Balanced/t/02_extbrk.t 6ba1b64a4604e822dc2260b8ffcea6b406339ee8
+Text::Balanced cpan/Text-Balanced/t/03_extcbk.t 3307c980af28963414cab799c427b359ef3b8657
+Text::Balanced cpan/Text-Balanced/t/04_extdel.t be993c5c295b125b4be0ed55f866a249599f5835
+Text::Balanced cpan/Text-Balanced/t/05_extmul.t 4d1bc60add35ac203873f5371d8c6fcc9c8b6d80
+Text::Balanced cpan/Text-Balanced/t/06_extqlk.t 81a5804d392013393a338325b197cea52c4c44e0
+Text::Balanced cpan/Text-Balanced/t/07_exttag.t 5a209ed156387d4614d3003292e5fc412b8541e5
+Text::Balanced cpan/Text-Balanced/t/08_extvar.t 0776ef2cbdad5b1fbefb300541d079212cc24d92
+Text::Balanced cpan/Text-Balanced/t/09_gentag.t 42361b5dfb3bb728bce20f4fb0d92ccfb27c2ba7
+Module::Build cpan/Module-Build/lib/Module/Build/ConfigData.pm 2f3f07fd889077ebd51791ad6e195d9164b4baf3
+Test::Harness cpan/Test-Harness/t/source.t 884890970fb850874213159df263ba483bac62e9
+CPANPLUS cpan/CPANPLUS/Makefile.PL 5d533f6722af6aae73204755beb8d6c008fc0d4a
+libnet cpan/libnet/Makefile.PL 5554b71464b45f5cc002e55f2464f7ff4abd05b6
+podlators cpan/podlators/scripts/pod2man.PL f81acf53f3ff46cdcc5ebdd661c5d13eb35d20d6
+podlators cpan/podlators/scripts/pod2text.PL b4693fcfe4a0a1b38a215cfb8985a65d5d025d69
+Module::Pluggable cpan/Module-Pluggable/Makefile.PL 72062c1a01ed7c62d16c55122c163b2d89f0d739
Added: vendor/perl/dist/t/porting/customized.t
===================================================================
--- vendor/perl/dist/t/porting/customized.t (rev 0)
+++ vendor/perl/dist/t/porting/customized.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,140 @@
+#!./perl -w
+
+# Test that CUSTOMIZED files in Maintainers.pl have not been overwritten.
+
+BEGIN {
+ # This test script uses a slightly atypical invocation of the 'standard'
+ # core testing setup stanza.
+ # The existing porting tools which manage the Maintainers file all
+ # expect to be run from the root
+ # XXX that should be fixed
+
+ chdir '..' unless -d 't';
+ @INC = qw(lib Porting t);
+ require 'test.pl';
+}
+
+use strict;
+use warnings;
+use Digest;
+use File::Spec;
+use Maintainers qw[%Modules get_module_files get_module_pat];
+
+sub filter_customized {
+ my ($m, @files) = @_;
+
+ return @files
+ unless my $customized = $Modules{$m}{CUSTOMIZED};
+
+ my ($pat) = map { qr/$_/ } join '|' => map {
+ ref $_ ? $_ : qr/\b\Q$_\E$/
+ } @{ $customized };
+
+ return grep { $_ =~ $pat } @files;
+}
+
+sub my_get_module_files {
+ my $m = shift;
+ return filter_customized $m => map { Maintainers::expand_glob($_) } get_module_pat($m);
+}
+
+my $TestCounter = 0;
+
+my $digest_type = 'SHA-1';
+
+my $original_dir = File::Spec->rel2abs(File::Spec->curdir);
+my $data_dir = File::Spec->catdir('t', 'porting');
+my $customised = File::Spec->catfile($data_dir, 'customized.dat');
+
+my %customised;
+
+my $regen = 0;
+
+while (@ARGV && substr($ARGV[0], 0, 1) eq '-') {
+ my $arg = shift @ARGV;
+
+ $arg =~ s/^--/-/; # Treat '--' the same as a single '-'
+ if ($arg eq '-regen') {
+ $regen = 1;
+ }
+ else {
+ die <<EOF;
+Unknown option '$arg'
+
+Usage: $0 [ --regen ]\n"
+ --regen -> Regenerate the data file for $0
+
+EOF
+ }
+}
+
+my $data_fh;
+
+if ( $regen ) {
+ open $data_fh, '>:bytes', $customised or die "Can't open $customised";
+}
+else {
+ open $data_fh, '<:bytes', $customised or die "Can't open $customised";
+ while (<$data_fh>) {
+ chomp;
+ my ($module,$file,$sha) = split ' ';
+ $customised{ $module }->{ $file } = $sha;
+ }
+ close $data_fh;
+}
+
+foreach my $module ( keys %Modules ) {
+ next unless my $files = $Modules{ $module }{CUSTOMIZED};
+ my @perl_files = my_get_module_files( $module );
+ foreach my $file ( @perl_files ) {
+ my $digest = Digest->new( $digest_type );
+ {
+ open my $fh, '<', $file or die "Can't open $file";
+ binmode $fh;
+ $digest->addfile( $fh );
+ close $fh;
+ }
+ my $id = $digest->hexdigest;
+ if ( $regen ) {
+ print $data_fh join(' ', $module, $file, $id), "\n";
+ next;
+ }
+ my $should_be = $customised{ $module }->{ $file };
+ is( $id, $should_be, "SHA for $file matches stashed SHA" );
+ }
+}
+
+if ( $regen ) {
+ pass( "regenerated data file" );
+ close $data_fh;
+}
+
+done_testing();
+
+=pod
+
+=head1 NAME
+
+customized.t - Test that CUSTOMIZED files in Maintainers.pl have not been overwritten
+
+=head1 SYNOPSIS
+
+ cd t
+ ./perl -I../lib porting/customized.t --regen
+
+=head1 DESCRIPTION
+
+customized.t checks that files listed in C<Maintainers.pl> that have been C<CUSTOMIZED>
+are not accidently overwritten by CPAN module updates.
+
+=head1 OPTIONS
+
+=over
+
+=item C<--regen>
+
+Use this command line option to regenerate the C<customized.dat> file.
+
+=back
+
+=cut
Added: vendor/perl/dist/t/porting/extrefs.t
===================================================================
--- vendor/perl/dist/t/porting/extrefs.t (rev 0)
+++ vendor/perl/dist/t/porting/extrefs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,128 @@
+#!./perl -w
+
+# What does this test?
+# Test that changes to perl header files don't cause external
+# references by simplying #including them. This breaks library probe
+# code on CPAN, and can break cflags.SH.
+#
+# Why do we test this?
+# See https://rt.perl.org/rt3/Ticket/Display.html?id=116989
+#
+# It's broken - how do I fix it?
+# You added an initializer or static function to a header file that
+# references some symbol you didn't define, you need to remove it.
+
+BEGIN {
+ require "./test.pl";
+ unshift @INC, ".." if -f "../TestInit.pm";
+}
+
+use TestInit qw(T A); # T is chdir to the top level, A makes paths absolute
+use strict;
+use warnings;
+use Config;
+use File::Path 'rmtree';
+use Cwd;
+
+plan(tests => 1);
+
+my $VERBOSE = grep {$_ eq '-v'} @ARGV;
+
+ok(try_compile_and_link(<<'CODE'));
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+int main(int argc, char **argv) {
+ return 0;
+}
+CODE
+
+
+# from Time::HiRes's Makefile.PL with minor modifications
+sub try_compile_and_link {
+ my ($c, %args) = @_;
+
+ my $ld_exeext = ($^O eq 'cygwin' || $^O eq 'MSWin32' ||
+ $^O eq 'os2' && $Config{ldflags} =~ /-Zexe\b/) ? '.exe' :
+ (($^O eq 'vos') ? $Config{exe_ext} : '');
+
+ my ($ok) = 0;
+ my $tempdir = tempfile();
+ my $cwd = getcwd();
+ mkdir $tempdir;
+ chdir $tempdir;
+ my ($tmp) = "temp";
+
+ my $obj_ext = $Config{obj_ext} || ".o";
+
+ if (open(my $tmpc, ">$tmp.c")) {
+ print $tmpc $c;
+ unless (close($tmpc)) {
+ chdir($cwd);
+ rmtree($tempdir);
+ warn "Failing closing code file: $!\n" if $VERBOSE;
+ return 0;
+ }
+
+ my $COREincdir = File::Spec->catdir(File::Spec->updir);
+
+ my $ccflags = $Config{'ccflags'} . ' ' . "-I$COREincdir"
+ . ' -DPERL_NO_INLINE_FUNCTIONS';
+
+ if ($^O eq "MSWin32") {
+ $ccflags .= " -I../win32 -I../win32/include";
+ }
+
+ my $libs = '';
+
+ # Include libs to be sure of linking against bufferoverflowU.lib for
+ # the SDK2003 compiler on Windows. See win32/Makefile for more details.
+ if ($^O eq "MSWin32" && $Config{cc} =~ /\bcl\b/i) {
+ $libs = " /link $Config{'libs'}";
+ }
+
+ my $null = File::Spec->devnull;
+
+ my $errornull = $VERBOSE ? '' : ">$null 2>$null";
+
+ # Darwin g++ 4.2.1 is fussy and demands a space.
+ # FreeBSD g++ 4.2.1 does not.
+ # We do not know the reaction of either to the presence of brown M&Ms.
+ my $out_opt = "-o ";
+ if ($^O eq "MSWin32" && $Config{cc} =~ /\bcl\b/i) {
+ $out_opt = "/Fe";
+ }
+
+ my $tmp_exe = "$tmp$ld_exeext";
+
+ my $cccmd = "$Config{'cc'} $out_opt$tmp_exe $ccflags $tmp.c $libs $errornull";
+
+ if ($^O eq 'VMS') {
+ $cccmd = "$Config{'cc'} /include=($COREincdir) $tmp.c";
+ }
+
+ if ($^O eq 'VMS') {
+ open( my $cmdfile, ">$tmp.com" );
+ print $cmdfile "\$ SET MESSAGE/NOFACILITY/NOSEVERITY/NOIDENT/NOTEXT\n";
+ print $cmdfile "\$ $cccmd\n";
+ print $cmdfile "\$ IF \$SEVERITY .NE. 1 THEN EXIT 44\n"; # escalate
+ close $cmdfile;
+ system("\@ $tmp.com");
+ $ok = $?==0;
+ chdir($cwd);
+ rmtree($tempdir);
+ }
+ else
+ {
+ printf "cccmd = $cccmd\n" if $VERBOSE;
+ my $res = system($cccmd);
+ $ok = defined($res) && $res == 0 && -s $tmp_exe && -x _;
+
+ chdir($cwd);
+ rmtree($tempdir);
+ }
+ }
+
+ return $ok;
+}
Added: vendor/perl/dist/t/porting/globvar.t
===================================================================
--- vendor/perl/dist/t/porting/globvar.t (rev 0)
+++ vendor/perl/dist/t/porting/globvar.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,77 @@
+#!perl -w
+
+use TestInit qw(T);
+use strict;
+use Config;
+
+require 't/test.pl';
+
+skip_all("Code to read symbols not ported to $^O")
+ if $^O eq 'VMS' or $^O eq 'MSWin32';
+
+# Not investigated *why* we don't export these, but we don't, and we've not
+# received any bug reports about it causing problems:
+my %skip = map { ("PL_$_", 1) }
+ qw(
+ DBcv bitcount cshname force_link_funcs generation lastgotoprobe
+ mod_latin1_uc modcount no_symref_sv timesbuf uudmap
+ watchaddr watchok warn_uninit_sv
+ );
+
+$skip{PL_hash_rand_bits}= $skip{PL_hash_rand_bits_enabled}= 1; # we can be compiled without these, so skip testing them
+
+
+my $trial = "nm globals$Config{_o} 2>&1";
+my $yes = `$trial`;
+
+skip_all("Could not run `$trial`") if $?;
+
+my $defined = qr/^[0-9a-fA-F]{8,16}\s+[^Uu]\s+_?/m;
+
+skip_all("Could not spot definition of PL_Yes in output of `$trial`")
+ unless $yes =~ /${defined}PL_Yes/m;
+
+my %exported;
+open my $fh, '-|', $^X, '-Ilib', './makedef.pl', 'PLATFORM=test'
+ or die "Can't run makedef.pl";
+
+while (<$fh>) {
+ next unless /^PL_/;
+ chomp;
+ ++$exported{$_};
+}
+
+close $fh or die "Problem running makedef.pl";
+
+my %unexported;
+
+foreach my $file (map {$_ . $Config{_o}} qw(globals regcomp)) {
+ open $fh, '-|', 'nm', $file
+ or die "Can't run nm $file";
+
+ while (<$fh>) {
+ next unless /$defined(PL_\S+)/;
+ if (delete $exported{$1}) {
+ note("Seen definition of $1");
+ next;
+ }
+ ++$unexported{$1};
+ }
+ close $fh or die "Problem running nm $file";
+}
+
+foreach (sort keys %exported) {
+ SKIP: {
+ skip("We dont't export '$_' (Perl not built with this enabled?)",1) if $skip{$_};
+ fail("Attempting to export '$_' which is never defined");
+ }
+}
+
+foreach (sort keys %unexported) {
+ SKIP: {
+ skip("We don't export '$_'", 1) if $skip{$_};
+ fail("'$_' is defined, but we do not export it");
+ }
+}
+
+done_testing();
Added: vendor/perl/dist/t/porting/known_pod_issues.dat
===================================================================
--- vendor/perl/dist/t/porting/known_pod_issues.dat (rev 0)
+++ vendor/perl/dist/t/porting/known_pod_issues.dat 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,326 @@
+# This file is the data file for porting/podcheck.t.
+# There are three types of lines.
+# Comment lines are white-space only or begin with a '#', like this one. Any
+# changes you make to the comment lines will be lost when the file is
+# regen'd.
+# Lines without tab characters are simply NAMES of pods that the program knows
+# will have links to them and the program does not check if those links are
+# valid.
+# All other lines should have three fields, each separated by a tab. The
+# first field is the name of a pod; the second field is an error message
+# generated by this program; and the third field is a count of how many
+# known instances of that message there are in the pod. -1 means that the
+# program can expect any number of this type of message.
+_control87(3)
+Algorithm::C3
+AnyEvent
+Apache::MP3
+Array::Base
+Attribute::Constant
+basename(1)
+Benchmark::Perl::Formance
+ByteLoader
+bzip2(1)
+Carp::Always
+Carp::Assert
+Carp::Clan
+chcp(1)
+Class::Accessor
+Class::C3
+Class::ISA
+Class::PseudoHash
+Classic::Perl
+Clone
+Crypt::Random
+curl(1)
+Data::Entropy
+Data::Float
+Data::Types
+Date::Pcalc
+DateTime
+DB_File(3)
+DBIx::Profile
+Devel::Callsite
+Devel::DProf
+Devel::DTrace::Provider
+Devel::NYTProf
+Devel::PPPort
+Devel::SawAmpersand
+dirname(1)
+Encode::Locale
+Exporter::Easy
+ExtUtils::Constant::ProxySubs
+fetch(1)
+File::chdir
+File::Copy::Recursive
+File::Findgrep
+File::MMagic
+File::ShareDir
+flock(3)
+fsync(3c)
+gcc(1)
+getpriority(2)
+HTTP::Lite
+inetd(8)
+IPC::Run
+IPC::Signal
+kill(3)
+langinfo(3)
+Lingua::KO::Hangul::Util
+local::lib
+Mail::Send
+man(5)
+man(7)
+Math::Big
+Math::BigInt::Constant
+Math::BigInt::GMP
+Math::BigInt::Pari
+Math::Random::MT::Perl
+Math::Random::Secure
+Math::TrulyRandom
+md5sum(1)
+Module::CPANTS::Analyse
+Module::Find
+Module::Info
+Module::Starter
+Moo
+Moose
+MRO::Compat
+nl_langinfo(3)
+Number::Format
+Object::InsideOut
+Object::Tiny
+open(2)
+OS2::Proc
+OS2::WinObject
+PadWalker
+passwd(1)
+perl(1)
+Perl4::CoreLibs
+Perl::Unsafe::Signals
+perlbug(1)
+PerlIO::locale
+PerlIO::Util
+PerlIO::via::Base64
+PerlIO::via::StripHTML
+perllexwarn(1)
+perlthanks
+pod/perldiag.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlrun.pod Verbatim line length including indents exceeds 79 by 3
+POD2::FR
+POD2::IT
+pod2ipf(1)
+pod2man(1)
+Pod::HTML2Pod
+Pod::Plainer
+Pod::PXML
+poll(2)
+prctl(2)
+printf(3)
+pstruct
+ptar(1)
+ptargrep(1)
+pwd_mkdb(8)
+Readonly
+recvmsg(3)
+Role::Tiny
+s2p
+Scalar::Readonly
+Semi::Semicolons
+sendmail(1)
+sendmsg(3)
+sha1sum(1)
+Shell
+Shell::Command
+sock_init(3)
+Socket
+socketpair(3)
+SOM
+splain
+sprintf(3)
+stat(2)
+String::Base
+String::Scanf
+Switch
+tar(1)
+Test::Harness::TAP
+Test::Inline
+Test::MockObject
+Text::Autoformat
+Text::Template
+Text::Unidecode
+Time::Object
+Tk
+Tk::Pod
+tty(1)
+Unicode::Casing
+Unicode::Regex::Set
+Unicode::Semantics
+Unicode::Unihan
+unzip(1)
+Version::Requirements
+wait(2)
+waitpid(3)
+wget(1)
+Win32::Locale
+YAML
+YAML::Syck
+YAML::Tiny
+dist/cwd/lib/file/spec/vms.pm Verbatim line length including indents exceeds 79 by 1
+dist/cwd/lib/file/spec/win32.pm Verbatim line length including indents exceeds 79 by 1
+dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1
+dist/extutils-parsexs/lib/perlxs.pod Verbatim line length including indents exceeds 79 by 1
+dist/extutils-parsexs/lib/perlxstut.pod Verbatim line length including indents exceeds 79 by 10
+dist/filter-simple/lib/filter/simple.pm Verbatim paragraph in NAME section 1
+dist/locale-maketext/lib/locale/maketext/tpj13.pod No items in =over / =back list 3
+dist/math-bigint/lib/math/bigint.pm Verbatim line length including indents exceeds 79 by 77
+dist/math-bigint/lib/math/bigint/calcemu.pm empty section in previous paragraph 3
+dist/math-bigrat/lib/math/bigrat.pm Verbatim line length including indents exceeds 79 by 7
+dist/math-bigrat/lib/math/bigrat.pm unresolved internal link 1
+dist/module-corelist/lib/module/corelist.pod Verbatim line length including indents exceeds 79 by 4
+dist/module-corelist/lib/module/corelist/utils.pm Verbatim line length including indents exceeds 79 by 2
+dist/net-ping/lib/net/ping.pm Verbatim line length including indents exceeds 79 by 2
+dist/safe/safe.pm Verbatim line length including indents exceeds 79 by 1
+dist/safe/safe.pm empty section in previous paragraph 1
+dist/selfloader/lib/selfloader.pm Verbatim line length including indents exceeds 79 by 13
+dist/storable/storable.pm Verbatim line length including indents exceeds 79 by 4
+dist/thread-queue/lib/thread/queue.pm Verbatim line length including indents exceeds 79 by 4
+dist/threads/lib/threads.pm Verbatim line length including indents exceeds 79 by 3
+dist/tie-file/lib/tie/file.pm Verbatim line length including indents exceeds 79 by 3
+ext/b/b/concise.pm Verbatim line length including indents exceeds 79 by 1
+ext/devel-peek/peek.pm ? Should you be using L<...> instead of 2
+ext/devel-peek/peek.pm Verbatim line length including indents exceeds 79 by 2
+ext/dynaloader/dynaloader.pm Verbatim line length including indents exceeds 79 by 1
+ext/file-glob/glob.pm Verbatim line length including indents exceeds 79 by 15
+ext/hash-util-fieldhash/lib/hash/util/fieldhash.pm Verbatim line length including indents exceeds 79 by 2
+ext/i18n-langinfo/langinfo.pm Verbatim line length including indents exceeds 79 by 1
+ext/pod-html/bin/pod2html Pod NAME already used 1
+ext/pod-html/testdir/perlpodspec-copy.pod Verbatim line length including indents exceeds 79 by 8
+ext/pod-html/testdir/perlvar-copy.pod ? Should you be using L<...> instead of 3
+ext/pod-html/testdir/perlvar-copy.pod Verbatim line length including indents exceeds 79 by 6
+ext/posix/lib/posix.pod Verbatim line length including indents exceeds 79 by 13
+ext/vms-dclsym/dclsym.pm ? Should you be using L<...> instead of 1
+ext/vms-dclsym/dclsym.pm Verbatim line length including indents exceeds 79 by 1
+ext/vms-stdio/stdio.pm Verbatim line length including indents exceeds 79 by 1
+ext/xs-apitest/apitest.pm Verbatim line length including indents exceeds 79 by 1
+install ? Should you be using F<...> or maybe L<...> instead of 1
+installhtml Verbatim line length including indents exceeds 79 by 3
+os2/os2/os2-extattr/extattr.pm ? Should you be using F<...> or maybe L<...> instead of 1
+os2/os2/os2-process/process.pm Verbatim line length including indents exceeds 79 by 27
+os2/os2/os2-rexx/dll/dll.pm Verbatim line length including indents exceeds 79 by 2
+os2/os2/os2-rexx/rexx.pm Verbatim line length including indents exceeds 79 by 1
+pod/perl.pod Verbatim line length including indents exceeds 79 by 8
+pod/perlaix.pod Verbatim line length including indents exceeds 79 by 11
+pod/perlapi.pod ? Should you be using L<...> instead of 76
+pod/perlapi.pod Verbatim line length including indents exceeds 79 by 6
+pod/perlapi.pod unresolved internal link 3
+pod/perlapio.pod Verbatim line length including indents exceeds 79 by 5
+pod/perlbook.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlcall.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlce.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlclib.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlcygwin.pod Verbatim line length including indents exceeds 79 by 25
+pod/perldbmfilter.pod Verbatim line length including indents exceeds 79 by 1
+pod/perldebguts.pod Verbatim line length including indents exceeds 79 by 34
+pod/perldebtut.pod Verbatim line length including indents exceeds 79 by 22
+pod/perldebug.pod Verbatim line length including indents exceeds 79 by 3
+pod/perldiag.pod =item type mismatch 1
+pod/perldiag.pod Verbatim line length including indents exceeds 79 by 1
+pod/perldsc.pod Verbatim line length including indents exceeds 79 by 4
+pod/perldtrace.pod Verbatim line length including indents exceeds 79 by 26
+pod/perlebcdic.pod Verbatim line length including indents exceeds 79 by 13
+pod/perlembed.pod Verbatim line length including indents exceeds 79 by 27
+pod/perlfunc.pod There is more than one target 1
+pod/perlgit.pod Verbatim line length including indents exceeds 79 by 12
+pod/perlgpl.pod Verbatim line length including indents exceeds 79 by 50
+pod/perlguts.pod ? Should you be using F<...> or maybe L<...> instead of 2
+pod/perlguts.pod ? Should you be using L<...> instead of 1
+pod/perlhack.pod ? Should you be using L<...> instead of 1
+pod/perlhack.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlhist.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlhpux.pod Verbatim line length including indents exceeds 79 by 5
+pod/perlhurd.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlintern.pod ? Should you be using L<...> instead of 5
+pod/perlinterp.pod ? Should you be using L<...> instead of 1
+pod/perliol.pod Verbatim line length including indents exceeds 79 by 8
+pod/perlipc.pod Verbatim line length including indents exceeds 79 by 19
+pod/perlirix.pod Verbatim line length including indents exceeds 79 by 4
+pod/perllol.pod Verbatim line length including indents exceeds 79 by 4
+pod/perlmacosx.pod Verbatim line length including indents exceeds 79 by 4
+pod/perlmod.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlmodlib.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlmodstyle.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlmroapi.pod ? Should you be using L<...> instead of 1
+pod/perlnetware.pod Verbatim line length including indents exceeds 79 by 4
+pod/perlnewmod.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlootut.pod ? Should you be using F<...> or maybe L<...> instead of 1
+pod/perlos2.pod ? Should you be using L<...> instead of 2
+pod/perlos2.pod Verbatim line length including indents exceeds 79 by 22
+pod/perlos390.pod Verbatim line length including indents exceeds 79 by 11
+pod/perlpacktut.pod Verbatim line length including indents exceeds 79 by 6
+pod/perlperf.pod Verbatim line length including indents exceeds 79 by 154
+pod/perlpodspec.pod Verbatim line length including indents exceeds 79 by 9
+pod/perlpodstyle.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlref.pod Verbatim line length including indents exceeds 79 by 1
+pod/perlrequick.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlretut.pod Verbatim line length including indents exceeds 79 by 13
+pod/perlrun.pod Verbatim line length including indents exceeds 79 by 3
+pod/perlsolaris.pod Verbatim line length including indents exceeds 79 by 14
+pod/perlsource.pod ? Should you be using F<...> or maybe L<...> instead of 1
+pod/perlsub.pod ? Should you be using F<...> or maybe L<...> instead of 3
+pod/perlsub.pod Verbatim line length including indents exceeds 79 by 4
+pod/perlsymbian.pod Verbatim line length including indents exceeds 79 by 20
+pod/perlthrtut.pod Verbatim line length including indents exceeds 79 by 5
+pod/perltie.pod Verbatim line length including indents exceeds 79 by 13
+pod/perltrap.pod ? Should you be using F<...> or maybe L<...> instead of 1
+pod/perltru64.pod ? Should you be using F<...> or maybe L<...> instead of 1
+pod/perltru64.pod Verbatim line length including indents exceeds 79 by 4
+pod/perlunifaq.pod empty section in previous paragraph 1
+pod/perluniprops.pod =item type mismatch 6
+pod/perlvms.pod ? Should you be using F<...> or maybe L<...> instead of 1
+pod/perlvms.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlwin32.pod Verbatim line length including indents exceeds 79 by 12
+porting/epigraphs.pod Verbatim line length including indents exceeds 79 by 3
+porting/expand-macro.pl Verbatim line length including indents exceeds 79 by 2
+porting/how_to_write_a_perldelta.pod There is no NAME 1
+porting/how_to_write_a_perldelta.pod Verbatim line length including indents exceeds 79 by 3
+porting/pumpkin.pod Verbatim line length including indents exceeds 79 by 9
+porting/release_managers_guide.pod Verbatim line length including indents exceeds 79 by 7
+porting/release_schedule.pod There is no NAME 1
+porting/todo.pod Verbatim line length including indents exceeds 79 by 7
+symbian/perlutil.pod Verbatim line length including indents exceeds 79 by 4
+utils/c2ph Verbatim line length including indents exceeds 79 by 44
+utils/pod2html Pod NAME already used 1
+vms/ext/filespec.pm Verbatim line length including indents exceeds 79 by 1
+x2p/a2p.pod empty section in previous paragraph 2
+lib/benchmark.pm Verbatim line length including indents exceeds 79 by 4
+lib/class/struct.pm Verbatim line length including indents exceeds 79 by 7
+lib/config.pod ? Should you be using L<...> instead of -1
+lib/config.pod nested commands F<...F<...>...> 3
+lib/db.pm Verbatim line length including indents exceeds 79 by 2
+lib/dbm_filter.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/compress.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/encode.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/int32.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/null.pm Verbatim line length including indents exceeds 79 by 1
+lib/dbm_filter/utf8.pm Verbatim line length including indents exceeds 79 by 1
+lib/deprecate.pm Verbatim line length including indents exceeds 79 by 2
+lib/english.pm Verbatim line length including indents exceeds 79 by 1
+lib/extutils/embed.pm Verbatim line length including indents exceeds 79 by 2
+lib/extutils/xssymset.pm Verbatim line length including indents exceeds 79 by 1
+lib/file/basename.pm Verbatim line length including indents exceeds 79 by 2
+lib/file/find.pm Verbatim line length including indents exceeds 79 by 1
+lib/getopt/std.pm Verbatim line length including indents exceeds 79 by 1
+lib/integer.pm Verbatim line length including indents exceeds 79 by 1
+lib/perl5db.pl ? Should you be using L<...> instead of 1
+lib/perl5db.pl Verbatim line length including indents exceeds 79 by 1
+lib/perlio.pm Verbatim line length including indents exceeds 79 by 2
+lib/pod/text/overstrike.pm Verbatim line length including indents exceeds 79 by 1
+lib/strict.pm Verbatim line length including indents exceeds 79 by 1
+lib/tie/array.pm Verbatim line length including indents exceeds 79 by 1
+lib/tie/hash.pm Verbatim line length including indents exceeds 79 by 3
+lib/tie/scalar.pm Verbatim line length including indents exceeds 79 by 1
+lib/utf8.pm Verbatim line length including indents exceeds 79 by 4
+lib/version.pod Verbatim line length including indents exceeds 79 by 1
+lib/version/internals.pod Verbatim line length including indents exceeds 79 by 2
+lib/vmsish.pm Verbatim line length including indents exceeds 79 by 1
Added: vendor/perl/dist/t/porting/pending-author.t
===================================================================
--- vendor/perl/dist/t/porting/pending-author.t (rev 0)
+++ vendor/perl/dist/t/porting/pending-author.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,58 @@
+#!./perl -w
+
+# What does this test?
+# This uses Porting/checkAUTHORS.pl to check that any pending commit isn't
+# about to break t/porting/authors.t
+#
+# Why do we test this?
+# t/porting/authors.t checks that the AUTHORS file is up to date, accounting
+# for the "Author:" of every commit. However, any pending changes can't be
+# tested, which leaves a gotcha - "make test" can pass, one then commits
+# the passing code, pushes it uptream, and tests fail. So this test attempts
+# to spot that problem before it happens, where it can.
+#
+# It's broken - how do I fix it?
+# It will fail if you're in a git checkout, have uncommitted changes, and the
+# e-mail address that your commit will default to is in AUTHORS, or the list
+# of author aliases in Porting/checkAUTHORS.pl. So one of
+# a) reset your pending changes
+# b) change your git config user.email to the previously-known e-mail address
+# c) add yourself to AUTHORS
+# d) add an alias to Porting/checkAUTHORS.pl
+
+BEGIN {
+ @INC = '..' if -f '../TestInit.pm';
+}
+use TestInit qw(T); # T is chdir to the top level
+use strict;
+
+require 't/test.pl';
+find_git_or_skip('all');
+
+my $changes;
+foreach (`git status --porcelain 2>/dev/null`) {
+ next if /^\?\?/;
+ ++$changes;
+ last;
+}
+
+skip_all("No pending changes (or git status --porcelain doesn't work here)")
+ unless $changes;
+
+sub get {
+ my $key = shift;
+ my $value = `git config --get user.$key`;
+ unless (defined $value && $value =~ /\S/) {
+ skip_all("git config --get user.$key returned nought");
+ }
+ chomp $value;
+ return $value;
+}
+
+my $email = get('email');
+my $name = get('name');
+
+open my $fh, '|-', "$^X Porting/checkAUTHORS.pl --tap -"
+ or die $!;
+print $fh "Author: $name <$email>\n";
+close $fh or die $!;
Added: vendor/perl/dist/t/porting/perlfunc.t
===================================================================
--- vendor/perl/dist/t/porting/perlfunc.t (rev 0)
+++ vendor/perl/dist/t/porting/perlfunc.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,30 @@
+#!./perl -w
+
+# What does this test?
+# This checks that changes to pod/perlfunc.pod don't accidentally break the
+# build by causing ext/Pod-Functions/Functions_pm.PL to abort.
+#
+# Why do we test this?
+# Pod::Functions is generated from pod/perlfunc.pod by
+# ext/Pod-Functions/Functions_pm.PL
+# If it can't parse pod/perlfunc.pod, it will abort, which will cause the
+# build to break. It's really not possible for it to carry on, hence aborting
+# is the only option. However, innocent-seeming changes to documentation
+# shouldn't break the build, and we expect everyone to run (at least)
+# the porting tests, hence this test, to catch such problems before it's too
+# late. To avoid duplicating the parsing logic, we make Functions_pm.PL take
+# a --tap option, to test that all is well.
+#
+# It's broken - how do I fix it?
+# Likely it's because you changed something in pod/perlfunc.pod
+# If you added a new function, it needs to be added to one or more groups in
+# "Perl Functions by Category", and to have a one line summary for
+# Pod::Functions provided by a =for directive.
+
+BEGIN {
+ @INC = '..' if -f '../TestInit.pm';
+}
+
+use TestInit qw(T A); # T is chdir to the top level, A makes paths absolute
+
+system "$^X ext/Pod-Functions/Functions_pm.PL --tap pod/perlfunc.pod";
Added: vendor/perl/dist/t/porting/pod_rules.t
===================================================================
--- vendor/perl/dist/t/porting/pod_rules.t (rev 0)
+++ vendor/perl/dist/t/porting/pod_rules.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+#!./perl
+
+BEGIN {
+ chdir '..' unless -d 't';
+ unshift @INC, 'lib';
+}
+
+use strict;
+require 't/test.pl';
+
+my $result = runperl(switches => ['-f', '-Ilib'],
+ progfile => 'Porting/pod_rules.pl',
+ args => ['--tap']);
+
+print $result;
Added: vendor/perl/dist/t/porting/utils.t
===================================================================
--- vendor/perl/dist/t/porting/utils.t (rev 0)
+++ vendor/perl/dist/t/porting/utils.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,98 @@
+#!./perl -w
+
+# What does this test?
+# This checks that all the perl "utils" don't have embarrassing syntax errors
+#
+# Why do we test this?
+# Right now, without this, it's possible to pass the all the regression tests
+# even if one has introduced syntax errors into scripts such as installperl
+# or installman. No tests fail, so it's fair game to push the commit.
+# Obviously this breaks installing perl, but we won't spot this.
+# Whilst we can't easily test that the various scripts *work*, we can at least
+# check that we've not made any trivial screw ups.
+#
+# It's broken - how do I fix it?
+# Presumably it's failed because some (other) code that you changed was (also)
+# used by one of the utility scripts. So you'll have to manually test that
+# script.
+
+BEGIN {
+ @INC = '..' if -f '../TestInit.pm';
+}
+use TestInit qw(T); # T is chdir to the top level
+use strict;
+
+require 't/test.pl';
+
+# It turns out that, since the default @INC will include your old 5.x libs, if
+# you have them, the Porting utils might load a library that no longer compiles
+# clean. This actually happened, with Local::Maketext::Lexicon from a 5.10.0
+# preventing 5.16.0-RC0 from testing successfully. This test is really only
+# needed for porters, anyway. -- rjbs, 2012-05-10
+find_git_or_skip('all');
+
+my @maybe;
+
+open my $fh, '<', 'MANIFEST' or die "Can't open MANIFEST: $!";
+while (<$fh>) {
+ push @maybe, $1 if m!^(Porting/\S+)!;
+}
+close $fh or die $!;
+
+open $fh, '<', 'utils.lst' or die "Can't open utils.lst: $!";
+while (<$fh>) {
+ die unless m!^(\S+)!;
+ push @maybe, $1;
+ $maybe[$#maybe] .= '.com' if $^O eq 'VMS';
+}
+close $fh or die $!;
+
+my @victims = (qw(installman installperl regen_perly.pl));
+my %excuses = (
+ 'Porting/git-deltatool' => 'Git::Wrapper',
+ 'Porting/podtidy' => 'Pod::Tidy',
+ 'Porting/leakfinder.pl' => 'XS::APItest',
+ );
+
+foreach (@maybe) {
+ if (/\.p[lm]$/) {
+ push @victims, $_;
+ } elsif ($_ !~ m{^x2p/a2p}) {
+ # test_prep doesn't (yet) have a dependency on a2p, so it seems a bit
+ # silly adding one (and forcing it to be built) just so that we can open
+ # it and determine that it's *not* a perl program, and hence of no
+ # further interest to us.
+ open $fh, '<', $_ or die "Can't open '$_': $!";
+ my $line = <$fh>;
+ if ($line =~ m{^#!(?:\S*|/usr/bin/env\s+)perl}
+ || $^O eq 'VMS' && $line =~ m{^\$ perl}) {
+ push @victims, $_;
+ } else {
+ print "# $_ isn't a Perl script\n";
+ }
+ }
+}
+
+printf "1..%d\n", scalar @victims;
+
+foreach my $victim (@victims) {
+ SKIP: {
+ # Not clear to me *why* it needs the BEGIN block, given what it
+ # does, but not in an easy position to change it.
+ skip("$victim executes code in a BEGIN block which fails for empty \@ARGV")
+ if $victim =~ m{^utils/cpanp-run-perl};
+
+ skip ("$victim uses $excuses{$victim}, so can't test with just core modules")
+ if $excuses{$victim};
+
+ my $got = runperl(switches => ['-c'], progfile => $victim, stderr => 1);
+ is($got, "$victim syntax OK\n", "$victim compiles");
+ }
+}
+
+# Local variables:
+# cperl-indent-level: 4
+# indent-tabs-mode: nil
+# End:
+#
+# ex: set ts=8 sts=4 sw=4 et:
Added: vendor/perl/dist/t/re/pos.t
===================================================================
--- vendor/perl/dist/t/re/pos.t (rev 0)
+++ vendor/perl/dist/t/re/pos.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,68 @@
+#!./perl
+
+# Make sure pos / resetting pos on failed match works
+
+use strict;
+use warnings;
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+plan tests => 8;
+
+## Early bailout of pp_match because matchlen > stringlen
+
+# With a var
+{
+ my $str = "bird";
+
+ $str =~ /i/g;
+
+ is(pos($str), 2, 'pos correct');
+
+ $str =~ /toolongtomatch/g;
+
+ is(pos($str), undef, 'pos undef after failed match');
+}
+
+# With $_
+{
+ $_ = "bird";
+
+ m/i/g;
+
+ is(pos, 2, 'pos correct');
+
+ m/toolongtomatch/g;
+
+ is(pos, undef, 'pos undef after failed match');
+}
+
+## Early bail out of pp_match because ?? already matched
+
+# With a var
+{
+ my $str = "bird";
+
+ for (1..2) {
+ if ($str =~ m?bird?g) {
+ is(pos($str), 4, 'pos correct');
+ } else {
+ is(pos($str), undef, 'pos undef after failed match');
+ }
+ }
+}
+
+# With $_
+{
+ for (1..2) {
+ if (m?\d?g) {
+ is(pos, 1, 'pos correct');
+ } else {
+ is(pos, undef, 'pos undef after failed match');
+ }
+ }
+}
Added: vendor/perl/dist/t/re/recompile.t
===================================================================
--- vendor/perl/dist/t/re/recompile.t (rev 0)
+++ vendor/perl/dist/t/re/recompile.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,195 @@
+#!./perl
+
+# Check that we don't recompile runtime patterns when the pattern hasn't
+# changed
+#
+# Works by checking the debugging output of 'use re debug' and, if
+# available, -Dr. We use both to check that the different code paths
+# with Perl_foo() verses the my_foo() under ext/re/ don't cause any
+# changes.
+
+use strict;
+use warnings;
+
+$| = 1;
+
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = ('../lib','.');
+ require './test.pl';
+ skip_all_if_miniperl("no dynamic loading on miniperl, no re");
+}
+
+
+plan tests => 38;
+
+my $results = runperl(
+ switches => [ '-Dr' ],
+ prog => '1',
+ stderr => 1,
+ );
+my $has_Dr = $results !~ /Recompile perl with -DDEBUGGING/;
+
+my $tmpfile = tempfile();
+
+
+# Check that a pattern triggers a regex compilation exactly N times,
+# using either -Dr or 'use re debug'
+# This is partially based on _fresh_perl() in test.pl
+
+sub _comp_n {
+ my ($use_Dr, $n, $prog, $desc) = @_;
+ open my $tf, ">$tmpfile" or die "Cannot open $tmpfile: $!";
+
+ my $switches = [];
+ if ($use_Dr) {
+ push @$switches, '-Dr';
+ }
+ else {
+ $prog = qq{use re qw(debug);\n$prog};
+ }
+
+ print $tf $prog;
+ close $tf or die "Cannot close $tmpfile: $!";
+ my $results = runperl(
+ switches => $switches,
+ progfile => $tmpfile,
+ stderr => 1,
+ );
+
+ my $status = $?;
+
+ my $count = () = $results =~ /Final program:/g;
+ if ($count == $n && !$status) {
+ pass($desc);
+ }
+ else {
+ fail($desc);
+ _diag "# COUNT: $count EXPECTED $n\n";
+ _diag "# STATUS: $status\n";
+ _diag "# SWITCHES: @$switches\n";
+ _diag "# PROG: \n$prog\n";
+ # this is verbose; uncomment for debugging
+ #_diag "# OUTPUT:\n------------------\n $results-------------------\n";
+ }
+}
+
+# Check that a pattern triggers a regex compilation exactly N times,
+
+sub comp_n {
+ my ($n, $prog, $desc) = @_;
+ if ($has_Dr) {
+ _comp_n(1, $n, $prog, "$desc -Dr");
+ }
+ else {
+ SKIP: {
+ skip("-Dr not compiled in");
+ }
+ }
+ _comp_n(0, @_);
+}
+
+# Check that a pattern triggers a regex compilation exactly once.
+
+sub comp_1 {
+ comp_n(1, @_);
+}
+
+
+comp_1(<<'CODE', 'simple');
+"a" =~ /$_/ for qw(a a a);
+CODE
+
+comp_1(<<'CODE', 'simple qr');
+"a" =~ qr/$_/ for qw(a a a);
+CODE
+
+comp_1(<<'CODE', 'literal utf8');
+"a" =~ /$_/ for "\x{100}", "\x{100}", "\x{100}";
+CODE
+
+comp_1(<<'CODE', 'literal utf8 qr');
+"a" =~ qr/$_/ for "\x{100}", "\x{100}", "\x{100}";
+CODE
+
+comp_1(<<'CODE', 'longjmp literal utf8');
+my $x = chr(0x80);
+"a" =~ /$x$_/ for "\x{100}", "\x{100}", "\x{100}";
+CODE
+
+comp_1(<<'CODE', 'longjmp literal utf8 qr');
+my $x = chr(0x80);
+"a" =~ qr/$x$_/ for "\x{100}", "\x{100}", "\x{100}";
+CODE
+
+comp_1(<<'CODE', 'utf8');
+"a" =~ /$_/ for '\x{100}', '\x{100}', '\x{100}';
+CODE
+
+comp_1(<<'CODE', 'utf8 qr');
+"a" =~ qr/$_/ for '\x{100}', '\x{100}', '\x{100}';
+CODE
+
+comp_1(<<'CODE', 'longjmp utf8');
+my $x = chr(0x80);
+"a" =~ /$x$_/ for '\x{100}', '\x{100}', '\x{100}';
+CODE
+
+comp_1(<<'CODE', 'longjmp utf8');
+my $x = chr(0x80);
+"a" =~ qr/$x$_/ for '\x{100}', '\x{100}', '\x{100}';
+CODE
+
+comp_n(3, <<'CODE', 'mixed utf8');
+"a" =~ /$_/ for "\x{c4}\x{80}", "\x{100}", "\x{c4}\x{80}";
+CODE
+
+comp_n(3, <<'CODE', 'mixed utf8 qr');
+"a" =~ qr/$_/ for "\x{c4}\x{80}", "\x{100}", "\x{c4}\x{80}";
+CODE
+
+# note that that for runtime code, each pattern is compiled twice; the
+# second time to allow the parser to see the code.
+
+comp_n(6, <<'CODE', 'runtime code');
+my $x = '(?{1})';
+BEGIN { $^H |= 0x00200000 } # lightweight "use re 'eval'"
+"a" =~ /a$_/ for $x, $x, $x;
+CODE
+
+comp_n(6, <<'CODE', 'runtime code qr');
+my $x = '(?{1})';
+BEGIN { $^H |= 0x00200000 } # lightweight "use re 'eval'"
+"a" =~ qr/a$_/ for $x, $x, $x;
+CODE
+
+comp_n(4, <<'CODE', 'embedded code');
+my $x = qr/(?{1})/;
+"a" =~ /a$_/ for $x, $x, $x;
+CODE
+
+comp_n(4, <<'CODE', 'embedded code qr');
+my $x = qr/(?{1})/;
+"a" =~ qr/a$_/ for $x, $x, $x;
+CODE
+
+comp_n(7, <<'CODE', 'mixed code');
+my $x = qr/(?{1})/;
+my $y = '(?{1})';
+BEGIN { $^H |= 0x00200000 } # lightweight "use re 'eval'"
+"a" =~ /a$x$_/ for $y, $y, $y;
+CODE
+
+comp_n(7, <<'CODE', 'mixed code qr');
+my $x = qr/(?{1})/;
+my $y = '(?{1})';
+BEGIN { $^H |= 0x00200000 } # lightweight "use re 'eval'"
+"a" =~ qr/a$x$_/ for $y, $y, $y;
+CODE
+
+comp_n(6, <<'CODE', 'embedded code qr');
+my $x = qr/a/i;
+my $y = qr/a/;
+"a" =~ qr/a$_/ for $x, $y, $x, $y;
+CODE
Added: vendor/perl/dist/t/re/regex_sets.t
===================================================================
--- vendor/perl/dist/t/re/regex_sets.t (rev 0)
+++ vendor/perl/dist/t/re/regex_sets.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,90 @@
+#!./perl
+
+# This tests (?[...]). XXX These are just basic tests, as full ones would be
+# best done with an infrastructure change to allow getting out the inversion
+# list of the constructed set and then comparing it character by character
+# with the expected result.
+
+use strict;
+use warnings;
+
+$| = 1;
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = ('../lib','.');
+ require './test.pl';
+}
+
+use utf8;
+no warnings 'experimental::regex_sets';
+
+like("a", qr/(?[ [a] # This is a comment
+ ])/, 'Can ignore a comment');
+like("a", qr/(?[ [a] # [[:notaclass:]]
+ ])/, 'A comment isn\'t parsed');
+unlike("\x85", qr/(?[ \t
])/, 'NEL is white space');
+unlike("\x85", qr/(?[ [\t
] ])/, '... including within nested []');
+like("\x85", qr/(?[ \t + \
])/, 'can escape NEL to match');
+like("\x85", qr/(?[ [\
] ])/, '... including within nested []');
+like("\t", qr/(?[ \t + \
])/, 'can do basic union');
+like("\cK", qr/(?[ \s ])/, '\s matches \cK');
+unlike("\cK", qr/(?[ \s - \cK ])/, 'can do basic subtraction');
+like(" ", qr/(?[ \s - \cK ])/, 'can do basic subtraction');
+like(":", qr/(?[ [:] ])/, '[:] is not a posix class');
+unlike("\t", qr/(?[ ! \t ])/, 'can do basic complement');
+like("\t", qr/(?[ ! [ ^ \t ] ])/, 'can do basic complement');
+unlike("\r", qr/(?[ \t ])/, '\r doesn\'t match \t ');
+like("\r", qr/(?[ ! \t ])/, 'can do basic complement');
+like("0", qr/(?[ [:word:] & [:digit:] ])/, 'can do basic intersection');
+unlike("A", qr/(?[ [:word:] & [:digit:] ])/, 'can do basic intersection');
+like("0", qr/(?[[:word:]&[:digit:]])/, 'spaces around internal [] aren\'t required');
+
+like("a", qr/(?[ [a] | [b] ])/, '| means union');
+like("b", qr/(?[ [a] | [b] ])/, '| means union');
+unlike("c", qr/(?[ [a] | [b] ])/, '| means union');
+
+like("a", qr/(?[ [ab] ^ [bc] ])/, 'basic symmetric difference works');
+unlike("b", qr/(?[ [ab] ^ [bc] ])/, 'basic symmetric difference works');
+like("c", qr/(?[ [ab] ^ [bc] ])/, 'basic symmetric difference works');
+
+like("2", qr/(?[ ( ( \pN & ( [a] + [2] ) ) ) ])/, 'Nesting parens and grouping');
+unlike("a", qr/(?[ ( ( \pN & ( [a] + [2] ) ) ) ])/, 'Nesting parens and grouping');
+
+unlike("\x{17f}", qr/(?[ [k] + \p{Blk=ASCII} ])/i, '/i doesn\'t affect \p{}');
+like("\N{KELVIN SIGN}", qr/(?[ [k] + \p{Blk=ASCII} ])/i, '/i does affect literals');
+
+my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/;
+my $thai_or_lao_digit = qr/(?[ \p{Digit} & $thai_or_lao ])/;
+like("\N{THAI DIGIT ZERO}", $thai_or_lao_digit, 'embedded qr/(?[ ])/ works');
+unlike(chr(ord("\N{THAI DIGIT ZERO}") - 1), $thai_or_lao_digit, 'embedded qr/(?[ ])/ works');
+like("\N{THAI DIGIT NINE}", $thai_or_lao_digit, 'embedded qr/(?[ ])/ works');
+unlike(chr(ord("\N{THAI DIGIT NINE}") + 1), $thai_or_lao_digit, 'embedded qr/(?[ ])/ works');
+like("\N{LAO DIGIT ZERO}", $thai_or_lao_digit, 'embedded qr/(?[ ])/ works');
+unlike(chr(ord("\N{LAO DIGIT ZERO}") - 1), $thai_or_lao_digit, 'embedded qr/(?[ ])/ works');
+like("\N{LAO DIGIT NINE}", $thai_or_lao_digit, 'embedded qr/(?[ ])/ works');
+unlike(chr(ord("\N{LAO DIGIT NINE}") + 1), $thai_or_lao_digit, 'embedded qr/(?[ ])/ works');
+
+my $ascii_word = qr/(?[ \w ])/a;
+my $ascii_digits_plus_all_of_arabic = qr/(?[ \p{Digit} & $ascii_word + \p{Arabic} ])/;
+like("9", $ascii_digits_plus_all_of_arabic, "/a, then interpolating and intersection works for ASCII in the set");
+unlike("A", $ascii_digits_plus_all_of_arabic, "/a, then interpolating and intersection works for ASCII not in the set");
+unlike("\N{BENGALI DIGIT ZERO}", $ascii_digits_plus_all_of_arabic, "/a, then interpolating and intersection works for non-ASCII not in either set");
+unlike("\N{BENGALI LETTER A}", $ascii_digits_plus_all_of_arabic, "/a, then interpolating and intersection works for non-ASCII in one set");
+like("\N{ARABIC LETTER HAMZA}", $ascii_digits_plus_all_of_arabic, "interpolation and intersection is left-associative");
+like("\N{EXTENDED ARABIC-INDIC DIGIT ZERO}", $ascii_digits_plus_all_of_arabic, "interpolation and intersection is left-associative");
+
+my $kelvin = qr/(?[ \N{KELVIN SIGN} ])/;
+my $fold = qr/(?[ $kelvin ])/i;
+like("\N{KELVIN SIGN}", $kelvin, '"\N{KELVIN SIGN}" matches compiled qr/(?[ \N{KELVIN SIGN} ])/');
+unlike("K", $fold, "/i on outer (?[ ]) doesn't leak to interpolated one");
+unlike("k", $fold, "/i on outer (?[ ]) doesn't leak to interpolated one");
+
+my $kelvin_fold = qr/(?[ \N{KELVIN SIGN} ])/i;
+my $still_fold = qr/(?[ $kelvin_fold ])/;
+like("K", $still_fold, "/i on interpolated (?[ ]) is retained in outer without /i");
+like("k", $still_fold, "/i on interpolated (?[ ]) is retained in outer without /i");
+
+done_testing();
+
+1;
Added: vendor/perl/dist/t/re/regex_sets_compat.t
===================================================================
--- vendor/perl/dist/t/re/regex_sets_compat.t (rev 0)
+++ vendor/perl/dist/t/re/regex_sets_compat.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,15 @@
+#!./perl
+
+# This tests that the (?[...]) feature doesn't introduce unexpected
+# differences from regular bracketed character classes. It just sets a flag
+# and calls regexp.t which will run through its test suite, modifiying the
+# tests to use (?[...]) instead wherever the test uses [].
+
+BEGIN { $regex_sets = 1; }
+for $file ('./re/regexp.t', './t/re/regexp.t', ':re:regexp.t') {
+ if (-r $file) {
+ do $file or die $@;
+ exit;
+ }
+}
+die "Cannot find ./re/regexp.t or ./t/re/regexp.t\n";
Added: vendor/perl/dist/t/run/dtrace.pl
===================================================================
--- vendor/perl/dist/t/run/dtrace.pl (rev 0)
+++ vendor/perl/dist/t/run/dtrace.pl 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1 @@
+42
Added: vendor/perl/dist/t/run/dtrace.t
===================================================================
--- vendor/perl/dist/t/run/dtrace.t (rev 0)
+++ vendor/perl/dist/t/run/dtrace.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,196 @@
+#!./perl
+
+my $Perl;
+my $dtrace;
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+ require './test.pl';
+
+ skip_all_without_config("usedtrace");
+
+ $dtrace = $Config::Config{dtrace};
+
+ $Perl = which_perl();
+
+ `$dtrace -V` or skip_all("$dtrace unavailable");
+
+ my $result = `$dtrace -qnBEGIN -c'$Perl -e 1' 2>&1`;
+ $? && skip_all("Apparently can't probe using $dtrace (perhaps you need root?): $result");
+}
+
+use strict;
+use warnings;
+use IPC::Open2;
+
+plan(tests => 9);
+
+dtrace_like(
+ '1',
+ 'BEGIN { trace(42+666) }',
+ qr/708/,
+ 'really running DTrace',
+);
+
+dtrace_like(
+ 'package My;
+ sub outer { Your::inner() }
+ package Your;
+ sub inner { }
+ package Other;
+ My::outer();
+ Your::inner();',
+
+ 'sub-entry { printf("-> %s::%s at %s line %d!\n", copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg2) }
+ sub-return { printf("<- %s::%s at %s line %d!\n", copyinstr(arg3), copyinstr(arg0), copyinstr(arg1), arg2) }',
+
+ qr/-> My::outer at - line 2!
+-> Your::inner at - line 4!
+<- Your::inner at - line 4!
+<- My::outer at - line 2!
+-> Your::inner at - line 4!
+<- Your::inner at - line 4!/,
+
+ 'traced multiple function calls',
+);
+
+dtrace_like(
+ '1',
+ 'phase-change { printf("%s -> %s; ", copyinstr(arg1), copyinstr(arg0)) }',
+ qr/START -> RUN; RUN -> DESTRUCT;/,
+ 'phase changes of a simple script',
+);
+
+# this code taken from t/opbasic/magic_phase.t which tests all of the
+# transitions of ${^GLOBAL_PHASE}. instead of printing (which will
+# interact nondeterministically with the DTrace output), we increment
+# an unused variable for side effects
+dtrace_like(<< 'MAGIC_OP',
+ my $x = 0;
+ BEGIN { $x++ }
+ CHECK { $x++ }
+ INIT { $x++ }
+ sub Moo::DESTROY { $x++ }
+
+ my $tiger = bless {}, Moo::;
+
+ sub Kooh::DESTROY { $x++ }
+
+ our $affe = bless {}, Kooh::;
+
+ END { $x++ }
+MAGIC_OP
+
+ 'phase-change { printf("%s -> %s; ", copyinstr(arg1), copyinstr(arg0)) }',
+
+ qr/START -> CHECK; CHECK -> INIT; INIT -> RUN; RUN -> END; END -> DESTRUCT;/,
+
+ 'phase-changes in a script that exercises all of ${^GLOBAL_PHASE}',
+);
+
+dtrace_like(<< 'PHASES',
+ my $x = 0;
+ sub foo { $x++ }
+ sub bar { $x++ }
+ sub baz { $x++ }
+
+ INIT { foo() }
+ bar();
+ END { baz() }
+PHASES
+
+ '
+ BEGIN { starting = 1 }
+
+ phase-change { phase = arg0 }
+ phase-change /copyinstr(arg0) == "RUN"/ { starting = 0 }
+ phase-change /copyinstr(arg0) == "END"/ { ending = 1 }
+
+ sub-entry /copyinstr(arg0) != copyinstr(phase) && (starting || ending)/ {
+ printf("%s during %s; ", copyinstr(arg0), copyinstr(phase));
+ }
+ ',
+
+ qr/foo during INIT; baz during END;/,
+
+ 'make sure sub-entry and phase-change interact well',
+);
+
+dtrace_like(<< 'PERL_SCRIPT',
+ my $tmp = "foo";
+ $tmp =~ s/f/b/;
+ chop $tmp;
+PERL_SCRIPT
+ << 'D_SCRIPT',
+ op-entry { printf("op-entry <%s>\n", copyinstr(arg0)) }
+D_SCRIPT
+ [
+ qr/op-entry <subst>/,
+ qr/op-entry <schop>/,
+ ],
+ 'basic op probe',
+);
+
+dtrace_like(<< 'PERL_SCRIPT',
+ use strict;
+ require HTTP::Tiny;
+ do "run/dtrace.pl";
+PERL_SCRIPT
+ << 'D_SCRIPT',
+ loading-file { printf("loading-file <%s>\n", copyinstr(arg0)) }
+ loaded-file { printf("loaded-file <%s>\n", copyinstr(arg0)) }
+D_SCRIPT
+ [
+ # the original test made sure that each file generated a loading-file then a loaded-file,
+ # but that had a race condition when the kernel would push the perl process onto a different
+ # CPU, so the DTrace output would appear out of order
+ qr{loading-file <strict\.pm>.*loading-file <HTTP/Tiny\.pm>.*loading-file <run/dtrace\.pl>}s,
+ qr{loaded-file <strict\.pm>.*loaded-file <HTTP/Tiny\.pm>.*loaded-file <run/dtrace\.pl>}s,
+ ],
+ 'loading-file, loaded-file probes',
+);
+
+sub dtrace_like {
+ my $perl = shift;
+ my $probes = shift;
+ my $expected = shift;
+ my $name = shift;
+
+ my ($reader, $writer);
+
+ my $pid = open2($reader, $writer,
+ $dtrace,
+ '-q',
+ '-n', 'BEGIN { trace("ready!\n") }', # necessary! see below
+ '-n', $probes,
+ '-c', $Perl,
+ );
+
+ # wait until DTrace tells us that it is initialized
+ # otherwise our probes won't properly fire
+ chomp(my $throwaway = <$reader>);
+ $throwaway eq "ready!" or die "Unexpected 'ready!' result from DTrace: $throwaway";
+
+ # now we can start executing our perl
+ print $writer $perl;
+ close $writer;
+
+ # read all the dtrace results back in
+ local $/;
+ my $result = <$reader>;
+
+ # make sure that dtrace is all done and successful
+ waitpid($pid, 0);
+ my $child_exit_status = $? >> 8;
+ die "Unexpected error from DTrace: $result"
+ if $child_exit_status != 0;
+
+ if (ref($expected) eq 'ARRAY') {
+ like($result, $_, $name) for @$expected;
+ }
+ else {
+ like($result, $expected, $name);
+ }
+}
+
Added: vendor/perl/dist/t/run/flib/broken.pm
===================================================================
--- vendor/perl/dist/t/run/flib/broken.pm (rev 0)
+++ vendor/perl/dist/t/run/flib/broken.pm 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,8 @@
+package broken;
+
+use strict;
+use warnings;
+
+$x = 1;
+
+1;
Added: vendor/perl/dist/t/run/mad.t
===================================================================
--- vendor/perl/dist/t/run/mad.t (rev 0)
+++ vendor/perl/dist/t/run/mad.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,46 @@
+#!./perl
+#
+# Tests for Perl mad environment
+#
+# $PERL_XMLDUMP
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require Config; import Config;
+ require './test.pl';
+ skip_all_without_config('mad');
+}
+
+use File::Path;
+use File::Spec;
+
+my $tempdir = tempfile;
+
+mkdir $tempdir, 0700 or die "Can't mkdir '$tempdir': $!";
+unshift @INC, '../../lib';
+my $cleanup = 1;
+
+END {
+ if ($cleanup) {
+ rmtree($tempdir);
+ }
+}
+
+plan tests => 4;
+
+{
+ delete local $ENV{$_} for keys %ENV;
+ my $fn = File::Spec->catfile(File::Spec->curdir(), "withoutT.xml");
+ $ENV{PERL_XMLDUMP} = $fn;
+ fresh_perl_is('print q/hello/', '', {}, 'mad without -T');
+ ok(-f $fn, "xml file created without -T as expected");
+}
+
+{
+ delete local $ENV{$_} for keys %ENV;
+ my $fn = File::Spec->catfile(File::Spec->curdir(), "withT.xml");
+ fresh_perl_is('print q/hello/', 'hello', { switches => [ "-T" ] },
+ 'mad with -T');
+ ok(!-e $fn, "no xml file created with -T as expected");
+}
Added: vendor/perl/dist/t/run/switchM.t
===================================================================
--- vendor/perl/dist/t/run/switchM.t (rev 0)
+++ vendor/perl/dist/t/run/switchM.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,19 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+use strict;
+
+require './test.pl';
+
+plan(2);
+
+like(runperl(switches => ['-Irun/flib', '-Mbroken'], stderr => 1),
+ qr/^Global symbol "\$x" requires explicit package name at run\/flib\/broken.pm line 6\./,
+ "Ensure -Irun/flib produces correct filename in warnings");
+
+like(runperl(switches => ['-Irun/flib/', '-Mbroken'], stderr => 1),
+ qr/^Global symbol "\$x" requires explicit package name at run\/flib\/broken.pm line 6\./,
+ "Ensure -Irun/flib/ produces correct filename in warnings");
Added: vendor/perl/dist/t/run/switchx3.aux
===================================================================
--- vendor/perl/dist/t/run/switchx3.aux (rev 0)
+++ vendor/perl/dist/t/run/switchx3.aux 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,2 @@
+print "not ok 5\n";
+die "You shouldn't get here";
Added: vendor/perl/dist/t/test_pl/_num_to_alpha.t
===================================================================
--- vendor/perl/dist/t/test_pl/_num_to_alpha.t (rev 0)
+++ vendor/perl/dist/t/test_pl/_num_to_alpha.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,44 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ require './test.pl';
+}
+
+is( _num_to_alpha(-1), undef, 'Returns undef for negative numbers');
+is( _num_to_alpha( 0), 'A', "Starts at 'A'");
+is( _num_to_alpha( 1), 'B');
+
+is( _num_to_alpha(26 - 1), 'Z', 'Last single letter return value');
+is( _num_to_alpha(26 ), 'AA', 'First double letter return value');
+is( _num_to_alpha(26 + 1), 'AB');
+
+is( _num_to_alpha(26 + 26 - 2), 'AY');
+is( _num_to_alpha(26 + 26 - 1), 'AZ');
+is( _num_to_alpha(26 + 26 ), 'BA');
+is( _num_to_alpha(26 + 26 + 1), 'BB');
+
+is( _num_to_alpha(26 ** 2 - 1), 'YZ');
+is( _num_to_alpha(26 ** 2 ), 'ZA');
+is( _num_to_alpha(26 ** 2 + 1), 'ZB');
+
+is( _num_to_alpha(26 ** 2 + 26 - 1), 'ZZ', 'Last double letter return value');
+is( _num_to_alpha(26 ** 2 + 26 ), 'AAA', 'First triple letter return value');
+is( _num_to_alpha(26 ** 2 + 26 + 1), 'AAB');
+
+is( _num_to_alpha(26 ** 3 + 26 ** 2 + 26 - 1 ), 'ZZZ', 'Last triple letter return value');
+is( _num_to_alpha(26 ** 3 + 26 ** 2 + 26 ), 'AAAA', 'First quadruple letter return value');
+is( _num_to_alpha(26 ** 3 + 26 ** 2 + 26 + 1 ), 'AAAB');
+
+note('Testing limit capabilities');
+
+is( _num_to_alpha(26 - 1 , 1), 'Z', 'Largest return value for one letter');
+is( _num_to_alpha(26 , 1), undef); # AA
+
+is( _num_to_alpha(26 ** 2 + 26 - 1 , 2 ), 'ZZ', 'Largest return value for two letters');
+is( _num_to_alpha(26 ** 2 + 26 , 2 ), undef); # AAA
+
+is( _num_to_alpha(26 ** 3 + 26 ** 2 + 26 - 1 , 3 ), 'ZZZ', 'Largest return value for three letters');
+is( _num_to_alpha(26 ** 3 + 26 ** 2 + 26 , 3 ), undef); # AAAA
+
+done_testing();
Added: vendor/perl/dist/t/test_pl/can_isa_ok.t
===================================================================
--- vendor/perl/dist/t/test_pl/can_isa_ok.t (rev 0)
+++ vendor/perl/dist/t/test_pl/can_isa_ok.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,63 @@
+#!/usr/bin/env perl -w
+
+# Test isa_ok() and can_ok() in test.pl
+
+use strict;
+use warnings;
+
+BEGIN { require "test.pl"; }
+
+require Test::More;
+
+can_ok('Test::More', qw(require_ok use_ok ok is isnt like skip can_ok
+ pass fail eq_array eq_hash eq_set));
+can_ok(bless({}, "Test::More"), qw(require_ok use_ok ok is isnt like skip
+ can_ok pass fail eq_array eq_hash eq_set));
+
+
+isa_ok(bless([], "Foo"), "Foo");
+isa_ok([], 'ARRAY');
+isa_ok(\42, 'SCALAR');
+{
+ local %Bar::;
+ local @Foo::ISA = 'Bar';
+ isa_ok( "Foo", "Bar" );
+}
+
+
+# can_ok() & isa_ok should call can() & isa() on the given object, not
+# just class, in case of custom can()
+{
+ local *Foo::can;
+ local *Foo::isa;
+ *Foo::can = sub { $_[0]->[0] };
+ *Foo::isa = sub { $_[0]->[0] };
+ my $foo = bless([0], 'Foo');
+ ok( ! $foo->can('bar') );
+ ok( ! $foo->isa('bar') );
+ $foo->[0] = 1;
+ can_ok( $foo, 'blah');
+ isa_ok( $foo, 'blah');
+}
+
+
+note "object/class_ok"; {
+ {
+ package Child;
+ our @ISA = qw(Parent);
+ }
+
+ {
+ package Parent;
+ sub new { bless {}, shift }
+ }
+
+ # Unfortunately we can't usefully test the failure case without
+ # significantly modifying test.pl
+ class_ok "Child", "Parent";
+ class_ok "Parent", "Parent";
+ object_ok( Parent->new, "Parent" );
+ object_ok( Child->new, "Parent" );
+}
+
+done_testing;
Added: vendor/perl/dist/t/test_pl/tempfile.t
===================================================================
--- vendor/perl/dist/t/test_pl/tempfile.t (rev 0)
+++ vendor/perl/dist/t/test_pl/tempfile.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,60 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ require './test.pl';
+}
+use strict;
+
+my $prefix = 'tmp'.$$;
+
+sub skip_files{
+ my($skip,$to,$next) = @_;
+ my($last,$check);
+ my $cmp = $prefix . $to;
+
+ for( 1..$skip ){
+ $check = tempfile();
+ $last = $_;
+ if( $check eq $cmp && $_ != $skip ){
+ # let the next test pass
+ last;
+ }
+ }
+
+ my $common_mess = "skip $skip filenames to $to so that the next one will end with $next";
+ if( $last == $skip ){
+ if( $check eq $cmp ){
+ pass( $common_mess );
+ }else{
+ my($alpha) = $check =~ /\Atmp\d+([A-Z][A-Z]?)\Z/;
+ fail( $common_mess, "only skipped to $alpha" )
+ }
+ }else{
+ fail( $common_mess, "only skipped $last files" );
+ }
+}
+
+note("skipping the first filename because it is taken for use by _fresh_perl()");
+
+is( tempfile(), "${prefix}B");
+is( tempfile(), "${prefix}C");
+
+skip_files(22,'Y','Z');
+
+is( tempfile(), "${prefix}Z", 'Last single letter filename');
+is( tempfile(), "${prefix}AA", 'First double letter filename');
+
+skip_files(24,'AY','AZ');
+
+is( tempfile(), "${prefix}AZ");
+is( tempfile(), "${prefix}BA");
+
+skip_files(26 * 24 + 24,'ZY','ZZ');
+
+is( tempfile(), "${prefix}ZZ", 'Last available filename');
+ok( !eval{tempfile()}, 'Should bail after Last available filename' );
+my $err = "$@";
+like( $err, qr{^Can't find temporary file name starting}, 'check error string' );
+
+done_testing();
Added: vendor/perl/dist/t/uni/attrs.t
===================================================================
--- vendor/perl/dist/t/uni/attrs.t (rev 0)
+++ vendor/perl/dist/t/uni/attrs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,195 @@
+#!./perl
+
+# Regression tests for attributes.pm and the C< : attrs> syntax.
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+ skip_all_if_miniperl("miniperl can't load attributes");
+}
+
+use utf8;
+use open qw( :utf8 :std );
+use warnings;
+use feature 'unicode_strings';
+
+$SIG{__WARN__} = sub { die @_ };
+
+sub eval_ok ($;$) {
+ eval shift;
+ is( $@, '', @_);
+}
+
+fresh_perl_is 'use attributes; print "ok"', 'ok',
+ 'attributes.pm can load without warnings.pm already loaded';
+
+eval 'sub è1 ($) : plùgh ;';
+like $@, qr/^Invalid CODE attributes?: ["']?plùgh["']? at/;
+
+eval 'sub ɛ2 ($) : plǖgh(0,0) xyzzy ;';
+like $@, qr/^Invalid CODE attributes: ["']?plǖgh\(0,0\)["']? /;
+
+eval 'my ($x,$y) : plǖgh;';
+like $@, qr/^Invalid SCALAR attribute: ["']?plǖgh["']? at/;
+
+# bug #16080
+eval '{my $x : plǖgh}';
+like $@, qr/^Invalid SCALAR attribute: ["']?plǖgh["']? at/;
+eval '{my ($x,$y) : plǖgh(})}';
+like $@, qr/^Invalid SCALAR attribute: ["']?plǖgh\(}\)["']? at/;
+
+# More syntax tests from the attributes manpage
+eval 'my $x : Şʨᚻ(10,ᕘ(7,3)) : 에ㄒ펜ሲ;';
+like $@, qr/^Invalid SCALAR attributes: ["']?Şʨᚻ\(10,ᕘ\(7,3\)\) : 에ㄒ펜ሲ["']? at/;
+eval q/my $x : Ugļᑈ('\(") :받;/;
+like $@, qr/^Invalid SCALAR attributes: ["']?Ugļᑈ\('\\\("\) : 받["']? at/;
+eval 'my $x : Şʨᚻ(10,ᕘ();';
+like $@, qr/^Unterminated attribute parameter in attribute list at/;
+eval q/my $x : Ugļᑈ('(');/;
+like $@, qr/^Unterminated attribute parameter in attribute list at/;
+
+sub A::MODIFY_SCALAR_ATTRIBUTES { return }
+eval 'my A $x : plǖgh;';
+like $@, qr/^SCALAR package attribute may clash with future reserved word: ["']?plǖgh["']? at/;
+
+eval 'my A $x : plǖgh plover;';
+like $@, qr/^SCALAR package attributes may clash with future reserved words: ["']?plǖgh["']? /;
+
+no warnings 'reserved';
+eval 'my A $x : plǖgh;';
+is $@, '';
+
+eval 'package Càt; my Càt @socks;';
+like $@, '';
+
+eval 'my Càt %nap;';
+like $@, '';
+
+sub X::MODIFY_CODE_ATTRIBUTES { die "$_[0]" }
+sub X::ᕘ { 1 }
+*Y::bar = \&X::ᕘ;
+*Y::bar = \&X::ᕘ; # second time for -w
+eval 'package Z; sub Y::bar : ᕘ';
+like $@, qr/^X at /;
+
+# Begin testing attributes that tie
+
+{
+ package Ttìè;
+ sub DESTROY {}
+ sub TIESCALAR { my $x = $_[1]; bless \$x, $_[0]; }
+ sub FETCH { ${$_[0]} }
+ sub STORE {
+ ::pass;
+ ${$_[0]} = $_[1]*2;
+ }
+ package Tlòòp;
+ sub MODIFY_SCALAR_ATTRIBUTES { tie ${$_[1]}, 'Ttìè', -1; (); }
+}
+
+eval_ok '
+ package Tlòòp;
+ for my $i (0..2) {
+ my $x : TìèLòòp = $i;
+ $x != $i*2 and ::is $x, $i*2;
+ }
+';
+
+# bug #15898
+eval 'our ${""} : ᕘ = 1';
+like $@, qr/Can't declare scalar dereference in "our"/;
+eval 'my $$ᕘ : bar = 1';
+like $@, qr/Can't declare scalar dereference in "my"/;
+
+
+# this will segfault if it fails
+sub PVBM () { 'ᕘ' }
+{ my $dummy = index 'ᕘ', PVBM }
+
+ok !defined(eval 'attributes::get(\PVBM)'),
+ 'PVBMs don\'t segfault attributes::get';
+
+{
+ # [perl #49472] Attributes + Unknown Error
+ eval '
+ use strict;
+ sub MODIFY_CODE_ATTRIBUTE{}
+ sub f:Blah {$nosuchvar};
+ ';
+
+ my $err = $@;
+ like ($err, qr/Global symbol "\$nosuchvar" requires /, 'perl #49472');
+}
+
+# Test that code attributes always get applied to the same CV that
+# we're left with at the end (bug#66970).
+{
+ package bug66970;
+ our $c;
+ sub MODIFY_CODE_ATTRIBUTES { $c = $_[1]; () }
+ $c=undef; eval 'sub t0 :ᕘ';
+ main::ok $c == \&{"t0"};
+ $c=undef; eval 'sub t1 :ᕘ { }';
+ main::ok $c == \&{"t1"};
+ $c=undef; eval 'sub t2';
+ our $t2a = \&{"t2"};
+ $c=undef; eval 'sub t2 :ᕘ';
+ main::ok $c == \&{"t2"} && $c == $t2a;
+ $c=undef; eval 'sub t3';
+ our $t3a = \&{"t3"};
+ $c=undef; eval 'sub t3 :ᕘ { }';
+ main::ok $c == \&{"t3"} && $c == $t3a;
+ $c=undef; eval 'sub t4 :ᕘ';
+ our $t4a = \&{"t4"};
+ our $t4b = $c;
+ $c=undef; eval 'sub t4 :ᕘ';
+ main::ok $c == \&{"t4"} && $c == $t4b && $c == $t4a;
+ $c=undef; eval 'sub t5 :ᕘ';
+ our $t5a = \&{"t5"};
+ our $t5b = $c;
+ $c=undef; eval 'sub t5 :ᕘ { }';
+ main::ok $c == \&{"t5"} && $c == $t5b && $c == $t5a;
+}
+
+# [perl #68560] Calling closure prototypes (only accessible via :attr)
+{
+ package brength;
+ my $proto;
+ sub MODIFY_CODE_ATTRIBUTES { $proto = $_[1]; _: }
+ eval q{
+ my $x;
+ () = sub :a0 { $x };
+ };
+ package main;
+ eval { $proto->() }; # used to crash in pp_entersub
+ like $@, qr/^Closure prototype called/,
+ "Calling closure proto with (no) args";
+ eval { () = &$proto }; # used to crash in pp_leavesub
+ like $@, qr/^Closure prototype called/,
+ 'Calling closure proto with no @_ that returns a lexical';
+}
+
+# [perl #68658] Attributes on stately variables
+{
+ package thwext;
+ sub MODIFY_SCALAR_ATTRIBUTES { () }
+ my $i = 0;
+ my $x_values = '';
+ eval 'sub ᕘ { use 5.01; state $x :A0 = $i++; $x_values .= $x }';
+ ᕘ(); ᕘ();
+ package main;
+ is $x_values, '00', 'state with attributes';
+}
+
+{
+ package 닌g난ㄬ;
+ sub MODIFY_SCALAR_ATTRIBUTES{}
+ sub MODIFY_ARRAY_ATTRIBUTES{ }
+ sub MODIFY_HASH_ATTRIBUTES{ }
+ my ($cows, @go, %bong) : テa퐅Š = qw[ jibber jabber joo ];
+ ::is $cows, 'jibber', 'list assignment to scalar with attrs';
+ ::is "@go", 'jabber joo', 'list assignment to array with attrs';
+}
+
+done_testing();
Added: vendor/perl/dist/t/uni/bless.t
===================================================================
--- vendor/perl/dist/t/uni/bless.t (rev 0)
+++ vendor/perl/dist/t/uni/bless.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,124 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+use utf8;
+use open qw( :utf8 :std );
+plan (84);
+
+sub expected {
+ my($object, $package, $type) = @_;
+ print "# $object $package $type\n";
+ is(ref($object), $package);
+ my $r = qr/^\Q$package\E=(\w+)\(0x([0-9a-f]+)\)$/u;
+ like("$object", $r);
+ if ("$object" =~ $r) {
+ is($1, $type);
+ # in 64-bit platforms hex warns for 32+ -bit values
+ cmp_ok(do {no warnings 'portable'; hex($2)}, '==', $object);
+ }
+ else {
+ fail(); fail();
+ }
+}
+
+# test blessing simple types
+
+$a1 = bless {}, "ዐ";
+expected($a1, "ዐ", "HASH");
+$b1 = bless [], "B";
+expected($b1, "B", "ARRAY");
+$c1 = bless \(map "$_", "test"), "ᶜ";
+expected($c1, "ᶜ", "SCALAR");
+$tèst = "foo"; $d1 = bless \*tèst, "ɖ";
+expected($d1, "ɖ", "GLOB");
+$e1 = bless sub { 1 }, "ಎ";
+expected($e1, "ಎ", "CODE");
+$f1 = bless \[], "ḟ";
+expected($f1, "ḟ", "REF");
+$g1 = bless \substr("test", 1, 2), "ㄍ";
+expected($g1, "ㄍ", "LVALUE");
+
+# blessing ref to object doesn't modify object
+
+expected(bless(\$a1, "ḟ"), "ḟ", "REF");
+expected($a1, "ዐ", "HASH");
+
+# reblessing does modify object
+
+bless $a1, "ዐ2";
+expected($a1, "ዐ2", "HASH");
+
+# local and my
+{
+ local $a1 = bless $a1, "ዐ3"; # should rebless outer $a1
+ local $b1 = bless [], "B3";
+ my $c1 = bless $c1, "ᶜ3"; # should rebless outer $c1
+ our $test2 = ""; my $d1 = bless \*test2, "ɖ3";
+ expected($a1, "ዐ3", "HASH");
+ expected($b1, "B3", "ARRAY");
+ expected($c1, "ᶜ3", "SCALAR");
+ expected($d1, "ɖ3", "GLOB");
+}
+expected($a1, "ዐ3", "HASH");
+expected($b1, "B", "ARRAY");
+expected($c1, "ᶜ3", "SCALAR");
+expected($d1, "ɖ", "GLOB");
+
+# class is magic
+"ಎ" =~ /(.)/;
+expected(bless({}, $1), "ಎ", "HASH");
+{
+ local $! = 1;
+ my $string = "$!";
+ $! = 2; # attempt to avoid cached string
+ $! = 1;
+ expected(bless({}, $!), $string, "HASH");
+
+# ref is ref to magic
+ {
+ {
+ package ḟ;
+ sub test { main::is(${$_[0]}, $string) }
+ }
+ $! = 2;
+ $f1 = bless \$!, "ḟ";
+ $! = 1;
+ $f1->test;
+ }
+}
+
+# ref is magic
+
+# class is a ref
+$a1 = bless {}, "ዐ4";
+$b1 = eval { bless {}, $a1 };
+isnt ($@, '', "class is a ref");
+
+# class is an overloaded ref
+=begin
+$TODO = "Package not yet clean";
+{
+ package ᚺ4;
+ use overload '""' => sub { "ᶜ4" };
+}
+$h1 = bless {}, "ᚺ4";
+$c4 = eval { bless \$test, $h1 };
+is ($@, '', "class is an overloaded ref");
+expected($c4, 'ᶜ4', "SCALAR");
+=cut
+
+{
+ my %h = 1..2;
+ my($k) = keys %h;
+ my $x=\$k;
+ bless $x, 'pàm';
+ is(ref $x, 'pàm');
+
+ my $a = bless \(keys %h), 'zàp';
+ is(ref $a, 'zàp');
+}
Added: vendor/perl/dist/t/uni/caller.t
===================================================================
--- vendor/perl/dist/t/uni/caller.t (rev 0)
+++ vendor/perl/dist/t/uni/caller.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,71 @@
+#!./perl
+# Tests for caller()
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+ plan( tests => 18 );
+}
+
+use utf8;
+use open qw( :utf8 :std );
+
+package main;
+
+{
+ local $@;
+ eval 'ok(1);';
+ ::like $@, qr/Undefined subroutine &main::ok called at/u;
+}
+my @c;
+
+sub { @c = caller(0) } -> ();
+::is( $c[3], "main::__ANON__", "anonymous subroutine name" );
+::ok( $c[4], "hasargs true with anon sub" );
+
+# Bug 20020517.003, used to dump core
+sub foo { @c = caller(0) }
+my $fooref = delete $main::{foo};
+$fooref -> ();
+::is( $c[3], "main::__ANON__", "deleted subroutine name" );
+::ok( $c[4], "hasargs true with deleted sub" );
+
+print "# Tests with caller(1)\n";
+
+sub f { @c = caller(1) }
+
+sub callf { f(); }
+callf();
+::is( $c[3], "main::callf", "subroutine name" );
+::ok( $c[4], "hasargs true with callf()" );
+&callf;
+::ok( !$c[4], "hasargs false with &callf" );
+
+eval { f() };
+::is( $c[3], "(eval)", "subroutine name in an eval {}" );
+::ok( !$c[4], "hasargs false in an eval {}" );
+
+eval q{ f() };
+::is( $c[3], "(eval)", "subroutine name in an eval ''" );
+::ok( !$c[4], "hasargs false in an eval ''" );
+
+sub { f() } -> ();
+::is( $c[3], "main::__ANON__", "anonymous subroutine name" );
+::ok( $c[4], "hasargs true with anon sub" );
+
+sub foo2 { f() }
+my $fooref2 = delete $main::{foo2};
+$fooref2 -> ();
+::is( $c[3], "main::__ANON__", "deleted subroutine name" );
+::ok( $c[4], "hasargs true with deleted sub" );
+
+sub pb { return (caller(0))[3] }
+
+::is( eval 'pb()', 'main::pb', "actually return the right function name" );
+
+my $saved_perldb = $^P;
+$^P = 16;
+$^P = $saved_perldb;
+
+::is( eval 'pb()', 'main::pb', 'actually return the right function name even if $^P had been on at some point' );
Added: vendor/perl/dist/t/uni/eval.t
===================================================================
--- vendor/perl/dist/t/uni/eval.t (rev 0)
+++ vendor/perl/dist/t/uni/eval.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,42 @@
+#!./perl
+
+# Check if eval correctly ignores the UTF-8 hint.
+
+BEGIN {
+ require './test.pl';
+}
+
+plan (tests => 5);
+
+use open qw( :utf8 :std );
+use feature 'unicode_eval';
+
+{
+ my $w;
+ $SIG{__WARN__} = sub { $w = shift };
+ use utf8;
+ my $prog = "qq!\x{f9}!";
+
+ eval $prog;
+ ok !$w;
+
+ $w = "";
+ utf8::upgrade($prog);
+ eval $prog;
+ is $w, '';
+}
+
+{
+ use utf8;
+ isnt eval "q!\360\237\220\252!", eval "q!\x{1f42a}!";
+}
+
+{
+ no utf8; #Let's make real sure.
+ my $not_utf8 = "q!\343\203\213!";
+ isnt eval $not_utf8, eval "q!\x{30cb}!";
+ {
+ use utf8;
+ isnt eval $not_utf8, eval "q!\x{30cb}!";
+ }
+}
Added: vendor/perl/dist/t/uni/goto.t
===================================================================
--- vendor/perl/dist/t/uni/goto.t (rev 0)
+++ vendor/perl/dist/t/uni/goto.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,41 @@
+#!./perl -w
+
+BEGIN {
+ require './test.pl';
+}
+
+plan tests => 4;
+
+use utf8;
+use open qw( :utf8 :std );
+
+sub goto_baresub {
+ goto &問題の原因;
+}
+
+sub goto_softref {
+ goto &{"問題の原因"};
+}
+
+sub goto_softref_octal {
+ goto &{"\345\225\217\351\241\214\343\201\256\345\216\237\345\233\240"};
+}
+
+sub 問題の原因 {
+ 1;
+}
+
+ok goto_baresub(), "Magical goto works on an UTF-8 sub,";
+ok goto_softref(), "..and an UTF-8 softref sub,";
+
+{
+ local $@;
+ eval { goto_softref_octal() };
+ like $@, qr/Goto undefined subroutine &main::\345\225\217\351\241\214\343\201\256\345\216\237\345\233\240/, "But does NOT find the softref sub when it's lacking the UTF-8 flag";
+}
+
+{
+ local $@;
+ eval { goto &因 };
+ like $@, qr/Goto undefined subroutine &main::因/, "goto undefined sub gets the right error message";
+}
Added: vendor/perl/dist/t/uni/gv.t
===================================================================
--- vendor/perl/dist/t/uni/gv.t (rev 0)
+++ vendor/perl/dist/t/uni/gv.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,843 @@
+#!./perl
+
+#
+# various typeglob tests
+#
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+use utf8;
+use open qw( :utf8 :std );
+use warnings;
+
+plan( tests => 212 );
+
+# type coersion on assignment
+$ᕘ = 'ᕘ';
+$ᴮᛅ = *main::ᕘ;
+$ᴮᛅ = $ᕘ;
+is(ref(\$ᴮᛅ), 'SCALAR');
+$ᕘ = *main::ᴮᛅ;
+
+# type coersion (not) on misc ops
+
+ok($ᕘ);
+is(ref(\$ᕘ), 'GLOB');
+
+unlike ($ᕘ, qr/abcd/);
+is(ref(\$ᕘ), 'GLOB');
+
+is($ᕘ, '*main::ᴮᛅ');
+is(ref(\$ᕘ), 'GLOB');
+
+{
+ no warnings;
+ ${\*$ᕘ} = undef;
+ is(ref(\$ᕘ), 'GLOB', 'no type coersion when assigning to *{} retval');
+ $::{ఫケ} = *ᴮᛅ;
+ is(
+ \$::{ఫケ}, \*{"ఫケ"},
+ 'symbolic *{} returns symtab entry when FAKE'
+ );
+ ${\*{"ఫケ"}} = undef;
+ is(
+ ref(\$::{ఫケ}), 'GLOB',
+ 'no type coersion when assigning to retval of symbolic *{}'
+ );
+ $::{pɥአQuઍ} = *ᴮᛅ;
+ eval '
+ is(
+ \$::{pɥአQuઍ}, \*pɥአQuઍ,
+ "compile-time *{} returns symtab entry when FAKE"
+ );
+ ${\*pɥአQuઍ} = undef;
+ ';
+ is(
+ ref(\$::{pɥአQuઍ}), 'GLOB',
+ 'no type coersion when assigning to retval of compile-time *{}'
+ );
+}
+
+# type coersion on substitutions that match
+$a = *main::ᕘ;
+$b = $a;
+$a =~ s/^X//;
+is(ref(\$a), 'GLOB');
+$a =~ s/^\*//;
+is($a, 'main::ᕘ');
+is(ref(\$b), 'GLOB');
+
+# typeglobs as lvalues
+substr($ᕘ, 0, 1) = "XXX";
+is(ref(\$ᕘ), 'SCALAR');
+is($ᕘ, 'XXXmain::ᴮᛅ');
+
+# returning glob values
+sub ᕘ {
+ local($ᴮᛅ) = *main::ᕘ;
+ $ᕘ = *main::ᴮᛅ;
+ return ($ᕘ, $ᴮᛅ);
+}
+
+($ፉṶ, $ባ) = ᕘ();
+ok(defined $ፉṶ);
+is(ref(\$ፉṶ), 'GLOB');
+
+
+ok(defined $ባ);
+is(ref(\$ባ), 'GLOB');
+
+# nested package globs
+# NOTE: It's probably OK if these semantics change, because the
+# fact that %X::Y:: is stored in %X:: isn't documented.
+# (I hope.)
+
+{ package ฝ오::ʉ; no warnings 'once'; $test=1; }
+ok(exists $ฝ오::{'ʉ::'});
+is($ฝ오::{'ʉ::'}, '*ฝ오::ʉ::');
+
+
+# test undef operator clearing out entire glob
+$ᕘ = 'stuff';
+@ᕘ = qw(more stuff);
+%ᕘ = qw(even more random stuff);
+undef *ᕘ;
+is ($ᕘ, undef);
+is (scalar @ᕘ, 0);
+is (scalar %ᕘ, 0);
+
+{
+ # test warnings from assignment of undef to glob
+ my $msg = '';
+ local $SIG{__WARN__} = sub { $msg = $_[0] };
+ use warnings;
+ *ᕘ = 'ᴮᛅ';
+ is($msg, '');
+ *ᕘ = undef;
+ like($msg, qr/Undefined value assigned to typeglob/);
+
+ no warnings 'once';
+ # test warnings for converting globs to other forms
+ my $copy = *PWÒMPF;
+ foreach ($copy, *SKRÈÈÈ) {
+ $msg = '';
+ my $victim = sprintf "%d", $_;
+ like($msg, qr/Argument "\*main::(\p{ASCII}|\Q\x{\E\p{ASCII_Hex_Digit}{2}\}){3}\Q...\E" isn't numeric in sprintf/,
+ "Warning on conversion to IV");
+ is($victim, 0);
+
+ $msg = '';
+ $victim = sprintf "%u", $_;
+ like($msg, qr/Argument "\*main::(\p{ASCII}|\Q\x{\E\p{ASCII_Hex_Digit}{2}\}){3}\Q...\E" isn't numeric in sprintf/,
+ "Warning on conversion to UV");
+ is($victim, 0);
+
+ $msg = '';
+ $victim = sprintf "%e", $_;
+ like($msg, qr/Argument "\*main::(\p{ASCII}|\Q\x{\E\p{ASCII_Hex_Digit}{2}\}){3}\Q...\E" isn't numeric in sprintf/,
+ "Warning on conversion to NV");
+ like($victim, qr/^0\.0+E\+?00/i, "Expect floating point zero");
+
+ $msg = '';
+ $victim = sprintf "%s", $_;
+ is($msg, '', "No warning on stringification");
+ is($victim, '' . $_);
+ }
+}
+
+my $test = curr_test();
+# test *glob{THING} syntax
+$Ẋ = "ok $test\n";
+++$test;
+@Ẋ = ("ok $test\n");
+++$test;
+%Ẋ = ("ok $test" => "\n");
+++$test;
+sub Ẋ { "ok $test\n" }
+print ${*Ẋ{SCALAR}}, @{*Ẋ{ARRAY}}, %{*Ẋ{HASH}}, &{*Ẋ{CODE}};
+# This needs to go here, after the print, as sub Ẋ will return the current
+# value of test
+++$test;
+format Ẋ =
+XXX This text isn't used. Should it be?
+.
+curr_test($test);
+
+is (ref *Ẋ{FORMAT}, "FORMAT");
+*Ẋ = *STDOUT;
+is (*{*Ẋ{GLOB}}, "*main::STDOUT");
+
+{
+ my $test = curr_test();
+
+ print {*Ẋ{IO}} "ok $test\n";
+ ++$test;
+
+ my $warn;
+ local $SIG{__WARN__} = sub {
+ $warn .= $_[0];
+ };
+ my $val = *Ẋ{FILEHANDLE};
+ print {*Ẋ{IO}} ($warn =~ /is deprecated/
+ ? "ok $test\n" : "not ok $test\n");
+ curr_test(++$test);
+}
+
+
+{
+ # test if defined() doesn't create any new symbols
+
+ my $a = "Sʎm000";
+ ok(!defined *{$a});
+
+ {
+ no warnings 'deprecated';
+ ok(!defined @{$a});
+ }
+ ok(!defined *{$a});
+
+ {
+ no warnings 'deprecated';
+ ok(!defined %{$a});
+ }
+ ok(!defined *{$a});
+
+ ok(!defined ${$a});
+ ok(!defined *{$a});
+
+ ok(!defined &{$a});
+ ok(!defined *{$a});
+
+ my $state = "not";
+ *{$a} = sub { $state = "ok" };
+ ok(defined &{$a});
+ ok(defined *{$a});
+ &{$a};
+ is ($state, 'ok');
+}
+
+# [ID 20010526.001] localized glob loses value when assigned to
+
+$J=1; %J=(a=>1); @J=(1); local *J=*J; *J = sub{};
+
+is($J, 1);
+is($J{a}, 1);
+is($J[0], 1);
+
+{
+ # does pp_readline() handle glob-ness correctly?
+ my $g = *ᕘ;
+ $g = <DATA>;
+ is ($g, "Perl\n");
+}
+
+{
+ my $w = '';
+ local $SIG{__WARN__} = sub { $w = $_[0] };
+ sub aʙȼ1 ();
+ local *aʙȼ1 = sub { };
+ is ($w, '');
+ sub aʙȼ2 ();
+ local *aʙȼ2;
+ *aʙȼ2 = sub { };
+ is ($w, '');
+ sub aʙȼ3 ();
+ *aʙȼ3 = sub { };
+ like ($w, qr/Prototype mismatch/);
+}
+
+{
+ # [17375] rcatline to formerly-defined undef was broken. Fixed in
+ # do_readline by checking SvOK. AMS, 20020918
+ my $x = "not ";
+ $x = undef;
+ $x .= <DATA>;
+ is ($x, "Rules\n");
+}
+
+{
+ # test the assignment of a GLOB to an LVALUE
+ my $e = '';
+ local $SIG{__DIE__} = sub { $e = $_[0] };
+ my %V;
+ sub ƒ { $_[0] = 0; $_[0] = "a"; $_[0] = *DATA }
+ ƒ($V{V});
+ is ($V{V}, '*main::DATA');
+ is (ref\$V{V}, 'GLOB', 'lvalue assignment preserves globs');
+ my $x = readline $V{V};
+ is ($x, "perl\n");
+ is ($e, '', '__DIE__ handler never called');
+}
+
+{
+
+ my $e = '';
+ # GLOB assignment to tied element
+ local $SIG{__DIE__} = sub { $e = $_[0] };
+ sub Ʈ::TIEARRAY { bless [] => "Ʈ" }
+ sub Ʈ::STORE { $_[0]->[ $_[1] ] = $_[2] }
+ sub Ʈ::FETCH { $_[0]->[ $_[1] ] }
+ sub Ʈ::FETCHSIZE { @{$_[0]} }
+ tie my @ary => "Ʈ";
+ $ary[0] = *DATA;
+ is ($ary[0], '*main::DATA');
+ is (
+ ref\tied(@ary)->[0], 'GLOB',
+ 'tied elem assignment preserves globs'
+ );
+ is ($e, '', '__DIE__ handler not called');
+ my $x = readline $ary[0];
+ is($x, "rocks\n");
+ is ($e, '', '__DIE__ handler never called');
+}
+
+{
+ SKIP: {
+ skip_if_miniperl('no dynamic loading on miniperl, no Encode', 2);
+ # Need some sort of die or warn to get the global destruction text if the
+ # bug is still present
+ my $prog = <<'EOPROG';
+ use utf8;
+ use open qw( :utf8 :std );
+ package ᴹ;
+ $| = 1;
+ sub DESTROY {eval {die qq{Farewell $_[0]}}; print $@}
+ package main;
+
+ bless \$Ⱥ::ㄅ, q{ᴹ};
+ *Ⱥ:: = \*ㄅ::;
+EOPROG
+
+ utf8::decode($prog);
+ my $output = runperl(prog => $prog);
+
+ require Encode;
+ $output = Encode::decode("UTF-8", $output);
+ like($output, qr/^Farewell ᴹ=SCALAR/, "DESTROY was called");
+ unlike($output, qr/global destruction/,
+ "unreferenced symbol tables should be cleaned up immediately");
+ }
+}
+
+{
+ # Possibly not the correct test file for these tests.
+ # There are certain space optimisations implemented via promotion rules to
+ # GVs
+
+ foreach (qw (оઓnḲ ga_ㄕƚo잎)) {
+ ok(!exists $::{$_}, "no symbols of any sort to start with for $_");
+ }
+
+ # A string in place of the typeglob is promoted to the function prototype
+ $::{оઓnḲ} = "pìè";
+ my $proto = eval 'prototype \&оઓnḲ';
+ die if $@;
+ is ($proto, "pìè", "String is promoted to prototype");
+
+
+ # A reference to a value is used to generate a constant subroutine
+ foreach my $value (3, "Perl rules", \42, qr/whatever/, [1,2,3], {1=>2},
+ \*STDIN, \&ok, \undef, *STDOUT) {
+ delete $::{оઓnḲ};
+ $::{оઓnḲ} = \$value;
+ $proto = eval 'prototype \&оઓnḲ';
+ die if $@;
+ is ($proto, '', "Prototype for a constant subroutine is empty");
+
+ my $got = eval 'оઓnḲ';
+ die if $@;
+ is (ref $got, ref $value, "Correct type of value (" . ref($value) . ")");
+ is ($got, $value, "Value is correctly set");
+ }
+}
+
+delete $::{оઓnḲ};
+$::{оઓnḲ} = \"Value";
+
+*{"ga_ㄕƚo잎"} = \&{"оઓnḲ"};
+
+is (ref $::{ga_ㄕƚo잎}, 'SCALAR', "Export of proxy constant as is");
+is (ref $::{оઓnḲ}, 'SCALAR', "Export doesn't affect original");
+is (eval 'ga_ㄕƚo잎', "Value", "Constant has correct value");
+is (ref $::{ga_ㄕƚo잎}, 'SCALAR',
+ "Inlining of constant doesn't change representation");
+
+delete $::{ga_ㄕƚo잎};
+
+eval 'sub ga_ㄕƚo잎 (); 1' or die $@;
+is ($::{ga_ㄕƚo잎}, '', "Prototype is stored as an empty string");
+
+# Check that a prototype expands.
+*{"ga_ㄕƚo잎"} = \&{"оઓnḲ"};
+
+is (ref $::{оઓnḲ}, 'SCALAR', "Export doesn't affect original");
+is (eval 'ga_ㄕƚo잎', "Value", "Constant has correct value");
+is (ref \$::{ga_ㄕƚo잎}, 'GLOB', "Symbol table has full typeglob");
+
+
+@::zᐓt = ('Zᐓt!');
+
+# Check that assignment to an existing typeglob works
+{
+ my $w = '';
+ local $SIG{__WARN__} = sub { $w = $_[0] };
+ *{"zᐓt"} = \&{"оઓnḲ"};
+ is($w, '', "Should be no warning");
+}
+
+is (ref $::{оઓnḲ}, 'SCALAR', "Export doesn't affect original");
+is (eval 'zᐓt', "Value", "Constant has correct value");
+is (ref \$::{zᐓt}, 'GLOB', "Symbol table has full typeglob");
+is (join ('!', @::zᐓt), 'Zᐓt!', "Existing array still in typeglob");
+
+sub Ṩp맅싵Ş () {
+ "Traditional";
+}
+
+# Check that assignment to an existing subroutine works
+{
+ my $w = '';
+ local $SIG{__WARN__} = sub { $w = $_[0] };
+ *{"Ṩp맅싵Ş"} = \&{"оઓnḲ"};
+ like($w, qr/^Constant subroutine main::Ṩp맅싵Ş redefined/,
+ "Redefining a constant sub should warn");
+}
+
+is (ref $::{оઓnḲ}, 'SCALAR', "Export doesn't affect original");
+is (eval 'Ṩp맅싵Ş', "Value", "Constant has correct value");
+is (ref \$::{Ṩp맅싵Ş}, 'GLOB', "Symbol table has full typeglob");
+
+# Check that assignment to an existing typeglob works
+{
+ my $w = '';
+ local $SIG{__WARN__} = sub { $w = $_[0] };
+ *{"plუᒃ"} = [];
+ *{"plუᒃ"} = \&{"оઓnḲ"};
+ is($w, '', "Should be no warning");
+}
+
+is (ref $::{оઓnḲ}, 'SCALAR', "Export doesn't affect original");
+is (eval 'plუᒃ', "Value", "Constant has correct value");
+is (ref \$::{plუᒃ}, 'GLOB', "Symbol table has full typeglob");
+
+my $gr = eval '\*plუᒃ' or die;
+
+{
+ my $w = '';
+ local $SIG{__WARN__} = sub { $w = $_[0] };
+ *{$gr} = \&{"оઓnḲ"};
+ is($w, '', "Redefining a constant sub to another constant sub with the same underlying value should not warn (It's just re-exporting, and that was always legal)");
+}
+
+is (ref $::{оઓnḲ}, 'SCALAR', "Export doesn't affect original");
+is (eval 'plუᒃ', "Value", "Constant has correct value");
+is (ref \$::{plუᒃ}, 'GLOB', "Symbol table has full typeglob");
+
+# Non-void context should defeat the optimisation, and will cause the original
+# to be promoted (what change 26482 intended)
+my $result;
+{
+ my $w = '';
+ local $SIG{__WARN__} = sub { $w = $_[0] };
+ $result = *{"aẈʞƙʞƙʞƙ"} = \&{"оઓnḲ"};
+ is($w, '', "Should be no warning");
+}
+
+is (ref \$result, 'GLOB',
+ "Non void assignment should still return a typeglob");
+
+is (ref \$::{оઓnḲ}, 'GLOB', "This export does affect original");
+is (eval 'plუᒃ', "Value", "Constant has correct value");
+is (ref \$::{plუᒃ}, 'GLOB', "Symbol table has full typeglob");
+
+delete $::{оઓnḲ};
+$::{оઓnḲ} = \"Value";
+
+sub non_dangling {
+ my $w = '';
+ local $SIG{__WARN__} = sub { $w = $_[0] };
+ *{"z앞"} = \&{"оઓnḲ"};
+ is($w, '', "Should be no warning");
+}
+
+non_dangling();
+is (ref $::{оઓnḲ}, 'SCALAR', "Export doesn't affect original");
+is (eval 'z앞', "Value", "Constant has correct value");
+is (ref $::{z앞}, 'SCALAR', "Exported target is also a PCS");
+
+sub dangling {
+ local $SIG{__WARN__} = sub { die $_[0] };
+ *{"ビfᶠ"} = \&{"оઓnḲ"};
+}
+
+dangling();
+is (ref \$::{оઓnḲ}, 'GLOB', "This export does affect original");
+is (eval 'ビfᶠ', "Value", "Constant has correct value");
+is (ref \$::{ビfᶠ}, 'GLOB', "Symbol table has full typeglob");
+
+{
+ use vars qw($gᓙʞ $sምḲ $ᕘf);
+ # Check reference assignment isn't affected by the SV type (bug #38439)
+ $gᓙʞ = 3;
+ $sምḲ = 4;
+ $ᕘf = "halt and cool down";
+
+ my $rv = \*sምḲ;
+ is($gᓙʞ, 3);
+ *gᓙʞ = $rv;
+ is($gᓙʞ, 4);
+
+ my $pv = "";
+ $pv = \*sምḲ;
+ is($ᕘf, "halt and cool down");
+ *ᕘf = $pv;
+ is($ᕘf, 4);
+}
+
+{
+no warnings 'once';
+format =
+.
+
+ foreach my $value ([1,2,3], {1=>2}, *STDOUT{IO}, \&ok, *STDOUT{FORMAT}) {
+ # *STDOUT{IO} returns a reference to a PVIO. As it's blessed, ref returns
+ # IO::Handle, which isn't what we want.
+ my $type = $value;
+ $type =~ s/.*=//;
+ $type =~ s/\(.*//;
+ delete $::{оઓnḲ};
+ $::{оઓnḲ} = $value;
+ $proto = eval 'prototype \&оઓnḲ';
+ like ($@, qr/^Cannot convert a reference to $type to typeglob/,
+ "Cannot upgrade ref-to-$type to typeglob");
+ }
+}
+
+{
+ no warnings qw(once uninitialized);
+ my $g = \*ȼલᑧɹ;
+ my $r = eval {no strict; ${*{$g}{SCALAR}}};
+ is ($@, '', "PERL_DONT_CREATE_GVSV shouldn't affect thingy syntax");
+
+ $g = \*vȍwɯ;
+ $r = eval {use strict; ${*{$g}{SCALAR}}};
+ is ($@, '',
+ "PERL_DONT_CREATE_GVSV shouldn't affect thingy syntax under strict");
+}
+
+{
+ # Bug reported by broquaint on IRC
+ *ᔅᓗsḨ::{HASH}->{ISA}=[];
+ ᔅᓗsḨ->import;
+ pass("gv_fetchmeth coped with the unexpected");
+
+ # An audit found these:
+ {
+ package ᔅᓗsḨ;
+ sub 맆 {
+ my $s = shift;
+ $s->SUPER::맆;
+ }
+ }
+ {
+ eval {ᔅᓗsḨ->맆;};
+ like ($@, qr/^Can't locate object method "맆"/, "Even with SUPER");
+ }
+ is(ᔅᓗsḨ->isa('swoosh'), '');
+}
+
+{
+ die if exists $::{본ㄎ};
+ $::{본ㄎ} = \"포ヰe";
+ *{"본ㄎ"} = \&{"본ㄎ"};
+ eval 'is(본ㄎ(), "포ヰe",
+ "Assignment works when glob created midway (bug 45607)"); 1'
+ or die $@;
+}
+
+
+# [perl #72740] - indirect object syntax, heuristically imputed due to
+# the non-existence of a function, should not cause a stash entry to be
+# created for the non-existent function.
+{
+ {
+ package RƬ72740a;
+ my $f = bless({}, RƬ72740b);
+ sub s1 { s2 $f; }
+ our $s4;
+ sub s3 { s4 $f; }
+ }
+ {
+ package RƬ72740b;
+ sub s2 { "RƬ72740b::s2" }
+ sub s4 { "RƬ72740b::s4" }
+ }
+ ok(exists($RƬ72740a::{s1}), "RƬ72740a::s1 exists");
+ ok(!exists($RƬ72740a::{s2}), "RƬ72740a::s2 does not exist");
+ ok(exists($RƬ72740a::{s3}), "RƬ72740a::s3 exists");
+ ok(exists($RƬ72740a::{s4}), "RƬ72740a::s4 exists");
+ is(RƬ72740a::s1(), "RƬ72740b::s2", "RƬ72740::s1 parsed correctly");
+ is(RƬ72740a::s3(), "RƬ72740b::s4", "RƬ72740::s3 parsed correctly");
+}
+
+# [perl #71686] Globs that are in symbol table can be un-globbed
+$ŚyṀ = undef;
+$::{Ḟ앜ɞ} = *ŚyṀ;
+is (eval 'local *::Ḟ앜ɞ = \"chuck"; $Ḟ앜ɞ', 'chuck',
+ "Localized glob didn't coerce into a RV");
+is ($@, '', "Can localize FAKE glob that's present in stash");
+{
+ is (scalar $::{Ḟ앜ɞ}, "*main::ŚyṀ",
+ "Localized FAKE glob's value was correctly restored");
+}
+
+# [perl #1804] *$x assignment when $x is a copy of another glob
+# And [perl #77508] (same thing with list assignment)
+ {
+ no warnings 'once';
+ my $x = *_ràndom::glob_that_is_not_used_elsewhere;
+ *$x = sub{};
+ is(
+ "$x", '*_ràndom::glob_that_is_not_used_elsewhere',
+ '[perl #1804] *$x assignment when $x is FAKE',
+ );
+ $x = *_ràndom::glob_that_is_not_used_elsewhere;
+ (my $dummy, *$x) = (undef,[]);
+ is(
+ "$x", '*_ràndom::glob_that_is_not_used_elsewhere',
+ '[perl #77508] *$x list assignment when $x is FAKE',
+ ) or require Devel::Peek, Devel::Peek::Dump($x);
+}
+
+# [perl #76540]
+# this caused panics or 'Attempt to free unreferenced scalar'
+# (its a compile-time issue, so the die lets us skip the prints)
+{
+ my @warnings;
+ local $SIG{__WARN__} = sub { push @warnings, @_ };
+
+ eval <<'EOF';
+BEGIN { $::{FÒÒ} = \'ᴮᛅ' }
+die "made it";
+print FÒÒ, "\n";
+print FÒÒ, "\n";
+EOF
+
+ like($@, qr/made it/, "#76540 - no panic");
+ ok(!@warnings, "#76540 - no 'Attempt to free unreferenced scalar'");
+}
+
+# [perl #77362] various bugs related to globs as PVLVs
+{
+ no warnings qw 'once void';
+ my %h; # We pass a key of this hash to the subroutine to get a PVLV.
+ sub { for(shift) {
+ # Set up our glob-as-PVLV
+ $_ = *hòn;
+ is $_, "*main::hòn";
+
+ # Bad symbol for array
+ ok eval{ @$_; 1 }, 'PVLV glob slots can be autovivified' or diag $@;
+
+ {
+ # This should call TIEHANDLE, not TIESCALAR
+ *thèxt::TIEHANDLE = sub{};
+ ok eval{ tie *$_, 'thèxt'; 1 }, 'PVLV globs can be tied as handles'
+ or diag $@;
+ }
+ # Assigning undef to the glob should not overwrite it...
+ {
+ my $w;
+ local $SIG{__WARN__} = sub { $w = shift };
+ *$_ = undef;
+ is $_, "*main::hòn", 'PVLV: assigning undef to the glob does nothing';
+ like $w, qr\Undefined value assigned to typeglob\,
+ 'PVLV: assigning undef to the glob warns';
+ }
+
+ # Neither should reference assignment.
+ *$_ = [];
+ is $_, "*main::hòn", "PVLV: arrayref assignment assigns to the AV slot";
+
+ # Concatenation should still work.
+ ok eval { $_ .= 'thlèw' }, 'PVLV concatenation does not die' or diag $@;
+ is $_, '*main::hònthlèw', 'PVLV concatenation works';
+
+ # And we should be able to overwrite it with a string, number, or refer-
+ # ence, too, if we omit the *.
+ $_ = *hòn; $_ = 'tzòr';
+ is $_, 'tzòr', 'PVLV: assigning a string over a glob';
+ $_ = *hòn; $_ = 23;
+ is $_, 23, 'PVLV: assigning an integer over a glob';
+ $_ = *hòn; $_ = 23.23;
+ is $_, 23.23, 'PVLV: assigning a float over a glob';
+ $_ = *hòn; $_ = \my $sthat;
+ is $_, \$sthat, 'PVLV: assigning a reference over a glob';
+
+ # This bug was found by code inspection. Could this ever happen in
+ # real life? :-)
+ # This duplicates a file handle, accessing it through a PVLV glob, the
+ # glob having been removed from the symbol table, so a stringified form
+ # of it does not work. This checks that sv_2io does not stringify a PVLV.
+ $_ = *quìn;
+ open *quìn, "test.pl"; # test.pl is as good a file as any
+ delete $::{quìn};
+ ok eval { open my $zow, "<&", $_ }, 'PVLV: sv_2io stringifieth not'
+ or diag $@;
+
+ # Similar tests to make sure sv_2cv etc. do not stringify.
+ *$_ = sub { 1 };
+ ok eval { &$_ }, "PVLV glob can be called as a sub" or diag $@;
+ *flèlp = sub { 2 };
+ $_ = 'flèlp';
+ is eval { &$_ }, 2, 'PVLV holding a string can be called as a sub'
+ or diag $@;
+
+ # Coderef-to-glob assignment when the glob is no longer accessible
+ # under its name: These tests are to make sure the OPpASSIGN_CV_TO_GV
+ # optimisation takes PVLVs into account, which is why the RHSs have to be
+ # named subs.
+ use constant ghèèn => 'quàrè';
+ $_ = *mìng;
+ delete $::{mìng};
+ *$_ = \&ghèèn;
+ is eval { &$_ }, 'quàrè',
+ 'PVLV: constant assignment when the glob is detached from the symtab'
+ or diag $@;
+ $_ = *bèngth;
+ delete $::{bèngth};
+ *ghèck = sub { 'lon' };
+ *$_ = \&ghèck;
+ is eval { &$_ }, 'lon',
+ 'PVLV: coderef assignment when the glob is detached from the symtab'
+ or diag $@;
+
+SKIP: {
+ skip_if_miniperl("no dynamic loading on miniperl, so can't load PerlIO::scalar", 1);
+ # open should accept a PVLV as its first argument
+ $_ = *hòn;
+ ok eval { open $_,'<', \my $thlext }, 'PVLV can be the first arg to open'
+ or diag $@;
+ }
+
+ # -t should not stringify
+ $_ = *thlìt; delete $::{thlìt};
+ *$_ = *STDOUT{IO};
+ ok defined -t $_, 'PVLV: -t does not stringify';
+
+ # neither should -T
+ # but some systems donât support this on file handles
+ my $pass;
+ ok
+ eval {
+ open my $quìle, "<", 'test.pl';
+ $_ = *$quìle;
+ $pass = -T $_;
+ 1
+ } ? $pass : $@ =~ /not implemented on filehandles/,
+ "PVLV: -T does not stringify";
+ # Unopened file handle
+ {
+ my $w;
+ local $SIG{__WARN__} = sub { $w .= shift };
+ $_ = *vòr;
+ close $_;
+ like $w, qr\unopened filehandle vòr\,
+ 'PVLV globs get their names reported in unopened error messages';
+ }
+
+ }}->($h{k});
+}
+
+*àieee = 4;
+pass('Can assign integers to typeglobs');
+*àieee = 3.14;
+pass('Can assign floats to typeglobs');
+*àieee = 'pi';
+pass('Can assign strings to typeglobs');
+
+
+{
+ package thrèxt;
+ sub TIESCALAR{bless[]}
+ sub STORE{ die "No!"}
+ sub FETCH{ no warnings 'once'; *thrìt }
+ tie my $a, "thrèxt";
+ () = "$a"; # do a fetch; now $a holds a glob
+ eval { *$a = sub{} };
+ untie $a;
+ eval { $a = "ᴮᛅ" };
+ ::is $a, "ᴮᛅ",
+ "[perl #77812] Globs in tied scalars can be reified if STORE dies"
+}
+
+# These two crashed prior to 5.13.6. In 5.13.6 they were fatal errors. They
+# were fixed in 5.13.7.
+ok eval {
+ my $glob = \*hèèn::ISA;
+ delete $::{"hèèn::"};
+ *$glob = *ᴮᛅ;
+}, "glob-to-*ISA assignment works when *ISA has lost its stash";
+ok eval {
+ my $glob = \*slàre::ISA;
+ delete $::{"slàre::"};
+ *$glob = [];
+}, "array-to-*ISA assignment works when *ISA has lost its stash";
+# These two crashed in 5.13.6. They were likewise fixed in 5.13.7.
+ok eval {
+ sub grèck;
+ my $glob = do { no warnings "once"; \*phìng::ᕘ};
+ delete $::{"phìng::"};
+ *$glob = *grèck;
+}, "Assigning a glob-with-sub to a glob that has lost its stash warks";
+ok eval {
+ sub pòn::ᕘ;
+ my $glob = \*pòn::ᕘ;
+ delete $::{"pòn::"};
+ *$glob = *ᕘ;
+}, "Assigning a glob to a glob-with-sub that has lost its stash warks";
+
+{
+ package Tie::Alias;
+ sub TIESCALAR{ bless \\pop }
+ sub FETCH { $${$_[0]} }
+ sub STORE { $${$_[0]} = $_[1] }
+ package main;
+ tie my $alias, 'Tie::Alias', my $var;
+ no warnings 'once';
+ $var = *gàlobbe;
+ {
+ local *$alias = [];
+ $var = 3;
+ is $alias, 3, "[perl #77926] Glob reification during localisation";
+ }
+}
+
+# This code causes gp_free to call a destructor when a glob is being
+# restored on scope exit. The destructor used to see SVs with a refcount of
+# zero inside the glob, which could result in crashes (though not in this
+# test case, which just panics).
+{
+ no warnings 'once';
+ my $survived;
+ *Trìt::DESTROY = sub {
+ $thwèxt = 42; # panic
+ $survived = 1;
+ };
+ {
+ local *thwèxt = bless [],'Trìt';
+ ();
+ }
+ ok $survived,
+ 'no error when gp_free calls a destructor that assigns to the gv';
+}
+
+__END__
+Perl
+Rules
+perl
+rocks
Added: vendor/perl/dist/t/uni/labels.t
===================================================================
--- vendor/perl/dist/t/uni/labels.t (rev 0)
+++ vendor/perl/dist/t/uni/labels.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,85 @@
+#!./perl
+
+# Tests for labels in UTF-8
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+use utf8;
+use open qw( :utf8 :std );
+use warnings;
+use feature qw 'unicode_strings evalbytes';
+
+use charnames qw( :full );
+
+plan(10);
+
+LABEL: {
+ pass("Sanity check, UTF-8 labels don't throw a syntax error.");
+}
+
+
+SKIP: {
+ skip_if_miniperl("no dynamic loading, no Encode", 2);
+ no warnings 'exiting';
+ require Encode;
+
+ my $prog = 'last LOOP;';
+
+ LOOP: {
+ eval $prog;
+ }
+ is $@, '', "last with a UTF-8 label works,";
+
+ LOOP: {
+ Encode::_utf8_off($prog);
+ evalbytes $prog;
+ like $@, qr/^Unrecognized character/, "..but turn off the UTF-8 flag and it explodes";
+ }
+}
+
+{
+ no warnings 'exiting';
+
+ eval "last E";
+ like $@, qr/Label not found for "last E" at/u, "last's error is UTF-8 clean";
+
+ eval "redo E";
+ like $@, qr/Label not found for "redo E" at/u, "redo's error is UTF-8 clean";
+
+ eval "next E";
+ like $@, qr/Label not found for "next E" at/u, "next's error is UTF-8 clean";
+}
+
+my $d = 2;
+LÁBEL: {
+ my $e = $@;
+ my $prog = "redo L\N{LATIN CAPITAL LETTER A WITH ACUTE}BEL";
+
+ if ($d == 1) {
+ is $e, '', "redo UTF8 works";
+ utf8::downgrade($prog);
+ }
+ if ($d--) {
+ use feature 'unicode_eval';
+ no warnings 'exiting';
+ eval $prog;
+ }
+}
+
+like $@, qr/Unrecognized character/, "redo to downgradeable labels";
+is $d, 0, "Latin-1 labels are reachable";
+
+{
+ no warnings;
+ goto ここ;
+
+ if (undef) {
+ ここ: {
+ pass("goto UTF-8 LABEL works.");
+ }
+ }
+}
Added: vendor/perl/dist/t/uni/method.t
===================================================================
--- vendor/perl/dist/t/uni/method.t (rev 0)
+++ vendor/perl/dist/t/uni/method.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,205 @@
+#!./perl -w
+
+#
+# test method calls and autoloading.
+#
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = qw(. ../lib);
+ require "test.pl";
+}
+
+use strict;
+use utf8;
+use open qw( :utf8 :std );
+no warnings 'once';
+
+plan(tests => 62);
+
+#Can't use bless yet, as it might not be clean
+
+sub F::b { ::is shift, "F"; "UTF8 meth" }
+sub F::b { ::is shift, "F"; "UTF8 Stash" }
+sub F::b { ::is shift, "F"; "UTF8 Stash&meth" }
+
+is(F->b, "UTF8 meth", "If the method is in UTF-8, lookup works through explicitly named methods");
+is(F->${\"b"}, "UTF8 meth", '..as does for ->${\""}');
+eval { F->${\"b\0nul"} };
+ok $@, "If the method is in UTF-8, lookup is nul-clean";
+
+is(F->b, "UTF8 Stash", "If the stash is in UTF-8, lookup works through explicitly named methods");
+is(F->${\"b"}, "UTF8 Stash", '..as does for ->${\""}');
+eval { F->${\"b\0nul"} };
+ok $@, "If the stash is in UTF-8, lookup is nul-clean";
+
+is(F->b, "UTF8 Stash&meth", "If both stash and method are in UTF-8, lookup works through explicitly named methods");
+is(F->${\"b"}, "UTF8 Stash&meth", '..as does for ->${\""}');
+eval { F->${\"b\0nul"} };
+ok $@, "Even if both stash and method are in UTF-8, lookup is nul-clean";
+
+eval { my $ref = \my $var; $ref->method };
+like $@, qr/Can't call method "method" on unblessed reference /u;
+
+{
+ use utf8;
+ use open qw( :utf8 :std );
+
+ my $e;
+
+ eval '$e = bless {}, "E::A"; E::A->foo()';
+ like ($@, qr/^\QCan't locate object method "foo" via package "E::A" at/u);
+ eval '$e = bless {}, "E::B"; $e->foo()';
+ like ($@, qr/^\QCan't locate object method "foo" via package "E::B" at/u);
+ eval 'E::C->foo()';
+ like ($@, qr/^\QCan't locate object method "foo" via package "E::C" (perhaps /u);
+
+ eval 'UNIVERSAL->E::D::foo()';
+ like ($@, qr/^\QCan't locate object method "foo" via package "E::D" (perhaps /u);
+ eval 'my $e = bless {}, "UNIVERSAL"; $e->E::E::foo()';
+ like ($@, qr/^\QCan't locate object method "foo" via package "E::E" (perhaps /u);
+
+ $e = bless {}, "E::F"; # force package to exist
+ eval 'UNIVERSAL->E::F::foo()';
+ like ($@, qr/^\QCan't locate object method "foo" via package "E::F" at/u);
+ eval '$e = bless {}, "UNIVERSAL"; $e->E::F::foo()';
+ like ($@, qr/^\QCan't locate object method "foo" via package "E::F" at/u);
+}
+
+is(do { use utf8; use open qw( :utf8 :std ); eval 'Foo->boogie()';
+ $@ =~ /^\QCan't locate object method "boogie" via package "Foo" (perhaps /u ? 1 : $@}, 1);
+
+#This reimplements a bit of _fresh_perl() from test.pl, as we want to decode
+#the output of that program before using it.
+SKIP: {
+ skip_if_miniperl('no dynamic loading on miniperl, no Encode');
+
+ my $prog = q!use utf8; use open qw( :utf8 :std ); sub T::DESTROY { $x = $_[0]; } bless [], "T";!;
+ utf8::decode($prog);
+
+ my $tmpfile = tempfile();
+ my $runperl_args = {};
+ $runperl_args->{progfile} = $tmpfile;
+ $runperl_args->{stderr} = 1;
+
+ open TEST, '>', $tmpfile or die "Cannot open $tmpfile: $!";
+
+ print TEST $prog;
+ close TEST or die "Cannot close $tmpfile: $!";
+
+ my $results = runperl(%$runperl_args);
+
+ require Encode;
+ $results = Encode::decode("UTF-8", $results);
+
+ like($results,
+ qr/DESTROY created new reference to dead object 'T' during global destruction./u,
+ "DESTROY creating a new reference to the object generates a warning in UTF-8.");
+}
+
+package Føø::Bær {
+ sub new { bless {}, shift }
+ sub nèw { bless {}, shift }
+}
+
+like( Føø::Bær::new("Føø::Bær"), qr/Føø::Bær=HASH/u, 'Can access new directly through a UTF-8 package.' );
+like( Føø::Bær->new, qr/Føø::Bær=HASH/u, 'Can access new as a method through a UTF-8 package.' );
+like( Føø::Bær::nèw("Føø::Bær"), qr/Føø::Bær=HASH/u, 'Can access nèw directly through a UTF-8 package.' );
+like( Føø::Bær->nèw, qr/Føø::Bær=HASH/u, 'Can access nèw as a method through a UTF-8 package.' );
+
+is( ref Føø::Bær->new, 'Føø::Bær');
+
+my $new_ascii = "new";
+my $new_latin = "nèw";
+my $new_utf8 = "n\303\250w";
+my $newoct = "n\303\250w";
+utf8::decode($new_utf8);
+
+like( Føø::Bær->$new_ascii, qr/Føø::Bær=HASH/u, "Can access \$new_ascii, [$new_ascii], stored in a scalar, as a method, through a UTF-8 package." );
+like( Føø::Bær->$new_latin, qr/Føø::Bær=HASH/u, "Can access \$new_latin, [$new_latin], stored in a scalar, as a method, through a UTF-8 package." );
+like( Føø::Bær->$new_utf8, qr/Føø::Bær=HASH/u, "Can access \$new_utf8, [$new_utf8], stored in a scalar, as a method, through a UTF-8 package." );
+{
+ local $@;
+ eval { Føø::Bær->$newoct };
+ like($@, qr/Can't locate object method "n\303\250w" via package "Føø::Bær"/u, "Can't access [$newoct], stored in a scalar, as a method through a UTF-8 package." );
+}
+
+
+like( nèw Føø::Bær, qr/Føø::Bær=HASH/u, "Can access [nèw] as a method through a UTF-8 indirect object package.");
+
+my $pkg_latin_1 = 'Føø::Bær';
+
+like( $pkg_latin_1->new, qr/Føø::Bær=HASH/u, 'Can access new as a method when the UTF-8 package name is in a scalar.');
+like( $pkg_latin_1->nèw, qr/Føø::Bær=HASH/u, 'Can access nèw as a method when the UTF-8 package name is in a scalar.');
+
+like( $pkg_latin_1->$new_ascii, qr/Føø::Bær=HASH/u, "Can access \$new_ascii, [$new_ascii], stored in a scalar, as a method, when the UTF-8 package name is also in a scalar.");
+like( $pkg_latin_1->$new_latin, qr/Føø::Bær=HASH/u, "Can access \$new_latin, [$new_latin], stored in a scalar, as a method, when the UTF-8 package name is also in a scalar.");
+like( $pkg_latin_1->$new_utf8, qr/Føø::Bær=HASH/u, "Can access \$new_utf8, [$new_utf8], stored in a scalar, as a method, when the UTF-8 package name is also in a scalar." );
+{
+ local $@;
+ eval { $pkg_latin_1->$newoct };
+ like($@, qr/Can't locate object method "n\303\250w" via package "Føø::Bær"/u, "Can't access [$newoct], stored in a scalar, as a method, when the UTF-8 package name is also in a scalar.");
+}
+
+ok !!Føø::Bær->can($new_ascii), "->can works for [$new_ascii]";
+ok !!Føø::Bær->can($new_latin), "->can works for [$new_latin]";
+ok((not !!Føø::Bær->can($newoct)), "->can doesn't work for [$newoct]");
+
+package クラス {
+ sub new { bless {}, shift }
+ sub ニュー { bless {}, shift }
+}
+
+like( クラス::new("クラス"), qr/クラス=HASH/u);
+like( クラス->new, qr/クラス=HASH/u);
+
+like( クラス::ニュー("クラス"), qr/クラス=HASH/u);
+like( クラス->ニュー, qr/クラス=HASH/u);
+
+like( ニュー クラス, qr/クラス=HASH/u, "Indirect object is UTF-8, as is the class.");
+
+is( ref クラス->new, 'クラス');
+is( ref クラス->ニュー, 'クラス');
+
+package Foo::Bar {
+ our @ISA = qw( Føø::Bær );
+}
+
+package Foo::Bàz {
+ use parent qw( -norequire Føø::Bær );
+}
+
+package ฟọ::バッズ {
+ use parent qw( -norequire Føø::Bær クラス );
+}
+
+ok(Foo::Bar->new, 'Simple inheritance works by pushing into @ISA,');
+ok(Foo::Bar->nèw, 'Even with UTF-8 methods');
+
+ok(Foo::Bàz->new, 'Simple inheritance works with parent using -norequire,');
+ok(Foo::Bàz->nèw, 'Even with UTF-8 methods');
+
+ok(ฟọ::バッズ->new, 'parent using -norequire, in a UTF-8 package.');
+ok(ฟọ::バッズ->nèw, 'Also works with UTF-8 methods');
+ok(ฟọ::バッズ->ニュー, 'Even methods from an UTF-8 parent');
+
+BEGIN {no strict 'refs'; ++${"\xff::foo"} } # autovivify the package
+package ÿ { # without UTF8
+ sub AUTOLOAD {
+ ::is our $AUTOLOAD,
+ "\xff::\x{100}", '$AUTOLOAD made from Latin1 package + UTF8 sub';
+ }
+}
+ÿ->${\"\x{100}"};
+
+#This test should go somewhere else.
+#DATA was being generated in the wrong package.
+package ʑ;
+no strict 'refs';
+
+::ok( *{"ʑ::DATA"}{IO}, "DATA is generated in the right glob");
+::ok !defined(*{"main::DATA"}{IO});
+::is scalar <DATA>, "Some data\n";
+
+__DATA__
+Some data
Added: vendor/perl/dist/t/uni/opcroak.t
===================================================================
--- vendor/perl/dist/t/uni/opcroak.t (rev 0)
+++ vendor/perl/dist/t/uni/opcroak.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,44 @@
+#!./perl
+
+#
+# tests for op.c generated croaks
+#
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+use utf8;
+use open qw( :utf8 :std );
+use warnings;
+
+plan( tests => 5 );
+
+eval qq!sub \x{30cb} (\$) {} \x{30cb}()!;
+like $@, qr/Not enough arguments for main::\x{30cb}/u, "Not enough arguments croak is UTF-8 clean";
+
+eval qq!sub \x{30cc} (\$) {} \x{30cc}(1, 2)!;
+like $@, qr/Too many arguments for main::\x{30cc}/u, "Too many arguments croak is UTF-8 clean";
+
+eval qq!sub \x{30cd} (\Q\%\E) { 1 } \x{30cd}(1);!;
+like $@, qr/Type of arg 1 to main::\x{30cd} must be/u, "bad type croak is UTF-8 clean";
+
+ eval <<'END_FIELDS';
+ {
+ package FŌŌ {
+ use fields qw( a b );
+ sub new { bless {}, shift }
+ }
+ }
+END_FIELDS
+
+for (
+ [ element => 'my FŌŌ $bàr = FŌŌ->new; $bàr->{クラス};' ],
+ [ slice => 'my FŌŌ $bàr = FŌŌ->new; @{$bàr}{ qw( a クラス ) };' ]
+ ) {
+ eval $_->[1];
+
+ like $@, qr/No such class field "クラス" in variable \$bàr of type FŌŌ/, "$_->[0]: no such field error is UTF-8 clean";
+}
Added: vendor/perl/dist/t/uni/package.t
===================================================================
--- vendor/perl/dist/t/uni/package.t (rev 0)
+++ vendor/perl/dist/t/uni/package.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,111 @@
+#!./perl
+
+# Checks if 'package' work as intended.
+
+BEGIN {
+ require './test.pl';
+}
+
+plan (tests => 18);
+
+use utf8;
+use open qw( :utf8 :std );
+
+package Føø::Bær { }
+
+package クラス { }
+
+package ฟọ::バッズ { }
+
+ok 1, "sanity check. If we got this far, UTF-8 in package names is legal.";
+
+#The next few come from comp/package.t
+{
+
+ $ㄅĽuṞfⳐ = 123;
+
+ package ꑭʑ;
+
+ sub ニュー {bless [];}
+ $bar = 4;
+ {
+ package 압Ƈ;
+ $ㄅĽuṞfⳐ = 5;
+ }
+
+ $압Ƈ'd읯ⱪ = 6; #'
+
+ $ꑭʑ = 2;
+
+ $ꑭʑ = join(':', sort(keys %ꑭʑ::));
+ $압Ƈ = join(':', sort(keys %압Ƈ::));
+
+ ::is $ꑭʑ, 'bar:ニュー:ꑭʑ:압Ƈ', "comp/stash.t test 1";
+ ::is $압Ƈ, "d읯ⱪ:ㄅĽuṞfⳐ", "comp/stash.t test 2";
+ ::is $main'ㄅĽuṞfⳐ, 123, "comp/stash.t test 3";
+
+ package 압Ƈ;
+
+ ::is $ㄅĽuṞfⳐ, 5, "comp/stash.t test 4";
+ eval '::is $ㄅĽuṞfⳐ, 5, "comp/stash.t test 5";';
+ eval 'package main; is $ㄅĽuṞfⳐ, 123, "comp/stash.t test 6";';
+ ::is $ㄅĽuṞfⳐ, 5, "comp/stash.t test 7";
+
+ #This is actually pretty bad, as caller() wasn't clean to begin with.
+ package main;
+ sub ㄘ { caller(0) }
+
+ sub ƒஓ {
+ my $s = shift;
+ if ($s) {
+ package ᛔQR;
+ main::ㄘ();
+ }
+ }
+
+ is((ƒஓ(1))[0], 'ᛔQR', "comp/stash.t test 8");
+
+ my $Q = ꑭʑ->ニュー();
+ undef %ꑭʑ::;
+ eval { $a = *ꑭʑ::ニュー{PACKAGE}; };
+ is $a, "__ANON__", "comp/stash.t test 9";
+
+ {
+ local $@;
+ eval { $Q->param; };
+ like $@, qr/^Can't use anonymous symbol table for method lookup/, "comp/stash.t test 10";
+ }
+
+ like "$Q", qr/^__ANON__=/, "comp/stash.t test 11";
+
+ is ref $Q, "__ANON__", "comp/stash.t test 12";
+
+ package bugⅲⅱⅴⅵⅱ { #not really latin, but bear with me, I'm not Damian.
+ ::is( __PACKAGE__, 'bugⅲⅱⅴⅵⅱ', "comp/stash.t test 13");
+ ::is( eval('__PACKAGE__'), 'bugⅲⅱⅴⅵⅱ', "comp/stash.t test 14");
+ }
+}
+
+#This comes from comp/package_block.t
+{
+ local $@;
+ eval q[package ᕘ {];
+ like $@, qr/\AMissing right curly /, "comp/package_block.t test";
+}
+
+# perl #105922
+
+{
+ my $latin_1 = "þackage";
+ my $utf8 = "þackage";
+ utf8::downgrade($latin_1);
+ utf8::upgrade($utf8);
+
+ local $@;
+ eval { $latin_1->can("yadda") };
+ ok(!$@, "latin1->meth works");
+
+ local $@;
+ eval { $utf8->can("yadda") };
+ ok(!$@, "utf8->meth works");
+}
Added: vendor/perl/dist/t/uni/parser.t
===================================================================
--- vendor/perl/dist/t/uni/parser.t (rev 0)
+++ vendor/perl/dist/t/uni/parser.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,154 @@
+#!./perl
+
+# Checks if the parser behaves correctly in edge cases
+# (including weird syntax errors)
+
+BEGIN {
+ require './test.pl';
+}
+
+plan (tests => 48);
+
+use utf8;
+use open qw( :utf8 :std );
+
+ok *tèst, "*main::tèst", "sanity check.";
+ok $::{"tèst"}, "gets the right glob in the stash.";
+
+my $glob_by_sub = sub { *main::method }->();
+
+is *main::method, "*main::method", "glob stringy works";
+is "" . *main::method, "*main::method", "glob stringify-through-concat works";
+is $glob_by_sub, "*main::method", "glob stringy works";
+is "" . $glob_by_sub, "*main::method", "";
+
+sub gimme_glob {
+ no strict 'refs';
+ is *{$_[0]}, "*main::$_[0]";
+ *{$_[0]};
+}
+
+is "" . gimme_glob("下郎"), "*main::下郎";
+$a = *下郎;
+is "" . $a, "*main::下郎";
+
+*{gimme_glob("下郎")} = sub {};
+
+{
+ ok defined *{"下郎"}{CODE};
+ ok !defined *{"\344\270\213\351\203\216"}{CODE};
+}
+
+$Lèon = 1;
+is ${*Lèon{SCALAR}}, 1, "scalar define in the right glob,";
+ok !${*{"L\303\250on"}{SCALAR}}, "..and nothing in the wrong one.";
+
+my $a = "foo" . chr(190);
+my $b = $a . chr(256);
+chop $b; # $b is $a with utf8 on
+
+is $a, $b, '$a equals $b';
+
+*$b = sub { 5 };
+
+is eval { main->$a }, 5, q!$a can call $b's sub!;
+ok !$@, "..and there's no error.";
+
+my $c = $b;
+utf8::encode($c);
+ok $b ne $c, '$b unequal $c';
+eval { main->$c };
+ok $@, q!$c can't call $b's sub.!;
+
+# Now define another sub under the downgraded name:
+*$a = sub { 6 };
+# Call it:
+is eval { main->$a }, 6, "Adding a new sub to *a and calling it works,";
+ok !$@, "..without errors.";
+eval { main->$c };
+ok $@, "but it's still unreachable through *c";
+
+*$b = \10;
+is ${*$a{SCALAR}}, 10;
+is ${*$b{SCALAR}}, 10;
+is ${*$c{SCALAR}}, undef;
+
+opendir FÒÒ, ".";
+closedir FÒÒ;
+::ok($::{"FÒÒ"}, "Bareword generates the right glob.");
+::ok(!$::{"F\303\222\303\222"});
+
+sub участники { 1 }
+
+ok $::{"участники"}, "non-const sub declarations generate the right glob";
+ok *{$::{"участники"}}{CODE};
+is *{$::{"участники"}}{CODE}->(), 1;
+
+sub 原 () { 1 }
+
+is grep({ $_ eq "\x{539f}" } keys %::), 1, "Constant subs generate the right glob.";
+is grep({ $_ eq "\345\216\237" } keys %::), 0;
+
+#These should probably go elsewhere.
+eval q{ sub wròng1 (_$); wròng1(1,2) };
+like( $@, qr/Malformed prototype for main::wròng1/, 'Malformed prototype croak is clean.' );
+
+eval q{ sub ча::ики ($__); ча::ики(1,2) };
+like( $@, qr/Malformed prototype for ча::ики/ );
+
+our $問 = 10;
+is $問, 10, "our works";
+is $main::問, 10, "...as does getting the same variable through the fully qualified name";
+is ${"main::\345\225\217"}, undef, "..and using the encoded form doesn't";
+
+{
+ use charnames qw( :full );
+
+ eval qq! my \$\x{30cb} \N{DROMEDARY CAMEL} !;
+ $@ =~ s/eval \d+/eval 11/;
+ is $@, 'Unrecognized character \x{1f42a}; marked by <-- HERE after my $ニ <-- HERE near column 8 at (eval 11) line 1.
+', "'Unrecognized character' croak is UTF-8 clean";
+}
+
+{
+ use feature 'state';
+ for ( qw( my state our ) ) {
+ local $@;
+ eval "$_ Foo $x = 1;";
+ like $@, qr/No such class Foo/u, "'No such class' warning for $_ is UTF-8 clean";
+ }
+}
+
+{
+ local $@;
+ eval "our \$main::\x{30cb};";
+ like $@, qr!No package name allowed for variable \$main::\x{30cb} in "our"!, "'No such package name allowed for variable' is UTF-8 clean";
+}
+
+{
+ use feature 'state';
+ local $@;
+ for ( qw( my state ) ) {
+ eval "$_ \$::\x{30cb};";
+ like $@, qr!"$_" variable \$::\x{30cb} can't be in a package!, qq!'"$_" variable %s can't be in a package' is UTF-8 clean!;
+ }
+}
+
+{
+ local $@;
+ eval qq!print \x{30cb}, "comma""!;
+ like $@, qr/No comma allowed after filehandle/, "No comma allowed after filehandle triggers correctly for UTF-8 filehandles.";
+}
+
+# tests for "Bad name"
+eval q{ Foo::$bar };
+like( $@, qr/Bad name after Foo::/, 'Bad name after Foo::' );
+eval q{ Foo''bar };
+like( $@, qr/Bad name after Foo'/, 'Bad name after Foo\'' );
+
+{
+ no warnings 'utf8';
+ my $malformed_to_be = "\x{c0}\x{a0}"; # Overlong sequence
+ CORE::evalbytes "use charnames ':full'; use utf8; my \$x = \"\\N{abc$malformed_to_be}\"";
+ like( $@, qr/Malformed UTF-8 character immediately after '\\N\{abc' at .* within string/, 'Malformed UTF-8 input to \N{}');
+}
Added: vendor/perl/dist/t/uni/readline.t
===================================================================
--- vendor/perl/dist/t/uni/readline.t (rev 0)
+++ vendor/perl/dist/t/uni/readline.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,66 @@
+#!./perl
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+plan tests => 7;
+
+use utf8;
+use open qw( :utf8 :std );
+
+# [perl #19566]: sv_gets writes directly to its argument via
+# TARG. Test that we respect SvREADONLY.
+eval { for (\2) { $_ = <Fʜ> } };
+like($@, 'Modification of a read-only value attempted', '[perl #19566]');
+
+# [perl #21628]
+{
+ my $file = tempfile();
+ open Ạ,'+>',$file; $a = 3;
+ is($a .= <Ạ>, 3, '#21628 - $a .= <A> , A eof');
+ close Ạ; $a = 4;
+ is($a .= <Ạ>, 4, '#21628 - $a .= <A> , A closed');
+}
+
+use strict;
+
+open ᕝ, '.' and sysread ᕝ, $_, 1;
+my $err = $! + 0;
+close ᕝ;
+
+SKIP: {
+ skip "you can read directories as plain files", 2 unless( $err );
+
+ $!=0;
+ open ᕝ, '.' and $_=<ᕝ>;
+ ok( $!==$err && !defined($_) => 'readline( DIRECTORY )' );
+ close ᕝ;
+
+ $!=0;
+ { local $/;
+ open ᕝ, '.' and $_=<ᕝ>;
+ ok( $!==$err && !defined($_) => 'readline( DIRECTORY ) slurp mode' );
+ close ᕝ;
+ }
+}
+
+my $obj = bless [], "Ȼლᔆ";
+$obj .= <DATA>;
+like($obj, qr/Ȼლᔆ=ARRAY.*world/u, 'rcatline and refs');
+
+{
+ my $file = tempfile();
+ open my $out_fh, ">", $file;
+ print { $out_fh } "Data\n";
+ close $out_fh;
+
+ open hòฟ, "<", $file;
+ is( scalar(<hòฟ>), "Data\n", "readline() works correctly on UTF-8 filehandles" );
+ close hòฟ;
+}
+
+__DATA__
+world
Added: vendor/perl/dist/t/uni/select.t
===================================================================
--- vendor/perl/dist/t/uni/select.t (rev 0)
+++ vendor/perl/dist/t/uni/select.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,35 @@
+#!./perl
+
+#
+# Tests whenever the return value of select(FH) is correctly encoded.
+#
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+use utf8;
+use open qw( :utf8 :std );
+
+plan( tests => 5 );
+
+open DÙP, ">&", *STDERR;
+open $dùp, ">&", *STDOUT;
+open 둪, ">&", *STDERR;
+open $ᛞ웊, ">&", *STDOUT;
+
+is select(DÙP), "main::STDOUT";
+is select($dùp), "main::DÙP";
+
+TODO: {
+ local $TODO = "Scalar filehandles not yet clean";
+ is select(둪), "main::dùp";
+}
+
+is select($ᛞ웊), "main::둪";
+TODO: {
+ local $TODO = "Scalar filehandles not yet clean";
+ is select(STDOUT), "main::ᛞ웊";
+}
Added: vendor/perl/dist/t/uni/stash.t
===================================================================
--- vendor/perl/dist/t/uni/stash.t (rev 0)
+++ vendor/perl/dist/t/uni/stash.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,310 @@
+#!./perl
+
+#
+# various stash tests
+#
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+use utf8;
+use open qw( :utf8 :std );
+
+plan( tests => 58 );
+
+#These come from op/my_stash.t
+{
+ use constant Myクラス => 'ꕽ::Ʉ::ꔬz::ꢨᙇ';
+
+ {
+ package ꕽ::Ʉ::ꔬz::ꢨᙇ;
+ 1;
+ }
+
+ for (qw(ꕽ ꕽ:: Myクラス __PACKAGE__)) {
+ eval "sub { my $_ \$obj = shift; }";
+ ok ! $@, "op/my_stash.t test, $_";
+ }
+
+ use constant NòClàss => '노pӬ::ꕽ::Ꜻ::BӢz::ʙࡆ';
+
+ for (qw(노pӬ 노pӬ:: NòClàss)) {
+ eval "sub { my $_ \$obj = shift; }";
+ ok $@, "op/my_stash.t test";
+ }
+}
+
+#op/stash.t
+{
+ {
+ no warnings 'deprecated';
+ ok( defined %왿ퟀⲺa::ᒫṡ::, q(stashes happen to be defined if not used) );
+ ok( defined %{"왿ퟀⲺa::ᒫṡ::"}, q(- work with hard refs too) );
+
+ ok( defined %ᛐⲞɲe::Šꇇᚽṙᆂṗ::, q(stashes are defined if seen at compile time) );
+ ok( defined %{"ᛐⲞɲe::Šꇇᚽṙᆂṗ::"}, q(- work with hard refs too) );
+
+ ok( defined %본go::ଶfʦbᚒƴ::, q(stashes are defined if a var is seen at compile time) );
+ ok( defined %{"본go::ଶfʦbᚒƴ::"}, q(- work with hard refs too) );
+ }
+
+
+ package ᛐⲞɲe::Šꇇᚽṙᆂṗ;
+ $본go::ଶfʦbᚒƴ::scalar = 1;
+
+ package main;
+
+ # now tests in eval
+
+ ok( eval { no warnings 'deprecated'; defined %앛hȚꟻࡃҥ:: }, 'works in eval{}' );
+ ok( eval q{ no warnings 'deprecated'; defined %Ṧㄘㇹen맠ㄦ:: }, 'works in eval("")' );
+
+ # now tests with strictures
+
+ {
+ use strict;
+ no warnings 'deprecated';
+ ok( defined %piƓ::, q(referencing a non-existent stash doesn't produce stricture errors) );
+ ok( !exists $piƓ::{bodine}, q(referencing a non-existent stash element doesn't produce stricture errors) );
+ }
+
+ SKIP: {
+ eval { require B; 1 } or skip "no B", 28;
+
+ *b = \&B::svref_2object;
+ my $CVf_ANON = B::CVf_ANON();
+
+ my $sub = do {
+ package 온ꪵ;
+ \&{"온ꪵ"};
+ };
+ delete $온ꪵ::{온ꪵ};
+ my $gv = b($sub)->GV;
+
+ object_ok( $gv, "B::GV", "deleted stash entry leaves CV with valid GV");
+ is( b($sub)->CvFLAGS & $CVf_ANON, $CVf_ANON, "...and CVf_ANON set");
+ is( eval { $gv->NAME }, "__ANON__", "...and an __ANON__ name");
+ is( eval { $gv->STASH->NAME }, "온ꪵ", "...but leaves stash intact");
+
+ $sub = do {
+ package tꖿ;
+ \&{"tꖿ"};
+ };
+ %tꖿ:: = ();
+ $gv = b($sub)->GV;
+
+ object_ok( $gv, "B::GV", "cleared stash leaves CV with valid GV");
+ is( b($sub)->CvFLAGS & $CVf_ANON, $CVf_ANON, "...and CVf_ANON set");
+ is( eval { $gv->NAME }, "__ANON__", "...and an __ANON__ name");
+ is( eval { $gv->STASH->NAME }, "tꖿ", "...but leaves stash intact");
+
+ $sub = do {
+ package ᖟ레ᅦ;
+ \&{"ᖟ레ᅦ"};
+ };
+ undef %ᖟ레ᅦ::;
+ $gv = b($sub)->GV;
+
+ object_ok( $gv, "B::GV", "undefed stash leaves CV with valid GV");
+ is( b($sub)->CvFLAGS & $CVf_ANON, $CVf_ANON, "...and CVf_ANON set");
+ is( eval { $gv->NAME }, "__ANON__", "...and an __ANON__ name");
+ is( eval { $gv->STASH->NAME }, "__ANON__", "...and an __ANON__ stash");
+
+ my $sub = do {
+ package ꃖᚢ;
+ sub { 1 };
+ };
+ %ꃖᚢ:: = ();
+
+ my $gv = B::svref_2object($sub)->GV;
+ ok($gv->isa(q/B::GV/), "cleared stash leaves anon CV with valid GV");
+
+ my $st = eval { $gv->STASH->NAME };
+ is($st, q/ꃖᚢ/, "...but leaves the stash intact");
+
+ $sub = do {
+ package fꢄᶹᵌ;
+ sub { 1 };
+ };
+ undef %fꢄᶹᵌ::;
+
+ $gv = B::svref_2object($sub)->GV;
+ ok($gv->isa(q/B::GV/), "undefed stash leaves anon CV with valid GV");
+
+ $st = eval { $gv->STASH->NAME };
+
+ { local $TODO = 'STASHES not anonymized';
+ is($st, q/__ANON__/, "...and an __ANON__ stash");
+ }
+
+ $sub = do {
+ package sӥㄒ;
+ \&{"sӥㄒ"}
+ };
+ my $stash_glob = delete $::{"sӥㄒ::"};
+ # Now free the GV while the stash still exists (though detached)
+ delete $$stash_glob{"sӥㄒ"};
+ $gv = B::svref_2object($sub)->GV;
+ ok($gv->isa(q/B::GV/),
+ 'anonymised CV whose stash is detached still has a GV');
+ #fails because mro_gather_and_rename isn't clean
+ is $gv->STASH->NAME, '__ANON__',
+ 'CV anonymised when its stash is detached becomes __ANON__::__ANON__';
+
+ # CvSTASH should be null on a named sub if the stash has been deleted
+ {
+ package FŌŌ;
+ sub Ƒಓ {}
+ my $rfoo = \&Ƒಓ;
+ package main;
+ delete $::{'FŌŌ::'};
+ my $cv = B::svref_2object($rfoo);
+ # (is there a better way of testing for NULL ?)
+ my $stash = $cv->STASH;
+ like($stash, qr/B::SPECIAL/, "NULL CvSTASH on named sub");
+ }
+
+ # on glob reassignment, orphaned CV should have anon CvGV
+
+ {
+ my $r;
+ eval q[
+ package FŌŌ௨;
+ sub Ƒ{};
+ $r = \&Ƒ;
+ *Ƒ = sub {};
+ ];
+ delete $FŌŌ௨::{Ƒ};
+ my $cv = B::svref_2object($r);
+ my $gv = $cv->GV;
+ ok($gv->isa(q/B::GV/), "orphaned CV has valid GV");
+ is($gv->NAME, '__ANON__', "orphaned CV has anon GV");
+ }
+
+ # deleting __ANON__ glob shouldn't break things
+
+ {
+ package FŌŌ3;
+ sub 남えㄉ {};
+ my $anon = sub {};
+ my $남えㄉ = eval q[\&남えㄉ];
+ package main;
+ delete $FŌŌ3::{남えㄉ}; # make named anonymous
+
+ delete $FŌŌ3::{__ANON__}; # whoops!
+ my ($cv,$gv);
+ $cv = B::svref_2object($남えㄉ);
+ $gv = $cv->GV;
+ ok($gv->isa(q/B::GV/), "ex-named CV has valid GV");
+ is($gv->NAME, '__ANON__', "ex-named CV has anon GV");
+
+ $cv = B::svref_2object($anon);
+ $gv = $cv->GV;
+ ok($gv->isa(q/B::GV/), "anon CV has valid GV");
+ is($gv->NAME, '__ANON__', "anon CV has anon GV");
+ }
+
+ {
+ my $r;
+ {
+ package bᓙṗ;
+
+ BEGIN {
+ $r = \&main::Ẃⱒcᴷ;
+ }
+ }
+
+ my $br = B::svref_2object($r);
+ is ($br->STASH->NAME, 'bᓙṗ',
+ 'stub records the package it was compiled in');
+
+ # We need to take this reference "late", after the subroutine is
+ # defined.
+ $br = B::svref_2object(eval 'sub Ẃⱒcᴷ {}; \&Ẃⱒcᴷ');
+ die $@ if $@;
+
+ is ($br->STASH->NAME, 'main',
+ 'definition overrides the package it was compiled in');
+ like ($br->FILE, qr/eval/,
+ 'definition overrides the file it was compiled in');
+ }
+ }
+
+ # make sure having a sub called __ANON__ doesn't confuse perl.
+
+ {
+ package クラス;
+ my $c;
+ sub __ANON__ { $c = (caller(0))[3]; }
+ {
+ local $@;
+ eval { ok(1); };
+ ::like($@, qr/^Undefined subroutine &クラス::ok/);
+ }
+ __ANON__();
+ ::is ($c, 'クラス::__ANON__', '__ANON__ sub called ok');
+ }
+
+ # Stashes that are effectively renamed
+ {
+ package rìle;
+
+ use Config;
+
+ my $obj = bless [];
+ my $globref = \*tàt;
+
+ # effectively rename a stash
+ *slìn:: = *rìle::; *rìle:: = *zòr::;
+
+ ::is *$globref, "*rìle::tàt",
+ 'globs stringify the same way when stashes are moved';
+ ::is ref $obj, "rìle",
+ 'ref() returns the same thing when an object’s stash is moved';
+ ::like "$obj", qr "^rìle=ARRAY\(0x[\da-f]+\)\z",
+ 'objects stringify the same way when their stashes are moved';
+ ::is eval '__PACKAGE__', 'rìle',
+ '__PACKAGE__ returns the same when the current stash is moved';
+
+ # Now detach it completely from the symtab, making it effect-
+ # ively anonymous
+ my $life_raft = \%slìn::;
+ *slìn:: = *zòr::;
+
+ ::is *$globref, "*rìle::tàt",
+ 'globs stringify the same way when stashes are detached';
+ ::is ref $obj, "rìle",
+ 'ref() returns the same thing when an object’s stash is detached';
+ ::like "$obj", qr "^rìle=ARRAY\(0x[\da-f]+\)\z",
+ 'objects stringify the same way when their stashes are detached';
+ ::is eval '__PACKAGE__', 'rìle',
+ '__PACKAGE__ returns the same when the current stash is detached';
+ }
+
+ # Setting the name during undef %stash:: should have no effect.
+ {
+ my $glob = \*Phòò::glòb;
+ sub ò::DESTROY { eval '++$Phòò::bòr' }
+ no strict 'refs';
+ ${"Phòò::thòng1"} = bless [], "ò";
+ undef %Phòò::;
+ is "$$glob", "*__ANON__::glòb",
+ "setting stash name during undef has no effect";
+ }
+
+ # [perl #88134] incorrect package structure
+ {
+ package Bèàr::;
+ sub bàz{1}
+ package main;
+ ok eval { Bèàr::::bàz() },
+ 'packages ending with :: are self-consistent';
+ }
+
+ # [perl #88138] ' not equivalent to :: before a null
+ ${"à'\0b"} = "c";
+ is ${"à::\0b"}, "c", "' is equivalent to :: before a null";
+}
\ No newline at end of file
Added: vendor/perl/dist/t/uni/universal.t
===================================================================
--- vendor/perl/dist/t/uni/universal.t (rev 0)
+++ vendor/perl/dist/t/uni/universal.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,172 @@
+#!./perl
+#
+# check UNIVERSAL
+#
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ $| = 1;
+ require "./test.pl";
+}
+
+use utf8;
+use open qw( :utf8 :std );
+
+plan tests => 93;
+
+$a = {};
+bless $a, "Bòb";
+ok $a->isa("Bòb");
+
+package Hùmàn;
+sub èàt {}
+
+package Fèmàlè;
+ at ISA=qw(Hùmàn);
+
+package Àlìcè;
+ at ISA=qw(Bòb Fèmàlè);
+sub sìng;
+sub drìnk { return "drinking " . $_[1] }
+sub nèw { bless {} }
+
+$Àlìcè::VERSION = 2.718;
+
+{
+ package Cèdrìc;
+ our @ISA;
+ use base qw(Hùmàn);
+}
+
+{
+ package Prògràmmèr;
+ our $VERSION = 1.667;
+
+ sub wrìtè_perl { 1 }
+}
+
+package main;
+
+$a = nèw Àlìcè;
+
+ok $a->isa("Àlìcè");
+ok $a->isa("main::Àlìcè"); # check that alternate class names work
+ok(("main::Àlìcè"->nèw)->isa("Àlìcè"));
+
+ok $a->isa("Bòb");
+ok $a->isa("main::Bòb");
+
+ok $a->isa("Fèmàlè");
+
+ok $a->isa("Hùmàn");
+
+ok ! $a->isa("Màlè");
+
+ok ! $a->isa('Prògràmmèr');
+
+ok $a->isa("HASH");
+
+ok $a->can("èàt");
+ok ! $a->can("sleep");
+ok my $ref = $a->can("drìnk"); # returns a coderef
+is $a->$ref("tèà"), "drinking tèà"; # ... which works
+ok $ref = $a->can("sìng");
+eval { $a->$ref() };
+ok $@; # ... but not if no actual subroutine
+
+ok $a->can("VERSION");
+cmp_ok eval { $a->VERSION }, '==', 2.718;
+ok ! (eval { $a->VERSION(2.719) });
+like $@, qr/^Àlìcè version 2.719 required--this is only version 2.718 at /u;
+
+ok (!Cèdrìc->isa('Prògràmmèr'));
+
+ok (Cèdrìc->isa('Hùmàn'));
+
+push(@Cèdrìc::ISA,'Prògràmmèr');
+
+ok (Cèdrìc->isa('Prògràmmèr'));
+
+{
+ package Àlìcè;
+ base::->import('Prògràmmèr');
+}
+
+ok $a->isa('Prògràmmèr');
+ok $a->isa("Fèmàlè");
+
+ at Cèdrìc::ISA = qw(Bòb);
+
+ok (!Cèdrìc->isa('Prògràmmèr'));
+
+my $b = 'abc';
+my @refs = qw(SCALAR SCALAR LVALUE GLOB ARRAY HASH CODE);
+my @vals = ( \$b, \3.14, \substr($b,1,1), \*b, [], {}, sub {} );
+for ($p=0; $p < @refs; $p++) {
+ for ($q=0; $q < @vals; $q++) {
+ is UNIVERSAL::isa($vals[$p], $refs[$q]), ($p==$q or $p+$q==1);
+ };
+};
+
+
+ok UNIVERSAL::isa(Àlìcè => "UNIVERSAL");
+
+cmp_ok UNIVERSAL::can(Àlìcè => "can"), '==', \&UNIVERSAL::can;
+
+eval 'sub UNIVERSAL::slèèp {}';
+ok $a->can("slèèp");
+
+{
+ package Pìckùp;
+ no warnings "deprecated";
+ use UNIVERSAL qw( isa can VERSION );
+
+ ::ok isa "Pìckùp", UNIVERSAL;
+ ::cmp_ok can( "Pìckùp", "can" ), '==', \&UNIVERSAL::can;
+ ::ok VERSION "UNIVERSAL" ;
+}
+
+package Fòò;
+
+sub DOES { 1 }
+
+package Bàr;
+
+ at Bàr::ISA = 'Fòò';
+
+package Bàz;
+
+package main;
+ok( Fòò->DOES( 'bàr' ), 'DOES() should call DOES() on class' );
+ok( Bàr->DOES( 'Bàr' ), '... and should fall back to isa()' );
+ok( Bàr->DOES( 'Fòò' ), '... even when inherited' );
+ok( Bàz->DOES( 'Bàz' ), '... even without inheriting any other DOES()' );
+ok( ! Bàz->DOES( 'Fòò' ), '... returning true or false appropriately' );
+
+package Pìg;
+package Bòdìnè;
+Bòdìnè->isa('Pìg');
+
+package main;
+eval { UNIVERSAL::DOES([], "fòò") };
+like( $@, qr/Can't call method "DOES" on unblessed reference/,
+ 'DOES call error message says DOES, not isa' );
+
+# Tests for can seem to be split between here and method.t
+# Add the verbatim perl code mentioned in the comments of
+# http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-05/msg01710.html
+# but never actually tested.
+is(UNIVERSAL->can("NòSùchPàckàgè::fòò"), undef);
+
+ at splàtt::ISA = 'zlòpp';
+ok (splàtt->isa('zlòpp'));
+ok (!splàtt->isa('plòp'));
+
+# This should reset the ->isa lookup cache
+ at splàtt::ISA = 'plòp';
+# And here is the new truth.
+ok (!splàtt->isa('zlòpp'));
+ok (splàtt->isa('plòp'));
+
+
Added: vendor/perl/dist/t/uni/variables.t
===================================================================
--- vendor/perl/dist/t/uni/variables.t (rev 0)
+++ vendor/perl/dist/t/uni/variables.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,229 @@
+#!./perl
+
+# Checks if the parser behaves correctly in edge case
+# (including weird syntax errors)
+
+BEGIN {
+ require './test.pl';
+}
+
+use 5.016;
+use utf8;
+use open qw( :utf8 :std );
+no warnings qw(misc reserved);
+
+plan (tests => 65869);
+
+# ${single:colon} should not be valid syntax
+{
+ no strict;
+
+ local $@;
+ eval "\${\x{30cd}single:\x{30cd}colon} = 1";
+ like($@,
+ qr/syntax error .* near "\x{30cd}single:/,
+ '${\x{30cd}single:\x{30cd}colon} should not be valid syntax'
+ );
+
+ local $@;
+ no utf8;
+ evalbytes '${single:colon} = 1';
+ like($@,
+ qr/syntax error .* near "single:/,
+ '...same with ${single:colon}'
+ );
+}
+
+# ${yadda'etc} and ${yadda::etc} should both work under strict
+{
+ local $@;
+ eval q<use strict; ${flark::fleem}>;
+ is($@, '', q<${package::var} works>);
+
+ local $@;
+ eval q<use strict; ${fleem'flark}>;
+ is($@, '', q<...as does ${package'var}>);
+}
+
+# The first character in ${...} should respect the rules
+{
+ local $@;
+ use utf8;
+ eval '${☭asd} = 1';
+ like($@, qr/\QUnrecognized character/, q(the first character in ${...} isn't special))
+}
+
+# Checking that at least some of the special variables work
+for my $v (qw( ^V ; < > ( ) {^GLOBAL_PHASE} ^W _ 1 4 0 [ ] ! @ / \ = )) {
+ local $@;
+ evalbytes "\$$v;";
+ is $@, '', "No syntax error for \$$v";
+
+ local $@;
+ eval "use utf8; \$$v;";
+ is $@, '', "No syntax error for \$$v under use utf8";
+}
+
+# Checking if the Latin-1 range behaves as expected, and that the behavior is the
+# same whenever under strict or not.
+for ( 0x80..0xff ) {
+ no warnings 'closure';
+ my $chr = chr;
+ my $esc = sprintf("%X", ord $chr);
+ utf8::downgrade($chr);
+ if ($chr !~ /\p{XIDS}/u) {
+ is evalbytes "no strict; \$$chr = 10",
+ 10,
+ sprintf("\\x%02x, part of the latin-1 range, is legal as a length-1 variable", $_);
+
+ utf8::upgrade($chr);
+ local $@;
+ eval "no strict; use utf8; \$$chr = 1";
+ like $@,
+ qr/\QUnrecognized character \x{\E\L$esc/,
+ sprintf("..but is illegal as a length-1 variable under use utf8", $_);
+ }
+ else {
+ {
+ no utf8;
+ local $@;
+ evalbytes "no strict; \$$chr = 1";
+ is($@, '', sprintf("\\x%02x, =~ \\p{XIDS}, latin-1, no utf8, no strict, is a valid length-1 variable", $_));
+
+ local $@;
+ evalbytes "use strict; \$$chr = 1";
+ is($@,
+ '',
+ sprintf("\\x%02x under no utf8 does not have to be required under strict, even though it matches XIDS", $_)
+ );
+
+ local $@;
+ evalbytes "\$a$chr = 1";
+ like($@,
+ qr/Unrecognized character /,
+ sprintf("...but under no utf8, it's not allowed in two-or-more character variables")
+ );
+
+ local $@;
+ evalbytes "\$a$chr = 1";
+ like($@,
+ qr/Unrecognized character /,
+ sprintf("...but under no utf8, it's not allowed in two-or-more character variables")
+ );
+ }
+ {
+ use utf8;
+ my $u = $chr;
+ utf8::upgrade($u);
+ local $@;
+ eval "no strict; \$$u = 1";
+ is($@, '', sprintf("\\x%02x, =~ \\p{XIDS}, UTF-8, use utf8, no strict, is a valid length-1 variable", $_));
+
+ local $@;
+ eval "use strict; \$$u = 1";
+ like($@,
+ qr/Global symbol "\$$u" requires explicit package name/,
+ sprintf("\\x%02x under utf8 has to be required under strict", $_)
+ );
+ }
+ }
+}
+
+{
+ use utf8;
+ my $ret = eval "my \$c\x{327} = 100; \$c\x{327}"; # c + cedilla
+ is($@, '', "ASCII character + combining character works as a variable name");
+ is($ret, 100, "...and returns the correct value");
+}
+
+# From Tom Christiansen's 'highly illegal variable names are now accidentally legal' mail
+for my $chr (
+ "\N{EM DASH}", "\x{F8FF}", "\N{POUND SIGN}", "\N{SOFT HYPHEN}",
+ "\N{THIN SPACE}", "\x{11_1111}", "\x{DC00}", "\N{COMBINING DIAERESIS}",
+ "\N{COMBINING ENCLOSING CIRCLE BACKSLASH}",
+ )
+{
+ no warnings 'non_unicode';
+ my $esc = sprintf("%x", ord $chr);
+ local $@;
+ eval "\$$chr = 1; \$$chr";
+ like($@,
+ qr/\QUnrecognized character \x{$esc};/,
+ "\\x{$esc} is illegal for a length-one identifier"
+ );
+}
+
+for my $i (0x100..0xffff) {
+ my $chr = chr($i);
+ my $esc = sprintf("%x", $i);
+ local $@;
+ eval "my \$$chr = q<test>; \$$chr;";
+ if ( $chr =~ /^\p{_Perl_IDStart}$/ ) {
+ is($@, '', sprintf("\\x{%04x} is XIDS, works as a length-1 variable", $i));
+ }
+ else {
+ like($@,
+ qr/\QUnrecognized character \x{$esc};/,
+ "\\x{$esc} isn't XIDS, illegal as a length-1 variable",
+ )
+ }
+}
+
+{
+ # Bleadperl v5.17.9-109-g3283393 breaks ZEFRAM/Module-Runtime-0.013.tar.gz
+ # https://rt.perl.org/rt3/Public/Bug/Display.html?id=117101
+ no strict;
+
+ local $@;
+ eval <<'EOP';
+ q{$} =~ /(.)/;
+ is($$1, $$, q{$$1 parses as ${$1}});
+
+ $doof = "test";
+ $test = "Got here";
+ $::{+$$} = *doof;
+
+ is( $$$$1, $test, q{$$$$1 parses as ${${${$1}}}} );
+EOP
+ is($@, '', q{$$1 parses correctly});
+
+ for my $chr ( q{@}, "\N{U+FF10}", "\N{U+0300}" ) {
+ my $esc = sprintf("\\x{%x}", ord $chr);
+ local $@;
+ eval <<" EOP";
+ \$$chr = q{\$};
+ \$\$$chr;
+ EOP
+
+ like($@,
+ qr/syntax error|Unrecognized character/,
+ qq{\$\$$esc is a syntax error}
+ );
+ }
+}
+
+{
+ # bleadperl v5.17.9-109-g3283393 breaks JEREMY/File-Signature-1.009.tar.gz
+ # https://rt.perl.org/rt3/Ticket/Display.html?id=117145
+ local $@;
+ my $var = 10;
+ eval ' ${ var }';
+
+ is(
+ $@,
+ '',
+ '${ var } works under strict'
+ );
+
+ {
+ no strict;
+ for my $var ( '$', "\7LOBAL_PHASE", "^GLOBAL_PHASE", "^V" ) {
+ eval "\${ $var}";
+ is($@, '', "\${ $var} works" );
+ eval "\${$var }";
+ is($@, '', "\${$var } works" );
+ eval "\${ $var }";
+ is($@, '', "\${ $var } works" );
+ }
+ }
+}
Added: vendor/perl/dist/t/win32/fs.t
===================================================================
--- vendor/perl/dist/t/win32/fs.t (rev 0)
+++ vendor/perl/dist/t/win32/fs.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,28 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require "./test.pl";
+ eval 'use Errno';
+ die $@ if $@ and !is_miniperl();
+}
+
+plan tests => 4;
+
+my $tmpfile1 = tempfile();
+my $tmpfile2 = tempfile();
+
+# RT #112272
+ok(!link($tmpfile1, $tmpfile2),
+ "Cannot link to unknown file");
+is(0+$!, &Errno::ENOENT, "check errno is ENOENT");
+open my $fh, ">", $tmpfile1
+ or skip("Cannot create test link src", 2);
+close $fh;
+open my $fh, ">", $tmpfile2
+ or skip("Cannot create test link target", 2);
+close $fh;
+ok(!link($tmpfile1, $tmpfile2),
+ "Cannot link to existing file");
+is(0+$!, &Errno::EEXIST, "check for EEXIST");
Added: vendor/perl/dist/t/win32/runenv.t
===================================================================
--- vendor/perl/dist/t/win32/runenv.t (rev 0)
+++ vendor/perl/dist/t/win32/runenv.t 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,253 @@
+#!./perl
+#
+# Tests for Perl run-time environment variable settings
+# Clone of t/run/runenv.t but without the forking, and with cmd.exe-friendly -e syntax.
+#
+# $PERL5OPT, $PERL5LIB, etc.
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require Config; import Config;
+ require File::Temp; import File::Temp qw/:POSIX/;
+
+ require Win32;
+ ($::os_id, $::os_major) = ( Win32::GetOSVersion() )[ 4, 1 ];
+ if ($::os_id == 2 and $::os_major == 6) { # Vista, Server 2008 (incl R2), 7
+ $::tests = 43;
+ }
+ else {
+ $::tests = 40;
+ }
+
+ require './test.pl';
+}
+
+skip_all "requires compilation with PERL_IMPLICIT_SYS"
+ unless $Config{ccflags} =~/(?:\A|\s)-DPERL_IMPLICIT_SYS\b/;
+
+plan tests => $::tests;
+
+my $PERL = $ENV{PERL} || '.\perl';
+my $NL = $/;
+
+delete $ENV{PERLLIB};
+delete $ENV{PERL5LIB};
+delete $ENV{PERL5OPT};
+
+
+# Run perl with specified environment and arguments, return (STDOUT, STDERR)
+sub runperl_and_capture {
+ my ($env, $args) = @_;
+
+ # Clear out old env
+ local %ENV = %ENV;
+ delete $ENV{PERLLIB};
+ delete $ENV{PERL5LIB};
+ delete $ENV{PERL5OPT};
+
+ # Populate with our desired env
+ for my $k (keys %$env) {
+ $ENV{$k} = $env->{$k};
+ }
+
+ # This is slightly expensive, but this is more reliable than
+ # trying to emulate fork(), and we still get STDERR and STDOUT individually.
+ my $stderr_cache = tmpnam();
+ my $stdout = `$PERL @$args 2>$stderr_cache`;
+ my $stderr = '';
+ if (-s $stderr_cache) {
+ open(my $stderr_cache_fh, "<", $stderr_cache)
+ or die "Could not retrieve STDERR output: $!";
+ while ( defined(my $s_line = <$stderr_cache_fh>) ) {
+ $stderr .= $s_line;
+ }
+ close $stderr_cache_fh;
+ unlink $stderr_cache;
+ }
+
+ return ($stdout, $stderr);
+}
+
+sub try {
+ my ($env, $args, $stdout, $stderr) = @_;
+ my ($actual_stdout, $actual_stderr) = runperl_and_capture($env, $args);
+ local $::Level = $::Level + 1;
+ is $actual_stdout, $stdout;
+ is $actual_stderr, $stderr;
+}
+
+# PERL5OPT Command-line options (switches). Switches in
+# this variable are taken as if they were on
+# every Perl command line. Only the -[DIMUdmtw]
+# switches are allowed. When running taint
+# checks (because the program was running setuid
+# or setgid, or the -T switch was used), this
+# variable is ignored. If PERL5OPT begins with
+# -T, tainting will be enabled, and any
+# subsequent options ignored.
+
+try({PERL5OPT => '-w'}, ['-e', '"print $::x"'],
+ "",
+ qq(Name "main::x" used only once: possible typo at -e line 1.${NL}Use of uninitialized value \$x in print at -e line 1.${NL}));
+
+try({PERL5OPT => '-Mstrict'}, ['-I..\lib', '-e', '"print $::x"'],
+ "", "");
+
+try({PERL5OPT => '-Mstrict'}, ['-I..\lib', '-e', '"print $x"'],
+ "",
+ qq(Global symbol "\$x" requires explicit package name at -e line 1.${NL}Execution of -e aborted due to compilation errors.${NL}));
+
+# Fails in 5.6.0
+try({PERL5OPT => '-Mstrict -w'}, ['-I..\lib', '-e', '"print $x"'],
+ "",
+ qq(Global symbol "\$x" requires explicit package name at -e line 1.${NL}Execution of -e aborted due to compilation errors.${NL}));
+
+# Fails in 5.6.0
+try({PERL5OPT => '-w -Mstrict'}, ['-I..\lib', '-e', '"print $::x"'],
+ "",
+ <<ERROR
+Name "main::x" used only once: possible typo at -e line 1.
+Use of uninitialized value \$x in print at -e line 1.
+ERROR
+ );
+
+# Fails in 5.6.0
+try({PERL5OPT => '-w -Mstrict'}, ['-I..\lib', '-e', '"print $::x"'],
+ "",
+ <<ERROR
+Name "main::x" used only once: possible typo at -e line 1.
+Use of uninitialized value \$x in print at -e line 1.
+ERROR
+ );
+
+try({PERL5OPT => '-MExporter'}, ['-I..\lib', '-e0'],
+ "",
+ "");
+
+# Fails in 5.6.0
+try({PERL5OPT => '-MExporter -MExporter'}, ['-I..\lib', '-e0'],
+ "",
+ "");
+
+try({PERL5OPT => '-Mstrict -Mwarnings'},
+ ['-I..\lib', '-e', '"print \"ok\" if $INC{\"strict.pm\"} and $INC{\"warnings.pm\"}"'],
+ "ok",
+ "");
+
+open my $fh, ">", "Oooof.pm" or die "Can't write Oooof.pm: $!";
+print $fh "package Oooof; 1;\n";
+close $fh;
+END { 1 while unlink "Oooof.pm" }
+
+try({PERL5OPT => '-I. -MOooof'},
+ ['-e', '"print \"ok\" if $INC{\"Oooof.pm\"} eq \"Oooof.pm\""'],
+ "ok",
+ "");
+
+try({PERL5OPT => '-w -w'},
+ ['-e', '"print $ENV{PERL5OPT}"'],
+ '-w -w',
+ '');
+
+try({PERL5OPT => '-t'},
+ ['-e', '"print ${^TAINT}"'],
+ '-1',
+ '');
+
+try({PERL5OPT => '-W'},
+ ['-I..\lib','-e', '"local $^W = 0; no warnings; print $x"'],
+ '',
+ <<ERROR
+Name "main::x" used only once: possible typo at -e line 1.
+Use of uninitialized value \$x in print at -e line 1.
+ERROR
+);
+
+try({PERLLIB => "foobar$Config{path_sep}42"},
+ ['-e', '"print grep { $_ eq \"foobar\" } @INC"'],
+ 'foobar',
+ '');
+
+try({PERLLIB => "foobar$Config{path_sep}42"},
+ ['-e', '"print grep { $_ eq \"42\" } @INC"'],
+ '42',
+ '');
+
+try({PERL5LIB => "foobar$Config{path_sep}42"},
+ ['-e', '"print grep { $_ eq \"foobar\" } @INC"'],
+ 'foobar',
+ '');
+
+try({PERL5LIB => "foobar$Config{path_sep}42"},
+ ['-e', '"print grep { $_ eq \"42\" } @INC"'],
+ '42',
+ '');
+
+try({PERL5LIB => "foo",
+ PERLLIB => "bar"},
+ ['-e', '"print grep { $_ eq \"foo\" } @INC"'],
+ 'foo',
+ '');
+
+try({PERL5LIB => "foo",
+ PERLLIB => "bar"},
+ ['-e', '"print grep { $_ eq \"bar\" } @INC"'],
+ '',
+ '');
+
+# Tests for S_incpush_use_sep():
+
+my @dump_inc = ('-e', '"print \"$_\n\" foreach @INC"');
+
+my ($out, $err) = runperl_and_capture({}, [@dump_inc]);
+
+is ($err, '', 'No errors when determining @INC');
+
+my @default_inc = split /\n/, $out;
+
+is ($default_inc[-1], '.', '. is last in @INC');
+
+my $sep = $Config{path_sep};
+my @test_cases = (
+ ['nothing', ''],
+ ['something', 'zwapp', 'zwapp'],
+ ['two things', "zwapp${sep}bam", 'zwapp', 'bam'],
+ ['two things, ::', "zwapp${sep}${sep}bam", 'zwapp', 'bam'],
+ [': at start', "${sep}zwapp", 'zwapp'],
+ [': at end', "zwapp${sep}", 'zwapp'],
+ [':: sandwich ::', "${sep}${sep}zwapp${sep}${sep}", 'zwapp'],
+ [':', "${sep}"],
+ ['::', "${sep}${sep}"],
+ [':::', "${sep}${sep}${sep}"],
+ ['two things and :', "zwapp${sep}bam${sep}", 'zwapp', 'bam'],
+ [': and two things', "${sep}zwapp${sep}bam", 'zwapp', 'bam'],
+ [': two things :', "${sep}zwapp${sep}bam${sep}", 'zwapp', 'bam'],
+ ['three things', "zwapp${sep}bam${sep}${sep}owww",
+ 'zwapp', 'bam', 'owww'],
+);
+
+# This block added to verify fix for RT #87322
+if ($::os_id == 2 and $::os_major == 6) { # Vista, Server 2008 (incl R2), 7
+ my @big_perl5lib = ('z' x 16) x 2049;
+ push @testcases, [
+ 'enough items so PERL5LIB val is longer than 32k',
+ join($sep, @big_perl5lib), @big_perl5lib,
+ ];
+}
+
+foreach ( @testcases ) {
+ my ($name, $lib, @expect) = @$_;
+ push @expect, @default_inc;
+
+ ($out, $err) = runperl_and_capture({PERL5LIB => $lib}, [@dump_inc]);
+
+ is ($err, '', "No errors when determining \@INC for $name");
+
+ my @inc = split /\n/, $out;
+
+ is (scalar @inc, scalar @expect,
+ "expected number of elements in \@INC for $name");
+
+ is ("@inc", "@expect", "expected elements in \@INC for $name");
+}
Added: vendor/perl/dist/utils/pod2html.PL
===================================================================
--- vendor/perl/dist/utils/pod2html.PL (rev 0)
+++ vendor/perl/dist/utils/pod2html.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,53 @@
+#!/usr/local/bin/perl
+
+use Config;
+use File::Basename qw(&basename &dirname);
+use Cwd;
+
+# List explicitly here the variables you want Configure to
+# generate. Metaconfig only looks for shell variables, so you
+# have to mention them as if they were shell variables, not
+# %Config entries. Thus you write
+# $startperl
+# to ensure Configure will look for $Config{startperl}.
+
+# This forces PL files to create target in same directory as PL file.
+# This is so that make depend always knows where to find PL derivatives.
+my $origdir = cwd;
+chdir dirname($0);
+my $file = basename($0, '.PL');
+$file .= '.com' if $^O eq 'VMS';
+
+open OUT,">$file" or die "Can't create $file: $!";
+
+print "Extracting $file (with variable substitutions)\n";
+
+# In this section, perl variables will be expanded during extraction.
+# You can use $Config{...} to use Configure variables.
+
+print OUT <<"!GROK!THIS!";
+$Config{startperl}
+ eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+!GROK!THIS!
+
+use File::Spec;
+
+my $script = File::Spec->catfile(
+ File::Spec->catdir(
+ File::Spec->updir, qw(ext Pod-Html bin),
+ ),
+ 'pod2html',
+);
+
+if (open(IN, $script)) {
+ print OUT <IN>;
+ close IN;
+} else {
+ die "$0: cannot find '$script'\n";
+}
+
+close OUT or die "Can't close $file: $!";
+chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
+exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
+chdir $origdir;
Added: vendor/perl/dist/utils/zipdetails.PL
===================================================================
--- vendor/perl/dist/utils/zipdetails.PL (rev 0)
+++ vendor/perl/dist/utils/zipdetails.PL 2013-12-02 04:27:49 UTC (rev 6434)
@@ -0,0 +1,51 @@
+#!/usr/local/bin/perl
+
+use Config;
+use File::Basename qw(&basename &dirname);
+use Cwd;
+
+# List explicitly here the variables you want Configure to
+# generate. Metaconfig only looks for shell variables, so you
+# have to mention them as if they were shell variables, not
+# %Config entries. Thus you write
+# $startperl
+# to ensure Configure will look for $Config{startperl}.
+
+# This forces PL files to create target in same directory as PL file.
+# This is so that make depend always knows where to find PL derivatives.
+my $origdir = cwd;
+chdir dirname($0);
+my $file = basename($0, '.PL');
+$file .= '.com' if $^O eq 'VMS';
+
+open OUT,">$file" or die "Can't create $file: $!";
+
+print "Extracting $file (with variable substitutions)\n";
+
+# In this section, perl variables will be expanded during extraction.
+# You can use $Config{...} to use Configure variables.
+
+print OUT <<"!GROK!THIS!";
+$Config{startperl}
+ eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
+ if \$running_under_some_shell;
+!GROK!THIS!
+
+use File::Spec;
+
+my $script = File::Spec->catfile(
+ File::Spec->catdir(
+ File::Spec->updir, qw[ cpan IO-Compress bin ]
+ ), "zipdetails");
+
+if (open(IN, $script)) {
+ print OUT <IN>;
+ close IN;
+} else {
+ die "$0: cannot find '$script'\n";
+}
+
+close OUT or die "Can't close $file: $!";
+chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
+exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
+chdir $origdir;
More information about the Midnightbsd-cvs
mailing list